{"version":3,"sources":["webpack:///./wwwroot/scripts/neo-alohabar.min.js","webpack:///webpack/bootstrap e0aa721207e14beda811","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/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/AnimationFrame/Pool.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/FreeRoundBonus.ts","webpack:///./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.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/FreeRoundBonusIcon.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/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/GameComponents/PaylinesDefinitions.ts","webpack:///./Engine/Game/GameComponents/Symbol.ts","webpack:///./Engine/Game/Components/Elements/Graphics/TimelineElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts","webpack:///./Engine/Game/Components/Elements/Texts/ImageTextElement.ts","webpack:///./Engine/Game/Components/Sounds/Song.ts","webpack:///./Engine/Game/GameComponents/Machine.ts","webpack:///./Engine/Game/GameComponents/Reel.ts","webpack:///./Engine/Game/CustomComponents/ReelExtended.ts","webpack:///./Engine/Game/GameComponents/Character.ts","webpack:///./Engine/Game/Managers/LayoutManager.ts","webpack:///./Engine/Game/CustomComponents/LayoutContainerElement.ts","webpack:///./Engine/Game/Channels/Desktop/DesktopBonusRespinsUserControls.ts","webpack:///./Engine/Game/Channels/Common/Actions/BonusRespinsActions.ts","webpack:///./Engine/Game/GameComponents/BonusRespins/BonusRespinsController.ts","webpack:///./Engine/Game/GameComponents/BonusRespins/BonusRespinsModel.ts","webpack:///./Engine/Game/GameComponents/BonusRespins/BonusRespinsView.ts","webpack:///./Engine/Game/GameComponents/BonusRespins/BonusSymbol.ts","webpack:///./Engine/Game/Channels/Mobile/MobileBonusRespinsUserControls.ts","webpack:///./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts","webpack:///./Engine/Game/Components/Managers/ActionManager.ts","webpack:///./Engine/Game/Components/Elements/Graphics/SpineElement.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/Channels/Common/Dialogs/ChangeBetDialog.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/ParticleAnimationElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts","webpack:///./Engine/Game/Components/Elements/Graphics/ProtonElement.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/LayoutImageElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutShapeElement.ts","webpack:///./Engine/Game/CustomComponents/LayoutSwitchElement.ts","webpack:///./Engine/Game/CustomComponents/MachineExtended.ts","webpack:///./Engine/Game/CustomComponents/ReelAvalanche.ts","webpack:///./Engine/Game/CustomComponents/WinAnimatorExtended.ts","webpack:///./Engine/Game/GameComponents/CollectFrames.ts","webpack:///./Engine/Game/GameComponents/GameMultipliers.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","FreeRoundBonus_1","Scaling_1","SplashScreen_1","RetentionPanel_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","FreeRoundBonus","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","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","baseStage","baseStageContainer","render","bonusStage","bonusStageContainer","requestAnimationFrame","log","s","UpdatedTextures","FPS","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","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","Pool_1","AnimationFrameClass","Superclass","sc","AnimationFrame","_frame_stopped","_frame_starting","_frame_stopping","_frame_uid","frame_draw","Error","frame_name","frame_log","msg","isError","AnimationFramePool","registerFrame","unregisterFrame","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","__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","runAlphaTween","runPositionTween","runRotationTween","runScaleTween","runTween","logError","ALPHA_TWEEN","alphaTween","ArrayUtils","numberArray","alphas","tweenEase","assignStringAttribute","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","RELATIVE","map","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","push","getGlobalPosition","pointsString","valuesPair","PI","radians","maskEnabled","enable","removeChild","engineComponent","ComponentTypes","DisplayObject","DEBUG","ABSOLUTE","ROTATION_TWEEN_DEGREES","StyleManager_1","_color","_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","draw","endFill","drawRect","objectType","drawCircle","drawEllipse","path","points","point","Point","drawPolygon","multiple","arraysNumbers","drawRoundedRect","next","firstElementChild","shapeElement","nextElementSibling","Graphics","Element","HtmlElement","PlayList","Song","Style","HtmlStyle","Controller","LinkedElement","ActionSet","GsapEffects_1","registerTween","uid","tweenArray","getRegisteredTweens","keys","removeTweenFromRegistry","splice","restartTweens","restart","object","undefined","kill","_a","shift","GsapEffects","alphaTween_Tweenlite","alphaTween_TimelineLite","objectName","Array","positionTween_Tweenlite","positionTween_TimelineLite","bezierTween","bezier","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","bezierTweenLite","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","set","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","frame","progress","totalProgress","_labels","smoothChildTiming","_sortChildren","onUpdate","v","join","indexOf","_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","skew","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","createCustomEasing","dataTeasingEase","cleanup","HtmlStyles","parseElements","startNode","nodes","getNodesList","EngineComponentFactory","isTypeOf","nodeList","attribute","radix","pool","framesPool","frame_uid","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","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","DataBonusSpinRemainingCount","DataBonusTotalWin","DataBonusTotalWinDenom","DataBonusSpinCount","DataBonusSpinWonCount","DataGambleAttempts","DataHelpGameLimit","DataHelpGambleLimit","DataHelpGambleCountLimit","DataHelpRTP","DataHelpVersion","DataHelpMaxPayoutProbability","DataHelpMaxPayoutFrequency","DataHelpMinBet","DataHelpMaxBet","DataExpirationResolveHours","DataFrbRemainginCount","DataFrbAssignedCount","DataFrbRulesLink","DataFrbValidTo","DataFrbExpiryTime","DataFrbWin","DataGameTitle","DataHelpJackpotVisibleLimit","DataHelpJackpotQualifyingBetsMin","DataHelpJackpotQualifyingBetsMax","BetManager_1","BalanceManager_1","UserAction_1","QuickspinDialog_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","gameMultiplier","collectingSymbols","collectedSymbols","clearCollectedSymbolsForCurrentBet","customBetData","getCustomBetDataForCurrentBetAmount","inFrb","totalWin","CoinSize","devide","updateTotalGain","calculate","customWin","totalGain","TOTAL_GAIN","bet","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","hasSettingsMenu","showDataElements","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","app","onErrorResponse","errorReceived","isBackgroundMusicEnabled","getBackgroundMusic","NotificationManager","_app","connectModules","wasInitialized","showGame","Paytable","openAtStart","disableUi","setupGame","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","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","BonusRespins","bonusRespinsResponse","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","bonusActive","gambleEnabled","AutoplayGambleEnabled","Active","enableGamble","startGamble","outroModule","disable","enableBonus","bonusEnabled","startBonus","endBonus","animate","introModule","long","intro","outro","firstWinStep","dispatchAction","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","BaseModel_1","_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","BaseModel","spinContinue","FreeRoundBonusDialog_1","FreeRoundBonusIcon_1","sendFreeRoundsOffersRequest","getCurrentOfferReceived","err","activateOffer","featureStarted","FreeRoundBonusIcon","showIcon","setOfferId","sendFreeRoundsActivateOfferRequest","activateOfferReceived","declineOffer","FreeRoundBonusDialog","hideDialog","hideAllIcons","sendFreeRoundsDeclineOfferRequest","declineOfferReceived","refreshCurrentOffers","initalize","featureInit","countDown","playing","frbSpin","reopenFreeRounds","validTo","countDownDate","distance","revalidateOtherGames","countDownOther","endFreeRounds","finishFreeRounds","featureFinished","remainingFrbCount","roundsAssigned","roundsPlayed","roundsStarted","hasFeature","featureName","expiredFreeRounds","termsUrl","currentOffer","remainingCount","winType","hasBuyFeature","buyFeatureName","otherOffers","valid","assignedCount","rulesLink","blockFrbExpiration","days","enableGame","hasNewActiveOffer","updateRemainingCount","canInitDynamicFRB","softInitialize","enabledUi","isDisabled","disableActiveIcon","enableActiveIcon","revalidate","enableFrbExpiration","DialogContentOther","DialogContentOther2","DialogContentOtherList","DialogContentOtherList2","DialogContentNew","DialogContentActive","DialogContentEnd","DialogContentExpired","ConfirmationDialog","DialogButtonPlay","DialogButtonPostPone","DialogButtonDeny","DialogButtonOk","DialogButtonYes","DialogButtonNo","bindEvents","setupFRBDialogByConfiguration","hideAllContents","closeMenu","showElement","isConfirmationDialogOpened","refillOtherGames","ShowSimilarGames","setConfirmationDialog","setPoinerEventsButtons","pointerEvents","hideElement","onPlay","onPostPone","onDeny","onOk","onYes","onNo","disableElement","restoreDialog","otherOffersKeys","createItem","gameCode","noClick","itemHolder","itemLoading","itemLoadingIcon","itemLogo","selectGame","newUrl_1","gameChange","handleChangeGame","FRBShowDenyButton","hideFRBDenyButton","FRBShowPostponeButton","hideFRBPostPoneButton","infoMsg","dialogActive","SoundManager_1","addToPlayList","song","Songs","SoundManager","fadeIn","loop","fadeOut","stopAll","stopAllInGroup","group","toggle","toggleGroup","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","IconNew","IconActive","toggleCumulative","handleIconClick","onNew","onActive","isDis","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","spin","GameRequest","callBackFcn","spinReceived","roundStarted","freeRound","BaseActions","ActionSpin","respin","respinReceived","currentWin","LastScreen","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","setVolume","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","dataIds","preventResizeIds","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","GAME_MULTIPLIERS","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","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","SpineElement_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","SpineElement","Data","Atlas","removeAllListeners","loadError","loadAllGroupsCompleted","loadResources","resolveSingleCallback","resolveCallback","CanvasFallback","preloader","versionId","spineLoaderOptions","metadata","spineAtlasSuffix","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","DesktopBonusRespinsUserControls_1","MobileBonusRespinsUserControls_1","MobileBaseUserControls_1","customRoot","DesktopBaseUserControls","DesktopBonusRespinsUserControls","MobileBaseUserControls","GambleUserControls","MobileBonusRespinsUserControls","UserControls_1","GambleActions_1","GambleController_1","Color","_collectedWinValue","_collectDelay","_allowStart","_gambleTickerDefault","_gambleTickerHalveLimit","_gambleTickerSoftLimit","_gambleTickerGameLimit","registerActions","_screen","_controller","GambleController","StartReceived","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","condition","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","CustomUtils_1","_wasCalclulated","_unColectedWin","_machineStopped","longIntro","_afterWinDelay","_autoplayDelay","autoplayDelayed","_unColectedWinDelay","unColectedWinDelay","_userControls","BaseController","SpinReceived","MachineStopped","machineStopped","QuickWinCalculationFinished","quickWinCalculationFinished","MachineStoppedWithAnimation","machineStoppedWithAnimation","_userControls_supreme","_paytable","updateReelsByBetChange","GameActions","ActionSpinOrStop","autoplay","autoplayStop","checkJackpotMiniGame","forceShowCollectSymbols","balanceTotal","inSpin","canSpinOnCollect","spinStarted","ShowMaxBetMessage","MaxButton","spinEnded","previousModule","CustomUtils","isRespinEnabled","isRespinActive","prepareJackpotMiniGame","MaxBetEnabled","roundInit","self_1","_b","BaseView_1","BaseView","RespinReceived","runRespin","RunRespin","WinAnimator_1","Machine_1","Character_1","LayoutManager_1","LayoutContainerElement_1","GAMBLE_HIDDING","_wasFinished","_isGamble","currentBet","_introDelay","_outroDelay","_outroFinishDelay","_respinCounter","LayoutManager","_symbols","_paylines","_winAnimator","_machine","_multipliers","_collectFrames","_character","Character","winAnimator","flyContainer","_frameTop","_paddleRight","Machine","ReelStopped","onReelStopped","StartedTeasing","startedTeasing","StoppedTeasing","stoppedTeasing","updateCollectSymbols","WinAnimator","FinishWinCalculation","finishWinCalculation","FinishWinAnimator","finishWinAnimator","FinishQuickWinCalculation","finishQuickWinCalculation","showSymbols","setStoppedSymbolsArray","_toggleVisibleInGamble","isShow","isAnim","updateCurrentSet","showCurrentSet","goToCase","showInitWins","wins","isRespin","WIN_ANIM_COMPLETED","Respin","SPIN","actualReelStopped","COLLECTION","REELS_STOP","MASK_TEASING_START","setTeasing","MASK_TEASING_END","BONUS_MESSAGE_START","WIN_ANIMS","outroToBonus","outroToGamble","getCurrentCase","HIDE","inHighWins","outroStart","resetTimer","onLayoutChange","getPlatform","LayoutManagerAttributes","DESKTOP","LayoutContainerElement","Payline_1","PaylinesDefinitions_1","Symbol_1","TimelineElement_1","ImageTextCounterElement_1","WinAnimatorAttributes","CONFIGS","configs","configure","reelCount","reelX","reelY","symbolCount","symbolWidth","symbolHeight","multipliers","animationNames","paylines","noWinSymbolsContainer","symbolsContainer","collectFrames","createTimer","createPaylines","reelIndex","currentReels","removeCurrentSymbol","addCurrentSymbol","currentWins","resetAnimations","currentMultiplierIndex","showCustomWin","showFirstWins","startTimer","Idle","getInitialIdleDelay","allSymbolsGoToCase","Symbol","CaseNowin","allPaylinesGoToCase","Payline","winSymbolsGoToCase","CaseWin","winPaylineGoToCase","startAnimation","finishFirstWins","currentCycle","collectSymbols","collectSymbolsCompleted","startCycleWins","showCustomInitWin","showFirstInitWins","finishFirstInitWins","CaseCyclePause","cycleWins","CaseNormal","CaseCycle","CycleWins","getCycleWinsDelay","showLastSymbols","allSymbolsGoToReset","CaseEmpty","csTimer","lastMultiplierIndex","currentAnimationIndex","currentAnimationFinished","stopAnimation","timerStatus","timer","onTimerComplete","idle","symbolIndex","getSymbol","offsetX","offsetY","returnSymbol","caseType","allowSymbolGoToCase","currentCaseType","CaseIdle","noWin","winIndex","useValue","trigger","WinTrigger","winSymbolsGoToCaseAsPayline","Scatter","winSymbolsGoToCaseAsScatter","Way","winSymbolsGoToCaseAsWay","winSymbolsGoToCaseAsCustom","ImageTextCounterElement","Round","shadowCnt","getChildElementByName","shadowImg","getChildByName","counterElement","PaylinesDefinitions","getPaylineDefinitionsById","paylineId","paylineDefinition","WinType","Feature","timerDelay","isNewCollect","isNew","CaseCollecting","sGp","collectSymbol","CaseSingleCycle","animationsContainer","animations","animation","onAnimationFinished","TimelineElement","AnimationComplete","onAnimationComplete","onCalculationFinished","getAnimationIndex","goToOutro","getIdleActiveElementsCount","hasCase","getIdleDelay","SwitchElement_1","PaylineAttributes","Z_INDEX","CaseSelect","SwitchElement","SwitchStyle_1","AnimationElement_1","ParticleElement_1","dynamicTime","previousRandomCase","center","_symbolWidth","_symbolHeight","getAllChildElements","hasElements","SwitchElementAttributes","CLONE","runBitmapMaskScaleTween","runBezierTween","bezierX","bezierY","getCase","emitEvent","animationComplete","FinishAnimation","arr","ParticleElement","nextCase","SwitchStyleCaseAttributes","NEXT_CASE","NEXT_RANDOM_CASE","getRandomCase","TIMER","multiplier","RANDOM","getRandomDurationMultiplier","HANDLER","AnimationElement","dataArray","getRandom","setDynamicTime","maskObject","DEBUG_INFO","Style_1","SwitchStyle","textureArray","Texture","EMPTY","shared","update","UPDATE_PRIORITY","HIGH","_startFrame","_randomStartFrame","tint","deltaTime","AnimationElementAttributes","STYLE2","_style","startFrame","endFrame","_endFrame","_stop","textures","_movieClipComplete","animationSpeed","blendMode","BLEND_MODES","NORMAL","_reverse","speed","getBlendMode","RANDOM_START_FRAME","TINT","DynamicTint","ANCHOR","anchor","SKEW_X","SKEW_Y","CONTINUE","_continue","playMe","PLAY","REVERSE","STOP","showMe","SHOW_FRAME","frameNumber","getMovieClip","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","spinId","isRespinLast","isLastBonusSpin","bonusRespins","getRemainingRespins","isBonusSymbol","SymbolBonus","SymbolBonusMajor","isBonusSymbolInArray","symbolIds","updateSpineData","spineData","spineTextData","JSON","stringify","SymbolEmpty","SymbolWild","SymbolScatter","SymbolBigScatter","SymbolExpandedWild","BigSymbolIdOffset","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","ZoneFountain","setTargetElement","particleLife","maxLife","minLife","addPathBehaviour","addScaleBehaviour","addRotationBehaviour","addAlphaBehaviour","life","addRectanglePathBehavior","addEllipsePathBehavior","addFountainPathBehavior","pathValues","valueX","valueY","randomX","randomY","removeFromPool","minRadius","minRadiusB","finalX","finalY","bezierEllipse","xValue","yValue","intervalX","intervalY","scaleValues","scalePoints","scaleValue","rotationValues","rotationAngles","alphaValues","worldVisible","tabActive","getFromPool","getFreeParticleIndex","emitOnce","startType","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","getBlendModeByString","SKEW","spr","POSITION_TWEEN_BEZIER_AUTOROTATE","autorotate","autorotateArray","_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","ATTR_START_X","ATTR_START_Y","ATTR_INTERVAL_X","ATTR_INTERVAL_Y","ATTR_BEZIER_Y","NodeValue","ElementsReserve","initializePaylineDefinitions","paylineGroupId","_paylineGroupsDefinitions","hasWinFrame","SymbolAttributes","OFFSET_X","OFFSET_Y","OFFSET","TYPE","configurate","CaseRotation","CaseBlur","CaseTease","CaseHighWin","CaseLanding","Song_1","_frameCounter","_loop","_elements","TimelineElementAttributes","LOOP","frames","_framesArray","childOfChild","startAnimate","_winValue","stopAnimate","outroSounds","node2","SongAttributes","SONG","FADEIN","FADEOUT","goToFrame","childElementCount","setBitmapText","framesSounds","EMIT","SOUNDS","ImageTextElement_1","finalValue","appendText","prependText","ImageTextCounterElementAttributes","FROM","TO","DURATION","ROUND","APPEND_TEXT","PREPEND_TEXT","ACTION","ACTION_VALUE","FORCE","bitmapText","realign","del","onCountTo","font","textAlign","textBaseline","BitmapText","ImageTextElement","ImageTextElementAttributes","TOP","alias","ALIAS","GROUP","VOLUME","pan","PAN","fade","fadeStartTime","fadeEndTime","StereoFilter","playInstance","stopInstance","getFadeInVolume","getFadeOutVolume","sprite","onFadeIn","onFadeOut","off","Reel_1","ReelExtended_1","_reels","_teasing","_stoppedSymbolsArray","_stoppedFromServer","_stoppedFromMachine","_stoppedFromLegal","_stoppedReelIndexes","_stopTimer","_symbolTopCount","_symbolBottomCount","_reelsContainer","MachineAttributes","_reelCount","_reelX","_reelY","_visibleSymbolCount","_minSpinRotation","_minSpinRotationLong","_startDelay","_stopDelay","_reelConfiguration","createReels","ReelExtended","Reel","teasing1","teasing2","longRotation","_startSpinTime","verifyMinGameRoundDurationConditions","legal","_legalStopTimer","getLegalRemainingSpinDuration","checkTeasing","_canTease","calculateRemainingSpinDuration","minTime","reelStopDuration","getReelStopDuration","getStopDuration","tease","L","hasMask","spinTease","preRoll","preRollSpeed","postRoll","postRollSpeed","forceSpeed","previousReel","nextReel","strip","positionX","positionY","symbolTopCount","symbolBottomCount","startDelay","stopDelay","onStopTimerComplete","shouldBeStopping","stoppingCounter","isTeasing","teasingSymbols","symbolCase","rollSpeed","customDelay","stoppingSymbols","updateReel","useTransform","bottomSymbols","topSymbols","complexCases","WAVE_PERIOD","_nextCase","_caseAnimFinish_handler","_defaultState","_waveDelay","_doWave","_currentEvent","currCase","BONUS_SPIN","SHOW","isHighWin","_getRandCase","BONUS_SYMBOL_WIN","BONUS_MISTERY","BONUS_MISTERY_END","BONUS_TOTAL_WIN","BONUS_FINAL","_doOut","_toNextCase","caseName","_playSoundByCase","onWave","usePlatform","configured","ratioIntervals","addLayoutElement","layoutElement","LayoutElements","getSwitchPrefix","SwitchPrefix","getPreviousSwitchPrefix","PreviousSwitchPrefix","MOBILE","LayoutManagerConfigurationAttributes","USE_PLATFORM","RATIO_INTERVALS","screenWidth","screenHeight","allowedPortraitLayout","allowedCanvasPortraitLayout","ExtraPortraitClass","changeCanvasSize","updateLayoutElements","screen_1","canvasRatio","USE_ORIENTATION","PORTRAIT","LANDSCAPE","LayoutContainerElementAttributes","PORTRAIT_STYLE","portraitStyle","portraitStyleNodeList","styleNodeList","updateChildElements","previousStyleNodeList","elementStyle","previousElementStyle","updateDefaultValues","previousNode","BonusRespinsActions_1","BonusRespinsController_1","BonusRespinsController","EndReceived","endReceived","SpinEnd","spinEnd","BonusRespinsActions","ActionStart","ActionBack","back","machineStopFinished","BonusRespinsModel_1","BonusRespinsView_1","BonusRespinsView","BonusRespinsModel","disableLogo","_currentStep","bonusRespinsStart","bonusRespinsSpin","endBonusRespins","BonusSymbol_1","FULL_ROUNDS","MYSTERY_SYMBOL","STEP_FADE_DIST","_currentCellID","_currentRound","_startDistance","_stepNum","_fieldSymbolIds","_fieldSymbols","isDesktop","_mysteryDelay","mysteryAnimation","_updateMultipliersDelay","_updateMultipliers","_messageDelay","_showFinalMessage","_winCollectCompleted","_symbolsContainer","_symbolsContainerTop","_bigSymbolContainer","_frameLightContainer","_mysteryFeature","_frameAnim","_selectFrame","_messages","_winCounter","_mysteryTotalX","_mysteryTotalXText","_selframeStartPos","_cellSize","_setFieldSymbols","_updateCurrentCell","_bigSymbol","winboxAnim","_fastStopMode","_step","removeChildAt","introAnimTimer","smb","cId","BonusSymbol","_getCellProps","selectFramePosition","isBombAnim","collectingSymbolsMultiplier","bombDelay","updateNumber","sndBombTimer","frameDirect","_targetCellID","_currentSymbID","_calcDistance","durCoef","cellProp","bounceOnField","_bounce","easeNone","cellPos","Expo","_winCounterStart","mysteryCaseName","String","mysteryType","mysteryValue","delayTimer","startTotalCollecting","_mysteryTotalXValue","totalCollectX","tf_1","cloneTextField","px","py","toX","toY","Sine","countDuration","textField","counterSoundTimer","active","fieldWin","totalWinCountFinished","outroToBase","sid","isBig","textPos","textFont","textScale","isBigImage","isSpecSymbol","smbSize","fadeInMystery","fadeOutMystery","change","bombTimer","_betSettings","_respinDelay","updateAllowed","spine","mixes","TARGET_FPMS","SpineElementAttributes","SPINE","MIXES","mix","createSpine","setMixes","ANIMATIONS","tracks","track","frames_1","updateTime","textureAtlas","core","TextureAtlas","line","BaseTexture","atlasAttachmentLoader","AtlasAttachmentLoader","skeletonJson","SkeletonJson","skeletonData","readSkeletonData","Spine","autoUpdate","stateData","setMix","cacheAsBitmap","setEmptyAnimation","setAnimation","addEmptyAnimation","addAnimation","maskElement","_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_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","ChangeBetDialog","titleElement","showChangeBetDialogOnCollect","BaseElementParticle","_positionTweenOnCreate","_scaleTweenOnCreate","_rotationTweenOnCreate","_alphaTweenOnCreate","BaseElementParticleAttributes","particles","ParticleContainer","BGParticleElement","circles","circlesData","connectionZoneWidth","connectionZoneHeight","startUpdate","BGParticleElementAttributes","imageElement","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","ParticleAnimationElement","setSpeed","elementsCount","elementsResources","prepareResources","ParticleAnimationElement_1","ParticleGroupElement","DynamicKey","startSelected","resetSelected","particleKey","protonProto","ProtonElement","_animationName","_emitting","_animationSpeed","_animationLoop","_emitters","_proton","onProtonUpdate","onParticleCreated","onParticleUpdate","onParticleDead","transformSprite","alphaDead","scaleDead","ProtonElementAttributes","_tint","STYLE_2","emitter","Proton","emitterNext","rate","Rate","rateStart","rateEnd","Span","numPan","timePan","createInitializers","createBehaviours","addEmitter","_renderer","isFrameStopped","removeChilds","emmiter0","_textures","Pool","textureCacheIds","particleSprite","dead","resetParticles","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","pointZoneX","pointZoneY","PointZone","pixelData","extract","pixels","ImageZone","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","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","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","MachineExtended","_checkSymbolOnReel","_checkMaskLanding","hasMaskPrev","bool","ReelAvalanche","spinRollTimer","spinRollFinish","spinPostRollSymbols","isSkipped","spinRollFinished","hasData","reelStopped","hasReelUpdated","inRespin","respinRoll","skipSpin","updateSymbolsPosition","SingleSymbolDelay","SpinRollDuration","emptySymbolCount","getEmptySymbols","updateRespinSymbolsPosition","tempSymbol","respinPostRoll","SingleSymbolPostrollDelay","resetSymbolsContainer","removeSymbolsTween","Tease","WinAnimatorExtended","teasingState","hasScatter","mysteryIndex","currentAnimName","mWin","possiblePayouts","winPayout","xCounter_1","mTimer_1","possiblePayouts_1","targetIndex","addSteps_1","timerDur_1","xIndex_1","n_1","currentKeyframe","lwAnimText","isTease","CollectFrames","_frames","_newSymbols","_currentSet","isChangedBet","sX","sY","frameGlobPos","MULTS_NUM","GameMultipliers","_mults","_flyContainer","GameMultipliersAttributes","img_dis","icon","icon_dis","glow","_multiplierConfig","mIndex","bounceCoef","Paylines","setSpecialContainer","_specialContainer","_paylineIDs","showPaylinesLabel","goToWin","getPaylines","PaylinesSelector","Symbols","symbolsData","SymbolsAttributes","createObjectPool","createSymbolsData","caseElement","_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","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,GACpBA,EAAoB,IACpBA,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,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,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,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,IACpBA,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,IACpBA,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,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,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,IACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EAAoB,KACpBA,EA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","file":"C:\\Agent1\\_work\\117\\s\\wwwroot\\scripts\\neo-alohabar.min.js","sourcesContent":["/*! Synot Games (c) 2025, Alohabar 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__(9);\n\t__webpack_require__(21);\n\t__webpack_require__(10);\n\t__webpack_require__(74);\n\t__webpack_require__(46);\n\t__webpack_require__(109);\n\t__webpack_require__(75);\n\t__webpack_require__(82);\n\t__webpack_require__(36);\n\t__webpack_require__(23);\n\t__webpack_require__(28);\n\t__webpack_require__(27);\n\t__webpack_require__(41);\n\t__webpack_require__(34);\n\t__webpack_require__(122);\n\t__webpack_require__(35);\n\t__webpack_require__(37);\n\t__webpack_require__(42);\n\t__webpack_require__(54);\n\t__webpack_require__(49);\n\t__webpack_require__(43);\n\t__webpack_require__(24);\n\t__webpack_require__(60);\n\t__webpack_require__(26);\n\t__webpack_require__(51);\n\t__webpack_require__(58);\n\t__webpack_require__(53);\n\t__webpack_require__(70);\n\t__webpack_require__(71);\n\t__webpack_require__(81);\n\t__webpack_require__(108);\n\t__webpack_require__(115);\n\t__webpack_require__(114);\n\t__webpack_require__(118);\n\t__webpack_require__(67);\n\t__webpack_require__(13);\n\t__webpack_require__(52);\n\t__webpack_require__(18);\n\t__webpack_require__(15);\n\t__webpack_require__(14);\n\t__webpack_require__(90);\n\t__webpack_require__(11);\n\t__webpack_require__(123);\n\t__webpack_require__(124);\n\t__webpack_require__(80);\n\t__webpack_require__(94);\n\t__webpack_require__(125);\n\t__webpack_require__(126);\n\t__webpack_require__(93);\n\t__webpack_require__(127);\n\t__webpack_require__(128);\n\t__webpack_require__(12);\n\t__webpack_require__(117);\n\t__webpack_require__(87);\n\t__webpack_require__(98);\n\t__webpack_require__(129);\n\t__webpack_require__(131);\n\t__webpack_require__(132);\n\t__webpack_require__(133);\n\t__webpack_require__(134);\n\t__webpack_require__(135);\n\t__webpack_require__(95);\n\t__webpack_require__(136);\n\t__webpack_require__(137);\n\t__webpack_require__(89);\n\t__webpack_require__(88);\n\t__webpack_require__(138);\n\t__webpack_require__(99);\n\t__webpack_require__(100);\n\t__webpack_require__(91);\n\t__webpack_require__(116);\n\t__webpack_require__(66);\n\t__webpack_require__(68);\n\t__webpack_require__(69);\n\t__webpack_require__(63);\n\t__webpack_require__(39);\n\t__webpack_require__(19);\n\t__webpack_require__(65);\n\t__webpack_require__(139);\n\t__webpack_require__(64);\n\t__webpack_require__(38);\n\t__webpack_require__(101);\n\t__webpack_require__(6);\n\t__webpack_require__(140);\n\t__webpack_require__(141);\n\t__webpack_require__(142);\n\t__webpack_require__(107);\n\t__webpack_require__(143);\n\t__webpack_require__(144);\n\t__webpack_require__(145);\n\t__webpack_require__(146);\n\t__webpack_require__(50);\n\t__webpack_require__(147);\n\t__webpack_require__(104);\n\t__webpack_require__(59);\n\t__webpack_require__(148);\n\t__webpack_require__(83);\n\t__webpack_require__(45);\n\t__webpack_require__(84);\n\t__webpack_require__(110);\n\t__webpack_require__(111);\n\t__webpack_require__(112);\n\t__webpack_require__(113);\n\t__webpack_require__(105);\n\t__webpack_require__(149);\n\t__webpack_require__(77);\n\t__webpack_require__(76);\n\t__webpack_require__(78);\n\t__webpack_require__(79);\n\t__webpack_require__(150);\n\t__webpack_require__(102);\n\t__webpack_require__(86);\n\t__webpack_require__(151);\n\t__webpack_require__(96);\n\t__webpack_require__(152);\n\t__webpack_require__(103);\n\t__webpack_require__(97);\n\t__webpack_require__(153);\n\t__webpack_require__(85);\n\t__webpack_require__(154);\n\t__webpack_require__(155);\n\t__webpack_require__(156);\n\t__webpack_require__(157);\n\t__webpack_require__(159);\n\t__webpack_require__(160);\n\t__webpack_require__(161);\n\t__webpack_require__(163);\n\t__webpack_require__(162);\n\t__webpack_require__(158);\n\t__webpack_require__(164);\n\t__webpack_require__(165);\n\t__webpack_require__(72);\n\t__webpack_require__(166);\n\t__webpack_require__(167);\n\t__webpack_require__(73);\n\t__webpack_require__(168);\n\t__webpack_require__(169);\n\t__webpack_require__(47);\n\t__webpack_require__(170);\n\t__webpack_require__(171);\n\t__webpack_require__(48);\n\t__webpack_require__(33);\n\t__webpack_require__(31);\n\t__webpack_require__(29);\n\t__webpack_require__(30);\n\t__webpack_require__(106);\n\t__webpack_require__(44);\n\t__webpack_require__(32);\n\t__webpack_require__(55);\n\t__webpack_require__(121);\n\t__webpack_require__(172);\n\t__webpack_require__(61);\n\t__webpack_require__(20);\n\t__webpack_require__(92);\n\t__webpack_require__(62);\n\t__webpack_require__(8);\n\t__webpack_require__(22);\n\t__webpack_require__(25);\n\t__webpack_require__(40);\n\t__webpack_require__(7);\n\t__webpack_require__(130);\n\t__webpack_require__(56);\n\tmodule.exports = __webpack_require__(57);\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__(63);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ClientHostConsumer_1 = __webpack_require__(118);\r\n\tvar GameDefinition_1 = __webpack_require__(119);\r\n\tvar GameConfiguration_1 = __webpack_require__(120);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlatformsManager_1 = __webpack_require__(121);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar SplashScreen_1 = __webpack_require__(59);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tif (false) {\r\n\t    require(\"./Utils/PerfDebug/PerfDebug\");\r\n\t    require(\"./Utils/PerfDebug/PerfDebugWindow\");\r\n\t    require(\"./Utils/DebugTools/DebugTools\");\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        FreeRoundBonus_1.FreeRoundBonus.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        if (window[\"QUALITY\"] === \"DoubleFHD\") {\r\n\t            StageController_1.StageController.createStage(1920, 1080, color, \"canvas\");\r\n\t        }\r\n\t        else {\r\n\t            StageController_1.StageController.createStage(size.width, size.height, color, \"canvas\");\r\n\t        }\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            DebugTools.init(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 = \"AlohaBar\";\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 Scaling_1 = __webpack_require__(7);\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__(62);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar HtmlController_1 = __webpack_require__(47);\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        if (false) {\r\n\t            Object.defineProperty(window, \"__PIXI_STAGE__\", {\r\n\t                value: this.Stage,\r\n\t                writable: false,\r\n\t            });\r\n\t            Object.defineProperty(window, \"__PIXI_RENDERER__\", {\r\n\t                value: this.Renderer,\r\n\t                writable: false,\r\n\t            });\r\n\t        }\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        if (StageController.baseStage && StageController.baseStageContainer != null) {\r\n\t            StageController.Renderer.render(StageController.baseStageContainer);\r\n\t        }\r\n\t        else if (StageController.bonusStage && StageController.bonusStageContainer != null) {\r\n\t            StageController.Renderer.render(StageController.bonusStageContainer);\r\n\t        }\r\n\t        else {\r\n\t            StageController.Renderer.render(StageController.Stage);\r\n\t        }\r\n\t        requestAnimationFrame(StageController.redrawStage);\r\n\t    };\r\n\t    StageController.log = function (s) {\r\n\t        if (false) {\r\n\t            neo_common_1.Logger.debugGroup(\"StageController\", s);\r\n\t        }\r\n\t    };\r\n\t    StageController.UpdatedTextures = {};\r\n\t    StageController.FPS = 60;\r\n\t    StageController.baseStage = false;\r\n\t    StageController.bonusStage = 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, __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__(8);\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/* 8 */\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__(9);\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/* 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 Types_1 = __webpack_require__(10);\r\n\tvar Pool_1 = __webpack_require__(21);\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/* 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 BaseElement_1 = __webpack_require__(11);\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/* 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 __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__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar Attributes_1 = __webpack_require__(20);\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, \"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 (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        if (!node.hasAttribute(exports.BaseElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.BaseElementAttributes.ALPHA_TWEEN));\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    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    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar Attributes_1 = __webpack_require__(20);\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._uid = this.componentName + \"_\" + neo_common_1.Utils.generateUuid();\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        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.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.prototype.clone = function () {\r\n\t        var element = new ShapeElement();\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        return element;\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/* 13 */\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/* 14 */\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__(15);\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                            if (tween.name === \"positionTween\" && (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                            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                            if (tween.name === \"rotationTween\" && (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                            if (tween.name === \"bezierTween\" && (property === \"bezier\" || property === \"all\")) {\r\n\t                                tween.kill(null, 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                            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                                tween.kill((_a = {}, _a[property] = 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.bezierTween = function (object, options) {\r\n\t        if (options.bezier.values[0] != null) {\r\n\t            object.position.x = options.bezier.values[0].x;\r\n\t            object.position.y = options.bezier.values[0].y;\r\n\t        }\r\n\t        var tween;\r\n\t        tween = GsapEffects_1.GsapEffects.bezierTween(object, options);\r\n\t        tween.name = \"bezierTween\";\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.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/* 15 */\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__(16);\r\n\tvar CustomEase_1 = __webpack_require__(18);\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.bezierTween = 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        tweenDuration = tweenDuration * 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 bezierTweenLite;\r\n\t        bezierTweenLite = gsap_1.TweenLite.to(object, tweenDuration, {\r\n\t            bezier: tweenBezier || 0,\r\n\t            useFrames: GsapEffects.UseFrames,\r\n\t            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 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            bezierTweenLite.eventCallback(options.callbackType, options.callbackFunction, options.callbackParams, options.callbackScope);\r\n\t        }\r\n\t        if (options.tweenLoop) {\r\n\t            bezierTweenLite.eventCallback(\"onComplete\", bezierTweenLite.restart);\r\n\t        }\r\n\t        return bezierTweenLite;\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 \"power1Out\":\r\n\t                return \"Power1.easeOut\";\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 \"power1InOut\":\r\n\t                return \"Power1.easeInOut\";\r\n\t            case \"power4In\":\r\n\t                return \"Power4.easeIn\";\r\n\t            case \"fountainSlowMo\":\r\n\t                return new gsap_1.SlowMo().config(0.1, 0.7, false);\r\n\t            case \"explodeSlowMo\":\r\n\t                return new gsap_1.SlowMo().config(0, 0.1, true);\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/* 16 */\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__(17)){ //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/* 17 */\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/* 18 */\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__(16);\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.createCustomEasing = function () {\r\n\t        var dataTeasingEase = \"M0,0 C0,0 0.03482,0.14257 0.06534,0.22865 0.0957,0.31427 0.11728,0.36542 0.15822,0.44618 0.1968,0.52232 0.2238,0.56837 0.27261,0.6376 0.3171,0.7007 0.34892,0.73937 0.40306,0.79347 0.45351,0.8439 0.49041,0.87456 0.54918,0.91403 0.60274,0.95 0.64359,0.97355 0.70202,0.99427 0.74895,1.0109 0.78808,1.01574 0.83882,1.01671 0.89814,1.01786 1,1 1,1 \";\r\n\t        CustomEase.create(\"TeasingEase\", dataTeasingEase);\r\n\t    };\r\n\t    return CustomEase;\r\n\t}(gsap_1.Ease));\r\n\texports.CustomEase = CustomEase;\r\n\n\n/***/ },\n/* 19 */\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__(13);\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/* 20 */\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/* 21 */\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/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(8);\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__(7);\r\n\tvar JackpotGame_1 = __webpack_require__(60);\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                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__(8);\r\n\tvar gsap_1 = __webpack_require__(16);\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.DataBonusSpinRemainingCount = \"BONUS_REMAINING_COUNT\";\r\n\t    GameData.DataBonusTotalWin = \"BONUS_TOTAL_WIN\";\r\n\t    GameData.DataBonusTotalWinDenom = \"BONUS_TOTAL_WIN_DENOM\";\r\n\t    GameData.DataBonusSpinCount = \"BONUS_SPINS_COUNT\";\r\n\t    GameData.DataBonusSpinWonCount = \"BONUS_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.DataHelpVersion = \"HELP_VERSION\";\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.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__(47);\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__(7);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar QuickspinDialog_1 = __webpack_require__(49);\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 || !(FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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                    DataManager.customBetsData[key].gameMultiplier = GameManager_1.GameManager.baseResponse.gameMultiplier;\r\n\t                    DataManager.customBetsData[key].collectingSymbols =\r\n\t                        GameManager_1.GameManager.baseResponse.customData.collectedSymbols;\r\n\t                    break;\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DataManager.clearCollectedSymbolsForCurrentBet = 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                    customBetData.collectingSymbols.length = 0;\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 (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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        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__(43);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar SimilarGames_1 = __webpack_require__(53);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar NotificationManager_1 = __webpack_require__(55);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar SessionTimer_1 = __webpack_require__(58);\r\n\tvar SplashScreen_1 = __webpack_require__(59);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\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 (FreeRoundBonus_1.FreeRoundBonus.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() && !FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.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.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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && 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    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        FreeRoundBonus_1.FreeRoundBonus.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            FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.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.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.BonusRespins) != null) {\r\n\t                GameManager.bonusRespinsResponse = response.module(GameModules.BonusRespins);\r\n\t            }\r\n\t            else {\r\n\t                GameManager.bonusRespinsResponse = 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 (FreeRoundBonus_1.FreeRoundBonus.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 (!exit &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n\t            ResponsibleDialog1_1.ResponsibleDialog1.responsibleDialog1Data != null &&\r\n\t            !FreeRoundBonus_1.FreeRoundBonus.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__(47);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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            FreeRoundBonus_1.FreeRoundBonus.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.bonusActive() && ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.BonusRespins].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.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.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.enableBonus = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"enableBonusRespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.BonusRespins].enable();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.bonusEnabled = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.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.bonusActive = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.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.startBonus = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"startBonusRespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.BonusRespins].start();\r\n\t        }\r\n\t    };\r\n\t    ModuleManager.endBonus = function () {\r\n\t        if (false) {\r\n\t            ModuleManager.log(\"endBonusRespins\");\r\n\t        }\r\n\t        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n\t            ModuleManager._channelModules[GameModules.BonusRespins].end();\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.firstWinStep = function (enable) {\r\n\t        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].firstWinStep(enable);\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._channelModules[GameModules.Base] != null) {\r\n\t            ModuleManager._channelModules[GameModules.Base].cycleHelp();\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 FreeRoundBonus_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 (FreeRoundBonus_1.FreeRoundBonus.inFrb) {\r\n\t            if (AppContext_1.AppContext.gameDefinition.Gamble && FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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                    FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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__(38);\r\n\tvar FreeRoundBonus_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 (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.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__(8);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonus_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__(45);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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 (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.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 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__(42);\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__(43);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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.initalize();\r\n\t        FreeRoundBonusIcon_1.FreeRoundBonusIcon.initalize();\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        FreeRoundBonus.blockFrbExpiration = true;\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 (!FreeRoundBonus.blockFrbExpiration && 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.enableFrbExpiration = function () {\r\n\t        FreeRoundBonus.blockFrbExpiration = false;\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    FreeRoundBonus.blockFrbExpiration = false;\r\n\t    return FreeRoundBonus;\r\n\t}());\r\n\texports.FreeRoundBonus = FreeRoundBonus;\r\n\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar PlayList_1 = __webpack_require__(38);\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__(40);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog = (function () {\r\n\t    function FreeRoundBonusDialog() {\r\n\t    }\r\n\t    FreeRoundBonusDialog.initalize = 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.setPoinerEventsButtons = 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.setPoinerEventsButtons(\"\");\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.setPoinerEventsButtons(\"\");\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.setPoinerEventsButtons(\"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.setPoinerEventsButtons(\"\");\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.setPoinerEventsButtons(\"\");\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 __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__(13);\r\n\tvar SoundManager_1 = __webpack_require__(39);\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.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            if (false) {\r\n\t                PlayList.log(\"play song \" + song);\r\n\t            }\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            if (false) {\r\n\t                PlayList.log(\"loop song \" + song);\r\n\t            }\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            if (false) {\r\n\t                PlayList.log(\"stop song \" + song);\r\n\t            }\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            if (false) {\r\n\t                PlayList.log(\"stopAll songs\");\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.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/* 39 */\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__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 40 */\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__(7);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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 > 1 ? \"-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        RetentionPanel.peakActive = 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                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                        if (iconChild.hasAttribute(\"promotions-count\") &&\r\n\t                            parseInt(iconChild.getAttribute(\"promotions-count\")) > 0)\r\n\t                            RetentionPanel.peakActive = parseInt(iconChild.getAttribute(\"promotions-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 = 0;\r\n\t    return RetentionPanel;\r\n\t}());\r\n\texports.RetentionPanel = RetentionPanel;\r\n\n\n/***/ },\n/* 41 */\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__(36);\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/* 42 */\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__(38);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\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.initalize = 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 (FreeRoundBonus_1.FreeRoundBonus.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                        FreeRoundBonus_1.FreeRoundBonus.expiredFreeRounds();\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.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/* 43 */\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__(38);\r\n\tvar FreeRoundBonus_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__(44);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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/* 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 PlayList_1 = __webpack_require__(38);\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__(45);\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/* 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 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__(44);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar BaseModel = (function () {\r\n\t    function BaseModel(controller) {\r\n\t        this.controller = controller;\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.respin = 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\r\n\t            .respin(neo_games_1.Communication.Game.GameModules.Base, GameManager_1.GameManager.baseResponse.respin)\r\n\t            .then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.respinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BaseModel.prototype.spinReceived = 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            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(response.balance.real, response.balance.bonus)),\r\n\t                win: GameManager_1.GameManager.baseResponse.currentWin,\r\n\t                totalBet: BetManager_1.BetManager.createBetForSpin().totalBet,\r\n\t                roundId: response.roundId,\r\n\t            });\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BaseModel.prototype.respinReceived = 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.respinReceived();\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/* 46 */\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/* 47 */\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__(48);\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__(38);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar BaseActions_1 = __webpack_require__(46);\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__(49);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\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        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/* 48 */\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/* 49 */\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__(16);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\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/* 50 */\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__(16);\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/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar PlayList_1 = __webpack_require__(38);\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__(48);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\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\" ? 1.1 : 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            DataManager_1.DataManager.showDataElements(\"paytableBonusSummary\");\r\n\t            DataManager_1.DataManager.hideDataElements(\"paytableBonusSummaryDynamic\");\r\n\t            return;\r\n\t        }\r\n\t        DataManager_1.DataManager.hideDataElements(\"paytableBonusSummary\");\r\n\t        DataManager_1.DataManager.showDataElements(\"paytableBonusSummaryDynamic\");\r\n\t        var dataIds = [\r\n\t            \"PTB_SYMBOL_12_VALUE_4\",\r\n\t            \"PTB_SYMBOL_12_VALUE_3\",\r\n\t            \"PTB_SYMBOL_12_VALUE_2\",\r\n\t            \"PTB_SYMBOL_12_VALUE_1\",\r\n\t        ];\r\n\t        dataIds.forEach(function (value) {\r\n\t            if (value) {\r\n\t                var elements = HtmlController_1.HtmlController.DataElements[value];\r\n\t                if (elements != null) {\r\n\t                    for (var i = 0; i < elements.length; i++) {\r\n\t                        var fontSize = parseInt(elements[i].instance.style.fontSize);\r\n\t                        elements[i].instance.style.fontSize = Math.floor(fontSize * 1.7) + \"px\";\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        });\r\n\t        var preventResizeIds = [\"PTB_SYMBOL_8_COUNT_1\"];\r\n\t        preventResizeIds.forEach(function (value) {\r\n\t            if (value) {\r\n\t                var elements = HtmlController_1.HtmlController.DataElements[value];\r\n\t                if (elements != null) {\r\n\t                    for (var i = 0; i < elements.length; i++) {\r\n\t                        elements[i].instance.removeAttribute(\"style\");\r\n\t                    }\r\n\t                }\r\n\t            }\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/* 52 */\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__(13);\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    GAME_MULTIPLIERS: \"GameMultipliers\",\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/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 55 */\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__(56);\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__(50);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar WebSocketClientHub_1 = __webpack_require__(57);\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/* 56 */\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/* 57 */\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/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar PlayList_1 = __webpack_require__(38);\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__(45);\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/* 59 */\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__(44);\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/* 60 */\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__(16);\r\n\tvar GsapEffects_1 = __webpack_require__(15);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar CustomEase_1 = __webpack_require__(18);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar HtmlController_1 = __webpack_require__(47);\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__(38);\r\n\tvar AmbientBackground_1 = __webpack_require__(61);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar MessageManager_1 = __webpack_require__(44);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\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            document.body.classList.add(\"spbStartFinished\");\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 - 2) + 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 - 3, 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 > 4) {\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            document.body.classList.remove(\"spbStartFinished\");\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(2);\r\n\t        this.symbolStepOffsets = this.getSymbolStepOffsets(2);\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 + (1 - middleSymbolIndex)];\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/* 61 */\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/* 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 AppContext_1 = __webpack_require__(5);\r\n\tvar Scaling_1 = __webpack_require__(7);\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/* 63 */\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__(64);\r\n\tvar SoundManager_1 = __webpack_require__(39);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar CanvasManager_1 = __webpack_require__(66);\r\n\tvar ConfigurationManager_1 = __webpack_require__(68);\r\n\tvar HtmlManager_1 = __webpack_require__(69);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionManager_1 = __webpack_require__(116);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar SpineElement_1 = __webpack_require__(117);\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        else {\r\n\t            for (var key in this.loader.resources) {\r\n\t                if (key.indexOf(\"SPINE_data\") !== -1) {\r\n\t                    SpineElement_1.SpineElement.Data = this.loader.resources[key];\r\n\t                }\r\n\t                if (key.indexOf(\"SPINE_atlas\") !== -1) {\r\n\t                    SpineElement_1.SpineElement.Atlas = this.loader.resources[key];\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                if (resource.id.indexOf(\"SPINE_data\") !== -1) {\r\n\t                    var spineLoaderOptions = { metadata: { spineAtlasSuffix: \".txt\" } };\r\n\t                    this.loader.add(resource.id, resource.path, spineLoaderOptions);\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        }\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/* 64 */\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__(65);\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/* 65 */\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/* 66 */\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__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ActionSet_1 = __webpack_require__(67);\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            if (node.getAttribute(\"Class\") == \"FilterElement\") {\r\n\t                element.create(node, parent);\r\n\t            }\r\n\t            else {\r\n\t                element.create(node);\r\n\t            }\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/* 67 */\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__(13);\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/* 68 */\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__(52);\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/* 69 */\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__(13);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar GambleUserControls_1 = __webpack_require__(70);\r\n\tvar DesktopBaseUserControls_1 = __webpack_require__(81);\r\n\tvar DesktopBonusRespinsUserControls_1 = __webpack_require__(108);\r\n\tvar MobileBonusRespinsUserControls_1 = __webpack_require__(114);\r\n\tvar MobileBaseUserControls_1 = __webpack_require__(115);\r\n\tvar AppContext_1 = __webpack_require__(5);\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 DesktopBonusRespinsUserControls_1.DesktopBonusRespinsUserControls) {\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 MobileBonusRespinsUserControls_1.MobileBonusRespinsUserControls) {\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/* 70 */\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__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar GambleActions_1 = __webpack_require__(75);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GambleController_1 = __webpack_require__(76);\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__(54);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar FreeRoundBonus_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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.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/* 71 */\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__(72);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ActionSet_1 = __webpack_require__(74);\r\n\tvar PlayList_1 = __webpack_require__(38);\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 FreeRoundBonus_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 (FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod !== \"cumulative\") {\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCollect\");\r\n\t            }\r\n\t            else if (!FreeRoundBonus_1.FreeRoundBonus.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/* 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 HtmlElement_1 = __webpack_require__(73);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar HtmlManager_1 = __webpack_require__(69);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 73 */\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__(47);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar AppContext_1 = __webpack_require__(5);\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        if (node.hasAttribute(\"ConfigCondition\") && AppContext_1.AppContext.gameConfiguration != null) {\r\n\t            var condition = node.getAttribute(\"ConfigCondition\").split(\"|\");\r\n\t            if (condition.length == 2) {\r\n\t                var config = AppContext_1.AppContext.gameConfiguration[condition[0]].toString();\r\n\t                if (config != condition[1]) {\r\n\t                    this.instance.parentElement.removeChild(this.instance);\r\n\t                }\r\n\t            }\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/* 74 */\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/* 75 */\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/* 76 */\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__(77);\r\n\tvar GambleModel_1 = __webpack_require__(78);\r\n\tvar GambleView_1 = __webpack_require__(79);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 77 */\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 Controller = (function (_super) {\r\n\t    __extends(Controller, _super);\r\n\t    function Controller() {\r\n\t        _super.apply(this, arguments);\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}(PIXI.utils.EventEmitter));\r\n\texports.Controller = Controller;\r\n\n\n/***/ },\n/* 78 */\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__(44);\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/* 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 __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__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar PlayList_1 = __webpack_require__(38);\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_Transition\");\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_Transition\");\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/* 80 */\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__(11);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar CanvasManager_1 = __webpack_require__(66);\r\n\tvar HtmlManager_1 = __webpack_require__(69);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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        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    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/* 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 neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar BaseController_1 = __webpack_require__(83);\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__(38);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(42);\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._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    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    };\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.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\t        this._controller.on(BaseController_1.BaseController.MachineStoppedWithAnimation, this.machineStoppedWithAnimation.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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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.gambleActive()) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t            this._userControls.classList.add(HtmlController_1.HtmlController.DisabledClass);\r\n\t        }\r\n\t        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        if (this._unColectedWin == 0) {\r\n\t            this._controller.resetWinAnimator();\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        this.updateReelsByBetChange();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.frbSpin();\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\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);\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()) {\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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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            !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && this._wasCalclulated) {\r\n\t                this._controller.forceShowCollectSymbols();\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 || (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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: FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.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        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    };\r\n\t    DesktopBaseUserControls.prototype.updateReelsByBetChange = function () {\r\n\t        this._controller.updateReelsByBetChange();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.machineStoppedWithAnimation = function () {\r\n\t        this.actions.changeActionState(BaseActions_1.BaseActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.quickWinCalculationFinished = 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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\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            FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.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.bonusEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            this.disable();\r\n\t            return;\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 (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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        }\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\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.bonusEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableBonus();\r\n\t            return;\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        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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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 != 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.style.display = \"block\";\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 (ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableBonus();\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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.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, previousModule) {\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    };\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._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.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            this.longIntro = false;\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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (!DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.gameResponse.totalWin > 0) {\r\n\t                if (!CustomUtils_1.CustomUtils.isRespinEnabled() && !CustomUtils_1.CustomUtils.isRespinActive()) {\r\n\t                    ModuleManager_1.ModuleManager.collect(GameModules.Base);\r\n\t                }\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        DataManager_1.DataManager.AutoplayAfterGamble = DataManager_1.DataManager.Autoplay;\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        if (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = 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 (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 (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.BonusRespins);\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                        (FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                            FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonus_1.FreeRoundBonus.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] = FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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                        !FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                        AppContext_1.AppContext.gameConfiguration.MaxBetEnabled,\r\n\t                    _a[BaseActions_1.BaseActions.ActionSpin] = !FreeRoundBonus_1.FreeRoundBonus.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() && !FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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                        FreeRoundBonus_1.FreeRoundBonus.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() || FreeRoundBonus_1.FreeRoundBonus.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] = !FreeRoundBonus_1.FreeRoundBonus.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            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                neo_games_1.Platforms.Platforms.roundInit();\r\n\t            }\r\n\t        }\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        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        this._controller.disableBase();\r\n\t    };\r\n\t    DesktopBaseUserControls.prototype.disableAllActions = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\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/* 82 */\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/* 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 Controller_1 = __webpack_require__(77);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar BaseView_1 = __webpack_require__(84);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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.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.respin = function () {\r\n\t        this._model.respin();\r\n\t        this._view.respin();\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.respinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(BaseController.RespinReceived);\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.quickWinCalculationFinished = function () {\r\n\t        this.emit(BaseController.QuickWinCalculationFinished);\r\n\t    };\r\n\t    BaseController.prototype.forceShowCollectSymbols = function () {\r\n\t        this._view.forceShowCollectSymbols();\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.runRespin = function () {\r\n\t        this.emit(BaseController.RunRespin);\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.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.updateReelsByBetChange = function () {\r\n\t        this._view.updateReelsByBetChange();\r\n\t    };\r\n\t    BaseController.SpinReceived = \"eventSpinReceived\";\r\n\t    BaseController.RespinReceived = \"eventRespinReceived\";\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.QuickWinCalculationFinished = \"eventMachineStoppedWithAnimation\";\r\n\t    BaseController.MachineStoppedWithAnimation = \"eventQuickWinCalculationFinished\";\r\n\t    BaseController.RunRespin = \"runRespin\";\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/* 84 */\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 WinAnimator_1 = __webpack_require__(85);\r\n\tvar Machine_1 = __webpack_require__(102);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar Character_1 = __webpack_require__(105);\r\n\tvar BaseModel_1 = __webpack_require__(45);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\r\n\tvar LayoutContainerElement_1 = __webpack_require__(107);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar GAMBLE_HIDDING = [\r\n\t    \"ReelBack\",\r\n\t    \"CollectStick\",\r\n\t    \"PaddleRight\",\r\n\t    \"GameMultipliers\",\r\n\t    \"CollectFrames\",\r\n\t    \"FrameBottom\",\r\n\t    \"FrameTop\",\r\n\t    \"WinContainer\",\r\n\t    \"Paylines\",\r\n\t    \"NoWinContainer\",\r\n\t];\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._isGamble = 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._outroFinishDelay = FrameTimer_1.CreateFrameTimer(\"outroFinishDelay\");\r\n\t        this._outroFinishDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\t        StageController_1.StageController.baseStageContainer = this;\r\n\t        this._respinCounter = -1;\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 != null) {\r\n\t            this._symbols = this.childs[\"Symbols\"];\r\n\t            this._paylines = this.childs[\"Paylines\"];\r\n\t            this._winAnimator = this.childs[\"WinAnimator\"];\r\n\t            this._machine = this.childs[\"Machine\"];\r\n\t            this._multipliers = this.childs[\"GameMultipliers\"];\r\n\t            this._collectFrames = this.childs[\"CollectFrames\"];\r\n\t            this._character = new Character_1.Character(this.childs[\"Character\"], this._winAnimator);\r\n\t            this._multipliers.winAnimator = this._winAnimator;\r\n\t            this._multipliers.flyContainer = this.childs[\"FlyingContainer\"];\r\n\t            this._frameTop = this.childs[\"FrameTop\"];\r\n\t            this._paddleRight = this.childs[\"PaddleRight\"];\r\n\t            this._paylines.reset();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.initReceived = function (controller) {\r\n\t        if (false) {\r\n\t            this.log(\"initReceived\");\r\n\t        }\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.on(Machine_1.Machine.StartedTeasing, this.startedTeasing.bind(this));\r\n\t                        this._machine.on(Machine_1.Machine.StoppedTeasing, this.stoppedTeasing.bind(this));\r\n\t                        this._machine.initialize(this._symbols, GameManager_1.GameManager.baseResponse.initData.reels, this.childs[\"Teasing1\"], this.childs[\"Teasing2\"]);\r\n\t                    }\r\n\t                    this.updateCollectSymbols();\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.on(WinAnimator_1.WinAnimator.FinishQuickWinCalculation, this.finishQuickWinCalculation.bind(this));\r\n\t                            this._winAnimator.initialize(this._symbols, this._paylines, this.childs[\"NoWinContainer\"], this.childs[\"WinContainer\"], this.childs[\"CollectFrames\"]);\r\n\t                            this._winAnimator.showSymbols(GameManager_1.GameManager.baseResponse.screen.reels);\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        if (ModuleManager_1.ModuleManager.gambleActive()) {\r\n\t            this._isGamble = true;\r\n\t            this._toggleVisibleInGamble();\r\n\t        }\r\n\t        this._multipliers.show();\r\n\t    };\r\n\t    BaseView.prototype.updateCollectSymbols = function (collectedSymbols, isShow, isAnim) {\r\n\t        if (collectedSymbols === void 0) { collectedSymbols = null; }\r\n\t        if (isShow === void 0) { isShow = true; }\r\n\t        if (isAnim === void 0) { isAnim = false; }\r\n\t        if (collectedSymbols ||\r\n\t            (GameManager_1.GameManager.baseResponse != null &&\r\n\t                GameManager_1.GameManager.baseResponse.customData != null &&\r\n\t                GameManager_1.GameManager.baseResponse.customData.collectedSymbols != null)) {\r\n\t            this._collectFrames.updateCurrentSet(collectedSymbols || GameManager_1.GameManager.baseResponse.customData.collectedSymbols);\r\n\t            if (isShow)\r\n\t                this._collectFrames.showCurrentSet(isAnim, collectedSymbols != null);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.initIntro = function () {\r\n\t        StageController_1.StageController.baseStage = true;\r\n\t        StageController_1.StageController.bonusStage = false;\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_LoopAmbience\");\r\n\t        if (this.childs[\"Messages\"] != null) {\r\n\t            if (ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t                this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n\t                PlayList_1.PlayList.play(\"SND_BonusPopup\");\r\n\t            }\r\n\t        }\r\n\t        this._winAnimator.showInitWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin);\r\n\t        if (CustomUtils_1.CustomUtils.isRespin()) {\r\n\t            this._respinCounter = 0;\r\n\t        }\r\n\t        this._character.enable();\r\n\t    };\r\n\t    BaseView.prototype.collect = function () {\r\n\t        this._character.event(Character_1.Character.WIN_ANIM_COMPLETED);\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        this._winAnimator.reset(true);\r\n\t        this.updateCollectSymbols(null, true, true);\r\n\t    };\r\n\t    BaseView.prototype.spin = function () {\r\n\t        BaseView.Respin = false;\r\n\t        PlayList_1.PlayList.stop(\"SND_RespinLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        this._respinCounter = 0;\r\n\t        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n\t        this._multipliers.hide();\r\n\t        this._character.event(Character_1.Character.SPIN);\r\n\t        this._paddleRight.goToCase(\"JUMP\");\r\n\t        this.forceShowCollectSymbols();\r\n\t    };\r\n\t    BaseView.prototype.forceShowCollectSymbols = function () {\r\n\t        this._collectFrames.showCurrentSet(true);\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.spinReceived = function () {\r\n\t        DataManager_1.DataManager.updateCustomBetsData();\r\n\t        this._machine.setStoppedSymbolsArray(GameManager_1.GameManager.baseResponse.screen.reels);\r\n\t        this._machine.spinStop(null, false, true);\r\n\t        this._multipliers.show();\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        this._frameTop.goToCase(\"IDLE\");\r\n\t        this._frameTop.goToCase(\"JUMP\");\r\n\t    };\r\n\t    BaseView.prototype.machineStopped = function () {\r\n\t        this._wasFinished = false;\r\n\t        this._controller.machineStopped();\r\n\t        this.updateCollectSymbols(null, false);\r\n\t        if (this._winAnimator.showWins(GameManager_1.GameManager.baseResponse.wins, GameManager_1.GameManager.baseResponse.currentWin, GameManager_1.GameManager.baseResponse.customData)) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        }\r\n\t        if (GameManager_1.GameManager.baseResponse.customData &&\r\n\t            GameManager_1.GameManager.baseResponse.customData.collectedSymbols &&\r\n\t            GameManager_1.GameManager.baseResponse.customData.collectedSymbols.length >= 5) {\r\n\t            this._character.event(Character_1.Character.COLLECTION);\r\n\t        }\r\n\t        else\r\n\t            this._character.event(Character_1.Character.REELS_STOP);\r\n\t    };\r\n\t    BaseView.prototype.startedTeasing = function () {\r\n\t        this._character.event(Character_1.Character.MASK_TEASING_START);\r\n\t        this._winAnimator.setTeasing(true);\r\n\t    };\r\n\t    BaseView.prototype.stoppedTeasing = function () {\r\n\t        this._character.event(Character_1.Character.MASK_TEASING_END);\r\n\t        this._winAnimator.setTeasing(false);\r\n\t    };\r\n\t    BaseView.prototype.finishQuickWinCalculation = function () {\r\n\t        this._controller.quickWinCalculationFinished();\r\n\t    };\r\n\t    BaseView.prototype.finishWinCalculation = function () {\r\n\t        this._character.event(Character_1.Character.WIN_ANIM_COMPLETED);\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) {\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        }\r\n\t        if (this.childs[\"Messages\"] != null && ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t            this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n\t            PlayList_1.PlayList.play(\"SND_BonusPopup\");\r\n\t            this._character.event(Character_1.Character.BONUS_MESSAGE_START);\r\n\t        }\r\n\t        else {\r\n\t            this._character.event(Character_1.Character.WIN_ANIMS);\r\n\t        }\r\n\t        this._controller.allWinsFinished();\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.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        StageController_1.StageController.baseStage = true;\r\n\t        StageController_1.StageController.bonusStage = false;\r\n\t        this.visible = true;\r\n\t        PlayList_1.PlayList.stop(\"SND_RespinLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseRecapLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseLoop\");\r\n\t        this._introDelay.start(30);\r\n\t        this._isGamble = false;\r\n\t        this._toggleVisibleInGamble();\r\n\t        this._character.enable();\r\n\t        this.updateReelsByBetChange();\r\n\t    };\r\n\t    BaseView.prototype.introFinished = function () {\r\n\t        StageController_1.StageController.baseStage = true;\r\n\t        if (this.childs[\"Messages\"] != null) {\r\n\t            if (ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t                this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n\t                PlayList_1.PlayList.play(\"SND_BonusPopup\");\r\n\t            }\r\n\t        }\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                    if (BaseModel_1.BaseModel.LastScreen != null) {\r\n\t                        BaseModel_1.BaseModel.LastScreen[\"reels\"] = customBetData.reelsData;\r\n\t                        this._multipliers.hide();\r\n\t                        this._multipliers.show(customBetData.gameMultiplier);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.updateCollectSymbols(customBetData.collectingSymbols);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outro = function () {\r\n\t        StageController_1.StageController.baseStage = true;\r\n\t        PlayList_1.PlayList.stop(\"SND_RespinLoop\");\r\n\t        PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t        this._character.disable();\r\n\t        if (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            this.outroToBonus();\r\n\t        }\r\n\t        else {\r\n\t            this.outroToGamble();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outroToBonus = function () {\r\n\t        if (this.childs[\"Messages\"] != null && this.childs[\"Messages\"].getCurrentCase() == \"SHOW_BONUS\") {\r\n\t            this.childs[\"Messages\"].goToCase(\"HIDE_BONUS\");\r\n\t        }\r\n\t        this._character.event(Character_1.Character.HIDE);\r\n\t        this._outroDelay.start(30);\r\n\t        DataManager_1.DataManager.clearCollectedSymbolsForCurrentBet();\r\n\t    };\r\n\t    BaseView.prototype.outroToGamble = function () {\r\n\t        var inHighWins = this._winAnimator.reset(true);\r\n\t        if (this._wasFinished) {\r\n\t            this.outroStart();\r\n\t        }\r\n\t        else {\r\n\t            if (inHighWins) {\r\n\t                this._outroDelay.start(60);\r\n\t            }\r\n\t            else {\r\n\t                this._outroDelay.start(30);\r\n\t            }\r\n\t        }\r\n\t        this._isGamble = true;\r\n\t        this._toggleVisibleInGamble();\r\n\t    };\r\n\t    BaseView.prototype.outroStart = function () {\r\n\t        if (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            this.outroFinished();\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.play(\"SND_GambleTransitionIn\");\r\n\t            this._outroFinishDelay.start(30);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.outroFinished = function () {\r\n\t        this._outroFinishDelay.stop();\r\n\t        this._winAnimator.reset(true);\r\n\t        this._collectFrames.updateCurrentSet([]);\r\n\t        this._collectFrames.showCurrentSet();\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    BaseView.prototype.respin = function () {\r\n\t        BaseView.Respin = true;\r\n\t        this._respinCounter++;\r\n\t        if (this._respinCounter === 1) {\r\n\t            PlayList_1.PlayList.loop(\"SND_RespinLoop\", 0, true);\r\n\t        }\r\n\t        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n\t    };\r\n\t    BaseView.prototype.disableBase = function () {\r\n\t        this._winAnimator.resetTimer();\r\n\t    };\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.loop(\"SND_LoopAmbience\");\r\n\t            this._character.enable();\r\n\t        }\r\n\t        else {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseLoop\");\r\n\t            PlayList_1.PlayList.stop(\"SND_LoopAmbience\");\r\n\t            this._character.disable();\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype.onLayoutChange = function (isPortrait) {\r\n\t        _super.prototype.onLayoutChange.call(this, isPortrait);\r\n\t        this._toggleVisibleInGamble();\r\n\t        if (BaseView.LayoutManager.getPlatform() == LayoutManager_1.LayoutManagerAttributes.DESKTOP && !isPortrait) {\r\n\t            this.childs[\"BarLogo\"].visible = true;\r\n\t            this.childs[\"LogoLong_L\"] && (this.childs[\"LogoLong_L\"].visible = false);\r\n\t        }\r\n\t    };\r\n\t    BaseView.prototype._toggleVisibleInGamble = function () {\r\n\t        for (var i = 0; i < GAMBLE_HIDDING.length; i++) {\r\n\t            this.childs[GAMBLE_HIDDING[i]].visible = !this._isGamble;\r\n\t        }\r\n\t    };\r\n\t    BaseView.Respin = false;\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/* 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 neo_games_1 = __webpack_require__(3);\r\n\tvar Payline_1 = __webpack_require__(86);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(96);\r\n\tvar Symbol_1 = __webpack_require__(97);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar TimelineElement_1 = __webpack_require__(98);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(99);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar PlayList_1 = __webpack_require__(38);\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.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\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(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT)) {\r\n\t            this.reelCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X)) {\r\n\t            this.reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y)) {\r\n\t            this.reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\r\n\t            this.symbolCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\r\n\t        }\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        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.WINS_MULTIPLIERS)) {\r\n\t            this.multipliers = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.WINS_MULTIPLIERS));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.WINS_ANIMATIONS)) {\r\n\t            this.animationNames = node.getAttribute(Configuration_1.GeneralConfigurationAttributes.WINS_ANIMATIONS).split(\";\");\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.initialize = function (symbols, paylines, noWinSymbolsContainer, symbolsContainer, collectFrames) {\r\n\t        this.collectFrames = collectFrames;\r\n\t        this.createTimer();\r\n\t        this.createSymbols(symbols, noWinSymbolsContainer, symbolsContainer);\r\n\t        this.createPaylines(paylines);\r\n\t        this.createAnimations();\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 = reelsData[reelIndex].symbols.length - 1; i >= 0; 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 = reelsData[i].symbols.length - 1; j >= 0; j--) {\r\n\t                this.addCurrentSymbol(i, j);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.showWins = function (wins, win, customData) {\r\n\t        this.currentWins = wins;\r\n\t        this.currentWin = win;\r\n\t        this.customData = customData;\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.CaseWin);\r\n\t        }\r\n\t        this.startAnimation();\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstWins = function () {\r\n\t        this.currentCycle = 0;\r\n\t        this.collectSymbols(this.collectSymbolsCompleted.bind(this));\r\n\t    };\r\n\t    WinAnimator.prototype.collectSymbolsCompleted = function () {\r\n\t        this.emit(WinAnimator.FinishWinAnimator);\r\n\t        this.startCycleWins();\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.CaseWin);\r\n\t        }\r\n\t    };\r\n\t    WinAnimator.prototype.finishFirstInitWins = function () {\r\n\t        this.currentCycle = 0;\r\n\t        this.startCycleWins();\r\n\t    };\r\n\t    WinAnimator.prototype.startCycleWins = function () {\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseCyclePause, true);\r\n\t        }\r\n\t        this.cycleWins();\r\n\t    };\r\n\t    WinAnimator.prototype.cycleWins = function () {\r\n\t        if (this.currentWins == null) {\r\n\t            return;\r\n\t        }\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNowin);\r\n\t        PlayList_1.PlayList.play(\"SND_BaseWinline\");\r\n\t        for (var i = 0; i < this.currentWins.length; i++) {\r\n\t            this.winPaylineGoToCase(i, Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t        this.winSymbolsGoToCase(this.currentCycle, Symbol_1.Symbol.CaseCycle, true);\r\n\t        this.winPaylineGoToCase(this.currentCycle, Payline_1.Payline.CaseCycle);\r\n\t        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\t        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelay());\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        if (showLastSymbols) {\r\n\t            this.allSymbolsGoToReset();\r\n\t        }\r\n\t        else {\r\n\t            this.allSymbolsGoToCase(Symbol_1.Symbol.CaseEmpty, false);\r\n\t        }\r\n\t        if (this.csTimer) {\r\n\t            this.csTimer.stop();\r\n\t        }\r\n\t        this.allPaylinesGoToCase(Payline_1.Payline.CaseNormal);\r\n\t        if (showLastSymbols) {\r\n\t            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\t        }\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.stop();\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) {\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 (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        this.currentSymbols = [];\r\n\t        for (var i = 0; i < this.reelCount; i++) {\r\n\t            this.currentSymbols.push([]);\r\n\t            for (var j = 0; j < this.symbolCount; j++) {\r\n\t                this.currentSymbols[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.noWinSymbolsContainer.addChild(symbol);\r\n\t            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n\t        }\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.allSymbolsGoToReset = function () {\r\n\t        var caseType = Symbol_1.Symbol.CaseNormal;\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            for (var j = this.currentSymbols[i].length - 1; j >= 0; j--) {\r\n\t                var symbol = this.currentSymbols[i][j];\r\n\t                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n\t                    var currentCaseType = symbol.getCurrentCase();\r\n\t                    if (caseType !== currentCaseType && currentCaseType.indexOf(Symbol_1.Symbol.CaseIdle) === -1) {\r\n\t                        symbol.goToCase(caseType);\r\n\t                    }\r\n\t                    this.symbolsContainer.addChild(symbol);\r\n\t                }\r\n\t            }\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 = this.currentSymbols[i].length - 1; j >= 0; 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 (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            var shadowCnt = this.value.getChildElementByName(\"ValueCounterShadow\");\r\n\t            if (shadowCnt) {\r\n\t                var shadowImg = shadowCnt.getChildByName(\"CounterShadow\");\r\n\t                var counterElement = this.value.getChildElementByName(\"WinCounter\");\r\n\t                shadowImg.width = counterElement.width * 1.2;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            this.value.visible = false;\r\n\t        }\r\n\t        return symbols;\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        var win = this.currentWins[winIndex];\r\n\t        if (win.type == neo_games_1.Communication.Game.WinType.Feature) {\r\n\t            return [];\r\n\t        }\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.collectSymbols = function (callback) {\r\n\t        var _this = this;\r\n\t        this.csTimer = FrameTimer_1.CreateFrameTimer(\"collectingSymbolsTimer\");\r\n\t        this.csTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t            if (callback != null)\r\n\t                callback();\r\n\t            _this.csTimer.stop();\r\n\t        });\r\n\t        var timerDelay = 0;\r\n\t        for (var winIndex = 0; winIndex < this.currentWins.length; winIndex++) {\r\n\t            var win = this.currentWins[winIndex];\r\n\t            if (win.type == neo_games_1.Communication.Game.WinType.Feature)\r\n\t                continue;\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) {\r\n\t                        var symbol = this.currentSymbols[i][j];\r\n\t                        var isNewCollect = this.collectFrames.isNew(symbol.id + 1);\r\n\t                        if (isNewCollect) {\r\n\t                            symbol.goToCase(Symbol_1.Symbol.CaseCollecting);\r\n\t                            var sGp = symbol.getGlobalPosition();\r\n\t                            this.collectFrames.collectSymbol(symbol.id + 1, sGp.x, sGp.y);\r\n\t                            timerDelay = 30;\r\n\t                        }\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        this.csTimer.start(timerDelay);\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    };\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.CaseCycle && this.currentWins.length === 1) {\r\n\t                    this.paylines.goToCase(Payline_1.Payline.CaseSingleCycle, 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 () {\r\n\t        this.animationsContainer = new ContainerElement_1.ContainerElement();\r\n\t        this.animationsContainer.name = \"Animations\";\r\n\t        this.addChild(this.animationsContainer);\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                animation.on(\"calculationFinished\", this.onCalculationFinished.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.onCalculationFinished = function () {\r\n\t        this.emit(WinAnimator.FinishQuickWinCalculation);\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 = -1;\r\n\t        this.finishFirstWins();\r\n\t    };\r\n\t    WinAnimator.prototype.idle = function () {\r\n\t        for (var i = 0; i < this.getIdleActiveElementsCount(); i++) {\r\n\t            var symbol = this.currentSymbols[Math.floor(Math.random() * this.reelCount)][Math.floor(Math.random() * this.symbolCount)];\r\n\t            if (symbol && symbol.getCurrentCase() === Symbol_1.Symbol.CaseNormal) {\r\n\t                if (symbol.hasCase(Symbol_1.Symbol.CaseIdle)) {\r\n\t                    symbol.goToCase(Symbol_1.Symbol.CaseIdle);\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 60;\r\n\t    };\r\n\t    WinAnimator.prototype.getIdleActiveElementsCount = function () {\r\n\t        return 2;\r\n\t    };\r\n\t    WinAnimator.FinishWinCalculation = \"eventFinishWinCalculation\";\r\n\t    WinAnimator.FinishWinAnimator = \"eventFinishWinAnimator\";\r\n\t    WinAnimator.FinishQuickWinCalculation = \"eventFinishQuickWinCalculation\";\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}(ContainerElement_1.ContainerElement));\r\n\texports.WinAnimator = WinAnimator;\r\n\texports.WinAnimatorAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\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 SwitchElement_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Attributes_1 = __webpack_require__(20);\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.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/* 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 BaseElement_1 = __webpack_require__(11);\r\n\tvar SwitchStyle_1 = __webpack_require__(88);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar AnimationElement_1 = __webpack_require__(90);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ParticleElement_1 = __webpack_require__(93);\r\n\tvar Attributes_1 = __webpack_require__(20);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\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.previousRandomCase = -1;\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        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    };\r\n\t    SwitchElement.prototype.runBezierTween = function (node) {\r\n\t        var bezierX = null;\r\n\t        var bezierY = null;\r\n\t        var bezier = null;\r\n\t        bezierX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"BezierTweenX\"));\r\n\t        bezierY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"BezierTweenY\"));\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        var tweenEase = null;\r\n\t        var tweenDuration = parseInt(node.getAttribute(\"BezierTweenDuration\"));\r\n\t        var tweenDelay = null;\r\n\t        var tweenLoop = null;\r\n\t        Tweens_1.Tweens.bezierTween(this, { bezier: bezier, tweenEase: tweenEase, tweenDuration: tweenDuration, tweenDelay: tweenDelay, tweenLoop: tweenLoop });\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 (this.maskSprite != null) {\r\n\t            if (node.hasAttribute(\"BitmapMaskScaleTweenY\")) {\r\n\t                this.runBitmapMaskScaleTween(node, this.maskSprite);\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        }\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 (node.hasAttribute(\"BezierTweenX\") && node.hasAttribute(\"BezierTweenY\")) {\r\n\t            this.runBezierTween(node);\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 SwitchElement) {\r\n\t                                this.elements.childs[key].visible = false;\r\n\t                                this.elements.childs[key].goToCase(\"EMPTY\");\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                            Tweens_1.Tweens.removeTweens(this.elements.childs[key]);\r\n\t                        }\r\n\t                    }\r\n\t                    var nextCase = null;\r\n\t                    if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE)) {\r\n\t                        nextCase = node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_CASE);\r\n\t                    }\r\n\t                    else if (node.hasAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_RANDOM_CASE)) {\r\n\t                        nextCase = this.getRandomCase(node.getAttribute(SwitchStyle_1.SwitchStyleCaseAttributes.NEXT_RANDOM_CASE));\r\n\t                    }\r\n\t                    if (nextCase != null && this.hasCase(nextCase)) {\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, nextCase));\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, nextCase, true));\r\n\t                            }\r\n\t                        }\r\n\t                        else {\r\n\t                            this.goToCase(nextCase);\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        else {\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(this.getRandom(min, max));\r\n\t        }\r\n\t        return result;\r\n\t    };\r\n\t    SwitchElement.prototype.getRandomCase = function (s) {\r\n\t        var result = 0;\r\n\t        var dataArray = neo_common_1.ArrayUtils.stringArray(s);\r\n\t        if (dataArray.length > 0) {\r\n\t            var max = dataArray.length - 1;\r\n\t            var min = 0;\r\n\t            result = Math.round(this.getRandom(min, max));\r\n\t            if (result == this.previousRandomCase) {\r\n\t                while (result == this.previousRandomCase) {\r\n\t                    result = Math.round(this.getRandom(min, max));\r\n\t                }\r\n\t                this.previousRandomCase = result;\r\n\t            }\r\n\t            else {\r\n\t                this.previousRandomCase = result;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            return null;\r\n\t        }\r\n\t        return dataArray[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.prototype.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        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            elementMask.pivot.x = this.maskSprite.pivot.x;\r\n\t            elementMask.pivot.y = this.maskSprite.pivot.y;\r\n\t            elementMask.scale.x = this.maskSprite.scale.x;\r\n\t            elementMask.scale.y = this.maskSprite.scale.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.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.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    SwitchElement.AnimationComplete = \"animationComplete\";\r\n\t    SwitchElement.FinishAnimation = \"finishAnimation\";\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/* 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 Style_1 = __webpack_require__(89);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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    NEXT_RANDOM_CASE: \"NextRandomCase\",\r\n\t    TIMER: \"Timer\",\r\n\t};\r\n\n\n/***/ },\n/* 89 */\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__(13);\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/* 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 StyleManager_1 = __webpack_require__(19);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar TextElement_1 = __webpack_require__(91);\r\n\tvar Attributes_1 = __webpack_require__(20);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\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    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        this._randomStartFrame = Attributes_1.Attributes.assignBooleanAttribute(node, exports.AnimationElementAttributes.RANDOM_START_FRAME, this._randomStartFrame);\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(\"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        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            this.rotation = this.degrees2radians(parseInt(node.getAttribute(exports.AnimationElementAttributes.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.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        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.playMe = element.playMe.bind(element);\r\n\t        element.showMe = element.showMe.bind(element);\r\n\t        element.stop = element.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    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\r\n\n\n/***/ },\n/* 91 */\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__(13);\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/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar CustomUtils = (function () {\r\n\t    function CustomUtils() {\r\n\t    }\r\n\t    CustomUtils.isRespin = function () {\r\n\t        return (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin !== 0);\r\n\t    };\r\n\t    CustomUtils.isRespinEnabled = function () {\r\n\t        return (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin !== 0 &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.spinId === 0);\r\n\t    };\r\n\t    CustomUtils.isRespinActive = function () {\r\n\t        return (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin !== 0 &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.spinId > 0);\r\n\t    };\r\n\t    CustomUtils.isRespinLast = function () {\r\n\t        return (GameManager_1.GameManager.bonusRespinsResponse != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin === 0 &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.spinId > 0);\r\n\t    };\r\n\t    CustomUtils.isLastBonusSpin = function () {\r\n\t        return (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount === 0 &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.respin == 0 &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.spinId > -1);\r\n\t    };\r\n\t    CustomUtils.getRemainingRespins = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins != null &&\r\n\t            GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount != null) {\r\n\t            return GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount;\r\n\t        }\r\n\t        return 0;\r\n\t    };\r\n\t    CustomUtils.isBonusSymbol = function (symbolId) {\r\n\t        return symbolId >= CustomUtils.SymbolBonus && symbolId <= CustomUtils.SymbolBonusMajor;\r\n\t    };\r\n\t    CustomUtils.isBonusSymbolInArray = function (symbolIds) {\r\n\t        for (var i = 0; i < symbolIds.length; i++) {\r\n\t            if (symbolIds[i] >= CustomUtils.SymbolBonus && symbolIds[i] <= CustomUtils.SymbolBonusMajor) {\r\n\t                return true;\r\n\t            }\r\n\t        }\r\n\t        return false;\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    CustomUtils.SymbolEmpty = 32;\r\n\t    CustomUtils.SymbolWild = 10;\r\n\t    CustomUtils.SymbolBonus = 12;\r\n\t    CustomUtils.SymbolScatter = 11;\r\n\t    CustomUtils.SymbolBigScatter = 27;\r\n\t    CustomUtils.SymbolBonusMajor = 15;\r\n\t    CustomUtils.SymbolExpandedWild = 16;\r\n\t    CustomUtils.BigSymbolIdOffset = 16;\r\n\t    return CustomUtils;\r\n\t}());\r\n\texports.CustomUtils = CustomUtils;\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__(13);\r\n\tvar ImageElement_1 = __webpack_require__(94);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar ParticleStyle_1 = __webpack_require__(95);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar AnimationElement_1 = __webpack_require__(90);\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        this.addChild(particle);\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            case ParticleStyle_1.ParticleStyle.ZoneFountain:\r\n\t                particle.x = this.getRandom(this._style.positionZone.startX[0], this._style.positionZone.startX[1]);\r\n\t                particle.y = this.getRandom(this._style.positionZone.startY[0], this._style.positionZone.startY[1]);\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            case ParticleStyle_1.ParticleStyle.ZoneFountain:\r\n\t                this.addFountainPathBehavior(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                        valueX = Math.floor(this.getRandom(this._style.pathValues[i].x - this._style.pathValues[i].randomX, this._style.pathValues[i].x + this._style.pathValues[i].randomX));\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                        valueY = Math.floor(this.getRandom(this._style.pathValues[i].y - this._style.pathValues[i].randomY, this._style.pathValues[i].y + this._style.pathValues[i].randomY));\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        if (this._style.positionZone.bezierEllipse) {\r\n\t            var points = [];\r\n\t            var xValue = Math.round(Math.random() * 50 + 50);\r\n\t            var yValue = Math.round(Math.random() * 50 + 50);\r\n\t            if (Math.round(Math.random()) == 0) {\r\n\t                xValue *= -1;\r\n\t            }\r\n\t            if (Math.round(Math.random()) == 0) {\r\n\t                yValue *= -1;\r\n\t            }\r\n\t            points.push({ x: particle.x, y: particle.y });\r\n\t            points.push({ x: particle.x + xValue, y: particle.y + yValue });\r\n\t            points.push({ x: finalX, y: finalY });\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 {\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    };\r\n\t    ParticleElement.prototype.addFountainPathBehavior = function (particle, life) {\r\n\t        var points = [];\r\n\t        var valueX = this.getRandom(this._style.positionZone.intervalX[0], this._style.positionZone.intervalX[1]);\r\n\t        var valueY = 0;\r\n\t        if (Math.round(Math.random()) == 0) {\r\n\t            valueX *= -1;\r\n\t        }\r\n\t        for (var i = 0; i < this._style.positionZone.bezierY.length; i++) {\r\n\t            valueY = this.getRandom(this._style.positionZone.bezierY[i] - this._style.positionZone.intervalY[i], this._style.positionZone.bezierY[i] + this._style.positionZone.intervalY[i]);\r\n\t            points.push({ x: particle.x + valueX, y: valueY });\r\n\t            valueX = valueX + valueX;\r\n\t        }\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            tweenEase: \"slowMoInOut\",\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            var rotationAngles = [];\r\n\t            for (var i = 0; i < this._style.rotationValues.length; i++) {\r\n\t                var scaleValue = void 0;\r\n\t                if (this._style.rotationValues[i].length > 1) {\r\n\t                    scaleValue =\r\n\t                        Math.random() * (this._style.rotationValues[i][1] - this._style.rotationValues[i][0]) +\r\n\t                            this._style.rotationValues[i][0];\r\n\t                }\r\n\t                else {\r\n\t                    scaleValue = this._style.rotationValues[i][0];\r\n\t                }\r\n\t                rotationAngles.push(scaleValue);\r\n\t            }\r\n\t            Tweens_1.Tweens.rotationTween(particle, {\r\n\t                degrees: [rotationAngles[0], rotationAngles[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                var alpha = void 0;\r\n\t                if (this._style.alphaValues[i].length > 1) {\r\n\t                    alpha =\r\n\t                        Math.random() * (this._style.alphaValues[i][1] - this._style.alphaValues[i][0]) +\r\n\t                            this._style.alphaValues[i][0];\r\n\t                }\r\n\t                else {\r\n\t                    alpha = this._style.alphaValues[i][0];\r\n\t                }\r\n\t                alphas.push(alpha);\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.worldVisible) {\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        else {\r\n\t            this.stop();\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.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    };\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.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            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._maxEmit = this._maxEmit;\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/* 94 */\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__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar ShapeElement_1 = __webpack_require__(12);\r\n\tvar Attributes_1 = __webpack_require__(20);\r\n\tvar TextElement_1 = __webpack_require__(91);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\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        this.count = 0;\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    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 (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            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 (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        if (!node.hasAttribute(exports.ImageElementAttributes.ALPHA_TWEEN)) {\r\n\t            return false;\r\n\t        }\r\n\t        var alphaTween = neo_common_1.ArrayUtils.numberArray(node.getAttribute(exports.ImageElementAttributes.ALPHA_TWEEN));\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        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._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    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    VISIBLE: \"Visible\",\r\n\t    X: \"X\",\r\n\t    Y: \"Y\",\r\n\t};\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 Style_1 = __webpack_require__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar ParticleElement_1 = __webpack_require__(93);\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            startX: [960],\r\n\t            startY: [540],\r\n\t            intervalX: [170, 670],\r\n\t            intervalY: [200, 1000],\r\n\t            bezierY: [300, 900],\r\n\t            bezierEllipse: false,\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                    if (node.hasAttribute(\"BezierEllipse\")) {\r\n\t                        this._positionZone.bezierEllipse = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"BezierEllipse\"));\r\n\t                    }\r\n\t                    break;\r\n\t                case ParticleStyle.ZoneFountain:\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_START_X)) {\r\n\t                        this._positionZone.startX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_START_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_Y)) {\r\n\t                        this._positionZone.startY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_START_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INTERVAL_X)) {\r\n\t                        this._positionZone.intervalX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_INTERVAL_X));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INTERVAL_Y)) {\r\n\t                        this._positionZone.intervalY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_INTERVAL_Y));\r\n\t                    }\r\n\t                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_BEZIER_Y)) {\r\n\t                        this._positionZone.bezierY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(ParticleStyleAttributes.ATTR_BEZIER_Y));\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(neo_common_1.ArrayUtils.numberArray(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(neo_common_1.ArrayUtils.numberArray(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.ZoneFountain = \"Fountain\";\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    ATTR_START_X: \"StartX\",\r\n\t    ATTR_START_Y: \"StartY\",\r\n\t    ATTR_INTERVAL_X: \"IntervalX\",\r\n\t    ATTR_INTERVAL_Y: \"IntervalY\",\r\n\t    ATTR_BEZIER_Y: \"BezierY\",\r\n\t};\r\n\n\n/***/ },\n/* 96 */\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 \"3x3_5\":\r\n\t                definition[1] = [1, 1, 1];\r\n\t                definition[2] = [0, 0, 0];\r\n\t                definition[3] = [2, 2, 2];\r\n\t                definition[4] = [0, 1, 2];\r\n\t                definition[5] = [2, 1, 0];\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/* 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 SwitchElement_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Attributes_1 = __webpack_require__(20);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar GameManager_1 = __webpack_require__(30);\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.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    };\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.goToCase = function (s, emitEvent) {\r\n\t        if (emitEvent === void 0) { emitEvent = false; }\r\n\t        if (this.case == \"IMPACT\" && s == Symbol.CaseNormal && GameManager_1.GameManager.gameResponse.totalWin == 0) {\r\n\t            return;\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.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.CaseRotation = \"ROTATION\";\r\n\t    Symbol.CaseBlur = \"BLUR\";\r\n\t    Symbol.CaseTease = \"TEASE\";\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.CaseHighWin = \"HIGH_WIN\";\r\n\t    Symbol.CaseCycle = \"CYCLE\";\r\n\t    Symbol.CaseCyclePause = \"CYCLE_PAUSE\";\r\n\t    Symbol.CaseCollecting = \"COLLECTING\";\r\n\t    Symbol.CaseLanding = \"LANDING\";\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    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/* 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 BaseElement_1 = __webpack_require__(11);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(99);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Song_1 = __webpack_require__(101);\r\n\tvar Tweens_1 = __webpack_require__(14);\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    Object.defineProperty(TimelineElement.prototype, \"currentKeyframe\", {\r\n\t        get: function () {\r\n\t            return this._frameCounter;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\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    Object.defineProperty(TimelineElement.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    TimelineElement.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    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                }\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                                    if (next.tagName == \"WinEmit\") {\r\n\t                                    }\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                                    if (next.tagName == \"WinEmit\") {\r\n\t                                        element.setBitmapText(this._winValue);\r\n\t                                    }\r\n\t                                    element.start(0, this._winValue);\r\n\t                                    this._winValue = null;\r\n\t                                }\r\n\t                                else {\r\n\t                                    element.setBitmapText(this._winValue);\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/* 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 ImageTextElement_1 = __webpack_require__(100);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\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        this.appendText = \"\";\r\n\t        this.prependText = \"\";\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.APPEND_TEXT)) {\r\n\t            this.appendText = node.getAttribute(exports.ImageTextCounterElementAttributes.APPEND_TEXT);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.ImageTextCounterElementAttributes.PREPEND_TEXT)) {\r\n\t            this.prependText = node.getAttribute(exports.ImageTextCounterElementAttributes.PREPEND_TEXT);\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.setBitmapText = function (value) {\r\n\t        this.finalValue = value;\r\n\t        this.bitmapText.text = \"\";\r\n\t        this.bitmapText.text =\r\n\t            this.prependText +\r\n\t                neo_common_1.NumberUtils.valueToNumber(value, this.round || ImageTextCounterElement.Round ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces) +\r\n\t                this.appendText;\r\n\t        this.realign();\r\n\t    };\r\n\t    ImageTextCounterElement.prototype.start = function (from, to, duration, delay) {\r\n\t        var d = duration != null ? duration : this.duration;\r\n\t        var del = delay != null ? delay : 0;\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                tweenDelay: [del],\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 =\r\n\t            this.prependText +\r\n\t                neo_common_1.NumberUtils.valueToNumber(this.currentValue, this.round || ImageTextCounterElement.Round ? 0 : AppContext_1.AppContext.gameConfiguration.ShowDecimalPlaces) +\r\n\t                this.appendText;\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.appendText = this.appendText;\r\n\t        element.prependText = this.prependText;\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    APPEND_TEXT: \"Append\",\r\n\t    PREPEND_TEXT: \"Prepend\",\r\n\t};\r\n\n\n/***/ },\n/* 100 */\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__(11);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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_BASELINE)) {\r\n\t            this.textBaseline = node.getAttribute(exports.ImageTextElementAttributes.TEXT_BASELINE);\r\n\t            this.realign();\r\n\t        }\r\n\t        if (node.hasAttribute(\"Tint\")) {\r\n\t            this.bitmapText.tint = parseInt(node.getAttribute(\"Tint\"), 16);\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/* 101 */\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__(13);\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.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.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/* 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__(11);\r\n\tvar Reel_1 = __webpack_require__(103);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\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 ReelExtended_1 = __webpack_require__(104);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\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._reels = [];\r\n\t        this._teasing = [];\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._symbolTopCount = 1;\r\n\t        this._symbolBottomCount = 1;\r\n\t        this._reelsContainer = new PIXI.Container();\r\n\t        this.addChild(this._reelsContainer);\r\n\t    }\r\n\t    Machine.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.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(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT)) {\r\n\t            this._reelCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X)) {\r\n\t            this._reelX = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_X));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y)) {\r\n\t            this._reelY = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.REEL_Y));\r\n\t        }\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        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\r\n\t            this._visibleSymbolCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_TOP_COUNT)) {\r\n\t            this._symbolTopCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_TOP_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_BOTTOM_COUNT)) {\r\n\t            this._symbolBottomCount = parseInt(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.SYMBOL_BOTTOM_COUNT));\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.MIN_SPIN_ROTATION)) {\r\n\t            this._minSpinRotation = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.MIN_SPIN_ROTATION));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotation = 40;\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.MIN_SPIN_ROTATION_LONG)) {\r\n\t            this._minSpinRotationLong = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.MIN_SPIN_ROTATION_LONG));\r\n\t        }\r\n\t        else {\r\n\t            this._minSpinRotationLong = 100;\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.START_DELAY)) {\r\n\t            this._startDelay = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.START_DELAY));\r\n\t        }\r\n\t        else {\r\n\t            this._startDelay = 3;\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.STOP_DELAY)) {\r\n\t            this._stopDelay = parseInt(node.getAttribute(Configuration_1.MachineConfigurationAttributes.STOP_DELAY));\r\n\t        }\r\n\t        else {\r\n\t            this._stopDelay = 10;\r\n\t        }\r\n\t        if (node.hasAttribute(Configuration_1.MachineConfigurationAttributes.REEL_CONFIGURATION)) {\r\n\t            this._reelConfiguration = node.getAttribute(Configuration_1.MachineConfigurationAttributes.REEL_CONFIGURATION);\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            this._reels.push(new ReelExtended_1.ReelExtended());\r\n\t        }\r\n\t        for (var i = 0; i < this._reelCount; i++) {\r\n\t            var reel = this._reels[i];\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, this._symbolTopCount, this._symbolBottomCount, this._symbolWidth, this._symbolHeight, this._startDelay * i, this._stopDelay * i);\r\n\t            reel.on(Reel_1.Reel.ReelStopped, this.onReelStopped.bind(this));\r\n\t            this._reelsContainer.addChild(reel);\r\n\t        }\r\n\t        this._reelsContainer.visible = false;\r\n\t    };\r\n\t    Machine.prototype.initialize = function (symbols, reels, teasing1, teasing2) {\r\n\t        this._symbols = symbols;\r\n\t        this._teasing[1] = teasing1;\r\n\t        this._teasing[2] = teasing2;\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) {\r\n\t        if (false) {\r\n\t            this.log(\"spinStart\");\r\n\t        }\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                    this._reelsContainer.children[i].visible = true;\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].showSymbols();\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        PlayList_1.PlayList.play(\"SND_BaseRotationStart\");\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 || AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0);\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            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 (force && this.checkTeasing()) {\r\n\t            PlayList_1.PlayList.stop(\"SND_Teasing\");\r\n\t            this.emit(Machine.StoppedTeasing);\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            if (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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) {\r\n\t                this._teasing[1] && this._teasing[1].goToCase(\"EMPTY\");\r\n\t                this._teasing[2] && this._teasing[2].goToCase(\"EMPTY\");\r\n\t            }\r\n\t            this._canTease = force ? false : this.checkTeasing();\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 || !this._canTease) {\r\n\t                                this._reels[i].spinStop(force);\r\n\t                            }\r\n\t                            else {\r\n\t                                if (this._canTease) {\r\n\t                                    if (i === 0) {\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.checkTeasing = function () {\r\n\t        return this._stoppedSymbolsArray[0].symbols.indexOf(8) !== -1;\r\n\t    };\r\n\t    Machine.prototype.getLegalRemainingSpinDuration = function () {\r\n\t        if (AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan > 0) {\r\n\t            return this.calculateRemainingSpinDuration(AppContext_1.AppContext.gameConfiguration.GameRoundMinSpan);\r\n\t        }\r\n\t        if (AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration > 0) {\r\n\t            return AppContext_1.AppContext.gameConfiguration.MinGameRoundDuration;\r\n\t        }\r\n\t        return 0;\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.onReelStopped = function (reelIndex) {\r\n\t        if (false) {\r\n\t            this.log(\"reel stopped: \" + reelIndex);\r\n\t        }\r\n\t        if (!this._stoppedSymbolsArray[reelIndex].hasOwnProperty(\"overlay\")) {\r\n\t            PlayList_1.PlayList.play(\"SND_BaseRotationEnd\");\r\n\t        }\r\n\t        this._stoppedReelIndexes++;\r\n\t        this.actualReelStopped = reelIndex;\r\n\t        this._reels[reelIndex].visible = false;\r\n\t        this._canTease && this.tease(reelIndex);\r\n\t        this.emit(Machine.ReelStopped);\r\n\t        if (this._stoppedReelIndexes === this._reelCount) {\r\n\t            PlayList_1.PlayList.stop(\"SND_BaseRotation\", 10);\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            this.emit(Machine.MachineStopped);\r\n\t            this._reelsContainer.visible = false;\r\n\t        }\r\n\t    };\r\n\t    Machine.prototype.tease = function (reelIndex) {\r\n\t        var L = this._reels.length;\r\n\t        var hasMask = this._stoppedSymbolsArray[reelIndex].symbols.indexOf(8) > -1;\r\n\t        switch (reelIndex) {\r\n\t            case L - 3:\r\n\t                this._reels[reelIndex + 1].spinTease([8], 120);\r\n\t                PlayList_1.PlayList.play(\"SND_Teasing\");\r\n\t                this._teasing[reelIndex + 1].goToCase(\"TEASE\");\r\n\t                this.emit(Machine.StartedTeasing);\r\n\t                break;\r\n\t            case L - 2:\r\n\t                if (hasMask) {\r\n\t                    this._reels[reelIndex + 1].spinTease([8], 120);\r\n\t                    PlayList_1.PlayList.play(\"SND_Teasing\");\r\n\t                    this._teasing[reelIndex + 1].goToCase(\"TEASE\");\r\n\t                }\r\n\t                else {\r\n\t                    PlayList_1.PlayList.stop(\"SND_Teasing\");\r\n\t                    this._reels[reelIndex + 1].spinStop();\r\n\t                    this.emit(Machine.StoppedTeasing);\r\n\t                }\r\n\t                if (this._teasing[L - 2] && this._teasing[L - 2].getCurrentCase() == \"TEASE\")\r\n\t                    this._teasing[L - 2].goToCase(\"OUT\");\r\n\t                break;\r\n\t            case L - 1:\r\n\t                PlayList_1.PlayList.stop(\"SND_Teasing\");\r\n\t                if (this._teasing[L - 2] && this._teasing[L - 2].getCurrentCase() == \"TEASE\")\r\n\t                    this._teasing[L - 2].goToCase(\"OUT\");\r\n\t                if (this._teasing[L - 1] && this._teasing[L - 1].getCurrentCase() == \"TEASE\")\r\n\t                    this._teasing[L - 1].goToCase(\"OUT\");\r\n\t                var count = 0;\r\n\t                for (var i = 0; i <= reelIndex; i++) {\r\n\t                    if (this._stoppedSymbolsArray[i].symbols.indexOf(8) !== -1)\r\n\t                        count++;\r\n\t                }\r\n\t                if (count == L - 1)\r\n\t                    this.emit(Machine.StoppedTeasing);\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    Machine.MachineStopped = \"machineStopped\";\r\n\t    Machine.ReelStopped = \"onReelStopped\";\r\n\t    Machine.StartedTeasing = \"startedTeasing\";\r\n\t    Machine.StoppedTeasing = \"stoppedTeasing\";\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/* 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 Symbol_1 = __webpack_require__(97);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar Configuration_1 = __webpack_require__(52);\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/* 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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Reel_1 = __webpack_require__(103);\r\n\tvar Symbol_1 = __webpack_require__(97);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar ReelExtended = (function (_super) {\r\n\t    __extends(ReelExtended, _super);\r\n\t    function ReelExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    ReelExtended.prototype.spinStart = function () {\r\n\t        if (GameManager_1.GameManager.baseResponse &&\r\n\t            GameManager_1.GameManager.baseResponse.customData &&\r\n\t            GameManager_1.GameManager.baseResponse.customData.collectedSymbols) {\r\n\t            this.collectedSymbols = GameManager_1.GameManager.baseResponse.customData.collectedSymbols.slice();\r\n\t        }\r\n\t        _super.prototype.spinStart.call(this);\r\n\t    };\r\n\t    ReelExtended.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            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            if (!useTransform) {\r\n\t                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            }\r\n\t            else {\r\n\t                if (i < this.symbolBottomCount) {\r\n\t                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t                }\r\n\t                else if (i > this.symbolBottomCount + this.symbolCount - 1) {\r\n\t                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (useTransform) {\r\n\t            while (bottomSymbols.length > 0) {\r\n\t                this.currentSymbols.push(bottomSymbols.shift());\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            if (this.currentSymbols[i] == null) {\r\n\t                continue;\r\n\t            }\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    };\r\n\t    ReelExtended.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        if (symbolId >= 9 && symbolId <= 13 && symbolCase == Symbol_1.Symbol.CaseBlur) {\r\n\t            if (this.collectedSymbols && this.collectedSymbols.indexOf(symbolId) < 0) {\r\n\t                symbolCase = Symbol_1.Symbol.CaseRotation;\r\n\t            }\r\n\t        }\r\n\t        if (this.isTeasing)\r\n\t            symbolCase = Symbol_1.Symbol.CaseTease;\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    ReelExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ReelExtended);\r\n\t    return ReelExtended;\r\n\t}(Reel_1.Reel));\r\n\texports.ReelExtended = ReelExtended;\r\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar SwitchElement_1 = __webpack_require__(87);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar complexCases = [\"GUITAR\", \"GUITAR_FAST\", \"BONUS_FRUIT\"];\r\n\tvar WAVE_PERIOD = 1200;\r\n\tvar Character = (function () {\r\n\t    function Character(view, winAnimator) {\r\n\t        this._nextCase = \"\";\r\n\t        this._view = view;\r\n\t        this._winAnimator = winAnimator;\r\n\t        this._view.on(SwitchElement_1.SwitchElement.AnimationComplete, this._caseAnimFinish_handler.bind(this));\r\n\t        this._defaultState = this._view.getCurrentCase();\r\n\t    }\r\n\t    Character.prototype.enable = function () {\r\n\t        this._waveDelay = FrameTimer_1.CreateFrameTimer(\"waveDelay\");\r\n\t        this._waveDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this._doWave.bind(this));\r\n\t        this._waveDelay.start(WAVE_PERIOD);\r\n\t        this._view.goToCase(\"IDLE\");\r\n\t    };\r\n\t    Character.prototype.disable = function () {\r\n\t        this._waveDelay && this._waveDelay.stop();\r\n\t        this._waveDelay = null;\r\n\t        this._view.goToCase(this._defaultState);\r\n\t    };\r\n\t    Object.defineProperty(Character.prototype, \"currentEvent\", {\r\n\t        get: function () {\r\n\t            return this._currentEvent;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Character.prototype.event = function (name) {\r\n\t        this._currentEvent = name;\r\n\t        if (this._waveDelay) {\r\n\t            this._waveDelay.stop();\r\n\t            this._waveDelay.start(WAVE_PERIOD);\r\n\t        }\r\n\t        var currCase = this._view.getCurrentCase();\r\n\t        switch (name) {\r\n\t            case Character.SPIN:\r\n\t                break;\r\n\t            case Character.BONUS_SPIN:\r\n\t                this._nextCase = \"GUITAR_BEGIN\";\r\n\t                break;\r\n\t            case Character.COLLECTION:\r\n\t                this._nextCase = \"AMAZED\";\r\n\t                break;\r\n\t            case Character.SHOW:\r\n\t                this._nextCase = \"IDLE\";\r\n\t                break;\r\n\t            case Character.HIDE:\r\n\t                this._nextCase = \"EMPTY\";\r\n\t                break;\r\n\t            case Character.MASK_TEASING_START:\r\n\t                this._nextCase = \"TEASING_START\";\r\n\t                break;\r\n\t            case Character.MASK_TEASING_END:\r\n\t                this._nextCase = \"TEASING_END\";\r\n\t                break;\r\n\t            case Character.REELS_STOP:\r\n\t                if (GameManager_1.GameManager.baseResponse.currentWin > 0) {\r\n\t                    if (this._winAnimator && this._winAnimator.isHighWin()) {\r\n\t                        this._nextCase = \"HIGH_WIN\";\r\n\t                    }\r\n\t                    else\r\n\t                        this._nextCase = this._getRandCase([\"CLAP\", \"THUMBS_UP\"]);\r\n\t                }\r\n\t                break;\r\n\t            case Character.BONUS_SYMBOL_WIN:\r\n\t                this._nextCase = \"SYMBOL_WIN\";\r\n\t                this._waveDelay && this._waveDelay.stop();\r\n\t                break;\r\n\t            case Character.WIN_ANIM_COMPLETED:\r\n\t                if (this._winAnimator.isHighWin())\r\n\t                    this._nextCase = \"GUITAR_END\";\r\n\t                break;\r\n\t            case Character.BONUS_MISTERY:\r\n\t                this._nextCase = \"MISTERY\";\r\n\t                this._waveDelay && this._waveDelay.stop();\r\n\t                break;\r\n\t            case Character.BONUS_MISTERY_END:\r\n\t                this._nextCase = \"MISTERY_END\";\r\n\t                break;\r\n\t            case Character.BONUS_TOTAL_WIN:\r\n\t                this._nextCase = \"MYSTERY_TOTAL\";\r\n\t                break;\r\n\t            case Character.BONUS_FINAL:\r\n\t                this._nextCase = \"HAND_WAVE\";\r\n\t                this._waveDelay && this._waveDelay.stop();\r\n\t                break;\r\n\t            case Character.BONUS_MESSAGE_START:\r\n\t                this._nextCase = \"START_BONUS\";\r\n\t                this._waveDelay && this._waveDelay.stop();\r\n\t                break;\r\n\t        }\r\n\t        if (complexCases.indexOf(currCase) >= 0) {\r\n\t            this._doOut();\r\n\t        }\r\n\t        else\r\n\t            this._toNextCase();\r\n\t    };\r\n\t    Character.prototype._caseAnimFinish_handler = function () {\r\n\t        var caseName = this._view.getCurrentCase();\r\n\t        if (caseName.indexOf(\"_OUT\") >= 0) {\r\n\t            this._toNextCase();\r\n\t        }\r\n\t    };\r\n\t    Character.prototype._doOut = function () {\r\n\t        var caseName = this._view.getCurrentCase();\r\n\t        switch (caseName) {\r\n\t            case \"GUITAR\":\r\n\t            case \"GUITAR_FAST\":\r\n\t                this._view.goToCase(\"GUITAR_OUT\");\r\n\t                break;\r\n\t            case \"BONUS_FRUIT\":\r\n\t                this._view.goToCase(\"BONUS_FRUIT_OUT\");\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    Character.prototype._toNextCase = function () {\r\n\t        if (this._nextCase.length) {\r\n\t            this._view.goToCase(this._nextCase);\r\n\t            this._playSoundByCase(this._nextCase);\r\n\t            this._nextCase = \"\";\r\n\t        }\r\n\t    };\r\n\t    Character.prototype._getRandCase = function (cases) {\r\n\t        var r = Math.floor(Math.random() * cases.length);\r\n\t        if (r == cases.length)\r\n\t            r = 0;\r\n\t        return cases[r];\r\n\t    };\r\n\t    Character.prototype._doWave = function () {\r\n\t        if (this.onWave != null)\r\n\t            this.onWave();\r\n\t        this._waveDelay.stop();\r\n\t        this._nextCase = \"HAND_WAVE\";\r\n\t        this._toNextCase();\r\n\t        this._waveDelay.start(WAVE_PERIOD);\r\n\t    };\r\n\t    Character.prototype._playSoundByCase = function (caseName) {\r\n\t        switch (caseName) {\r\n\t            case \"HAND_WAVE\":\r\n\t                PlayList_1.PlayList.play(\"SND_CharacterWave\");\r\n\t                break;\r\n\t            case \"CLAP\":\r\n\t                PlayList_1.PlayList.play(\"SND_CharacterClap\");\r\n\t                break;\r\n\t            case \"MISTERY\":\r\n\t                PlayList_1.PlayList.play(\"SND_CharacterClap\");\r\n\t                break;\r\n\t            case \"SYMBOL_WIN\":\r\n\t                PlayList_1.PlayList.play(\"SND_CharacterClap\");\r\n\t                break;\r\n\t            case \"HIGH_WIN\":\r\n\t            case \"THUMBS_UP\":\r\n\t                PlayList_1.PlayList.play(\"SND_CharacterThumbsUp\");\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    Character.SPIN = \"spin\";\r\n\t    Character.SHOW = \"show\";\r\n\t    Character.HIDE = \"hide\";\r\n\t    Character.REELS_STOP = \"reels_stop\";\r\n\t    Character.WIN_ANIMS = \"win_anims\";\r\n\t    Character.COLLECTION = \"collection\";\r\n\t    Character.MASK_TEASING_START = \"mask_teasing_start\";\r\n\t    Character.MASK_TEASING_END = \"mask_teasing_end\";\r\n\t    Character.WIN_ANIM_COMPLETED = \"win_anim_completed\";\r\n\t    Character.BONUS_SPIN = \"bonus_spin\";\r\n\t    Character.BONUS_SYMBOL_WIN = \"bonus_symbol_win\";\r\n\t    Character.BONUS_MISTERY = \"bonus_mistery\";\r\n\t    Character.BONUS_MISTERY_END = \"bonus_mistery_end\";\r\n\t    Character.BONUS_TOTAL_WIN = \"bonus_total_win\";\r\n\t    Character.BONUS_MESSAGE_START = \"bonus_message_start\";\r\n\t    Character.BONUS_FINAL = \"bonus_final\";\r\n\t    return Character;\r\n\t}());\r\n\texports.Character = Character;\r\n\n\n/***/ },\n/* 106 */\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__(52);\r\n\tvar Scaling_1 = __webpack_require__(7);\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.getPlatform = function () {\r\n\t        return this.platform;\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/* 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__(13);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar StyleManager_1 = __webpack_require__(19);\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/* 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 neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BonusRespinsActions_1 = __webpack_require__(109);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\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__(54);\r\n\tvar BonusRespinsController_1 = __webpack_require__(110);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar DesktopBonusRespinsUserControls = (function (_super) {\r\n\t    __extends(DesktopBonusRespinsUserControls, _super);\r\n\t    function DesktopBonusRespinsUserControls() {\r\n\t        _super.call(this, \"bonusrespins\");\r\n\t        this._wasCalclulated = true;\r\n\t        this.longIntro = false;\r\n\t    }\r\n\t    DesktopBonusRespinsUserControls.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._userControls = document.getElementById(\"bonusUserControls\");\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.RespinReceived, this.respinReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.SpinEnd, this.spinEnd.bind(this));\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.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        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.restoreGameRound = function (collect) {\r\n\t        if (collect === void 0) { collect = false; }\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.spinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.respinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\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(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\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    DesktopBonusRespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.BonusRespins);\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionStart)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionStart;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionBack)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpin)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.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            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.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    DesktopBonusRespinsUserControls.prototype.spin = function () {\r\n\t        this.respin();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.respin = function () {\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString());\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        this._controller.respin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.back = function () {\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endBonus();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    DesktopBonusRespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null && GameManager_1.GameManager.bonusRespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.bonusRespinsResponse.totalWin);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.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    DesktopBonusRespinsUserControls.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    DesktopBonusRespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.machineStopped = function () {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        this._wasCalclulated = GameManager_1.GameManager.bonusRespinsResponse.currentWin === 0;\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        if (DataManager_1.DataManager.Autoplay && (DataManager_1.DataManager.GameLimit || CustomUtils_1.CustomUtils.isLastBonusSpin())) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t        }\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            if (DataManager_1.DataManager.GameLimit) {\r\n\t                this.limit();\r\n\t            }\r\n\t        }\r\n\t        else\r\n\t            this.machineStopFinished();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.spinEnd = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.machineStopFinished = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse.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    };\r\n\t    DesktopBonusRespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (CustomUtils_1.CustomUtils.isRespin()) {\r\n\t            this.disable();\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, true);\r\n\t                HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\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    };\r\n\t    DesktopBonusRespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null && GameManager_1.GameManager.bonusRespinsResponse.currentWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.bonusRespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    DesktopBonusRespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\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(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.add(\"bonus\");\r\n\t        }\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    DesktopBonusRespinsUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.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        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.add(\"bonus\");\r\n\t        }\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.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    DesktopBonusRespinsUserControls.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    DesktopBonusRespinsUserControls.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(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.remove(\"bonus\");\r\n\t        }\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\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[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = true,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.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    DesktopBonusRespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.enable = function (test) {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BonusRespinsActions_1.BonusRespinsActions.ActionStart, true);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    DesktopBonusRespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], DesktopBonusRespinsUserControls);\r\n\t    return DesktopBonusRespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.DesktopBonusRespinsUserControls = DesktopBonusRespinsUserControls;\r\n\n\n/***/ },\n/* 109 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\tvar BonusRespinsActions = (function () {\r\n\t    function BonusRespinsActions() {\r\n\t    }\r\n\t    BonusRespinsActions.ActionStart = \"BONUS_START\";\r\n\t    BonusRespinsActions.ActionBack = \"BONUS_BACK_TO_GAME\";\r\n\t    BonusRespinsActions.ActionSpin = \"BONUS_SPIN\";\r\n\t    BonusRespinsActions.ActionSpinStop = \"BONUS_SPIN_STOP\";\r\n\t    BonusRespinsActions.ActionAutoplay = \"BONUS_AUTOPLAY\";\r\n\t    BonusRespinsActions.ActionAutoplayStop = \"BONUS_AUTOPLAY_STOP\";\r\n\t    return BonusRespinsActions;\r\n\t}());\r\n\texports.BonusRespinsActions = BonusRespinsActions;\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 Controller_1 = __webpack_require__(77);\r\n\tvar BonusRespinsModel_1 = __webpack_require__(111);\r\n\tvar BonusRespinsView_1 = __webpack_require__(112);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar BonusRespinsController = (function (_super) {\r\n\t    __extends(BonusRespinsController, _super);\r\n\t    function BonusRespinsController() {\r\n\t        _super.call(this);\r\n\t    }\r\n\t    BonusRespinsController.prototype.startInitialization = function (view) {\r\n\t        if (false) {\r\n\t            this.log(\"startInitialization\");\r\n\t        }\r\n\t        if (view instanceof BonusRespinsView_1.BonusRespinsView) {\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 BonusRespinsModel_1.BonusRespinsModel(this);\r\n\t    };\r\n\t    BonusRespinsController.prototype.initReceived = function () {\r\n\t        this._view.initReceived(this);\r\n\t    };\r\n\t    BonusRespinsController.prototype.disableLogo = function () {\r\n\t        this._view.disableLogo();\r\n\t    };\r\n\t    BonusRespinsController.prototype.initIntro = function () {\r\n\t        this._view.initIntro();\r\n\t    };\r\n\t    BonusRespinsController.prototype.start = function () {\r\n\t        this._model.start();\r\n\t    };\r\n\t    BonusRespinsController.prototype.spin = function () {\r\n\t        this._model.spin();\r\n\t        this._view.spin();\r\n\t    };\r\n\t    BonusRespinsController.prototype.respin = function () {\r\n\t        this._view.respin();\r\n\t        this._model.respin();\r\n\t    };\r\n\t    BonusRespinsController.prototype.end = function () {\r\n\t        if (DataManager_1.DataManager.GameLimit)\r\n\t            this.endReceived();\r\n\t        else\r\n\t            this._model.end();\r\n\t    };\r\n\t    BonusRespinsController.prototype.stop = function () {\r\n\t        this._view.stop();\r\n\t    };\r\n\t    BonusRespinsController.prototype.startReceived = function () {\r\n\t        this._view.startReceived();\r\n\t        this.emit(BonusRespinsController.StartReceived);\r\n\t    };\r\n\t    BonusRespinsController.prototype.spinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(BonusRespinsController.SpinReceived);\r\n\t    };\r\n\t    BonusRespinsController.prototype.respinReceived = function () {\r\n\t        this._view.spinReceived();\r\n\t        this.emit(BonusRespinsController.RespinReceived);\r\n\t    };\r\n\t    BonusRespinsController.prototype.endReceived = function () {\r\n\t        this._view.endReceived();\r\n\t        this.emit(BonusRespinsController.EndReceived);\r\n\t    };\r\n\t    BonusRespinsController.prototype.spinEnd = function () {\r\n\t        this.emit(BonusRespinsController.SpinEnd);\r\n\t    };\r\n\t    BonusRespinsController.prototype.machineStopped = function () {\r\n\t        this.emit(BonusRespinsController.MachineStopped);\r\n\t    };\r\n\t    BonusRespinsController.prototype.winCalculationFinished = function () {\r\n\t        this.emit(BonusRespinsController.WinCalculationFinished);\r\n\t    };\r\n\t    BonusRespinsController.prototype.allWinsFinished = function () {\r\n\t        this.emit(BonusRespinsController.AllWinsFinished);\r\n\t    };\r\n\t    BonusRespinsController.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    BonusRespinsController.prototype.introFinished = function () {\r\n\t        this.emit(BonusRespinsController.IntroFinished);\r\n\t    };\r\n\t    BonusRespinsController.prototype.outro = function () {\r\n\t        this._view.outro();\r\n\t    };\r\n\t    BonusRespinsController.prototype.outroFinished = function () {\r\n\t        this.emit(BonusRespinsController.OutroFinished);\r\n\t    };\r\n\t    BonusRespinsController.prototype.enable = function () {\r\n\t        this._view.enable();\r\n\t    };\r\n\t    BonusRespinsController.StartReceived = \"eventStartReceived\";\r\n\t    BonusRespinsController.SpinReceived = \"eventSpinReceived\";\r\n\t    BonusRespinsController.RespinReceived = \"eventRespinReceived\";\r\n\t    BonusRespinsController.EndReceived = \"eventEndReceived\";\r\n\t    BonusRespinsController.MachineStopped = \"eventMachineStopped\";\r\n\t    BonusRespinsController.SpinEnd = \"eventSpinEnd\";\r\n\t    BonusRespinsController.WinCalculationFinished = \"eventWinCalculationFinished\";\r\n\t    BonusRespinsController.AllWinsFinished = \"eventAllWinsFinished\";\r\n\t    BonusRespinsController.IntroFinished = \"eventIntroFinished\";\r\n\t    BonusRespinsController.OutroFinished = \"eventOutroFinished\";\r\n\t    BonusRespinsController = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.Controller)\r\n\t    ], BonusRespinsController);\r\n\t    return BonusRespinsController;\r\n\t}(Controller_1.Controller));\r\n\texports.BonusRespinsController = BonusRespinsController;\r\n\n\n/***/ },\n/* 111 */\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__(44);\r\n\tvar BonusRespinsModel = (function () {\r\n\t    function BonusRespinsModel(controller) {\r\n\t        this.controller = controller;\r\n\t        this._currentStep = 0;\r\n\t    }\r\n\t    BonusRespinsModel.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.bonusRespinsStart().then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.startReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BonusRespinsModel.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\r\n\t            .bonusRespinsSpin(neo_games_1.Communication.Game.GameModules.BonusRespins)\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    BonusRespinsModel.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.endBonusRespins().then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.endReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BonusRespinsModel.prototype.respin = 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\r\n\t            .respin(neo_games_1.Communication.Game.GameModules.BonusRespins, GameManager_1.GameManager.bonusRespinsResponse.respin)\r\n\t            .then(function (response) {\r\n\t            MessageManager_1.MessageManager.postpone(_this.respinReceived.bind(_this), response);\r\n\t        });\r\n\t    };\r\n\t    BonusRespinsModel.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            neo_games_1.Platforms.Platforms.featureStarted({ type: neo_games_1.Communication.Game.GameModules.BonusRespins });\r\n\t            this.controller.startReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BonusRespinsModel.prototype.spinReceived = 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.spinReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BonusRespinsModel.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.BonusRespins });\r\n\t            this.controller.endReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    BonusRespinsModel.prototype.respinReceived = 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.respinReceived();\r\n\t        }\r\n\t        GameManager_1.GameManager.requestSend = false;\r\n\t    };\r\n\t    return BonusRespinsModel;\r\n\t}());\r\n\texports.BonusRespinsModel = BonusRespinsModel;\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 neo_games_1 = __webpack_require__(3);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar BonusSymbol_1 = __webpack_require__(113);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Character_1 = __webpack_require__(105);\r\n\tvar LayoutContainerElement_1 = __webpack_require__(107);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar CELL_SIZE = 146;\r\n\tvar FULL_ROUNDS = 1;\r\n\tvar MYSTERY_SYMBOL = 8;\r\n\tvar STEP_FADE_DIST = 5;\r\n\tvar BonusRespinsView = (function (_super) {\r\n\t    __extends(BonusRespinsView, _super);\r\n\t    function BonusRespinsView() {\r\n\t        _super.call(this);\r\n\t        this._currentCellID = 0;\r\n\t        this._currentRound = 0;\r\n\t        this._startDistance = 0;\r\n\t        this._stepNum = 0;\r\n\t        this._fieldSymbolIds = [];\r\n\t        this._fieldSymbols = [];\r\n\t        this.isDesktop = new LayoutManager_1.LayoutManager().getPlatform() == LayoutManager_1.LayoutManagerAttributes.DESKTOP;\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._mysteryDelay = FrameTimer_1.CreateFrameTimer(\"mysteryDelay\");\r\n\t        this._mysteryDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this.mysteryAnimation.bind(this));\r\n\t        this._updateMultipliersDelay = FrameTimer_1.CreateFrameTimer(\"updateMultipliersDelay\");\r\n\t        this._updateMultipliersDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this._updateMultipliers.bind(this, true));\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._messageDelay = FrameTimer_1.CreateFrameTimer(\"messageDelay\");\r\n\t        this._messageDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this._showFinalMessage.bind(this));\r\n\t        this._collectDelay = FrameTimer_1.CreateFrameTimer(\"collectDelay\");\r\n\t        this._collectDelay.on(FrameTimer_1.FrameTimerEvents.Complete, this._winCollectCompleted.bind(this));\r\n\t        StageController_1.StageController.bonusStageContainer = this;\r\n\t    }\r\n\t    BonusRespinsView.prototype.create = function (node) {\r\n\t        var _this = this;\r\n\t        _super.prototype.create.call(this, node);\r\n\t        if (this.childs != null) {\r\n\t            this._symbols = this.childs[\"Symbols\"];\r\n\t            this._symbolsContainer = this.childs[\"SymbolsContainer\"];\r\n\t            this._symbolsContainerTop = this.childs[\"SymbolsContainerTop\"];\r\n\t            this._bigSymbolContainer = this.childs[\"BigSymbolContainer\"];\r\n\t            this._frameLightContainer = this.childs[\"FrameLightContainer\"];\r\n\t            this._mysteryFeature = this.childs[\"MysteryFeature\"];\r\n\t            this._frameAnim = this.childs[\"FB_FrameAnim\"];\r\n\t            this._selectFrame = this.childs[\"BonusFrameLight\"];\r\n\t            this._messages = this.childs[\"Messages\"];\r\n\t            this._winCounter = this.childs[\"FB_WinCollect\"];\r\n\t            this._mysteryTotalX = this.childs[\"MysteryTotalX\"];\r\n\t            this._mysteryTotalXText = (this._mysteryTotalX.getChildElementByName(\"CounterTotalX\"));\r\n\t            this._character = new Character_1.Character(this.childs[\"FB_Character\"]);\r\n\t            this._selectFrame.goToCase(\"N\");\r\n\t            this._frameLightContainer && this._frameLightContainer.addChild(this._selectFrame);\r\n\t            this._selframeStartPos = [this._selectFrame.x, this._selectFrame.y];\r\n\t        }\r\n\t        this._character.onWave = function () {\r\n\t            _this._frameAnim.goToCase(\"WAVE\");\r\n\t            PlayList_1.PlayList.play(\"SND_BonusFrameAnim\");\r\n\t        };\r\n\t        if (node.hasAttribute(\"CellSize\")) {\r\n\t            this._cellSize = parseFloat(node.getAttribute(\"CellSize\"));\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.disableLogo = function () {\r\n\t    };\r\n\t    BonusRespinsView.prototype.initReceived = function (controller) {\r\n\t        this._controller = controller;\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null) {\r\n\t            if (GameManager_1.GameManager.bonusRespinsResponse.initData != null &&\r\n\t                GameManager_1.GameManager.bonusRespinsResponse.initData.reels !== null) {\r\n\t                this._fieldSymbolIds = GameManager_1.GameManager.bonusRespinsResponse.initData.reels[0];\r\n\t                this._setFieldSymbols();\r\n\t                this._updateCurrentCell();\r\n\t                this._updateMultipliers();\r\n\t                if (this._messages != null && CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t                    this._character.event(Character_1.Character.BONUS_FINAL);\r\n\t                    this._showFinalMessage();\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 bonus reponse\");\r\n\t            }\r\n\t        }\r\n\t        this.visible = false;\r\n\t    };\r\n\t    BonusRespinsView.prototype.initIntro = function () {\r\n\t        StageController_1.StageController.baseStage = false;\r\n\t        StageController_1.StageController.bonusStage = true;\r\n\t        document.body.classList.toggle(\"fruitbonus\", true);\r\n\t        this.visible = true;\r\n\t        PlayList_1.PlayList.loop(\"SND_BonusLoop\");\r\n\t        PlayList_1.PlayList.loop(\"SND_LoopAmbience\");\r\n\t    };\r\n\t    BonusRespinsView.prototype.spin = function () {\r\n\t    };\r\n\t    BonusRespinsView.prototype.respin = function () {\r\n\t        this._character.event(Character_1.Character.BONUS_SPIN);\r\n\t        this._currentRound = FULL_ROUNDS;\r\n\t        this._bigSymbol && this._bigSymbol.fadeOut();\r\n\t        this._mysteryFeature.goToCase(\"EMPTY\");\r\n\t        this._mysteryFeature.alpha = 1;\r\n\t        this.winboxAnim(false);\r\n\t        this._fastStopMode = false;\r\n\t        this._stepNum = 0;\r\n\t        this._startDistance = 0;\r\n\t        this._step();\r\n\t        this._frameAnim.goToCase(\"SPIN\");\r\n\t        while (this._symbolsContainerTop.children.length) {\r\n\t            this._symbolsContainer.addChild(this._symbolsContainerTop.removeChildAt(0));\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.stop = function () {\r\n\t        this._fastStopMode = true;\r\n\t    };\r\n\t    BonusRespinsView.prototype.startReceived = function () {\r\n\t        var _this = this;\r\n\t        this._setFieldSymbols();\r\n\t        this._updateCurrentCell();\r\n\t        this._updateMultipliers();\r\n\t        var introAnimTimer = FrameTimer_1.CreateFrameTimer(\"introAnimTimer\");\r\n\t        introAnimTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t            _this._frameAnim.goToCase(\"WAVE\");\r\n\t            PlayList_1.PlayList.play(\"SND_BonusFrameAnim\");\r\n\t        });\r\n\t        introAnimTimer.start(60);\r\n\t    };\r\n\t    BonusRespinsView.prototype._setFieldSymbols = function () {\r\n\t        this._symbolsContainer.removeChildren();\r\n\t        this._fieldSymbols.length = 0;\r\n\t        for (var i = 0; i < this._fieldSymbolIds.length; i++) {\r\n\t            var smb = void 0;\r\n\t            var cId = this._fieldSymbolIds[i];\r\n\t            if (cId == 0)\r\n\t                cId = 14;\r\n\t            smb = new BonusSymbol_1.BonusSymbol(this._symbols.getSymbol(cId - 1, \"BONUS\"), cId, false, [70, 112], \"fontNumbersSmall\", 0.9);\r\n\t            smb.alpha = 1;\r\n\t            var position = this._getCellProps(i).position;\r\n\t            smb.x = position[0];\r\n\t            smb.y = position[1];\r\n\t            this._symbolsContainer.addChild(smb);\r\n\t            this._fieldSymbols.push(smb);\r\n\t            if (this._symbolsContainer.rotation > 0)\r\n\t                smb.rotation = -this._symbolsContainer.rotation;\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.onLayoutChange = function (isPortrait) {\r\n\t        _super.prototype.onLayoutChange.call(this, isPortrait);\r\n\t        for (var i = 0; i < this._fieldSymbolIds.length; i++) {\r\n\t            this._fieldSymbols[i].rotation = isPortrait ? -Math.PI / 2 : 0;\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype._updateCurrentCell = function () {\r\n\t        this._currentCellID = GameManager_1.GameManager.bonusRespinsResponse.screen.reels[0].index;\r\n\t        var selectFramePosition = this._getCellProps(this._currentCellID).position;\r\n\t        this._selectFrame.x = this._selframeStartPos[0] + selectFramePosition[0];\r\n\t        this._selectFrame.y = this._selframeStartPos[1] + selectFramePosition[1];\r\n\t    };\r\n\t    BonusRespinsView.prototype._updateMultipliers = function (isBombAnim) {\r\n\t        if (isBombAnim === void 0) { isBombAnim = false; }\r\n\t        this._updateMultipliersDelay.stop();\r\n\t        var multipliers = GameManager_1.GameManager.bonusRespinsResponse.customData.collectingSymbolsMultiplier;\r\n\t        var bombDelay = 0;\r\n\t        if (multipliers) {\r\n\t            bombDelay = 25;\r\n\t            for (var i = 0; i < this._fieldSymbols.length; i++) {\r\n\t                var smb = this._fieldSymbols[i];\r\n\t                var mult = multipliers[smb.symbolId];\r\n\t                var changed = smb.updateNumber(mult, isBombAnim ? bombDelay : -1);\r\n\t                changed && (bombDelay += 5);\r\n\t            }\r\n\t        }\r\n\t        if (isBombAnim) {\r\n\t            this._controller.winCalculationFinished();\r\n\t            this._collectDelay.start(60 + bombDelay);\r\n\t            var sndBombTimer = FrameTimer_1.CreateFrameTimer(\"sndBombTimer\");\r\n\t            sndBombTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () { return PlayList_1.PlayList.play(\"SND_BonusChangeMults\"); });\r\n\t            sndBombTimer.start(25);\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype._getCellProps = function (index) {\r\n\t        var prop;\r\n\t        var cs = this._cellSize;\r\n\t        if (index < 7) {\r\n\t            prop = { position: [cs * (index + 2), 0], frameDirect: \"L\" };\r\n\t        }\r\n\t        else if (index < 12) {\r\n\t            prop = { position: [cs * 9, cs * (index - 7)], frameDirect: \"T\" };\r\n\t        }\r\n\t        else if (index < 21) {\r\n\t            prop = { position: [cs * (21 - index), cs * 5], frameDirect: \"R\" };\r\n\t        }\r\n\t        else if (index < 26) {\r\n\t            prop = { position: [0, cs * (26 - index)], frameDirect: \"B\" };\r\n\t        }\r\n\t        else {\r\n\t            prop = { position: [cs * (index - 26), 0], frameDirect: \"L\" };\r\n\t        }\r\n\t        if (index == 7 || index == 12 || index == 21 || index == 26)\r\n\t            prop.frameDirect = \"N\";\r\n\t        return prop;\r\n\t    };\r\n\t    BonusRespinsView.prototype.spinReceived = function () {\r\n\t        var data = GameManager_1.GameManager.bonusRespinsResponse.screen.reels[0];\r\n\t        this._targetCellID = data.index;\r\n\t        this._currentSymbID = data.symbols[0];\r\n\t        this._startDistance = this._calcDistance();\r\n\t        this._bigSymbolContainer.removeChildren();\r\n\t        if (this._currentSymbID > 0) {\r\n\t            this._bigSymbol = new BonusSymbol_1.BonusSymbol(this._symbols.getSymbol(this._currentSymbID - 1, \"BONUS_BIG\"), this._currentSymbID, true, [66, 56], \"fontNumbersBig\", 0.9);\r\n\t            this._bigSymbolContainer.addChild(this._bigSymbol);\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype._step = function () {\r\n\t        var _this = this;\r\n\t        this._currentCellID += 1;\r\n\t        this._stepNum += 1;\r\n\t        if (this._currentCellID >= this._fieldSymbolIds.length) {\r\n\t            this._currentCellID = 0;\r\n\t        }\r\n\t        var durCoef = 1;\r\n\t        var distance = this._calcDistance();\r\n\t        if (this._startDistance) {\r\n\t            if (distance < STEP_FADE_DIST)\r\n\t                durCoef = STEP_FADE_DIST - distance;\r\n\t        }\r\n\t        durCoef -= 0.3 * durCoef;\r\n\t        if (this._fastStopMode) {\r\n\t            durCoef = 0.01;\r\n\t        }\r\n\t        var cellProp = this._getCellProps(this._currentCellID);\r\n\t        gsap_1.TweenLite.to(this._selectFrame, 0.085 * durCoef, {\r\n\t            x: this._selframeStartPos[0] + cellProp.position[0],\r\n\t            y: this._selframeStartPos[1] + cellProp.position[1],\r\n\t            onComplete: function () {\r\n\t                if (_this._fieldSymbolIds[_this._currentCellID] > 0 && !_this._fastStopMode) {\r\n\t                    _this._fieldSymbols[_this._currentCellID].bounceOnField();\r\n\t                }\r\n\t                _this._selectFrame.goToCase(cellProp.frameDirect);\r\n\t                if (_this._currentCellID == _this._targetCellID) {\r\n\t                    if (_this._currentRound == 0) {\r\n\t                        if (cellProp.frameDirect != \"N\")\r\n\t                            _this._bounce(cellProp);\r\n\t                        else {\r\n\t                            _this.machineStopped();\r\n\t                            _this._selectFrame.goToCase(\"N\");\r\n\t                        }\r\n\t                        PlayList_1.PlayList.play(\"SND_FrameStepEnd\");\r\n\t                    }\r\n\t                    else {\r\n\t                        _this._currentRound--;\r\n\t                        _this._step();\r\n\t                    }\r\n\t                }\r\n\t                else\r\n\t                    _this._step();\r\n\t            },\r\n\t            ease: gsap_1.Linear.easeNone,\r\n\t        });\r\n\t        this._fastStopMode || PlayList_1.PlayList.play(\"SND_FrameStep\");\r\n\t    };\r\n\t    BonusRespinsView.prototype._bounce = function (cellProp) {\r\n\t        var _this = this;\r\n\t        var dx = 0;\r\n\t        var dy = 0;\r\n\t        var cellPos = {\r\n\t            x: this._selframeStartPos[0] + cellProp.position[0],\r\n\t            y: this._selframeStartPos[1] + cellProp.position[1],\r\n\t        };\r\n\t        switch (cellProp.frameDirect) {\r\n\t            case \"L\":\r\n\t                dx = +30;\r\n\t                break;\r\n\t            case \"T\":\r\n\t                dy = +30;\r\n\t                break;\r\n\t            case \"R\":\r\n\t                dx = -30;\r\n\t                break;\r\n\t            case \"B\":\r\n\t                dy = -30;\r\n\t                break;\r\n\t        }\r\n\t        gsap_1.TweenLite.to(this._selectFrame, this._fastStopMode ? 0.1 : 0.2, {\r\n\t            x: cellPos.x + dx,\r\n\t            y: cellPos.y + dy,\r\n\t            onComplete: function () {\r\n\t                _this._selectFrame.goToCase(\"N\");\r\n\t                gsap_1.TweenLite.to(_this._selectFrame, _this._fastStopMode ? 0.1 : 0.3, {\r\n\t                    x: cellPos.x,\r\n\t                    y: cellPos.y,\r\n\t                    ease: gsap_1.Expo.easeOut,\r\n\t                });\r\n\t                _this.machineStopped();\r\n\t            },\r\n\t        });\r\n\t    };\r\n\t    BonusRespinsView.prototype._calcDistance = function () {\r\n\t        var distance = this._targetCellID >= this._currentCellID\r\n\t            ? this._targetCellID - this._currentCellID\r\n\t            : this._fieldSymbolIds.length + this._targetCellID - this._currentCellID;\r\n\t        return this._currentRound * this._fieldSymbolIds.length + distance;\r\n\t    };\r\n\t    BonusRespinsView.prototype.endReceived = function () { };\r\n\t    BonusRespinsView.prototype.machineStopped = function () {\r\n\t        if (this._currentSymbID == MYSTERY_SYMBOL) {\r\n\t            this._character.event(Character_1.Character.BONUS_MISTERY);\r\n\t            this._mysteryFeature.goToCase(\"MYSTERY\");\r\n\t            this._mysteryDelay.start(80);\r\n\t            PlayList_1.PlayList.play(\"SND_BonusSymbMytery\");\r\n\t        }\r\n\t        else {\r\n\t            if (!CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t                this._character.event(Character_1.Character.BONUS_SYMBOL_WIN);\r\n\t                this._winCounterStart(90);\r\n\t                this._updateMultipliersDelay.start(170);\r\n\t            }\r\n\t            else\r\n\t                this._winCollectCompleted();\r\n\t        }\r\n\t        if (this._currentSymbID != 0) {\r\n\t            this._symbolsContainerTop.addChild(this._fieldSymbols[this._currentCellID]);\r\n\t        }\r\n\t        this._controller.spinEnd();\r\n\t    };\r\n\t    BonusRespinsView.prototype.mysteryAnimation = function () {\r\n\t        this._bigSymbolContainer.removeChildren();\r\n\t        var data = GameManager_1.GameManager.bonusRespinsResponse.wins[0].customData;\r\n\t        var mysteryCaseName = String(data.mysteryType).toUpperCase();\r\n\t        if (data.mysteryType == \"add\")\r\n\t            this._mysteryFeature.goToCase(mysteryCaseName + \"_\" + data.mysteryValue);\r\n\t        else\r\n\t            this._mysteryFeature.goToCase(mysteryCaseName);\r\n\t        if (data.mysteryType == \"collect\") {\r\n\t            var delayTimer = FrameTimer_1.CreateFrameTimer(\"startTotalCollectingDelay\");\r\n\t            delayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.startTotalCollecting.bind(this));\r\n\t            delayTimer.start(30);\r\n\t        }\r\n\t        else\r\n\t            this._updateMultipliersDelay.start(15);\r\n\t        switch (data.mysteryType) {\r\n\t            case \"add\":\r\n\t            case \"multiply\":\r\n\t                PlayList_1.PlayList.play(\"SND_BonusSymbAdd\");\r\n\t                break;\r\n\t            case \"collect\":\r\n\t                PlayList_1.PlayList.play(\"SND_BonusSymbTotal\");\r\n\t                break;\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.startTotalCollecting = function () {\r\n\t        var _this = this;\r\n\t        this._mysteryTotalXText.setBitmapText(0);\r\n\t        this._mysteryTotalX.goToCase(\"SHOW\");\r\n\t        this._mysteryTotalXValue = 0;\r\n\t        this.totalCollectX(0, function () {\r\n\t            _this._winCounterStart(40, 90);\r\n\t            _this._mysteryTotalX.goToCase(\"HIDE\");\r\n\t            _this._collectDelay.start(125);\r\n\t        });\r\n\t    };\r\n\t    BonusRespinsView.prototype.totalCollectX = function (index, onComplete) {\r\n\t        var _this = this;\r\n\t        if (index >= this._fieldSymbols.length) {\r\n\t            onComplete();\r\n\t            return;\r\n\t        }\r\n\t        var smb = this._fieldSymbols[index];\r\n\t        if (smb.symbolId == 8 || smb.symbolId == 14)\r\n\t            this.totalCollectX(index + 1, onComplete);\r\n\t        else {\r\n\t            var tf_1 = smb.cloneTextField();\r\n\t            tf_1.bitmapText.text = \"x\" + smb.multiplier;\r\n\t            if (this._symbolsContainer.rotation > 0) {\r\n\t                tf_1.rotation = -this._symbolsContainer.rotation;\r\n\t                var px = tf_1.position.x;\r\n\t                var py = tf_1.position.y;\r\n\t                tf_1.position.x = smb.position.x + py;\r\n\t                tf_1.position.y = smb.position.y - px;\r\n\t            }\r\n\t            else {\r\n\t                tf_1.position.x = smb.position.x + tf_1.position.x;\r\n\t                tf_1.position.y = smb.position.y + tf_1.position.y;\r\n\t            }\r\n\t            this._symbolsContainerTop.addChild(tf_1);\r\n\t            tf_1.scale.set(1.2, 1.2);\r\n\t            PlayList_1.PlayList.play(\"SND_MysteryXCounter\");\r\n\t            gsap_1.TweenLite.to(tf_1.scale, 0.2, { x: 1, y: 1 });\r\n\t            var toX = void 0;\r\n\t            var toY = void 0;\r\n\t            if (this._symbolsContainer.rotation == 0) {\r\n\t                toX = this._mysteryTotalX.x - this._symbolsContainer.x;\r\n\t                toY = this._mysteryTotalX.y - this._symbolsContainer.y;\r\n\t            }\r\n\t            else {\r\n\t                var sc = this._symbolsContainer.scale.x;\r\n\t                toX = -this._symbolsContainer.y / sc + this._mysteryTotalX.y / sc;\r\n\t                toY = +this._symbolsContainer.x / sc - this._mysteryTotalX.x / sc;\r\n\t            }\r\n\t            gsap_1.TweenLite.to(tf_1, 0.2, {\r\n\t                x: toX,\r\n\t                y: toY,\r\n\t                ease: gsap_1.Sine.easeInOut,\r\n\t                onComplete: function () {\r\n\t                    _this._mysteryTotalXText.start(_this._mysteryTotalXValue, _this._mysteryTotalXValue + smb.multiplier, 15, 0);\r\n\t                    _this._mysteryTotalXValue += smb.multiplier;\r\n\t                    _this.totalCollectX(index + 1, onComplete);\r\n\t                    _this._symbolsContainerTop.removeChild(tf_1);\r\n\t                },\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype._winCounterStart = function (delay, countDuration) {\r\n\t        var _this = this;\r\n\t        if (countDuration === void 0) { countDuration = 30; }\r\n\t        var delayTimer = FrameTimer_1.CreateFrameTimer(\"wincounterDelay\");\r\n\t        delayTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t            var textField = _this._winCounter.getChildElementByName(\"CounterTotal\");\r\n\t            textField.start(0, GameManager_1.GameManager.bonusRespinsResponse.wins[0].amount, countDuration, 10);\r\n\t            _this._winCounter.goToCase(_this.isDesktop ? \"COUNT_DESKTOP\" : \"COUNT\");\r\n\t            _this.winboxAnim(true);\r\n\t            PlayList_1.PlayList.loop(\"SND_BaseCreditboxLoop\");\r\n\t            var counterSoundTimer = FrameTimer_1.CreateFrameTimer(\"counterSoundTimer\");\r\n\t            counterSoundTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t                PlayList_1.PlayList.stop(\"SND_BaseCreditboxLoop\");\r\n\t                PlayList_1.PlayList.play(\"SND_BaseCreditboxEnd\");\r\n\t            });\r\n\t            counterSoundTimer.start(countDuration + 10);\r\n\t            if (GameManager_1.GameManager.bonusRespinsResponse.wins[0].customData &&\r\n\t                GameManager_1.GameManager.bonusRespinsResponse.wins[0].customData.mysteryType == \"collect\") {\r\n\t                gsap_1.TweenLite.to(_this._mysteryFeature, 0.5, { alpha: 0 });\r\n\t            }\r\n\t        });\r\n\t        delayTimer.start(delay);\r\n\t    };\r\n\t    BonusRespinsView.prototype._winCollectCompleted = function () {\r\n\t        this._collectDelay.stop();\r\n\t        this._controller.machineStopped();\r\n\t        this._controller.winCalculationFinished();\r\n\t        this.finishWinAnimator();\r\n\t        if (this._currentSymbID == MYSTERY_SYMBOL) {\r\n\t            var data = GameManager_1.GameManager.bonusRespinsResponse.wins[0].customData;\r\n\t            this._character.event(data.mysteryType == \"collect\" ? Character_1.Character.BONUS_TOTAL_WIN : Character_1.Character.BONUS_MISTERY_END);\r\n\t            if (GameManager_1.GameManager.bonusRespinsResponse.wins[0].customData.mysteryType != \"collect\") {\r\n\t                gsap_1.TweenLite.to(this._mysteryFeature, 0.5, { alpha: 0 });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.winboxAnim = function (active) {\r\n\t        var fieldWin = document.getElementById(\"bonusUserControls\").getElementsByClassName(\"field win\")[0];\r\n\t        if (!fieldWin)\r\n\t            return;\r\n\t        if (active) {\r\n\t            var delay = FrameTimer_1.CreateFrameTimer(\"winBoxAnimDelay\");\r\n\t            delay.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t                fieldWin.classList.toggle(\"anim\", true);\r\n\t            });\r\n\t            delay.start(80);\r\n\t        }\r\n\t        else {\r\n\t            fieldWin.classList.toggle(\"anim\", false);\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype.totalWinCountFinished = function () {\r\n\t    };\r\n\t    BonusRespinsView.prototype.finishWinAnimator = function () {\r\n\t        if (this._messages != null && CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            this._character.event(Character_1.Character.BONUS_FINAL);\r\n\t            this._messageDelay.start(60);\r\n\t        }\r\n\t        else {\r\n\t            this._controller.allWinsFinished();\r\n\t        }\r\n\t    };\r\n\t    BonusRespinsView.prototype._showFinalMessage = function () {\r\n\t        this._messages.goToCase(\"SHOW_MESSAGE\");\r\n\t        PlayList_1.PlayList.play(\"SND_BonusEndMsg\");\r\n\t        this._controller.allWinsFinished();\r\n\t        var textField = this._messages.getChildElementByName(\"WinCounter\");\r\n\t        textField.start(0, GameManager_1.GameManager.gameResponse.totalWin, 0);\r\n\t    };\r\n\t    BonusRespinsView.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        StageController_1.StageController.baseStage = false;\r\n\t        StageController_1.StageController.bonusStage = true;\r\n\t        document.body.classList.toggle(\"fruitbonus\", true);\r\n\t        this._messages.goToCase(\"EMPTY\");\r\n\t        this.visible = true;\r\n\t        this._introDelay.start(30);\r\n\t        this._character.enable();\r\n\t        PlayList_1.PlayList.loop(\"SND_BonusLoop\");\r\n\t    };\r\n\t    BonusRespinsView.prototype.introFinished = function () {\r\n\t        this._controller.introFinished();\r\n\t    };\r\n\t    BonusRespinsView.prototype.outro = function () {\r\n\t        this._character.disable();\r\n\t        PlayList_1.PlayList.stop(\"SND_BonusLoop\");\r\n\t        this.outroToBase();\r\n\t    };\r\n\t    BonusRespinsView.prototype.outroToBase = function () {\r\n\t        if (this._messages != null && this._messages.getCurrentCase() == \"SHOW_MESSAGE\") {\r\n\t            this._messages.goToCase(\"HIDE_MESSAGE\");\r\n\t        }\r\n\t        this._outroDelay.start(30);\r\n\t    };\r\n\t    BonusRespinsView.prototype.outroFinished = function () {\r\n\t        StageController_1.StageController.bonusStage = false;\r\n\t        document.body.classList.toggle(\"fruitbonus\", false);\r\n\t        this.visible = false;\r\n\t        this._controller.outroFinished();\r\n\t    };\r\n\t    BonusRespinsView.prototype.enable = function () {\r\n\t    };\r\n\t    BonusRespinsView = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BonusRespinsView);\r\n\t    return BonusRespinsView;\r\n\t}(LayoutContainerElement_1.LayoutContainerElement));\r\n\texports.BonusRespinsView = BonusRespinsView;\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 gsap_1 = __webpack_require__(16);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar ImageTextElement_1 = __webpack_require__(100);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar BonusSymbol = (function (_super) {\r\n\t    __extends(BonusSymbol, _super);\r\n\t    function BonusSymbol(smb, sid, isBig, textPos, textFont, textScale) {\r\n\t        if (textScale === void 0) { textScale = 1; }\r\n\t        _super.call(this);\r\n\t        this.symbol = smb;\r\n\t        this.symbolId = sid;\r\n\t        this.isBigImage = isBig;\r\n\t        this.isSpecSymbol = sid < 9 || sid > 13;\r\n\t        this.addChild(smb);\r\n\t        this.alpha = 0;\r\n\t        this.textScale = textScale;\r\n\t        var smbSize = [smb.width, smb.height];\r\n\t        if (!isBig)\r\n\t            this.symbol.position.set(smbSize[0] / 2, smbSize[1] / 2);\r\n\t        if (!this.isSpecSymbol) {\r\n\t            this.textField = new ImageTextElement_1.ImageTextElement();\r\n\t            this.textField.font = textFont;\r\n\t            this.textField.textAlign = \"center\";\r\n\t            this.textField.textBaseline = \"middle\";\r\n\t            this.textField.scale.set(textScale);\r\n\t            this.textField.bitmapText = new PIXI.extras.BitmapText(\"0\", { font: this.textField.font });\r\n\t            this.textField.position.set(smbSize[0] / 2, smbSize[1] * 0.78);\r\n\t            this.textField.addChild(this.textField.bitmapText);\r\n\t            this.addChild(this.textField);\r\n\t        }\r\n\t    }\r\n\t    BonusSymbol.prototype.cloneTextField = function () {\r\n\t        return this.textField.clone();\r\n\t    };\r\n\t    BonusSymbol.prototype.bounceOnField = function () {\r\n\t        var _this = this;\r\n\t        if (this.isBigImage)\r\n\t            return;\r\n\t        gsap_1.TweenLite.to(this.symbol.scale, 0.15, {\r\n\t            x: 1.5,\r\n\t            y: 1.5,\r\n\t            ease: gsap_1.Linear.ease,\r\n\t            onComplete: function () {\r\n\t                gsap_1.TweenLite.to(_this.symbol.scale, 0.3, { x: 1, y: 1, ease: gsap_1.Expo.easeOut });\r\n\t            },\r\n\t        });\r\n\t    };\r\n\t    BonusSymbol.prototype.fadeIn = function (updateNumber) {\r\n\t        var _this = this;\r\n\t        this.scale = new PIXI.Point(0.2, 0.2);\r\n\t        if (!this.alpha) {\r\n\t            gsap_1.TweenLite.to(this, 0.3, { alpha: 1 });\r\n\t            gsap_1.TweenLite.to(this.scale, 0.5, {\r\n\t                x: 1,\r\n\t                y: 1,\r\n\t                ease: gsap_1.Back.easeOut,\r\n\t                onComplete: function () {\r\n\t                    if (updateNumber != null) {\r\n\t                        _this.updateNumber(updateNumber, 0);\r\n\t                    }\r\n\t                },\r\n\t            });\r\n\t        }\r\n\t    };\r\n\t    BonusSymbol.prototype.fadeOut = function () {\r\n\t        if (this.alpha)\r\n\t            gsap_1.TweenLite.to(this, 0.3, { alpha: 0 });\r\n\t    };\r\n\t    BonusSymbol.prototype.fadeInMystery = function () {\r\n\t        this.symbol.goToCase(\"BONUS_MYSTERY\");\r\n\t        this.fadeIn();\r\n\t    };\r\n\t    BonusSymbol.prototype.fadeOutMystery = function (onComplete) {\r\n\t        gsap_1.TweenLite.to(this.scale, 0.3, { x: 0.3, y: 0.3, ease: gsap_1.Back.easeIn });\r\n\t        gsap_1.TweenLite.to(this, 0.3, {\r\n\t            alpha: 0,\r\n\t            onComplete: function () {\r\n\t                if (onComplete)\r\n\t                    onComplete();\r\n\t            },\r\n\t        });\r\n\t    };\r\n\t    BonusSymbol.prototype.updateNumber = function (num, bombDelay) {\r\n\t        var _this = this;\r\n\t        if (bombDelay === void 0) { bombDelay = -1; }\r\n\t        this.multiplier = num;\r\n\t        var change = \"x\" + num;\r\n\t        if (!this.isSpecSymbol && this.textField.bitmapText.text != change) {\r\n\t            if (bombDelay >= 0) {\r\n\t                var bombTimer = FrameTimer_1.CreateFrameTimer(\"bombDelay\");\r\n\t                bombTimer.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t                    _this.symbol.goToCase(_this.isBigImage ? \"BONUS_BIG_BOMB\" : \"BONUS_BOMB\");\r\n\t                    _this.textField.bitmapText.text = change;\r\n\t                    _this.textField.pivot.x = _this.textField.width / 2;\r\n\t                    gsap_1.TweenLite.to(_this.textField.scale, 0.15, {\r\n\t                        x: _this.textScale * 1.5,\r\n\t                        y: _this.textScale * 1.5,\r\n\t                        ease: gsap_1.Linear.ease,\r\n\t                        onComplete: function () {\r\n\t                            gsap_1.TweenLite.to(_this.textField.scale, 0.3, {\r\n\t                                x: _this.textScale,\r\n\t                                y: _this.textScale,\r\n\t                                ease: gsap_1.Expo.easeOut,\r\n\t                            });\r\n\t                        },\r\n\t                    });\r\n\t                });\r\n\t                bombTimer.start(bombDelay);\r\n\t            }\r\n\t            else {\r\n\t                this.textField.bitmapText.text = change;\r\n\t                this.textField.pivot.x = this.textField.width / 2;\r\n\t                this.textField.pivot.y = this.textField.height / 2;\r\n\t            }\r\n\t            return true;\r\n\t        }\r\n\t        else\r\n\t            return false;\r\n\t    };\r\n\t    BonusSymbol = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], BonusSymbol);\r\n\t    return BonusSymbol;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.BonusSymbol = BonusSymbol;\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 FrameTimer_1 = __webpack_require__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\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__(54);\r\n\tvar BonusRespinsActions_1 = __webpack_require__(109);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar BonusRespinsController_1 = __webpack_require__(110);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar GameModules = neo_games_1.Communication.Game.GameModules;\r\n\tvar WinType = neo_games_1.Communication.Game.WinType;\r\n\tvar MobileBonusRespinsUserControls = (function (_super) {\r\n\t    __extends(MobileBonusRespinsUserControls, _super);\r\n\t    function MobileBonusRespinsUserControls() {\r\n\t        _super.call(this, \"bonusrespins\");\r\n\t        this._wasCalclulated = true;\r\n\t    }\r\n\t    MobileBonusRespinsUserControls.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._userControls = document.getElementById(\"bonusUserControls\");\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.addController = function (controller) {\r\n\t        this._controller = controller;\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.StartReceived, this.startReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.SpinReceived, this.spinReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.RespinReceived, this.respinReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.EndReceived, this.endReceived.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.MachineStopped, this.machineStopped.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.IntroFinished, this.introFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.OutroFinished, this.outroFinished.bind(this));\r\n\t        this._controller.on(BonusRespinsController_1.BonusRespinsController.SpinEnd, this.spinEnd.bind(this));\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.registerActions = function () {\r\n\t        this.actions.registerActions((_a = {},\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.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        if (DataManager_1.DataManager.GameLimit) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.limit();\r\n\t        }\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.restoreGameRound = function () {\r\n\t        this.prepareNewGameRound();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.startReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.Base);\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.spinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        }\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.respinReceived = function () {\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t            HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataRoundId);\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(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, AppContext_1.AppContext.gameConfiguration.GameEnableReelsStop);\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    MobileBonusRespinsUserControls.prototype.endReceived = function () {\r\n\t        ModuleManager_1.ModuleManager.outroModule(GameModules.BonusRespins);\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.dispatchAction = function (action) {\r\n\t        if (action === GameActions_1.GameActions.ActionSpinOrStop) {\r\n\t            if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionStart)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionStart;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionBack)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionBack;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpin)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.ActionSpin;\r\n\t            }\r\n\t            else if (this.actions.getActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop)) {\r\n\t                action = BonusRespinsActions_1.BonusRespinsActions.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            _super.prototype.dispatchAction.call(this, action);\r\n\t            switch (action) {\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionStart:\r\n\t                    this.start();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionBack:\r\n\t                    this.back();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionSpin:\r\n\t                    this.spin();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop:\r\n\t                    this.stop();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay:\r\n\t                    this.autoplay();\r\n\t                    break;\r\n\t                case BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop:\r\n\t                    this.autoplayStop();\r\n\t                    break;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.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    MobileBonusRespinsUserControls.prototype.spin = function () {\r\n\t        this.respin();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.respin = function () {\r\n\t        DataManager_1.DataManager.Collectable = false;\r\n\t        ModuleManager_1.ModuleManager.disableGamble();\r\n\t        this.actions.disableAllActions();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, (GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString());\r\n\t        if (DataManager_1.DataManager.Autoplay) {\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        this._controller.respin();\r\n\t        neo_games_1.Platforms.Platforms.spinStarted();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.back = function () {\r\n\t        this.disable();\r\n\t        ModuleManager_1.ModuleManager.endBonus();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.stop = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    MobileBonusRespinsUserControls.prototype.end = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null && GameManager_1.GameManager.bonusRespinsResponse.totalWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.bonusRespinsResponse.totalWin);\r\n\t        }\r\n\t        this._controller.end();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.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    MobileBonusRespinsUserControls.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    MobileBonusRespinsUserControls.prototype.autoplayStop = function () {\r\n\t        DataManager_1.DataManager.Autoplay = false;\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, false);\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.machineStopped = function () {\r\n\t        neo_games_1.Platforms.Platforms.spinEnded();\r\n\t        this._wasCalclulated = GameManager_1.GameManager.bonusRespinsResponse.currentWin === 0;\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        if (DataManager_1.DataManager.Autoplay && (DataManager_1.DataManager.GameLimit || CustomUtils_1.CustomUtils.isLastBonusSpin())) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t        }\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            if (DataManager_1.DataManager.GameLimit) {\r\n\t                this.limit();\r\n\t            }\r\n\t        }\r\n\t        else\r\n\t            this.machineStopFinished();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.spinEnd = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.machineStopFinished = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop, false);\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse.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    };\r\n\t    MobileBonusRespinsUserControls.prototype.winCalculationFinished = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (CustomUtils_1.CustomUtils.isRespin()) {\r\n\t            this.disable();\r\n\t            if (DataManager_1.DataManager.Autoplay) {\r\n\t                this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop, true);\r\n\t                HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t            }\r\n\t            return;\r\n\t        }\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\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    };\r\n\t    MobileBonusRespinsUserControls.prototype.allWinsFinished = function () {\r\n\t        if (GameManager_1.GameManager.bonusRespinsResponse != null && GameManager_1.GameManager.bonusRespinsResponse.currentWin > 0) {\r\n\t            neo_games_1.Platforms.Platforms.win(GameManager_1.GameManager.bonusRespinsResponse.currentWin);\r\n\t        }\r\n\t        this._wasCalclulated = true;\r\n\t        this._afterWinDelay.stop();\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            DataManager_1.DataManager.Autoplay = false;\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    MobileBonusRespinsUserControls.prototype.initIntro = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\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(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.add(\"bonus\");\r\n\t        }\r\n\t        _super.prototype.initIntro.call(this);\r\n\t        this._controller.initIntro();\r\n\t        if (CustomUtils_1.CustomUtils.isLastBonusSpin()) {\r\n\t            this.actions.disableAllActions();\r\n\t            this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.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    MobileBonusRespinsUserControls.prototype.intro = function (long) {\r\n\t        if (long === void 0) { long = false; }\r\n\t        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        DataManager_1.DataManager.updateGameDataFromModule(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString());\r\n\t        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataBonusSpinRemainingCount, GameManager_1.GameManager.bonusRespinsResponse.bonusRespins.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        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.add(\"bonus\");\r\n\t        }\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.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    MobileBonusRespinsUserControls.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    MobileBonusRespinsUserControls.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(\"bonus\")) {\r\n\t            this._userControls_supreme.classList.remove(\"bonus\");\r\n\t        }\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.prepareNewGameRound = function () {\r\n\t        this._afterWinDelay.stop();\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[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = !DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = DataManager_1.DataManager.Autoplay && AppContext_1.AppContext.gameConfiguration.AutoplayModeEnabled,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = true,\r\n\t                    _a[BonusRespinsActions_1.BonusRespinsActions.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    MobileBonusRespinsUserControls.prototype.limit = function () {\r\n\t        LimitDialog_1.LimitDialog.openDialog();\r\n\t        this.actions.changeActionStates((_a = {},\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionStart] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionBack] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplay] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionAutoplayStop] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpin] = false,\r\n\t            _a[BonusRespinsActions_1.BonusRespinsActions.ActionSpinStop] = false,\r\n\t            _a\r\n\t        ));\r\n\t        var _a;\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.enable = function () {\r\n\t        this.actions.changeActionState(BonusRespinsActions_1.BonusRespinsActions.ActionStart, true);\r\n\t        HtmlController_1.HtmlController.updateActionElement(BonusRespinsActions_1.BonusRespinsActions.ActionStart, true);\r\n\t        this._controller.enable();\r\n\t    };\r\n\t    MobileBonusRespinsUserControls.prototype.disable = function () {\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\r\n\t    };\r\n\t    MobileBonusRespinsUserControls = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.HtmlElement)\r\n\t    ], MobileBonusRespinsUserControls);\r\n\t    return MobileBonusRespinsUserControls;\r\n\t}(UserControls_1.UserControls));\r\n\texports.MobileBonusRespinsUserControls = MobileBonusRespinsUserControls;\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__(8);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar UserControls_1 = __webpack_require__(71);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar Paytable_1 = __webpack_require__(51);\r\n\tvar GameData_1 = __webpack_require__(28);\r\n\tvar GameActions_1 = __webpack_require__(82);\r\n\tvar BaseController_1 = __webpack_require__(83);\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__(38);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar LimitDialog_1 = __webpack_require__(54);\r\n\tvar ResponsibleDialog1_1 = __webpack_require__(43);\r\n\tvar FreeRoundBonus_1 = __webpack_require__(36);\r\n\tvar Jackpot_1 = __webpack_require__(23);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar BetHigherThanMinDialog_1 = __webpack_require__(41);\r\n\tvar FreeRoundBonusDialog_1 = __webpack_require__(37);\r\n\tvar FreeRoundBonusIcon_1 = __webpack_require__(42);\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.QuickWinCalculationFinished, this.quickWinCalculationFinished.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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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        DataManager_1.DataManager.updateDataElements();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.collectReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t        DataManager_1.DataManager.Collectable = true;\r\n\t        if (this._unColectedWin == 0) {\r\n\t            this._controller.resetWinAnimator();\r\n\t        }\r\n\t        this.prepareNewGameRound();\r\n\t        this.updateReelsByBetChange();\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.spinReceived = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.frbSpin();\r\n\t        if (DataManager_1.DataManager.quickspinEnabled()) {\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);\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()) {\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 (!(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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        FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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            !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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            if (GameManager_1.GameManager.baseResponse != null && GameManager_1.GameManager.baseResponse.currentWin > 0 && this._wasCalclulated) {\r\n\t                this._controller.forceShowCollectSymbols();\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 || (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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: FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t                neo_games_1.Platforms.Platforms.roundEnded();\r\n\t                if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                    FreeRoundBonus_1.FreeRoundBonus.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.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            FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.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.bonusEnabled()) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.disableUi();\r\n\t            this.disable();\r\n\t            return;\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 (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(30);\r\n\t        }\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && GameManager_1.GameManager.baseResponse.totalWin > 0) {\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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.quickWinCalculationFinished = 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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\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        DataManager_1.DataManager.updateDataElement(GameData_1.GameData.DataTotalWin);\r\n\t        if (ModuleManager_1.ModuleManager.bonusEnabled()) {\r\n\t            return;\r\n\t        }\r\n\t        this._afterWinDelay.stop();\r\n\t        if (DataManager_1.DataManager.GameRoundClosed && !(FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            }\r\n\t            if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this.disableAllActions();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\r\n\t        }\r\n\t    };\r\n\t    MobileBaseUserControls.prototype.allWinsFinished = function () {\r\n\t        FreeRoundBonus_1.FreeRoundBonus.enableFrbExpiration();\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.bonusEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableBonus();\r\n\t            return;\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        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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb) {\r\n\t                this._controller.resetWinAnimator();\r\n\t                FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t                ModuleManager_1.ModuleManager.disableBase();\r\n\t                return;\r\n\t            }\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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.bonusEnabled()) {\r\n\t            ModuleManager_1.ModuleManager.enableBonus();\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 (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n\t            if (DataManager_1.DataManager.GameRoundClosed) {\r\n\t                FreeRoundBonus_1.FreeRoundBonus.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, previousModule) {\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    };\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._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.longIntro &&\r\n\t            DataManager_1.DataManager.GameRoundClosed &&\r\n\t            (FreeRoundBonus_1.FreeRoundBonus.id != null || FreeRoundBonus_1.FreeRoundBonus.otherOfferes.length > 0)) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.enableUi();\r\n\t            this.longIntro = false;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && DataManager_1.DataManager.GameRoundClosed) {\r\n\t            FreeRoundBonus_1.FreeRoundBonus.endFreeRounds();\r\n\t            ModuleManager_1.ModuleManager.disableBase();\r\n\t            return;\r\n\t        }\r\n\t        if (FreeRoundBonus_1.FreeRoundBonus.isLastFrb && FreeRoundBonus_1.FreeRoundBonus.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 (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            DataManager_1.DataManager.AutoplayAfterGamble = 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 (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 (this._userControls != null) {\r\n\t            this._userControls.style.display = \"none\";\r\n\t        }\r\n\t        if (ModuleManager_1.ModuleManager.bonusActive()) {\r\n\t            ModuleManager_1.ModuleManager.introModule(GameModules.BonusRespins);\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                        (FreeRoundBonus_1.FreeRoundBonus.inFrb &&\r\n\t                            FreeRoundBonus_1.FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n\t                            !FreeRoundBonus_1.FreeRoundBonus.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] = FreeRoundBonus_1.FreeRoundBonus.inFrb && FreeRoundBonus_1.FreeRoundBonus.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] = !FreeRoundBonus_1.FreeRoundBonus.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 (FreeRoundBonus_1.FreeRoundBonus.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() && !FreeRoundBonus_1.FreeRoundBonus.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                FreeRoundBonus_1.FreeRoundBonus.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                        FreeRoundBonus_1.FreeRoundBonus.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() || FreeRoundBonus_1.FreeRoundBonus.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        this._controller.disableBase();\r\n\t        if (!CustomUtils_1.CustomUtils.isRespin()) {\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.disableAllActions = function () {\r\n\t        this._afterWinDelay.stop();\r\n\t        this.actions.disableAllActions();\r\n\t        HtmlController_1.HtmlController.updateActionElements(this.getAllActions());\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.runRespin = function () {\r\n\t        if (CustomUtils_1.CustomUtils.isRespin()) {\r\n\t            this._respinDelay.start(15);\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 neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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 BaseElement_1 = __webpack_require__(11);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar SpineElement = (function (_super) {\r\n\t    __extends(SpineElement, _super);\r\n\t    function SpineElement() {\r\n\t        _super.call(this);\r\n\t        this._noWebGL = false;\r\n\t        this.updateAllowed = true;\r\n\t        this.spine = null;\r\n\t        this.mixes = [];\r\n\t        if (StageController_1.StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n\t            this._noWebGL = true;\r\n\t        }\r\n\t        if (!this._noWebGL) {\r\n\t            PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\t        }\r\n\t    }\r\n\t    Object.defineProperty(SpineElement.prototype, \"speed\", {\r\n\t        get: function () {\r\n\t            return this.spine.state.timeScale;\r\n\t        },\r\n\t        set: function (value) {\r\n\t            this.spine.state.timeScale = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    SpineElement.prototype.update = function (deltaTime) {\r\n\t        if (this.worldVisible) {\r\n\t            if (this.visible && this.spine && this.updateAllowed) {\r\n\t                this.spine.update((deltaTime / PIXI.ticker.shared.speed / PIXI.settings.TARGET_FPMS) * 0.001);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SpineElement.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        var spine = node.hasAttribute(exports.SpineElementAttributes.SPINE)\r\n\t            ? node.getAttribute(exports.SpineElementAttributes.SPINE)\r\n\t            : \"spine\";\r\n\t        var mixes = node.hasAttribute(exports.SpineElementAttributes.MIXES)\r\n\t            ? neo_common_1.ArrayUtils.stringArray(node.getAttribute(exports.SpineElementAttributes.MIXES), \"|\")\r\n\t            : [];\r\n\t        for (var i = 0; i < mixes.length; i++) {\r\n\t            var mix = neo_common_1.ArrayUtils.stringArray(mixes[i]);\r\n\t            this.mixes.push({ from: mix[0], to: mix[1], duration: parseFloat(mix[2]) });\r\n\t        }\r\n\t        this.createSpine(spine);\r\n\t        this.setMixes();\r\n\t    };\r\n\t    SpineElement.prototype.updateByNode = function (node) {\r\n\t        _super.prototype.updateByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.SpineElementAttributes.SPINE)) {\r\n\t            console.log(\"--\");\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SpineElementAttributes.SPEED)) {\r\n\t            this.spine.state.timeScale = parseFloat(node.getAttribute(exports.SpineElementAttributes.SPEED));\r\n\t        }\r\n\t        if (node.hasAttribute(\"Update\")) {\r\n\t            this.updateAllowed = false;\r\n\t            PIXI.ticker.shared.remove(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\t        }\r\n\t        else {\r\n\t            if (!this.updateAllowed) {\r\n\t                PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\t            }\r\n\t            this.updateAllowed = true;\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SpineElementAttributes.TINT)) {\r\n\t            this.spine.tint = parseInt(node.getAttribute(exports.SpineElementAttributes.TINT), 16);\r\n\t        }\r\n\t        else {\r\n\t            this.spine.tint = parseInt(\"ffffff\", 16);\r\n\t        }\r\n\t        if (node.hasAttribute(exports.SpineElementAttributes.ANIMATIONS)) {\r\n\t            var animations = neo_common_1.ArrayUtils.stringArray(node.getAttribute(exports.SpineElementAttributes.ANIMATIONS), \"|\");\r\n\t            var tracks = [];\r\n\t            for (var i = 0; i < animations.length; i++) {\r\n\t                var animation = neo_common_1.ArrayUtils.stringArray(animations[i]);\r\n\t                var track = { name: animation[0] };\r\n\t                if (animation.length > 1) {\r\n\t                    track.loop = neo_common_1.StringUtils.parseBoolean(animation[1]);\r\n\t                }\r\n\t                if (animation.length > 2) {\r\n\t                    track.delay = parseInt(animation[2]);\r\n\t                }\r\n\t                if (animation.length > 3) {\r\n\t                    track.track = parseInt(animation[3]);\r\n\t                }\r\n\t                tracks.push(track);\r\n\t            }\r\n\t            this.animate(tracks);\r\n\t        }\r\n\t        if (node.hasAttribute(\"UpdateFrame\")) {\r\n\t            var frames_1 = neo_common_1.ArrayUtils.numberArray(node.getAttribute(\"UpdateFrame\"));\r\n\t            if (frames_1.length == 1) {\r\n\t                this.spine.update(frames_1[0]);\r\n\t            }\r\n\t            else {\r\n\t                var updateTime = Math.floor(Math.random() * (frames_1[1] - frames_1[0]) + frames_1[0]);\r\n\t                this.spine.update(updateTime);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    SpineElement.prototype.createSpine = function (key) {\r\n\t        var textureAtlas = new PIXI.spine.core.TextureAtlas(SpineElement.Atlas.data, function (line, callback) {\r\n\t            line = line.replace(/\\.png/g, \"\");\r\n\t            callback(PIXI.BaseTexture.from(line));\r\n\t        });\r\n\t        var atlasAttachmentLoader = new PIXI.spine.core.AtlasAttachmentLoader(textureAtlas);\r\n\t        var skeletonJson = new PIXI.spine.core.SkeletonJson(atlasAttachmentLoader);\r\n\t        var skeletonData = skeletonJson.readSkeletonData(CustomUtils_1.CustomUtils.updateSpineData(SpineElement.Data.data[key]));\r\n\t        this.spine = new PIXI.spine.Spine(skeletonData);\r\n\t        this.spine.autoUpdate = false;\r\n\t        this.addChild(this.spine);\r\n\t    };\r\n\t    SpineElement.prototype.setMixes = function () {\r\n\t        for (var i = 0; i < this.mixes.length; i++) {\r\n\t            this.spine.stateData.setMix(this.mixes[i].from, this.mixes[i].to, this.mixes[i].duration / 60);\r\n\t        }\r\n\t    };\r\n\t    SpineElement.prototype.animate = function (animations) {\r\n\t        var _this = this;\r\n\t        var tracks = [];\r\n\t        if (this._noWebGL) {\r\n\t            this.spine.cacheAsBitmap = false;\r\n\t        }\r\n\t        else if (!this.updateAllowed) {\r\n\t        }\r\n\t        animations.forEach(function (animation) {\r\n\t            var track = neo_common_1.Utils.isNullOrUndefined(animation.track) ? 0 : animation.track;\r\n\t            while (tracks.length < track + 1) {\r\n\t                tracks.push([]);\r\n\t            }\r\n\t            tracks[track].push(animation);\r\n\t        });\r\n\t        tracks.forEach(function (track, i) {\r\n\t            track.forEach(function (animation, j) {\r\n\t                var name = animation.name;\r\n\t                var loop = neo_common_1.Utils.isNullOrUndefined(animation.loop) ? false : animation.loop;\r\n\t                var delay = neo_common_1.Utils.isNullOrUndefined(animation.delay) ? 0 : animation.delay / 60;\r\n\t                if (j === 0) {\r\n\t                    if (name === \"Empty\") {\r\n\t                        _this.spine.state.setEmptyAnimation(i, 0);\r\n\t                    }\r\n\t                    else {\r\n\t                        _this.spine.state.setAnimation(i, name, loop);\r\n\t                    }\r\n\t                }\r\n\t                else {\r\n\t                    if (name === \"Empty\") {\r\n\t                        _this.spine.state.addEmptyAnimation(i, 0, delay);\r\n\t                    }\r\n\t                    else {\r\n\t                        _this.spine.state.addAnimation(i, name, loop, delay);\r\n\t                    }\r\n\t                }\r\n\t            });\r\n\t        });\r\n\t        if (this._noWebGL) {\r\n\t            this.spine.update(0);\r\n\t            this.spine.cacheAsBitmap = true;\r\n\t        }\r\n\t        else if (!this.updateAllowed) {\r\n\t            this.spine.update(0);\r\n\t        }\r\n\t    };\r\n\t    SpineElement.prototype.clone = function () {\r\n\t        var element = new SpineElement();\r\n\t        element.alpha = this.alpha;\r\n\t        element.name = this.name;\r\n\t        element.pivot.x = this.pivot.x;\r\n\t        element.pivot.y = this.pivot.y;\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.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.updateAllowed = this.updateAllowed;\r\n\t        if (this.maskSprite != null) {\r\n\t            var maskElement = new PIXI.Sprite(this.maskSprite.texture);\r\n\t            maskElement.position.x = this.maskSprite.position.x;\r\n\t            maskElement.position.y = this.maskSprite.position.y;\r\n\t            element.maskSprite = maskElement;\r\n\t            element.addChild(maskElement);\r\n\t            element.mask = maskElement;\r\n\t        }\r\n\t        element.spine = new PIXI.spine.Spine(this.spine.spineData);\r\n\t        element.spine.autoUpdate = false;\r\n\t        element.addChild(element.spine);\r\n\t        element.mixes = this.mixes;\r\n\t        element.setMixes();\r\n\t        element.markAsCloned();\r\n\t        return element;\r\n\t    };\r\n\t    SpineElement = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], SpineElement);\r\n\t    return SpineElement;\r\n\t}(BaseElement_1.BaseElement));\r\n\texports.SpineElement = SpineElement;\r\n\texports.SpineElementAttributes = {\r\n\t    SPINE: \"Spine\",\r\n\t    MIXES: \"Mixes\",\r\n\t    SPEED: \"Speed\",\r\n\t    ANIMATIONS: \"Animations\",\r\n\t    TINT: \"Tint\",\r\n\t};\r\n\n\n/***/ },\n/* 118 */\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__(47);\r\n\tvar SplashScreen_1 = __webpack_require__(59);\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/* 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 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/* 120 */\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_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, \"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, \"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    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    return GameConfiguration;\r\n\t}(neo_games_1.GameEngine.GameConfigurationBase));\r\n\texports.GameConfiguration = GameConfiguration;\r\n\n\n/***/ },\n/* 121 */\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__(7);\r\n\tvar BalanceManager_1 = __webpack_require__(33);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar UserAction_1 = __webpack_require__(48);\r\n\tvar GameApp_1 = __webpack_require__(1);\r\n\tvar RetentionPanel_1 = __webpack_require__(40);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar PageVisibilityHandler_1 = __webpack_require__(50);\r\n\tvar NotificationManager_1 = __webpack_require__(55);\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/* 122 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar Languages_1 = __webpack_require__(25);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar ModuleManager_1 = __webpack_require__(32);\r\n\tvar BaseActions_1 = __webpack_require__(46);\r\n\tvar ChangeBetDialog = (function () {\r\n\t    function ChangeBetDialog() {\r\n\t    }\r\n\t    ChangeBetDialog.openDialog = function (action) {\r\n\t        ChangeBetDialog.opened = true;\r\n\t        ChangeBetDialog.dispatchAction = action;\r\n\t        if (ChangeBetDialog._element == null) {\r\n\t            ChangeBetDialog._element = document.getElementById(\"changeBetDialog\");\r\n\t            if (ChangeBetDialog._element != null) {\r\n\t                var titleElement = ChangeBetDialog._element.getElementsByTagName(\"h3\")[0];\r\n\t                if (titleElement != null) {\r\n\t                    titleElement.innerHTML = Languages_1.Languages.getRid(\"CHANGE_BET_TITLE\");\r\n\t                    if (action == BaseActions_1.BaseActions.ActionMaxBet && AppContext_1.AppContext.gameConfiguration.ShowMaxBetMessage) {\r\n\t                        titleElement.innerHTML = AppContext_1.AppContext.gameConfiguration.MaxButton\r\n\t                            ? Languages_1.Languages.getRid(\"MAX_BET_MESSAGE_RHR_PL\")\r\n\t                            : Languages_1.Languages.getRid(\"MAX_BET_MESSAGE_RHR\");\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (ChangeBetDialog._continueButton == null) {\r\n\t            ChangeBetDialog._continueButton = document.getElementById(\"continueChangeBetButton\");\r\n\t            if (ChangeBetDialog._continueButton != null) {\r\n\t                ChangeBetDialog._continueButton.onclick = ChangeBetDialog.onContinue;\r\n\t                ChangeBetDialog._continueButton.style.display = \"inline-block\";\r\n\t            }\r\n\t        }\r\n\t        if (ChangeBetDialog._closeButton == null) {\r\n\t            ChangeBetDialog._closeButton = document.getElementById(\"closeChangeBetButton\");\r\n\t            if (ChangeBetDialog._closeButton != null) {\r\n\t                ChangeBetDialog._closeButton.onclick = ChangeBetDialog.onClose;\r\n\t                ChangeBetDialog._closeButton.style.display = \"inline-block\";\r\n\t            }\r\n\t        }\r\n\t        if (ChangeBetDialog._element != null) {\r\n\t            if (ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n\t                ChangeBetDialog._element.classList.remove(ChangeBetDialog.DisabledClass);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            if (false) {\r\n\t                neo_common_1.Logger.errorGroup(\"ChangeBetDialog\", \"ERROR no ChangeBetDialog\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ChangeBetDialog.onContinue = function () {\r\n\t        ChangeBetDialog.opened = false;\r\n\t        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n\t            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t        ModuleManager_1.ModuleManager.dispatchAction(ChangeBetDialog.dispatchAction);\r\n\t    };\r\n\t    ChangeBetDialog.closeDialog = function () {\r\n\t        ChangeBetDialog.opened = false;\r\n\t        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n\t            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t    };\r\n\t    ChangeBetDialog.onClose = function () {\r\n\t        ChangeBetDialog.opened = false;\r\n\t        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n\t            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n\t        }\r\n\t        PlayList_1.PlayList.play(\"SND_Click\");\r\n\t    };\r\n\t    ChangeBetDialog.opened = false;\r\n\t    ChangeBetDialog.DisabledClass = \"_disabled\";\r\n\t    ChangeBetDialog.showChangeBetDialogOnCollect = false;\r\n\t    ChangeBetDialog.dispatchAction = \"\";\r\n\t    return ChangeBetDialog;\r\n\t}());\r\n\texports.ChangeBetDialog = ChangeBetDialog;\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 __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__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar Tweens_1 = __webpack_require__(14);\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    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/* 124 */\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__(13);\r\n\tvar ImageElement_1 = __webpack_require__(94);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\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/* 125 */\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__(13);\r\n\tvar ActionSet_1 = __webpack_require__(67);\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/* 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__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar ParticleStyle_1 = __webpack_require__(95);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar AnimationElement_1 = __webpack_require__(90);\r\n\tvar ParticleElement_1 = __webpack_require__(93);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\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            var rotationAngles = [];\r\n\t            for (var i = 0; i < this._style.rotationValues.length; i++) {\r\n\t                var scaleValue = void 0;\r\n\t                if (this._style.rotationValues[i].length > 1) {\r\n\t                    scaleValue =\r\n\t                        Math.random() * (this._style.rotationValues[i][1] - this._style.rotationValues[i][0]) +\r\n\t                            this._style.rotationValues[i][0];\r\n\t                }\r\n\t                else {\r\n\t                    scaleValue = this._style.rotationValues[i][0];\r\n\t                }\r\n\t                rotationAngles.push(scaleValue);\r\n\t            }\r\n\t            Tweens_1.Tweens.rotationTween(imageElement, {\r\n\t                degrees: [rotationAngles[0], rotationAngles[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                var alpha = void 0;\r\n\t                if (this._style.alphaValues[i].length > 1) {\r\n\t                    alpha =\r\n\t                        Math.random() * (this._style.alphaValues[i][1] - this._style.alphaValues[i][0]) +\r\n\t                            this._style.alphaValues[i][0];\r\n\t                }\r\n\t                else {\r\n\t                    alpha = this._style.alphaValues[i][0];\r\n\t                }\r\n\t                alphas.push(alpha);\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/* 127 */\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__(13);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar ParticleElement_1 = __webpack_require__(93);\r\n\tvar ParticleAnimationElement_1 = __webpack_require__(126);\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/* 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 StyleManager_1 = __webpack_require__(19);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar AnimationFrame_1 = __webpack_require__(9);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\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._animationLoop = true;\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        this.super2.runTween(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(ProtonElementAttributes.TINT)) {\r\n\t            this._tint = parseInt(node.getAttribute(ProtonElementAttributes.TINT), 16);\r\n\t        }\r\n\t        if (node.hasAttribute(ProtonElementAttributes.BLEND_MODE)) {\r\n\t            this._blendMode = parseInt(node.getAttribute(ProtonElementAttributes.BLEND_MODE));\r\n\t        }\r\n\t        if (node.hasAttribute(ProtonElementAttributes.STYLE) || node.hasAttribute(ProtonElementAttributes.STYLE_2)) {\r\n\t            if (node.hasAttribute(ProtonElementAttributes.STYLE)) {\r\n\t                this._style = StyleManager_1.StyleManager.Styles[node.getAttribute(ProtonElementAttributes.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(ProtonElementAttributes.STYLE_2)];\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 if (emitterNext.hasAttribute(\"NumPan\") &&\r\n\t                                        emitterNext.hasAttribute(\"TimePan\")) {\r\n\t                                        var numPan = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"NumPan\"));\r\n\t                                        var timePan = neo_common_1.ArrayUtils.numberArray(emitterNext.getAttribute(\"TimePan\"));\r\n\t                                        emitter.rate = new Proton.Rate(new Proton.Span(numPan[0], numPan[1]), new Proton.Span(timePan[0], timePan[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(ProtonElementAttributes.STYLE));\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ProtonElementAttributes.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(ProtonElementAttributes.EMIT)) {\r\n\t                        for (var i = 0; i < this._emitters.length; i++) {\r\n\t                            this._emitters[i].emit(node.getAttribute(ProtonElementAttributes.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            else if (this._stopping) {\r\n\t                this._emitting = true;\r\n\t                this._stopping = false;\r\n\t            }\r\n\t        }\r\n\t        if (node.hasAttribute(ProtonElementAttributes.STOPPING)) {\r\n\t            this._emitting = false;\r\n\t            this._stopping = true;\r\n\t        }\r\n\t        if (node.hasAttribute(ProtonElementAttributes.STOP)) {\r\n\t            this.stop();\r\n\t        }\r\n\t    };\r\n\t    ProtonElement.prototype.start = function (emit) {\r\n\t        if (emit === void 0) { emit = \"\"; }\r\n\t        if (this.isFrameStopped) {\r\n\t            this.removeChilds();\r\n\t            if (this._emitters != null && this._emitters.length > 0) {\r\n\t                if (emit != \"\") {\r\n\t                    for (var i = 0; i < this._emitters.length; i++) {\r\n\t                        this._emitters[i].emit(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    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 = this._animationLoop;\r\n\t                particleSprite.animationSpeed = this._animationSpeed;\r\n\t                if (!this._animationLoop) {\r\n\t                    particleSprite.gotoAndStop(0);\r\n\t                }\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        for (var i = 0; i < this._emitters.length; i++) {\r\n\t            this._emitters[i].resetParticles();\r\n\t        }\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            if (node.hasAttribute(\"Loop\")) {\r\n\t                this._animationLoop = neo_common_1.StringUtils.parseBoolean(node.getAttribute(\"Loop\"));\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\")); 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            case \"PointZone\":\r\n\t                var pointZoneX = void 0;\r\n\t                var pointZoneY = void 0;\r\n\t                if (node.hasAttribute(\"X\")) {\r\n\t                    pointZoneX = 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 PointZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (node.hasAttribute(\"Y\")) {\r\n\t                    pointZoneY = 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 PointZone\");\r\n\t                    }\r\n\t                }\r\n\t                if (pointZoneX != null && pointZoneY != null) {\r\n\t                    return new Proton.PointZone(pointZoneX, pointZoneY);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in PointZone\");\r\n\t                    }\r\n\t                }\r\n\t                break;\r\n\t            case \"ImageZone\":\r\n\t                if (node.hasAttribute(\"Image\")) {\r\n\t                    var texture = StageController_1.StageController.getTextureByResourceId(node.getAttribute(\"Image\"));\r\n\t                    var particleSprite = new PIXI.Sprite(texture);\r\n\t                    var pixelData = StageController_1.StageController.Renderer.extract.pixels(particleSprite);\r\n\t                    return new Proton.ImageZone({ data: pixelData, width: particleSprite.width, height: particleSprite.height }, 0, 0);\r\n\t                }\r\n\t                else {\r\n\t                    if (false) {\r\n\t                        this.log(\"WARNING missing some attributes in ImageZone\");\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 = particle.scale * (1 - particle.energy) * 3;\r\n\t                }\r\n\t                else if (particle.energy <= 1 / 3) {\r\n\t                    particle.scale = 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(ProtonElementAttributes.STYLE_2, this._styleName);\r\n\t        if (this._blendMode != null) {\r\n\t            node.setAttribute(ProtonElementAttributes.BLEND_MODE, this._blendMode.toString());\r\n\t        }\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\tvar ProtonElementAttributes = {\r\n\t    EMIT: \"Emit\",\r\n\t    TINT: \"Tint\",\r\n\t    BLEND_MODE: \"BlendMode\",\r\n\t    STYLE: \"Style\",\r\n\t    STYLE_2: \"Style2\",\r\n\t    START: \"Start\",\r\n\t    STOPPING: \"Stopping\",\r\n\t    STOP: \"Stop\",\r\n\t};\r\n\n\n/***/ },\n/* 129 */\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__(13);\r\n\tvar BaseElement_1 = __webpack_require__(11);\r\n\tvar Vibration_1 = __webpack_require__(130);\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/* 130 */\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/* 131 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\r\n\n\n/***/ },\n/* 132 */\n131,\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__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\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/* 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__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar BGParticleElement_1 = __webpack_require__(124);\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/* 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__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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__(89);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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 __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__(89);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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 neo_common_1 = __webpack_require__(2);\r\n\tvar Resource_1 = __webpack_require__(65);\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/* 140 */\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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar PreloaderProvider_1 = __webpack_require__(63);\r\n\tvar SplashScreen_1 = __webpack_require__(59);\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/* 141 */\n131,\n/* 142 */\n131,\n/* 143 */\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__(13);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\r\n\tvar StageController_1 = __webpack_require__(6);\r\n\tvar ImageElement_1 = __webpack_require__(94);\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/* 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 ShapeElement_1 = __webpack_require__(12);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\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/* 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 SwitchElement_1 = __webpack_require__(87);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar LayoutManager_1 = __webpack_require__(106);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar Tweens_1 = __webpack_require__(14);\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/* 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 Machine_1 = __webpack_require__(102);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar MachineExtended = (function (_super) {\r\n\t    __extends(MachineExtended, _super);\r\n\t    function MachineExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t    }\r\n\t    MachineExtended.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.visible = true;\r\n\t        this._reelsContainer.visible = true;\r\n\t        this.actualReelStopped = -1;\r\n\t        this._stoppedReelIndexes = 0;\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        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        PlayList_1.PlayList.play(\"SND_BaseRotationStart\");\r\n\t        PlayList_1.PlayList.loop(\"SND_BaseRotation\", 0, true);\r\n\t    };\r\n\t    MachineExtended.prototype.onReelStopped = function (reelIndex) {\r\n\t        _super.prototype.onReelStopped.call(this, reelIndex);\r\n\t        if (this._checkSymbolOnReel(reelIndex, [7]))\r\n\t            PlayList_1.PlayList.play(\"SND_Wild\");\r\n\t        if (this._checkMaskLanding(reelIndex) && this._canTease)\r\n\t            PlayList_1.PlayList.play(\"SND_Scatter\" + reelIndex);\r\n\t        if (this._checkSymbolOnReel(reelIndex, [9, 10, 11, 12, 13]))\r\n\t            PlayList_1.PlayList.play(\"SND_CollectingSymbol\");\r\n\t    };\r\n\t    MachineExtended.prototype._checkMaskLanding = function (reelIndex) {\r\n\t        var hasMask = this._checkSymbolOnReel(reelIndex, [8]);\r\n\t        var hasMaskPrev = reelIndex > 0 ? this._checkSymbolOnReel(reelIndex - 1, [8]) : true;\r\n\t        return hasMask && hasMaskPrev;\r\n\t    };\r\n\t    MachineExtended.prototype._checkSymbolOnReel = function (reelIndex, symbols) {\r\n\t        var bool = false;\r\n\t        for (var i = 0; i < symbols.length; i++) {\r\n\t            bool = bool || this._stoppedSymbolsArray[reelIndex].symbols.indexOf(symbols[i]) >= 0;\r\n\t        }\r\n\t        return bool;\r\n\t    };\r\n\t    MachineExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], MachineExtended);\r\n\t    return MachineExtended;\r\n\t}(Machine_1.Machine));\r\n\texports.MachineExtended = MachineExtended;\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__(13);\r\n\tvar Reel_1 = __webpack_require__(103);\r\n\tvar Symbol_1 = __webpack_require__(97);\r\n\tvar Tweens_1 = __webpack_require__(14);\r\n\tvar CustomUtils_1 = __webpack_require__(92);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar ReelAvalanche = (function (_super) {\r\n\t    __extends(ReelAvalanche, _super);\r\n\t    function ReelAvalanche() {\r\n\t        _super.call(this);\r\n\t        this.spinRollTimer = FrameTimer_1.CreateFrameTimer(\"spinRollTimer\");\r\n\t        this.spinRollTimer.on(FrameTimer_1.FrameTimerEvents.Complete, this.spinRollFinish.bind(this));\r\n\t        this.spinPostRollSymbols = [];\r\n\t    }\r\n\t    ReelAvalanche.prototype.showSymbols = function (useTransform) {\r\n\t        if (useTransform === void 0) { useTransform = 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            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            if (!useTransform) {\r\n\t                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            }\r\n\t            else {\r\n\t                if (i < this.symbolBottomCount) {\r\n\t                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t                }\r\n\t                else if (i > this.symbolBottomCount + this.symbolCount - 1) {\r\n\t                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t                }\r\n\t                else if (this.currentSymbols[this.symbolCount - i] == null) {\r\n\t                    this.currentSymbols[this.symbolCount - i] = this.getSymbol(symbolId - 1, symbolCase);\r\n\t                }\r\n\t            }\r\n\t        }\r\n\t        if (useTransform) {\r\n\t            while (bottomSymbols.length > 0) {\r\n\t                this.currentSymbols.push(bottomSymbols.shift());\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    };\r\n\t    ReelAvalanche.prototype.spinStart = function () {\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.isSkipped = false;\r\n\t        this.spinRollFinished = false;\r\n\t        this.hasData = false;\r\n\t        this.reelStopped = false;\r\n\t        this.hasReelUpdated = false;\r\n\t        this.inRespin = CustomUtils_1.CustomUtils.isRespin();\r\n\t        if (this.inRespin) {\r\n\t            this.respinRoll();\r\n\t        }\r\n\t        else {\r\n\t            this.spinRoll();\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.skipSpin = function () {\r\n\t        this.isSkipped = true;\r\n\t        this.spinComplete();\r\n\t    };\r\n\t    ReelAvalanche.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        if (this.isSkipped) {\r\n\t            return;\r\n\t        }\r\n\t        if (force && this.hasData && this.spinRollFinished) {\r\n\t            this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n\t            this.spinComplete();\r\n\t            return;\r\n\t        }\r\n\t        this.hasData = true;\r\n\t        if (force && this.hasData && !this.hasReelUpdated) {\r\n\t            this.updateReel();\r\n\t            this.updateSymbolsPosition(this.currentSymbols);\r\n\t            this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n\t            this.spinComplete();\r\n\t            return;\r\n\t        }\r\n\t        if (this.spinRollFinished) {\r\n\t            this.updateReel();\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.spinRoll = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var index = this.currentSymbols.length - i - 1;\r\n\t            Tweens_1.Tweens.removeTweens(this.currentSymbols[index], \"position\");\r\n\t            Tweens_1.Tweens.positionTween(this.currentSymbols[index], {\r\n\t                tweenX: [this.currentSymbols[index].x, this.currentSymbols[index].x],\r\n\t                tweenY: [this.currentSymbols[index].y, this.currentSymbols[index].y + this.symbolHeight * 6],\r\n\t                tweenDelay: i * ReelAvalanche.SingleSymbolDelay + this.startDelay,\r\n\t                tweenDuration: this.rollSpeed,\r\n\t                tweenEase: \"power2In\",\r\n\t            });\r\n\t        }\r\n\t        this.spinRollTimer.stop();\r\n\t        this.spinRollTimer.start(ReelAvalanche.SpinRollDuration * (this.index + 1));\r\n\t    };\r\n\t    ReelAvalanche.prototype.respinRoll = function () {\r\n\t        for (var i = 0; i < this.currentSymbols.length; i++) {\r\n\t            var index = this.currentSymbols.length - i - 1;\r\n\t            var symbol = this.currentSymbols[index];\r\n\t            if (symbol.getCurrentCase() != Symbol_1.Symbol.CaseEmpty) {\r\n\t                var emptySymbolCount = this.getEmptySymbols(index);\r\n\t                Tweens_1.Tweens.removeTweens(symbol, \"position\");\r\n\t                var tween = Tweens_1.Tweens.positionTween(symbol, {\r\n\t                    tweenX: [symbol.x, symbol.x],\r\n\t                    tweenY: [symbol.y, symbol.y + this.symbolHeight * emptySymbolCount],\r\n\t                    tweenDelay: i * ReelAvalanche.SingleSymbolDelay + this.startDelay,\r\n\t                    tweenDuration: this.rollSpeed * 0.5,\r\n\t                    tweenEase: \"power2In\",\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        this.updateRespinSymbolsPosition();\r\n\t        this.spinRollTimer.stop();\r\n\t        this.spinRollTimer.start(ReelAvalanche.SpinRollDuration);\r\n\t    };\r\n\t    ReelAvalanche.prototype.updateRespinSymbolsPosition = function () {\r\n\t        var counter = this.currentSymbols.length - 1;\r\n\t        for (var i = this.currentSymbols.length - 1; i >= 0; i--) {\r\n\t            if (this.currentSymbols[i].getCurrentCase() != Symbol_1.Symbol.CaseEmpty) {\r\n\t                if (i != counter) {\r\n\t                    var tempSymbol = this.currentSymbols[counter];\r\n\t                    this.currentSymbols[counter] = this.currentSymbols[i];\r\n\t                    this.currentSymbols[i] = tempSymbol;\r\n\t                }\r\n\t                counter--;\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.getEmptySymbols = function (index) {\r\n\t        var count = 0;\r\n\t        for (var i = index; i < this.currentSymbols.length; i++) {\r\n\t            var symbol = this.currentSymbols[i];\r\n\t            if (symbol.getCurrentCase() == Symbol_1.Symbol.CaseEmpty) {\r\n\t                count++;\r\n\t            }\r\n\t        }\r\n\t        return count;\r\n\t    };\r\n\t    ReelAvalanche.prototype.spinRollFinish = function () {\r\n\t        this.spinRollTimer.stop();\r\n\t        this.spinRollFinished = true;\r\n\t        if (this.hasData) {\r\n\t            this.updateReel();\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.updateReel = function () {\r\n\t        this.spinPostRollSymbols = [];\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                if (this.inRespin) {\r\n\t                    var symbol = this.currentSymbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n\t                    if (symbol != null && symbol.getCurrentCase() != Symbol_1.Symbol.CaseEmpty) {\r\n\t                        symbolCase = Symbol_1.Symbol.CaseEmpty;\r\n\t                    }\r\n\t                }\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.spinPostRollSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\t            this.addChild(this.spinPostRollSymbols[0]);\r\n\t        }\r\n\t        this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n\t        if (this.inRespin) {\r\n\t            this.respinPostRoll();\r\n\t        }\r\n\t        else {\r\n\t            this.spinPostRoll();\r\n\t        }\r\n\t        this.hasReelUpdated = true;\r\n\t    };\r\n\t    ReelAvalanche.prototype.updateSymbolsPosition = function (symbols) {\r\n\t        for (var i = 0; i < symbols.length; i++) {\r\n\t            var symbol = symbols[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    ReelAvalanche.prototype.spinPostRoll = function () {\r\n\t        for (var i = 0; i < this.spinPostRollSymbols.length; i++) {\r\n\t            var index = this.spinPostRollSymbols.length - i - 1;\r\n\t            Tweens_1.Tweens.removeTweens(this.spinPostRollSymbols[index], \"position\");\r\n\t            var tween = Tweens_1.Tweens.positionTween(this.spinPostRollSymbols[index], {\r\n\t                tweenX: [this.spinPostRollSymbols[index].x, this.spinPostRollSymbols[index].x],\r\n\t                tweenY: [this.spinPostRollSymbols[index].y - this.symbolHeight * 6, this.spinPostRollSymbols[index].y],\r\n\t                tweenDelay: i * ReelAvalanche.SingleSymbolPostrollDelay + this.stopDelay,\r\n\t                tweenDuration: this.postRollSpeed,\r\n\t                tweenEase: \"power2Out\",\r\n\t            });\r\n\t            if (i == this.spinPostRollSymbols.length - 1) {\r\n\t                tween.eventCallback(\"onComplete\", this.spinComplete, null, this);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.respinPostRoll = function () {\r\n\t        var tween;\r\n\t        for (var i = 0; i < this.spinPostRollSymbols.length; i++) {\r\n\t            var index = this.spinPostRollSymbols.length - i - 1;\r\n\t            var symbol = this.spinPostRollSymbols[index];\r\n\t            if (symbol.getCurrentCase() != Symbol_1.Symbol.CaseEmpty) {\r\n\t                Tweens_1.Tweens.removeTweens(symbol, \"position\");\r\n\t                tween = Tweens_1.Tweens.positionTween(symbol, {\r\n\t                    tweenX: [symbol.x, symbol.x],\r\n\t                    tweenY: [symbol.y - this.symbolHeight * 6, symbol.y],\r\n\t                    tweenDelay: i * 3,\r\n\t                    tweenDuration: this.postRollSpeed * 0.5,\r\n\t                    tweenEase: \"power2Out\",\r\n\t                });\r\n\t            }\r\n\t        }\r\n\t        tween.eventCallback(\"onComplete\", this.spinComplete, null, this);\r\n\t    };\r\n\t    ReelAvalanche.prototype.spinComplete = function () {\r\n\t        this.resetSymbolsContainer(this.currentSymbols);\r\n\t        this.resetSymbolsContainer(this.spinPostRollSymbols);\r\n\t        this.reelStopped = true;\r\n\t        this.emit(Reel_1.Reel.ReelStopped, this.index);\r\n\t    };\r\n\t    ReelAvalanche.prototype.resetSymbolsContainer = function (symbols) {\r\n\t        while (symbols.length > 0) {\r\n\t            var symbol = symbols.pop();\r\n\t            if (symbol != null) {\r\n\t                Tweens_1.Tweens.removeTweens(symbol, \"position\");\r\n\t                this.returnSymbol(symbol);\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.removeSymbolsTween = function (symbols) {\r\n\t        for (var i = 0; i < symbols.length; i++) {\r\n\t            Tweens_1.Tweens.removeTweens(symbols[i], \"position\");\r\n\t        }\r\n\t    };\r\n\t    ReelAvalanche.prototype.getSymbol = function (symbolId, symbolCase) {\r\n\t        if (symbolCase === Symbol_1.Symbol.CaseRotation) {\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        return symbol;\r\n\t    };\r\n\t    ReelAvalanche.Tease = false;\r\n\t    ReelAvalanche.SpinRollDuration = 1;\r\n\t    ReelAvalanche.SingleSymbolDelay = 1;\r\n\t    ReelAvalanche.SingleSymbolPostrollDelay = 3;\r\n\t    ReelAvalanche = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], ReelAvalanche);\r\n\t    return ReelAvalanche;\r\n\t}(Reel_1.Reel));\r\n\texports.ReelAvalanche = ReelAvalanche;\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__(13);\r\n\tvar WinAnimator_1 = __webpack_require__(85);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(96);\r\n\tvar Symbol_1 = __webpack_require__(97);\r\n\tvar neo_games_1 = __webpack_require__(3);\r\n\tvar ImageTextCounterElement_1 = __webpack_require__(99);\r\n\tvar FrameTimer_1 = __webpack_require__(8);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar Scaling_1 = __webpack_require__(7);\r\n\tvar WinAnimatorExtended = (function (_super) {\r\n\t    __extends(WinAnimatorExtended, _super);\r\n\t    function WinAnimatorExtended() {\r\n\t        _super.apply(this, arguments);\r\n\t        this.teasingState = 0;\r\n\t    }\r\n\t    WinAnimatorExtended.prototype.getCycleWinsDelay = function () {\r\n\t        return 90;\r\n\t    };\r\n\t    WinAnimatorExtended.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                    if (caseType == Symbol_1.Symbol.CaseCycle) {\r\n\t                        symbol.setDynamicTime(12 * i);\r\n\t                    }\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    WinAnimatorExtended.prototype.getAnimationIndex = function () {\r\n\t        var hasScatter = false;\r\n\t        var mysteryIndex = this.animationNames.indexOf(\"MysteryWin\");\r\n\t        if (this.currentWins && this.currentWins.length) {\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                hasScatter = hasScatter || this.currentWins[i].trigger == neo_games_1.Communication.Game.WinTrigger.Scatter;\r\n\t            }\r\n\t        }\r\n\t        return hasScatter && mysteryIndex >= 0 ? mysteryIndex : _super.prototype.getAnimationIndex.call(this);\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.isHighWin = function () {\r\n\t        var currentAnimName = this.animationNames[this.getAnimationIndex()];\r\n\t        return [\"BigWin\", \"EpicWin\", \"LegendaryWin\", \"MysteryWin\"].indexOf(currentAnimName) >= 0;\r\n\t    };\r\n\t    WinAnimatorExtended.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        if (animation.name == \"MysteryWin\") {\r\n\t            animation.visible = true;\r\n\t            var mWin = void 0;\r\n\t            if (this.currentWins && this.currentWins.length) {\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                        mWin = this.currentWins[i];\r\n\t                    }\r\n\t                }\r\n\t            }\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(mWin.amount, 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(mWin.amount);\r\n\t            }\r\n\t            if (animation.name == \"MysteryWin\" &&\r\n\t                mWin.customData &&\r\n\t                mWin.customData.possiblePayouts &&\r\n\t                mWin.customData.winPayout) {\r\n\t                var xCounter_1 = animation.getChildElementByName(\"XPayoutCounter\");\r\n\t                var mTimer_1 = FrameTimer_1.CreateFrameTimer(\"mysteryTimer\");\r\n\t                var possiblePayouts_1 = mWin.customData.possiblePayouts;\r\n\t                possiblePayouts_1 = possiblePayouts_1.slice().sort(function () { return Math.random() - 0.5; });\r\n\t                var targetIndex = possiblePayouts_1.indexOf(mWin.customData.winPayout);\r\n\t                var addSteps_1 = 4;\r\n\t                var timerDur_1 = 3;\r\n\t                var dif = targetIndex - addSteps_1;\r\n\t                var xIndex_1 = dif >= 0 ? dif : dif + possiblePayouts_1.length;\r\n\t                var n_1 = 0;\r\n\t                mTimer_1.on(FrameTimer_1.FrameTimerEvents.Complete, function () {\r\n\t                    if (animation.currentKeyframe < 4) {\r\n\t                        mTimer_1.start(timerDur_1);\r\n\t                        return;\r\n\t                    }\r\n\t                    xIndex_1++;\r\n\t                    if (xIndex_1 == possiblePayouts_1.length)\r\n\t                        xIndex_1 = 0;\r\n\t                    n_1++;\r\n\t                    var num = possiblePayouts_1[xIndex_1];\r\n\t                    xCounter_1.bitmapText.text = (num < 10 ? \" \" : \"\") + num + \"x\";\r\n\t                    xCounter_1.realign();\r\n\t                    PlayList_1.PlayList.play(\"SND_MysteryXCounter\");\r\n\t                    if (n_1 < possiblePayouts_1.length * 3 + addSteps_1)\r\n\t                        mTimer_1.start(timerDur_1);\r\n\t                    if (n_1 > possiblePayouts_1.length * 2)\r\n\t                        timerDur_1 *= 1.2;\r\n\t                });\r\n\t                mTimer_1.start(timerDur_1);\r\n\t            }\r\n\t        }\r\n\t        else {\r\n\t            _super.prototype.startAnimation.call(this);\r\n\t        }\r\n\t        if ([\"BigWin\", \"EpicWin\", \"LegendaryWin\", \"MysteryWin\"].indexOf(animation.name) >= 0) {\r\n\t            for (var i = 0; i < this.currentWins.length; i++) {\r\n\t                this.winSymbolsGoToCase(i, Symbol_1.Symbol.CaseHighWin, false);\r\n\t            }\r\n\t        }\r\n\t        var shadowCnt = animation.getChildElementByName(\"CounterShadow\");\r\n\t        if (shadowCnt) {\r\n\t            var shadowImg = shadowCnt.getChildByName(\"AnimCounterShadow\");\r\n\t            var counterElement = animation.getChildElementByName(\"WinCounter\");\r\n\t            shadowImg.width = counterElement.width * 1.2;\r\n\t        }\r\n\t        if (animation.name == \"LegendaryWin\" && Scaling_1.Scaling.isPortrait()) {\r\n\t            var lwAnimText = animation.getChildElementByName(\"LegendaryWinText\");\r\n\t            lwAnimText.scale.set(0.7);\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.setTeasing = function (isTease) {\r\n\t        this.teasingState = isTease ? 1 : 2;\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.onReelStopped = function (reelsData, reelIndex) {\r\n\t        _super.prototype.onReelStopped.call(this, reelsData, reelIndex);\r\n\t        for (var i = 0; i < this.symbolCount; i++) {\r\n\t            var symbol = this.currentSymbols[reelIndex][i];\r\n\t            if (symbol) {\r\n\t                if ((symbol.id == 6 && this.teasingState != 1) || symbol.id == 7) {\r\n\t                    symbol.goToCase(Symbol_1.Symbol.CaseLanding);\r\n\t                }\r\n\t                else\r\n\t                    symbol.goToCase(this.teasingState == 1 ? Symbol_1.Symbol.CaseNowin : Symbol_1.Symbol.CaseNormal);\r\n\t            }\r\n\t        }\r\n\t        if (this.teasingState == 2 && reelIndex > 0) {\r\n\t            for (var i = 0; i < reelIndex; i++) {\r\n\t                for (var j = 0; j < this.symbolCount; j++) {\r\n\t                    var symbol = this.currentSymbols[i][j];\r\n\t                    if (symbol && symbol.id != 7) {\r\n\t                        symbol.goToCase(Symbol_1.Symbol.CaseNormal);\r\n\t                    }\r\n\t                }\r\n\t            }\r\n\t            this.teasingState = 0;\r\n\t        }\r\n\t    };\r\n\t    WinAnimatorExtended.prototype.reset = function (showLastSymbols) {\r\n\t        this.teasingState = 0;\r\n\t        return _super.prototype.reset.call(this, showLastSymbols);\r\n\t    };\r\n\t    WinAnimatorExtended = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], WinAnimatorExtended);\r\n\t    return WinAnimatorExtended;\r\n\t}(WinAnimator_1.WinAnimator));\r\n\texports.WinAnimatorExtended = WinAnimatorExtended;\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__(13);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar CollectFrames = (function (_super) {\r\n\t    __extends(CollectFrames, _super);\r\n\t    function CollectFrames() {\r\n\t        _super.call(this);\r\n\t        this._frames = [];\r\n\t        this._newSymbols = [];\r\n\t        this._currentSet = [];\r\n\t    }\r\n\t    CollectFrames.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        this._frames[9] = this.childs[\"CollectFrame9\"];\r\n\t        this._frames[10] = this.childs[\"CollectFrame10\"];\r\n\t        this._frames[11] = this.childs[\"CollectFrame11\"];\r\n\t        this._frames[12] = this.childs[\"CollectFrame12\"];\r\n\t        this._frames[13] = this.childs[\"CollectFrame13\"];\r\n\t    };\r\n\t    CollectFrames.prototype.isNew = function (symbolId) {\r\n\t        return this._newSymbols.indexOf(symbolId) >= 0;\r\n\t    };\r\n\t    CollectFrames.prototype.updateCurrentSet = function (set, isShow) {\r\n\t        var _this = this;\r\n\t        if (isShow === void 0) { isShow = true; }\r\n\t        if (!set)\r\n\t            return;\r\n\t        this._newSymbols = set.filter(function (id) {\r\n\t            return _this._currentSet.indexOf(id) < 0;\r\n\t        });\r\n\t        this._currentSet = set;\r\n\t    };\r\n\t    CollectFrames.prototype.showCurrentSet = function (isAnim, isChangedBet) {\r\n\t        if (isAnim === void 0) { isAnim = false; }\r\n\t        if (isChangedBet === void 0) { isChangedBet = false; }\r\n\t        for (var id = 9; id < 14; id++) {\r\n\t            if (this._currentSet.indexOf(id) < 0) {\r\n\t                this._frames[id].goToCase(\"EMPTY\");\r\n\t            }\r\n\t            else {\r\n\t                var currentCase = this._frames[id].getCurrentCase();\r\n\t                if (currentCase == \"EMPTY\" && isAnim)\r\n\t                    this._frames[id].goToCase(\"LANDING\");\r\n\t                else if ((currentCase != \"FLYING\" && currentCase != \"LANDING\") || isChangedBet)\r\n\t                    this._frames[id].goToCase(\"STATIC\");\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    CollectFrames.prototype.collectSymbol = function (symbolId, sX, sY) {\r\n\t        var image = this._frames[symbolId].getChildElementByName(\"SymbolFlying\");\r\n\t        var frameGlobPos = this._frames[symbolId].getGlobalPosition();\r\n\t        var sc = this.scale.x;\r\n\t        image.position.x = (sX - frameGlobPos.x) / sc + image.pivot.x;\r\n\t        image.position.y = (sY - frameGlobPos.y) / sc + image.pivot.x;\r\n\t        this._frames[symbolId].goToCase(\"FLYING\");\r\n\t        PlayList_1.PlayList.play(\"SND_FlyCollectingSymb\");\r\n\t    };\r\n\t    CollectFrames = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], CollectFrames);\r\n\t    return CollectFrames;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.CollectFrames = CollectFrames;\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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar GameManager_1 = __webpack_require__(30);\r\n\tvar ContainerElement_1 = __webpack_require__(80);\r\n\tvar gsap_1 = __webpack_require__(16);\r\n\tvar MULTS_NUM = 3;\r\n\tvar GameMultipliers = (function (_super) {\r\n\t    __extends(GameMultipliers, _super);\r\n\t    function GameMultipliers() {\r\n\t        _super.call(this);\r\n\t        this._mults = [];\r\n\t    }\r\n\t    Object.defineProperty(GameMultipliers.prototype, \"winAnimator\", {\r\n\t        set: function (value) {\r\n\t            this._winAnimator = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    Object.defineProperty(GameMultipliers.prototype, \"flyContainer\", {\r\n\t        set: function (value) {\r\n\t            this._flyContainer = value;\r\n\t        },\r\n\t        enumerable: true,\r\n\t        configurable: true\r\n\t    });\r\n\t    GameMultipliers.prototype.createByNode = function (node) {\r\n\t        _super.prototype.createByNode.call(this, node);\r\n\t        if (node.hasAttribute(exports.GameMultipliersAttributes.CONFIGS)) {\r\n\t            var configs = node.getAttribute(exports.GameMultipliersAttributes.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        for (var i = 0; i < MULTS_NUM; i++) {\r\n\t            var img_dis = this.childs[\"BaseMultX\" + (i + 1) + \"_disable\"];\r\n\t            var img = this.childs[\"BaseMultX\" + (i + 1)];\r\n\t            this._mults[i] = {\r\n\t                icon: img,\r\n\t                icon_dis: img_dis,\r\n\t                glow: this.childs[\"GlowMultX\" + (i + 1)],\r\n\t                scale: new PIXI.Point(img.scale.x, img.scale.y),\r\n\t            };\r\n\t        }\r\n\t    };\r\n\t    GameMultipliers.prototype.configurate = function (node) {\r\n\t        if (node.hasAttribute(Configuration_1.GeneralConfigurationAttributes.GAME_MULTIPLIERS)) {\r\n\t            this._multiplierConfig = neo_common_1.ArrayUtils.numberArray(node.getAttribute(Configuration_1.GeneralConfigurationAttributes.GAME_MULTIPLIERS));\r\n\t        }\r\n\t    };\r\n\t    GameMultipliers.prototype.hide = function () {\r\n\t        this._mults.forEach(function (mult) {\r\n\t            gsap_1.TweenLite.killTweensOf(mult.icon);\r\n\t            gsap_1.TweenLite.killTweensOf(mult.icon_dis);\r\n\t            gsap_1.TweenLite.killTweensOf(mult.glow);\r\n\t            if (mult.icon.alpha > 0) {\r\n\t                gsap_1.TweenLite.to(mult.icon, 0.2, { alpha: 0 });\r\n\t                gsap_1.TweenLite.to(mult.icon_dis, 0.2, { alpha: 0.5 });\r\n\t                gsap_1.TweenLite.to(mult.glow, 0.2, { alpha: 0 });\r\n\t            }\r\n\t        });\r\n\t    };\r\n\t    GameMultipliers.prototype.show = function (multiplier) {\r\n\t        if (multiplier === void 0) { multiplier = null; }\r\n\t        for (var i = 0; i < MULTS_NUM; i++) {\r\n\t            var mIndex = this._multiplierConfig.indexOf(multiplier || GameManager_1.GameManager.baseResponse.gameMultiplier);\r\n\t            if (mIndex == i) {\r\n\t                var bounceCoef = 1.4;\r\n\t                var mult = this._mults[i];\r\n\t                gsap_1.TweenLite.killTweensOf(mult.icon);\r\n\t                gsap_1.TweenLite.killTweensOf(mult.icon_dis);\r\n\t                gsap_1.TweenLite.killTweensOf(mult.glow);\r\n\t                gsap_1.TweenLite.to(mult.icon, 0.2, { alpha: 1 });\r\n\t                gsap_1.TweenLite.to(mult.icon_dis, 0.2, { alpha: 0 });\r\n\t                gsap_1.TweenLite.to(mult.glow, 0.2, { alpha: 0.5 });\r\n\t                gsap_1.TweenLite.to(mult.icon.scale, 0.2, {\r\n\t                    x: mult.scale.x * bounceCoef,\r\n\t                    y: mult.scale.y * bounceCoef,\r\n\t                    delay: 0.2,\r\n\t                });\r\n\t                gsap_1.TweenLite.to(mult.icon.scale, 0.2, { x: mult.scale.x, y: mult.scale.y, delay: 0.5 });\r\n\t            }\r\n\t        }\r\n\t    };\r\n\t    GameMultipliers = __decorate([\r\n\t        neo_common_1.engineComponent(ComponentTypes_1.ComponentTypes.DisplayObject)\r\n\t    ], GameMultipliers);\r\n\t    return GameMultipliers;\r\n\t}(ContainerElement_1.ContainerElement));\r\n\texports.GameMultipliers = GameMultipliers;\r\n\texports.GameMultipliersAttributes = {\r\n\t    CONFIGS: \"Configs\",\r\n\t};\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__(80);\r\n\tvar PaylinesDefinitions_1 = __webpack_require__(96);\r\n\tvar Payline_1 = __webpack_require__(86);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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__(80);\r\n\tvar Payline_1 = __webpack_require__(86);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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        for (var i = 0; i < this._paylines.length; i++) {\r\n\t            this._paylines[i].goToCase(Payline_1.Payline.CaseNormal);\r\n\t        }\r\n\t    };\r\n\t    PaylinesSelector.prototype.select = function (id) {\r\n\t        this.visible = true;\r\n\t        this._paylines[id / 20 - 1].goToCase(Payline_1.Payline.CaseSelect);\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/* 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 ContainerElement_1 = __webpack_require__(80);\r\n\tvar Symbol_1 = __webpack_require__(97);\r\n\tvar StyleManager_1 = __webpack_require__(19);\r\n\tvar Configuration_1 = __webpack_require__(52);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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        }\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                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                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            }\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.visible = true;\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        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/* 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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\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/* 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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\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/* 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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar BetManager_1 = __webpack_require__(31);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar BaseActions_1 = __webpack_require__(46);\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/* 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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(158);\r\n\tvar PlayList_1 = __webpack_require__(38);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\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/* 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 HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar Scaling_1 = __webpack_require__(7);\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/* 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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 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__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar DataManager_1 = __webpack_require__(29);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 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__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(158);\r\n\tvar AppContext_1 = __webpack_require__(5);\r\n\tvar HtmlController_1 = __webpack_require__(47);\r\n\tvar HtmlAutoplayItemButtonElement_1 = __webpack_require__(162);\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/* 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__(13);\r\n\tvar HtmlButtonElement_1 = __webpack_require__(158);\r\n\tvar PlayList_1 = __webpack_require__(38);\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/* 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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\r\n\tvar HtmlController_1 = __webpack_require__(47);\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__(38);\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/* 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 neo_common_1 = __webpack_require__(2);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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 HtmlButtonElement_1 = __webpack_require__(158);\r\n\tvar neo_common_1 = __webpack_require__(2);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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        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.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/* 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 HtmlController_1 = __webpack_require__(47);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlContainerElement_1 = __webpack_require__(72);\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/* 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 HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 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 ComponentTypes_1 = __webpack_require__(13);\r\n\tvar HtmlElement_1 = __webpack_require__(73);\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/* 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 HtmlElement_1 = __webpack_require__(73);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 170 */\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__(171);\r\n\tvar ComponentTypes_1 = __webpack_require__(13);\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/* 171 */\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__(13);\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/* 172 */\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-alohabar.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 e0aa721207e14beda811\n **/","import {\r\n    Utils,\r\n    Logger,\r\n    PreloaderInfo,\r\n    Preloader,\r\n    libraryInitialize as neoCommonInitialize,\r\n    PreloaderProviderBase,\r\n} from \"neo-common\";\r\n\r\nneoCommonInitialize();\r\n\r\nimport { UriHelper, StringUtils } from \"neo-common\";\r\nimport { GameEngine, ClientHost, Communication, Platforms } from \"neo-games\";\r\nimport { Strings } from \"../Common/Strings\";\r\nimport { StageController } from \"./Components/StageController\";\r\nimport { PreloaderProvider } from \"./Components/Managers/PreloaderProvider\";\r\nimport { Languages } from \"./Utils/Languages\";\r\nimport { GameClientHostConsumer } from \"./ClientHost/ClientHostConsumer\";\r\nimport { GameDefinition } from \"../Common/GameDefinition\";\r\nimport { GameConfiguration } from \"../Common/GameConfiguration\";\r\nimport { AppContext } from \"../Common/AppContext\";\r\nimport { GameData } from \"./Channels/Common/Datas/GameData\";\r\nimport { HtmlController } from \"./HTMLComponents/HtmlController\";\r\nimport { GameManager } from \"./Managers/GameManager\";\r\nimport { DataManager } from \"./Managers/DataManager\";\r\nimport { PlatformsManager } from \"./Managers/PlatformsManager\";\r\nimport { FreeRoundBonus } from \"./Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { Scaling } from \"./Utils/Scaling\";\r\nimport { SplashScreen } from \"./CustomComponents/SplashScreen\";\r\nimport { RetentionPanel } from \"./Utils/RetentionPanel\";\r\n\r\nif (DEBUG) {\r\n    require(\"./Utils/PerfDebug/PerfDebug\");\r\n    require(\"./Utils/PerfDebug/PerfDebugWindow\");\r\n    require(\"./Utils/DebugTools/DebugTools\");\r\n}\r\n\r\nvar gameApp: GameApp;\r\n\r\nexport class GameApp extends GameEngine.GameAppBase<GameConfiguration, GameDefinition, GameClientHostConsumer> {\r\n    public static language: string = \"en-US\";\r\n    public static key: string = \"AlohaBar\";\r\n\r\n    public static main(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Application\", \"start main\");\r\n        }\r\n\r\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n        if (urlInfo[\"query\"][\"lang\"] != null) {\r\n            GameApp.language = urlInfo[\"query\"][\"lang\"];\r\n        }\r\n\r\n        RetentionPanel.initialize();\r\n        gameApp = new GameApp();\r\n        gameApp.load();\r\n    }\r\n\r\n    public static get gameClient(): Communication.Game.GameClient {\r\n        return gameApp._gameClient;\r\n    }\r\n\r\n    public static exit(): Promise<any> {\r\n        Platforms.Platforms.gameClosing();\r\n        if (AppContext.gameConfiguration.ExitUrl != \"\") {\r\n            Platforms.Platforms.userAction(\"exit\", { url: AppContext.gameConfiguration.ExitUrl });\r\n        }\r\n        return gameApp.exit();\r\n    }\r\n\r\n    public static history(): Promise<any> {\r\n        return gameApp.history();\r\n    }\r\n\r\n    public static continue(): Promise<any> {\r\n        return gameApp.continue();\r\n    }\r\n\r\n    public static closeRealityCheck(): Promise<any> {\r\n        return gameApp.closeRealityCheck();\r\n    }\r\n\r\n    protected createGameClient(options: Communication.Game.GameClientOptions): Communication.Game.GameClient {\r\n        let gameClient: Communication.Game.GameClient = new Communication.Game.GameClient(GameApp.key, options);\r\n        FreeRoundBonus.initialize(gameClient);\r\n        return gameClient;\r\n    }\r\n\r\n    protected pauseAnimations(): void {\r\n        StageController.pauseAnimations();\r\n    }\r\n\r\n    protected resumeAnimations(): void {\r\n        StageController.resumeAnimations();\r\n    }\r\n\r\n    protected createPreloaderProvider(): PreloaderProviderBase {\r\n        return new PreloaderProvider();\r\n    }\r\n\r\n    protected createGameDefinition(definition: Object): GameDefinition {\r\n        return new GameDefinition(definition);\r\n    }\r\n\r\n    protected createGameConfiguration(configuration: Object): GameConfiguration {\r\n        return new GameConfiguration(configuration);\r\n    }\r\n\r\n    protected createAppContext(): GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\r\n        return new AppContext(this.gameConfiguration, this.gameDefinition);\r\n    }\r\n\r\n    protected createClientHostConsumer(): GameClientHostConsumer {\r\n        return new GameClientHostConsumer(this);\r\n    }\r\n\r\n    protected requireStrings(): void {\r\n        require(\"../Common/Strings\");\r\n    }\r\n\r\n    protected createStage(quality: string, size: GameEngine.Types.GameQualitySize): void {\r\n        let color = 0x000000;\r\n        if (window[\"QUALITY\"] === \"DoubleFHD\") {\r\n            StageController.createStage(1920, 1080, color, \"canvas\");\r\n        } else {\r\n            StageController.createStage(size.width, size.height, color, \"canvas\");\r\n        }\r\n    }\r\n\r\n    protected initClientHost(): Promise<any> {\r\n        PlatformsManager.create();\r\n\r\n        return Promise.resolve();\r\n    }\r\n\r\n    protected parseLoadResult(loadResult: GameEngine.Types.AppLoadResult): Object {\r\n        let result: Object = null;\r\n\r\n        if (loadResult != null) {\r\n            if (loadResult.status == GameEngine.Types.AppLoadStatus.Failure) {\r\n                if (loadResult.error != null) {\r\n                    result = {\r\n                        message: loadResult.error.message,\r\n                        stack: loadResult.error.stack,\r\n                    };\r\n                }\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    protected finalizeLoad(): void {\r\n        if (this.loadingSucceed) {\r\n            if (AppContext != null && AppContext.current != null) {\r\n                let volume = AppContext.current.getVolume();\r\n                if (!Utils.isNullOrUndefined(volume)) {\r\n                    if (!Utils.isNullOrUndefined(volume.CurrentStepNo)) {\r\n                        if (DEBUG) {\r\n                            Logger.debugGroup(\r\n                                this.loggerGroup,\r\n                                `Updating sound volume by step ${volume.CurrentStepNo}.`,\r\n                            );\r\n                        }\r\n\r\n                        HtmlController.setSound(volume.CurrentStepNo);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            Logger.debugGroup(\r\n                                this.loggerGroup,\r\n                                `client host does not return valid value for volume 'CurrentStepNo'!`,\r\n                            );\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        Logger.debugGroup(\r\n                            this.loggerGroup,\r\n                            `client host does not returns volume data, sound volume was not updated.`,\r\n                        );\r\n                    }\r\n                }\r\n\r\n                Scaling.resizeRoot();\r\n            }\r\n\r\n            // Updating build version (for DEBUG only, for RELEASE an empty string is used)\r\n            let versionBuild = \"\";\r\n            if (DEBUG) {\r\n                let versionBuildValues: Array<string> = Preloader.getVersionBuild().split(\"_\");\r\n                versionBuild = Utils.valueOrDefault(\r\n                    versionBuildValues && versionBuildValues.length > 0\r\n                        ? versionBuildValues[versionBuildValues.length - 1]\r\n                        : \"\",\r\n                    \"\",\r\n                );\r\n            }\r\n            DataManager.updateGameDataFromModule(GameData.DataBuildVersion, versionBuild);\r\n            DataManager.configureGameData();\r\n\r\n            if (Platforms.Platforms.canPlay) {\r\n                GameManager.startGame(this._gameClient, this);\r\n                Platforms.Platforms.gameReady();\r\n            } else {\r\n                var loadingScreen = document.getElementById(\"loading\");\r\n                var element: HTMLElement = document.getElementById(\"progressNumber\");\r\n\r\n                if (loadingScreen != null) {\r\n                    loadingScreen.classList.add(\"_error\");\r\n                }\r\n                if (element != null) {\r\n                    element.innerHTML = Strings.loaded\r\n                        ? Languages.getRid(\"ERROR_404\")\r\n                        : \"Internal error. Please contact support.\";\r\n                    GameApp.gameClient.sendPlayerLogError(\r\n                        \"ERROR - Loading game\",\r\n                        this.parseLoadResult(this._loadResult),\r\n                    );\r\n                }\r\n\r\n                SplashScreen.showError();\r\n            }\r\n        } else {\r\n            Platforms.Platforms.gameFailed();\r\n            window.onblur = null;\r\n            window.onfocus = null;\r\n            PIXI.sound.muteAll();\r\n\r\n            var loadingScreen = document.getElementById(\"loading\");\r\n            var element: HTMLElement = document.getElementById(\"progressNumber\");\r\n\r\n            if (loadingScreen != null) {\r\n                loadingScreen.classList.add(\"_error\");\r\n            }\r\n            if (element != null) {\r\n                element.innerHTML = Strings.loaded\r\n                    ? Languages.getRid(\"ERROR_404\")\r\n                    : \"Internal error. Please contact support.\";\r\n                GameApp.gameClient.sendPlayerLogError(\"ERROR - Loading game\", this.parseLoadResult(this._loadResult));\r\n            }\r\n\r\n            SplashScreen.showError();\r\n\r\n            if (DEBUG) {\r\n                var err = \"\";\r\n                if (!PreloaderInfo.instance.loadSucceed) {\r\n                    err += \" Preloader does not load successfully!\";\r\n                }\r\n\r\n                Logger.errorGroup(this.loggerGroup, err);\r\n            }\r\n        }\r\n\r\n        if (DEBUG) {\r\n            PerfDebug.setup(StageController.Stage);\r\n            DebugTools.init(StageController.Stage);\r\n        }\r\n    }\r\n\r\n    static openGameRoundHistory(isGUI: boolean = false): void {\r\n        if (isGUI) {\r\n            if (\r\n                !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.GUIHistoryUrl) &&\r\n                AppContext.gameConfiguration.GUIHistoryUrl !== \"\"\r\n            ) {\r\n                if (\r\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n                    !StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\r\n                ) {\r\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\r\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                        return;\r\n                    }\r\n                    window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n                } else if (\r\n                    AppContext.gameConfiguration.GUIHistoryUrl.toLowerCase() === \"userci_historyurl\" &&\r\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)\r\n                ) {\r\n                    GameApp.openGameRoundHistoryHome();\r\n                } else {\r\n                    Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.GUIHistoryUrl });\r\n                    if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                        return;\r\n                    }\r\n                    window.open(AppContext.gameConfiguration.GUIHistoryUrl, \"_blank\");\r\n                }\r\n            } else {\r\n                GameApp.openGameRoundHistoryHome();\r\n            }\r\n        } else {\r\n            GameApp.openGameRoundHistoryHome();\r\n        }\r\n    }\r\n\r\n    static openGameRoundHistoryHome(): void {\r\n        let gameKey: string = UriHelper.getGameKey();\r\n        let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n        let timeZoneOffset: Number = new Date().getTimezoneOffset();\r\n\r\n        if (gameKey != null && urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\r\n            let token: string = urlInfo[\"hash\"].substring(1);\r\n            let lang: string = urlInfo[\"query\"][\"lang\"] ? urlInfo[\"query\"][\"lang\"] : GameApp.language;\r\n            const historyUrl =\r\n                serverUrl + \"GameRounds/\" + GameApp.key + \"?culture=\" + lang + \"&tzo=\" + timeZoneOffset + \"&\" + token;\r\n            Platforms.Platforms.gotoHistory({ target: historyUrl });\r\n            if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                return;\r\n            }\r\n            window.open(historyUrl, \"_blank\");\r\n        }\r\n    }\r\n\r\n    static openGameRoundHistoryFromUrl(): void {\r\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.RCIHistoryUrl });\r\n            if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                return;\r\n            }\r\n            window.open(AppContext.gameConfiguration.RCIHistoryUrl, \"_blank\");\r\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\r\n            Platforms.Platforms.gotoHistory({ target: AppContext.gameConfiguration.HistoryUrl });\r\n            if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                return;\r\n            }\r\n            window.open(AppContext.gameConfiguration.HistoryUrl, \"_blank\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before exist do reguler 'leave game' request against server\r\n     * @returns {Promise<any>}\r\n     */\r\n    protected beforeExit(): Promise<any> {\r\n        return this._gameClient.leaveGame();\r\n    }\r\n\r\n    protected handleStringsLoadCompleted(lang: string): void {\r\n        if (HtmlController.RidElements != null && HtmlController.RidElements.length > 0) {\r\n            for (let i: number = 0; i < HtmlController.RidElements.length; i++) {\r\n                HtmlController.RidElements[i].updateText();\r\n            }\r\n        }\r\n\r\n        let languageElements: NodeListOf<Element> = document.querySelectorAll(\"[language]\");\r\n        for (let i: number = 0; i < languageElements.length; i++) {\r\n            languageElements[i].setAttribute(\"language\", lang);\r\n        }\r\n    }\r\n}\r\n\r\nGameApp.main();\r\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\";\r\nimport { AppContext } from \"./AppContext\";\r\n\r\nfunction checkInitialized() {\r\n    StringsFactory.checkInitialized();\r\n}\r\n\r\nexport class Strings {\r\n    private static _json: Object;\r\n\r\n    constructor(json: Object) {\r\n        ArgValidator.ensureIsNotNullOrUndefined(json, \"json\");\r\n        Strings._json = json;\r\n    }\r\n\r\n    public static get loaded(): boolean {\r\n        return !Utils.isNullOrUndefined(Strings._json);\r\n    }\r\n\r\n    public static get(key: string): string {\r\n        return Strings._json && Strings._json.hasOwnProperty(key) ? Strings._json[key] : `@@${key}@@`;\r\n    }\r\n\r\n    public static getWithValues(key: string, ...tmpl: Array<any>): string {\r\n        if (Strings._json && Strings._json.hasOwnProperty(key)) {\r\n            var value = Strings._json[key];\r\n            var regexFormat = /(\\%m|\\%s)/gm;\r\n            var matchCnt = 0;\r\n            while (regexFormat.exec(value)) {\r\n                matchCnt++;\r\n            }\r\n\r\n            var args = tmpl;\r\n            if (matchCnt !== args.length) {\r\n                throw `Provided argument count (${args.length}) does not match required string params count (${matchCnt})`;\r\n            }\r\n\r\n            var idx = -1;\r\n            return value.replace(regexFormat, function (match: string) {\r\n                var val = args[++idx];\r\n                if (StringUtils.equals(match, \"%m\", true)) {\r\n                    val = NumberUtils.valueToNumber(\r\n                        val,\r\n                        AppContext.gameConfiguration.UseCoins ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\r\n                    );\r\n                } else if (!StringUtils.equals(match, \"%s\", true)) {\r\n                    throw `Unknown formatter \"${match} !\"`;\r\n                }\r\n                return val;\r\n            });\r\n        }\r\n\r\n        return `@@${key}@@`;\r\n    }\r\n\r\n    /* SECTION FOR STRINGS GENERATOR - BEGIN (DO NOT MODIFY) */\r\n    // public static get GAMBLE() { checkInitialized(); return this.get(\"GAMBLE\"); }\r\n    /* SECTION FOR STRINGS GENERATOR - END */\r\n}\r\n\r\nwindow[\"Strings\"] = Strings;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/Strings.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\r\nimport { GameEngine, ClientHost } from \"neo-games\";\r\nimport { GameConfiguration } from \"./GameConfiguration\";\r\nimport { GameDefinition } from \"./GameDefinition\";\r\nimport { GameApp } from \"../Game/GameApp\";\r\n\r\nexport class AppContext extends GameEngine.AppContextBase<GameConfiguration, GameDefinition> {\r\n    private static _current: AppContext = null;\r\n\r\n    constructor(gameConfiguration: GameConfiguration, gameDefinition: GameDefinition) {\r\n        super(gameConfiguration, gameDefinition, GameApp.key);\r\n\r\n        AppContext._current = this;\r\n    }\r\n\r\n    public static get current(): AppContext {\r\n        return AppContext._current;\r\n    }\r\n\r\n    public static get gameConfiguration(): GameConfiguration {\r\n        return AppContext._current == null ? null : AppContext._current.gameConfiguration;\r\n    }\r\n\r\n    public static get gameDefinition(): GameDefinition {\r\n        return AppContext._current.gameDefinition;\r\n    }\r\n\r\n    public static get clientHost(): ClientHost.IClientHost {\r\n        return AppContext._current.clientHost;\r\n    }\r\n\r\n    public setHideAmounts(hideAmounts: boolean): void {\r\n        if (AppContext.clientHost != null) {\r\n            AppContext.clientHost.updateSharedSetting(\"HideAmounts\", hideAmounts.toString());\r\n        }\r\n    }\r\n\r\n    public getHideAmounts(): boolean {\r\n        if (AppContext.clientHost != null) {\r\n            if (AppContext.gameConfiguration.HideAmountsEnabled) {\r\n                const hideAmounts = AppContext.clientHost.getSharedSetting(\"HideAmounts\");\r\n\r\n                if (!Utils.isNullOrUndefined(hideAmounts)) {\r\n                    return StringUtils.parseBoolean(hideAmounts);\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/AppContext.ts\n **/","import { Utils, Logger, PreloaderInfo } from \"neo-common\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { ModuleManager } from \"../Managers/ModuleManager\";\r\nimport { Communication } from \"neo-games\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { Focus } from \"../Utils/Focus\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\r\nimport { DataManager } from \"../Managers/DataManager\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\n\r\n/**\r\n * StageController creates stage for webgl rendering (with fallback to canvas).\r\n * Also handle redrawing stage based on tick with requestAnimationFrame.\r\n * @class StageController\r\n */\r\nexport class StageController {\r\n    static Renderer: any;\r\n    static Stage: PIXI.Container;\r\n    static UpdatedTextures: Object = {};\r\n    static Width: number;\r\n    static Height: number;\r\n    static FPS: number = 60;\r\n    static baseStageContainer: PIXI.Container;\r\n    static bonusStageContainer: PIXI.Container;\r\n\r\n    static baseStage: boolean = false;\r\n    static bonusStage: boolean = false;\r\n\r\n    private static _noWebGL: boolean = false;\r\n    private static _pauseAnimations = false;\r\n    private static _contextLost = false;\r\n\r\n    public static pauseAnimations() {\r\n        if (DEBUG) {\r\n            StageController._pauseAnimations = true;\r\n            Logger.debugGroup(\"StageController\", \"Animations was paused\");\r\n        }\r\n    }\r\n\r\n    public static resumeAnimations() {\r\n        if (DEBUG) {\r\n            if (StageController._pauseAnimations) {\r\n                StageController._pauseAnimations = false;\r\n                StageController.redrawStage();\r\n\r\n                Logger.debugGroup(\"StageController\", \"Animations was resumed\");\r\n            }\r\n        }\r\n    }\r\n\r\n    public static get textureManager(): PIXI.TextureManager {\r\n        return StageController.Renderer.textureManager;\r\n    }\r\n\r\n    public static updateTexture(texture: PIXI.BaseTexture | PIXI.Texture): WebGLTexture {\r\n        return this._noWebGL ? null : StageController.Renderer.textureManager.updateTexture(texture);\r\n    }\r\n\r\n    public static getTextureByResourceId(id: string): PIXI.Texture {\r\n        let texture: PIXI.Texture = PIXI.utils.TextureCache[id];\r\n        let resourcePath: string = \"\";\r\n\r\n        if (Utils.isNullOrUndefined(texture)) {\r\n            resourcePath = PreloaderInfo.instance.getResourcePathById(id);\r\n            if (resourcePath) {\r\n                texture = PIXI.utils.TextureCache[resourcePath];\r\n\r\n                if (Utils.isNullOrUndefined(texture)) {\r\n                    Logger.errorGroup(\r\n                        \"StageController\",\r\n                        `Could not find texture by id '${id}' (resourcePath: ${resourcePath})`,\r\n                    );\r\n                }\r\n            } else {\r\n                Logger.errorGroup(\"StageController\", `Could not find resource path for id '${id}' !`);\r\n            }\r\n        }\r\n        return texture;\r\n    }\r\n\r\n    private static handleLostWebGLContext(): void {\r\n        if (StageController._contextLost) {\r\n            return;\r\n        }\r\n        DataManager.Autoplay = false;\r\n        PageVisibilityHandler.Enabled = false;\r\n        PageVisibilityHandler.pauseAll();\r\n        HtmlController.dispatchActionAllowed = false;\r\n\r\n        let modules = Communication.Game.GameModules;\r\n        for (let key in modules) {\r\n            if (modules.hasOwnProperty(key)) {\r\n                ModuleManager.disableChannelModule(modules[key]);\r\n            }\r\n        }\r\n        GameManager.gameClient.sendPlayerLogError(\"ERROR - WebGL\");\r\n        AppContext.current.showDialog(Languages.getRid(\"ERROR_WEBGL\"), false, \"\", \"\", \"\", { special: true });\r\n        StageController._contextLost = true;\r\n    }\r\n\r\n    /**\r\n     * Create stage, detect renderer, set size and color of stage, start rendering.\r\n     * @method createStage\r\n     * @param width number\r\n     * @param height number\r\n     * @param color number (background color of canvas)\r\n     * @param canvasId string\r\n     * @return void\r\n     */\r\n    public static createStage(width: number, height: number, color: number, canvasId: string): void {\r\n        StageController.Width = width;\r\n        StageController.Height = height;\r\n\r\n        // get canvas from html document\r\n        const canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(canvasId);\r\n        const loading: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById(\"loading\");\r\n\r\n        // create rendered\r\n        const rendererOptions: PIXI.WebGLRendererOptions = { view: canvas, roundPixels: false };\r\n        (rendererOptions as any).backgroundColor = color;\r\n        this.Renderer = PIXI.autoDetectRenderer(width, height, rendererOptions, this._noWebGL);\r\n\r\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n            StageController._noWebGL = true;\r\n        }\r\n\r\n        PIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\r\n        // append canvas to html document\r\n        document.body.appendChild(this.Renderer.view);\r\n\r\n        // create first conatiner to renderer\r\n        this.Stage = new PIXI.Container();\r\n\r\n        Scaling.scale();\r\n        Focus.focus();\r\n        PageVisibilityHandler.handle();\r\n\r\n        loading.style.display = \"block\";\r\n        canvas.style.display = \"none\";\r\n        canvas.addEventListener(\"webglcontextlost\", StageController.handleLostWebGLContext);\r\n\r\n        if (DEBUG) {\r\n            Object.defineProperty(window, \"__PIXI_STAGE__\", {\r\n                value: this.Stage,\r\n                writable: false,\r\n            });\r\n            Object.defineProperty(window, \"__PIXI_RENDERER__\", {\r\n                value: this.Renderer,\r\n                writable: false,\r\n            });\r\n        }\r\n\r\n        this.redrawStage();\r\n    }\r\n\r\n    /**\r\n     * Method addChild append new containers to stage on top layer.\r\n     * @method addChild\r\n     * @param element PIXI.DisplayObject\r\n     * @return void\r\n     */\r\n    public static addChild(element: PIXI.DisplayObject): void {\r\n        this.Stage.addChild(element);\r\n    }\r\n\r\n    /**\r\n     * Redraw stage based on requestAnimationFrame.\r\n     * @method redrawStage\r\n     * @return void\r\n     */\r\n    private static redrawStage(): void {\r\n        if (StageController._pauseAnimations) {\r\n            return;\r\n        }\r\n\r\n        if (StageController.baseStage && StageController.baseStageContainer != null) {\r\n            StageController.Renderer.render(StageController.baseStageContainer);\r\n        } else if (StageController.bonusStage && StageController.bonusStageContainer != null) {\r\n            StageController.Renderer.render(StageController.bonusStageContainer);\r\n        } else {\r\n            StageController.Renderer.render(StageController.Stage);\r\n        }\r\n\r\n        requestAnimationFrame(StageController.redrawStage);\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"StageController\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/StageController.ts\n **/","import { Logger } from \"neo-common\";\r\nimport { Platforms, Plugins } from \"neo-games\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"./FrameTimer\";\r\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\r\nimport EventEmitter = PIXI.utils.EventEmitter;\r\n\r\n/**\r\n * @class Scaling\r\n */\r\nexport class Scaling {\r\n    static EventResize: string = \"eventResize\";\r\n\r\n    static Root: HTMLElement;\r\n    static Screen: HTMLElement;\r\n    static Canvas: HTMLElement;\r\n    static lastTouch: number;\r\n\r\n    static PortraitRatio = 0.9;\r\n    static PortraitMobileRatio = 0.72;\r\n\r\n    static LeftPanelWidth = 0;\r\n\r\n    static IsIOs: boolean = false;\r\n    static IsIOsTablet: boolean = false;\r\n    static IsIOsWebview: boolean = false;\r\n\r\n    static IOsResizeTimer: FrameTimerEventEmitter;\r\n    static IOsResizeDelay = 60;\r\n\r\n    static Emitter: EventEmitter;\r\n\r\n    static scale(): void {\r\n        Scaling.Root = document.getElementById(\"root\");\r\n        Scaling.Screen = document.getElementById(\"screen\");\r\n        Scaling.IsIOs = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n        Scaling.IsIOsTablet = /iPad/.test(navigator.platform);\r\n        Scaling.IsIOsWebview = Scaling.IsIOs && window.indexedDB !== null;\r\n        Scaling.IOsResizeTimer = CreateFrameTimer(\"scalingTimer\");\r\n        Scaling.IOsResizeTimer.on(FrameTimerEvents.Complete, Scaling.resizeRoot.bind(this, true));\r\n\r\n        Scaling.Emitter = new EventEmitter();\r\n\r\n        Scaling.resizeRoot();\r\n        window.onresize = Scaling.onResizeRoot;\r\n\r\n        document.body.classList.add(window[\"CHANNEL\"] === \"mobile\" ? \"mobile\" : \"desktop\");\r\n        document.body.classList.add(`ui-v${window[\"UI-VERSION\"]}`);\r\n\r\n        if (Scaling.isSafari()) {\r\n            document.body.classList.add(\"safari\");\r\n        }\r\n\r\n        if (Scaling.isIosChrome()) {\r\n            document.body.classList.add(\"iOsChrome\");\r\n        }\r\n\r\n        if (Scaling.IsIOs) {\r\n            Scaling.setupIOs();\r\n        }\r\n\r\n        /**\r\n         * Fast Touchstart events replaced by click event.\r\n         */\r\n        document.addEventListener(\r\n            \"touchend\",\r\n            function (event) {\r\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n                    return;\r\n                }\r\n\r\n                let diff = event.timeStamp - Scaling.lastTouch;\r\n                Scaling.lastTouch = event.timeStamp;\r\n                if (!diff || diff > 400) {\r\n                    return;\r\n                }\r\n                event.preventDefault();\r\n                event.stopPropagation();\r\n\r\n                let evt = new MouseEvent(\"click\");\r\n                event.target.dispatchEvent(evt);\r\n            },\r\n            false,\r\n        );\r\n    }\r\n\r\n    static onResizeRoot(): void {\r\n        Scaling.resizeRoot();\r\n        if (Scaling.IsIOsWebview) {\r\n            setTimeout(() => Scaling.resizeRoot(), 500);\r\n        }\r\n    }\r\n\r\n    static resizeRoot(delayed: boolean = false, preventEmitEvent: boolean = true): void {\r\n        if (!delayed && Scaling.IsIOs && Scaling.IOsResizeTimer && (Scaling.inIframe() || Scaling.isIosChrome())) {\r\n            Scaling.IOsResizeTimer.stop();\r\n            Scaling.IOsResizeTimer.start(Scaling.IOsResizeDelay);\r\n        }\r\n\r\n        document.body.style.overflow = \"hidden\"; //calculate clientHeight without scrollbars\r\n        Plugins.StatusBar.updateHeight();\r\n\r\n        var sab = parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\") || \"0\"); //safe area bottom\r\n        var innerHeight: number = window.innerHeight + Plugins.StatusBar.StatusBarHeight - sab;\r\n        var innerWidth: number = window.innerWidth + Plugins.StatusBar.StatusBarWidth;\r\n\r\n        if (Scaling.IsIOs && Plugins.StatusBar.StatusBarHeight != 0) {\r\n            //to prevent StatusBar from being positioned below game\r\n            document.documentElement.style.width = sab > 0 ? window.innerWidth + \"px\" : \"\";\r\n            document.documentElement.style.height = sab > 0 ? window.innerHeight - sab + \"px\" : \"\";\r\n            document.documentElement.style.overflow = sab > 0 ? \"visible\" : \"\";\r\n        }\r\n\r\n        var ratioWidth: number = innerWidth / (StageController.Width + Scaling.LeftPanelWidth);\r\n        var ratioHeight: number = innerHeight / (StageController.Height + Jackpot.Height);\r\n        var top: number = -(StageController.Height + Jackpot.Height - innerHeight) / 2;\r\n        var left: number = -(StageController.Width - innerWidth) / 2;\r\n\r\n        if (ratioWidth < ratioHeight) {\r\n            Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n            left += (Scaling.LeftPanelWidth / 2) * ratioWidth;\r\n        } else {\r\n            Scaling.Root.style.transform = \"scale(\" + ratioHeight + \")\";\r\n            left += (Scaling.LeftPanelWidth / 2) * ratioHeight;\r\n        }\r\n\r\n        Scaling.Root.style.top = top.toString() + \"px\";\r\n        Scaling.Root.style.left = left.toString() + \"px\";\r\n\r\n        let enabledPortrait = true;\r\n        if (AppContext != null && AppContext.current != null) {\r\n            enabledPortrait = AppContext.gameConfiguration.UsePortraitMode;\r\n\r\n            //disable portrait for ipads\r\n            if (Scaling.IsIOsTablet) {\r\n                enabledPortrait = false;\r\n            }\r\n\r\n            if (!enabledPortrait) {\r\n                document.body.classList.remove(\"portrait\", \"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\r\n            }\r\n        }\r\n\r\n        if (enabledPortrait && window[\"CHANNEL\"] === \"mobile\") {\r\n            let portraitRatio = innerWidth / innerHeight;\r\n            if (innerHeight > innerWidth && portraitRatio < Scaling.PortraitRatio) {\r\n                document.body.classList.add(\"portrait\");\r\n                document.body.classList.remove(\"mobile-xs\", \"tablet\", \"tablet-xs\");\r\n\r\n                if (portraitRatio > Scaling.PortraitMobileRatio && portraitRatio < Scaling.PortraitRatio) {\r\n                    document.body.classList.add(\"tablet\");\r\n\r\n                    if (portraitRatio > 0.85) {\r\n                        document.body.classList.add(\"tablet-xs\");\r\n                    }\r\n                } else {\r\n                    if (portraitRatio > 0.61) {\r\n                        document.body.classList.add(\"mobile-xs\");\r\n                    }\r\n                }\r\n\r\n                ratioWidth = innerWidth / StageController.Height;\r\n                left = -(StageController.Height - innerWidth) / 2;\r\n\r\n                Scaling.Root.style.transform = \"scale(\" + ratioWidth + \")\";\r\n                Scaling.Root.style.top = \"0\";\r\n                Scaling.Root.style.left = left.toString() + \"px\";\r\n                Scaling.Root.style.height = (StageController.Height / innerWidth) * innerHeight + \"px\";\r\n            } else {\r\n                document.body.classList.remove(\"portrait\", \"tablet\");\r\n                Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\r\n            }\r\n\r\n            if (document.body.classList.contains(\"portrait\")) {\r\n                Scaling.Root.classList.remove(\"gameShadow\");\r\n                Scaling.Screen.classList.add(\"gameShadow\");\r\n            } else {\r\n                Scaling.Root.classList.add(\"gameShadow\");\r\n                Scaling.Screen.classList.remove(\"gameShadow\");\r\n            }\r\n        } else {\r\n            Scaling.Root.style.height = StageController.Height + Jackpot.Height + \"px\";\r\n            Scaling.Root.classList.add(\"gameShadow\");\r\n        }\r\n\r\n        if (document.documentElement.scrollTop != 0) {\r\n            document.documentElement.scrollTop = 0;\r\n        }\r\n\r\n        document.body.style.overflow = \"\";\r\n\r\n        if (Scaling.Emitter && preventEmitEvent) {\r\n            Scaling.Emitter.emit(\r\n                Scaling.EventResize,\r\n                Scaling.isPortrait(),\r\n                innerWidth / (innerHeight - Jackpot.Height),\r\n                innerWidth,\r\n                innerHeight,\r\n                ratioWidth,\r\n                ratioHeight,\r\n            );\r\n        }\r\n    }\r\n\r\n    static setupIOs(): void {\r\n        document.addEventListener(\"gesturestart\", this.preventPropagation, true);\r\n        document.addEventListener(\"gesturechange\", this.preventPropagation, true);\r\n        document.addEventListener(\"gestureend\", this.preventPropagation, true);\r\n        document.addEventListener(\"touchmove\", this.preventMovePropagation, true);\r\n    }\r\n\r\n    public static preventPropagation(e: Event): void {\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n    }\r\n\r\n    public static preventMovePropagation(e: Event): void {\r\n        var target = <HTMLElement>e.target;\r\n        while (target) {\r\n            if (target == document.documentElement) {\r\n                target = null;\r\n            } else if (target.classList.contains(\"mask\") || target.classList.contains(\"dialogContent\")) {\r\n                return;\r\n            } else {\r\n                if (target.parentElement != null) {\r\n                    target = target.parentElement;\r\n                }\r\n            }\r\n        }\r\n\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n    }\r\n\r\n    private static isSafari(): boolean {\r\n        const ua = navigator.userAgent;\r\n        const vendor = navigator.vendor;\r\n\r\n        return /Safari/i.test(ua) && /Apple Computer/.test(vendor);\r\n    }\r\n\r\n    private static isIosChrome(): boolean {\r\n        return !!(Scaling.IsIOs && (navigator.userAgent.match(\"CriOS\") || navigator.userAgent.match(\"FxiOS\")));\r\n    }\r\n\r\n    private static inIframe(): boolean {\r\n        try {\r\n            return window.self !== window.top;\r\n        } catch (e) {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    static onLoadComplete(): void {\r\n        document.body.classList.add(\"loaded\");\r\n    }\r\n\r\n    public static isPortrait(): boolean {\r\n        return document.body.classList.contains(\"portrait\");\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string which will be traced to browser console.\r\n     * @return void\r\n     */\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Scaling\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Scaling.ts\n **/","import { Logger, Utils } from \"neo-common\";\r\nimport { AnimationFrameEventEmitter } from \"../AnimationFrame/AnimationFrame\";\r\nimport { FrameTimerPool } from \"./FrameTimerPool\";\r\n\r\nexport const FrameTimerEvents = {\r\n    Progress: \"progress\",\r\n    Complete: \"complete\",\r\n};\r\n\r\n/**\r\n * FrameTimer is class to count time in frames.\r\n * FrameTimer is used instead of window.interval or window.timeout.\r\n * FrameTimer doesnt use miliseconds but count with frames.\r\n * @class FrameTimer\r\n */\r\nexport class FrameTimer extends AnimationFrameEventEmitter {\r\n    private _timerCounter: number;\r\n    private _finalTimerCounter: number;\r\n    private _timerName: string;\r\n    private _useFrames: boolean = false;\r\n    private _timer: any;\r\n    private _playing: boolean = false;\r\n    private _paused: boolean = false;\r\n\r\n    private _uid: string;\r\n\r\n    private _startTime: number;\r\n\r\n    constructor(timerName: string) {\r\n        super();\r\n\r\n        timerName = Utils.valueOrDefault(timerName, Utils.generateUuid());\r\n\r\n        this._timerName = `FrameTimer-${timerName}`;\r\n\r\n        this._uid = `FrameTimer_${timerName}_${Utils.generateUuid()}`;\r\n\r\n        // default values\r\n        this._timerCounter = 0;\r\n        this._finalTimerCounter = 0;\r\n    }\r\n\r\n    protected frame_onFrame(): void {\r\n        if (this._timerCounter === this._finalTimerCounter) {\r\n            this.stop();\r\n            this.conclude();\r\n        } else {\r\n            this.super2.emit(FrameTimerEvents.Progress);\r\n            this._timerCounter++;\r\n        }\r\n    }\r\n\r\n    protected get frame_name(): string {\r\n        return this._timerName;\r\n    }\r\n\r\n    /**\r\n     * Set counter to zero and set duration for counter.\r\n     * Start counting.\r\n     * @method start\r\n     * @param duration - number (frames)\r\n     * @return void\r\n     */\r\n    start(duration: number): void {\r\n        if (!this._playing) {\r\n            FrameTimerPool.add(this._uid, this);\r\n        }\r\n        this._playing = true;\r\n        if (this._useFrames) {\r\n            this._timerCounter = 0;\r\n            this._finalTimerCounter = duration;\r\n            this.frame_stop();\r\n\r\n            // start counting\r\n            this.count();\r\n        } else {\r\n            /*\r\n            if(this._timer != null) {\r\n                clearTimeout(this._timer);\r\n            }\r\n            */\r\n            // finalTimerCounter is target time\r\n            this._startTime = new Date().getTime();\r\n            this._finalTimerCounter = duration * 16.7;\r\n\r\n            // TODO method\r\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\r\n\r\n            if (FrameTimerPool.paused) {\r\n                this.pause();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Stop counting.\r\n     * @method stop\r\n     * @return void\r\n     */\r\n    stop(): void {\r\n        if (this._playing) {\r\n            FrameTimerPool.remove(this._uid);\r\n        }\r\n        this._playing = false;\r\n        if (this._useFrames) {\r\n            this.frame_stop();\r\n        } else {\r\n            if (this._timer != null) {\r\n                clearTimeout(this._timer);\r\n            }\r\n        }\r\n    }\r\n\r\n    private conclude(): void {\r\n        clearTimeout(this._timer);\r\n        FrameTimerPool.remove(this._uid);\r\n        this._playing = false;\r\n        this.super2.emit(FrameTimerEvents.Complete);\r\n    }\r\n\r\n    pause(): void {\r\n        if (!this._playing || this._paused) {\r\n            return;\r\n        }\r\n        if (this._useFrames) {\r\n            this.frame_stop();\r\n        } else {\r\n            // frameTimerCounter becomes remaining time\r\n            clearTimeout(this._timer);\r\n            let currentTime = new Date().getTime();\r\n            this._finalTimerCounter -= currentTime - this._startTime;\r\n        }\r\n        this._paused = true;\r\n    }\r\n\r\n    isPlaying(): boolean {\r\n        return this._playing;\r\n    }\r\n\r\n    unpause(): void {\r\n        if (!this._playing || !this._paused) {\r\n            return;\r\n        }\r\n        if (this._useFrames) {\r\n            this.count();\r\n        } else {\r\n            this._startTime = new Date().getTime();\r\n            window.clearTimeout(this._timer);\r\n            this._timer = setTimeout(() => this.conclude(), this._finalTimerCounter);\r\n        }\r\n        this._paused = false;\r\n    }\r\n\r\n    /**\r\n     * Count method emit Complete and Progress event while counting with requesrtAnimationFrame.\r\n     * @method count\r\n     * @retutn void\r\n     */\r\n    count(): void {\r\n        this.frame_start();\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @retutn void\r\n     */\r\n    log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"FrameTimer\", s);\r\n        }\r\n    }\r\n}\r\n\r\nexport type FrameTimerEventEmitter = FrameTimer & PIXI.utils.EventEmitter;\r\n\r\nexport const CreateFrameTimer = (timerName: string): FrameTimerEventEmitter => {\r\n    return new FrameTimer(timerName) as FrameTimerEventEmitter;\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimer.ts\n **/","import { Logger, Utils } from \"neo-common\";\r\nimport { IAnimationFrame, EventEmmiterClass, BaseElementClass } from \"./Types\";\r\nimport { AnimationFramePool } from \"./Pool\";\r\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\r\n\r\nexport function AnimationFrameClass(Superclass?: FunctionConstructor) {\r\n    var sc: FunctionConstructor = (Superclass || Object) as any;\r\n\r\n    return class AnimationFrame extends sc implements IAnimationFrame {\r\n        private _frame_stopped: boolean;\r\n        private _frame_starting: boolean;\r\n        private _frame_stopping: boolean;\r\n        private _frame_uid: string;\r\n\r\n        constructor() {\r\n            super();\r\n            this._frame_stopped = true;\r\n            this._frame_starting = null;\r\n            this._frame_stopping = null;\r\n            this._frame_uid = null;\r\n\r\n            this.frame_draw = this.frame_draw.bind(this);\r\n        }\r\n\r\n        protected frame_onFrame(): void {\r\n            throw new Error(`method \"frame_onFrame\" is not implemented!`);\r\n        }\r\n\r\n        protected get frame_name(): string {\r\n            throw new Error(`property \"frame_name\" is not implemented!`);\r\n        }\r\n\r\n        protected get isFrameStopped(): boolean {\r\n            return this._frame_stopped;\r\n        }\r\n\r\n        public get frame_uid(): string {\r\n            if (this._frame_uid === null) {\r\n                this._frame_uid = this.frame_name + Utils.generateUuid();\r\n            }\r\n\r\n            return this._frame_uid;\r\n        }\r\n\r\n        public frame_draw(): void {\r\n            if (this._frame_stopped) {\r\n                return;\r\n            }\r\n\r\n            this.frame_onFrame();\r\n        }\r\n\r\n        private frame_log(msg: string, isError?: boolean): void {\r\n            isError = Utils.valueOrDefault(isError, false);\r\n\r\n            if (DEBUG && !isError) {\r\n                Logger.debugGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\r\n            }\r\n\r\n            if (isError) {\r\n                Logger.errorGroup(\"AnimationFrame\", `[${this.frame_name}-AnimationFrame] ` + msg);\r\n            }\r\n        }\r\n\r\n        public frame_start(): void {\r\n            if (!this._frame_stopped) {\r\n                return;\r\n            }\r\n\r\n            if (this._frame_starting) {\r\n                return;\r\n            }\r\n\r\n            this._frame_starting = true;\r\n\r\n            try {\r\n                if (AnimationFramePool.registerFrame(this)) {\r\n                    this._frame_stopped = false;\r\n                    //this.frame_log('was started and registered to stage pool');\r\n                } else {\r\n                    this.frame_log(\"failed to start (already registered in stage pool!)\", true);\r\n                }\r\n            } finally {\r\n                this._frame_starting = null;\r\n            }\r\n\r\n            // this will do possible precalculations before actual method is called from 'requestAnimationFrame' from StageController\r\n            this.frame_draw();\r\n        }\r\n\r\n        public frame_stop(): void {\r\n            if (this._frame_stopped) {\r\n                return;\r\n            }\r\n\r\n            if (this._frame_stopping) {\r\n                return;\r\n            }\r\n\r\n            this._frame_stopping = true;\r\n\r\n            try {\r\n                if (AnimationFramePool.unregisterFrame(this)) {\r\n                    this._frame_stopped = true;\r\n                    //this.frame_log('was stopped and unregistered from stage pool');\r\n                } else {\r\n                    this.frame_log(\"failed to stop (not registered in stage pool!)\", true);\r\n                }\r\n            } finally {\r\n                this._frame_stopping = null;\r\n            }\r\n        }\r\n    };\r\n}\r\n\r\n/**\r\n * abstract class AnimationFrameEventEmitter, extends both 'PIXI.utils.EventEmitter' and 'AnimationFrame' classes\r\n */\r\nexport abstract class AnimationFrameEventEmitter extends AnimationFrameClass(EventEmmiterClass() as any) {\r\n    protected get super2(): PIXI.utils.EventEmitter {\r\n        return this as any as PIXI.utils.EventEmitter;\r\n    }\r\n}\r\n\r\n/**\r\n * abstract class AnimationFrameBaseElement, extends both 'BaseElement' and 'AnimationFrame' classes\r\n */\r\nexport abstract class AnimationFrameBaseElement extends AnimationFrameClass(BaseElementClass() as any) {\r\n    protected get super2(): BaseElement {\r\n        return this as any as BaseElement;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/AnimationFrame.ts\n **/","import { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\r\n\r\nexport interface IAnimationFrame {\r\n    frame_uid: string;\r\n    frame_draw(): void;\r\n}\r\n\r\nexport function EventEmmiterClass() {\r\n    return class EventEmmiterDescendant extends PIXI.utils.EventEmitter {};\r\n}\r\n\r\nexport function BaseElementClass() {\r\n    return class BaseElementDescendant extends BaseElement {};\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Types.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { Tweens, TweensAttributes } from \"../../Effects/Tweens\";\r\nimport { IElement } from \"../Interfaces/IElement\";\r\nimport { Attributes } from \"../../../Utils/Attributes\";\r\n\r\n/**\r\n * BaseElement class is class which creates holder for other display objects.\r\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\r\n * @class BaseElement\r\n * @extends PIXI.Container\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BaseElement extends PIXI.Container implements IElement {\r\n    /**\r\n     * Unique component identifier\r\n     */\r\n    private _uid: string;\r\n    private _cloned: boolean;\r\n    private __destroyed: boolean;\r\n\r\n    maskSprite: PIXI.Sprite;\r\n    maskGraphics: ShapeElement;\r\n\r\n    static _destroyOptions: PIXI.DestroyOptions = {\r\n        children: true,\r\n    };\r\n\r\n    public scaleTween: Array<PIXI.Point>;\r\n    public rotationTween: Array<number>;\r\n    public alphaTween: Array<number>;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._cloned = false;\r\n        this.__destroyed = false;\r\n\r\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                this._uid = PerfDebug.generateElementUID(this);\r\n                PerfDebug.newElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    getDebugInfo(): string {\r\n        if (DEBUG) {\r\n            let debugInfoFn = (this as any).debugInfo;\r\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     * @property cloned - indicates if element was cloned or not.\r\n     * @returns {boolean}\r\n     */\r\n    public get cloned(): boolean {\r\n        return this._cloned;\r\n    }\r\n\r\n    public get destroyed(): boolean {\r\n        return this.__destroyed;\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this.assertDestroyed(\"destroy\");\r\n\r\n        if (Utils.isNullOrUndefined(options)) {\r\n            options = BaseElement._destroyOptions;\r\n        }\r\n\r\n        this.internalDestroy(options);\r\n\r\n        if (!Utils.isNullOrUndefined(this.children)) {\r\n            super.destroy(options);\r\n        }\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.destroy(this);\r\n            }\r\n        }\r\n\r\n        this.__destroyed = true;\r\n    }\r\n\r\n    /**\r\n     * todo Destroy tweens by used tween engine\r\n     * @method internalDestroy - cleanup resources\r\n     * @param options\r\n     */\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        Tweens.removeTweens(this);\r\n    }\r\n\r\n    public clone(): any {\r\n        throw new Error(\"Not implemented\");\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    protected removeAndDestroyChildren(): void {\r\n        this._removeAndDestroyChildren();\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    _removeAndDestroyChildren(): void {\r\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\r\n        let destroyOptions: PIXI.DestroyOptions = {\r\n            children: true,\r\n        };\r\n\r\n        if (this.children != null && this.children.length > 0) {\r\n            for (let i = this.children.length - 1; i >= 0; i--) {\r\n                if (this.children[i] != null) {\r\n                    (this.children[i] as any).destroy(destroyOptions);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.removeChildren();\r\n    }\r\n\r\n    protected assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    protected markAsCloned(): void {\r\n        this._markAsCloned();\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    _markAsCloned(): void {\r\n        this.assertDestroyed(\"markAsCloned()\");\r\n        this._cloned = true;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.clone(this);\r\n\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    public create(node: Element): void {\r\n        this.createByNode(node);\r\n        this.updateByNode(node);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @method _create - setup element from xml node\r\n     * @param node\r\n     * @private\r\n     */\r\n    public createByNode(node: Element): void {\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\r\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        this.assertDestroyed(\"_create()\");\r\n\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\r\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\r\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\r\n                //this.rotation = Math.floor(Math.random() * 360);\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        /* todo Move scale.x && scale.y into SCALE attribute condition ? */\r\n        this.scale.x = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_X, this.scale.x);\r\n        this.scale.y = Attributes.assignFloatAttribute(node, BaseElementAttributes.SCALE_Y, this.scale.y);\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\r\n        }\r\n\r\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\r\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\r\n\r\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.MASK)) {\r\n            this.maskGraphics = new ShapeElement();\r\n            let shapeNode: Element = document.createElement(node.getAttribute(BaseElementAttributes.MASK));\r\n            shapeNode.setAttribute(\"FillAlpha\", \"1\");\r\n            shapeNode.setAttribute(\"Color\", \"FF0000\");\r\n\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_DRAW)) {\r\n                shapeNode.setAttribute(\"Draw\", node.getAttribute(BaseElementAttributes.MASK_DRAW));\r\n            }\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_X)) {\r\n                shapeNode.setAttribute(\"X\", node.getAttribute(BaseElementAttributes.MASK_X));\r\n            }\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_Y)) {\r\n                shapeNode.setAttribute(\"Y\", node.getAttribute(BaseElementAttributes.MASK_Y));\r\n            }\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_WIDTH)) {\r\n                shapeNode.setAttribute(\"Width\", node.getAttribute(BaseElementAttributes.MASK_WIDTH));\r\n            }\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_HEIGHT)) {\r\n                shapeNode.setAttribute(\"Height\", node.getAttribute(BaseElementAttributes.MASK_HEIGHT));\r\n            }\r\n            if (node.hasAttribute(BaseElementAttributes.MASK_PATH)) {\r\n                shapeNode.setAttribute(\"Path\", node.getAttribute(BaseElementAttributes.MASK_PATH));\r\n            }\r\n\r\n            this.maskGraphics.create(shapeNode);\r\n            this.mask = this.maskGraphics;\r\n            this.addChild(this.mask);\r\n\r\n            if (this.mask == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(BaseElementAttributes.MASK));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK)) {\r\n            let image = StageController.getTextureByResourceId(node.getAttribute(BaseElementAttributes.BITMAP_MASK));\r\n\r\n            if (image != null) {\r\n                this.maskSprite = new PIXI.Sprite(image);\r\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_X)) {\r\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_X));\r\n                }\r\n                if (node.hasAttribute(BaseElementAttributes.BITMAP_MASK_Y)) {\r\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(BaseElementAttributes.BITMAP_MASK_Y));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\r\n                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\r\n                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\r\n                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\r\n                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\r\n                }\r\n                if (!node.hasAttribute(BaseElementAttributes.BITMAP_MASK_SHOW)) {\r\n                    this.addChild(this.maskSprite);\r\n                    this.mask = this.maskSprite;\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\r\n                        \"ERROR\" +\r\n                            this.componentName +\r\n                            \" no image with name for mask: \" +\r\n                            node.getAttribute(BaseElementAttributes.BITMAP_MASK),\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.maskGraphics != null) {\r\n            if (node.hasAttribute(\"MaskScaleX\")) {\r\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleY\")) {\r\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskX\")) {\r\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskY\")) {\r\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n            }\r\n        }\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.createElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): void {\r\n        if (!node) {\r\n            this.logError(\"No node specified for element update!\");\r\n            return;\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(BaseElementAttributes.DEBUG) &&\r\n                node.getAttribute(BaseElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        if (\r\n            !node.hasAttribute(\"RemoveTweens\") ||\r\n            StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false\r\n        ) {\r\n            Tweens.removeTweens(this);\r\n        }\r\n\r\n        this.visible = Attributes.assignBooleanAttribute(node, BaseElementAttributes.VISIBLE, this.visible);\r\n        this.alpha = Attributes.assignFloatAttribute(node, BaseElementAttributes.ALPHA, this.alpha);\r\n        this.pivot.x = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_X, this.pivot.x);\r\n        this.pivot.y = Attributes.assignIntAttribute(node, BaseElementAttributes.PIVOT_Y, this.pivot.y);\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.ROTATION)) {\r\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(BaseElementAttributes.ROTATION)));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.START_ROTATION)) {\r\n            if (node.getAttribute(BaseElementAttributes.START_ROTATION) === BaseElementAttributes.START_ROTATION) {\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        this.position.x = Attributes.assignIntAttribute(node, BaseElementAttributes.X, this.position.x);\r\n        this.position.y = Attributes.assignIntAttribute(node, BaseElementAttributes.Y, this.position.y);\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE_X)) {\r\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_X));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE_Y)) {\r\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(BaseElementAttributes.SCALE));\r\n        }\r\n\r\n        this.runAlphaTween(node);\r\n        this.runPositionTween(node);\r\n        this.runRotationTween(node);\r\n        this.runScaleTween(node);\r\n        this.runTween(node);\r\n    }\r\n\r\n    /**\r\n     * Runs the alpha tween\r\n     * @method runAlphaTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runAlphaTween(node: Element): boolean {\r\n        if (!node.hasAttribute(BaseElementAttributes.ALPHA_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let alphaTween: Array<number> = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.ALPHA_TWEEN));\r\n\r\n        const alphas: Array<number> = alphaTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.ALPHA_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            BaseElementAttributes.ALPHA_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            BaseElementAttributes.ALPHA_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the position tween\r\n     * @method runPositionTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runPositionTween(node: Element): boolean {\r\n        if (\r\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_X) ||\r\n            !node.hasAttribute(BaseElementAttributes.POSITION_TWEEN_Y)\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        let positionTweenX: Array<number>;\r\n        let positionTweenY: Array<number>;\r\n\r\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\r\n            node,\r\n            BaseElementAttributes.POSITION_TWEEN_POSITION,\r\n            null,\r\n        );\r\n        if (positionTweenPosition == BaseElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X)).map(\r\n                (value) => value + this.position.x,\r\n            );\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y)).map(\r\n                (value) => value + this.position.y,\r\n            );\r\n        } else {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_X));\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.POSITION_TWEEN_Y));\r\n        }\r\n\r\n        const tweenX: Array<number> = positionTweenX || [];\r\n        const tweenY: Array<number> = positionTweenY || [];\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            BaseElementAttributes.POSITION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            BaseElementAttributes.POSITION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            BaseElementAttributes.POSITION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop }); // , callbackFunction: () => {this.emit('positionTweenFinished')}\r\n    }\r\n\r\n    /**\r\n     * Runs the rotation tween\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runRotationTween(node: Element): boolean {\r\n        if (!node.hasAttribute(BaseElementAttributes.ROTATION_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(BaseElementAttributes.ROTATION_TWEEN),\r\n        );\r\n\r\n        const degrees: Array<number> = rotationTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            BaseElementAttributes.ROTATION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            BaseElementAttributes.ROTATION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            BaseElementAttributes.ROTATION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runScaleTween(node: Element): boolean {\r\n        let scaleTweenX: Array<number>;\r\n        let scaleTweenY: Array<number>;\r\n        let scaleTween: Array<PIXI.Point>;\r\n        let tweenValues: Array<PIXI.Point> = [];\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_X)) {\r\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_X));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN_Y)) {\r\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(BaseElementAttributes.SCALE_TWEEN_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(BaseElementAttributes.SCALE_TWEEN)) {\r\n            scaleTween = BaseElement._getPointsFromPointsAttribute(\r\n                node.getAttribute(BaseElementAttributes.SCALE_TWEEN),\r\n            ) as Array<PIXI.Point>;\r\n        }\r\n\r\n        if (scaleTween && scaleTween.length) {\r\n            tweenValues = scaleTween;\r\n        } else if (scaleTweenX && scaleTweenY) {\r\n            if (scaleTweenX.length === scaleTweenY.length) {\r\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                    return {\r\n                        x: scaleXValue,\r\n                        y: scaleTweenY[i],\r\n                    } as PIXI.Point;\r\n                });\r\n            }\r\n        } else if (scaleTweenX) {\r\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                return {\r\n                    x: scaleXValue,\r\n                    y: this.scale.y,\r\n                } as PIXI.Point;\r\n            });\r\n        } else if (scaleTweenY) {\r\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\r\n                return {\r\n                    x: this.scale.x,\r\n                    y: scaleYValue,\r\n                } as PIXI.Point;\r\n            });\r\n        } else {\r\n            return false;\r\n        }\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, BaseElementAttributes.SCALE_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            BaseElementAttributes.SCALE_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, BaseElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            BaseElementAttributes.SCALE_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    public runTween(node: Element): boolean {\r\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\r\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\r\n\r\n            for (let i: number = 0; i < tweens.length; i++) {\r\n                //return if there are no values to tween\r\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\r\n                    return false;\r\n                }\r\n\r\n                let tween: string = tweens[i];\r\n\r\n                const tweenValues: Array<number> = this.formatTweenValues(\r\n                    tween,\r\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\r\n                );\r\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\r\n                );\r\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\r\n                );\r\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\r\n                );\r\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n                    node,\r\n                    TweensAttributes.TWEEN_LOOP + i,\r\n                    null,\r\n                );\r\n\r\n                if (tween == \"scale\") {\r\n                    tween = \"scale.x\";\r\n                    tweens[i] = \"scale.y\";\r\n                    i--;\r\n                }\r\n\r\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\r\n        let tweenValues: Array<number> = [];\r\n\r\n        if (tween === \"scale\") {\r\n            tween = \"scale.x\";\r\n        }\r\n        let property: Array<string> = tween.split(\".\");\r\n        let value: number;\r\n\r\n        for (let i: number = 0; i < values.length; i++) {\r\n            let current = values[i];\r\n            switch (current[current.length - 1]) {\r\n                case \"c\": //if we want current value\r\n                    if (property.length == 1) {\r\n                        value = this[property[0]];\r\n                        if (property[0] === \"rotation\") {\r\n                            value = this.radians2degrees(value);\r\n                        }\r\n                        tweenValues.push(value);\r\n                    } else if (property.length == 2) {\r\n                        tweenValues.push(this[property[0]][property[1]]);\r\n                    }\r\n\r\n                    break;\r\n                case \"+\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] + value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"-\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] - value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"~\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n\r\n                    if (property[0] == \"position\") {\r\n                        if (property[1] == \"x\") {\r\n                            value = this.position.x + (value - this.getGlobalPosition().x);\r\n                        } else if (property[1] == \"y\") {\r\n                            value = this.position.y + (value - this.getGlobalPosition().y);\r\n                        }\r\n                    }\r\n\r\n                    tweenValues.push(value);\r\n                    break;\r\n                default:\r\n                    tweenValues.push(parseFloat(current));\r\n            }\r\n        }\r\n\r\n        return tweenValues;\r\n    }\r\n\r\n    /**\r\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.\r\n     * @method _getPointsFromPointsAttribute\r\n     * @return Array<PIXI.Points>\r\n     */\r\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\r\n        if (!pointsString) {\r\n            return [];\r\n        }\r\n\r\n        return pointsString\r\n            .replace(/\\s/g, \"\")\r\n            .split(\";\")\r\n            .map((valuesPair: string) =>\r\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\r\n            )\r\n            .map((valuesPair: Array<string>) => {\r\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param s\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public radians2degrees(radians: number): number {\r\n        return radians * (180 / Math.PI);\r\n    }\r\n\r\n    public maskEnabled(enable: boolean): void {\r\n        if (enable) {\r\n            if (this.maskGraphics) {\r\n                this.mask = this.maskGraphics;\r\n                this.addChild(this.maskGraphics);\r\n            }\r\n        } else {\r\n            this.removeChild(this.maskGraphics);\r\n            this.mask = null;\r\n        }\r\n    }\r\n}\r\n\r\nexport const BaseElementAttributes = {\r\n    /*\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n    /*\r\n     * A ImageElement instance that defines a mask for this display object.\r\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).\r\n     * @property BitmapMask\r\n     * @type string\r\n     * @default null\r\n     */\r\n    BITMAP_MASK: \"BitmapMask\",\r\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n    BITMAP_MASK_X: \"BitmapMaskX\",\r\n    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n    DEBUG: \"Debug\",\r\n    /*\r\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\r\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).\r\n     * @property Mask\r\n     * @type ShapeElement\r\n     * @default null\r\n     */\r\n    MASK: \"Mask\",\r\n    MASK_X: \"MaskX\",\r\n    MASK_Y: \"MaskY\",\r\n    MASK_WIDTH: \"MaskWidth\",\r\n    MASK_HEIGHT: \"MaskHeight\",\r\n    MASK_PATH: \"MaskPath\",\r\n    MASK_DRAW: \"MaskDraw\",\r\n    /*\r\n     * X pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotX\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_X: \"PivotX\",\r\n    /*\r\n     * Y pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotY\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_Y: \"PivotY\",\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n    /*\r\n     *\r\n     */\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    /**\r\n     * @deprecated Use ROTATION_TWEEN instead ROTATION_TWEEN_DEGREES\r\n     */\r\n    ROTATION_TWEEN_DEGREES: \"RotationTweenDegrees\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n    /*\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n    /**\r\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\r\n     */\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n    /*\r\n     * The factor to stretch this display object horizontally.\r\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.\r\n     * @property ScaleX\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    /*\r\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n     * @property Scale\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE: \"Scale\",\r\n    SCALE_X: \"ScaleX\",\r\n    /*\r\n     * The factor to stretch this display object vertically.\r\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.\r\n     * @property ScaleY\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_Y: \"ScaleY\",\r\n    /*\r\n     * Random rotation in degrees for this display object.\r\n     * @property StartRotation\r\n     * @type Number\r\n     * @default null\r\n     */\r\n    START_ROTATION: \"StartRotation\",\r\n    /*\r\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n     * @property Visible\r\n     * @type Boolean\r\n     * @default true\r\n     */\r\n    VISIBLE: \"Visible\",\r\n    /*\r\n     * X (horizontal) position of the display object, relative to its parent.\r\n     * @property X\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    X: \"X\",\r\n    /*\r\n     * Y (vertical) position of the display object, relative to its parent.\r\n     * @property Y\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    Y: \"Y\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElement.ts\n **/","import { Logger, Utils, StringUtils, ArrayUtils, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ITweenable, Tweens, TweensAttributes } from \"../../Effects/Tweens\";\r\nimport { SwitchStyle } from \"../Styles/SwitchStyle\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { IElement } from \"../Interfaces/IElement\";\r\nimport { Attributes } from \"../../../Utils/Attributes\";\r\nimport { StageController } from \"../../StageController\";\r\n\r\n/**\r\n * ShapeElement allows you to display vector art in the display list.\r\n * Example:\r\n *   <ShapeElement Class=\"ShapeElement\" X=\"0\" Y=\"0\" Width=\"100\" Height=\"100\" Color=\"FF0000\" Mask=\"ShapeElement\" />\r\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Circle\" X=\"0\" Y=\"0\" Radius=\"500\" Color=\"FF0000\"/>\r\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Ellipse\" X=\"0\" Y=\"0\" Width=\"300\" Height=\"500\" Color=\"FF0000\"/>\r\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\"/>\r\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"Rect\" X=\"110\" Y=\"0\" Width=\"500\" Height=\"500\" Color=\"FF0000\"/>\r\n *   <ShapeElement Class=\"ShapeElement\" Draw=\"RoundedRect\" X=\"0\" Y=\"0\" Width=\"500\" Height=\"500\" Radius=\"50\" Color=\"FF0000\"/>\r\n *\r\n * @class ShapeElement\r\n * @extends PIXI.Graphics\r\n * @implements IElement\r\n *\r\n * @date 7.1.2019\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ShapeElement extends PIXI.Graphics implements IElement {\r\n    public _uid: string;\r\n    public _color: number = 0xff0000;\r\n    public _width: number;\r\n    public _height: number;\r\n    public _lineWidth: number;\r\n    public _lineColor: number;\r\n    public _fillAlpha: number;\r\n    public _radius: number;\r\n    protected style: SwitchStyle;\r\n\r\n    //used for clone method\r\n    protected _nodeDefinition: Element;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\r\n    }\r\n\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        Tweens.removeTweens(this);\r\n    }\r\n\r\n    public create(node: Element): void {\r\n        this.createByNode(node);\r\n        this.updateByNode(node);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element): void {\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(ShapeElementAttributes.DEBUG) &&\r\n                node.getAttribute(ShapeElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        this._nodeDefinition = node;\r\n\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.STYLE)) {\r\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(ShapeElementAttributes.STYLE)];\r\n            if (this.style != null) {\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(ShapeElementAttributes.STYLE));\r\n                }\r\n            }\r\n        }\r\n\r\n        this._color = Attributes.assignIntAttribute(node, ShapeElementAttributes.COLOR, this._color, 16);\r\n        this._fillAlpha = Attributes.assignFloatAttribute(node, ShapeElementAttributes.FILL_ALPHA, this._fillAlpha);\r\n        this._lineWidth = Attributes.assignIntAttribute(node, ShapeElementAttributes.LINE_WIDTH, this._lineWidth);\r\n        this._lineColor = Attributes.assignIntAttribute(node, ShapeElementAttributes.LINE_COLOR, this._lineColor, 16);\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_X)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_Y)) {\r\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.X)) {\r\n            this.position.x = parseInt(node.getAttribute(ShapeElementAttributes.X));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.Y)) {\r\n            this.position.y = parseInt(node.getAttribute(ShapeElementAttributes.Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\r\n            this._width = parseInt(node.getAttribute(ShapeElementAttributes.WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\r\n            this._height = parseInt(node.getAttribute(ShapeElementAttributes.HEIGHT));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.RADIUS)) {\r\n            this._radius = parseInt(node.getAttribute(ShapeElementAttributes.RADIUS));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.DRAW)) {\r\n            this.clear();\r\n            this.beginFill(this._color, this._fillAlpha);\r\n            this.lineStyle(this._lineWidth, this._lineColor);\r\n            this.draw(node, node.getAttribute(ShapeElementAttributes.DRAW));\r\n            this.endFill();\r\n        } else {\r\n            // This block is for backwards compatibility\r\n            if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\r\n                this._width = parseInt(node.getAttribute(ShapeElementAttributes.WIDTH));\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR \" + ShapeElementAttributes.WIDTH + \" attribute doesn't exits\");\r\n                }\r\n            }\r\n\r\n            if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\r\n                this._height = parseInt(node.getAttribute(ShapeElementAttributes.HEIGHT));\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR \" + ShapeElementAttributes.HEIGHT + \" attribute doesn't exits\");\r\n                }\r\n            }\r\n\r\n            if (this._width != null && this._height != null) {\r\n                this.clear();\r\n                this.beginFill(this._color, this._fillAlpha);\r\n                this.lineStyle(this._lineWidth, this._lineColor);\r\n                this.drawRect(0, 0, this._width, this._height);\r\n                this.endFill();\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.VISIBLE)) {\r\n            this.visible = StringUtils.parseBoolean(node.getAttribute(ShapeElementAttributes.VISIBLE));\r\n        }\r\n\r\n        /*if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.createElement(this, this.getDebugInfo());\r\n            }\r\n        }*/\r\n    }\r\n\r\n    /**\r\n     * Draw object by type.\r\n     * @param node\r\n     * @param {string} objectType\r\n     */\r\n    private draw(node: Element, objectType: string) {\r\n        switch (objectType) {\r\n            case \"Circle\":\r\n                this.drawCircle(0, 0, this._radius);\r\n                break;\r\n            case \"Ellipse\":\r\n                this.drawEllipse(0, 0, this._width, this._height);\r\n                break;\r\n            case \"Polygon\":\r\n                const path = node.hasAttribute(\"Path\") ? ArrayUtils.stringArray(node.getAttribute(\"Path\"), \"|\") : [];\r\n                let points: PIXI.Point[] = [];\r\n                for (let i = 0; i < path.length; i++) {\r\n                    const point = ArrayUtils.numberArray(path[i]);\r\n                    points.push(new PIXI.Point(point[0], point[1]));\r\n                }\r\n                this.drawPolygon(points);\r\n                break;\r\n            case \"Rect\":\r\n                this.drawRect(0, 0, this._width, this._height);\r\n                break;\r\n            case \"RoundedRect\":\r\n                const multiple = node.hasAttribute(\"Path\")\r\n                    ? ArrayUtils.arraysNumbers(node.getAttribute(\"Path\"), \"|\")\r\n                    : [];\r\n                if (multiple.length == 0) {\r\n                    this.drawRoundedRect(0, 0, this._width, this._height, this._radius);\r\n                } else {\r\n                    for (let i = 0; i < multiple.length; i++) {\r\n                        this.drawRoundedRect(multiple[i][0], multiple[i][1], this._width, this._height, this._radius);\r\n                    }\r\n                }\r\n                break;\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR objectType: \" + objectType + \" not supported.\");\r\n                }\r\n                break;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): void {\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(ShapeElementAttributes.DEBUG) &&\r\n                node.getAttribute(ShapeElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        Tweens.removeTweens(this);\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.VISIBLE)) {\r\n            this.visible = StringUtils.parseBoolean(node.getAttribute(ShapeElementAttributes.VISIBLE));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.ALPHA)) {\r\n            this.alpha = parseFloat(node.getAttribute(ShapeElementAttributes.ALPHA));\r\n        }\r\n\r\n        this.pivot.x = Attributes.assignIntAttribute(node, ShapeElementAttributes.PIVOT_X, this.pivot.x);\r\n        this.pivot.y = Attributes.assignIntAttribute(node, ShapeElementAttributes.PIVOT_Y, this.pivot.y);\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.ROTATION)) {\r\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(ShapeElementAttributes.ROTATION)));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.X)) {\r\n            this.position.x = parseInt(node.getAttribute(ShapeElementAttributes.X));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.Y)) {\r\n            this.position.y = parseInt(node.getAttribute(ShapeElementAttributes.Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_X)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_Y)) {\r\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(ShapeElementAttributes.SCALE));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.MASK)) {\r\n            let next: Element = node.parentElement.firstElementChild;\r\n            while (next != null) {\r\n                if (next.nodeName === node.getAttribute(ShapeElementAttributes.MASK)) {\r\n                    let shapeElement: ShapeElement = new ShapeElement();\r\n                    shapeElement.create(next);\r\n                    this.mask = shapeElement;\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n\r\n            if (this.mask == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ShapeElementAttributes.MASK));\r\n                }\r\n            }\r\n        }\r\n\r\n        this.runAlphaTween(node);\r\n        this.runPositionTween(node);\r\n        this.runRotationTween(node);\r\n        this.runScaleTween(node);\r\n        this.runTween(node);\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        /*if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }*/\r\n    }\r\n\r\n    /**\r\n     * Runs the alpha tween\r\n     * @method runAlphaTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runAlphaTween(node: Element): boolean {\r\n        if (!node.hasAttribute(ShapeElementAttributes.ALPHA_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let alphaTween: Array<number> = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.ALPHA_TWEEN));\r\n\r\n        const alphas: Array<number> = alphaTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, ShapeElementAttributes.ALPHA_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ShapeElementAttributes.ALPHA_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ShapeElementAttributes.ALPHA_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the position tween\r\n     * @method runPositionTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runPositionTween(node: Element): boolean {\r\n        if (\r\n            !node.hasAttribute(ShapeElementAttributes.POSITION_TWEEN_X) ||\r\n            !node.hasAttribute(ShapeElementAttributes.POSITION_TWEEN_Y)\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        let positionTweenX: Array<number>;\r\n        let positionTweenY: Array<number>;\r\n\r\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\r\n            node,\r\n            ShapeElementAttributes.POSITION_TWEEN_POSITION,\r\n            null,\r\n        );\r\n        if (positionTweenPosition == ShapeElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_X)).map(\r\n                (value) => value + this.position.x,\r\n            );\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_Y)).map(\r\n                (value) => value + this.position.y,\r\n            );\r\n        } else {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_X));\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.POSITION_TWEEN_Y));\r\n        }\r\n\r\n        const tweenX: Array<number> = positionTweenX || [];\r\n        const tweenY: Array<number> = positionTweenY || [];\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            ShapeElementAttributes.POSITION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ShapeElementAttributes.POSITION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ShapeElementAttributes.POSITION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the rotation tween\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runRotationTween(node: Element): boolean {\r\n        if (!node.hasAttribute(ShapeElementAttributes.ROTATION_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(ShapeElementAttributes.ROTATION_TWEEN),\r\n        );\r\n\r\n        const degrees: Array<number> = rotationTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            ShapeElementAttributes.ROTATION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ShapeElementAttributes.ROTATION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ShapeElementAttributes.ROTATION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runScaleTween(node: Element): boolean {\r\n        let scaleTweenX: Array<number>;\r\n        let scaleTweenY: Array<number>;\r\n        let scaleTween: Array<PIXI.Point>;\r\n        let tweenValues: Array<PIXI.Point> = [];\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN_X)) {\r\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.SCALE_TWEEN_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN_Y)) {\r\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(ShapeElementAttributes.SCALE_TWEEN_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.SCALE_TWEEN)) {\r\n            scaleTween = ShapeElement._getPointsFromPointsAttribute(\r\n                node.getAttribute(ShapeElementAttributes.SCALE_TWEEN),\r\n            ) as Array<PIXI.Point>;\r\n        }\r\n\r\n        if (scaleTween && scaleTween.length) {\r\n            tweenValues = scaleTween;\r\n        } else if (scaleTweenX && scaleTweenY) {\r\n            if (scaleTweenX.length === scaleTweenY.length) {\r\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                    return {\r\n                        x: scaleXValue,\r\n                        y: scaleTweenY[i],\r\n                    } as PIXI.Point;\r\n                });\r\n            }\r\n        } else if (scaleTweenX) {\r\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                return {\r\n                    x: scaleXValue,\r\n                    y: this.scale.y,\r\n                } as PIXI.Point;\r\n            });\r\n        } else if (scaleTweenY) {\r\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\r\n                return {\r\n                    x: this.scale.x,\r\n                    y: scaleYValue,\r\n                } as PIXI.Point;\r\n            });\r\n        } else {\r\n            return false;\r\n        }\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, ShapeElementAttributes.SCALE_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ShapeElementAttributes.SCALE_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ShapeElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ShapeElementAttributes.SCALE_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {Element} node\r\n     * @returns {boolean}\r\n     */\r\n    public runTween(node: Element): boolean {\r\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\r\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\r\n\r\n            for (let i: number = 0; i < tweens.length; i++) {\r\n                //return if there are no values to tween\r\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\r\n                    return false;\r\n                }\r\n\r\n                let tween: string = tweens[i];\r\n\r\n                const tweenValues: Array<number> = this.formatTweenValues(\r\n                    tween,\r\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\r\n                );\r\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\r\n                );\r\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\r\n                );\r\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\r\n                );\r\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n                    node,\r\n                    TweensAttributes.TWEEN_LOOP + i,\r\n                    null,\r\n                );\r\n\r\n                if (tween == \"scale\") {\r\n                    tween = \"scale.x\";\r\n                    tweens[i] = \"scale.y\";\r\n                    i--;\r\n                }\r\n\r\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    protected formatTweenValues(tween: string, values: Array<string>): Array<number> {\r\n        let tweenValues: Array<number> = [];\r\n\r\n        if (tween === \"scale\") {\r\n            tween = \"scale.x\";\r\n        }\r\n        let property: Array<string> = tween.split(\".\");\r\n        let value: number;\r\n\r\n        for (let i: number = 0; i < values.length; i++) {\r\n            let current = values[i];\r\n            switch (current[current.length - 1]) {\r\n                case \"c\": //if we want current value\r\n                    if (property.length == 1) {\r\n                        value = this[property[0]];\r\n                        if (property[0] === \"rotation\") {\r\n                            value = this.radians2degrees(value);\r\n                        }\r\n                        tweenValues.push(value);\r\n                    } else if (property.length == 2) {\r\n                        tweenValues.push(this[property[0]][property[1]]);\r\n                    }\r\n\r\n                    break;\r\n                case \"+\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] + value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"-\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] - value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                default:\r\n                    tweenValues.push(parseFloat(current));\r\n            }\r\n        }\r\n\r\n        return tweenValues;\r\n    }\r\n\r\n    /**\r\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.\r\n     * @method _getPointsFromPointsAttribute\r\n     * @return Array<PIXI.Points>\r\n     */\r\n    protected static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\r\n        if (!pointsString) {\r\n            return [];\r\n        }\r\n\r\n        return pointsString\r\n            .replace(/\\s/g, \"\")\r\n            .split(\";\")\r\n            .map((valuesPair: string) =>\r\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\r\n            )\r\n            .map((valuesPair: Array<string>) => {\r\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public radians2degrees(radians: number): number {\r\n        return radians * (180 / Math.PI);\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param s\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    clone(): ShapeElement {\r\n        let element: ShapeElement = new ShapeElement();\r\n        element.create(this._nodeDefinition);\r\n\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const ShapeElementAttributes = {\r\n    /**\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n    /**\r\n     * Shape's fill color.\r\n     * @property Color\r\n     * @type hexadecimal\r\n     * @default ff0000\r\n     */\r\n    COLOR: \"Color\",\r\n    DRAW: \"Draw\",\r\n    DEBUG: \"Debug\",\r\n    FILL_ALPHA: \"FillAlpha\",\r\n    /**\r\n     * Shape's height.\r\n     * @property Height\r\n     * @type number\r\n     * @default null\r\n     */\r\n    HEIGHT: \"Height\",\r\n    LINE_COLOR: \"LineColor\",\r\n    LINE_WIDTH: \"LineWidth\",\r\n    /**\r\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\r\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).\r\n     * @property Mask\r\n     * @type string\r\n     * @default null\r\n     */\r\n    MASK: \"Mask\",\r\n    /**\r\n     * X pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotX\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_X: \"PivotX\",\r\n    /**\r\n     * Y pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotY\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_Y: \"PivotY\",\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n    /**\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n    RADIUS: \"Radius\",\r\n    /**\r\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n     * @property Scale\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE: \"Scale\",\r\n    SCALE_X: \"ScaleX\",\r\n    /**\r\n     * The factor to stretch this display object vertically.\r\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.\r\n     * @property ScaleY\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_Y: \"ScaleY\",\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n    /**\r\n     * @deprecated Use SCALE_TWEEN instead SCALE_TWEEN_DURATION\r\n     */\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n    STYLE: \"Style\",\r\n    /**\r\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n     * @property Visible\r\n     * @type Boolean\r\n     * @default true\r\n     */\r\n    VISIBLE: \"Visible\",\r\n    /**\r\n     * Shape's width.\r\n     * @property Width\r\n     * @type number\r\n     * @default null\r\n     */\r\n    WIDTH: \"Width\",\r\n    /**\r\n     * The X (horizontal) position of the shape, relative to its parent.\r\n     * @property X\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    X: \"X\",\r\n    /**\r\n     * The Y (vertical) position of the shape, relative to its parent.\r\n     * @property Y\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    Y: \"Y\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ShapeElement.ts\n **/","export const ComponentTypes = {\r\n    Element: \"Element\",\r\n    DisplayObject: \"DisplayObject\",\r\n    HtmlElement: \"HtmlElement\",\r\n    PlayList: \"PlayList\",\r\n    Song: \"Song\",\r\n    Style: \"Style\",\r\n    HtmlStyle: \"HtmlStyle\",\r\n    Controller: \"Controller\",\r\n    LinkedElement: \"LinkedElement\",\r\n    ActionSet: \"ActionSet\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ComponentTypes.ts\n **/","import { Logger } from \"neo-common\";\r\nimport { GsapEffects } from \"./GsapEffects\";\r\nimport { TweenLite, TimelineLite } from \"gsap\";\r\nimport roundColor = PIXI.CanvasTinter.roundColor;\r\n\r\n/**\r\n * Interface for alpha tween arguments\r\n */\r\nexport interface IAlphaTweenOptions {\r\n    alphas: Array<number>;\r\n    tweenEase?: string;\r\n    tweenDuration?: number;\r\n    tweenDelay?: number;\r\n    tweenLoop?: boolean;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\n/**\r\n * Interface for rotation tween arguments\r\n */\r\nexport interface IRotationTweenOptions {\r\n    degrees: Array<number>;\r\n    tweenEase?: string;\r\n    tweenDuration?: number;\r\n    tweenDelay?: number;\r\n    tweenLoop?: boolean;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\n/**\r\n * Interface for scale tween arguments\r\n *\r\n * todo Implement increment/decrement/... for tween values. E.g.: {'x': '+1.5'}\r\n */\r\nexport interface IScaleTweenOptions {\r\n    tweenValues: Array<PIXI.Point>;\r\n    tweenEase?: string;\r\n    tweenDuration?: number;\r\n    tweenDelay?: number;\r\n    tweenLoop?: boolean;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\n/**\r\n * Interface for position tween arguments\r\n */\r\nexport interface IPositionTweenOptions {\r\n    tweenX: Array<number>;\r\n    tweenY: Array<number>;\r\n    tweenEase?: string;\r\n    tweenDuration?: number;\r\n    tweenDelay?: number;\r\n    tweenLoop?: boolean;\r\n    bezier?: Object;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\n/**\r\n * Interface for bezier tween arguments\r\n */\r\nexport interface IBezierTweenOptions {\r\n    bezier: { values: Array<any> };\r\n    tweenAutorotate?: any;\r\n    tweenEase?: string;\r\n    tweenDuration?: number;\r\n    tweenDelay?: number;\r\n    tweenLoop?: boolean;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\n/**\r\n * Interface for tween arguments\r\n */\r\nexport interface ITweenOptions {\r\n    tween: string;\r\n    tweenValues: Array<number>;\r\n    tweenEase?: Array<string>;\r\n    tweenDuration?: Array<number>;\r\n    tweenDelay?: Array<number>;\r\n    tweenLoop?: boolean;\r\n    bezier?: Object;\r\n    paused?: boolean;\r\n\r\n    callbackType?: string;\r\n    callbackFunction?: (...params: any[]) => any;\r\n    callbackParams?: any[];\r\n    callbackScope?: Object;\r\n}\r\n\r\nexport interface ITweenable {\r\n    uid: string;\r\n    name?: string;\r\n    position: PIXI.Point | PIXI.ObservablePoint;\r\n    scale: PIXI.Point | PIXI.ObservablePoint;\r\n    alpha: number;\r\n    rotation: number;\r\n}\r\n\r\n/**\r\n *  Tweening elements\r\n *\r\n *  todo Remove return types of tween methods (Use void) ? Or return type Tweens for chaining methods?\r\n *  todo Add timestamp of start into tween?\r\n *  todo Add check for specific properties of objects?\r\n *\r\n *  Example:\r\n *      Tweens.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\r\n *      Tweens.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\r\n *      Tweens.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\r\n *\r\n *  @class Tweens\r\n */\r\nexport class Tweens {\r\n    static tweenArray: Array<TimelineLite> | Array<TweenLite> = [];\r\n    static uid: string;\r\n\r\n    /**\r\n     * Record tween of object. Used for removing tweens applied on object.\r\n     *\r\n     * @param uid\r\n     * @param tween\r\n     */\r\n    static registerTween(uid: string, tween: any): void {\r\n        if (uid != null) {\r\n            if (Tweens.tweenArray[uid] != null) {\r\n                Tweens.tweenArray[uid].push(tween);\r\n            } else {\r\n                Tweens.tweenArray[uid] = [tween];\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {any}\r\n     * @param uid\r\n     */\r\n    static getRegisteredTweens(uid?: string): any {\r\n        // Array<createjs.Tween> | Array<TimelineLite> | Array<TweenLite>\r\n        if (uid != null) {\r\n            if (Tweens.tweenArray[uid] != null) {\r\n                return {\r\n                    tweens: Tweens.tweenArray[uid],\r\n                    length: Tweens.tweenArray[uid].length,\r\n                };\r\n            }\r\n            return null;\r\n        } else {\r\n            return {\r\n                tweens: Tweens.tweenArray,\r\n                length: Object.keys(Tweens.tweenArray).length,\r\n            };\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Only remove tween from registry\r\n     * @param uid\r\n     * @param property\r\n     */\r\n    static removeTweenFromRegistry(uid: string, property: string = \"all\"): any {\r\n        if (uid != null) {\r\n            if (Tweens.tweenArray[uid] != null) {\r\n                for (let i: number = Tweens.tweenArray[uid].length - 1; i >= 0; i--) {\r\n                    let tween: any = Tweens.tweenArray[uid][i];\r\n\r\n                    if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n                        Tweens.tweenArray[uid][i] = null;\r\n                        Tweens.tweenArray[uid].splice(i, 1);\r\n                    }\r\n                    if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\r\n                        Tweens.tweenArray[uid][i] = null;\r\n                        Tweens.tweenArray[uid].splice(i, 1);\r\n                    }\r\n                    if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n                        Tweens.tweenArray[uid][i] = null;\r\n                        Tweens.tweenArray[uid].splice(i, 1);\r\n                    }\r\n                    if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\r\n                        Tweens.tweenArray[uid][i] = null;\r\n                        Tweens.tweenArray[uid].splice(i, 1);\r\n                    }\r\n                    if (\r\n                        tween.name === property + \"Tween\" &&\r\n                        property !== \"alpha\" &&\r\n                        property !== \"position\" &&\r\n                        property !== \"scale\" &&\r\n                        property !== \"rotation\"\r\n                    ) {\r\n                        Tweens.tweenArray[uid][i] = null;\r\n                        Tweens.tweenArray[uid].splice(i, 1);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // TODO add comment\r\n    static restartTweens(uid: string): any {\r\n        if (Tweens.tweenArray[uid] != null) {\r\n            for (let i: number = 0; i < Tweens.tweenArray[uid].length; i++) {\r\n                Tweens.tweenArray[uid][i].restart();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Removes tweens of object.\r\n     *\r\n     * Kills tween of object when property is specified.\r\n     * If no property is specified, all tweens of object will be killed.\r\n     *\r\n     * @param object\r\n     * @param property\r\n     */\r\n    static removeTweens<T extends ITweenable>(object: T, property: string = \"all\"): any {\r\n        if (object !== undefined) {\r\n            if (object.uid != null) {\r\n                if (Tweens.tweenArray[object.uid] != null) {\r\n                    if (Tweens.tweenArray[object.uid].length > 0) {\r\n                        for (let i: number = Tweens.tweenArray[object.uid].length - 1; i >= 0; i--) {\r\n                            let tween: any = Tweens.tweenArray[object.uid][i];\r\n\r\n                            if (tween.name === \"alphaTween\" && (property === \"alpha\" || property === \"all\")) {\r\n                                tween.kill({ alpha: true }, object);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n                            if (tween.name === \"positionTween\" && (property === \"position\" || property === \"all\")) {\r\n                                tween.kill(null, object.position);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n                            if (tween.name === \"scaleTween\" && (property === \"scale\" || property === \"all\")) {\r\n                                tween.kill(null, object.scale);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n                            if (tween.name === \"rotationTween\" && (property === \"rotation\" || property === \"all\")) {\r\n                                tween.kill({ rotation: true }, object);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n                            if (tween.name === \"bezierTween\" && (property === \"bezier\" || property === \"all\")) {\r\n                                tween.kill(null, object);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n\r\n                            if (\r\n                                tween.name === property + \"Tween\" &&\r\n                                property !== \"alpha\" &&\r\n                                property !== \"position\" &&\r\n                                property !== \"scale\" &&\r\n                                property !== \"rotation\"\r\n                            ) {\r\n                                tween.kill({ [property]: true }, object);\r\n\r\n                                Tweens.tweenArray[object.uid][i] = null;\r\n                                Tweens.tweenArray[object.uid].splice(i, 1);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Applies alpha tween on object.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static alphaTween<T extends ITweenable>(object: T, options: IAlphaTweenOptions): any {\r\n        if (options.alphas.length < 2) {\r\n            return;\r\n        }\r\n\r\n        object.alpha = options.alphas.shift();\r\n\r\n        let tween: any;\r\n        if (options.alphas.length === 1) {\r\n            tween = GsapEffects.alphaTween_Tweenlite(object, options);\r\n        } else if (options.alphas.length > 1) {\r\n            tween = GsapEffects.alphaTween_TimelineLite(object, options);\r\n        }\r\n\r\n        tween.name = \"alphaTween\";\r\n        tween.objectName = object.name;\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    /**\r\n     * Applies position tween on object.\r\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\r\n     *\r\n     * todo Add check if object is not null\r\n     * @param object: ImageElement | AnimationElement | BaseElement\r\n     * @param options: PositionTweenOptions\r\n     */\r\n    static positionTween<T extends ITweenable>(object: T, options: IPositionTweenOptions): any {\r\n        /* Todo Implement ability have only one position option. X or Y. */\r\n        if ((!options.tweenX && !options.tweenY) || (options.tweenX.length < 2 && options.tweenY.length < 2)) {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR No tweenX or tweenY option for \" + (object.name ? object.name : \"object\"));\r\n            }\r\n            return;\r\n        }\r\n\r\n        // if values for one of the axes are not specified or in valid length, we use default axes value\r\n        if (options.tweenX.length !== options.tweenY.length) {\r\n            if (options.tweenX.length > options.tweenY.length) {\r\n                options.tweenY = Array.apply(null, Array(options.tweenX.length)).map(\r\n                    (value: any) => object.position.y || 0,\r\n                );\r\n            } else {\r\n                options.tweenX = Array.apply(null, Array(options.tweenY.length)).map(\r\n                    (value: any) => object.position.x || 0,\r\n                );\r\n            }\r\n        }\r\n\r\n        object.position.x = options.tweenX.shift();\r\n        object.position.y = options.tweenY.shift();\r\n\r\n        let tween: any;\r\n        if (options.tweenX.length === 1) {\r\n            tween = GsapEffects.positionTween_Tweenlite(object, options);\r\n        } else if (options.tweenX.length > 1) {\r\n            tween = GsapEffects.positionTween_TimelineLite(object, options);\r\n        }\r\n\r\n        tween.name = \"positionTween\";\r\n        tween.objectName = object.name;\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static bezierTween<T extends ITweenable>(object: T, options: IBezierTweenOptions): any {\r\n        if (options.bezier.values[0] != null) {\r\n            object.position.x = options.bezier.values[0].x;\r\n            object.position.y = options.bezier.values[0].y;\r\n        }\r\n\r\n        let tween: any;\r\n        tween = GsapEffects.bezierTween(object, options);\r\n        tween.name = \"bezierTween\";\r\n        tween.objectName = object.name;\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    /**\r\n     * Applies rotation tween on object.\r\n     * Number of degrees is variable.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    // TODO marek bug\r\n    static rotationTween(object: ITweenable, options: IRotationTweenOptions): any {\r\n        if (options.degrees.length < 2) {\r\n            return;\r\n        }\r\n\r\n        object.rotation = Tweens.degrees2radians(options.degrees.shift());\r\n\r\n        let tween: any;\r\n        if (options.degrees.length === 1) {\r\n            tween = GsapEffects.rotationTween_Tweenlite(object, options);\r\n        } else if (options.degrees.length > 1) {\r\n            tween = GsapEffects.rotationTween_TimelineLite(object, options);\r\n        }\r\n\r\n        tween.name = \"rotationTween\";\r\n        tween.objectName = object.name;\r\n\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    /**\r\n     * Applies scale tween on object.\r\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\r\n     *\r\n     * @param object: ImageElement | AnimationElement | BaseElement\r\n     * @param options: ScaleTweenOptions\r\n     */\r\n    static scaleTween<T extends ITweenable>(object: T, options: IScaleTweenOptions): any {\r\n        if (options.tweenValues.length < 2) {\r\n            if (DEBUG) {\r\n                this.log(\r\n                    \"ERROR No ScaleTweenX or ScaleTweenY or ScaleTween option for \" +\r\n                        (object.name ? object.name : \"object\"),\r\n                );\r\n            }\r\n            return;\r\n        }\r\n\r\n        object.scale.x = options.tweenValues[0].x;\r\n        object.scale.y = options.tweenValues[0].y;\r\n        options.tweenValues.shift();\r\n\r\n        let tween: any;\r\n        if (options.tweenValues.length === 1) {\r\n            tween = GsapEffects.scaleTween_Tweenlite(object, options);\r\n        } else if (options.tweenValues.length > 1) {\r\n            tween = GsapEffects.scaleTween_TimelineLite(object, options);\r\n        }\r\n\r\n        tween.name = \"scaleTween\";\r\n        tween.objectName = object.name;\r\n\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    /**\r\n     * Applies position tween on object.\r\n     * Number of positions points X/Y is variable. Count of X's and Y's must be equal.\r\n     *\r\n     * todo Add check if object is not null\r\n     * @param object: ImageElement | AnimationElement | BaseElement\r\n     * @param options: PositionTweenOptions\r\n     */\r\n    static customTween<T extends ITweenable>(object: T, options: ITweenOptions): any {\r\n        let property: Array<string> = options.tween.split(\".\");\r\n        options = Tweens.prepareTweenData(options);\r\n\r\n        if (property.length == 1) {\r\n            object[property[0]] = options.tweenValues.shift();\r\n        } else if (property.length == 2) {\r\n            object[property[0]][property[1]] = options.tweenValues.shift();\r\n        }\r\n\r\n        let tween: any;\r\n        if (options.tweenValues.length === 1) {\r\n            tween = GsapEffects.tween_Tweenlite(object, options);\r\n        } else if (options.tweenValues.length > 1) {\r\n            tween = GsapEffects.tween_TimelineLite(object, options);\r\n        }\r\n\r\n        tween.name = property[0] + \"Tween\";\r\n        tween.objectName = object.name;\r\n        this.registerTween(object.uid, tween);\r\n\r\n        return tween;\r\n    }\r\n\r\n    static prepareTweenData(data: ITweenOptions): ITweenOptions {\r\n        let length = data.tweenValues.length - 1;\r\n\r\n        data.tweenEase = Tweens.stringValueToFormatedArray(length, data.tweenEase, \"linear\");\r\n        data.tweenDelay = Tweens.numberValueToFormatedArray(length, data.tweenDelay, 0);\r\n        data.tweenDelay = data.tweenDelay.map(function (x: number) {\r\n            return x * GsapEffects.TickTime;\r\n        });\r\n\r\n        if (data.tweenDuration != null) {\r\n            if (data.tweenDuration.length == 1) {\r\n                let partDuration = data.tweenDuration[0] / length;\r\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, partDuration);\r\n            } else {\r\n                data.tweenDuration = Tweens.numberValueToFormatedArray(length, data.tweenDuration, 30);\r\n            }\r\n        } else {\r\n            let defaultValue = Math.floor(Math.random() * 120 + 120);\r\n            data.tweenDuration = Tweens.numberValueToFormatedArray(length, null, defaultValue);\r\n        }\r\n        data.tweenDuration = data.tweenDuration.map(function (x: number) {\r\n            return x * GsapEffects.TickTime;\r\n        });\r\n\r\n        //we need to convert degrees to radians if we rotating\r\n        if (data.tween == \"rotation\") {\r\n            data.tweenValues = data.tweenValues.map(function (x: number) {\r\n                return Tweens.degrees2radians(x);\r\n            });\r\n        }\r\n\r\n        return data;\r\n    }\r\n\r\n    /**\r\n     * Create array of specified length, filled with data values, or value, or default value\r\n     *\r\n     * @param {number} length\r\n     * @param {Array<string> | string} data\r\n     * @param {string} defaultValue\r\n     * @returns {Array<string>}\r\n     */\r\n    static stringValueToFormatedArray(length: number, data: Array<string>, defaultValue: string): Array<string> {\r\n        if (data != null) {\r\n            if (Array.isArray(data)) {\r\n                if (data.length == length) {\r\n                    return data;\r\n                }\r\n\r\n                if (data.length < length) {\r\n                    for (let i: number = data.length; i < length; i++) {\r\n                        data.push(defaultValue);\r\n                    }\r\n                    return data;\r\n                }\r\n            } else {\r\n                return Array.apply(null, Array(length)).map((value: any) => data);\r\n            }\r\n        } else {\r\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Create array of specified length, filled with data values, or value, or default value\r\n     *\r\n     * @param {number} length\r\n     * @param {Array<string> | string} data\r\n     * @param {string} defaultValue\r\n     * @returns {Array<string>}\r\n     */\r\n    static numberValueToFormatedArray(length: number, data: Array<number>, defaultValue: number): Array<number> {\r\n        if (data != null) {\r\n            if (Array.isArray(data)) {\r\n                if (data.length == length) {\r\n                    return data;\r\n                }\r\n\r\n                if (data.length < length) {\r\n                    for (let i: number = data.length; i < length; i++) {\r\n                        data.push(defaultValue);\r\n                    }\r\n                    return data;\r\n                }\r\n            } else {\r\n                return Array.apply(null, Array(length)).map((value: any) => data);\r\n            }\r\n        } else {\r\n            return Array.apply(null, Array(length)).map((value: any) => defaultValue);\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    static degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public static get componentName(): string {\r\n        return \"Tweens\";\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected static log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = Tweens.componentName;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nexport const TweensAttributes = {\r\n    TWEEN: \"Tween\",\r\n    TWEEN_VALUES: \"TweenValues\",\r\n    TWEEN_EASE: \"TweenEase\",\r\n    TWEEN_DURATION: \"TweenDuration\",\r\n    TWEEN_DELAY: \"TweenDelay\",\r\n    TWEEN_LOOP: \"TweenLoop\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/Tweens.ts\n **/","import { Logger } from \"neo-common\";\r\nimport {\r\n    IRotationTweenOptions,\r\n    IAlphaTweenOptions,\r\n    IScaleTweenOptions,\r\n    IPositionTweenOptions,\r\n    ITweenable,\r\n    ITweenOptions,\r\n    IBezierTweenOptions,\r\n} from \"./Tweens\";\r\nimport { TimelineLite, TweenLite, SlowMo, RoughEase, Power4, Bounce } from \"gsap\";\r\nimport { CustomEase } from \"./CustomEase\";\r\n\r\n/**\r\n *  Example:\r\n *\r\n *  GsapEffects.alphaTween(object, {alphas: alphaTween, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\r\n *  GsapEffects.rotationTween(object, {degrees: rotateTweenDegrees, tweenEase: ease, tweenDuration: tweenDuration, tweenDelay: tweenDelay});\r\n *  GsapEffects.scaleTween(object, {tweenX: scaleTweenX, tweenY: scaleTweenY, tweenEase: ease, tweenDuration: tweenDuration});\r\n *\r\n */\r\nexport class GsapEffects {\r\n    static UseFrames: boolean = false;\r\n    static TickTime: number = 0.0167;\r\n\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {}\r\n\r\n    /**\r\n     * Applies alpha tween on object.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static alphaTween_TimelineLite(object: ITweenable, options: IAlphaTweenOptions): TimelineLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        const alphaTimeline: TimelineLite = new TimelineLite({\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        options.alphas.forEach((alpha: number) => {\r\n            alphaTimeline.to(object, tweenDurationPerPart, {\r\n                alpha: alpha,\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            alphaTimeline.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            alphaTimeline.eventCallback(\"onComplete\", alphaTimeline.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return alphaTimeline;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     * @returns {TweenLite}\r\n     */\r\n    static alphaTween_Tweenlite(object: ITweenable, options: IAlphaTweenOptions): TweenLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.alphas.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let alphaTweenLite: TweenLite;\r\n\r\n        alphaTweenLite = TweenLite.to(object, tweenDurationPerPart, {\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            alpha: options.alphas,\r\n            ease: tweenEase,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            alphaTweenLite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            alphaTweenLite.eventCallback(\"onComplete\", alphaTweenLite.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return alphaTweenLite;\r\n    }\r\n\r\n    /**\r\n     * Applies position tween on object, GSAP version.\r\n     * Number of position points X/Y is variable. Count of X's and Y's must be equal.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static positionTween_TimelineLite(object: ITweenable, options: IPositionTweenOptions): TimelineLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        const positionTimeline: TimelineLite = new TimelineLite({\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            //autoRemoveChildren: true,\r\n        });\r\n\r\n        options.tweenX.forEach((tweenX: number, i: number) => {\r\n            positionTimeline.to(object.position, tweenDurationPerPart, {\r\n                useFrames: GsapEffects.UseFrames,\r\n                x: tweenX,\r\n                y: options.tweenY[i],\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            positionTimeline.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            positionTimeline.eventCallback(\"onComplete\", positionTimeline.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return positionTimeline;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     * @returns {TweenLite}\r\n     */\r\n    static positionTween_Tweenlite(object: ITweenable, options: IPositionTweenOptions): TweenLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenX.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenBezier: Object = options.bezier;\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let positionTweenLite: TweenLite;\r\n\r\n        if (tweenBezier != null) {\r\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\r\n                bezier: tweenBezier || 0,\r\n                useFrames: GsapEffects.UseFrames,\r\n                delay:\r\n                    options.tweenDelay != null && options.tweenDelay > 0\r\n                        ? options.tweenDelay * GsapEffects.TickTime\r\n                        : 0,\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        } else {\r\n            positionTweenLite = TweenLite.to(object.position, tweenDurationPerPart, {\r\n                useFrames: GsapEffects.UseFrames,\r\n                delay:\r\n                    options.tweenDelay != null && options.tweenDelay > 0\r\n                        ? options.tweenDelay * GsapEffects.TickTime\r\n                        : 0,\r\n                x: options.tweenX[0],\r\n                y: options.tweenY[0],\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        }\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            positionTweenLite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            positionTweenLite.eventCallback(\"onComplete\", positionTweenLite.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return positionTweenLite;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static bezierTween(object: ITweenable, options: IBezierTweenOptions): TweenLite {\r\n        let tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        tweenDuration = tweenDuration * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenBezier: Object = options.bezier;\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let bezierTweenLite: TweenLite;\r\n        bezierTweenLite = TweenLite.to(object, tweenDuration, {\r\n            bezier: tweenBezier || 0,\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            ease: tweenEase,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            bezierTweenLite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            bezierTweenLite.eventCallback(\"onComplete\", bezierTweenLite.restart);\r\n        }\r\n\r\n        return bezierTweenLite;\r\n    }\r\n\r\n    /**\r\n     * Applies rotation tween on object.\r\n     * Number of degrees is variable.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static rotationTween_TimelineLite(object: ITweenable, options: IRotationTweenOptions): TimelineLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        const rotationTimeline: TimelineLite = new TimelineLite({\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            paused: tweenPaused || false,\r\n            //autoRemoveChildren: true,\r\n        });\r\n\r\n        options.degrees.map(GsapEffects.degrees2radians).forEach((degree: number) => {\r\n            rotationTimeline.to(object, tweenDurationPerPart, {\r\n                useFrames: GsapEffects.UseFrames,\r\n                rotation: degree,\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            rotationTimeline.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            rotationTimeline.eventCallback(\"onComplete\", rotationTimeline.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return rotationTimeline;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     * @returns {TweenLite}\r\n     */\r\n    static rotationTween_Tweenlite(object: ITweenable, options: IRotationTweenOptions): TweenLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.degrees.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let rotationTweenLite: TweenLite;\r\n\r\n        rotationTweenLite = TweenLite.to(object, tweenDurationPerPart, {\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            rotation: GsapEffects.degrees2radians(options.degrees[0]),\r\n            ease: tweenEase,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            rotationTweenLite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            rotationTweenLite.eventCallback(\"onComplete\", rotationTweenLite.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return rotationTweenLite;\r\n    }\r\n\r\n    /**\r\n     * Applies scale tween on object, GSAP version.\r\n     * Number of scale points X/Y is variable. Count of X's and Y's must be equal.\r\n     *\r\n     * @param object\r\n     * @param options\r\n     * @returns {TimelineLite}\r\n     */\r\n    static scaleTween_TimelineLite(object: ITweenable, options: IScaleTweenOptions): TimelineLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        const scaleTimeline: TimelineLite = new TimelineLite({\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        options.tweenValues.forEach((tweenValue: PIXI.Point) => {\r\n            scaleTimeline.to(object.scale, tweenDurationPerPart, {\r\n                useFrames: GsapEffects.UseFrames,\r\n                x: tweenValue.x,\r\n                y: tweenValue.y,\r\n                ease: tweenEase,\r\n                paused: tweenPaused || false,\r\n            });\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            scaleTimeline.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            scaleTimeline.eventCallback(\"onComplete\", scaleTimeline.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return scaleTimeline;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param object\r\n     * @param options\r\n     * @returns {TweenLite}\r\n     */\r\n    static scaleTween_Tweenlite(object: ITweenable, options: IScaleTweenOptions): TweenLite {\r\n        const tweenDuration: number =\r\n            options.tweenDuration == null || isNaN(options.tweenDuration)\r\n                ? Math.floor(Math.random() * 120 + 120)\r\n                : options.tweenDuration;\r\n        const tweenDurationPerPart: number = (tweenDuration / options.tweenValues.length) * GsapEffects.TickTime;\r\n        const tweenEase: string = GsapEffects.getEaseing(options.tweenEase) || \"Linear.easeNone\";\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let scaleTweenLite: TweenLite;\r\n\r\n        scaleTweenLite = TweenLite.to(object.scale, tweenDurationPerPart, {\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay != null && options.tweenDelay > 0 ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            x: options.tweenValues[0].x,\r\n            y: options.tweenValues[0].y,\r\n            ease: tweenEase,\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            scaleTweenLite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            scaleTweenLite.eventCallback(\"onComplete\", scaleTweenLite.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return scaleTweenLite;\r\n    }\r\n\r\n    /**\r\n     * Applies tween on object, GSAP version.\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static tween_TimelineLite(object: ITweenable, options: ITweenOptions): TimelineLite {\r\n        const tween: Array<string> = options.tween.split(\".\");\r\n        const tweenProperty: string = tween[tween.length - 1];\r\n        const tweenPaused: boolean = options.paused;\r\n        const timeline: TimelineLite = new TimelineLite({\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay[0],\r\n            // delay: (options.tweenDelay != null && options.tweenDelay > 0) ? options.tweenDelay * GsapEffects.TickTime : 0,\r\n            // autoRemoveChildren: true,\r\n        });\r\n\r\n        options.tweenValues.forEach((value: number, i: number) => {\r\n            timeline.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[i], {\r\n                useFrames: GsapEffects.UseFrames,\r\n                [tweenProperty]: value,\r\n                ease: GsapEffects.getEaseing(options.tweenEase[i]) || \"Linear.easeNone\",\r\n                paused: tweenPaused || false,\r\n            });\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            timeline.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            timeline.eventCallback(\"onComplete\", timeline.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return timeline;\r\n    }\r\n\r\n    /**\r\n     * Applies tween on object, GSAP version.\r\n     * @param object\r\n     * @param options\r\n     */\r\n    static tween_Tweenlite(object: ITweenable, options: ITweenOptions): TweenLite {\r\n        const tween: Array<string> = options.tween.split(\".\");\r\n        const tweenProperty: string = tween[tween.length - 1];\r\n        const tweenPaused: boolean = options.paused;\r\n\r\n        let tweenlite: TweenLite;\r\n\r\n        tweenlite = TweenLite.to(tween.length == 1 ? object : object[tween[0]], options.tweenDuration[0], {\r\n            useFrames: GsapEffects.UseFrames,\r\n            delay: options.tweenDelay[0],\r\n            [tweenProperty]: options.tweenValues[0],\r\n            ease: GsapEffects.getEaseing(options.tweenEase[0]) || \"Linear.easeNone\",\r\n            paused: tweenPaused || false,\r\n        });\r\n\r\n        if (options.callbackFunction != null) {\r\n            if (options.callbackType == null) {\r\n                options.callbackType = \"onComplete\";\r\n            }\r\n            tweenlite.eventCallback(\r\n                options.callbackType,\r\n                options.callbackFunction,\r\n                options.callbackParams,\r\n                options.callbackScope,\r\n            );\r\n        }\r\n\r\n        if (options.tweenLoop) {\r\n            //restarts, not including any delay that was defined\r\n            tweenlite.eventCallback(\"onComplete\", tweenlite.restart);\r\n\r\n            //restarts, including any delay, and doesn't suppress events during the initial move back to time:0\r\n            //positionTweenLite.restart(true, false);\r\n        }\r\n\r\n        return tweenlite;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    static degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     * Return easing function for tweening.\r\n     * @method getEaseing\r\n     * @param ease string - name of easeing\r\n     * @return any\r\n     */\r\n    static getEaseing(ease: string): any {\r\n        switch (\"\" + ease) {\r\n            case \"0\":\r\n            case \"linear\":\r\n                return \"Linear.easeNone\";\r\n            case \"1\":\r\n            case \"backIn\":\r\n                return \"Back.easeIn\";\r\n            case \"2\":\r\n            case \"backInOut\":\r\n                return \"Back.easeInOut\";\r\n            case \"3\":\r\n            case \"backOut\":\r\n                return \"Back.easeOut\";\r\n            case \"4\":\r\n            case \"bounceIn\":\r\n                return \"Bounce.easeIn\";\r\n            case \"5\":\r\n            case \"bounceInOut\":\r\n                return \"Bounce.easeInOut\";\r\n            case \"6\":\r\n            case \"bounceOut\":\r\n                return \"Bounce.easeOut\";\r\n            case \"7\":\r\n            case \"circIn\":\r\n                return \"Circ.easeIn\";\r\n            case \"8\":\r\n            case \"circInOut\":\r\n                return \"Circ.easeInOut\";\r\n            case \"9\":\r\n            case \"circOut\":\r\n                return \"Circ.easeOut\";\r\n            case \"10\":\r\n            case \"cubicIn\":\r\n                return \"Cubic.easeIn\";\r\n            case \"11\":\r\n            case \"cubicInOut\":\r\n                return \"Cubic.easeInOut\";\r\n            case \"12\":\r\n            case \"cubicOut\":\r\n                return \"Cubic.easeOut\";\r\n            case \"13\":\r\n            case \"elasticIn\":\r\n                return \"Elastic.easeIn\";\r\n            case \"14\":\r\n            case \"elasticInOut\":\r\n                return \"Elastic.easeInOut\";\r\n            case \"15\":\r\n            case \"elasticOut\":\r\n                return \"Elastic.easeOut\";\r\n            case \"16\":\r\n            case \"quadIn\":\r\n                return \"Quad.easeIn\";\r\n            case \"17\":\r\n            case \"quadInOut\":\r\n                return \"Quad.easeInOut\";\r\n            case \"18\":\r\n            case \"quadOut\":\r\n                return \"Quad.easeOut\";\r\n            case \"19\":\r\n            case \"quartIn\":\r\n                return \"Quart.easeIn\";\r\n            case \"20\":\r\n            case \"quartInOut\":\r\n                return \"Quart.easeInOut\";\r\n            case \"21\":\r\n            case \"quartOut\":\r\n                return \"Quart.easeOut\";\r\n            case \"22\":\r\n            case \"quintIn\":\r\n                return \"Quint.easeIn\";\r\n            case \"23\":\r\n            case \"quintInOut\":\r\n                return \"Quint.easeInOut\";\r\n            case \"24\":\r\n            case \"quintOut\":\r\n                return \"Quint.easeOut\";\r\n            case \"25\":\r\n            case \"sineIn\":\r\n                return \"Sine.easeIn\";\r\n            case \"26\":\r\n            case \"sineInOut\":\r\n                return \"Sine.easeInOut\";\r\n            case \"27\":\r\n            case \"sineOut\":\r\n                return \"Sine.easeOut\";\r\n            case \"power1In\":\r\n                return \"Power1.easeIn\";\r\n            case \"power1Out\":\r\n                return \"Power1.easeOut\";\r\n            case \"power2In\":\r\n                return \"Power2.easeIn\";\r\n            case \"power3In\":\r\n                return \"Power3.easeIn\";\r\n            case \"power1InOut\":\r\n                return \"Power1.easeInOut\";\r\n            case \"power4In\":\r\n                return \"Power4.easeIn\";\r\n            case \"fountainSlowMo\":\r\n                return new SlowMo().config(0.1, 0.7, false);\r\n            case \"explodeSlowMo\":\r\n                return new SlowMo().config(0, 0.1, true);\r\n            case \"custom_shake\":\r\n                return new RoughEase({\r\n                    strength: 8,\r\n                    points: 10,\r\n                    template: Bounce.easeIn,\r\n                    taper: \"out\",\r\n                    randomize: true,\r\n                    clamp: false,\r\n                });\r\n            default:\r\n                /* if (DEBUG) {\r\n                     GsapEffects.log('WARNING no easeing with name: ' + ease + '. Used default.');\r\n                 }*/\r\n\r\n                return CustomEase.get(ease) != null ? ease : \"Linear.easeNone\";\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected static log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__ || \"GsapEffects\";\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\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 = 16\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 = 17\n ** module chunks = 0\n **/","import { ArrayUtils } from \"neo-common\";\r\nimport { TweenLite, Ease } from \"gsap\";\r\n\r\nexport class CustomEase extends Ease {\r\n    private id: string;\r\n    private data: string;\r\n    private lookup: Array<any>;\r\n    private points: Array<any>;\r\n    private rawBezier: Array<number>;\r\n\r\n    private fast: boolean;\r\n    private l: number;\r\n\r\n    private _numbersExp = /(?:(-|-=|\\+=)?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n    private _svgPathExp = /[achlmqstvz]|(-?\\d*\\.?\\d*(?:e[\\-+]?\\d+)?)[0-9]/gi;\r\n    private _scientific = /[\\+\\-]?\\d*\\.?\\d+e[\\+\\-]?\\d+/gi;\r\n    private _needsParsingExp = /[cLlsS]/g;\r\n    private _bezierError = \"CustomEase only accepts Cubic Bezier data.\";\r\n\r\n    constructor(id: string, data: string, config?: any) {\r\n        super();\r\n\r\n        this.id = id;\r\n        if (id) {\r\n            Ease.map[id] = this;\r\n        }\r\n\r\n        this._calcEnd = true;\r\n        this.getRatio = this._getRatio; //speed optimization, faster lookups.\r\n\r\n        this.setData(data, config);\r\n    }\r\n\r\n    private _bezierToPoints(\r\n        x1: number,\r\n        y1: number,\r\n        x2: number,\r\n        y2: number,\r\n        x3: number,\r\n        y3: number,\r\n        x4: number,\r\n        y4: number,\r\n        threshold: number,\r\n        points: Array<any>,\r\n        index: number,\r\n    ) {\r\n        let x12 = (x1 + x2) / 2;\r\n        let y12 = (y1 + y2) / 2;\r\n        let x23 = (x2 + x3) / 2;\r\n        let y23 = (y2 + y3) / 2;\r\n        let x34 = (x3 + x4) / 2;\r\n        let y34 = (y3 + y4) / 2;\r\n        let x123 = (x12 + x23) / 2;\r\n        let y123 = (y12 + y23) / 2;\r\n        let x234 = (x23 + x34) / 2;\r\n        let y234 = (y23 + y34) / 2;\r\n        let x1234 = (x123 + x234) / 2;\r\n        let y1234 = (y123 + y234) / 2;\r\n        let dx = x4 - x1;\r\n        let dy = y4 - y1;\r\n        let d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx);\r\n        let d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx);\r\n        let length: number;\r\n\r\n        if (!points) {\r\n            points = [\r\n                { x: x1, y: y1 },\r\n                { x: x4, y: y4 },\r\n            ];\r\n            index = 1;\r\n        }\r\n        points.splice(index || points.length - 1, 0, { x: x1234, y: y1234 });\r\n        if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {\r\n            length = points.length;\r\n            this._bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);\r\n            this._bezierToPoints(\r\n                x1234,\r\n                y1234,\r\n                x234,\r\n                y234,\r\n                x34,\r\n                y34,\r\n                x4,\r\n                y4,\r\n                threshold,\r\n                points,\r\n                index + 1 + (points.length - length),\r\n            );\r\n        }\r\n        return points;\r\n    }\r\n\r\n    private _pathDataToBezier(d: string) {\r\n        let a: RegExpMatchArray =\r\n            (d + \"\")\r\n                .replace(this._scientific, function (m) {\r\n                    let n = +m;\r\n                    let result = n < 0.0001 && n > -0.0001 ? 0 : n;\r\n                    return result.toString();\r\n                })\r\n                .match(this._svgPathExp) || [];\r\n\r\n        let path: Array<any> = [];\r\n        let relativeX = 0;\r\n        let relativeY = 0;\r\n        let elements = a.length;\r\n        let l = 2;\r\n        let i: number;\r\n        let x: number;\r\n        let y: number;\r\n        let command: string;\r\n        let isRelative: boolean;\r\n        let segment: any;\r\n        let startX: number;\r\n        let startY: number;\r\n        let prevCommand: string;\r\n        let difX: number;\r\n        let difY: number;\r\n        for (i = 0; i < elements; i++) {\r\n            prevCommand = command;\r\n            if (isNaN(parseFloat(a[i]))) {\r\n                command = a[i].toUpperCase();\r\n                isRelative = command !== a[i]; //lower case means relative\r\n            } else {\r\n                //commands like \"C\" can be strung together without any new command characters between.\r\n                i--;\r\n            }\r\n            x = +a[i + 1];\r\n            y = +a[i + 2];\r\n            if (isRelative) {\r\n                x += relativeX;\r\n                y += relativeY;\r\n            }\r\n            if (!i) {\r\n                startX = x;\r\n                startY = y;\r\n            }\r\n            if (command === \"M\") {\r\n                if (segment && segment.length < 8) {\r\n                    //if the path data was funky and just had a M with no actual drawing anywhere, skip it.\r\n                    path.length -= 1;\r\n                    l = 0;\r\n                }\r\n                relativeX = startX = x;\r\n                relativeY = startY = y;\r\n                segment = [x, y];\r\n                l = 2;\r\n                path.push(segment);\r\n                i += 2;\r\n                command = \"L\"; //an \"M\" with more than 2 values gets interpreted as \"lineTo\" commands (\"L\").\r\n            } else if (command === \"C\") {\r\n                if (!segment) {\r\n                    segment = [0, 0];\r\n                }\r\n                segment[l++] = x;\r\n                segment[l++] = y;\r\n                if (!isRelative) {\r\n                    relativeX = relativeY = 0;\r\n                }\r\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.\r\n                segment[l++] = relativeY + parseFloat(a[i + 4]);\r\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 5]);\r\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 6]);\r\n                i += 6;\r\n            } else if (command === \"S\") {\r\n                if (prevCommand === \"C\" || prevCommand === \"S\") {\r\n                    difX = relativeX - segment[l - 4];\r\n                    difY = relativeY - segment[l - 3];\r\n                    segment[l++] = relativeX + difX;\r\n                    segment[l++] = relativeY + difY;\r\n                } else {\r\n                    segment[l++] = relativeX;\r\n                    segment[l++] = relativeY;\r\n                }\r\n                segment[l++] = x;\r\n                segment[l++] = y;\r\n                if (!isRelative) {\r\n                    relativeX = relativeY = 0;\r\n                }\r\n                segment[l++] = relativeX = relativeX + parseFloat(a[i + 3]);\r\n                segment[l++] = relativeY = relativeY + parseFloat(a[i + 4]);\r\n                i += 4;\r\n            } else if (command === \"L\" || command === \"Z\") {\r\n                if (command === \"Z\") {\r\n                    x = startX;\r\n                    y = startY;\r\n                    segment.closed = true;\r\n                }\r\n                if (command === \"L\" || Math.abs(relativeX - x) > 0.5 || Math.abs(relativeY - y) > 0.5) {\r\n                    segment[l++] = relativeX + (x - relativeX) / 3;\r\n                    segment[l++] = relativeY + (y - relativeY) / 3;\r\n                    segment[l++] = relativeX + ((x - relativeX) * 2) / 3;\r\n                    segment[l++] = relativeY + ((y - relativeY) * 2) / 3;\r\n                    segment[l++] = x;\r\n                    segment[l++] = y;\r\n                    if (command === \"L\") {\r\n                        i += 2;\r\n                    }\r\n                }\r\n                relativeX = x;\r\n                relativeY = y;\r\n            } else {\r\n                throw this._bezierError;\r\n            }\r\n        }\r\n        return path[0];\r\n    }\r\n\r\n    private _findMinimum(values: Array<number>) {\r\n        let l = values.length,\r\n            min = 999999999999,\r\n            i: number;\r\n        for (i = 1; i < l; i += 6) {\r\n            if (+values[i] < min) {\r\n                min = +values[i];\r\n            }\r\n        }\r\n        return min;\r\n    }\r\n\r\n    private _normalize(values: Array<number>, height?: number, originY?: number) {\r\n        //takes all the points and translates/scales them so that the x starts at 0 and ends at 1.\r\n        if (!originY && originY !== 0) {\r\n            originY = Math.max(+values[values.length - 1], +values[1]);\r\n        }\r\n        let tx = +values[0] * -1,\r\n            ty = -originY,\r\n            l = values.length,\r\n            sx = 1 / (+values[l - 2] + tx),\r\n            sy =\r\n                -height ||\r\n                (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0])\r\n                    ? this._findMinimum(values) + ty\r\n                    : +values[l - 1] + ty),\r\n            i: number;\r\n        if (sy) {\r\n            //typically y ends at 1 (so that the end values are reached)\r\n            sy = 1 / sy;\r\n        } else {\r\n            //in case the ease returns to its beginning value, scale everything proportionally\r\n            sy = -sx;\r\n        }\r\n        for (i = 0; i < l; i += 2) {\r\n            values[i] = (+values[i] + tx) * sx;\r\n            values[i + 1] = (+values[i + 1] + ty) * sy;\r\n        }\r\n    }\r\n\r\n    private _getRatio(p: number) {\r\n        var point = this.lookup[(p * this.l) | 0] || this.lookup[this.l - 1];\r\n        if (point.nx < p) {\r\n            point = point.n;\r\n        }\r\n        let result = point.y + ((p - point.x) / point.cx) * point.cy;\r\n        return result;\r\n    }\r\n\r\n    private setData(data: string, config?: any) {\r\n        this.data = data || \"0,0,1,1\";\r\n        this.points = [];\r\n        this.lookup = [];\r\n\r\n        let values = ArrayUtils.numberArray(this.data.match(this._numbersExp).join(\";\"));\r\n        let closest = 1;\r\n\r\n        let a1: any,\r\n            a2: any,\r\n            i: number,\r\n            inc: number,\r\n            j: number,\r\n            point: any,\r\n            prevPoint: any,\r\n            p: number,\r\n            precision: number;\r\n\r\n        precision = (config && config.precision) || 1;\r\n        this.fast = precision <= 1;\r\n\r\n        if (this._needsParsingExp.test(data) || (data.indexOf(\"M\") !== -1 && data.indexOf(\"C\") === -1)) {\r\n            values = this._pathDataToBezier(data);\r\n        }\r\n\r\n        this.l = values.length;\r\n\r\n        if (this.l === 4) {\r\n            values.unshift(0, 0);\r\n            values.push(1, 1);\r\n            this.l = 8;\r\n        } else if ((this.l - 2) % 6) {\r\n            throw this._bezierError;\r\n        }\r\n        if (+values[0] !== 0 || +values[this.l - 2] !== 1) {\r\n            let height = config && config.height ? config.height : null;\r\n            let originY = config && config.originY ? config.originY : null;\r\n            this._normalize(values, height, originY);\r\n        }\r\n\r\n        this.rawBezier = values;\r\n\r\n        for (i = 2; i < this.l; i += 6) {\r\n            a1 = { x: +values[i - 2], y: +values[i - 1] };\r\n            a2 = { x: +values[i + 4], y: +values[i + 5] };\r\n            this.points.push(a1, a2);\r\n            this._bezierToPoints(\r\n                a1.x,\r\n                a1.y,\r\n                +values[i],\r\n                +values[i + 1],\r\n                +values[i + 2],\r\n                +values[i + 3],\r\n                a2.x,\r\n                a2.y,\r\n                1 / (precision * 200000),\r\n                this.points,\r\n                this.points.length - 1,\r\n            );\r\n        }\r\n\r\n        this.l = this.points.length;\r\n        for (i = 0; i < this.l; i++) {\r\n            point = this.points[i];\r\n            prevPoint = this.points[i - 1] || point;\r\n            if (point.x > prevPoint.x || (prevPoint.y !== point.y && prevPoint.x === point.x) || point === prevPoint) {\r\n                //if a point goes BACKWARD in time or is a duplicate, just drop it.\r\n                prevPoint.cx = point.x - prevPoint.x; //change in x between this point and the next point (performance optimization)\r\n                prevPoint.cy = point.y - prevPoint.y;\r\n                prevPoint.n = point;\r\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)\r\n                if (\r\n                    this.fast &&\r\n                    i > 1 &&\r\n                    Math.abs(prevPoint.cy / prevPoint.cx - this.points[i - 2].cy / this.points[i - 2].cx) > 2\r\n                ) {\r\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.\r\n                    this.fast = false;\r\n                }\r\n                if (prevPoint.cx < closest) {\r\n                    if (!prevPoint.cx) {\r\n                        prevPoint.cx = 0.001; //avoids math problems in getRatio() (dividing by zero)\r\n                        if (i === this.l - 1) {\r\n                            //in case the final segment goes vertical RIGHT at the end, make sure we end at the end.\r\n                            prevPoint.x -= 0.001;\r\n                            closest = Math.min(closest, 0.001);\r\n                            this.fast = false;\r\n                        }\r\n                    } else {\r\n                        closest = prevPoint.cx;\r\n                    }\r\n                }\r\n            } else {\r\n                this.points.splice(i--, 1);\r\n                this.l--;\r\n            }\r\n        }\r\n\r\n        this.l = (1 / closest + 1) | 0;\r\n        inc = 1 / this.l;\r\n        j = 0;\r\n        point = this.points[0];\r\n        if (this.fast) {\r\n            for (i = 0; i < this.l; i++) {\r\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).\r\n                p = i * inc;\r\n                if (point.nx < p) {\r\n                    point = this.points[++j];\r\n                }\r\n                a1 = point.y + ((p - point.x) / point.cx) * point.cy;\r\n                this.lookup[i] = { x: p, cx: inc, y: a1, cy: 0, nx: 9 };\r\n                if (i) {\r\n                    this.lookup[i - 1].cy = a1 - this.lookup[i - 1].y;\r\n                }\r\n            }\r\n            this.lookup[this.l - 1].cy = this.points[this.points.length - 1].y - a1;\r\n        } else {\r\n            //this option is more accurate, ensuring that EVERY anchor is hit perfectly. Clipping across a bounce, for example, would never happen.\r\n            for (i = 0; i < this.l; i++) {\r\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)]\r\n                if (point.nx < i * inc) {\r\n                    point = this.points[++j];\r\n                }\r\n                this.lookup[i] = point;\r\n            }\r\n\r\n            if (j < this.points.length - 1) {\r\n                this.lookup[i - 1] = this.points[this.points.length - 2];\r\n            }\r\n        }\r\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.\r\n    }\r\n\r\n    public static create(id: string, data: string, config?: any): CustomEase {\r\n        return new CustomEase(id, data, config);\r\n    }\r\n\r\n    public static get(id: string): Ease {\r\n        return Ease.map[id];\r\n    }\r\n\r\n    public static createCustomEasing(): void {\r\n        let dataTeasingEase =\r\n            \"M0,0 C0,0 0.03482,0.14257 0.06534,0.22865 0.0957,0.31427 0.11728,0.36542 0.15822,0.44618 0.1968,0.52232 0.2238,0.56837 0.27261,0.6376 0.3171,0.7007 0.34892,0.73937 0.40306,0.79347 0.45351,0.8439 0.49041,0.87456 0.54918,0.91403 0.60274,0.95 0.64359,0.97355 0.70202,0.99427 0.74895,1.0109 0.78808,1.01574 0.83882,1.01671 0.89814,1.01786 1,1 1,1 \";\r\n        CustomEase.create(\"TeasingEase\", dataTeasingEase);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Effects/CustomEase.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\n\r\n/**\r\n * The StyleManager class is used for storing styles for canvas elements and html elements.\r\n * @class StyleManager\r\n */\r\nexport class StyleManager {\r\n    static Styles: { [id: string]: any } = {};\r\n    static HtmlStyles: { [id: string]: any } = {};\r\n\r\n    static cleanup() {\r\n        // NOTE(psulek) perf-tunning\r\n        // - cleanup of 'StyleManager.HtmlStyles' is safe because it is used only in preloader active phase and not in runtime!\r\n        // - do not cleanup 'StyleManager.Styles' because this is used in runtime\r\n        StyleManager.HtmlStyles = null;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"StyleManager\", data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parse style elements and store them by type to static variables.\r\n     * @method parseElements\r\n     * @param startNode Element\r\n     * @return void\r\n     */\r\n    static parseElements(startNode: Element): void {\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n\r\n        const nodes: Array<Element> = StyleManager.getNodesList(startNode.firstElementChild)\r\n            .reverse()\r\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") !== \"\");\r\n\r\n        nodes\r\n            .filter((node: Element) =>\r\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.Style),\r\n            )\r\n            .forEach((node: Element) => {\r\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n                style.create(node);\r\n                StyleManager.Styles[node.nodeName] = style;\r\n            });\r\n\r\n        nodes\r\n            .filter((node: Element) =>\r\n                EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlStyle),\r\n            )\r\n            .forEach((node: Element) => {\r\n                const style: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n                style.create(node);\r\n                StyleManager.HtmlStyles[node.nodeName] = style;\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param node Element\r\n     * @param nodeList Array<Element>\r\n     * @return Array<Element>\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = StyleManager.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/StyleManager.ts\n **/","import { StringUtils } from \"neo-common\";\r\n\r\n/**\r\n * @class Attributes\r\n */\r\nexport class Attributes {\r\n    /**\r\n     * @method assignIntAttribute\r\n     * @param {Element} node\r\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\r\n     * @param {number} defaultValue - value that is set if falsy value is read from node\r\n     * @param radix\r\n     * @return {number} parsed attribute value\r\n     */\r\n    static assignIntAttribute(node: Element, attribute: string, defaultValue: number, radix?: number): number {\r\n        if (!node.hasAttribute(attribute)) {\r\n            return defaultValue;\r\n        }\r\n\r\n        return parseInt(node.getAttribute(attribute), radix);\r\n    }\r\n\r\n    /**\r\n     * @method assignFloatAttribute\r\n     * @param {Element} node\r\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\r\n     * @param {number} defaultValue - value that is set if falsy value is read from node\r\n     * @return {number} parsed attribute value\r\n     */\r\n    static assignFloatAttribute(node: Element, attribute: string, defaultValue: number): number {\r\n        if (!node.hasAttribute(attribute)) {\r\n            return defaultValue;\r\n        }\r\n\r\n        return parseFloat(node.getAttribute(attribute));\r\n    }\r\n\r\n    /**\r\n     * @method assignBooleanAttribute\r\n     * @param {Element} node\r\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\r\n     * @param {number} defaultValue - value that is set if falsy value is read from node\r\n     * @return {boolean} parsed attribute value\r\n     */\r\n    static assignBooleanAttribute(node: Element, attribute: string, defaultValue: boolean): boolean {\r\n        if (!node.hasAttribute(attribute)) {\r\n            return defaultValue;\r\n        }\r\n\r\n        return StringUtils.parseBoolean(node.getAttribute(attribute));\r\n    }\r\n\r\n    /**\r\n     * @method assignBooleanAttribute\r\n     * @param {Element} node\r\n     * @param {string} attribute - XML node attribute, constant from ImageElementAttributes class\r\n     * @param {number} defaultValue - value that is set if falsy value is read from node\r\n     * @return {boolean} parsed attribute value\r\n     */\r\n    static assignStringAttribute(node: Element, attribute: string, defaultValue: any): any {\r\n        if (!node.hasAttribute(attribute)) {\r\n            return defaultValue;\r\n        }\r\n\r\n        return node.getAttribute(attribute);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Attributes.ts\n **/","import { IAnimationFrame } from \"./Types\";\r\n\r\nexport class AnimationFramePool {\r\n    private static framesPool: Array<IAnimationFrame> = [];\r\n\r\n    static registerFrame(frame: IAnimationFrame): boolean {\r\n        var pool = AnimationFramePool.framesPool;\r\n        for (var i = 0; i < pool.length; i++) {\r\n            if (pool[i].frame_uid === frame.frame_uid) {\r\n                //frame.log(`already registered on Stage controller frame pool!`, true);\r\n                return false;\r\n            }\r\n        }\r\n\r\n        pool.push(frame);\r\n        return true;\r\n    }\r\n\r\n    static unregisterFrame(frame: IAnimationFrame): boolean {\r\n        var pool = AnimationFramePool.framesPool;\r\n        var idx = -1;\r\n        for (var i = 0; i < pool.length; i++) {\r\n            if (pool[i].frame_uid === frame.frame_uid) {\r\n                idx = i;\r\n                break;\r\n            }\r\n        }\r\n\r\n        var result = idx > -1;\r\n        if (result) {\r\n            // fail safe check\r\n            if (pool[idx].frame_uid === frame.frame_uid) {\r\n                pool.splice(idx, 1);\r\n            } else {\r\n                result = false;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    static draw(): void {\r\n        // loop and paint all animation frames from pool\r\n        var pool = AnimationFramePool.framesPool;\r\n        for (var i = 0; i < pool.length; i++) {\r\n            var frame = pool[i];\r\n            frame.frame_draw();\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/AnimationFrame/Pool.ts\n **/","import { FrameTimer } from \"./FrameTimer\";\r\n\r\nexport class FrameTimerPool {\r\n    public static pool: Object = {};\r\n    public static paused: boolean = false;\r\n\r\n    public static add(key: string, item: any): void {\r\n        FrameTimerPool.pool[key] = item;\r\n    }\r\n\r\n    public static remove(key: string): void {\r\n        delete FrameTimerPool.pool[key];\r\n    }\r\n\r\n    public static pause(force: boolean = false): void {\r\n        if (FrameTimerPool.paused && !force) {\r\n            return;\r\n        }\r\n        for (let key in FrameTimerPool.pool) {\r\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\r\n                FrameTimerPool.pool[key].pause();\r\n            }\r\n        }\r\n        FrameTimerPool.paused = true;\r\n    }\r\n\r\n    public static unpause(force: boolean = false): void {\r\n        if (!FrameTimerPool.paused && !force) {\r\n            return;\r\n        }\r\n        for (let key in FrameTimerPool.pool) {\r\n            if (FrameTimerPool.pool[key] instanceof FrameTimer) {\r\n                FrameTimerPool.pool[key].unpause();\r\n            }\r\n        }\r\n        FrameTimerPool.paused = false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/FrameTimerPool.ts\n **/","import { JackpotCounter } from \"../Jackpot/JackpotCounter\";\r\nimport { JackpotHistoryDialog } from \"../Jackpot/JackpotHistoryDialog\";\r\nimport { Scaling } from \"../../../Utils/Scaling\";\r\nimport { CreateFrameTimer, FrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { JackpotGame } from \"../Jackpot/JackpotGame\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { Communication } from \"neo-games/Engine/index\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\n\r\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\r\ntype ProgressiveBonusGetInfoResponse = Communication.Game.ProgressiveBonusGetInfoResponse;\r\n\r\nexport class Jackpot {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    public static readonly JackpotTheme: string = \"SPJackpot\";\r\n\r\n    public static Height: number = 0;\r\n\r\n    private static BonusId: number = -1;\r\n    private static CountersCount: number = 4;\r\n\r\n    private static WidgetRoot: HTMLElement;\r\n    private static GameRoot: HTMLElement;\r\n    private static Counters: Array<JackpotCounter> = [];\r\n    private static HistoryDialogs: Array<JackpotHistoryDialog> = [];\r\n    private static Game: JackpotGame;\r\n\r\n    private static RefreshInterval: number = 15; //in seconds\r\n    private static RefreshTimerId: number;\r\n\r\n    private static TouchEvent: any;\r\n    private static Offline: boolean = false;\r\n\r\n    private static Timer: FrameTimerEventEmitter;\r\n\r\n    //******************************************************************************************************************\r\n    //  INITIALIZE & SHOW\r\n    //******************************************************************************************************************\r\n\r\n    public static initialize(): void {\r\n        if (AppContext && AppContext.gameConfiguration.ProgressiveBonusId > -1) {\r\n            document.body.classList.add(\"jpt-on\");\r\n            Jackpot.WidgetRoot = document.getElementById(\"jackpotWidget\");\r\n            Jackpot.GameRoot = document.getElementById(\"jackpotGame\");\r\n            Jackpot.BonusId = AppContext.gameConfiguration.ProgressiveBonusId;\r\n\r\n            Jackpot.createCounters();\r\n            Jackpot.createHistoryDialogs();\r\n            // Jackpot.createBonusGame();\r\n\r\n            Jackpot.bindElements();\r\n\r\n            Jackpot.getBonusInfo(Jackpot.initJackpotDataReceived);\r\n\r\n            if (GameManager.gameClient) {\r\n                GameManager.gameClient.setBonusId(Jackpot.BonusId);\r\n            }\r\n        } else {\r\n            Jackpot.clearJackpot();\r\n        }\r\n    }\r\n\r\n    public static reinitialize(): void {\r\n        if (Jackpot.Offline) {\r\n            Jackpot.Offline = false;\r\n            Jackpot.refreshBonusInfo();\r\n            Jackpot.refreshCounters();\r\n        }\r\n    }\r\n\r\n    public static show(): void {\r\n        if (Jackpot.WidgetRoot) {\r\n            if (Jackpot.Counters.length > 0) {\r\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                    Jackpot.Counters[i].createCurrency(DataManager.getDataById(GameData.DataCurrency));\r\n                    Jackpot.HistoryDialogs[i].updateDataWithCurrency();\r\n                }\r\n\r\n                Jackpot.Height = Jackpot.Counters[0].getHeight();\r\n                Scaling.PortraitMobileRatio = 0.76; //ToDo hot fix 222163\r\n                Scaling.resizeRoot();\r\n            }\r\n        }\r\n    }\r\n\r\n    private static clearJackpot(): void {\r\n        let jackpotWidget = document.getElementById(\"jackpotWidget\");\r\n        let jackpotGame = document.getElementById(\"jackpotGame\");\r\n        if (jackpotWidget && jackpotWidget.parentNode && jackpotGame && jackpotGame.parentNode) {\r\n            jackpotWidget.parentNode.removeChild(jackpotWidget);\r\n            jackpotGame.parentNode.removeChild(jackpotGame);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE\r\n    //******************************************************************************************************************\r\n\r\n    private static createCounters(): void {\r\n        if (Jackpot.WidgetRoot) {\r\n            Jackpot.getCustomContent(\"jackpotLogo.jpg\", Jackpot.createLogo, Jackpot.createLogo);\r\n\r\n            Jackpot.createElement(\"div\", \"jackpotCountersBg\", Jackpot.WidgetRoot);\r\n            let holder = Jackpot.createElement(\"div\", \"jackpotCounters\", Jackpot.WidgetRoot);\r\n            holder.id = \"jackpotCounters\";\r\n\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                let counter = new JackpotCounter(i + 1, holder, Jackpot.refreshCounters);\r\n\r\n                Jackpot.Counters.push(counter);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static createLogo(contentUrl: string = \"\"): void {\r\n        let logo = Jackpot.createElement(\"div\", \"jackpotLogo\", Jackpot.WidgetRoot);\r\n        logo = Jackpot.createElement(\"div\", \"\", logo);\r\n        logo.id = \"jackpotLogo\";\r\n\r\n        if (contentUrl != \"\") {\r\n            logo.style.background = `url(${contentUrl})`;\r\n        }\r\n    }\r\n\r\n    private static createHistoryDialogs(): void {\r\n        if (Jackpot.WidgetRoot) {\r\n            let holder = Jackpot.createElement(\"div\", \"jackpotHistory\", Jackpot.WidgetRoot);\r\n\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                let dialog = new JackpotHistoryDialog(i + 1, holder);\r\n\r\n                Jackpot.HistoryDialogs.push(dialog);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static createBonusGame(): void {\r\n        if (Jackpot.GameRoot) {\r\n            let holder = Jackpot.createElement(\"div\", \"jackpotGameHolder\", Jackpot.GameRoot);\r\n            Jackpot.Game = new JackpotGame(holder);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REFRESH\r\n    //******************************************************************************************************************\r\n\r\n    public static refreshCounters(): void {\r\n        for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n            Jackpot.Counters[i].refreshWithReset();\r\n        }\r\n    }\r\n\r\n    public static showError(useResetAnim: boolean = false): void {\r\n        clearTimeout(this.RefreshTimerId);\r\n\r\n        if (Jackpot.WidgetRoot) {\r\n            if (Jackpot.Counters && Jackpot.HistoryDialogs) {\r\n                Jackpot.Offline = true;\r\n\r\n                for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                    Jackpot.Counters[i].error(useResetAnim);\r\n                    Jackpot.HistoryDialogs[i].error(useResetAnim);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REFRESH\r\n    //******************************************************************************************************************\r\n\r\n    public static refreshBonusInfo(): void {\r\n        clearTimeout(this.RefreshTimerId);\r\n\r\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive);\r\n    }\r\n\r\n    public static refreshBonusInfoInMiniGame(overrideLevelData: IProgressiveBonusLevel): void {\r\n        clearTimeout(this.RefreshTimerId);\r\n\r\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, { overrideLeveldata: overrideLevelData, priority: true });\r\n    }\r\n\r\n    public static refreshBonusInfoWithWinValue(overrideLevelData: IProgressiveBonusLevel): void {\r\n        clearTimeout(this.RefreshTimerId);\r\n\r\n        Jackpot.getBonusInfo(Jackpot.jackpotDataReceive, {\r\n            overrideLeveldata: overrideLevelData,\r\n            priority: true,\r\n            fromMiniGame: overrideLevelData.code,\r\n        });\r\n    }\r\n\r\n    public static refreshBonusInfoBeforeSpin(spinCallback: () => void): void {\r\n        clearTimeout(this.RefreshTimerId);\r\n\r\n        Jackpot.getBonusInfoBeforeSpin(spinCallback, { priority: true });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REQUESTS\r\n    //******************************************************************************************************************\r\n\r\n    private static getBonusInfo(\r\n        callback: (response: ProgressiveBonusGetInfoResponse, customData?: any) => void,\r\n        customData?: any,\r\n    ): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient\r\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n                .then((response: ProgressiveBonusGetInfoResponse) => {\r\n                    callback(response, customData);\r\n                    return null;\r\n                })\r\n                .catch((error) => {\r\n                    Jackpot.showError(true);\r\n                });\r\n        }\r\n    }\r\n\r\n    private static getBonusInfoBeforeSpin(callback: () => void, customData?: any): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient\r\n                .sendProgressiveBonusGetInfoRequest(Jackpot.BonusId)\r\n                .then((response: ProgressiveBonusGetInfoResponse) => {\r\n                    Jackpot.jackpotDataReceive(response, customData);\r\n                    callback();\r\n                    return null;\r\n                })\r\n                .catch((error) => {\r\n                    Jackpot.showError(true);\r\n                });\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLE RESPONSE\r\n    //******************************************************************************************************************\r\n\r\n    private static initJackpotDataReceived(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\r\n        if (response != null) {\r\n            Jackpot.RefreshInterval = response.refreshInterval;\r\n\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                Jackpot.Counters[i].initialize(response.levels[i], response.timestamp);\r\n                Jackpot.HistoryDialogs[i].initialize(response.levels[i]);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                Jackpot.Counters[i].error();\r\n                Jackpot.HistoryDialogs[i].error();\r\n            }\r\n        }\r\n\r\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n    }\r\n\r\n    private static jackpotDataReceive(response: ProgressiveBonusGetInfoResponse, customData?: any): void {\r\n        if (response != null) {\r\n            Jackpot.RefreshInterval = response.refreshInterval;\r\n\r\n            let winOverride = customData != null && customData[\"overrideLeveldata\"] != null;\r\n            let priority = customData != null && customData[\"priority\"] != null;\r\n            let fromMiniGame =\r\n                customData != null && customData[\"fromMiniGame\"] != null ? customData[\"fromMiniGame\"] : \"\";\r\n\r\n            if (winOverride) {\r\n                response = Jackpot.updateReponseData(response, customData[\"overrideLeveldata\"]);\r\n            }\r\n\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                Jackpot.Counters[i].assign(\r\n                    response.levels[i],\r\n                    response.timestamp,\r\n                    priority,\r\n                    response.levels[i][\"overridedLastWinAmount\"],\r\n                    fromMiniGame == response.levels[i].code,\r\n                );\r\n                Jackpot.HistoryDialogs[i].assign(response.levels[i]);\r\n            }\r\n        } else {\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                Jackpot.Counters[i].error();\r\n                Jackpot.HistoryDialogs[i].error();\r\n            }\r\n        }\r\n\r\n        Jackpot.RefreshTimerId = setTimeout(Jackpot.refreshBonusInfo, Jackpot.RefreshInterval * 1000);\r\n    }\r\n\r\n    private static updateReponseData(\r\n        response: ProgressiveBonusGetInfoResponse,\r\n        overrideLevelData: IProgressiveBonusLevel,\r\n    ): ProgressiveBonusGetInfoResponse {\r\n        if (overrideLevelData != null) {\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                if (response.levels[i].code == overrideLevelData.code) {\r\n                    //to always show minigame win value in counter\r\n                    if (overrideLevelData.lastWinAmount != null) {\r\n                        response.levels[i][\"overridedLastWinAmount\"] = overrideLevelData.lastWinAmount;\r\n                    } else {\r\n                        response.levels[i] = overrideLevelData;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return response;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  BIND EVENTS\r\n    //******************************************************************************************************************\r\n\r\n    private static bindElements(): void {\r\n        for (let i = 0; i < Jackpot.Counters.length; i++) {\r\n            if (window[\"CHANNEL\"] === \"mobile\") {\r\n                Jackpot.Counters[i]\r\n                    .getRoot()\r\n                    .addEventListener(\"click\", (event: Event) => Jackpot.toggleHistoryDialog(event, i));\r\n\r\n                //prevent close when clicked into dialog\r\n                for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\r\n                    Jackpot.HistoryDialogs[i]\r\n                        .getRoot()\r\n                        .addEventListener(\"click\", (event: Event) => Jackpot.preventDefault(event));\r\n                    Jackpot.HistoryDialogs[i]\r\n                        .getRoot()\r\n                        .addEventListener(\"touchstart\", (event: Event) => Jackpot.preventDefault(event));\r\n                }\r\n            } else {\r\n                Jackpot.Counters[i].getRoot().addEventListener(\"click\", Jackpot.showHistoryDialog.bind(this, i));\r\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseover\", Jackpot.showHistoryDialog.bind(this, i));\r\n                Jackpot.Counters[i].getRoot().addEventListener(\"mouseout\", Jackpot.hideHistoryDialog.bind(this, i));\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLE HISTORY DIALOGS\r\n    //******************************************************************************************************************\r\n\r\n    public static closeAllHistoryDialogs(): void {\r\n        if (Jackpot.WidgetRoot) {\r\n            Jackpot.WidgetRoot.removeEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n            for (let i = 0; i < Jackpot.HistoryDialogs.length; i++) {\r\n                Jackpot.HistoryDialogs[i].closeDialog();\r\n            }\r\n        }\r\n    }\r\n\r\n    private static showHistoryDialog(index: number): void {\r\n        this.closeAllHistoryDialogs();\r\n\r\n        if (Jackpot.HistoryDialogs[index]) {\r\n            if (window[\"CHANNEL\"] === \"mobile\") {\r\n                Jackpot.WidgetRoot.addEventListener(\"click\", Jackpot.closeAllHistoryDialogs);\r\n            }\r\n\r\n            Jackpot.TouchEvent = Jackpot.hideHistoryDialog.bind(this, index);\r\n            document.addEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n\r\n            Jackpot.HistoryDialogs[index].openDialog();\r\n        }\r\n    }\r\n\r\n    private static toggleHistoryDialog(event: Event, index: number): void {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n\r\n        if (Jackpot.HistoryDialogs[index] && !Jackpot.HistoryDialogs[index].isOpen()) {\r\n            this.showHistoryDialog(index);\r\n        } else {\r\n            this.closeAllHistoryDialogs();\r\n        }\r\n    }\r\n\r\n    private static hideHistoryDialog(index: number): void {\r\n        if (Jackpot.HistoryDialogs[index]) {\r\n            Jackpot.HistoryDialogs[index].closeDialog();\r\n            document.removeEventListener(\"touchstart\", Jackpot.TouchEvent);\r\n        }\r\n    }\r\n\r\n    private static preventDefault(event: Event): void {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  MINI GAME\r\n    //******************************************************************************************************************\r\n\r\n    /**\r\n     * Send minigame init request\r\n     * @param autostart - start minigame after init request past\r\n     * @param callback - if init request is ok and autoplay mode is true, run callback (disable base ui)\r\n     */\r\n    public static initMiniGame(autostart: boolean, callback: () => void): void {\r\n        if (!Jackpot.Game) {\r\n            Jackpot.createBonusGame();\r\n        }\r\n\r\n        Jackpot.Game.init(autostart, callback);\r\n    }\r\n\r\n    public static startMiniGame(): void {\r\n        if (!Jackpot.Game.hasStartedGame()) {\r\n            Jackpot.Game.start();\r\n        }\r\n    }\r\n\r\n    public static hasActiveGame(): boolean {\r\n        if (!Jackpot.Game) {\r\n            return false;\r\n        }\r\n\r\n        return Jackpot.Game.hasStartedGame();\r\n    }\r\n\r\n    public static hasInitializedGame(): boolean {\r\n        return Jackpot.Game && Jackpot.Game.hasInitializedGame();\r\n    }\r\n\r\n    /**\r\n     * Return if the mini game is prepared and ready to play.\r\n     */\r\n    public static hasMiniGame(): boolean {\r\n        //check already running game\r\n        if (Jackpot.Game && Jackpot.Game.hasStartedGame()) {\r\n            return true;\r\n        }\r\n\r\n        //check counters\r\n        if (Jackpot.countersInError()) {\r\n            return false;\r\n        }\r\n\r\n        if (Jackpot.Game && Jackpot.Game.hasInitializedGame()) {\r\n            return true;\r\n        }\r\n\r\n        return GameManager.gameResponse[\"progressiveBonus\"] && GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n    }\r\n\r\n    public static disableMiniGameAutostart(): void {\r\n        if (Jackpot.Game) {\r\n            Jackpot.Game.disableAutostart();\r\n        }\r\n    }\r\n\r\n    public static waitForMiniGameInitialization(): boolean {\r\n        return (\r\n            AppContext &&\r\n            (AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" ||\r\n                AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"AfterGameRound\")\r\n        );\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HELPER\r\n    //******************************************************************************************************************\r\n\r\n    private static createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = document.createElement(tag);\r\n        elem.setAttribute(\"class\", className);\r\n\r\n        if (rootElem) {\r\n            rootElem.appendChild(elem);\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    private static countersInError(): boolean {\r\n        if (Jackpot.Counters && Jackpot.Counters.length > 0) {\r\n            for (let i = 0; i < Jackpot.CountersCount; i++) {\r\n                if (Jackpot.Counters[i].hasError()) {\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private static getCustomContent(name: string, success: Function, error: Function): void {\r\n        if (AppContext.gameConfiguration == null) {\r\n            if (error) error();\r\n            return;\r\n        }\r\n\r\n        if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n            if (error) error();\r\n            return;\r\n        }\r\n\r\n        let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n        if (theme == \"\") {\r\n            if (AppContext.gameConfiguration.UseJackpotLocalization) {\r\n                theme = Jackpot.JackpotTheme;\r\n            } else {\r\n                if (error) error();\r\n                return;\r\n            }\r\n        }\r\n\r\n        const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\r\n        const spbFolder = \"SynotProgressiveBonus\";\r\n        const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}`;\r\n        let img = document.createElement(\"img\");\r\n        img.setAttribute(\"src\", url);\r\n\r\n        img.addEventListener(\"load\", (ev) => {\r\n            if (success) success(url);\r\n        });\r\n        img.addEventListener(\"error\", (ev) => {\r\n            if (error) error();\r\n        });\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/Jackpot.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\r\nimport { TweenLite } from \"gsap\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { Tweens } from \"../../../Components/Effects/Tweens\";\r\n\r\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\r\n\r\nexport class JackpotCounter {\r\n    //******************************************************************************************************************\r\n    //  SEETTINGS\r\n    //******************************************************************************************************************\r\n\r\n    private static LeadingZeroLetter: string = \" \";\r\n\r\n    private static WinAnimDuration: number = 240; //in frames\r\n\r\n    private static WinFromMinigameAnimDuration: number = 540; //in frames\r\n\r\n    private static Length: number = 10;\r\n\r\n    private static DecimalPlaces: number = 2;\r\n\r\n    private static DigitAnimDuration: number = 0.1; //in seconds\r\n\r\n    //could be in conflict with priority assign (if reset animations haven't been finished)\r\n    private static MinResetAnimCount: number = 15;\r\n\r\n    private static UseThousandsSeparator: boolean = true;\r\n\r\n    private static MaxNextTimeDiff: number = 2 * 60; //in seconds\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected root: HTMLElement;\r\n\r\n    protected currentData: IProgressiveBonusLevel;\r\n\r\n    protected currentCounterValue: number;\r\n\r\n    protected previousCounterValue: number;\r\n\r\n    protected nextDate: number;\r\n\r\n    protected nextValue: number;\r\n\r\n    protected previousValue: number;\r\n\r\n    protected lastWinValue: number;\r\n\r\n    protected lastWinCount: number;\r\n\r\n    protected overridedLastWinValue: number;\r\n\r\n    protected serverTimeOffset: number;\r\n\r\n    protected resetAnimCount: number;\r\n\r\n    protected isCounting: boolean;\r\n\r\n    protected inError: boolean;\r\n\r\n    protected winFromMinigame: boolean;\r\n\r\n    protected winAnimationDelay: FrameTimerEventEmitter;\r\n\r\n    protected mainTween: TweenLite;\r\n\r\n    protected digitTween: TweenLite;\r\n\r\n    protected decimalDot: HTMLElement;\r\n\r\n    protected idleValue: number;\r\n\r\n    protected lastUpdateTime: number;\r\n\r\n    protected resetCallback: Function;\r\n\r\n    protected digits: {\r\n        from: HTMLElement;\r\n        to: HTMLElement;\r\n    }[];\r\n\r\n    protected settings: {\r\n        width: number;\r\n        height: number;\r\n    };\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(index: number, holder: HTMLElement, resetCallback: Function) {\r\n        if (AppContext.gameConfiguration != null) {\r\n            JackpotCounter.DecimalPlaces = AppContext.gameConfiguration.ShowDecimalPlaces;\r\n        }\r\n\r\n        this.root = this.createBaseLayout(index);\r\n        holder.appendChild(this.root);\r\n        this.createDigits();\r\n        this.createDecimalPoint();\r\n\r\n        this.currentCounterValue = 0;\r\n        this.previousCounterValue = 0;\r\n        this.lastWinValue = -1;\r\n        this.lastWinCount = -1;\r\n        this.overridedLastWinValue = -1;\r\n\r\n        this.winAnimationDelay = CreateFrameTimer(\"winAnimationDelayTimer\");\r\n        this.winAnimationDelay.on(FrameTimerEvents.Complete, this.winAnimationFinished.bind(this));\r\n\r\n        this.mainTween = null;\r\n        this.digitTween = null;\r\n        this.winFromMinigame = false;\r\n\r\n        this.lastUpdateTime = Date.now();\r\n        this.resetCallback = resetCallback;\r\n\r\n        this.reset();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE\r\n    //******************************************************************************************************************\r\n\r\n    protected createBaseLayout(index: number): HTMLElement {\r\n        let root = this.createElement(\"div\", \"jackpotCounter l-\" + index);\r\n\r\n        //create childs\r\n        this.createElement(\"div\", \"jackpotFrame\", root);\r\n        let level = this.createElement(\"div\", \"jackpotLevel\", root);\r\n        this.createElement(\"div\", \"jackpotIconError\", level);\r\n\r\n        this.createElement(\"div\", \"jackpotDigitsHolder\", root);\r\n        this.createElement(\"div\", \"jackpotGradient\", root);\r\n        let currency = this.createElement(\"div\", \"jackpotCurrency\", root);\r\n\r\n        //create currency letters\r\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n        this.createElement(\"div\", \"jackpotCurrencyLetter\", currency);\r\n\r\n        return root;\r\n    }\r\n\r\n    public createCurrency(currency: string): void {\r\n        if (!StringUtils.isNullOrEmpty(currency)) {\r\n            let jackpotCurrencyLetters = this.root.getElementsByClassName(\"jackpotCurrencyLetter\");\r\n\r\n            for (let i = 0; i < jackpotCurrencyLetters.length; i++) {\r\n                if (currency.length > i) {\r\n                    jackpotCurrencyLetters[i].textContent = currency.charAt(i);\r\n                }\r\n            }\r\n\r\n            jackpotCurrencyLetters[0].parentElement.classList.add(\"ln-\" + currency.length);\r\n        }\r\n    }\r\n\r\n    protected createDigits(): void {\r\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n        const digitsArray: Array<HTMLElement> = [];\r\n        this.digits = [];\r\n\r\n        let digit: HTMLElement;\r\n        for (let i = 0; i < JackpotCounter.Length; i++) {\r\n            let className =\r\n                i == JackpotCounter.Length - JackpotCounter.DecimalPlaces ? \"digits decimalOffset\" : \"digits\";\r\n            digit = this.createElement(\"div\", className, digitsHolder);\r\n            let from = this.createElement(\"div\", \"digit\", digit);\r\n            let to = this.createElement(\"div\", \"digit\", digit);\r\n\r\n            digitsArray.push(digit);\r\n            this.digits.push({ from: from, to: to });\r\n        }\r\n\r\n        if (JackpotCounter.UseThousandsSeparator) {\r\n            digitsHolder.classList.add(\"thousandsFormat\");\r\n\r\n            for (let i = 0; i < digitsArray.length; i++) {\r\n                const index = digitsArray.length - 1 - i;\r\n                const hasThousandsOffset =\r\n                    index > 0 && i > JackpotCounter.DecimalPlaces && (i + 1 - JackpotCounter.DecimalPlaces) % 3 == 0;\r\n\r\n                if (hasThousandsOffset && digitsArray[index] != null) {\r\n                    digitsArray[index].classList.add(\"thousandsOffset\");\r\n                }\r\n            }\r\n        }\r\n\r\n        //save digit height/width\r\n        this.settings = {\r\n            width: parseInt(window.getComputedStyle(digit).width),\r\n            height: parseInt(window.getComputedStyle(digit).height),\r\n        };\r\n    }\r\n\r\n    protected createDecimalPoint() {\r\n        let digitsHolder = <HTMLElement>this.root.getElementsByClassName(\"jackpotDigitsHolder\")[0];\r\n\r\n        if (JackpotCounter.DecimalPlaces > 0) {\r\n            this.decimalDot = this.createElement(\"div\", \"digit nDot\", digitsHolder);\r\n            this.decimalDot.style.right = JackpotCounter.DecimalPlaces * this.settings.width + \"px\";\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INIT\r\n    //******************************************************************************************************************\r\n\r\n    public initialize(data: IProgressiveBonusLevel, serverTimestamp: string): void {\r\n        this.assign(data, serverTimestamp);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ASSIGN\r\n    //******************************************************************************************************************\r\n\r\n    public assign(\r\n        data: IProgressiveBonusLevel,\r\n        serverTimestamp: string,\r\n        priority: boolean = false,\r\n        overridedLastWinValue: number = -1,\r\n        winFromMinigame: boolean = false,\r\n    ): void {\r\n        this.currentData = data;\r\n\r\n        this.nextValue = this.normalizeValue(data.nextValue);\r\n        this.nextDate = Date.now() + (new Date(data.nextTimestamp).getTime() - new Date(serverTimestamp).getTime());\r\n        this.previousValue = this.normalizeValue(data.previousValue);\r\n        this.winFromMinigame = winFromMinigame;\r\n\r\n        const oldValuesReset = Date.now() - this.lastUpdateTime > JackpotCounter.MaxNextTimeDiff * 1000;\r\n\r\n        if (overridedLastWinValue > -1) {\r\n            this.overridedLastWinValue = this.normalizeValue(overridedLastWinValue);\r\n        }\r\n\r\n        //if current animated values are too old, force reset animation on all counters\r\n        if (oldValuesReset && this.resetCallback != null) {\r\n            this.resetCallback();\r\n            return;\r\n        }\r\n\r\n        //reset counter if it's in error\r\n        if (this.inError) {\r\n            this.removeError();\r\n            this.reset();\r\n            return;\r\n        }\r\n\r\n        if (!this.isCounting || priority) {\r\n            this.refresh();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ERROR\r\n    //******************************************************************************************************************\r\n\r\n    public error(useResetAnim: boolean = false): void {\r\n        if (!this.inError) {\r\n            this.inError = true;\r\n            this.isCounting = false;\r\n\r\n            if (useResetAnim) {\r\n                this.resetMainTween();\r\n                this.resetDigitTween(true);\r\n                this.errorResetAnim();\r\n                return;\r\n            }\r\n\r\n            if (this.decimalDot) {\r\n                this.decimalDot.style.display = \"none\";\r\n            }\r\n\r\n            this.root.classList.add(\"jackpotError\");\r\n            const oldValue = this.formatValue(\r\n                this.previousCounterValue > 0 ? this.previousCounterValue.toString() : \"\",\r\n                true,\r\n            );\r\n            const newValue = this.formatValue(\"OFFLINE\", true);\r\n\r\n            this.resetDigitTween(true);\r\n            this.animateDigits(\r\n                oldValue,\r\n                newValue,\r\n                false,\r\n                false,\r\n                JackpotCounter.DigitAnimDuration * 2,\r\n                0,\r\n                \"linear\",\r\n                false,\r\n                null,\r\n            );\r\n        }\r\n    }\r\n\r\n    private errorResetAnim(): void {\r\n        this.root.classList.add(\"jackpotExpired\");\r\n    }\r\n\r\n    private checkError(): boolean {\r\n        if (this.inError) {\r\n            this.resetMainTween();\r\n            this.resetDigitTween();\r\n            this.isCounting = false;\r\n\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private removeError(): void {\r\n        if (this.inError) {\r\n            this.inError = false;\r\n\r\n            this.root.classList.remove(\"jackpotError\");\r\n            if (this.decimalDot) {\r\n                this.decimalDot.style.display = \"block\";\r\n            }\r\n        }\r\n    }\r\n\r\n    public hasError(): boolean {\r\n        return this.inError;\r\n    }\r\n\r\n    public refreshWithReset(): void {\r\n        this.hasWin(); //update last wins to not showing old wins\r\n        this.root.classList.remove(\"jackpotWin\");\r\n        this.winAnimationDelay.stop();\r\n        this.resetMainTween();\r\n        this.resetDigitTween();\r\n        this.resetDigitsTween();\r\n        this.isCounting = false;\r\n        this.removeError();\r\n        this.reset(JackpotCounter.MinResetAnimCount - 3);\r\n    }\r\n\r\n    private resetDigitsTween(): void {\r\n        for (let i = 0; i < this.digits.length; i++) {\r\n            TweenLite.killTweensOf(this.digits[i].to);\r\n            TweenLite.killTweensOf(this.digits[i].from);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  COUNTING\r\n    //******************************************************************************************************************\r\n\r\n    protected animateDigits(\r\n        oldValue: string,\r\n        newValue: string,\r\n        useBitmap: boolean,\r\n        checkFirstDiff: boolean,\r\n        duration: number,\r\n        delay: number,\r\n        ease: string,\r\n        shuffle: boolean,\r\n        callback: () => void,\r\n    ): void {\r\n        let firstDigitIndex = 0;\r\n        if (checkFirstDiff) {\r\n            for (let i = 0; i < JackpotCounter.Length; i++) {\r\n                const oldDigit = oldValue.charAt(i);\r\n                const newDigit = newValue.charAt(i);\r\n\r\n                if (oldDigit !== newDigit) {\r\n                    firstDigitIndex = i;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n\r\n        for (let i = firstDigitIndex; i < JackpotCounter.Length; i++) {\r\n            const oldDigit = oldValue.charAt(i);\r\n            const newDigit = newValue.charAt(i);\r\n\r\n            this.animateDigit(\r\n                i,\r\n                oldDigit,\r\n                newDigit,\r\n                duration,\r\n                delay,\r\n                ease,\r\n                useBitmap,\r\n                shuffle ? (i % 2 === 0 ? 1 : -1) : 1,\r\n                i === JackpotCounter.Length - 1 ? callback : null,\r\n            );\r\n        }\r\n    }\r\n\r\n    protected animateDigit(\r\n        index: number,\r\n        fromValue: string,\r\n        toValue: string,\r\n        duration: number,\r\n        delay: number,\r\n        ease: string,\r\n        useBitmap: boolean,\r\n        direction: number,\r\n        callback: () => void,\r\n    ): void {\r\n        const from = this.digits[index].from;\r\n        this.setTransformY(from, 0, delay);\r\n        this.setDigitValue(from, fromValue, useBitmap, true);\r\n        TweenLite.fromTo(\r\n            from,\r\n            duration,\r\n            { y: 0 },\r\n            { y: this.settings.height * direction * -1, ease: ease, delay: delay },\r\n        );\r\n\r\n        const to = this.digits[index].to;\r\n        this.setTransformY(to, this.settings.height * direction, delay);\r\n        this.setDigitValue(to, toValue, useBitmap);\r\n        TweenLite.killTweensOf(to); //prevent tween from bad finishing, progress stop at 0.8 and don't emit onComplete\r\n        let tween = TweenLite.fromTo(\r\n            to,\r\n            duration,\r\n            { y: this.settings.height * direction },\r\n            { y: 0, ease: ease, delay: delay },\r\n        );\r\n\r\n        if (!Utils.isNullOrUndefined(callback)) {\r\n            this.digitTween = tween;\r\n            this.digitTween.eventCallback(\"onComplete\", callback, [], this);\r\n        }\r\n    }\r\n\r\n    protected setDigitValue(elem: HTMLElement, value: string, useBitmap: boolean, fromValue: boolean = false): void {\r\n        if (fromValue) {\r\n            if (useBitmap && elem.classList.contains(\"letter\")) {\r\n                useBitmap = false;\r\n            } else if (!useBitmap && !elem.classList.contains(\"letter\")) {\r\n                useBitmap = true;\r\n            }\r\n        }\r\n\r\n        if (value == null || value === JackpotCounter.LeadingZeroLetter) {\r\n            elem.className = \"digit leadingZero\";\r\n        } else {\r\n            if (!useBitmap) {\r\n                elem.textContent = value;\r\n                elem.className = \"digit letter\";\r\n            } else {\r\n                elem.textContent = \"\";\r\n                elem.className = \"digit n\" + value;\r\n            }\r\n        }\r\n    }\r\n\r\n    protected setTransformY(elem: HTMLElement, y: number, delay: number): void {\r\n        if (delay > 0) {\r\n            elem.style.transform = \"transform3d(0, \" + y + \"px, 0)\";\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REFRESH & RESET\r\n    //******************************************************************************************************************\r\n\r\n    private refresh() {\r\n        if (this.checkError()) {\r\n            return;\r\n        }\r\n\r\n        //if there where win\r\n        if (this.hasWin()) {\r\n            this.isCounting = true;\r\n            this.initWinAnimation();\r\n            return;\r\n        }\r\n\r\n        //if there is no new nextValue\r\n        if (this.currentCounterValue == this.nextValue) {\r\n            this.resetDigitTween();\r\n            this.resetDigitsToBasePosition();\r\n            this.lastUpdateTime = Date.now();\r\n\r\n            //run empty tween do handle idle state\r\n            const availableTime = (this.nextDate - Date.now()) * 0.001;\r\n            if (availableTime > 0) {\r\n                this.resetMainTween();\r\n                this.mainTween = TweenLite.fromTo(\r\n                    this,\r\n                    availableTime,\r\n                    { idleValue: 0 },\r\n                    { idleValue: 100, ease: \"linear\" },\r\n                );\r\n                this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n            } else {\r\n                this.isCounting = false;\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        //if new value is lower then current value\r\n        if (this.currentCounterValue > this.nextValue) {\r\n            this.isCounting = false;\r\n            return;\r\n        }\r\n\r\n        const availableTime = (this.nextDate - Date.now()) * 0.001;\r\n        this.resetMainTween();\r\n        this.mainTween = TweenLite.fromTo(\r\n            this,\r\n            availableTime,\r\n            { currentCounterValue: this.currentCounterValue },\r\n            { currentCounterValue: this.nextValue, ease: \"linear\", roundProps: \"currentCounterValue\" },\r\n        );\r\n        this.mainTween.eventCallback(\"onComplete\", this.refresh, [], this);\r\n        this.mainTween.eventCallback(\"onUpdate\", this.onRefreshTweenUpdate, [], this);\r\n\r\n        this.isCounting = true;\r\n    }\r\n\r\n    private onRefreshTweenUpdate(): void {\r\n        if (this.digitTween == null) {\r\n            this.refreshCounter();\r\n        }\r\n    }\r\n\r\n    private refreshCounter(): void {\r\n        if (this.inError) {\r\n            this.resetDigitTween();\r\n            return;\r\n        }\r\n\r\n        if (this.previousCounterValue == this.currentCounterValue) {\r\n            this.resetDigitTween();\r\n            return;\r\n        }\r\n\r\n        const oldValue = this.formatValue(this.previousCounterValue.toString(), true);\r\n        const newValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\r\n        this.lastUpdateTime = Date.now();\r\n\r\n        this.animateDigits(\r\n            oldValue,\r\n            newValue,\r\n            true,\r\n            true,\r\n            JackpotCounter.DigitAnimDuration * 2,\r\n            0,\r\n            \"linear\",\r\n            false,\r\n            this.refreshCounter,\r\n        );\r\n        this.previousCounterValue = this.currentCounterValue;\r\n    }\r\n\r\n    private reset(resetAnimCount: number = 0): void {\r\n        this.resetAnimCount = resetAnimCount;\r\n        this.isCounting = true;\r\n\r\n        this.resetCounter();\r\n    }\r\n\r\n    private resetCounter(): void {\r\n        if (this.checkError()) {\r\n            return;\r\n        }\r\n\r\n        if (this.resetAnimCount >= JackpotCounter.MinResetAnimCount - 1 && this.currentData != null) {\r\n            //if we have win right after reset\r\n            if (this.hasWin()) {\r\n                this.resetDigitTween(); //we need to reset digit tween to allow win anim start during reset anim\r\n                this.isCounting = true;\r\n                this.initWinAnimation();\r\n                return;\r\n            }\r\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), false);\r\n            const newValue = this.formatValue(this.previousValue.toString(), true);\r\n\r\n            this.currentCounterValue = this.previousValue;\r\n            this.previousCounterValue = this.previousValue;\r\n\r\n            this.animateDigits(\r\n                oldValue,\r\n                newValue,\r\n                true,\r\n                false,\r\n                JackpotCounter.DigitAnimDuration * 10,\r\n                0,\r\n                \"Back.easeOut\",\r\n                true,\r\n                this.resetFinished,\r\n            );\r\n        } else {\r\n            this.resetAnimCount++;\r\n            const random = Math.random();\r\n            const length = Math.pow(10, JackpotCounter.Length);\r\n            const value = Math.round(random * length);\r\n\r\n            const oldValue = this.formatValue(\r\n                this.currentCounterValue > 0 ? this.currentCounterValue.toString() : \"\",\r\n                false,\r\n            );\r\n            const newValue = this.formatValue(value.toString(), false);\r\n\r\n            this.animateDigits(\r\n                oldValue,\r\n                newValue,\r\n                true,\r\n                false,\r\n                JackpotCounter.DigitAnimDuration,\r\n                0,\r\n                \"linear\",\r\n                true,\r\n                this.resetCounter,\r\n            );\r\n            this.currentCounterValue = value;\r\n        }\r\n    }\r\n\r\n    private resetFinished(): void {\r\n        this.lastUpdateTime = Date.now();\r\n        this.resetDigitTween();\r\n        this.isCounting = false;\r\n        this.refresh();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  WIN\r\n    //******************************************************************************************************************\r\n\r\n    private hasWin(): boolean {\r\n        let result = false;\r\n        if (this.currentData != null && this.currentData.lastWinAmount != null) {\r\n            const currentLastWin =\r\n                this.overridedLastWinValue > -1\r\n                    ? this.overridedLastWinValue\r\n                    : this.normalizeValue(this.currentData.lastWinAmount);\r\n            const currentWinCount = this.currentData.winCount; //could be undefined during minigame spin\r\n\r\n            if (this.lastWinValue > -1) {\r\n                result = this.lastWinValue != currentLastWin;\r\n\r\n                //second check if new win amount is same like last one\r\n                //check only if it is not win from minigame (it has its own override)\r\n                if (!result && this.lastWinCount > -1 && currentWinCount > -1 && !this.winFromMinigame) {\r\n                    result = this.lastWinCount != currentWinCount;\r\n                }\r\n            }\r\n\r\n            this.lastWinCount = currentWinCount;\r\n            this.lastWinValue = currentLastWin;\r\n            this.overridedLastWinValue = -1;\r\n        }\r\n\r\n        return result || this.winFromMinigame;\r\n    }\r\n\r\n    private initWinAnimation(): void {\r\n        this.resetMainTween();\r\n\r\n        if (this.digitTween != null) {\r\n            this.digitTween.eventCallback(\"onComplete\", this.startWinAnimation, [], this);\r\n        } else {\r\n            this.startWinAnimation();\r\n        }\r\n    }\r\n\r\n    private startWinAnimation(): void {\r\n        if (this.currentCounterValue != this.lastWinValue) {\r\n            const oldValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n            const newValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\r\n            this.animateDigits(\r\n                oldValue,\r\n                newValue,\r\n                true,\r\n                true,\r\n                JackpotCounter.DigitAnimDuration * 2,\r\n                0,\r\n                \"linear\",\r\n                false,\r\n                this.showWinAnimation,\r\n            );\r\n            this.previousCounterValue = this.currentCounterValue;\r\n        } else {\r\n            this.showWinAnimation();\r\n        }\r\n\r\n        this.winAnimationDelay.start(\r\n            this.winFromMinigame ? JackpotCounter.WinFromMinigameAnimDuration : JackpotCounter.WinAnimDuration,\r\n        );\r\n    }\r\n\r\n    private showWinAnimation(): void {\r\n        this.forceWinValue();\r\n        this.root.classList.add(\"jackpotWin\");\r\n\r\n        if (this.winFromMinigame) {\r\n            this.root.classList.add(\"fromMinigame\");\r\n        }\r\n    }\r\n\r\n    private winAnimationFinished(): void {\r\n        this.winFromMinigame = false;\r\n        this.root.classList.remove(\"jackpotWin\", \"fromMinigame\");\r\n        this.reset();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HELPER\r\n    //******************************************************************************************************************\r\n\r\n    public getRoot(): HTMLElement {\r\n        return this.root;\r\n    }\r\n\r\n    public getHeight(): number {\r\n        if (this.root.parentElement != null) {\r\n            this.root.parentElement.classList.add(\"baseCounterHeight\");\r\n            this.root.parentElement.offsetWidth;\r\n\r\n            let height = parseInt(window.getComputedStyle(this.root.parentElement).height);\r\n            this.root.parentElement.classList.remove(\"baseCounterHeight\");\r\n\r\n            return height;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = document.createElement(tag);\r\n        elem.setAttribute(\"class\", className);\r\n\r\n        if (rootElem) {\r\n            rootElem.appendChild(elem);\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    protected normalizeValue(value: number): number {\r\n        let formattedValue = Languages.formatText(Languages.FormatMoney, value.toString());\r\n        formattedValue = formattedValue.replace(\".\", \"\");\r\n\r\n        value = parseInt(formattedValue);\r\n\r\n        if (value >= Math.pow(10, JackpotCounter.Length)) {\r\n            let normalizedValue = \"\";\r\n\r\n            for (let i = 0; i < JackpotCounter.Length; i++) {\r\n                normalizedValue = `9${normalizedValue}`;\r\n            }\r\n\r\n            return parseInt(normalizedValue);\r\n        }\r\n\r\n        return value;\r\n    }\r\n\r\n    protected formatValue(formattedValue: string, leading: boolean): string {\r\n        if (formattedValue.length > JackpotCounter.Length) {\r\n            formattedValue = formattedValue.substr(formattedValue.length - JackpotCounter.Length);\r\n        } else {\r\n            while (formattedValue.length < JackpotCounter.DecimalPlaces + 1) {\r\n                formattedValue = `0${formattedValue}`;\r\n            }\r\n\r\n            while (formattedValue.length < JackpotCounter.Length) {\r\n                formattedValue = `${leading ? JackpotCounter.LeadingZeroLetter : \"0\"}${formattedValue}`;\r\n            }\r\n        }\r\n\r\n        return formattedValue;\r\n    }\r\n\r\n    protected resetMainTween(): void {\r\n        if (this.mainTween != null) {\r\n            this.mainTween.kill();\r\n            this.mainTween.eventCallback(\"onComplete\", null);\r\n            this.mainTween.eventCallback(\"onUpdate\", null);\r\n            this.mainTween = null;\r\n        }\r\n    }\r\n\r\n    protected resetDigitTween(onlyCallback: boolean = false): void {\r\n        if (this.digitTween != null) {\r\n            this.digitTween.eventCallback(\"onComplete\", null);\r\n\r\n            if (!onlyCallback) {\r\n                this.digitTween.kill();\r\n            }\r\n\r\n            this.digitTween = null;\r\n        }\r\n    }\r\n\r\n    protected resetDigitsToBasePosition(): void {\r\n        const currentValue = this.formatValue(this.currentCounterValue.toString(), true);\r\n\r\n        for (let i = 0; i < this.digits.length; i++) {\r\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\r\n            this.digits[i].from.setAttribute(\r\n                \"style\",\r\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\r\n            );\r\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n        }\r\n    }\r\n\r\n    protected forceWinValue(): void {\r\n        const currentValue = this.formatValue(this.lastWinValue.toString(), true);\r\n\r\n        for (let i = 0; i < this.digits.length; i++) {\r\n            this.setDigitValue(this.digits[i].to, currentValue.charAt(i), true);\r\n\r\n            this.digits[i].from.setAttribute(\r\n                \"style\",\r\n                \"transform: matrix(1, 0, 0, 1, 0, \" + this.settings.height * -1 + \");\",\r\n            );\r\n            this.digits[i].to.setAttribute(\"style\", \"transform: matrix(1, 0, 0, 1, 0, 0);\");\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotCounter.ts\n **/","import { NumberUtils, Logger } from \"neo-common\";\r\nimport { Strings } from \"../../Common/Strings\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\n\r\n/**\r\n * Working with languages and texts. Get langugages based on rid, format and filter texts.\r\n * @class Languages\r\n */\r\nexport class Languages {\r\n    // formats static variables\r\n    static FormatMoney: string = \"MONEY\";\r\n\r\n    // filters static variables\r\n    static FilterNoZero: string = \"NO_ZERO\";\r\n\r\n    /**\r\n     * Return text based on rid.\r\n     * @method getRid\r\n     * @param rid string\r\n     * @param ...value Array<string>\r\n     * @return string\r\n     */\r\n    static getRid(rid: string, ...value: Array<string>): string {\r\n        if (value != null && value.length > 0) {\r\n            return Strings.getWithValues(rid, ...value);\r\n        } else {\r\n            return Strings.get(rid);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Format text based in ridType.\r\n     * @method formatText\r\n     * @param ridType string\r\n     * @param text string\r\n     * @return string\r\n     */\r\n    static formatText(ridType: string, text: string): string {\r\n        switch (ridType) {\r\n            case this.FormatMoney:\r\n                return NumberUtils.valueToNumber(text, AppContext.gameConfiguration.ShowDecimalPlaces);\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING unknow RidType: \" + ridType);\r\n                }\r\n        }\r\n        return text;\r\n    }\r\n\r\n    /**\r\n     * Filter text based on RidFilter.\r\n     * @method filtertext\r\n     * @param ridFilter string\r\n     * @param text string\r\n     * @return string\r\n     */\r\n    static filterText(ridFilter: string, text: string): string {\r\n        switch (ridFilter) {\r\n            case this.FilterNoZero:\r\n                if (parseFloat(text) <= 0) {\r\n                    return \"\";\r\n                } else {\r\n                    return text;\r\n                }\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING unknow RidFilter: \" + ridFilter);\r\n                }\r\n        }\r\n        return text;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string which will be traced to browser console.\r\n     * @return void\r\n     */\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Languages\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Languages.ts\n **/","import { DateUtils, StringUtils, CommonTypes } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { JackpotData } from \"../Datas/JackpotData\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { Jackpot } from \"../Bonuses/Jackpot\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\n\r\ntype IProgressiveBonusLevel = Communication.Game.IProgressiveBonusLevel;\r\n\r\nexport class JackpotHistoryDialog {\r\n    //******************************************************************************************************************\r\n    //  SEETTINGS\r\n    //******************************************************************************************************************\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected root: HTMLElement;\r\n\r\n    protected currency: string;\r\n\r\n    protected historyDataElements: { [dataId: string]: HTMLElement };\r\n\r\n    protected initialized: boolean;\r\n\r\n    protected lastData: IProgressiveBonusLevel;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(index: number, holder: HTMLElement) {\r\n        this.root = this.createBaseLayout(index);\r\n        this.currency = \"\";\r\n        this.historyDataElements = {};\r\n\r\n        holder.appendChild(this.root);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INIT\r\n    //******************************************************************************************************************\r\n\r\n    public initialize(initData: IProgressiveBonusLevel): void {\r\n        this.createDataSections();\r\n        this.initialized = true;\r\n\r\n        if (initData) {\r\n            this.assign(initData);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  LAYOUT\r\n    //******************************************************************************************************************\r\n\r\n    protected createBaseLayout(index: number): HTMLElement {\r\n        return this.createElement(\"div\", \"jackpotHistoryDialog _disabled l-\" + index);\r\n    }\r\n\r\n    protected createDataSections(): void {\r\n        if (this.root) {\r\n            let section: HTMLElement;\r\n            let dataHolder: HTMLElement;\r\n\r\n            //close btn only in mobile\r\n            // if (window[\"CHANNEL\"] === 'mobile') {\r\n            let closeBtn = this.createElement(\"div\", \"jackpotCloseBtn\", this.root);\r\n            closeBtn.addEventListener(\"touchstart\", (e: Event) => {\r\n                e.preventDefault();\r\n                e.stopPropagation();\r\n                Jackpot.closeAllHistoryDialogs();\r\n            });\r\n            closeBtn.addEventListener(\"click\", () => {\r\n                Jackpot.closeAllHistoryDialogs();\r\n            });\r\n            // }\r\n\r\n            //DataCode\r\n            section = this.createElement(\"div\", \"jackpotHistorySection\", this.root);\r\n            this.createElement(\"div\", \"jackpotLevel\", section);\r\n            this.createDataElement(\"div\", \"jackpotTitle\", JackpotData.DataCode, section);\r\n\r\n            //DataHighestWinAmount\r\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n            this.createTextElement(\r\n                \"div\",\r\n                \"jackpotHistoryDataLabel\",\r\n                Languages.getRid(\"PB_HISTORYDIALOG_HIGHEST_WIN\"),\r\n                dataHolder,\r\n            );\r\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataHighestWinDate, dataHolder);\r\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataHighestWinAmount, section);\r\n\r\n            this.assingData(JackpotData.DataHighestWinDate, \"-\");\r\n            this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\r\n            //DataWinCount\r\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n            this.createTextElement(\r\n                \"div\",\r\n                \"jackpotHistoryDataLabel\",\r\n                Languages.getRid(\"PB_HISTORYDIALOG_NUM_WINS\"),\r\n                dataHolder,\r\n            );\r\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataWinCount, dataHolder);\r\n\r\n            this.assingData(JackpotData.DataWinCount, \"-\");\r\n\r\n            //DataLastWinAmount\r\n            section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryData\", this.root);\r\n            dataHolder = this.createElement(\"div\", \"jackpotHistoryDataHolder\", section);\r\n            this.createTextElement(\r\n                \"div\",\r\n                \"jackpotHistoryDataLabel\",\r\n                Languages.getRid(\"PB_HISTORYDIALOG_LAST_WIN\"),\r\n                dataHolder,\r\n            );\r\n            this.createDataElement(\"div\", \"jackpotHistoryDataValue\", JackpotData.DataLastWinDate, dataHolder);\r\n            this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataLastWinAmount, section);\r\n\r\n            this.assingData(JackpotData.DataLastWinDate, \"-\");\r\n            this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n\r\n            this.showWins(false);\r\n        }\r\n    }\r\n\r\n    public updateDataWithCurrency(): void {\r\n        if (this.lastData != null) {\r\n            this.assign(this.lastData);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ERRORS\r\n    //******************************************************************************************************************\r\n\r\n    public error(useResetAnim: boolean = false): void {\r\n        if (useResetAnim) {\r\n            this.root.classList.add(\"jackpotExpired\");\r\n        } else {\r\n            if (this.initialized) {\r\n                this.showWins(false);\r\n\r\n                this.assingData(JackpotData.DataLastWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n                this.assingData(JackpotData.DataLastWinDate, \"-\");\r\n                this.assingData(JackpotData.DataHighestWinAmount, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n                this.assingData(JackpotData.DataHighestWinDate, \"-\");\r\n                this.assingData(JackpotData.DataWinCount, \"-\");\r\n            } else {\r\n                this.initialize(null);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ASSIGN\r\n    //******************************************************************************************************************\r\n\r\n    public assign(data: IProgressiveBonusLevel): void {\r\n        this.lastData = data;\r\n\r\n        if (this.initialized) {\r\n            this.assingData(JackpotData.DataCode, data.code);\r\n            this.assingData(\r\n                JackpotData.DataLastWinAmount,\r\n                data.lastWinAmount ? Languages.formatText(Languages.FormatMoney, data.lastWinAmount.toString()) : null,\r\n                \"money\",\r\n            );\r\n            this.assingData(JackpotData.DataLastWinDate, data.lastWinDate, \"date\");\r\n            this.assingData(\r\n                JackpotData.DataHighestWinAmount,\r\n                data.highestWinAmount\r\n                    ? Languages.formatText(Languages.FormatMoney, data.highestWinAmount.toString())\r\n                    : null,\r\n                \"money\",\r\n            );\r\n            this.assingData(JackpotData.DataHighestWinDate, data.highestWinDate, \"date\");\r\n            this.assingData(JackpotData.DataWinCount, data.winCount ? data.winCount.toString() : null);\r\n\r\n            this.showWins();\r\n        } else {\r\n            this.initialize(data);\r\n        }\r\n    }\r\n\r\n    private assingData(dataId: string, value: string, format: string = \"\"): void {\r\n        if (this.historyDataElements && this.historyDataElements[dataId] && !StringUtils.isNullOrEmpty(value)) {\r\n            if (format != \"\") {\r\n                switch (format) {\r\n                    case \"money\":\r\n                        value = value + \" \" + DataManager.getDataById(GameData.DataCurrency);\r\n                        break;\r\n                    case \"date\":\r\n                        let date = new Date(value);\r\n                        value =\r\n                            this.zerosPad(date.getDate(), 2) +\r\n                            \". \" +\r\n                            this.zerosPad(date.getMonth() + 1, 2) +\r\n                            \". \" +\r\n                            date.getFullYear();\r\n                }\r\n            }\r\n\r\n            this.historyDataElements[dataId].textContent = value;\r\n        }\r\n    }\r\n\r\n    private zerosPad(num: number, size: number): string {\r\n        let s = num + \"\";\r\n        while (s.length < size) s = \"0\" + s;\r\n        return s;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLER\r\n    //******************************************************************************************************************\r\n\r\n    public openDialog(): void {\r\n        this.root.classList.remove(\"_disabled\");\r\n    }\r\n\r\n    public closeDialog(): void {\r\n        this.root.classList.add(\"_disabled\");\r\n    }\r\n\r\n    public isOpen(): boolean {\r\n        return !this.root.classList.contains(\"_disabled\");\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HELPER\r\n    //******************************************************************************************************************\r\n\r\n    public getRoot(): HTMLElement {\r\n        return this.root;\r\n    }\r\n\r\n    private showWins(enabled: boolean = true): void {\r\n        const winSections = this.root.getElementsByClassName(\"jackpotHistoryData\");\r\n\r\n        for (let i = 0; i < winSections.length; i++) {\r\n            const elem = <HTMLElement>winSections[i];\r\n            elem.style.display = enabled ? \"\" : \"none\";\r\n        }\r\n\r\n        const titleSections = this.root.getElementsByClassName(\"jackpotTitle\");\r\n\r\n        for (let i = 0; i < titleSections.length; i++) {\r\n            const elem = <HTMLElement>titleSections[i];\r\n            elem.style.display = enabled ? (elem.textContent == \"\" ? \"none\" : \"\") : \"none\";\r\n        }\r\n\r\n        //NoWins\r\n        const noWinSections = this.root.getElementsByClassName(\"jackpotHistoryNoWins\");\r\n        if (enabled) {\r\n            for (let i = 0; i < noWinSections.length; i++) {\r\n                noWinSections[i].parentNode.removeChild(noWinSections[i]);\r\n            }\r\n        } else {\r\n            if (noWinSections.length == 0) {\r\n                const section = this.createElement(\"div\", \"jackpotHistorySection jackpotHistoryNoWins\", this.root);\r\n                this.createDataElement(\"div\", \"jackpotHistoryDataValueBig\", JackpotData.DataNoWins, section);\r\n                this.assingData(JackpotData.DataNoWins, Languages.getRid(\"PB_HISTORYDIALOG_NODATA\"));\r\n            }\r\n        }\r\n    }\r\n\r\n    private createElement(tag: string, className: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = document.createElement(tag);\r\n        elem.setAttribute(\"class\", className);\r\n\r\n        if (rootElem) {\r\n            rootElem.appendChild(elem);\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = this.createElement(tag, className, rootElem);\r\n        elem.textContent = text;\r\n\r\n        return elem;\r\n    }\r\n\r\n    private createDataElement(tag: string, className: string, dataId: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = this.createElement(tag, className, rootElem);\r\n\r\n        if (this.historyDataElements) {\r\n            this.historyDataElements[dataId] = elem;\r\n        }\r\n\r\n        return elem;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotHistoryDialog.ts\n **/","export class JackpotData {\r\n    static DataCode: string = \"code\";\r\n    static DataHighestWinDate: string = \"highestWinDate\";\r\n    static DataHighestWinAmount: string = \"highestWinAmount\";\r\n    static DataWinCount: string = \"winCount\";\r\n    static DataLastWinDate: string = \"lastWinDate\";\r\n    static DataLastWinAmount: string = \"lastWinAmount\";\r\n    static DataNoWins: string = \"noWins\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/JackpotData.ts\n **/","export class GameData {\r\n    static DataTicker: string = \"TICKER\";\r\n    static DataRoundId: string = \"ROUND_ID\";\r\n    static DataBuildVersion: string = \"BUILD_VERSION\";\r\n    static DataBalanceReal: string = \"BALANCE_REAL\";\r\n    static DataBalanceBonus: string = \"BALANCE_BONUS\";\r\n    static DataBalanceTotal: string = \"BALANCE_TOTAL\";\r\n    static DataBalanceRealDenom: string = \"BALANCE_REAL_DENOM\";\r\n    static DataBalanceBonusDenom: string = \"BALANCE_BONUS_DENOM\";\r\n    static DataBalanceTotalDenom: string = \"BALANCE_TOTAL_DENOM\";\r\n    static DataCurrency: string = \"CURRENCY\";\r\n    static DataDenomination: string = \"DENOMINATION\";\r\n    static DataCurrentWin: string = \"CURRENT_WIN\";\r\n    static DataTotalWin: string = \"TOTAL_WIN\";\r\n    static DataTotalWinDenom: string = \"TOTAL_WIN_DENOM\";\r\n    static DataCoinSize: string = \"COIN_SIZE\";\r\n    static DataCointCount: string = \"COIN_COUNT\";\r\n    static DataPaylineCount: string = \"PAYLINE_COUNT\";\r\n    static DataBet: string = \"BET\";\r\n    static DataBetPosition: string = \"BET_POSITION\";\r\n    static DataGambleCurrentWin: string = \"GAMBLE_WIN\";\r\n    static DataGambleColorWin: string = \"GAMBLE_COLOR_WIN\";\r\n    static DataGambleCurrentWinDenom: string = \"GAMBLE_WIN_DENOM\";\r\n    static DataGambleColorWinDenom: string = \"GAMBLE_COLOR_WIN_DENOM\";\r\n    static DataAutoplayCount: string = \"AUTOPLAY_COUNT\";\r\n    static DataFreeSpinTotalWin: string = \"FREESPIN_TOTAL_WIN\";\r\n    static DataFreeSpinTotalWinDenom: string = \"FREESPIN_TOTAL_WIN_DENOM\";\r\n    static DataFreeSpinsCount: string = \"FREESPINS_COUNT\";\r\n    static DataFreeSpinsRemainingCount: string = \"FREESPINS_REMAINING_COUNT\";\r\n    static DataFreeSpinsWonCount: string = \"FREESPINS_WON_COUNT\";\r\n    static DataBonusSpinRemainingCount: string = \"BONUS_REMAINING_COUNT\";\r\n    static DataBonusTotalWin: string = \"BONUS_TOTAL_WIN\";\r\n    static DataBonusTotalWinDenom: string = \"BONUS_TOTAL_WIN_DENOM\";\r\n    static DataBonusSpinCount: string = \"BONUS_SPINS_COUNT\";\r\n    static DataBonusSpinWonCount: string = \"BONUS_WON_COUNT\";\r\n    static DataGambleAttempts: string = \"GAMBLE_ATTEMPTS\";\r\n    static DataHelpGameLimit: string = \"HELP_GAME_LIMIT\";\r\n    static DataHelpGambleLimit: string = \"HELP_GAMBLE_LIMIT\";\r\n    static DataHelpGambleCountLimit: string = \"HELP_GAMBLE_COUNT_LIMIT\";\r\n    static DataHelpRTP: string = \"HELP_RTP\";\r\n    static DataHelpVersion: string = \"HELP_VERSION\";\r\n    static DataHelpMaxPayoutProbability: string = \"HELP_MAX_PAYOUT_PROBABILITY\";\r\n    static DataHelpMaxPayoutFrequency: string = \"HELP_MAX_PAYOUT_FREQUENCY\";\r\n    static DataHelpMinBet: string = \"HELP_MIN_BET\";\r\n    static DataHelpMaxBet: string = \"HELP_MAX_BET\";\r\n    static DataExpirationResolveHours: string = \"EXPIRATION_RESOLVE_HOURS\";\r\n    static DataFrbRemainginCount: string = \"FRB_REMAINING_COUNT\";\r\n    static DataFrbAssignedCount: string = \"FRB_ASSIGNED_COUNT\";\r\n    static DataFrbRulesLink: string = \"FRB_RULES_LINK\";\r\n    static DataFrbValidTo: string = \"FRB_VALID_TO\";\r\n    static DataFrbExpiryTime: string = \"FRB_EXPIRY_TIME\";\r\n    static DataFrbWin: string = \"FRB_WIN\";\r\n    static DataGameTitle: string = \"GAME_TITLE\";\r\n    static DataHelpJackpotVisibleLimit: string = \"HELP_JACKPOT_VISIBLE_LIMIT\";\r\n    static DataHelpJackpotQualifyingBetsMin: string = \"HELP_JACKPOT_QUALIFYING_BETS_MIN\";\r\n    static DataHelpJackpotQualifyingBetsMax: string = \"HELP_JACKPOT_QUALIFYING_BETS_MAX\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Datas/GameData.ts\n **/","import { ArrayUtils, Logger, Utils, NumberUtils, StringUtils } from \"neo-common\";\r\nimport { ClientHost, Communication, GameEngine, Plugins, Platforms } from \"neo-games\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { GameManager } from \"./GameManager\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { BetManager } from \"./BetManager\";\r\nimport { BalanceManager } from \"./BalanceManager\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { GameConfiguration } from \"../../Common/GameConfiguration\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { HtmlLanuageContainerElement } from \"../HTMLComponents/Custom/HtmlLanguageContainerElement\";\r\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\r\nimport { GameApp } from \"../GameApp\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { UserAction } from \"../HTMLComponents/UserAction\";\r\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { IReel } from \"neo-games/Engine/Communication/Game/Types/IReel\";\r\nimport { HtmlButtonElement } from \"../HTMLComponents/Elements/HtmlButtonElement\";\r\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\r\n\r\ntype InitResponse = Communication.Game.InitResponse;\r\nvar GameEvents = ClientHost.GameEvents;\r\n\r\ntype ServerTimeResponse = Communication.Game.ServerTimeResponse;\r\n\r\nexport type CustomBetData = {\r\n    betAmount: number;\r\n    reelsData: Array<IReel>;\r\n    gameMultiplier: number;\r\n    collectingSymbols: number[];\r\n    mysterySymbol: number;\r\n};\r\n\r\nexport class DataManager {\r\n    private static _gameData: { [data: string]: string } = {};\r\n\r\n    public static DisplayCurrencies: { [data: string]: string } = null;\r\n\r\n    private static serverTimeOffset: number = -1;\r\n\r\n    private static time: string = \"\";\r\n\r\n    private static utcTime: string = \"\";\r\n\r\n    private static serverTimeResponseTimestamp: number = 0;\r\n\r\n    private static TrustedUserActions: Array<string> = [];\r\n\r\n    static GameRoundClosed: boolean = false;\r\n    static Collectable: boolean = true;\r\n    static GameLimit: boolean = false;\r\n\r\n    static AutoplayCount: string = \"∞\";\r\n    static AutoplayLossLimit: string = \"∞\";\r\n    static AutoplayWinLimit: string = \"∞\";\r\n    private static _autoplay: boolean = false;\r\n    static AutoplayEnabled: boolean = true;\r\n    static AutoplayAfterGamble: boolean = false;\r\n\r\n    static QuickspinEnabled: boolean = false;\r\n    private static _quickstopTimes: Array<number> = [];\r\n\r\n    static VibrationEnabled: boolean = false;\r\n\r\n    static HelpDataGameLimit: number = 0;\r\n    static HelpDataGambleLimit: number = 0;\r\n\r\n    static BackSoundsPlayingFromGame: boolean = true;\r\n\r\n    static LangContainer: HtmlLanuageContainerElement;\r\n\r\n    static SimilarGames: SimilarGames;\r\n\r\n    static customBetsData: CustomBetData[] = [];\r\n\r\n    static AutoplayStarted: boolean = false;\r\n\r\n    static set Autoplay(value: boolean) {\r\n        if (DataManager._autoplay != value) {\r\n            if (value) {\r\n                DataManager.AutoplayStarted = true;\r\n                Platforms.Platforms.autoplayStarted();\r\n            } else {\r\n                Platforms.Platforms.autoplayFinished({\r\n                    autoplayCount: this.AutoplayCount,\r\n                    autoplayLossLimit: this.AutoplayLossLimit,\r\n                    autoplayWinLimit: this.AutoplayWinLimit,\r\n                });\r\n            }\r\n\r\n            DataManager._autoplay = value;\r\n        } else {\r\n            DataManager.AutoplayStarted = false;\r\n        }\r\n    }\r\n\r\n    static get Autoplay() {\r\n        return DataManager._autoplay;\r\n    }\r\n\r\n    static controlAutoplay(): void {\r\n        if (GameApp.gameClient != null) {\r\n            GameApp.gameClient.setAutoplay(DataManager.Autoplay);\r\n        }\r\n    }\r\n\r\n    static autoplayEnabled(): boolean {\r\n        if (AppContext.gameConfiguration.AutoplayModeEnabled && DataManager.AutoplayEnabled) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static quickspinEnabled(): boolean {\r\n        return DataManager.gameEnableQuickSpin() && DataManager.QuickspinEnabled;\r\n    }\r\n\r\n    static gameEnableQuickSpin(): boolean {\r\n        return (\r\n            AppContext.gameConfiguration.GameEnableReelsStop &&\r\n            AppContext.gameConfiguration.MinGameRoundDuration == 0 &&\r\n            AppContext.gameConfiguration.GameRoundMinSpan == 0 &&\r\n            AppContext.gameConfiguration.GameEnableQuickSpin\r\n        );\r\n    }\r\n\r\n    static quickspinSet(toValue?: boolean): boolean {\r\n        if (DataManager.gameEnableQuickSpin()) {\r\n            if (typeof toValue === \"boolean\") {\r\n                DataManager.QuickspinEnabled = toValue;\r\n                HtmlController.updateDataElement(UserAction.ActionQuickspinToggle, toValue ? \"true\" : \"false\");\r\n            } else {\r\n                DataManager.QuickspinEnabled = !DataManager.QuickspinEnabled;\r\n                HtmlController.updateDataElement(\r\n                    UserAction.ActionQuickspinToggle,\r\n                    DataManager.QuickspinEnabled ? \"true\" : \"false\",\r\n                );\r\n            }\r\n            if (DEBUG) {\r\n                this.log(\"Quickspin \" + (DataManager.QuickspinEnabled ? \"on\" : \"off\"));\r\n            }\r\n        }\r\n        Platforms.Platforms.quickSpinEnabled(DataManager.QuickspinEnabled);\r\n        return DataManager.QuickspinEnabled;\r\n    }\r\n\r\n    static quickspinStopped() {\r\n        if (DataManager._quickstopTimes != null) {\r\n            DataManager._quickstopTimes.push(Date.now() * 0.001);\r\n\r\n            //we have enough quickstop clicks, check interval\r\n            if (DataManager._quickstopTimes.length == AppContext.gameConfiguration.QuickSpinDialogCount) {\r\n                let timeDiff =\r\n                    DataManager._quickstopTimes[DataManager._quickstopTimes.length - 1] -\r\n                    DataManager._quickstopTimes[0];\r\n\r\n                if (timeDiff < AppContext.gameConfiguration.QuickSpinDecayDelay) {\r\n                    if (DataManager.gameEnableQuickSpin() && !DataManager.QuickspinEnabled) {\r\n                        QuickspinDialog.openDialog();\r\n                        DataManager._quickstopTimes = null;\r\n                    }\r\n                } else {\r\n                    DataManager._quickstopTimes.shift();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static vibrationSet(toValue?: boolean): boolean {\r\n        if (AppContext.gameConfiguration.GameEnableVibration) {\r\n            if (typeof toValue === \"boolean\") {\r\n                DataManager.VibrationEnabled = toValue;\r\n                HtmlController.updateDataElement(UserAction.ActionVibrationToggle, toValue ? \"true\" : \"false\");\r\n            } else {\r\n                DataManager.VibrationEnabled = !DataManager.VibrationEnabled;\r\n                HtmlController.updateDataElement(\r\n                    UserAction.ActionVibrationToggle,\r\n                    DataManager.VibrationEnabled ? \"true\" : \"false\",\r\n                );\r\n            }\r\n            if (DEBUG) {\r\n                this.log(\"Vibration \" + (DataManager.VibrationEnabled ? \"on\" : \"off\"));\r\n            }\r\n        }\r\n\r\n        return DataManager.VibrationEnabled;\r\n    }\r\n\r\n    static updateResponseData(init?: boolean): void {\r\n        DataManager.GameRoundClosed = false;\r\n\r\n        if (!Utils.isNullOrUndefined(GameManager.gameResponse)) {\r\n            let status: any = GameManager.gameResponse.status;\r\n\r\n            if (status != null && status === \"closed\") {\r\n                DataManager.GameRoundClosed = true;\r\n            }\r\n\r\n            if (GameManager.gameResponse.limits != null) {\r\n                DataManager.GameLimit = true;\r\n            } else {\r\n                DataManager.GameLimit = false;\r\n            }\r\n\r\n            if (init || !(FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                // Don't set balance in last cumulative FRB (except init state)\r\n                BalanceManager.setBalance();\r\n            }\r\n\r\n            if (init) {\r\n                var initResponse = GameManager.gameResponse as InitResponse;\r\n                if (initResponse.initData != null && initResponse.initData.currency != null) {\r\n                    DataManager.updateGameDataFromModule(GameData.DataCurrency, initResponse.initData.currency);\r\n                }\r\n\r\n                BetManager.initializeBet();\r\n                DataManager.configureHelpData();\r\n\r\n                if (\r\n                    GameManager.gameResponse.balance != null &&\r\n                    GameManager.gameResponse.balance.bonus != null &&\r\n                    GameManager.gameResponse.balance.bonus >= BetManager.Bet\r\n                ) {\r\n                    ModuleManager.changeBetColor(true);\r\n                }\r\n\r\n                if (GameManager.baseResponse.initData != null) {\r\n                    if (\r\n                        GameManager.baseResponse.initData.customData != null &&\r\n                        GameManager.baseResponse.initData.customData[\"betsData\"] !== null\r\n                    ) {\r\n                        this.customBetsData = GameManager.baseResponse.initData.customData[\"betsData\"];\r\n                    }\r\n                }\r\n\r\n                DataManager.updateDataElements();\r\n            }\r\n\r\n            if (GameManager.gameResponse.roundId != null) {\r\n                const elements = document.getElementsByClassName(\"roundId\");\r\n\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    const element = <HTMLElement>elements[i];\r\n\r\n                    if (element != null) {\r\n                        if (!AppContext.gameConfiguration.GameRoundIdVisible) {\r\n                            element.style.opacity = \"0\";\r\n                        } else if (GameManager.gameResponse.roundId === -1) {\r\n                            element.style.opacity = \"1\";\r\n                        }\r\n                    }\r\n                }\r\n\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataRoundId,\r\n                    GameManager.gameResponse.roundId === -1 ? \"DEMO\" : GameManager.gameResponse.roundId.toString(),\r\n                );\r\n            }\r\n\r\n            DataManager.updateTotalWin();\r\n        }\r\n\r\n        if (!Jackpot.hasMiniGame()) {\r\n            BalanceManager.poolingBalance();\r\n        }\r\n\r\n        if (\r\n            GameManager.gameResponse[\"progressiveBonus\"] &&\r\n            GameManager.gameResponse[\"progressiveBonus\"].offline === true\r\n        ) {\r\n            Jackpot.showError();\r\n        } else {\r\n            Jackpot.reinitialize();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Update data for bet currently playing.\r\n     */\r\n    static updateCustomBetsData() {\r\n        const customData = GameManager.baseResponse.customData;\r\n        if (!Utils.isNullOrUndefined(customData) && customData[\"betAmount\"] == BetManager.Bet) {\r\n            for (let key in DataManager.customBetsData) {\r\n                if (DataManager.customBetsData[key].betAmount == BetManager.Bet) {\r\n                    DataManager.customBetsData[key].reelsData = GameManager.baseResponse.screen.reels;\r\n                    DataManager.customBetsData[key].gameMultiplier = GameManager.baseResponse.gameMultiplier;\r\n                    DataManager.customBetsData[key].collectingSymbols =\r\n                        GameManager.baseResponse.customData.collectedSymbols;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clear collectedSymbols for selected bet amount.\r\n     */\r\n    static clearCollectedSymbolsForCurrentBet(): void {\r\n        if (!Utils.isNullOrUndefined(DataManager.customBetsData)) {\r\n            for (let key in DataManager.customBetsData) {\r\n                const customBetData: CustomBetData = DataManager.customBetsData[key];\r\n                if (customBetData.betAmount == BetManager.Bet) {\r\n                    customBetData.collectingSymbols.length = 0;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get custom bet data for selected bet amount.\r\n     */\r\n    static getCustomBetDataForCurrentBetAmount(): CustomBetData {\r\n        if (!Utils.isNullOrUndefined(DataManager.customBetsData)) {\r\n            for (let key in DataManager.customBetsData) {\r\n                const customBetData: CustomBetData = DataManager.customBetsData[key];\r\n                if (customBetData.betAmount == BetManager.Bet) {\r\n                    return customBetData;\r\n                }\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    static updateTotalWin(): void {\r\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            // FRB cumulative win pay method\r\n            if (\r\n                GameManager.gameResponse[\"freeRounds\"] != null &&\r\n                GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null\r\n            ) {\r\n                if (DataManager.GameRoundClosed) {\r\n                    // Standard case\r\n                    const totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n                    DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\r\n\r\n                    if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                        DataManager.updateGameDataFromModule(\r\n                            GameData.DataTotalWinDenom,\r\n                            parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\r\n                        );\r\n                    }\r\n                } else {\r\n                    if (GameManager.gameResponse.totalWin != null) {\r\n                        const totalWin = NumberUtils.add(\r\n                            GameManager.gameResponse[\"freeRounds\"][\"totalWin\"],\r\n                            GameManager.gameResponse.totalWin,\r\n                        );\r\n                        DataManager.updateGameDataFromModule(GameData.DataTotalWin, totalWin.toString());\r\n\r\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataTotalWinDenom,\r\n                                parseInt(NumberUtils.devide(totalWin, BetManager.CoinSize).toString()).toString(),\r\n                            );\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else if (GameManager.gameResponse.totalWin != null) {\r\n            // Standard case\r\n            DataManager.updateGameDataFromModule(GameData.DataTotalWin, GameManager.gameResponse.totalWin.toString());\r\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataTotalWinDenom,\r\n                    parseInt(\r\n                        NumberUtils.devide(GameManager.gameResponse.totalWin, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateTotalGain(calculate: boolean = false, customWin: number = 0): void {\r\n        if (\r\n            GameManager.gameResponse.totalGain != null &&\r\n            AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.TOTAL_GAIN) > -1\r\n        ) {\r\n            let totalGain = GameManager.gameResponse.totalGain;\r\n            if (calculate) {\r\n                const bet = FreeRoundBonus.inFrb ? 0 : BetManager.Bet;\r\n                totalGain = parseFloat(NumberUtils.subtract(totalGain, bet));\r\n\r\n                if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n                    totalGain = parseFloat(NumberUtils.add(totalGain, GameManager.gameResponse.totalWin));\r\n                }\r\n            }\r\n\r\n            if (customWin > 0) {\r\n                totalGain = parseFloat(NumberUtils.add(totalGain, customWin));\r\n            }\r\n\r\n            GameManager.gameResponse.totalGain = totalGain;\r\n            const statusBar = Plugins.StatusBar.getInstance();\r\n            const resize = !statusBar.hasActiveWidget();\r\n            statusBar.add(\r\n                Plugins.StatusBar.Types.TOTAL_GAIN,\r\n                \"totalGain\",\r\n                Languages.getRid(\r\n                    \"SB_INFO_TOTAL_GAIN\",\r\n                    Languages.formatText(Languages.FormatMoney, totalGain.toString()),\r\n                ) +\r\n                    \" \" +\r\n                    DataManager.getDataById(GameData.DataCurrency),\r\n            );\r\n\r\n            if (resize) {\r\n                Scaling.resizeRoot();\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateGameDataFromModule(dataId: string, value: string): void {\r\n        if (dataId === GameData.DataCurrency) {\r\n            if (Utils.isNullOrUndefined(DataManager.DisplayCurrencies)) {\r\n                DataManager.DisplayCurrencies = {};\r\n\r\n                AppContext.gameConfiguration.DisplayCurrencies.forEach((rawPair) => {\r\n                    const parsedPair = ArrayUtils.stringArray(rawPair);\r\n\r\n                    DataManager.DisplayCurrencies[parsedPair[0]] = parsedPair[1];\r\n                });\r\n            }\r\n\r\n            if (DataManager.DisplayCurrencies.hasOwnProperty(value)) {\r\n                DataManager._gameData[dataId] = DataManager.DisplayCurrencies[value];\r\n                return;\r\n            }\r\n        }\r\n\r\n        DataManager._gameData[dataId] = value;\r\n    }\r\n\r\n    static getDataById(dataId: string): string {\r\n        if (DataManager._gameData[dataId] != null) {\r\n            return DataManager._gameData[dataId];\r\n        }\r\n        return null;\r\n    }\r\n\r\n    static updateDataElement(dataId: string, customValue?: string): void {\r\n        if (customValue != null) {\r\n            HtmlController.updateDataElement(dataId, customValue);\r\n        } else {\r\n            if (DataManager._gameData[dataId] != null) {\r\n                HtmlController.updateDataElement(dataId, DataManager._gameData[dataId]);\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateDataElements(): void {\r\n        HtmlController.updateDataElements(DataManager._gameData);\r\n        DataManager.updateTotalGain();\r\n    }\r\n\r\n    static getServerTime(): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient.sendServerTimerRequest().then((response: ServerTimeResponse) => {\r\n                DataManager.serverTimeReceived(response);\r\n\r\n                if (\r\n                    AppContext.gameConfiguration.UseServerTime &&\r\n                    StringUtils.isNullOrEmpty(AppContext.gameConfiguration.ApplicationGatewayUrl)\r\n                ) {\r\n                    setTimeout(() => {\r\n                        DataManager.getServerTime();\r\n                    }, 30000);\r\n                }\r\n            });\r\n        }\r\n    }\r\n\r\n    static serverTimeReceived(response: ServerTimeResponse): void {\r\n        if (response == null) {\r\n            return;\r\n        }\r\n\r\n        if (response.utcTime == null && response.time == null) {\r\n            return;\r\n        }\r\n\r\n        DataManager.utcTime = response.utcTime;\r\n        DataManager.time = response.time;\r\n        DataManager.serverTimeResponseTimestamp = Date.now();\r\n\r\n        if (DataManager.utcTime != null) {\r\n            if (DataManager.utcTime.indexOf(\"Z\") == -1) {\r\n                DataManager.utcTime = DataManager.utcTime + \"Z\";\r\n            }\r\n\r\n            Platforms.Platforms.clockSync(Date.now() - Date.parse(DataManager.utcTime));\r\n        }\r\n\r\n        if (DataManager.serverTimeOffset === -1) {\r\n            let currentTime = new Date().getTime();\r\n            let serverTime = Date.parse(DataManager.utcTime ? DataManager.utcTime.replace(\"Z\", \"\") : DataManager.time);\r\n\r\n            DataManager.serverTimeOffset = serverTime - currentTime;\r\n        }\r\n    }\r\n\r\n    static getFormattedTime(time: Date): string {\r\n        if (time == null) {\r\n            return null;\r\n        }\r\n\r\n        //{\"time\":\"2023-09-21T12:00:02.3442838\",\"utcTime\":\"2023-09-21T10:00:02.3442838\"}\r\n        const year = time.getFullYear();\r\n        const month = DataManager.zerosPad(time.getMonth() + 1, 2);\r\n        const day = DataManager.zerosPad(time.getDate(), 2);\r\n        const hours = DataManager.zerosPad(time.getHours(), 2);\r\n        const minutes = DataManager.zerosPad(time.getMinutes(), 2);\r\n        const seconds = DataManager.zerosPad(time.getSeconds(), 2);\r\n        const milliseconds = time.getMilliseconds();\r\n\r\n        return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}`;\r\n    }\r\n\r\n    static zerosPad(num: number, size: number): string {\r\n        let s = num + \"\";\r\n        while (s.length < size) s = \"0\" + s;\r\n        return s;\r\n    }\r\n\r\n    static getTimeData(): { utcTime: string; machineLocalTimeZone: number } {\r\n        const currentTime = new Date();\r\n        const utcTime = DataManager.getUTCTime();\r\n        const machineLocalTimeZone = currentTime.getTimezoneOffset() * -1; //in minutes\r\n\r\n        return {\r\n            utcTime: utcTime,\r\n            machineLocalTimeZone: machineLocalTimeZone,\r\n        };\r\n    }\r\n\r\n    static getUTCTime(): string {\r\n        if (!StringUtils.isNullOrEmpty(DataManager.utcTime)) {\r\n            const currentTime = new Date();\r\n            const utcResponseTimestamp = Date.parse(DataManager.utcTime);\r\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n\r\n            return new Date(utcResponseTimestamp + lastResponseDiff).toISOString();\r\n        }\r\n\r\n        return new Date().toISOString();\r\n    }\r\n\r\n    static getGameTime(utcTime: string): string {\r\n        if (utcTime.indexOf(\"Z\") == -1) {\r\n            utcTime = utcTime + \"Z\";\r\n        }\r\n\r\n        const utcTimestamp = Date.parse(utcTime.replace(\"Z\", \"\"));\r\n\r\n        if (AppContext.gameConfiguration.UseServerTime) {\r\n            const offset = DataManager.utcTime ? DataManager.serverTimeOffset : 0;\r\n            return DataManager.getFormattedTime(new Date(utcTimestamp - offset));\r\n        }\r\n\r\n        return DataManager.getFormattedTime(new Date(utcTime));\r\n    }\r\n\r\n    static getNonUTCGameTime(): string {\r\n        if (!AppContext.gameConfiguration.UseServerTime) {\r\n            return DataManager.getFormattedTime(new Date());\r\n        }\r\n\r\n        if (!StringUtils.isNullOrEmpty(DataManager.time)) {\r\n            const currentTime = new Date();\r\n            const utcResponseTimestamp = Date.parse(DataManager.time);\r\n            const lastResponseDiff = currentTime.getTime() - DataManager.serverTimeResponseTimestamp;\r\n            return DataManager.getFormattedTime(\r\n                new Date(utcResponseTimestamp + lastResponseDiff - DataManager.serverTimeOffset),\r\n            );\r\n        }\r\n\r\n        return DataManager.getFormattedTime(new Date());\r\n    }\r\n\r\n    static showTime(): void {\r\n        if (!AppContext.gameConfiguration.UIShowTime) {\r\n            return;\r\n        }\r\n\r\n        let today = new Date(DataManager.getNonUTCGameTime());\r\n\r\n        if (DataManager.utcTime != null) {\r\n            const timeData = DataManager.getTimeData();\r\n            today = new Date(DataManager.getGameTime(timeData.utcTime));\r\n        }\r\n\r\n        let h = today.getHours();\r\n        let hFixed: string = h + \"\";\r\n        if (h < 10) {\r\n            hFixed = \"0\" + h;\r\n        }\r\n\r\n        let m = today.getMinutes();\r\n        let mFixed: string = m + \"\";\r\n        if (m < 10) {\r\n            mFixed = \"0\" + m;\r\n        }\r\n        DataManager.updateDataElement(\"TIME\", hFixed + \":\" + mFixed);\r\n        setTimeout(() => {\r\n            DataManager.showTime();\r\n        }, 1000);\r\n    }\r\n\r\n    static showSessionTime(time: number): void {\r\n        if (AppContext.gameConfiguration.GUIShowSessionTime) {\r\n            if (time < 0) {\r\n                time = 0;\r\n            }\r\n\r\n            let sec_num: number = time;\r\n            let hours: number = Math.floor(sec_num / 3600);\r\n            let minutes: number = Math.floor((sec_num - hours * 3600) / 60);\r\n            let seconds: number = sec_num - hours * 3600 - minutes * 60;\r\n\r\n            let hoursS: string = hours.toString();\r\n            let minutesS: string = minutes.toString();\r\n            let secondsS: string = seconds.toString();\r\n\r\n            if (hours < 10) {\r\n                hoursS = \"0\" + hours;\r\n            }\r\n            if (minutes < 10) {\r\n                minutesS = \"0\" + minutes;\r\n            }\r\n            if (seconds < 10) {\r\n                secondsS = \"0\" + seconds;\r\n            }\r\n\r\n            let pre: string = AppContext.gameConfiguration.UIShowTime ? \"&nbsp;|&nbsp;\" : \"\";\r\n\r\n            DataManager.updateDataElement(\"SESSION_TIME\", pre + hoursS + \":\" + minutesS + \":\" + secondsS);\r\n            time++;\r\n            setTimeout(() => {\r\n                DataManager.showSessionTime(time);\r\n            }, 1000);\r\n        }\r\n    }\r\n\r\n    static configureGameData(): void {\r\n        if (AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.StatusBarMessage) > -1) {\r\n            if (\r\n                AppContext.gameConfiguration.StatusBarData != null &&\r\n                AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage] != null\r\n            ) {\r\n                const statusBar = Plugins.StatusBar.getInstance();\r\n                statusBar.add(\r\n                    Plugins.StatusBar.Types.StatusBarMessage,\r\n                    \"statusBarMessage\",\r\n                    AppContext.gameConfiguration.StatusBarData[Plugins.StatusBar.Types.StatusBarMessage],\r\n                );\r\n                Scaling.resizeRoot();\r\n            }\r\n        }\r\n\r\n        const gameTitle = document.getElementById(\"gameTitle\");\r\n        if (gameTitle != null) {\r\n            DataManager.updateDataElement(GameData.DataGameTitle, gameTitle.innerHTML);\r\n\r\n            const gameHeadline = document.getElementById(\"gameHeadline\");\r\n            if (gameHeadline != null) {\r\n                gameHeadline.style.display = \"none\";\r\n            }\r\n        }\r\n\r\n        if (!AppContext.gameConfiguration.GameEnableReelsStop) {\r\n            DataManager.hideDataElements(\"GameEnableReelsStop\");\r\n        } else {\r\n            DataManager.hideDataElements(\"GameDisableReelsStop\");\r\n        }\r\n        if (!DataManager.gameEnableQuickSpin()) {\r\n            DataManager.hideDataElements(\"quickSpinSettings\");\r\n        }\r\n\r\n        if (!AppContext.gameConfiguration.GameEnableVibration) {\r\n            DataManager.hideDataElements(\"vibrationSettings\");\r\n        }\r\n\r\n        if (!DataManager.hasSettingsMenu()) {\r\n            DataManager.hideDataElements(\"helpGameSettings\");\r\n        }\r\n    }\r\n\r\n    private static hasSettingsMenu(): boolean {\r\n        if (DataManager.gameEnableQuickSpin()) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    static configureHelpData(): void {\r\n        DataManager.showDataElements(\"gambleAttempts\");\r\n        DataManager.showDataElements(\"helpGameLimit\");\r\n        DataManager.showDataElements(\"helpGambleLimit\");\r\n        DataManager.showDataElements(\"helpGambleCountLimit\");\r\n        DataManager.showDataElements(\"helpJoker\");\r\n        DataManager.showDataElements(\"helpRTP\");\r\n        DataManager.showDataElements(\"totalRTP\");\r\n        DataManager.hideDataElements(\"helpVersion\");\r\n        DataManager.showDataElements(\"helpJackpotVisibleLimit\");\r\n        DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsAll\");\r\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMin\");\r\n        DataManager.showDataElements(\"helpJackpotQualifyingBetsMax\");\r\n        DataManager.hideDataElements(\"helpShowCumulativeWinLimit\");\r\n        DataManager.hideDataElements(\"helpMPP\");\r\n        DataManager.hideDataElements(\"helpMPF\");\r\n\r\n        if (AppContext != null) {\r\n            if (GameManager.gameResponse != null) {\r\n                if (GameManager.gameResponse[\"helpData\"] == null) {\r\n                    DataManager.hideDataElements(\"gambleAttempts\");\r\n                    DataManager.hideDataElements(\"helpGameLimit\");\r\n                    DataManager.hideDataElements(\"helpGambleLimit\");\r\n                    DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n                    DataManager.hideDataElements(\"helpJoker\");\r\n                    DataManager.hideDataElements(\"helpRTP\");\r\n                    DataManager.hideDataElements(\"totalRTP\");\r\n                    DataManager.hideDataElements(\"helpMPP\");\r\n                    DataManager.hideDataElements(\"helpMPF\");\r\n                } else {\r\n                    if (GameManager.gambleResponse == null) {\r\n                        DataManager.hideDataElements(\"hlpGambleSection\");\r\n                        DataManager.showDataElements(\"hlpNoGambleSection\", \"\");\r\n                    } else {\r\n                        DataManager.hideDataElements(\"hlpNoGambleSection\");\r\n                        DataManager.showDataElements(\"hlpGambleSection\", \"\");\r\n                    }\r\n\r\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n                        DataManager.hideDataElements(\"gambleAttempts\");\r\n                    } else {\r\n                        if (\r\n                            GameManager.gambleResponse != null &&\r\n                            GameManager.gambleResponse[\"totalCount\"] != null &&\r\n                            GameManager.gambleResponse[\"currentCount\"] != null\r\n                        ) {\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataGambleAttempts,\r\n                                (\r\n                                    GameManager.gambleResponse[\"totalCount\"] -\r\n                                    GameManager.gambleResponse[\"currentCount\"]\r\n                                ).toString(),\r\n                            );\r\n                        }\r\n                    }\r\n\r\n                    if (GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null) {\r\n                        DataManager.HelpDataGameLimit = GameManager.gameResponse[\"helpData\"][\"gameLimit\"];\r\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataHelpGameLimit,\r\n                                parseInt(\r\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\r\n                                ).toString(),\r\n                            );\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataHelpGameLimit,\r\n                                parseInt(\r\n                                    NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\r\n                                ).toString(),\r\n                            );\r\n                        } else {\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataHelpGameLimit,\r\n                                Languages.formatText(\r\n                                    Languages.FormatMoney,\r\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\r\n                                ) +\r\n                                    \" \" +\r\n                                    DataManager.getDataById(GameData.DataCurrency),\r\n                            );\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataHelpGameLimit,\r\n                                Languages.formatText(\r\n                                    Languages.FormatMoney,\r\n                                    GameManager.gameResponse[\"helpData\"][\"gameLimit\"],\r\n                                ) +\r\n                                    \" \" +\r\n                                    DataManager.getDataById(GameData.DataCurrency),\r\n                            );\r\n                        }\r\n                    }\r\n\r\n                    if (\r\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] == null ||\r\n                        !AppContext.gameConfiguration.HelpShowGameLimit\r\n                    ) {\r\n                        DataManager.hideDataElements(\"helpGameLimit\");\r\n                    }\r\n\r\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleLimit\"] != null) {\r\n                        DataManager.HelpDataGambleLimit = GameManager.gameResponse[\"helpData\"][\"gambleLimit\"];\r\n                        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataHelpGambleLimit,\r\n                                parseInt(\r\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\r\n                                ).toString(),\r\n                            );\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataHelpGambleLimit,\r\n                                parseInt(\r\n                                    NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\r\n                                ).toString(),\r\n                            );\r\n                        } else {\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataHelpGambleLimit,\r\n                                Languages.formatText(\r\n                                    Languages.FormatMoney,\r\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\r\n                                ) +\r\n                                    \" \" +\r\n                                    DataManager.getDataById(GameData.DataCurrency),\r\n                            );\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataHelpGambleLimit,\r\n                                Languages.formatText(\r\n                                    Languages.FormatMoney,\r\n                                    GameManager.gameResponse[\"helpData\"][\"gambleLimit\"],\r\n                                ) +\r\n                                    \" \" +\r\n                                    DataManager.getDataById(GameData.DataCurrency),\r\n                            );\r\n                        }\r\n                    } else {\r\n                        DataManager.hideDataElements(\"helpGambleLimit\");\r\n                    }\r\n\r\n                    if (GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] == null) {\r\n                        DataManager.hideDataElements(\"helpGambleCountLimit\");\r\n                    } else {\r\n                        DataManager.updateDataElement(\r\n                            GameData.DataHelpGambleCountLimit,\r\n                            GameManager.gameResponse[\"helpData\"][\"gambleCountLimit\"] + \" \",\r\n                        );\r\n                    }\r\n\r\n                    if (\r\n                        GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"] == null ||\r\n                        !GameManager.gameResponse[\"helpData\"][\"gambleWithJoker\"]\r\n                    ) {\r\n                        DataManager.hideDataElements(\"helpJoker\");\r\n                    }\r\n\r\n                    let rtp = GameManager.gameResponse[\"helpData\"][\"rtp\"];\r\n                    let totalRtp = GameManager.gameResponse[\"helpData\"][\"totalRtp\"];\r\n                    let progressiveBonusRtp = GameManager.gameResponse[\"helpData\"][\"progressiveBonusRtp\"];\r\n                    let ridTotalRTP = AppContext.gameConfiguration.UseJackpotLocalization\r\n                        ? \"HLP_AD_INFO_TOTAL_RTP_J\"\r\n                        : \"HLP_AD_INFO_TOTAL_RTP\";\r\n                    let statusBarRtp: string;\r\n\r\n                    if (\r\n                        totalRtp != null &&\r\n                        progressiveBonusRtp != null &&\r\n                        rtp != null &&\r\n                        AppContext.gameConfiguration.HelpShowRTP\r\n                    ) {\r\n                        // BaseGameAndProgressiveBonus\r\n                        DataManager.hideDataElements(\"helpRTP\");\r\n                        DataManager.setDataElements(\r\n                            \"totalRTP\",\r\n                            Languages.getRid(\r\n                                ridTotalRTP,\r\n                                totalRtp.toString(),\r\n                                rtp.toString(),\r\n                                progressiveBonusRtp.toString(),\r\n                            ),\r\n                        );\r\n                        statusBarRtp = totalRtp.toString();\r\n                    } else if (rtp != null && AppContext.gameConfiguration.HelpShowRTP) {\r\n                        // BaseGame\r\n                        DataManager.hideDataElements(\"totalRTP\");\r\n                        DataManager.updateDataElement(GameData.DataHelpRTP, rtp.toString());\r\n                        statusBarRtp = rtp.toString();\r\n                    } else {\r\n                        // Disabled\r\n                        DataManager.hideDataElements(\"helpRTP\");\r\n                        DataManager.hideDataElements(\"totalRTP\");\r\n                    }\r\n\r\n                    if (\r\n                        statusBarRtp != null &&\r\n                        AppContext.gameConfiguration.StatusBar.indexOf(Plugins.StatusBar.Types.RTP) > -1\r\n                    ) {\r\n                        const statusBar = Plugins.StatusBar.getInstance();\r\n                        statusBar.add(\r\n                            Plugins.StatusBar.Types.RTP,\r\n                            \"rtp\",\r\n                            Languages.getRid(\"SB_INFO_RTP\", statusBarRtp.toString()),\r\n                        );\r\n                        Scaling.resizeRoot();\r\n                    }\r\n\r\n                    if (\r\n                        GameManager.gameResponse[\"helpData\"][\"version\"] == null ||\r\n                        !AppContext.gameConfiguration.HelpShowGameModuleVersion\r\n                    ) {\r\n                        DataManager.hideDataElements(\"helpVersion\");\r\n                    } else {\r\n                        DataManager.updateDataElement(\r\n                            GameData.DataHelpVersion,\r\n                            GameManager.gameResponse[\"helpData\"][\"version\"].toString(),\r\n                        );\r\n                        DataManager.showDataElements(\"helpVersion\");\r\n                    }\r\n\r\n                    if (GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"] != null) {\r\n                        if (\r\n                            AppContext.gameConfiguration.StatusBar.indexOf(\r\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\r\n                            ) > -1\r\n                        ) {\r\n                            const statusBar = Plugins.StatusBar.getInstance();\r\n                            statusBar.add(\r\n                                Plugins.StatusBar.Types.MaxPayoutProbability,\r\n                                \"maxPayoutProbability\",\r\n                                Languages.getRid(\r\n                                    \"SB_INFO_MAX_PAYOUT_PROBABILITY\",\r\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"],\r\n                                ),\r\n                            );\r\n                            Scaling.resizeRoot();\r\n                        }\r\n\r\n                        if (\r\n                            AppContext.gameConfiguration.HelpShowMaxPayoutProbabilityFrequency &&\r\n                            GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"] != null\r\n                        ) {\r\n                            DataManager.setDataElements(\r\n                                \"helpMPF\",\r\n                                Languages.getRid(\r\n                                    \"HLP_AD_INFO_MAX_PAYOUT_FREQUENCY\",\r\n                                    GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\r\n                                    GameManager.gameResponse[\"helpData\"][\"maxTotalPayoutProbability\"].toString(),\r\n                                ),\r\n                            );\r\n                            DataManager.showDataElements(\"helpMPF\");\r\n                        } else if (AppContext.gameConfiguration.HelpShowMaxPayoutProbability) {\r\n                            DataManager.updateDataElement(\r\n                                GameData.DataHelpMaxPayoutProbability,\r\n                                GameManager.gameResponse[\"helpData\"][\"maxPayoutProbability\"].toString(),\r\n                            );\r\n                            DataManager.showDataElements(\"helpMPP\");\r\n                        }\r\n                    }\r\n\r\n                    if (\r\n                        AppContext.gameConfiguration.ProgressiveBonusTicketConstraint == \"WithinGameRound\" &&\r\n                        AppContext.gameConfiguration.ProgressiveBonusHelpShowCumulativeWinLimit &&\r\n                        GameManager.gameResponse[\"helpData\"][\"gameLimit\"] != null\r\n                    ) {\r\n                        DataManager.showDataElements(\"helpShowCumulativeWinLimit\");\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (BetManager.TotalBets.length > 0) {\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpMinBet,\r\n                    Languages.formatText(Languages.FormatMoney, Math.min(...BetManager.TotalBets).toString()) +\r\n                        \" \" +\r\n                        DataManager.getDataById(GameData.DataCurrency),\r\n                );\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpMaxBet,\r\n                    Languages.formatText(Languages.FormatMoney, Math.max(...BetManager.TotalBets).toString()) +\r\n                        \" \" +\r\n                        DataManager.getDataById(GameData.DataCurrency),\r\n                );\r\n            } else {\r\n                DataManager.hideDataElements(\"helpMinBet\");\r\n                DataManager.hideDataElements(\"helpMaxBet\");\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.ProgressiveBonusContributeOnlyQualified) {\r\n                DataManager.hideDataElements(\"helpJackpotContributionAll\");\r\n                DataManager.showDataElements(\"helpJackpotContributionQualifying\");\r\n            } else {\r\n                DataManager.showDataElements(\"helpJackpotContributionAll\");\r\n                DataManager.hideDataElements(\"helpJackpotContributionQualifying\");\r\n            }\r\n\r\n            if (\r\n                AppContext.gameConfiguration.ProgressiveBonusVisibleMax > 0 &&\r\n                AppContext.gameConfiguration.ProgressiveBonusHelpShowMaxVisibleLimit\r\n            ) {\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpJackpotVisibleLimit,\r\n                    Languages.formatText(\r\n                        Languages.FormatMoney,\r\n                        AppContext.gameConfiguration.ProgressiveBonusVisibleMax.toString(),\r\n                    ) +\r\n                        \" \" +\r\n                        DataManager.getDataById(GameData.DataCurrency),\r\n                );\r\n            } else {\r\n                DataManager.hideDataElements(\"helpJackpotVisibleLimit\");\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet > 0) {\r\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpJackpotQualifyingBetsMin,\r\n                    Languages.formatText(\r\n                        Languages.FormatMoney,\r\n                        AppContext.gameConfiguration.ProgressiveBonusMinQualifyingBet.toString(),\r\n                    ) +\r\n                        \" \" +\r\n                        DataManager.getDataById(GameData.DataCurrency),\r\n                );\r\n            } else {\r\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMin\");\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet > 0) {\r\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsAll\");\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpJackpotQualifyingBetsMax,\r\n                    Languages.formatText(\r\n                        Languages.FormatMoney,\r\n                        AppContext.gameConfiguration.ProgressiveBonusMaxQualifyingBet.toString(),\r\n                    ) +\r\n                        \" \" +\r\n                        DataManager.getDataById(GameData.DataCurrency),\r\n                );\r\n            } else {\r\n                DataManager.hideDataElements(\"helpJackpotQualifyingBetsMax\");\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n            } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n                DataManager.hideDataElements(\"helpAutoplayBasic\");\r\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n            } else {\r\n                DataManager.hideDataElements(\"helpAutoplaySimple\");\r\n                DataManager.hideDataElements(\"helpAutoplayAdvanced\");\r\n            }\r\n\r\n            if (!AppContext.gameConfiguration.AutoplayModeEnabled) {\r\n                DataManager.hideDataElements(\"helpAutoplayEnabled\");\r\n            } else {\r\n                DataManager.hideDataElements(\"helpAutoplayDisabled\");\r\n            }\r\n\r\n            if (!AppContext.gameConfiguration.ShowHomeButton) {\r\n                DataManager.hideDataElements(\"gameHomeBtn\");\r\n            }\r\n\r\n            if (!AppContext.gameConfiguration.ShowGameRoundsHistory) {\r\n                DataManager.hideDataElements(\"historyBtn\");\r\n                DataManager.hideDataElements(\"helpHistoryBtn\");\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.ExpirationResolveHours > 0) {\r\n                DataManager.updateDataElement(\r\n                    GameData.DataExpirationResolveHours,\r\n                    AppContext.gameConfiguration.ExpirationResolveHours.toString(),\r\n                );\r\n            } else {\r\n                DataManager.hideDataElements(\"expirationResolveHours\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static setDataElements(cls: string, text: string): void {\r\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\r\n        for (var i: number = 0; i < elements.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>elements[i];\r\n            if (element != null) {\r\n                element.innerHTML = text;\r\n            }\r\n        }\r\n    }\r\n\r\n    static hideDataElements(cls: string): void {\r\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\r\n        for (var i: number = 0; i < elements.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>elements[i];\r\n            if (element != null) {\r\n                element.style.display = \"none\";\r\n            }\r\n        }\r\n    }\r\n\r\n    static showDataElements(cls: string, display: string = \"block\"): void {\r\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\r\n        for (var i: number = 0; i < elements.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>elements[i];\r\n            if (element != null) {\r\n                element.style.display = display;\r\n            }\r\n        }\r\n    }\r\n\r\n    static cleanUpElements(): void {\r\n        var elements: HTMLCollectionOf<Element>;\r\n        if (AppContext != null && AppContext.gameConfiguration != null && AppContext.gameConfiguration.UseCoins) {\r\n            elements = document.getElementsByClassName(\"useCoinsFalse\");\r\n        } else {\r\n            elements = document.getElementsByClassName(\"useCoinsTrue\");\r\n        }\r\n\r\n        if (elements != null && elements.length > 0) {\r\n            while (elements.length > 0) {\r\n                elements[0].parentNode.removeChild(elements[0]);\r\n            }\r\n        }\r\n\r\n        if (AppContext.gameConfiguration.UseJackpotLocalization) {\r\n            elements = document.getElementsByClassName(\"helpJackpotB\");\r\n        } else {\r\n            elements = document.getElementsByClassName(\"helpJackpotJ\");\r\n        }\r\n\r\n        if (elements != null && elements.length > 0) {\r\n            while (elements.length > 0) {\r\n                elements[0].parentNode.removeChild(elements[0]);\r\n            }\r\n        }\r\n\r\n        elements = document.getElementsByClassName(\"settingTabItem\");\r\n        let hideSettingsButton = true;\r\n        for (let i = 0; i < elements.length; i++) {\r\n            if ((<HTMLElement>elements[i]).style.display != \"none\") {\r\n                hideSettingsButton = false;\r\n            }\r\n        }\r\n\r\n        if (hideSettingsButton) {\r\n            elements = document.getElementsByClassName(\"settingsBtn\");\r\n            if (elements != null && elements.length > 0) {\r\n                while (elements.length > 0) {\r\n                    elements[0].parentNode.removeChild(elements[0]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static addTrustedUserAction(actionId: string): void {\r\n        if (DataManager.TrustedUserActions.indexOf(actionId) == -1) {\r\n            const groupActionId = DataManager.getGroupActionId(actionId);\r\n\r\n            DataManager.TrustedUserActions.push(groupActionId);\r\n        }\r\n    }\r\n\r\n    static getTrustedUserAction(groupActionId: string): boolean {\r\n        const index = DataManager.TrustedUserActions.indexOf(groupActionId);\r\n        if (index == -1) {\r\n            return false;\r\n        } else {\r\n            DataManager.TrustedUserActions.splice(index, 1);\r\n            return true;\r\n        }\r\n    }\r\n\r\n    private static getGroupActionId(actionId: string): string {\r\n        let result = actionId;\r\n        switch (actionId) {\r\n            case \"BET_PLUS\":\r\n            case \"BET_MINUS\":\r\n            case \"BET_CYCLE\":\r\n            case \"MAX_BET\":\r\n            case \"COIN_SIZE_PLUS\":\r\n            case \"COIN_SIZE_PLUS_CYCLE\":\r\n            case \"COIN_SIZE_MINUS\":\r\n            case \"PAYLINE_COUNT_PLUS\":\r\n            case \"PAYLINE_COUNT_PLUS_CYCLE\":\r\n            case \"PAYLINE_COUNT_MINUS\":\r\n                result = \"BET_CHANGE\";\r\n                break;\r\n            case \"SPIN\":\r\n                result = \"SPIN\";\r\n                break;\r\n            case \"SPIN_OR_STOP\":\r\n                if (HtmlController.ActionElements[\"SPIN_STOP\"] != null) {\r\n                    const btn = HtmlController.ActionElements[\"SPIN_STOP\"][0] as HtmlButtonElement;\r\n                    if (btn != null && btn.instance.classList.contains(\"_disabled\")) {\r\n                        result = \"SPIN\";\r\n                    }\r\n                }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    static stopAutoplayIfLossLimit(): void {\r\n        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n            return;\r\n        }\r\n\r\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\r\n        if (GameManager.baseResponse != null && GameManager.baseResponse.totalWin > 0) {\r\n            lossLimit += GameManager.baseResponse.totalWin;\r\n        }\r\n\r\n        if (lossLimit - BetManager.Bet < 0) {\r\n            DataManager.Autoplay = false;\r\n        }\r\n    }\r\n\r\n    static updateLossLimit(win: number = 0): void {\r\n        if (DataManager.AutoplayLossLimit === \"∞\") {\r\n            return;\r\n        }\r\n\r\n        let lossLimit: number = parseFloat(DataManager.AutoplayLossLimit);\r\n\r\n        if (win > 0) {\r\n            lossLimit += win;\r\n        } else {\r\n            if (BetManager.Bet != null) {\r\n                lossLimit = NumberUtils.toNumber(NumberUtils.subtract(lossLimit, BetManager.Bet));\r\n            }\r\n        }\r\n\r\n        DataManager.AutoplayLossLimit = lossLimit + \"\";\r\n    }\r\n\r\n    static stopAutoplayIfWinLimit(): boolean {\r\n        if (!DataManager.Autoplay) {\r\n            return false;\r\n        }\r\n\r\n        if (DataManager.AutoplayWinLimit == \"∞\") {\r\n            return false;\r\n        } else {\r\n            if (\r\n                GameManager.gameResponse != null &&\r\n                GameManager.gameResponse.totalWin > 0 &&\r\n                GameManager.gameResponse.totalWin >= parseFloat(DataManager.AutoplayWinLimit)\r\n            ) {\r\n                DataManager.Autoplay = false;\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n\r\n    static gameState(state: string): void {\r\n        if (AppContext.clientHost) {\r\n            const messageId = GameManager.gameResponse.messageId;\r\n            const unpaidWin = GameManager.gameResponse.totalWin;\r\n            const gameRoundId = GameManager.gameResponse.roundId;\r\n            let gameEvent: any;\r\n            switch (state) {\r\n                case \"PrimaryGameEscrow\":\r\n                    gameEvent = GameEvents.PrimaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"PrimaryGameStarted\":\r\n                    gameEvent = GameEvents.PrimaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"PrimaryGameEnded\":\r\n                    gameEvent = GameEvents.PrimaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameEntered\":\r\n                    gameEvent = GameEvents.SecondaryGameEntered(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameEscrow\":\r\n                    gameEvent = GameEvents.SecondaryGameEscrow(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameStarted\":\r\n                    gameEvent = GameEvents.SecondaryGameStarted(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"GameCollectEscrow\":\r\n                    gameEvent = GameEvents.GameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameCollectEscrow\":\r\n                    gameEvent = GameEvents.SecondaryGameCollectEscrow(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameEnded\":\r\n                    gameEvent = GameEvents.SecondaryGameEnded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"GameEnded\":\r\n                    gameEvent = GameEvents.GameEnded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"SecondaryGameHalved\":\r\n                    gameEvent = GameEvents.SecondaryGameHalved(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"AutoPlayStarted\":\r\n                    gameEvent = GameEvents.AutoPlayStarted(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"AutoPlayEnded\":\r\n                    gameEvent = GameEvents.AutoPlayEnded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"GamePlayDisabled\":\r\n                    gameEvent = GameEvents.GamePlayDisabled(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"GamePlayEnabled\":\r\n                    gameEvent = GameEvents.GamePlayEnabled(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"GameLoaded\":\r\n                    gameEvent = GameEvents.GameLoaded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"BonusGameEnded\":\r\n                    gameEvent = GameEvents.BonusGameEnded(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"BonusGameEscrow\":\r\n                    gameEvent = GameEvents.BonusGameEscrow(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"BonusGameStarted\":\r\n                    gameEvent = GameEvents.BonusGameStarted(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n                case \"BonusGameTriggered\":\r\n                    gameEvent = GameEvents.BonusGameTriggered(messageId, unpaidWin, gameRoundId);\r\n                    break;\r\n            }\r\n\r\n            if (gameEvent != null) {\r\n                AppContext.clientHost.notifyEventFromGame(gameEvent);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"DataManager\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/DataManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\r\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\r\nimport { Controller } from \"../GameComponents/Controller\";\r\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\r\nimport { GameClient } from \"neo-games/Engine/Communication/Game/GameClient\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { BetManager } from \"./BetManager\";\r\nimport { BalanceManager } from \"./BalanceManager\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { DataManager } from \"./DataManager\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\r\nimport { GameApp } from \"../GameApp\";\r\nimport { ResponsibleDialog1 } from \"../Channels/Common/Dialogs/ResponsibleDialog1\";\r\nimport { Game } from \"neo-games/Engine/Communication/index\";\r\nimport { MessageManager } from \"./MessageManager\";\r\nimport { SimilarGames } from \"../Channels/Common/SimilarGames/SimilarGames\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { LimitDialog } from \"../Channels/Common/Dialogs/LimitDialog\";\r\n\r\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { NotificationManager } from \"./NotificationManager\";\r\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\r\n\r\nimport { SessionTimer } from \"../Channels/Common/Platforms/Playtech/SessionTimer\";\r\nimport { SplashScreen } from \"../CustomComponents/SplashScreen\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\r\n\r\ntype InitResponse = Communication.Game.InitResponse;\r\ntype GameResponse = Communication.Game.GameResponse;\r\ntype GameModuleBaseResponse = Communication.Game.GameModuleBaseResponse;\r\ntype GameModuleGambleResponse = Communication.Game.GameModuleGambleResponse;\r\ntype GameModuleBonusRespinsResponse = Communication.Game.GameModuleBonusRespinsResponse;\r\ntype FreeRoundsOffersRequest = Communication.Game.FreeRoundsOffersRequest;\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\nexport class GameManager {\r\n    private static _app: GameEngine.IApp;\r\n    private static _gameClient: GameClient;\r\n    private static _collectModule: string = GameModules.Base;\r\n\r\n    static gameResponse: GameResponse;\r\n    static baseResponse: GameModuleBaseResponse;\r\n    static gambleResponse: GameModuleGambleResponse;\r\n    static bonusRespinsResponse: GameModuleBonusRespinsResponse;\r\n\r\n    static requestSend: boolean = false;\r\n\r\n    static exitOnCollect: boolean = false;\r\n\r\n    static disableOnCollect: boolean = false;\r\n    static disableGamePlay: boolean = false;\r\n\r\n    static dontEnableGamePlay: boolean = false;\r\n\r\n    public static get gameClient(): Communication.Game.GameClient {\r\n        return GameManager._gameClient;\r\n    }\r\n\r\n    static startGame(gameClient: Communication.Game.GameClient, app: GameEngine.IApp): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"startGame\");\r\n        }\r\n\r\n        ArgValidator.ensureIsNotNullOrUndefined(gameClient, \"gameClient\");\r\n        GameManager._gameClient = gameClient;\r\n        GameManager._gameClient.onErrorResponse = GameManager.errorReceived;\r\n        DataManager.BackSoundsPlayingFromGame =\r\n            AppContext.current.isBackgroundMusicEnabled && AppContext.current.getBackgroundMusic();\r\n        NotificationManager.initialize();\r\n\r\n        GameManager._app = app;\r\n\r\n        if (ModuleManager.connectModules()) {\r\n            if (FreeRoundBonus.wasInitialized) {\r\n                GameManager.init();\r\n            } else {\r\n                setTimeout(() => {\r\n                    GameManager.init();\r\n                }, 3000);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                GameManager.log(\"ERROR cant connect channel and game modules\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static showGame(): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"showGame\");\r\n        }\r\n\r\n        var loading: HTMLElement = document.getElementById(\"loading\");\r\n        var canvas: HTMLElement = document.getElementById(\"canvas\");\r\n\r\n        if (loading != null && canvas != null) {\r\n            Scaling.onLoadComplete();\r\n            Jackpot.show();\r\n            RetentionPanel.show();\r\n            Paytable.openAtStart();\r\n\r\n            //showGame is called after prepare new game and showFreeRounds, so if we have game then close frb\r\n            if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\r\n                FreeRoundBonus.disableUi();\r\n            }\r\n\r\n            DataManager.cleanUpElements();\r\n            loading.style.display = \"none\";\r\n            canvas.style.display = \"block\";\r\n            DataManager.updateDataElements();\r\n        } else {\r\n            if (DEBUG) {\r\n                GameManager.log(\"ERROR loading or canvas doesnt exist\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static setupGame(response: InitResponse): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"setupGame\");\r\n        }\r\n\r\n        GameManager.parseResponses(response);\r\n        DataManager.updateResponseData(true);\r\n        ModuleManager.initModules();\r\n        DataManager.SimilarGames = new SimilarGames();\r\n        DataManager.SimilarGames.initialize();\r\n        FreeRoundBonus.showFreeRounds();\r\n    }\r\n\r\n    static init(): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"init\");\r\n        }\r\n\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        } else {\r\n            GameManager.requestSend = true;\r\n        }\r\n\r\n        DataManager.getServerTime();\r\n        DataManager.controlAutoplay();\r\n        FreeRoundBonus.initializeFreeRounds();\r\n        Jackpot.initialize();\r\n        GameManager._gameClient.init().then((response: InitResponse) => {\r\n            GameManager.initReceived(response);\r\n        });\r\n    }\r\n\r\n    static softInit(): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"soft init\");\r\n        }\r\n\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        } else {\r\n            GameManager.requestSend = true;\r\n        }\r\n\r\n        DataManager.controlAutoplay();\r\n        GameManager._gameClient.init().then((response: InitResponse) => {\r\n            GameManager.softInitReceived(response);\r\n        });\r\n    }\r\n\r\n    static collect(module: string): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"collect module: \" + module);\r\n        }\r\n\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        } else {\r\n            GameManager.requestSend = true;\r\n        }\r\n\r\n        if (!AppContext.gameDefinition.Gamble) {\r\n            DataManager.Collectable = true;\r\n        }\r\n\r\n        GameManager.canExit();\r\n\r\n        this._collectModule = module;\r\n\r\n        DataManager.controlAutoplay();\r\n        if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n            GameManager.gameClient.collect().then(GameManager.collectReceived);\r\n        }\r\n    }\r\n\r\n    static initReceived(response: InitResponse): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"initReceived\");\r\n        }\r\n\r\n        if (Utils.isNullOrUndefined(response)) {\r\n            if (DEBUG) {\r\n                GameManager.log(\"initReceived NULL response (error in send?)\");\r\n            }\r\n            return;\r\n        }\r\n\r\n        DataManager.showTime();\r\n        if (!Utils.isNullOrUndefined(AppContext.gameConfiguration.GUIShowSessionTimeStartValue)) {\r\n            DataManager.showSessionTime(AppContext.gameConfiguration.GUIShowSessionTimeStartValue);\r\n        } else {\r\n            DataManager.showSessionTime(0);\r\n        }\r\n\r\n        if (SplashScreen.suspendInitReceived(response)) {\r\n            return;\r\n        }\r\n\r\n        MessageManager.postpone(GameManager.continueInitReceived, response);\r\n    }\r\n\r\n    static continueInitReceived(response: InitResponse): void {\r\n        GameManager.setupGame(response);\r\n        GameManager.showGame();\r\n\r\n        SplashScreen.hideSplashScreen();\r\n\r\n        Platforms.Platforms.gameDataLoaded({\r\n            PlayerTokenId: AppContext.gameConfiguration.PlayerTokenId,\r\n            HomeUrl: AppContext.gameConfiguration.ExitUrl,\r\n            ClientToken: AppContext.gameConfiguration.ClientToken,\r\n            GameName: GameApp.key,\r\n            SessionData: {\r\n                SessionBalance: AppContext.gameConfiguration.SessionBalance,\r\n                TotalWin: AppContext.gameConfiguration.TotalWin,\r\n                TotalBet: AppContext.gameConfiguration.TotalBet,\r\n            },\r\n            CurrencyCode: response.initData.currency != null ? response.initData.currency : \"\",\r\n            Balance: GameManager.gameResponse.balance.real,\r\n            Bet: BetManager.Bet,\r\n        });\r\n\r\n        Platforms.Platforms.rendererType(StageController.Renderer instanceof PIXI.CanvasRenderer ? \"canvas\" : \"webGL\");\r\n        DataManager.gameState(\"GameLoaded\");\r\n\r\n        GameManager.requestSend = false;\r\n\r\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n                ModuleManager.collect(GameModules.Base);\r\n            }\r\n        }\r\n    }\r\n\r\n    static softInitReceived(response: InitResponse): void {\r\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n        DataManager.updateGameDataFromModule(GameData.DataTotalWin, \"0\");\r\n        LimitDialog.closeDialog();\r\n\r\n        GameManager.parseResponses(response);\r\n        DataManager.updateResponseData(true);\r\n        GameManager.requestSend = false;\r\n        ModuleManager.restoreGameRound(GameModules.Base);\r\n        FreeRoundBonus.openOther();\r\n    }\r\n\r\n    static collectReceived(response: GameResponse): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"collectReceived\");\r\n        }\r\n\r\n        MessageManager.postpone(GameManager.continueCollectReceived, response);\r\n    }\r\n\r\n    static continueCollectReceived(response: GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n            ModuleManager.collectInModule(GameManager._collectModule);\r\n            GameManager.canExit();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    static errorReceived(apiError: ApiClientCommunication.Types.ApiClientError): void {\r\n        let requestName: string = (apiError.requestInfo.request as any).constructor.name;\r\n        if (requestName === \"FreeRoundsOffersRequest\") {\r\n            FreeRoundBonus.wasInitialized = true;\r\n            return;\r\n        }\r\n\r\n        if (DEBUG) {\r\n            GameManager.log(\"errorReceived\");\r\n        }\r\n\r\n        // mute sounds and remove focus handling\r\n        window.onblur = null;\r\n        window.onfocus = null;\r\n        PIXI.sound.muteAll();\r\n\r\n        let localizedText = \"\";\r\n        let isError = true;\r\n        let code = apiError.httpStatusCode.toString();\r\n        let customData: DialogOpenData = {\r\n            special: false,\r\n            gameRoundId: Utils.valueOrDefault(DataManager.getDataById(\"ROUND_ID\"), \"0\"),\r\n            errorId: Utils.isNullOrUndefined(apiError.error) ? \"\" : apiError.error.errorId,\r\n            actions: Utils.isNullOrUndefined(apiError.error) ? [] : apiError.error[\"actions\"], //ToDo Dostat to do ApiClientCommunication.Types.ApiClientError\r\n        };\r\n\r\n        let ignoreShowDialog = false;\r\n        let hasMessages = false;\r\n        let callbackFnc: ((arg: any) => void) | null = null;\r\n        let isFatalError = true;\r\n\r\n        if (apiError.error) {\r\n            let resource = \"ERROR_\" + apiError.httpStatusCode + \"_\" + apiError.error.code;\r\n            code = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n            localizedText = Languages.getRid(resource);\r\n\r\n            hasMessages = apiError.error.messages != null;\r\n\r\n            if (localizedText == null) {\r\n                resource = \"ERROR_\" + apiError.httpStatusCode;\r\n                code = apiError.httpStatusCode.toString();\r\n                localizedText = Languages.getRid(resource);\r\n            }\r\n\r\n            // errors displayed as info messages with \"Reload\" button\r\n            if (\r\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1009) ||\r\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2005) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2013) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2014) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2017) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2018)\r\n            ) {\r\n                customData.special = true;\r\n                customData.errorId = \"\";\r\n                isError = false;\r\n            }\r\n\r\n            // errors displayed as info messages with \"Close\" button\r\n            if (\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2001) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2002) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2012)\r\n            ) {\r\n                (<any>customData).ultraSpecial = true;\r\n            }\r\n\r\n            // errors with server message shown instead of resource message\r\n            if (\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2015) ||\r\n                (apiError.httpStatusCode === 500 && apiError.error.code === 2016)\r\n            ) {\r\n                code = \"\";\r\n                localizedText = apiError.error.message;\r\n            }\r\n\r\n            // extend FRB error message with \"collect partial\" msg\r\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2017) {\r\n                //expired FRB offer\r\n                if (FreeRoundBonus.collectPartial) {\r\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_ALLOWED\");\r\n                } else {\r\n                    localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n                }\r\n            }\r\n\r\n            // extend FRB error message with \"collect partial not allowed\" msg\r\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2018) {\r\n                //canceled FRB offer\r\n                localizedText += Languages.getRid(\"FRB_COLLECT_PARTIAL_NOT_ALLOWED\");\r\n            }\r\n\r\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2019) {\r\n                //playtech ignored error but messages are allowed\r\n                if (!hasMessages) {\r\n                    ignoreShowDialog = true;\r\n                }\r\n                callbackFnc = MessageManager.callbackFnc;\r\n                isFatalError = false;\r\n            }\r\n\r\n            if (\r\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1011) ||\r\n                (apiError.httpStatusCode === 400 && apiError.error.code === 1012)\r\n            ) {\r\n                let spbSufix = AppContext.gameConfiguration.UseJackpotLocalization ? \"_J\" : \"\";\r\n                localizedText = Languages.getRid(resource + spbSufix);\r\n            }\r\n\r\n            if (apiError.httpStatusCode === 500 && apiError.error.code === 2020) {\r\n                //playtech session timer\r\n                SessionTimer.postpone(SessionTimer.callbackFnc, SessionTimer.prepareData(apiError.error));\r\n                return;\r\n            }\r\n        } else {\r\n            // errors displayed as info messages with \"Close\" button\r\n            if (apiError.httpStatusCode === 401) {\r\n                (<any>customData).ultraSpecial = true;\r\n            }\r\n\r\n            let resource = \"ERROR_\" + apiError.httpStatusCode.toString();\r\n            localizedText = Languages.getRid(resource);\r\n        }\r\n\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\r\n                \"GameManager\",\r\n                `[errorReceived] calling ` +\r\n                    `AppContext.current.showDialog('${localizedText}', ${isError}, '${code}', \r\n                    ${customData.errorId}, ${customData.gameRoundId}, ${JSON.stringify(customData)})`,\r\n            );\r\n        }\r\n\r\n        if (isError) {\r\n            let error_code_for_platforms = apiError.httpStatusCode.toString();\r\n            if (apiError.error) {\r\n                error_code_for_platforms = [apiError.httpStatusCode.toString(), apiError.error.code].join(\"-\");\r\n            }\r\n            Platforms.Platforms.error(error_code_for_platforms, localizedText);\r\n            if (isFatalError) {\r\n                Jackpot.showError();\r\n                NotificationManager.disconnect();\r\n            }\r\n        }\r\n\r\n        //if platform shows dialog itself, skip showing error dialog in our game window\r\n        if (Platforms.Platforms.handleShowErrorDialog || ignoreShowDialog) {\r\n            return;\r\n        }\r\n\r\n        if (hasMessages) {\r\n            MessageManager.postpone(callbackFnc, apiError.error);\r\n        } else {\r\n            AppContext.current.showDialog(\r\n                localizedText,\r\n                isError,\r\n                code,\r\n                customData.errorId,\r\n                customData.gameRoundId,\r\n                customData,\r\n            );\r\n        }\r\n    }\r\n\r\n    static parseResponses(response: GameResponse): void {\r\n        if (DEBUG) {\r\n            GameManager.log(\"parseResponses\");\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.gameResponse = response;\r\n            if (response.module<GameModuleBaseResponse>(GameModules.Base) != null) {\r\n                GameManager.baseResponse = response.module<GameModuleBaseResponse>(GameModules.Base);\r\n            } else {\r\n                GameManager.baseResponse = null;\r\n            }\r\n\r\n            if (response.module<GameModuleGambleResponse>(GameModules.Gamble) != null) {\r\n                GameManager.gambleResponse = response.module<GameModuleGambleResponse>(GameModules.Gamble);\r\n            } else {\r\n                GameManager.gambleResponse = null;\r\n            }\r\n            if (response.module<GameModuleBonusRespinsResponse>(GameModules.BonusRespins) != null) {\r\n                GameManager.bonusRespinsResponse = response.module<GameModuleBonusRespinsResponse>(\r\n                    GameModules.BonusRespins,\r\n                );\r\n            } else {\r\n                GameManager.bonusRespinsResponse = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    static collectable(): boolean {\r\n        if (ModuleManager.gambleActive()) {\r\n            return false;\r\n        }\r\n\r\n        if (FreeRoundBonus.endMsgDisplayed) {\r\n            return false;\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame()) {\r\n            return false;\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && DataManager.Collectable) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    static canExit(exit: boolean = false): boolean {\r\n        let canExit = GameManager.collectable();\r\n\r\n        if (DEBUG) {\r\n            console.log(`GameManager.canExit(exit: ${exit}) -> afterCollect: ${canExit}`);\r\n        }\r\n\r\n        if (\r\n            /*canExit && */ !exit &&\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n            ResponsibleDialog1.responsibleDialog1Data != null &&\r\n            !FreeRoundBonus.isLastFrb\r\n        ) {\r\n            DataManager.Autoplay = false;\r\n            DataManager.AutoplayAfterGamble = false;\r\n            ResponsibleDialog1.openDialog(ResponsibleDialog1.responsibleDialog1Data);\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n            ResponsibleDialog1.responsibleDialog1Data = null;\r\n            ModuleManager.disableBase();\r\n            ModuleManager.disableGamble();\r\n            ModuleManager.resetWinAnimator(GameModules.Base);\r\n        }\r\n\r\n        if (GameManager.exitOnCollect && canExit) {\r\n            if (DEBUG) {\r\n                console.log(\r\n                    `GameManager.canExit(exit: ${exit}) -> manuall call of GameApp.exit() ` +\r\n                        `because of GameManager.exitOnCollect = ${GameManager.exitOnCollect}`,\r\n                );\r\n            }\r\n            GameApp.exit();\r\n            return false;\r\n        }\r\n        if (canExit && exit) {\r\n            return canExit;\r\n        } else {\r\n            if (!GameManager.exitOnCollect && exit) {\r\n                if (DEBUG) {\r\n                    console.log(\r\n                        `GameManager.canExit(exit: ${exit}) -> ` +\r\n                            `changing GameManager.exitOnCollect(${GameManager.exitOnCollect}) to value '${exit}'`,\r\n                    );\r\n                }\r\n\r\n                GameManager.exitOnCollect = true; //exit;\r\n            }\r\n        }\r\n\r\n        if (DEBUG) {\r\n            console.log(`GameManager.canExit(exit: ${exit}) -> returns: ${canExit}`);\r\n        }\r\n\r\n        return canExit;\r\n    }\r\n\r\n    static showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\r\n        if (GameManager.canExit()) {\r\n            DataManager.Autoplay = false;\r\n            DataManager.AutoplayAfterGamble = false;\r\n            ResponsibleDialog1.openDialog(data);\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n            ResponsibleDialog1.responsibleDialog1Data = null;\r\n            ModuleManager.disableBase();\r\n            ModuleManager.disableGamble();\r\n            ModuleManager.resetWinAnimator(GameModules.Base);\r\n        } else {\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect = true;\r\n            ResponsibleDialog1.responsibleDialog1Data = data;\r\n        }\r\n    }\r\n\r\n    static disablePlay(): void {\r\n        GameManager.disableOnCollect = true;\r\n        if (GameManager.collectable()) {\r\n            GameManager.disableGamePlay = true;\r\n            ModuleManager.disableBase();\r\n            DataManager.gameState(\"GamePlayDisabled\");\r\n        }\r\n    }\r\n\r\n    static enablePlay(): void {\r\n        GameManager.disableOnCollect = false;\r\n        GameManager.disableGamePlay = false;\r\n        if (!GameManager.dontEnableGamePlay) {\r\n            ModuleManager.restoreGameRound(GameModules.Base);\r\n        }\r\n        DataManager.gameState(\"GamePlayEnabled\");\r\n    }\r\n\r\n    static openConfirmationDialog(module: string, text: string): void {\r\n        const dialogData = {\r\n            text: text,\r\n            actions: [\r\n                {\r\n                    type: \"restore\",\r\n                    text: Languages.getRid(\"CONTINUE\"),\r\n                    customData: module,\r\n                },\r\n            ],\r\n            special: true,\r\n        };\r\n        ModuleManager.disableChannelModule(module);\r\n        AppContext.current.showDialog(text, false, null, null, null, dialogData);\r\n    }\r\n\r\n    static closeResponsibleDialog1(): void {\r\n        GameManager.requestSend = false;\r\n        ResponsibleDialog1.showResponsibleDialog1OnCollect = false;\r\n        ModuleManager.restoreGameRound(GameModules.Base);\r\n    }\r\n\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"GameManager\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/GameManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { GameManager } from \"./GameManager\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { DataManager } from \"./DataManager\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { HtmlDenomContainerElement } from \"../HTMLComponents/Custom/HtmlDenomContainerElement\";\r\nimport { BalanceManager } from \"./BalanceManager\";\r\nimport { HtmlBetSelectorContainerElement } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { HtmlBetSelectorContainerElement2 } from \"../HTMLComponents/Custom/HtmlBetSelectorContainerElement2\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\r\n\r\nvar SpinBet = Communication.Game.SpinBet;\r\nvar BetType = Communication.Game.BetType;\r\n\r\nexport class BetManager {\r\n    static CoinSize: number;\r\n    static CoinCount: number;\r\n    static Bet: number;\r\n\r\n    static Coins: { [coinSize: number]: Array<number> };\r\n    static TotalBets: Array<number>;\r\n\r\n    static DenomContainer: HtmlDenomContainerElement;\r\n    static CoinCountContainer: HtmlBetSelectorContainerElement;\r\n    static BetContainer: HtmlBetSelectorContainerElement2;\r\n\r\n    static minBet: boolean = false;\r\n    static maxBet: boolean = false;\r\n\r\n    static initializeBet(): void {\r\n        if (AppContext.current.getHideAmounts()) {\r\n            this.hideValues(true);\r\n        }\r\n        if (GameManager.baseResponse.initData != null) {\r\n            if (\r\n                GameManager.baseResponse.initData.betSettings != null &&\r\n                GameManager.baseResponse.initData.betSettings.totalBets != null\r\n            ) {\r\n                BetManager.TotalBets = GameManager.baseResponse.initData.betSettings.totalBets;\r\n            }\r\n\r\n            if (\r\n                GameManager.baseResponse.initData.betSettings != null &&\r\n                GameManager.baseResponse.initData.betSettings.coins != null\r\n            ) {\r\n                BetManager.Coins = GameManager.baseResponse.initData.betSettings.coins;\r\n            }\r\n\r\n            if (\r\n                GameManager.baseResponse.initData.lastBet != null &&\r\n                GameManager.baseResponse.initData.lastBet.betType === BetType.Total\r\n            ) {\r\n                if (\r\n                    GameManager.baseResponse.initData.lastBet.totalBet != null &&\r\n                    !AppContext.gameConfiguration.UseCoins\r\n                ) {\r\n                    if (\r\n                        BetManager.Bet != null &&\r\n                        BetManager.Bet !== GameManager.baseResponse.initData.lastBet.totalBet\r\n                    ) {\r\n                        ModuleManager.initNewBet();\r\n                    } else {\r\n                        ModuleManager.initNewBet(false);\r\n                    }\r\n                    BetManager.Bet = BetHigherThanMinDialog.getGameStartedWithoutFeature()\r\n                        ? BetManager.TotalBets[0]\r\n                        : GameManager.baseResponse.initData.lastBet.totalBet;\r\n                    BetManager.updateBetPosition();\r\n                    DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n                } else {\r\n                    if (!DataManager.GameRoundClosed) {\r\n                        if (GameManager.baseResponse.initData.lastBet.coinSize != null) {\r\n                            BetManager.CoinSize = GameManager.baseResponse.initData.lastBet.coinSize;\r\n                            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n                        }\r\n                        if (GameManager.baseResponse.initData.lastBet.coinCount != null) {\r\n                            BetManager.CoinCount = parseInt(\r\n                                GameManager.baseResponse.initData.lastBet.coinCount.toString(),\r\n                            );\r\n                            DataManager.updateGameDataFromModule(\r\n                                GameData.DataCointCount,\r\n                                BetManager.CoinCount.toString(),\r\n                            );\r\n                        }\r\n                        if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n                            BetManager.Bet = parseFloat(\r\n                                NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount),\r\n                            );\r\n                            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n                        }\r\n                        BalanceManager.recalculateDenomBalance();\r\n                    } else if (AppContext.current.getDenomination() != null && BetManager.Coins != null) {\r\n                        if (BetManager.Coins[AppContext.current.getDenomination()] != null) {\r\n                            BetManager.changeDenom(AppContext.current.getDenomination(), true);\r\n                        } else {\r\n                            BetManager.changeDefaultDenom();\r\n                        }\r\n                    } else {\r\n                        BetManager.changeDefaultDenom();\r\n                    }\r\n                    if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n                        BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n                        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (BetManager.DenomContainer != null) {\r\n                BetManager.DenomContainer.addValues();\r\n            }\r\n\r\n            if (BetManager.CoinCountContainer != null) {\r\n                BetManager.CoinCountContainer.addValues();\r\n            }\r\n\r\n            if (BetManager.BetContainer != null) {\r\n                BetManager.BetContainer.addValues();\r\n            }\r\n        }\r\n    }\r\n\r\n    static changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\r\n        BetHigherThanMinDialog.closeDialog(true);\r\n        if (DataManager.GameRoundClosed) {\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n\r\n        BetManager.unHideValues();\r\n\r\n        if (AppContext.gameConfiguration.UseCoins) {\r\n            if (cycle) {\r\n                BetManager.cycleCoinCount();\r\n                return;\r\n            } else if (max) {\r\n                BetManager.maxCoinCount();\r\n                return;\r\n            }\r\n        }\r\n\r\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\r\n        var real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\r\n\r\n        if (BetManager.Bet != null && BetManager.TotalBets != null && BetManager.TotalBets.length > 0) {\r\n            var index: number;\r\n            for (var i: number = 0; i < BetManager.TotalBets.length; i++) {\r\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n                    index = i;\r\n                }\r\n            }\r\n            if (index != null) {\r\n                if (decrease) {\r\n                    if (index === 0) {\r\n                        if (cycle) {\r\n                            index = BetManager.TotalBets.length - 1;\r\n                        }\r\n                    } else {\r\n                        index--;\r\n                    }\r\n                } else {\r\n                    if (max) {\r\n                        var findMax: boolean = false;\r\n\r\n                        if (!findMax) {\r\n                            for (var jj: number = BetManager.TotalBets.length - 1; jj >= 0; jj--) {\r\n                                if (BetManager.TotalBets[jj] <= bonus && findMax === false) {\r\n                                    findMax = true;\r\n                                    index = jj;\r\n                                }\r\n                                if (BetManager.TotalBets[jj] <= real && findMax === false) {\r\n                                    findMax = true;\r\n                                    index = jj;\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (index === BetManager.TotalBets.length - 1) {\r\n                            if (cycle) {\r\n                                index = 0;\r\n                            }\r\n                        } else {\r\n                            index++;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                BetManager.Bet = BetManager.TotalBets[index];\r\n\r\n                if (bonus != null) {\r\n                    if (bonus >= BetManager.Bet) {\r\n                        ModuleManager.changeBetColor(true);\r\n                    } else {\r\n                        ModuleManager.changeBetColor();\r\n                    }\r\n                }\r\n\r\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n                DataManager.updateDataElement(GameData.DataBet);\r\n                Platforms.Platforms.bet({\r\n                    totalBet: BetManager.Bet,\r\n                    maxBetAction: max,\r\n                    userAction: DataManager.getTrustedUserAction(\"BET_CHANGE\"),\r\n                });\r\n                BetManager.updateBetPosition();\r\n            }\r\n        }\r\n        BalanceManager.poolingBalance();\r\n    }\r\n\r\n    static sortNumber(a: any, b: any) {\r\n        return a - b;\r\n    }\r\n\r\n    static changeDefaultDenom(): void {\r\n        BetManager.unHideValues();\r\n\r\n        if (BetManager.Coins != null) {\r\n            let lowestDenom: number;\r\n            for (let key in BetManager.Coins) {\r\n                if (lowestDenom == null) {\r\n                    lowestDenom = parseFloat(key);\r\n                } else {\r\n                    if (parseFloat(key) < lowestDenom) {\r\n                        lowestDenom = parseFloat(key);\r\n                    }\r\n                }\r\n            }\r\n\r\n            BetManager.CoinSize = lowestDenom;\r\n            AppContext.current.setDenomination(BetManager.CoinSize);\r\n\r\n            BetManager.Coins[lowestDenom].sort(BetManager.sortNumber);\r\n\r\n            // let found: boolean = false;\r\n            // for(let i: number = 0; i < BetManager.Coins[value].length; i++) {\r\n            //     if(BetManager.Coins[value][i] === BetManager.CoinCount) {\r\n            //         found = true;\r\n            //     }\r\n            // }\r\n            //\r\n            // if(!found) {\r\n            //     BetManager.CoinCount = BetManager.Coins[value][0];\r\n            // }\r\n\r\n            BetManager.CoinCount = BetManager.Coins[lowestDenom][0];\r\n\r\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\r\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n\r\n            DataManager.updateDataElement(GameData.DataCoinSize);\r\n            DataManager.updateDataElement(GameData.DataCointCount);\r\n            DataManager.updateDataElement(GameData.DataBet);\r\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\r\n            if (BetManager.CoinCountContainer != null) {\r\n                BetManager.CoinCountContainer.addValues();\r\n            }\r\n            BalanceManager.recalculateDenomBalance();\r\n        }\r\n    }\r\n\r\n    static changeDenom(value: number, init: boolean = false): void {\r\n        BetManager.unHideValues();\r\n\r\n        if (BetManager.Coins != null && BetManager.Coins[value] != null) {\r\n            BetManager.CoinSize = value;\r\n            AppContext.current.setDenomination(BetManager.CoinSize);\r\n\r\n            BetManager.Coins[value].sort(BetManager.sortNumber);\r\n\r\n            if (!init && BetManager.CoinCount != null && !AppContext.gameConfiguration.ResetCoinCountOnDenomChange) {\r\n                let found: boolean = false;\r\n                let coinCount: number = BetManager.CoinCount;\r\n                for (let i: number = 0; i < BetManager.Coins[value].length; i++) {\r\n                    if (BetManager.Coins[value][i] <= BetManager.CoinCount) {\r\n                        found = true;\r\n                        coinCount = BetManager.Coins[value][i];\r\n                    }\r\n                }\r\n\r\n                if (!found) {\r\n                    BetManager.CoinCount = BetManager.Coins[value][0];\r\n                } else {\r\n                    BetManager.CoinCount = coinCount;\r\n                }\r\n            } else {\r\n                BetManager.CoinCount = BetManager.Coins[value][0];\r\n            }\r\n\r\n            DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n            DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\r\n            BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n            DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n\r\n            DataManager.updateDataElement(GameData.DataCoinSize);\r\n            DataManager.updateDataElement(GameData.DataCointCount);\r\n            DataManager.updateDataElement(GameData.DataBet);\r\n            Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n\r\n            if (BetManager.CoinCountContainer != null) {\r\n                BetManager.CoinCountContainer.addValues();\r\n            }\r\n            BalanceManager.recalculateDenomBalance();\r\n        }\r\n\r\n        if (DataManager.HelpDataGameLimit != 0) {\r\n            if (\r\n                AppContext != null &&\r\n                AppContext.gameConfiguration != null &&\r\n                AppContext.gameConfiguration.UseCoins &&\r\n                BetManager.CoinSize != null\r\n            ) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataHelpGameLimit,\r\n                    parseInt(\r\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpGameLimit,\r\n                    parseInt(\r\n                        NumberUtils.devide(DataManager.HelpDataGameLimit, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n            }\r\n        }\r\n\r\n        if (DataManager.HelpDataGambleLimit != 0) {\r\n            if (\r\n                AppContext != null &&\r\n                AppContext.gameConfiguration != null &&\r\n                AppContext.gameConfiguration.UseCoins &&\r\n                BetManager.CoinSize != null\r\n            ) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataHelpGambleLimit,\r\n                    parseInt(\r\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n                DataManager.updateDataElement(\r\n                    GameData.DataHelpGambleLimit,\r\n                    parseInt(\r\n                        NumberUtils.devide(DataManager.HelpDataGambleLimit, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    static changeBetByValue(value: number): void {\r\n        BetManager.unHideValues();\r\n        var bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\r\n        BetManager.Bet = value;\r\n\r\n        if (bonus != null) {\r\n            if (bonus >= BetManager.Bet) {\r\n                ModuleManager.changeBetColor(true);\r\n            } else {\r\n                ModuleManager.changeBetColor();\r\n            }\r\n        }\r\n\r\n        DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n        DataManager.updateDataElement(GameData.DataBet);\r\n        Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n        BetManager.updateBetPosition();\r\n    }\r\n\r\n    static changeCoinCount(value: number): void {\r\n        BetManager.unHideValues();\r\n\r\n        if (BetManager.Coins != null) {\r\n            if (BetManager.CoinSize != null) {\r\n                BetManager.CoinCount = value;\r\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\r\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n\r\n                DataManager.updateDataElement(GameData.DataCoinSize);\r\n                DataManager.updateDataElement(GameData.DataCointCount);\r\n                DataManager.updateDataElement(GameData.DataBet);\r\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n            }\r\n        }\r\n    }\r\n\r\n    static cycleCoinCount(): void {\r\n        BetManager.unHideValues();\r\n\r\n        if (BetManager.Coins != null) {\r\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n                let index: number = 0;\r\n                let coinSizes: Array<number> = [];\r\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n                    coinSizes.push(BetManager.Coins[BetManager.CoinSize][i]);\r\n                }\r\n                coinSizes.sort(BetManager.sortNumber);\r\n                for (let i: number = 0; i < coinSizes.length; i++) {\r\n                    if (BetManager.CoinCount === coinSizes[i]) {\r\n                        index = i;\r\n                    }\r\n                }\r\n\r\n                if (coinSizes[index + 1] != null) {\r\n                    BetManager.CoinCount = coinSizes[index + 1];\r\n                } else {\r\n                    BetManager.CoinCount = coinSizes[0];\r\n                }\r\n\r\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\r\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n\r\n                DataManager.updateDataElement(GameData.DataCoinSize);\r\n                DataManager.updateDataElement(GameData.DataCointCount);\r\n                DataManager.updateDataElement(GameData.DataBet);\r\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n            }\r\n        }\r\n    }\r\n\r\n    static maxCoinCount(): void {\r\n        BetManager.unHideValues();\r\n\r\n        if (BetManager.Coins != null) {\r\n            if (BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n                let credit: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\r\n                let coinCount: number = BetManager.CoinCount;\r\n\r\n                BetManager.Coins[BetManager.CoinSize].sort(BetManager.sortNumber);\r\n\r\n                for (let i: number = 0; i < BetManager.Coins[BetManager.CoinSize].length; i++) {\r\n                    let bet: number = parseFloat(\r\n                        NumberUtils.multiply(BetManager.CoinSize, BetManager.Coins[BetManager.CoinSize][i]),\r\n                    );\r\n                    if (credit >= bet) {\r\n                        coinCount = BetManager.Coins[BetManager.CoinSize][i];\r\n                    }\r\n                }\r\n\r\n                BetManager.CoinCount = coinCount;\r\n\r\n                DataManager.updateGameDataFromModule(GameData.DataCoinSize, BetManager.CoinSize.toString());\r\n                DataManager.updateGameDataFromModule(GameData.DataCointCount, BetManager.CoinCount.toString());\r\n                BetManager.Bet = parseFloat(NumberUtils.multiply(BetManager.CoinSize, BetManager.CoinCount));\r\n                DataManager.updateGameDataFromModule(GameData.DataBet, BetManager.Bet.toString());\r\n\r\n                DataManager.updateDataElement(GameData.DataCoinSize);\r\n                DataManager.updateDataElement(GameData.DataCointCount);\r\n                DataManager.updateDataElement(GameData.DataBet);\r\n                Platforms.Platforms.bet({ totalBet: BetManager.Bet });\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateBetPosition(): void {\r\n        if (BetManager.TotalBets != null) {\r\n            for (let i: number = 0; i < BetManager.TotalBets.length; i++) {\r\n                if (BetManager.Bet === BetManager.TotalBets[i]) {\r\n                    if (i <= 0) {\r\n                        BetManager.minBet = true;\r\n                        BetManager.maxBet = false;\r\n                    } else if (i >= BetManager.TotalBets.length - 1) {\r\n                        BetManager.minBet = false;\r\n                        BetManager.maxBet = true;\r\n                    } else {\r\n                        BetManager.minBet = false;\r\n                        BetManager.maxBet = false;\r\n                    }\r\n\r\n                    DataManager.updateGameDataFromModule(\r\n                        GameData.DataBetPosition,\r\n                        i + 1 + \"/\" + BetManager.TotalBets.length,\r\n                    );\r\n                    DataManager.updateDataElement(GameData.DataBetPosition);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static unHideValues(credit: boolean = false): void {\r\n        for (let i = 0; i < HtmlController.HideButtons.length; i++) {\r\n            HtmlController.HideButtons[i].unHide(credit);\r\n        }\r\n    }\r\n\r\n    static hideValues(credit: boolean = false): void {\r\n        for (let i = 0; i < HtmlController.HideButtons.length; i++) {\r\n            HtmlController.HideButtons[i].hide(credit);\r\n        }\r\n    }\r\n\r\n    static createBetForSpin(): Communication.Game.SpinBet {\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null && BetManager.CoinCount != null) {\r\n            return new SpinBet(BetType.Total, BetManager.CoinSize, BetManager.CoinCount, null, null);\r\n        } else {\r\n            return new SpinBet(BetType.Total, null, null, null, BetManager.Bet);\r\n        }\r\n    }\r\n\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"BetManager\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BetManager.ts\n **/","import { ArgValidator, Logger, Utils, ApiClientCommunication } from \"neo-common\";\r\nimport { ClientHost, Communication, GameEngine } from \"neo-games\";\r\nimport { GameManager } from \"./GameManager\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { Controller } from \"../GameComponents/Controller\";\r\nimport { UserControls } from \"../Channels/Common/UserControls/UserControls\";\r\nimport { DataManager } from \"./DataManager\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\nvar GameStatuses = Communication.Game.GameModuleStatus;\r\n\r\nexport class ModuleManager {\r\n    private static _gameModules: Object = {};\r\n    private static _channelModules: Object = {};\r\n\r\n    static registerGameModule(key: string, module: Controller): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"registerGameModule \" + key);\r\n        }\r\n\r\n        if (ModuleManager._gameModules[key] == null) {\r\n            ModuleManager._gameModules[key] = module;\r\n        } else {\r\n            if (DEBUG) {\r\n                ModuleManager.log(\"ERROR try to register game module with same key: \" + key);\r\n            }\r\n        }\r\n    }\r\n\r\n    static registerChannelModule(key: string, module: UserControls): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"registerChannelModule \" + key);\r\n        }\r\n\r\n        if (ModuleManager._channelModules[key] == null) {\r\n            ModuleManager._channelModules[key] = module;\r\n        } else {\r\n            if (DEBUG) {\r\n                ModuleManager.log(\"ERROR try to register channel module with same key: \" + key);\r\n            }\r\n        }\r\n    }\r\n\r\n    static connectModules(): boolean {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"connectModules\");\r\n        }\r\n\r\n        let allChannelsHaveController: boolean = true;\r\n\r\n        for (let key in ModuleManager._channelModules) {\r\n            if (ModuleManager._gameModules[key] != null) {\r\n                ModuleManager._channelModules[key].addController(ModuleManager._gameModules[key]);\r\n                if (DEBUG) {\r\n                    ModuleManager.log(\"connect module key: \" + key);\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    ModuleManager.log(\"cant connect module key: \" + key);\r\n                }\r\n                allChannelsHaveController = false;\r\n            }\r\n        }\r\n\r\n        return allChannelsHaveController;\r\n    }\r\n\r\n    static initModules(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"initModules\");\r\n        }\r\n\r\n        for (let key in ModuleManager._channelModules) {\r\n            ModuleManager._channelModules[key].initReceived();\r\n        }\r\n\r\n        if (ModuleManager.gambleActive() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n            ModuleManager._channelModules[GameModules.Gamble].initIntro();\r\n        } else if (ModuleManager.bonusActive() && ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n            ModuleManager._channelModules[GameModules.BonusRespins].initIntro();\r\n        } else {\r\n            if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n                ModuleManager._channelModules[GameModules.Base].initIntro();\r\n            }\r\n        }\r\n    }\r\n\r\n    static gambleEnabled(): boolean {\r\n        if (!AppContext.gameDefinition.Gamble) {\r\n            return false;\r\n        }\r\n\r\n        if (DataManager.Autoplay && !AppContext.gameConfiguration.AutoplayGambleEnabled) {\r\n            return false;\r\n        }\r\n\r\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Enabled) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static gambleActive(): boolean {\r\n        if (!AppContext.gameDefinition.Gamble) {\r\n            return false;\r\n        }\r\n\r\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.status === GameStatuses.Active) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static enableGamble(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"enableGamble\");\r\n        }\r\n\r\n        if (ModuleManager.gambleEnabled() && ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n            ModuleManager._channelModules[GameModules.Gamble].enable();\r\n        }\r\n    }\r\n\r\n    static startGamble(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"startGamble\");\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            ModuleManager.outroModule(GameModules.Base);\r\n        }\r\n    }\r\n\r\n    static disableGamble(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"disableGamble\");\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.Gamble] != null) {\r\n            ModuleManager._channelModules[GameModules.Gamble].disable();\r\n        }\r\n    }\r\n\r\n    static disableBase(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"disableBase\");\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].disable();\r\n        }\r\n    }\r\n\r\n    static enableBonus(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"enableBonusRespins\");\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n            ModuleManager._channelModules[GameModules.BonusRespins].enable();\r\n        }\r\n    }\r\n\r\n    static bonusEnabled(): boolean {\r\n        if (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.status === GameStatuses.Enabled\r\n        ) {\r\n            DataManager.AutoplayCount = \"∞\";\r\n            DataManager.AutoplayLossLimit = \"∞\";\r\n            DataManager.AutoplayWinLimit = \"∞\";\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static bonusActive(): boolean {\r\n        if (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.status === GameStatuses.Active\r\n        ) {\r\n            DataManager.AutoplayCount = \"∞\";\r\n            DataManager.AutoplayLossLimit = \"∞\";\r\n            DataManager.AutoplayWinLimit = \"∞\";\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    static startBonus(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"startBonusRespins\");\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n            ModuleManager._channelModules[GameModules.BonusRespins].start();\r\n        }\r\n    }\r\n\r\n    static endBonus(): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"endBonusRespins\");\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.BonusRespins] != null) {\r\n            ModuleManager._channelModules[GameModules.BonusRespins].end();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Disable channel module\r\n     * @param key\r\n     */\r\n    static disableChannelModule(key: string): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"disable\" + key);\r\n        }\r\n\r\n        if (ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].disable();\r\n        }\r\n    }\r\n\r\n    static changeBetColor(green: boolean = false): void {\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].changeBetColor(green);\r\n        }\r\n    }\r\n\r\n    static initNewBet(animate: boolean = true): void {\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].initNewBet(animate);\r\n        }\r\n    }\r\n\r\n    static introModule(key: string, long: boolean = false): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"introModule key: \" + key);\r\n        }\r\n        if (ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].intro(long);\r\n        }\r\n    }\r\n\r\n    static outroModule(key: string): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"outroModule key: \" + key);\r\n        }\r\n\r\n        if (ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].outro();\r\n        }\r\n    }\r\n\r\n    static collect(key: string): void {\r\n        if (key != null && ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].collect();\r\n        }\r\n    }\r\n\r\n    static collectInModule(key: string): void {\r\n        if (key != null && ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].collectReceived();\r\n        }\r\n    }\r\n\r\n    static restoreGameRound(key: string, collect: boolean = false): void {\r\n        if (key != null && ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].restoreGameRound(collect);\r\n        }\r\n    }\r\n\r\n    static firstWinStep(enable: boolean): void {\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].firstWinStep(enable);\r\n        }\r\n    }\r\n\r\n    static dispatchAction(action: string): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"dispatchAction action: \" + action);\r\n        }\r\n\r\n        for (let key in ModuleManager._channelModules) {\r\n            ModuleManager._channelModules[key].dispatchAction(action);\r\n        }\r\n    }\r\n\r\n    static cycleHelp(): void {\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].cycleHelp();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set autoplay in Base module to true/false.\r\n     * @param {boolean} tf\r\n     */\r\n    static setAutoplayAfterFeature(tf: boolean): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"setAutoplayAfterFeature to \" + tf);\r\n        }\r\n\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            ModuleManager._channelModules[GameModules.Base].setAutoplayAfterFeature(tf);\r\n        }\r\n    }\r\n\r\n    static primaryGameEnded(): boolean {\r\n        if (ModuleManager._channelModules[GameModules.Base] != null) {\r\n            return ModuleManager._channelModules[GameModules.Base].primaryGameEnded();\r\n        }\r\n    }\r\n\r\n    static toggleModuleSounds(key: string, enable: boolean): void {\r\n        if (ModuleManager._gameModules[key] != null) {\r\n            ModuleManager._gameModules[key].toggleSounds(enable);\r\n        }\r\n    }\r\n\r\n    static resetSceneAsOnCollect(key: string): void {\r\n        if (ModuleManager._gameModules[key] != null) {\r\n            ModuleManager._gameModules[key].collect();\r\n        }\r\n    }\r\n\r\n    static resetWinAnimator(key: string): void {\r\n        if (DEBUG) {\r\n            ModuleManager.log(\"resetWinAnimator:\" + key);\r\n        }\r\n\r\n        if (ModuleManager._channelModules[key] != null) {\r\n            ModuleManager._channelModules[key].resetWinAnimator();\r\n        }\r\n    }\r\n\r\n    static getActiveGameModules(): Array<string> {\r\n        let activeModulesArray: Array<string> = [];\r\n        if (GameManager.gameResponse != null && GameManager.gameResponse.modules != null) {\r\n            for (var key in GameManager.gameResponse.modules) {\r\n                if (GameManager.gameResponse.modules[key].status !== GameStatuses.Disabled) {\r\n                    activeModulesArray.push(key);\r\n                }\r\n            }\r\n        }\r\n        return activeModulesArray;\r\n    }\r\n\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"ModuleManager\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/ModuleManager.ts\n **/","import { Logger, NumberUtils } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { GameManager } from \"./GameManager\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { DataManager } from \"./DataManager\";\r\nimport { BetManager } from \"./BetManager\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { CashierDialog } from \"../Channels/Common/Dialogs/CashierDialog\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\n\r\ntype BalanceResponse = Communication.Game.BalanceResponse;\r\nvar GameModules = Communication.Game.GameModules;\r\ntype IBalance = Communication.Game.IBalance;\r\n\r\nexport class BalanceManager {\r\n    private static _poolBalance: boolean = false;\r\n\r\n    static setBalance(): void {\r\n        if (GameManager.gameResponse.balance != null) {\r\n            if (GameManager.gameResponse.balance.real != null) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataBalanceReal,\r\n                    GameManager.gameResponse.balance.real.toString(),\r\n                );\r\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                    DataManager.updateGameDataFromModule(\r\n                        GameData.DataBalanceRealDenom,\r\n                        parseInt(\r\n                            NumberUtils.devide(GameManager.gameResponse.balance.real, BetManager.CoinSize),\r\n                        ).toString(),\r\n                    );\r\n                }\r\n            }\r\n\r\n            if (GameManager.gameResponse.balance.bonus != null) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataBalanceBonus,\r\n                    GameManager.gameResponse.balance.bonus.toString(),\r\n                );\r\n            }\r\n\r\n            if (GameManager.gameResponse.balance.real != null && GameManager.gameResponse.balance.bonus != null) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataBalanceTotal,\r\n                    NumberUtils.add(GameManager.gameResponse.balance.real, GameManager.gameResponse.balance.bonus),\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    static fixBalance(): void {\r\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\r\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\r\n        let realDenom: number = parseFloat(DataManager.getDataById(GameData.DataBalanceRealDenom));\r\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\r\n        let winDenom: number;\r\n        let total: number = parseFloat(NumberUtils.add(bonus, real));\r\n        let bet: number = BetManager.Bet;\r\n        let betDenom: number = BetManager.CoinCount;\r\n        let denom: number = BetManager.CoinSize;\r\n\r\n        if (FreeRoundBonus.inFrb) {\r\n            if (AppContext.gameDefinition.Gamble && FreeRoundBonus.winPayMethod !== \"cumulative\") {\r\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\r\n                    let totalRealBalance: number = DataManager.GameRoundClosed ? real : parseFloat(NumberUtils.add(real, win));\r\n                    let totalBalance: number = DataManager.GameRoundClosed ? total : parseFloat(NumberUtils.add(total, win));\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, totalRealBalance.toString());\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, totalBalance.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, totalBalance.toString());\r\n                }\r\n            } else if (!AppContext.gameDefinition.Gamble && !DataManager.Collectable) {\r\n                if (GameManager.gameResponse != null && GameManager.gameResponse.balance != null) {\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus.toString());\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real.toString());\r\n                    DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, bonus.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceReal, real.toString());\r\n                    DataManager.updateDataElement(GameData.DataBalanceTotal, total.toString());\r\n                }\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (denom != null && win != null) {\r\n            winDenom = parseFloat(NumberUtils.devide(win, denom));\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            if (bonus != null && bonus > 0 && bonus >= bet) {\r\n                ModuleManager.changeBetColor(true);\r\n                DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\r\n            } else {\r\n                ModuleManager.changeBetColor();\r\n                DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\r\n                if (denom != null && betDenom != null) {\r\n                    DataManager.updateDataElement(\r\n                        GameData.DataBalanceRealDenom,\r\n                        NumberUtils.subtract(realDenom, betDenom),\r\n                    );\r\n                }\r\n            }\r\n            DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\r\n            DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\r\n        } else {\r\n            if (win > 0) {\r\n                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n                    ModuleManager.changeBetColor(true);\r\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\r\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.add(real, win));\r\n                    if (denom != null && winDenom != null) {\r\n                        DataManager.updateDataElement(\r\n                            GameData.DataBalanceRealDenom,\r\n                            NumberUtils.add(realDenom, winDenom),\r\n                        );\r\n                    }\r\n                } else {\r\n                    ModuleManager.changeBetColor();\r\n                    DataManager.updateDataElement(\r\n                        GameData.DataBalanceReal,\r\n                        NumberUtils.add(NumberUtils.subtract(real, bet), win),\r\n                    );\r\n                    if (denom != null && winDenom != null && betDenom != null) {\r\n                        DataManager.updateDataElement(\r\n                            GameData.DataBalanceRealDenom,\r\n                            NumberUtils.add(NumberUtils.subtract(realDenom, betDenom), winDenom),\r\n                        );\r\n                    }\r\n                }\r\n                DataManager.updateDataElement(\r\n                    GameData.DataBalanceTotal,\r\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\r\n                );\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataBalanceTotal,\r\n                    NumberUtils.add(NumberUtils.subtract(total, bet), win),\r\n                );\r\n            } else {\r\n                if (bonus != null && bonus > 0 && bonus >= bet) {\r\n                    ModuleManager.changeBetColor(true);\r\n                    DataManager.updateDataElement(GameData.DataBalanceBonus, NumberUtils.subtract(bonus, bet));\r\n                } else {\r\n                    ModuleManager.changeBetColor();\r\n                    DataManager.updateDataElement(GameData.DataBalanceReal, NumberUtils.subtract(real, bet));\r\n                    if (denom != null && betDenom != null) {\r\n                        DataManager.updateDataElement(\r\n                            GameData.DataBalanceRealDenom,\r\n                            NumberUtils.subtract(realDenom, betDenom),\r\n                        );\r\n                    }\r\n                }\r\n                DataManager.updateDataElement(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\r\n                DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, NumberUtils.subtract(total, bet));\r\n            }\r\n        }\r\n    }\r\n\r\n    static hasCredit(maxBet: boolean = false, onSpin: boolean = false): boolean {\r\n        let bonus: number = parseFloat(DataManager.getDataById(GameData.DataBalanceBonus));\r\n        let real: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\r\n        let win: number = parseFloat(DataManager.getDataById(GameData.DataTotalWin));\r\n        let bet: number = BetManager.Bet;\r\n        let canPlay: boolean = true;\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            win = 0;\r\n        }\r\n\r\n        if (bonus != null && bonus > 0) {\r\n            if (bonus >= bet) {\r\n                ModuleManager.changeBetColor(true);\r\n                return true;\r\n            } else {\r\n                ModuleManager.changeBetColor();\r\n            }\r\n        }\r\n\r\n        if (FreeRoundBonus.inFrb) {\r\n            if (AppContext.current) {\r\n                AppContext.current.closeDialog();\r\n            }\r\n\r\n            if (CashierDialog.opened) {\r\n                CashierDialog.onClose();\r\n            }\r\n\r\n            if (onSpin) {\r\n                FreeRoundBonus.disableUi();\r\n            }\r\n\r\n            canPlay = true;\r\n        } else if (real <= 0 || real < bet) {\r\n            var credit: number = parseFloat(NumberUtils.add(real, win));\r\n            if (credit > 0 && credit >= bet) {\r\n                if (AppContext.current) {\r\n                    AppContext.current.closeDialog();\r\n                }\r\n\r\n                if (CashierDialog.opened) {\r\n                    CashierDialog.onClose();\r\n                }\r\n\r\n                if (onSpin) {\r\n                    FreeRoundBonus.disableUi();\r\n                }\r\n\r\n                canPlay = true;\r\n            } else {\r\n                if (AppContext.current && onSpin) {\r\n                    ModuleManager.collect(GameModules.Base);\r\n\r\n                    if (AppContext.gameConfiguration.ShowCashierMessage) {\r\n                        CashierDialog.openDialog();\r\n                    } else {\r\n                        AppContext.current.showDialog(Languages.getRid(\"NOT_ENOUGH_CREDIT\"), false);\r\n                    }\r\n\r\n                    Platforms.Platforms.clientError(\"NOT_ENOUGH_CREDIT\", Languages.getRid(\"NOT_ENOUGH_CREDIT\"));\r\n\r\n                    GameManager.requestSend = false;\r\n                }\r\n                canPlay = false;\r\n            }\r\n        } else {\r\n            if (AppContext.current) {\r\n                AppContext.current.closeDialog();\r\n            }\r\n\r\n            if (CashierDialog.opened) {\r\n                CashierDialog.onClose();\r\n            }\r\n\r\n            if (onSpin) {\r\n                FreeRoundBonus.disableUi();\r\n            }\r\n\r\n            canPlay = true;\r\n        }\r\n        return canPlay;\r\n    }\r\n\r\n    static poolingBalance(): void {\r\n        if (\r\n            AppContext != null &&\r\n            AppContext.gameConfiguration != null &&\r\n            AppContext.gameConfiguration.PollCredit > 0 &&\r\n            DataManager.GameRoundClosed\r\n        ) {\r\n            let balance: number = parseFloat(DataManager.getDataById(GameData.DataBalanceReal));\r\n            if (balance != null && BetManager.Bet != null && balance >= BetManager.Bet) {\r\n                return;\r\n            } else {\r\n                if (!BalanceManager._poolBalance) {\r\n                    setTimeout(() => {\r\n                        BalanceManager.refreshBalance();\r\n                    }, AppContext.gameConfiguration.PollCredit);\r\n                    BalanceManager._poolBalance = true;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static refreshBalance(forced: boolean = false): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient.balance().then((response: BalanceResponse) => {\r\n                BalanceManager.balanceReceived(response, forced);\r\n            });\r\n        }\r\n    }\r\n\r\n    static balanceReceived(response: IBalance, forced: boolean = false): void {\r\n        BalanceManager._poolBalance = false;\r\n        let bonus: string = response.bonus.toString();\r\n        let real: string = response.real.toString();\r\n        let total: string = NumberUtils.add(response.bonus, response.real);\r\n\r\n        DataManager.updateGameDataFromModule(GameData.DataBalanceBonus, bonus);\r\n        DataManager.updateGameDataFromModule(GameData.DataBalanceReal, real);\r\n        DataManager.updateGameDataFromModule(GameData.DataBalanceTotal, total);\r\n\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataBalanceRealDenom,\r\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\r\n            );\r\n        }\r\n\r\n        DataManager.updateDataElement(GameData.DataBalanceBonus, bonus);\r\n        DataManager.updateDataElement(GameData.DataBalanceReal, real);\r\n        DataManager.updateDataElement(GameData.DataBalanceTotal, total);\r\n\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize) {\r\n            DataManager.updateDataElement(\r\n                GameData.DataBalanceRealDenom,\r\n                parseInt(NumberUtils.devide(response.real, BetManager.CoinSize)).toString(),\r\n            );\r\n        }\r\n        BalanceManager.poolingBalance();\r\n\r\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(total), forced: forced });\r\n    }\r\n\r\n    static recalculateDenomBalance(): void {\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataBalanceRealDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(\r\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\r\n                        BetManager.CoinSize,\r\n                    ),\r\n                ).toString(),\r\n            );\r\n            DataManager.updateDataElement(\r\n                GameData.DataBalanceRealDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(\r\n                        parseFloat(DataManager.getDataById(GameData.DataBalanceReal)),\r\n                        BetManager.CoinSize,\r\n                    ),\r\n                ).toString(),\r\n            );\r\n        }\r\n    }\r\n\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"BalanceManager\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/BalanceManager.ts\n **/","import { Logger, StringUtils } from \"neo-common\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { Dialog } from \"./Dialog\";\r\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\n\r\n/**\r\n * Create dialog filled from code.\r\n * @class Dialog\r\n */\r\nexport class CashierDialog {\r\n    static opened: boolean = false;\r\n\r\n    private static _element: HTMLElement;\r\n    private static _cashierButton: HTMLElement;\r\n    private static _refreshButton: HTMLElement;\r\n    private static _closeButton: HTMLElement;\r\n    private static _closeButtonIcon: HTMLElement;\r\n\r\n    static openDialog(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"CashierDialog\", `openDialog()`);\r\n        }\r\n\r\n        Platforms.Platforms.dialogOpened(\"cashier\", true);\r\n\r\n        CashierDialog.opened = true;\r\n\r\n        CashierDialog._element = document.getElementById(\"cashierDialog\");\r\n        if (CashierDialog._element != null) {\r\n            CashierDialog._cashierButton = document.getElementById(\"cashierButton\");\r\n            if (CashierDialog._cashierButton != null) {\r\n                CashierDialog._cashierButton.onclick = CashierDialog.onCashier;\r\n            }\r\n\r\n            CashierDialog._refreshButton = document.getElementById(\"refreshButton\");\r\n            if (CashierDialog._refreshButton != null) {\r\n                if (AppContext.gameConfiguration.CashierMessageShowRefreshBalanceButton) {\r\n                    CashierDialog._refreshButton.onclick = CashierDialog.onRefreshBalance;\r\n                } else {\r\n                    CashierDialog._refreshButton.style.display = \"none\";\r\n                }\r\n            }\r\n\r\n            CashierDialog._closeButton = document.getElementById(\"cashierCloseButton\");\r\n            if (CashierDialog._closeButton != null) {\r\n                CashierDialog._closeButton.onclick = CashierDialog.onClose;\r\n            }\r\n\r\n            CashierDialog._closeButtonIcon = document.getElementById(\"cashierCloseButtonIcon\");\r\n            if (CashierDialog._closeButtonIcon != null) {\r\n                CashierDialog._closeButtonIcon.onclick = CashierDialog.onClose;\r\n            }\r\n\r\n            if (CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\r\n                CashierDialog._element.classList.remove(Dialog.DisabledClass);\r\n            }\r\n        }\r\n    }\r\n\r\n    static onCashier(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"CashierDialog\", `onCashier()`);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\r\n            Platforms.Platforms.gotoCasier({\r\n                reason: \"InsufficientFunds\",\r\n                target: AppContext.gameConfiguration.CashierUrl,\r\n            }); //todo Second available reason: 'InsufficientFunds'\r\n            if (Platforms.Platforms.handleOpenCashierPage) {\r\n                return;\r\n            }\r\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n        } else {\r\n            Platforms.Platforms.gotoCasier();\r\n        }\r\n    }\r\n\r\n    static onRefreshBalance(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"CashierDialog\", `onRefreshBalance()`);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        BalanceManager.refreshBalance();\r\n    }\r\n\r\n    static onClose(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"CashierDialog\", `onClose()`);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        CashierDialog.opened = false;\r\n\r\n        Platforms.Platforms.dialogOpened(\"cashier\", false);\r\n\r\n        if (!CashierDialog._element.classList.contains(Dialog.DisabledClass)) {\r\n            CashierDialog._element.classList.add(Dialog.DisabledClass);\r\n        }\r\n\r\n        if (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0) {\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/CashierDialog.ts\n **/","import { Utils, Logger, StringUtils } from \"neo-common\";\r\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { BaseModel } from \"../../../GameComponents/Base/BaseModel\";\r\nimport { GameConfiguration } from \"../../../../Common/GameConfiguration\";\r\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\r\n\r\nexport type DialogOpenData = {\r\n    special: boolean;\r\n    gameRoundId: string;\r\n    errorId: string;\r\n    actions: Array<Object>;\r\n};\r\n\r\n/**\r\n * Create dialog filled from code.\r\n * @class Dialog\r\n */\r\nexport class Dialog {\r\n    static DisabledClass: string = \"_disabled\";\r\n    static InfoClass: string = \"info\";\r\n    static ErrorClass: string = \"error\";\r\n\r\n    private _app: GameEngine.IApp;\r\n\r\n    private _element: HTMLElement;\r\n    private _elementHeading: HTMLElement;\r\n    private _elementCode: HTMLElement;\r\n    private _elementText: HTMLElement;\r\n    private _elementButton: HTMLElement;\r\n    private _elementButtonReload: HTMLElement;\r\n    private _elementCustomButtons: HTMLElement;\r\n    private _elementInfo: HTMLElement;\r\n    private _elementError: HTMLElement;\r\n\r\n    private _timer: FrameTimerEventEmitter;\r\n\r\n    private _customData: any;\r\n\r\n    constructor(app: GameEngine.IApp) {\r\n        this._app = app;\r\n        this._element = document.getElementById(\"dialog\");\r\n        this._elementHeading = document.getElementById(\"dialogHeading\");\r\n        this._elementCode = document.getElementById(\"errorCode\");\r\n        this._elementText = document.getElementById(\"dialogText\");\r\n        this._elementButton = document.getElementById(\"dialogButton\");\r\n        this._elementButtonReload = document.getElementById(\"dialogReloadButton\");\r\n        this._elementCustomButtons = document.getElementById(\"dialogCustomButtons\");\r\n        this._elementInfo = document.getElementById(\"dialogInfo\");\r\n        this._elementError = document.getElementById(\"dialogError\");\r\n\r\n        if (this._element != null && !this._element.classList.contains(Dialog.DisabledClass)) {\r\n            this._element.classList.add(Dialog.DisabledClass);\r\n        }\r\n\r\n        if (this._elementInfo != null) {\r\n            this._elementInfo.style.display = \"none\";\r\n        }\r\n\r\n        if (this._elementError != null) {\r\n            this._elementError.style.display = \"none\";\r\n        }\r\n\r\n        this._timer = CreateFrameTimer(\"dialogTimer\");\r\n        this._timer.on(FrameTimerEvents.Complete, this.closeDialog.bind(this));\r\n\r\n        this.onClickError = this.onClickError.bind(this);\r\n        this.onClickRefresh = this.onClickRefresh.bind(this);\r\n\r\n        this._customData = null;\r\n    }\r\n\r\n    openDialog(\r\n        text: string,\r\n        code: string = \"\",\r\n        errorId: string = \"\",\r\n        error: boolean = false,\r\n        special: boolean = false,\r\n        gameRoundId: string = \"0\",\r\n        customData: any = null,\r\n    ): void {\r\n        this._customData = customData;\r\n\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\r\n                \"Dialog\",\r\n                `openDialog('${text}', code: '${code}', errorId: '${errorId}', error: ${error}, special: ${special}, ` +\r\n                    `gameRoundId: ${gameRoundId}, customData: ${customData ? JSON.stringify(customData) : \"\"})`,\r\n            );\r\n        }\r\n\r\n        Platforms.Platforms.dialogOpened(\"default\", true);\r\n\r\n        if (this._element != null) {\r\n            const ultraSpecial =\r\n                !Utils.isNullOrUndefined(this._customData) &&\r\n                !Utils.isNullOrUndefined(this._customData.data) &&\r\n                !Utils.isNullOrUndefined(this._customData.data.ultraSpecial) &&\r\n                this._customData.data.ultraSpecial === true;\r\n\r\n            if (this._elementText != null) {\r\n                this._elementText.innerHTML = text;\r\n            }\r\n\r\n            if (this._elementCode != null) {\r\n                if (code !== \"\" && this._elementCode != null && !special) {\r\n                    if (errorId === \"\") {\r\n                        errorId = \"0\";\r\n                    }\r\n\r\n                    let errorString: string = gameRoundId + \"-\" + errorId;\r\n                    code = \"CODE_\" + code.replace(\"-\", \"_\");\r\n                    let errorValue: string = Languages.getRid(code, errorString);\r\n                    this._elementCode.textContent = errorValue.replace(/ /g, \"\");\r\n                    this._elementCode.style.display = \"block\";\r\n                } else {\r\n                    this._elementCode.style.display = \"none\";\r\n                }\r\n            }\r\n\r\n            if (error && !ultraSpecial) {\r\n                if (this._element.classList.contains(Dialog.InfoClass)) {\r\n                    this._element.classList.remove(Dialog.InfoClass);\r\n                }\r\n\r\n                if (!this._element.classList.contains(Dialog.ErrorClass)) {\r\n                    this._element.classList.add(Dialog.ErrorClass);\r\n                }\r\n\r\n                if (this._elementInfo != null) {\r\n                    this._elementInfo.style.display = \"none\";\r\n                }\r\n                if (this._elementError != null) {\r\n                    this._elementError.style.display = \"block\";\r\n                }\r\n\r\n                if (this._elementHeading != null) {\r\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_ERROR\");\r\n                }\r\n\r\n                if (this._elementButtonReload != null) {\r\n                    this._elementButtonReload.style.display = \"none\";\r\n                }\r\n\r\n                if (this._elementButton != null) {\r\n                    this._elementButton.style.display = \"block\";\r\n                    this._elementButton.onclick = this.onClickError;\r\n                }\r\n            } else {\r\n                if (!this._element.classList.contains(Dialog.InfoClass)) {\r\n                    this._element.classList.add(Dialog.InfoClass);\r\n                }\r\n\r\n                if (this._element.classList.contains(Dialog.ErrorClass)) {\r\n                    this._element.classList.remove(Dialog.ErrorClass);\r\n                }\r\n\r\n                if (this._elementInfo != null) {\r\n                    this._elementInfo.style.display = \"block\";\r\n                }\r\n                if (this._elementError != null) {\r\n                    this._elementError.style.display = \"none\";\r\n                }\r\n\r\n                if (this._elementHeading != null) {\r\n                    this._elementHeading.textContent = Languages.getRid(\"DLG_INFO\");\r\n                }\r\n\r\n                if (this._elementButton != null) {\r\n                    this._elementButton.style.display = \"none\";\r\n                }\r\n\r\n                if (this._elementButtonReload) {\r\n                    this._elementButtonReload.style.display = \"none\";\r\n                }\r\n\r\n                if (ultraSpecial) {\r\n                    if (this._elementCode != null) {\r\n                        this._elementCode.style.display = \"none\";\r\n                    }\r\n\r\n                    if (this._elementButton != null) {\r\n                        this._elementButton.style.display = \"block\";\r\n                        this._elementButton.onclick = this.onClickError;\r\n                    }\r\n                } else if (special) {\r\n                    if (this._elementCode != null) {\r\n                        this._elementCode.style.display = \"none\";\r\n                    }\r\n\r\n                    if (this._elementButtonReload != null) {\r\n                        this._elementButtonReload.style.display = \"block\";\r\n                        this._elementButtonReload.onclick = this.onClickRefresh;\r\n                    }\r\n                } else {\r\n                    //in case, not enough credit dialog is already opened, send close dialog event\r\n                    if (this._timer.isPlaying()) {\r\n                        Platforms.Platforms.dialogOpened(\"default\", false);\r\n                    }\r\n\r\n                    this._timer.stop();\r\n                    this._timer.start(180);\r\n                }\r\n            }\r\n\r\n            if (\r\n                !Utils.isNullOrUndefined(this._customData.data) &&\r\n                !Utils.isNullOrUndefined(this._customData.data.actions)\r\n            ) {\r\n                this.handleCustomActions(this._customData.data.actions);\r\n            }\r\n\r\n            if (this._element.classList.contains(Dialog.DisabledClass)) {\r\n                this._element.classList.remove(Dialog.DisabledClass);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                Logger.errorGroup(\"Dialog\", \"ERROR no dialog\");\r\n            }\r\n        }\r\n    }\r\n\r\n    closeDialog(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Dialog\", `closeDialog()`);\r\n        }\r\n\r\n        this._timer.stop();\r\n\r\n        Platforms.Platforms.dialogOpened(\"default\", false);\r\n\r\n        if (!this._element.classList.contains(Dialog.DisabledClass)) {\r\n            this._element.classList.add(Dialog.DisabledClass);\r\n        }\r\n\r\n        if (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0) {\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n\r\n        BetHigherThanMinDialog.setOpenedStatus();\r\n    }\r\n\r\n    private onClickError(): void {\r\n        let clientHost = AppContext.clientHost as ClientHost.IClientHost;\r\n        if (clientHost) {\r\n            var request: ClientHost.Types.ClientHostEndGameRequest = null;\r\n            if (!Utils.isNullOrUndefined(this._customData)) {\r\n                let dialogRequest = this._customData as ClientHost.Types.ClientHostDialogRequest;\r\n\r\n                request = dialogRequest.error as any;\r\n                request.reason = dialogRequest.error.errorMessageTitle;\r\n            }\r\n\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\r\n                    \"Dialog\",\r\n                    `onClickError -> calling client host '${AppContext.gameDefinition.ClientHostType}.endGame()', request: `,\r\n                    request,\r\n                );\r\n            }\r\n\r\n            Platforms.Platforms.exitHandler = \"dialog\";\r\n            Platforms.Platforms.gameClosing();\r\n            clientHost.endGame(this._app, request);\r\n        }\r\n    }\r\n\r\n    private onClickRefresh(): void {\r\n        Platforms.Platforms.gameReloading();\r\n        if (Platforms.Platforms.handleGameReload) {\r\n            return;\r\n        }\r\n\r\n        window.location.reload(true);\r\n    }\r\n\r\n    private handleCustomActions(actions: Array<Object>): void {\r\n        if (actions.length > 0) {\r\n            this.hideAllButtons();\r\n\r\n            //handle font size of custom text\r\n            let buttons: Array<HTMLElement> = [];\r\n            let imageWidthCorrection = 0.82; //transparent pixels correction\r\n            let baseWidth = 0;\r\n            let baseFontSize = 0;\r\n            let maxWidth = 0;\r\n\r\n            for (let i = 0; i < actions.length; i++) {\r\n                let currentAction = actions[i];\r\n\r\n                if (currentAction && currentAction[\"type\"]) {\r\n                    let button: HTMLElement = document.createElement(\"div\");\r\n                    button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n\r\n                    //append child to get computed style\r\n                    this._elementCustomButtons.appendChild(button);\r\n\r\n                    baseWidth =\r\n                        parseInt(window.getComputedStyle(button).getPropertyValue(\"width\")) * imageWidthCorrection;\r\n                    baseFontSize = parseInt(window.getComputedStyle(button).getPropertyValue(\"font-size\"));\r\n                    let currentWidth = 0;\r\n\r\n                    if (currentAction[\"text\"]) {\r\n                        currentWidth = this.getButtonTextWidth(currentAction[\"text\"], baseFontSize);\r\n                        button.textContent = currentAction[\"text\"];\r\n                    }\r\n\r\n                    if (currentWidth > maxWidth) {\r\n                        maxWidth = currentWidth;\r\n                    }\r\n\r\n                    switch (currentAction[\"type\"]) {\r\n                        case \"continue\":\r\n                            button.onclick = this.onClickContinue.bind(this);\r\n                            break;\r\n                        case \"exit\":\r\n                            button.onclick = this.onClickClose;\r\n                            break;\r\n                        case \"history\":\r\n                            button.onclick = this.onClickHistory;\r\n                            break;\r\n                        case \"reload\":\r\n                            button.onclick = this.onClickReload;\r\n                            break;\r\n                        case \"restore\":\r\n                            button.onclick = this.onClickRestore.bind(this, currentAction[\"customData\"]);\r\n                            break;\r\n                    }\r\n\r\n                    buttons.push(button);\r\n                }\r\n            }\r\n\r\n            if (maxWidth > baseWidth) {\r\n                let newFontSize = Math.round(baseFontSize * (baseWidth / maxWidth));\r\n\r\n                for (let i = 0; i < buttons.length; i++) {\r\n                    buttons[i].style.fontSize = newFontSize + \"px\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private getButtonTextWidth(text: string, fontSize: number): number {\r\n        let elem = document.createElement(\"span\");\r\n\r\n        elem.textContent = text;\r\n        elem.style.fontSize = fontSize + \"px\";\r\n        document.body.appendChild(elem);\r\n        let width = elem.offsetWidth;\r\n\r\n        document.body.removeChild(elem);\r\n        return width;\r\n    }\r\n\r\n    private hideAllButtons(): void {\r\n        if (this._elementButton != null) {\r\n            this._elementButton.style.display = \"none\";\r\n        }\r\n\r\n        if (this._elementButtonReload != null) {\r\n            this._elementButtonReload.style.display = \"none\";\r\n        }\r\n\r\n        while (this._elementCustomButtons.firstChild) {\r\n            this._elementCustomButtons.removeChild(this._elementCustomButtons.firstChild);\r\n        }\r\n    }\r\n\r\n    private onClickClose(): void {\r\n        Platforms.Platforms.exitHandler = \"dialog\";\r\n        GameApp.exit();\r\n    }\r\n\r\n    private onClickContinue(): void {\r\n        this.closeDialog();\r\n        BaseModel.spinContinue();\r\n    }\r\n\r\n    private onClickHistory(): void {\r\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\r\n            GameApp.openGameRoundHistoryFromUrl();\r\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n            GameApp.openGameRoundHistoryFromUrl();\r\n        } else {\r\n            GameApp.openGameRoundHistory();\r\n        }\r\n    }\r\n\r\n    private onClickReload(): void {\r\n        Platforms.Platforms.gameReloading();\r\n        if (Platforms.Platforms.handleGameReload) {\r\n            return;\r\n        }\r\n\r\n        window.location.reload(true);\r\n    }\r\n\r\n    private onClickRestore(module: string): void {\r\n        this.closeDialog();\r\n        ModuleManager.restoreGameRound(module);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/Dialog.ts\n **/","import { GameApp } from \"../../../GameApp\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { FreeRoundBonusDialog } from \"../Dialogs/FreeRoundBonusDialog\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { FreeRoundBonusIcon } from \"../Dialogs/FreeRoundBonusIcon\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { Logger, Utils } from \"neo-common\";\r\nimport { ResponsibleDialog1 } from \"../Dialogs/ResponsibleDialog1\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\r\nimport { BetHigherThanMinDialog } from \"../Dialogs/BetHigherThanMinDialog\";\r\n\r\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\r\ntype FreeRoundsActivateOfferResponse = Communication.Game.FreeRoundsActivateOfferResponse;\r\ntype FreeRoundsDeclineOfferResponse = Communication.Game.FreeRoundsDeclineOfferResponse;\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\nvar GameStatuses = Communication.Game.GameModuleStatus;\r\n\r\nexport class FreeRoundBonus {\r\n    public static inFrb: boolean = false;\r\n    public static isLastFrb: boolean = false;\r\n\r\n    public static id: number;\r\n    public static termsUrl: string;\r\n    public static roundsAssigned: number;\r\n    public static roundsStarted: number;\r\n    public static roundsPlayed: number;\r\n    public static remainingFrbCount: number;\r\n    public static playing: boolean = false;\r\n    public static status: string;\r\n    public static winType: string;\r\n    public static validTo: string;\r\n    public static winPayMethod: string;\r\n    public static collectPartial: boolean;\r\n    public static hasFeature: boolean;\r\n    public static totalWin: number;\r\n    public static otherOfferes: Array<Object> = [];\r\n    public static featureName: string;\r\n\r\n    public static wasInitialized: boolean = false;\r\n\r\n    public static state: string = \"\";\r\n    public static endMsgDisplayed: boolean = false;\r\n\r\n    private static softInit: boolean = false;\r\n    private static enabledUi: boolean = false;\r\n    private static blockFrbExpiration: boolean = false;\r\n\r\n    public static initialize(gameClient: Communication.Game.GameClient): void {\r\n        if (!FreeRoundBonus.wasInitialized && gameClient != null) {\r\n            gameClient\r\n                .sendFreeRoundsOffersRequest(GameApp.key)\r\n                .then((response: FreeRoundsOffersResponse) => {\r\n                    FreeRoundBonus.getCurrentOfferReceived(response);\r\n                })\r\n                .catch((err) => {\r\n                    FreeRoundBonus.wasInitialized = true;\r\n                });\r\n        }\r\n    }\r\n\r\n    public static activateOffer(): void {\r\n        if (FreeRoundBonus.status === \"active\") {\r\n            FreeRoundBonus.inFrb = true;\r\n            Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n            FreeRoundBonusIcon.showIcon(\"active\");\r\n            ModuleManager.disableBase();\r\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n            }\r\n            GameManager.softInit();\r\n        } else {\r\n            ModuleManager.disableBase();\r\n            if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n                GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n                GameApp.gameClient\r\n                    .sendFreeRoundsActivateOfferRequest(GameApp.key, FreeRoundBonus.id)\r\n                    .then((response: FreeRoundsActivateOfferResponse) => {\r\n                        FreeRoundBonus.activateOfferReceived(response);\r\n                    });\r\n            }\r\n        }\r\n    }\r\n\r\n    public static declineOffer(): void {\r\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null) {\r\n            FreeRoundBonusDialog.hideDialog();\r\n            FreeRoundBonusIcon.hideAllIcons();\r\n            GameApp.gameClient\r\n                .sendFreeRoundsDeclineOfferRequest(GameApp.key, FreeRoundBonus.id)\r\n                .then((response: FreeRoundsDeclineOfferResponse) => {\r\n                    FreeRoundBonus.declineOfferReceived(response);\r\n                    FreeRoundBonus.refreshCurrentOffers();\r\n                });\r\n        }\r\n    }\r\n\r\n    public static initializeFreeRounds(): void {\r\n        FreeRoundBonusDialog.initalize();\r\n        FreeRoundBonusIcon.initalize();\r\n        if (GameApp.gameClient != null && FreeRoundBonus.id != null && FreeRoundBonus.status === \"active\") {\r\n            GameApp.gameClient.setOfferId(FreeRoundBonus.id);\r\n            FreeRoundBonusDialog.showDialog(\"active\");\r\n            ModuleManager.disableBase();\r\n            FreeRoundBonusIcon.showIcon(\"active\");\r\n            FreeRoundBonus.inFrb = true;\r\n            Platforms.Platforms.featureInit({ type: \"FRB\" });\r\n        }\r\n    }\r\n\r\n    public static showFreeRounds(): void {\r\n        if (FreeRoundBonus.id != null) {\r\n            FreeRoundBonus.countDown();\r\n\r\n            if (FreeRoundBonus.status !== \"active\") {\r\n                if (DataManager.GameRoundClosed) {\r\n                    FreeRoundBonusDialog.showDialog(\"new\");\r\n                    ModuleManager.disableBase();\r\n                    FreeRoundBonusIcon.showIcon(\"new\");\r\n                    FreeRoundBonus.enableUi();\r\n                } else {\r\n                    if (!FreeRoundBonus.playing) {\r\n                        FreeRoundBonusIcon.showIcon(\"new\");\r\n                        FreeRoundBonus.disableUi();\r\n                    }\r\n                }\r\n            } else {\r\n                if (!DataManager.GameRoundClosed) {\r\n                    FreeRoundBonus.frbSpin();\r\n                    FreeRoundBonusDialog.hideDialog();\r\n                    FreeRoundBonus.disableUi();\r\n                } else {\r\n                    ModuleManager.disableBase();\r\n                }\r\n            }\r\n        } else {\r\n            FreeRoundBonus.openOther();\r\n        }\r\n    }\r\n\r\n    public static reopenFreeRounds(): void {\r\n        if (DataManager.GameRoundClosed && FreeRoundBonus.isLastFrb) {\r\n            FreeRoundBonusIcon.showIcon(\"active\");\r\n            FreeRoundBonus.disableUi();\r\n            GameApp.gameClient.setOfferId(null);\r\n            FreeRoundBonusDialog.showDialog(\"end\");\r\n            FreeRoundBonus.endMsgDisplayed = true;\r\n            ModuleManager.disableBase();\r\n            return;\r\n        }\r\n\r\n        if (FreeRoundBonus.status === \"new\" && FreeRoundBonus.state === \"new\") {\r\n            BetHigherThanMinDialog.hideDialog();\r\n            BetHigherThanMinDialog.closeDialog();\r\n            FreeRoundBonusDialog.showDialog(\"new\");\r\n            ModuleManager.disableBase();\r\n            FreeRoundBonusIcon.showIcon(\"new\");\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n\r\n        if (FreeRoundBonus.state === \"active\") {\r\n            FreeRoundBonusDialog.showDialog(\"active\");\r\n            ModuleManager.disableBase();\r\n            FreeRoundBonusIcon.showIcon(\"active\");\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n\r\n        if (FreeRoundBonus.state === \"end\") {\r\n            FreeRoundBonusIcon.showIcon(\"active\");\r\n            FreeRoundBonus.disableUi();\r\n            GameApp.gameClient.setOfferId(null);\r\n            FreeRoundBonusDialog.showDialog(\"end\");\r\n            FreeRoundBonus.endMsgDisplayed = true;\r\n            ModuleManager.disableBase();\r\n        }\r\n\r\n        if (FreeRoundBonus.state === \"other\") {\r\n            if (FreeRoundBonus.validTo != null) {\r\n                let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n                let now: number = new Date().getTime();\r\n                let distance: number = countDownDate - now;\r\n\r\n                if (distance > 0) {\r\n                    FreeRoundBonusDialog.showDialog(\"other\");\r\n                    ModuleManager.disableBase();\r\n                    FreeRoundBonusIcon.showIcon(\"new\");\r\n                    FreeRoundBonus.enableUi();\r\n                }\r\n            } else if (FreeRoundBonusDialog.revalidateOtherGames()) {\r\n                FreeRoundBonusDialog.showDialog(\"other\");\r\n                ModuleManager.disableBase();\r\n                FreeRoundBonusIcon.showIcon(\"new\");\r\n                FreeRoundBonus.enableUi();\r\n            }\r\n        }\r\n\r\n        if (FreeRoundBonus.state === \"\") {\r\n            FreeRoundBonus.enableUi();\r\n        }\r\n    }\r\n\r\n    public static openOther(): void {\r\n        if (FreeRoundBonus.id == null && FreeRoundBonusDialog.revalidateOtherGames()) {\r\n            FreeRoundBonus.countDownOther();\r\n            if (DataManager.GameRoundClosed) {\r\n                FreeRoundBonusIcon.showIcon(\"new\");\r\n                FreeRoundBonus.enableUi();\r\n            } else {\r\n                FreeRoundBonusIcon.showIcon(\"new\");\r\n                FreeRoundBonus.disableUi();\r\n            }\r\n        }\r\n    }\r\n\r\n    public static endFreeRounds(): void {\r\n        if (FreeRoundBonus.id != null) {\r\n            DataManager.Collectable = true;\r\n            FreeRoundBonus.disableUi();\r\n            if (GameManager.gameResponse[\"freeRounds\"] != null) {\r\n                if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n                    FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n                }\r\n                if (GameManager.gameResponse[\"freeRounds\"][\"status\"] != null) {\r\n                    if (GameManager.gameResponse[\"freeRounds\"][\"status\"] === \"pending\") {\r\n                        FreeRoundBonus.status = GameManager.gameResponse[\"freeRounds\"][\"status\"];\r\n                    }\r\n                }\r\n            }\r\n            GameApp.gameClient.setOfferId(null);\r\n            FreeRoundBonusDialog.showDialog(\"end\");\r\n            FreeRoundBonus.endMsgDisplayed = true;\r\n        }\r\n    }\r\n\r\n    public static finishFreeRounds(): void {\r\n        FreeRoundBonusIcon.hideAllIcons();\r\n        FreeRoundBonus.id = null;\r\n        FreeRoundBonus.inFrb = false;\r\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n        FreeRoundBonus.isLastFrb = false;\r\n        FreeRoundBonus.endMsgDisplayed = false;\r\n        FreeRoundBonus.wasInitialized = false;\r\n        FreeRoundBonus.softInit = false;\r\n        FreeRoundBonus.remainingFrbCount = null;\r\n        FreeRoundBonus.roundsAssigned = 0;\r\n        FreeRoundBonus.roundsPlayed = 0;\r\n        FreeRoundBonus.roundsStarted = 0;\r\n        FreeRoundBonus.hasFeature = false;\r\n        FreeRoundBonus.featureName = null;\r\n        FreeRoundBonus.status = null;\r\n\r\n        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n                PlayList.play(\"SND_BaseCollect\");\r\n                ModuleManager.disableBase();\r\n                ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n            }\r\n        }\r\n\r\n        FreeRoundBonus.refreshCurrentOffers();\r\n    }\r\n\r\n    public static refreshCurrentOffers(): void {\r\n        if (GameApp.gameClient != null) {\r\n            GameApp.gameClient\r\n                .sendFreeRoundsOffersRequest(GameApp.key)\r\n                .then((response: FreeRoundsOffersResponse) => {\r\n                    FreeRoundBonus.getCurrentOfferReceived(response);\r\n\r\n                    if (FreeRoundBonus.id != null) {\r\n                        FreeRoundBonus.softInit = true;\r\n                        if (FreeRoundBonus.status === \"active\") {\r\n                            FreeRoundBonus.initializeFreeRounds();\r\n                        } else {\r\n                            FreeRoundBonus.showFreeRounds();\r\n                        }\r\n                    } else {\r\n                        GameManager.softInit();\r\n                        FreeRoundBonus.disableUi();\r\n                        if (DataManager.GameRoundClosed) {\r\n                            GameManager.canExit();\r\n                        }\r\n                    }\r\n                    return null;\r\n                })\r\n                .catch((err) => {\r\n                    FreeRoundBonus.wasInitialized = true;\r\n\r\n                    GameManager.softInit();\r\n                    FreeRoundBonus.disableUi();\r\n                    if (DataManager.GameRoundClosed) {\r\n                        GameManager.canExit();\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    public static expiredFreeRounds(): void {\r\n        FreeRoundBonusIcon.hideAllIcons();\r\n        FreeRoundBonus.id = null;\r\n        FreeRoundBonus.inFrb = false;\r\n        Platforms.Platforms.featureFinished({ type: \"FRB\" });\r\n        FreeRoundBonus.isLastFrb = false;\r\n        FreeRoundBonus.endMsgDisplayed = false;\r\n        FreeRoundBonus.softInit = false;\r\n        FreeRoundBonus.remainingFrbCount = null;\r\n        FreeRoundBonus.roundsAssigned = 0;\r\n        FreeRoundBonus.roundsPlayed = 0;\r\n        FreeRoundBonus.roundsStarted = 0;\r\n        FreeRoundBonus.hasFeature = false;\r\n        FreeRoundBonus.featureName = null;\r\n        FreeRoundBonusDialog.showDialog(\"expired\");\r\n    }\r\n\r\n    private static getCurrentOfferReceived(response: FreeRoundsOffersResponse): void {\r\n        FreeRoundBonus.totalWin = 0;\r\n        FreeRoundBonus.termsUrl = null;\r\n\r\n        if (response != null) {\r\n            FreeRoundBonus.wasInitialized = true;\r\n            response.currentOffer = null; // FRB not supported - can`t process currentOffer\r\n            if (response.currentOffer != null) {\r\n                if (response.currentOffer.id != null) FreeRoundBonus.id = response.currentOffer.id;\r\n                if (response.currentOffer.termsUrl != null) FreeRoundBonus.termsUrl = response.currentOffer.termsUrl;\r\n                if (response.currentOffer.roundsAssigned != null)\r\n                    FreeRoundBonus.roundsAssigned = response.currentOffer.roundsAssigned;\r\n                if (response.currentOffer.roundsStarted != null)\r\n                    FreeRoundBonus.roundsStarted = response.currentOffer.roundsStarted;\r\n                if (response.currentOffer.roundsPlayed != null)\r\n                    FreeRoundBonus.roundsPlayed = response.currentOffer.roundsPlayed;\r\n                if (response.currentOffer.remainingCount != null)\r\n                    FreeRoundBonus.remainingFrbCount = response.currentOffer.remainingCount;\r\n                if (response.currentOffer.playing != null) FreeRoundBonus.playing = response.currentOffer.playing;\r\n                if (response.currentOffer.status != null) FreeRoundBonus.status = response.currentOffer.status;\r\n                if (response.currentOffer.winType != null) FreeRoundBonus.winType = response.currentOffer.winType;\r\n                if (response.currentOffer.validTo != null) FreeRoundBonus.validTo = response.currentOffer.validTo;\r\n                if (response.currentOffer.winPayMethod != null)\r\n                    FreeRoundBonus.winPayMethod = response.currentOffer.winPayMethod;\r\n                if (response.currentOffer.collectPartial != null)\r\n                    FreeRoundBonus.collectPartial = response.currentOffer.collectPartial;\r\n                if (response.currentOffer.hasBuyFeature != null)\r\n                    FreeRoundBonus.hasFeature = response.currentOffer.hasBuyFeature;\r\n                if (response.currentOffer.buyFeatureName != null)\r\n                    FreeRoundBonus.featureName = response.currentOffer.buyFeatureName;\r\n\r\n                if (FreeRoundBonus.remainingFrbCount == null) {\r\n                    if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n                        FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n                    }\r\n                }\r\n\r\n                if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n                    FreeRoundBonus.isLastFrb = true;\r\n                }\r\n            }\r\n            FreeRoundBonus.otherOfferes = [];\r\n            if (response.otherOffers != null) {\r\n                FreeRoundBonus.otherOfferes = response.otherOffers;\r\n            }\r\n        }\r\n    }\r\n\r\n    private static activateOfferReceived(response: FreeRoundsActivateOfferResponse): void {\r\n        FreeRoundBonus.inFrb = true;\r\n        Platforms.Platforms.featureStarted({ type: \"FRB\" });\r\n        FreeRoundBonus.status = \"active\";\r\n        GameManager.softInit();\r\n        FreeRoundBonusIcon.showIcon(\"active\");\r\n    }\r\n\r\n    private static declineOfferReceived(response: FreeRoundsDeclineOfferResponse): void {\r\n        FreeRoundBonus.id = null;\r\n        FreeRoundBonus.softInit = false;\r\n        FreeRoundBonus.remainingFrbCount = null;\r\n        FreeRoundBonus.roundsAssigned = 0;\r\n        FreeRoundBonus.roundsPlayed = 0;\r\n        FreeRoundBonus.roundsStarted = 0;\r\n        FreeRoundBonus.hasFeature = false;\r\n        FreeRoundBonus.featureName = null;\r\n    }\r\n\r\n    public static valid(): string {\r\n        let str: string = \"\";\r\n        if (FreeRoundBonus.validTo != null) {\r\n            str = FreeRoundBonus.validTo;\r\n        }\r\n        return str;\r\n    }\r\n\r\n    public static assignedCount(): string {\r\n        let str: string = \"0\";\r\n        if (FreeRoundBonus.roundsAssigned != null) {\r\n            str = FreeRoundBonus.roundsAssigned.toString();\r\n        }\r\n        return str;\r\n    }\r\n\r\n    public static remainingCount(): string {\r\n        let str: string = \"0\";\r\n\r\n        if (FreeRoundBonus.remainingFrbCount == null) {\r\n            if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n                FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n            }\r\n        }\r\n\r\n        if (FreeRoundBonus.remainingFrbCount != null) {\r\n            //if dynamic frb was updated in last frb, dont update frb remaining count in icon\r\n            if (FreeRoundBonus.id === -1 && FreeRoundBonus.isLastFrb) {\r\n                str = \"0\";\r\n            } else {\r\n                str = FreeRoundBonus.remainingFrbCount.toString();\r\n            }\r\n        }\r\n\r\n        return str;\r\n    }\r\n\r\n    public static rulesLink(): string {\r\n        let str: string = \"\";\r\n        if (FreeRoundBonus.termsUrl != null) {\r\n            str = '<a href=\"' + FreeRoundBonus.termsUrl + '\" target=\"_blank\">' + FreeRoundBonus.termsUrl + \"</a>\";\r\n        }\r\n        return str;\r\n    }\r\n\r\n    public static win(): string {\r\n        let str: string = \"\";\r\n        if (FreeRoundBonus.totalWin != null && FreeRoundBonus.totalWin > 0) {\r\n            str =\r\n                Languages.formatText(Languages.FormatMoney, FreeRoundBonus.totalWin.toString()) +\r\n                \" \" +\r\n                DataManager.getDataById(GameData.DataCurrency);\r\n        }\r\n        return str;\r\n    }\r\n\r\n    public static frbSpin(): void {\r\n        if (FreeRoundBonus.id == null && !FreeRoundBonus.inFrb) {\r\n            return;\r\n        }\r\n        FreeRoundBonus.blockFrbExpiration = true;\r\n        if (FreeRoundBonus.inFrb) {\r\n            DataManager.AutoplayLossLimit = \"∞\";\r\n        }\r\n        if (GameManager.gameResponse[\"freeRounds\"] != null) {\r\n            if (GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"] != null) {\r\n                FreeRoundBonus.roundsStarted = GameManager.gameResponse[\"freeRounds\"][\"roundsStarted\"];\r\n            }\r\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n                FreeRoundBonus.totalWin = GameManager.gameResponse[\"freeRounds\"][\"totalWin\"];\r\n            }\r\n\r\n            if (GameManager.gameResponse[\"freeRounds\"][\"totalWin\"] != null) {\r\n                FreeRoundBonus.remainingFrbCount = GameManager.gameResponse[\"freeRounds\"][\"remainingCount\"];\r\n            } else {\r\n                if (FreeRoundBonus.roundsAssigned != null && FreeRoundBonus.roundsStarted != null) {\r\n                    FreeRoundBonus.remainingFrbCount = FreeRoundBonus.roundsAssigned - FreeRoundBonus.roundsStarted;\r\n                }\r\n            }\r\n        }\r\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n        if (FreeRoundBonus.remainingFrbCount != null && FreeRoundBonus.remainingFrbCount === 0) {\r\n            FreeRoundBonus.isLastFrb = true;\r\n            DataManager.Autoplay = false;\r\n            DataManager.AutoplayCount = \"∞\";\r\n            DataManager.AutoplayLossLimit = \"∞\";\r\n            DataManager.AutoplayWinLimit = \"∞\";\r\n        }\r\n    }\r\n\r\n    private static countDown(): void {\r\n        if (FreeRoundBonus.validTo != null) {\r\n            let countDownDate: number = new Date(FreeRoundBonus.validTo + \"+00:00\").getTime();\r\n            let now: number = new Date().getTime();\r\n            let distance: number = countDownDate - now;\r\n            let days: number = Math.floor(distance / (1000 * 60 * 60 * 24));\r\n            let hours: number = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\r\n            let minutes: number = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\r\n            let seconds: number = Math.floor((distance % (1000 * 60)) / 1000);\r\n\r\n            if (!FreeRoundBonus.blockFrbExpiration && distance < 0) {\r\n                FreeRoundBonus.id = null;\r\n                FreeRoundBonus.softInit = false;\r\n                FreeRoundBonus.remainingFrbCount = null;\r\n                FreeRoundBonus.roundsAssigned = 0;\r\n                FreeRoundBonus.roundsPlayed = 0;\r\n                FreeRoundBonus.roundsStarted = 0;\r\n                FreeRoundBonus.hasFeature = false;\r\n\r\n                if (FreeRoundBonus.state !== \"end\" && FreeRoundBonus.state !== \"other\") {\r\n                    if (!FreeRoundBonusDialog.revalidateOtherGames()) {\r\n                        FreeRoundBonusDialog.hideDialog();\r\n                        FreeRoundBonusIcon.hideAllIcons();\r\n                        FreeRoundBonus.state = \"expired\";\r\n                        FreeRoundBonus.enableGame();\r\n                    } else {\r\n                        FreeRoundBonusDialog.hideDialog();\r\n                        FreeRoundBonus.enableGame();\r\n                    }\r\n                }\r\n            } else {\r\n                if (days > 0) {\r\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, days + \"d\");\r\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, days + \"d\");\r\n                } else if (hours > 0) {\r\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, hours + \":\" + minutes + \"h\");\r\n                } else if (minutes > 0) {\r\n                    DataManager.updateGameDataFromModule(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n                    DataManager.updateDataElement(GameData.DataFrbExpiryTime, minutes + \":\" + seconds + \"s\");\r\n                }\r\n\r\n                setTimeout(() => {\r\n                    FreeRoundBonus.countDown();\r\n                }, 1000);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static countDownOther(): void {\r\n        if (!FreeRoundBonusDialog.revalidateOtherGames()) {\r\n            FreeRoundBonusDialog.hideDialog();\r\n            FreeRoundBonusIcon.hideAllIcons();\r\n            FreeRoundBonus.enableGame();\r\n        } else {\r\n            setTimeout(() => {\r\n                FreeRoundBonus.countDownOther();\r\n            }, 2000);\r\n        }\r\n    }\r\n\r\n    public static hasNewActiveOffer(): boolean {\r\n        //frb id -1 is dynamic frb\r\n        if (FreeRoundBonus.id == null && FreeRoundBonus.remainingFrbCount > 0) {\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static updateRemainingCount(count: number): void {\r\n        //if not initialized yet\r\n        if (FreeRoundBonus.id == null || (FreeRoundBonus.id > -1 && FreeRoundBonus.status != \"active\")) {\r\n            //check if we can show dialog\r\n            if (count > 0) {\r\n                if (FreeRoundBonus.canInitDynamicFRB()) {\r\n                    FreeRoundBonus.softInitialize();\r\n                } else {\r\n                    //stop autoplay if in base module, to let game check for new frb\r\n                    if (GameManager.baseResponse != null && GameManager.baseResponse.status === GameStatuses.Enabled) {\r\n                        DataManager.Autoplay = false;\r\n                    }\r\n                    FreeRoundBonus.remainingFrbCount = count;\r\n                }\r\n            }\r\n        } else if (FreeRoundBonus.id === -1) {\r\n            if (count > 0) {\r\n                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n                    FreeRoundBonus.isLastFrb = false;\r\n                    FreeRoundBonus.remainingFrbCount = count;\r\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\r\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\r\n                } else {\r\n                    //updated frb in last frb spin will be show as new frb after end dialog\r\n                    FreeRoundBonus.remainingFrbCount = count;\r\n                }\r\n            } else if (count === 0) {\r\n                //currently in frb\r\n                if (FreeRoundBonus.remainingFrbCount > 0) {\r\n                    FreeRoundBonus.remainingFrbCount = count;\r\n                    DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, count.toString());\r\n                    DataManager.updateDataElement(GameData.DataFrbRemainginCount, count.toString());\r\n\r\n                    FreeRoundBonus.isLastFrb = true;\r\n                    if (DataManager.GameRoundClosed && !DataManager.Autoplay && FreeRoundBonus.enabledUi) {\r\n                        FreeRoundBonus.endFreeRounds();\r\n                    } else {\r\n                        DataManager.Autoplay = false;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private static canInitDynamicFRB(): boolean {\r\n        return (\r\n            !FreeRoundBonusIcon.isDisabled() &&\r\n            DataManager.GameRoundClosed &&\r\n            !DataManager.Autoplay &&\r\n            !ResponsibleDialog1.opened\r\n        );\r\n    }\r\n\r\n    public static softInitialize(): void {\r\n        DataManager.Autoplay = false;\r\n        ModuleManager.disableBase();\r\n        if (!FreeRoundBonus.softInit) {\r\n            FreeRoundBonus.softInit = true;\r\n            GameManager.gameClient\r\n                .sendFreeRoundsOffersRequest(GameApp.key)\r\n                .then((response: FreeRoundsOffersResponse) => {\r\n                    FreeRoundBonus.getCurrentOfferReceived(response);\r\n                    FreeRoundBonus.initializeFreeRounds();\r\n                })\r\n                .catch((err) => {\r\n                    FreeRoundBonus.softInit = false;\r\n                    FreeRoundBonus.wasInitialized = true;\r\n                    ModuleManager.restoreGameRound(GameModules.Base);\r\n                });\r\n        }\r\n    }\r\n\r\n    public static disableUi(): void {\r\n        FreeRoundBonus.enabledUi = false;\r\n        FreeRoundBonusDialog.hideDialog();\r\n        FreeRoundBonusIcon.disableActiveIcon();\r\n    }\r\n\r\n    public static enableUi(): void {\r\n        if (!ResponsibleDialog1.opened) {\r\n            FreeRoundBonus.enabledUi = true;\r\n\r\n            if (FreeRoundBonus.hasNewActiveOffer()) {\r\n                FreeRoundBonus.softInitialize();\r\n                return;\r\n            }\r\n\r\n            //stop enabling icon in cumulative frb (should act like in FS so icon is not clickable)\r\n            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod == \"cumulative\") {\r\n                return;\r\n            }\r\n\r\n            FreeRoundBonusIcon.enableActiveIcon();\r\n        }\r\n    }\r\n\r\n    public static enableGame(): void {\r\n        if (FreeRoundBonus.softInit) {\r\n            GameManager.softInit();\r\n            FreeRoundBonus.softInit = false;\r\n        } else if (\r\n            ModuleManager.getActiveGameModules().length == 0 ||\r\n            ModuleManager.getActiveGameModules().indexOf(GameModules.Base) != -1\r\n        ) {\r\n            ModuleManager.restoreGameRound(GameModules.Base);\r\n        }\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    public static enableFrbExpiration(): void {\r\n        FreeRoundBonus.blockFrbExpiration = false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Bonuses/FreeRoundBonus.ts\n **/","import { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { UriHelper } from \"neo-common\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\r\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\r\n\r\nexport class FreeRoundBonusDialog {\r\n    private static Dialog: HTMLElement;\r\n    private static DialogContentOther: HTMLElement;\r\n    private static DialogContentOther2: HTMLElement;\r\n    private static DialogContentOtherList: HTMLElement;\r\n    private static DialogContentOtherList2: HTMLElement;\r\n    private static DialogContentNew: HTMLElement;\r\n    private static DialogContentActive: HTMLElement;\r\n    private static DialogContentEnd: HTMLElement;\r\n    private static DialogContentExpired: HTMLElement;\r\n    private static ConfirmationDialog: HTMLElement;\r\n    private static DialogButtonPlay: HTMLElement;\r\n    private static DialogButtonPostPone: HTMLElement;\r\n    private static DialogButtonDeny: HTMLElement;\r\n    private static DialogButtonOk: HTMLElement;\r\n    private static DialogButtonYes: HTMLElement;\r\n    private static DialogButtonNo: HTMLElement;\r\n\r\n    private static otherOffersKeys: Array<string> = [];\r\n\r\n    private static isConfirmationDialogOpened: boolean = false;\r\n\r\n    public static initalize(): void {\r\n        FreeRoundBonusDialog.Dialog = document.getElementById(\"frbDialog\");\r\n        FreeRoundBonusDialog.DialogContentOther = document.getElementById(\"frbDialogContentOther\");\r\n        FreeRoundBonusDialog.DialogContentOther2 = document.getElementById(\"frbDialogContentOther2\");\r\n        FreeRoundBonusDialog.DialogContentOtherList = document.getElementById(\"frbDialogContentOtherList\");\r\n        FreeRoundBonusDialog.DialogContentOtherList2 = document.getElementById(\"frbDialogContentOtherList2\");\r\n        FreeRoundBonusDialog.DialogContentNew = document.getElementById(\"frbDialogContentNew\");\r\n        FreeRoundBonusDialog.DialogContentActive = document.getElementById(\"frbDialogContentActive\");\r\n        FreeRoundBonusDialog.DialogContentEnd = document.getElementById(\"frbDialogContentEnd\");\r\n        FreeRoundBonusDialog.DialogContentExpired = document.getElementById(\"frbDialogContentExpired\");\r\n        FreeRoundBonusDialog.ConfirmationDialog = document.getElementById(\"frbConfirmationDialog\");\r\n        FreeRoundBonusDialog.DialogButtonPlay = document.getElementById(\"dialogBtnPlay\");\r\n        FreeRoundBonusDialog.DialogButtonPostPone = document.getElementById(\"dialogBtnPostPone\");\r\n        FreeRoundBonusDialog.DialogButtonDeny = document.getElementById(\"dialogBtnDeny\");\r\n        FreeRoundBonusDialog.DialogButtonOk = document.getElementById(\"dialogBtnOk\");\r\n        FreeRoundBonusDialog.DialogButtonYes = document.getElementById(\"dialogBtnYes\");\r\n        FreeRoundBonusDialog.DialogButtonNo = document.getElementById(\"dialogBtnNo\");\r\n        FreeRoundBonusDialog.bindEvents();\r\n\r\n        FreeRoundBonusDialog.setupFRBDialogByConfiguration();\r\n    }\r\n\r\n    // new, other, active, end\r\n    public static showDialog(type: string): void {\r\n        DataManager.updateGameDataFromModule(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n        DataManager.updateGameDataFromModule(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\r\n        DataManager.updateGameDataFromModule(GameData.DataFrbValidTo, FreeRoundBonus.valid());\r\n        DataManager.updateGameDataFromModule(GameData.DataFrbWin, FreeRoundBonus.win());\r\n        DataManager.updateDataElement(GameData.DataFrbRemainginCount, FreeRoundBonus.remainingCount());\r\n        DataManager.updateDataElement(GameData.DataFrbAssignedCount, FreeRoundBonus.assignedCount());\r\n        DataManager.updateDataElement(GameData.DataFrbValidTo, FreeRoundBonus.valid());\r\n        DataManager.updateDataElement(GameData.DataFrbWin, FreeRoundBonus.win());\r\n        FreeRoundBonusDialog.termsUrl();\r\n        DataManager.showDataElements(\"frbRules\", \"\");\r\n        if (FreeRoundBonus.rulesLink() === \"\") {\r\n            DataManager.hideDataElements(\"frbRules\");\r\n        }\r\n        if (FreeRoundBonus.win() === \"\") {\r\n            DataManager.hideDataElements(\"frbWin\");\r\n        } else {\r\n            DataManager.showDataElements(\"frbWin\");\r\n        }\r\n        FreeRoundBonusDialog.hideAllButtons();\r\n        FreeRoundBonusDialog.hideAllContents();\r\n        DataManager.hideDataElements(\"frbCumulative\");\r\n        DataManager.hideDataElements(\"frbPlatformTransactionFail\");\r\n        Platforms.Platforms.closeMenu();\r\n        Platforms.Platforms.dialogOpened(\"frb\", true);\r\n        switch (type) {\r\n            case \"new\":\r\n                FreeRoundBonus.state = \"new\";\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentNew);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n\r\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n                    DataManager.showDataElements(\"frbCumulative\");\r\n                }\r\n\r\n                if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n                }\r\n\r\n                break;\r\n            case \"other\":\r\n                FreeRoundBonus.state = \"other\";\r\n                FreeRoundBonusDialog.refillOtherGames();\r\n                if (\r\n                    AppContext != null &&\r\n                    AppContext.gameConfiguration != null &&\r\n                    AppContext.gameConfiguration.ShowSimilarGames\r\n                ) {\r\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther);\r\n                } else {\r\n                    FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentOther2);\r\n                }\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n                FreeRoundBonus.openOther();\r\n                break;\r\n            case \"active\":\r\n                FreeRoundBonus.state = \"active\";\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentActive);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n                    DataManager.showDataElements(\"frbCumulative\");\r\n                }\r\n                break;\r\n            case \"end\":\r\n                FreeRoundBonus.state = \"end\";\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentEnd);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n                if (FreeRoundBonus.status === \"pending\" && FreeRoundBonus.totalWin > 0) {\r\n                    DataManager.showDataElements(\"frbPlatformTransactionFail\");\r\n                }\r\n                break;\r\n            case \"expired\":\r\n                FreeRoundBonus.state = \"expired\";\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogContentExpired);\r\n                FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.DialogButtonOk);\r\n                break;\r\n        }\r\n        DataManager.hideDataElements(\"frbRegular\");\r\n        DataManager.hideDataElements(\"frbFeature\");\r\n\r\n        if (FreeRoundBonus.state === \"new\" || FreeRoundBonus.state === \"active\") {\r\n            if (FreeRoundBonus.hasFeature !== null && FreeRoundBonus.hasFeature) {\r\n                FreeRoundBonusDialog.Dialog.classList.add(\"ffrDialog\");\r\n\r\n                if (FreeRoundBonus.remainingCount() === \"1\") {\r\n                    DataManager.showDataElements(\"frbFeatureSingle\");\r\n                } else {\r\n                    DataManager.showDataElements(\"frbFeatureMultiple\");\r\n                }\r\n            } else {\r\n                FreeRoundBonusDialog.Dialog.classList.remove(\"ffrDialog\");\r\n\r\n                if (FreeRoundBonus.remainingCount() === \"1\") {\r\n                    DataManager.showDataElements(\"frbRegularSingle\");\r\n                } else {\r\n                    DataManager.showDataElements(\"frbRegularMultiple\");\r\n                }\r\n            }\r\n        }\r\n\r\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.Dialog);\r\n    }\r\n\r\n    private static setConfirmationDialog(value: boolean): void {\r\n        FreeRoundBonusDialog.isConfirmationDialogOpened = value;\r\n    }\r\n\r\n    private static setPoinerEventsButtons(value: \"\" | \"none\" = \"\"): void {\r\n        FreeRoundBonusDialog.DialogButtonPlay.style.pointerEvents = value;\r\n        FreeRoundBonusDialog.DialogButtonPostPone.style.pointerEvents = value;\r\n        FreeRoundBonusDialog.DialogButtonDeny.style.pointerEvents = value;\r\n    }\r\n\r\n    public static hideDialog(): void {\r\n        Platforms.Platforms.dialogOpened(\"frb\", false);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.Dialog);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n    }\r\n\r\n    private static bindEvents(): void {\r\n        if (FreeRoundBonusDialog.DialogButtonPlay != null) {\r\n            FreeRoundBonusDialog.DialogButtonPlay.onclick = FreeRoundBonusDialog.onPlay;\r\n        }\r\n\r\n        if (FreeRoundBonusDialog.DialogButtonPostPone != null) {\r\n            FreeRoundBonusDialog.DialogButtonPostPone.onclick = FreeRoundBonusDialog.onPostPone;\r\n        }\r\n\r\n        if (FreeRoundBonusDialog.DialogButtonDeny != null) {\r\n            FreeRoundBonusDialog.DialogButtonDeny.onclick = FreeRoundBonusDialog.onDeny;\r\n        }\r\n\r\n        if (FreeRoundBonusDialog.DialogButtonOk != null) {\r\n            FreeRoundBonusDialog.DialogButtonOk.onclick = FreeRoundBonusDialog.onOk;\r\n        }\r\n\r\n        if (FreeRoundBonusDialog.DialogButtonYes != null) {\r\n            FreeRoundBonusDialog.DialogButtonYes.onclick = FreeRoundBonusDialog.onYes;\r\n        }\r\n\r\n        if (FreeRoundBonusDialog.DialogButtonNo != null) {\r\n            FreeRoundBonusDialog.DialogButtonNo.onclick = FreeRoundBonusDialog.onNo;\r\n        }\r\n    }\r\n\r\n    private static hideAllButtons(): void {\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPlay);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonPostPone);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonDeny);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogButtonOk);\r\n    }\r\n\r\n    private static hideAllContents(): void {\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentActive);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentNew);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentOther2);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentEnd);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.DialogContentExpired);\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n    }\r\n\r\n    private static showElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (element.classList.contains(\"_disabled\")) {\r\n                element.classList.remove(\"_disabled\");\r\n            }\r\n            if (element.classList.contains(\"_hidden\")) {\r\n                element.classList.remove(\"_hidden\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static hideElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (element.classList.contains(\"_disabled\")) {\r\n                element.classList.remove(\"_disabled\");\r\n            }\r\n            if (!element.classList.contains(\"_hidden\")) {\r\n                element.classList.add(\"_hidden\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static disableElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (!element.classList.contains(\"_disabled\")) {\r\n                element.classList.add(\"_disabled\");\r\n            }\r\n            if (element.classList.contains(\"_hidden\")) {\r\n                element.classList.remove(\"_hidden\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static onPlay(): void {\r\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n            return;\r\n        }\r\n\r\n        FreeRoundBonus.state = \"\";\r\n        PlayList.play(\"SND_Click\");\r\n        FreeRoundBonusDialog.hideDialog();\r\n        FreeRoundBonus.activateOffer();\r\n\r\n        FreeRoundBonusDialog.setPoinerEventsButtons(\"\");\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    private static onPostPone(): void {\r\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n            return;\r\n        }\r\n\r\n        FreeRoundBonus.state = \"\";\r\n        PlayList.play(\"SND_Click\");\r\n        FreeRoundBonusDialog.hideDialog();\r\n        FreeRoundBonus.enableGame();\r\n\r\n        FreeRoundBonusDialog.setPoinerEventsButtons(\"\");\r\n        RetentionPanel.revalidate();\r\n\r\n        BetHigherThanMinDialog.restoreDialog();\r\n    }\r\n\r\n    private static onDeny(): void {\r\n        if (FreeRoundBonusDialog.isConfirmationDialogOpened) {\r\n            return;\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        FreeRoundBonusDialog.showElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\r\n        FreeRoundBonusDialog.setConfirmationDialog(true);\r\n        FreeRoundBonusDialog.setPoinerEventsButtons(\"none\");\r\n        RetentionPanel.revalidate();\r\n\r\n        BetHigherThanMinDialog.restoreDialog();\r\n    }\r\n\r\n    private static onYes(): void {\r\n        FreeRoundBonus.state = \"\";\r\n        PlayList.play(\"SND_Click\");\r\n        FreeRoundBonusDialog.hideDialog();\r\n        FreeRoundBonus.declineOffer();\r\n\r\n        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n        FreeRoundBonusDialog.setPoinerEventsButtons(\"\");\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    private static onNo(): void {\r\n        // FreeRoundBonus.state = ''; //we need to keep state, etc. when reality check dialog open\r\n        PlayList.play(\"SND_Click\");\r\n        FreeRoundBonusDialog.hideElement(FreeRoundBonusDialog.ConfirmationDialog);\r\n\r\n        FreeRoundBonusDialog.setConfirmationDialog(false);\r\n        FreeRoundBonusDialog.setPoinerEventsButtons(\"\");\r\n    }\r\n\r\n    private static onOk(): void {\r\n        FreeRoundBonus.state = \"\";\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        FreeRoundBonusDialog.hideDialog();\r\n\r\n        if (FreeRoundBonus.isLastFrb) {\r\n            FreeRoundBonus.finishFreeRounds();\r\n        } else {\r\n            FreeRoundBonus.enableGame();\r\n        }\r\n\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    public static revalidateOtherGames(): boolean {\r\n        if (\r\n            AppContext != null &&\r\n            AppContext.gameConfiguration != null &&\r\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\r\n        ) {\r\n            return false;\r\n        }\r\n        FreeRoundBonusDialog.otherOffersKeys = [];\r\n        if (FreeRoundBonus.otherOfferes.length > 0) {\r\n            let now: number = new Date().getTime();\r\n            for (let i: number = 0; i < FreeRoundBonus.otherOfferes.length; i++) {\r\n                if (FreeRoundBonus.otherOfferes[i][\"validTo\"] != null) {\r\n                    let countDownDate: number = new Date(\r\n                        FreeRoundBonus.otherOfferes[i][\"validTo\"] + \"+00:00\",\r\n                    ).getTime();\r\n                    let distance: number = countDownDate - now;\r\n                    if (distance > 0 && FreeRoundBonus.otherOfferes[i][\"gameCode\"] != null) {\r\n                        FreeRoundBonusDialog.otherOffersKeys.push(FreeRoundBonus.otherOfferes[i][\"gameCode\"]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (FreeRoundBonusDialog.otherOffersKeys.length > 0) {\r\n            return true;\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    public static refillOtherGames(): void {\r\n        if (FreeRoundBonusDialog.DialogContentOtherList != null) {\r\n            FreeRoundBonusDialog.DialogContentOtherList.innerHTML = \"\";\r\n        }\r\n        if (FreeRoundBonusDialog.DialogContentOtherList2 != null) {\r\n            FreeRoundBonusDialog.DialogContentOtherList2.innerHTML = \"\";\r\n        }\r\n        for (let i: number = 0; i < 5; i++) {\r\n            if (FreeRoundBonusDialog.otherOffersKeys.length > 0 && FreeRoundBonusDialog.otherOffersKeys[i] != null) {\r\n                FreeRoundBonusDialog.createItem(\r\n                    FreeRoundBonusDialog.otherOffersKeys[i],\r\n                    false,\r\n                    FreeRoundBonusDialog.DialogContentOtherList,\r\n                );\r\n                FreeRoundBonusDialog.createItem(\r\n                    FreeRoundBonusDialog.otherOffersKeys[i],\r\n                    true,\r\n                    FreeRoundBonusDialog.DialogContentOtherList2,\r\n                );\r\n            }\r\n        }\r\n    }\r\n\r\n    private static createItem(gameCode: string, noClick: boolean, parent: HTMLElement): void {\r\n        if (\r\n            AppContext != null &&\r\n            AppContext.gameConfiguration != null &&\r\n            AppContext.gameConfiguration.StaticContentUrl === \"\"\r\n        ) {\r\n            return;\r\n        }\r\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n\r\n        itemHolder.classList.add(\"frbOfferItem\");\r\n        itemLoading.classList.add(\"frbGameLoading\");\r\n        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n        itemLogo.classList.add(\"frbGameLogo\");\r\n        itemLogo.setAttribute(\"game\", gameCode);\r\n        itemLogo.style.background =\r\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + gameCode + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n\r\n        itemHolder.appendChild(itemLoading);\r\n        itemLoading.appendChild(itemLoadingIcon);\r\n        itemHolder.appendChild(itemLogo);\r\n        if (!noClick) {\r\n            itemLogo.onclick = FreeRoundBonusDialog.selectGame;\r\n        }\r\n\r\n        if (parent != null) {\r\n            parent.appendChild(itemHolder);\r\n        }\r\n    }\r\n\r\n    private static selectGame(e: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n\r\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\r\n                let token: string = urlInfo[\"hash\"].substring(1);\r\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n                let root: HTMLElement = document.getElementById(\"root\");\r\n                if (root != null) {\r\n                    root.style.display = \"none\";\r\n                }\r\n\r\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n                if (Platforms.Platforms.handleChangeGame) {\r\n                    return;\r\n                }\r\n\r\n                setTimeout(() => {\r\n                    window.location.href = newUrl;\r\n                }, 100);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static termsUrl(): void {\r\n        if (FreeRoundBonus.termsUrl != null && FreeRoundBonus.termsUrl !== \"\") {\r\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(\"termsLink\");\r\n            for (let i: number = 0; i < elements.length; i++) {\r\n                let element: HTMLElement = <HTMLElement>elements[i];\r\n                if (element != null) {\r\n                    element.setAttribute(\"href\", FreeRoundBonus.termsUrl);\r\n\r\n                    //fix to prevent Focus.onClick calling\r\n                    element.addEventListener(\"click\", function (e: Event) {\r\n                        e.stopPropagation();\r\n                    });\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private static setupFRBDialogByConfiguration(): void {\r\n        if (AppContext.gameConfiguration) {\r\n            if (!AppContext.gameConfiguration.FRBShowDenyButton) {\r\n                FreeRoundBonusDialog.hideFRBDenyButton();\r\n            }\r\n\r\n            if (!AppContext.gameConfiguration.FRBShowPostponeButton) {\r\n                FreeRoundBonusDialog.hideFRBPostPoneButton();\r\n            }\r\n        }\r\n    }\r\n\r\n    private static hideFRBDenyButton(): void {\r\n        if (FreeRoundBonusDialog.DialogButtonDeny) {\r\n            FreeRoundBonusDialog.DialogButtonDeny.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonDeny);\r\n        }\r\n\r\n        //remove info text from message\r\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n        if (infoMsg) {\r\n            infoMsg.parentNode.removeChild(infoMsg);\r\n        }\r\n    }\r\n\r\n    private static hideFRBPostPoneButton(): void {\r\n        if (FreeRoundBonusDialog.DialogButtonPostPone) {\r\n            FreeRoundBonusDialog.DialogButtonPostPone.parentNode.removeChild(FreeRoundBonusDialog.DialogButtonPostPone);\r\n        }\r\n\r\n        //remove info text from message\r\n        let infoMsg = document.getElementById(\"frbDialogPlayingOptions3\");\r\n        if (infoMsg) {\r\n            infoMsg.parentNode.removeChild(infoMsg);\r\n        }\r\n    }\r\n\r\n    public static dialogActive(): boolean {\r\n        return !FreeRoundBonusDialog.Dialog.classList.contains(\"_hidden\");\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusDialog.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\r\nimport { Song } from \"./Song\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\nimport { SoundManager } from \"../Managers/SoundManager\";\r\n\r\n@engineComponent(ComponentTypes.PlayList)\r\nexport class PlayList {\r\n    static Songs: { [id: string]: Song } = {};\r\n\r\n    static addToPlayList(song: Song): void {\r\n        PlayList.Songs[song.id] = song;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        SoundManager.parseElements(node, node.nodeName);\r\n    }\r\n\r\n    static play(song: string, fadeIn: number = 0, reset: boolean = true): void {\r\n        if (PlayList.Songs[song] != null) {\r\n            PlayList.Songs[song].play(false, fadeIn, reset);\r\n            if (DEBUG) {\r\n                PlayList.log(\"play song \" + song);\r\n            }\r\n        }\r\n    }\r\n\r\n    static loop(song: string, fadeIn: number = 0, reset: boolean = false): void {\r\n        if (PlayList.Songs[song] != null) {\r\n            PlayList.Songs[song].play(true, fadeIn, reset);\r\n            if (DEBUG) {\r\n                PlayList.log(\"loop song \" + song);\r\n            }\r\n        }\r\n    }\r\n\r\n    static stop(song: string, fadeOut: number = 0): void {\r\n        if (PlayList.Songs[song] != null) {\r\n            PlayList.Songs[song].stop(fadeOut);\r\n            if (DEBUG) {\r\n                PlayList.log(\"stop song \" + song);\r\n            }\r\n        }\r\n    }\r\n\r\n    static stopAll(fadeOut: number = 0): void {\r\n        if (PlayList.Songs != null) {\r\n            for (let song in PlayList.Songs) {\r\n                PlayList.Songs[song].stop(fadeOut);\r\n            }\r\n            if (DEBUG) {\r\n                PlayList.log(\"stopAll songs\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static stopAllInGroup(group: string, toggle: boolean = false): void {\r\n        if (PlayList.Songs != null) {\r\n            for (let song in PlayList.Songs) {\r\n                PlayList.Songs[song].toggleGroup(group, toggle);\r\n            }\r\n        }\r\n    }\r\n\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            const compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/PlayList.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\nimport { PlayList } from \"../Sounds/PlayList\";\r\n\r\n/**\r\n * The SoundManager class is used for parsing elements which are representation of playlists and songs.\r\n * @class SoundManager\r\n */\r\nexport class SoundManager {\r\n    // TODO any\r\n    static PlayLists: { [id: string]: any } = {};\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"SoundManager\", data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parse songs and playlists.\r\n     * @method parseElements\r\n     * @param node Element\r\n     * @param playList string - optional\r\n     * @return void\r\n     */\r\n    static parseElements(node: Element, playList: string = \"\"): void {\r\n        if (node != null) {\r\n            var next: Element = node.firstElementChild;\r\n\r\n            while (next != null) {\r\n                var cls: string = \"\";\r\n                if (next.hasAttribute(\"Class\")) {\r\n                    cls = next.getAttribute(\"Class\");\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING element with name: \" + next.nodeName + \" has no class\");\r\n                    }\r\n                }\r\n\r\n                if (cls !== \"\") {\r\n                    if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.PlayList)) {\r\n                        var element: any = EngineComponentFactory.get(cls);\r\n                        SoundManager.PlayLists[next.nodeName] = element;\r\n                        element.create(next);\r\n                    } else if (EngineComponentFactory.isTypeOf(cls, ComponentTypes.Song)) {\r\n                        var element: any = EngineComponentFactory.get(cls);\r\n                        element.create(next);\r\n\r\n                        if (playList !== \"\") {\r\n                            PlayList.addToPlayList(element);\r\n                        }\r\n                    }\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/SoundManager.ts\n **/","import { StringUtils, Logger } from \"neo-common\";\r\nimport { Scaling } from \"./Scaling\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\r\n\r\nexport class RetentionPanel {\r\n    //******************************************************************************************************************\r\n    //  INSTANCE\r\n    //******************************************************************************************************************\r\n\r\n    private static instance: RetentionPanel;\r\n\r\n    //******************************************************************************************************************\r\n    //  SETTINGS\r\n    //******************************************************************************************************************\r\n\r\n    private static panelParentId: string = \"root\";\r\n\r\n    private static initRevalidateTimeout: number = 500;\r\n\r\n    private static landscapeMaxIconCount: number = window[\"CHANNEL\"] === \"mobile\" ? 4 : 5;\r\n\r\n    private static portraitMaxIconCount: number = 2;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private static panelWidth: number = 0;\r\n\r\n    private static canShow: boolean = false;\r\n\r\n    private static peakActive: number = 0;\r\n\r\n    private screen: HTMLElement;\r\n\r\n    private content: HTMLElement;\r\n\r\n    private panel: HTMLElement;\r\n\r\n    private icons: HTMLElement;\r\n\r\n    private lastCount: number;\r\n\r\n    private iconsSlotsCount: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  EVENTS\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        this.screen = null;\r\n        this.panel = null;\r\n        this.icons = null;\r\n        this.lastCount = 0;\r\n\r\n        this.createPanel();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PUBLIC\r\n    //******************************************************************************************************************\r\n\r\n    public revalidate(): void {\r\n        if (!RetentionPanel.canShow) {\r\n            return;\r\n        }\r\n\r\n        if (this.screen == null) {\r\n            return;\r\n        }\r\n\r\n        if (this.panel == null) {\r\n            return;\r\n        }\r\n\r\n        this.log(\"revalidate\");\r\n        if (this.hasActiveIcon()) {\r\n            document.body.classList.add(\"retention-panel-active\");\r\n            RetentionPanel.panelWidth = parseInt(window.getComputedStyle(this.panel).width);\r\n        } else {\r\n            document.body.classList.remove(\"retention-panel-active\");\r\n            RetentionPanel.panelWidth = 0;\r\n        }\r\n        this.showPeakHelpIcon();\r\n        Scaling.LeftPanelWidth = RetentionPanel.panelWidth;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PRIVATE\r\n    //******************************************************************************************************************\r\n\r\n    private showPeakHelpIcon(): void {\r\n        let peakHelp = document.querySelector(\".hlpTournamentsBtn\");\r\n\r\n        if (RetentionPanel.peakActive) {\r\n            let peakHelpIcon = document.querySelector(\".btnTournaments\");\r\n            let peakHelpIconBackground =\r\n                document.getElementById(\"peakMenuBtn\") != null\r\n                    ? window.getComputedStyle(document.getElementById(\"peakMenuBtn\")).backgroundImage\r\n                    : false;\r\n            let peakHelpIconBackgroundSize =\r\n                document.querySelector(\".hlpMenu\") != null\r\n                    ? window.getComputedStyle(document.querySelector(\".hlpMenu\")).width\r\n                    : false;\r\n            if (peakHelp != null && peakHelpIcon != null && peakHelpIconBackground && peakHelpIconBackgroundSize) {\r\n                peakHelpIcon.setAttribute(\r\n                    \"style\",\r\n                    \"background-image:\" +\r\n                        peakHelpIconBackground +\r\n                        \"; height:100%; background-position: center; background-size: auto \" +\r\n                        peakHelpIconBackgroundSize +\r\n                        \"; -webkit-transform: scale(0.66); transform: scale(0.66);\",\r\n                );\r\n                peakHelp.classList.remove(\"_hidden\");\r\n            } else {\r\n                setTimeout(() => {\r\n                    this.showPeakHelpIcon();\r\n                }, RetentionPanel.initRevalidateTimeout);\r\n            }\r\n        } else {\r\n            peakHelp.classList.add(\"_hidden\");\r\n        }\r\n    }\r\n\r\n    private createPanel(): void {\r\n        const root = document.getElementById(RetentionPanel.panelParentId);\r\n\r\n        if (root == null) {\r\n            if (DEBUG) {\r\n                console.log(`ERROR - panel with id ${RetentionPanel.panelParentId} was not found`);\r\n            }\r\n            return;\r\n        }\r\n\r\n        this.screen = this.createElement(\"div\", \"retentionScreen\", [\"screen\"]);\r\n        this.content = this.createElement(\"div\", \"retentionContent\");\r\n        this.panel = this.createElement(\"div\", \"retentionPanel\", [\"gameControls\"]);\r\n        this.icons = this.createElement(\"div\", \"retentionPanelIcons\");\r\n\r\n        this.createContentPlaceholder(this.content);\r\n        this.createIconsPlaceholder(this.icons);\r\n\r\n        this.screen.appendChild(this.content);\r\n        this.screen.appendChild(this.panel);\r\n        this.panel.appendChild(this.icons);\r\n\r\n        root.appendChild(this.screen);\r\n    }\r\n\r\n    private createContentPlaceholder(contentHolder: HTMLElement): void {\r\n        if (contentHolder == null) {\r\n            return;\r\n        }\r\n\r\n        contentHolder.appendChild(this.createElement(\"div\", \"peakContentHolder\", [\"retentionContentHolder\"]));\r\n        contentHolder.appendChild(this.createElement(\"div\", \"frbContentHolder\", [\"retentionContentHolder\"]));\r\n    }\r\n\r\n    private createIconsPlaceholder(iconsHolder: HTMLElement): void {\r\n        if (iconsHolder == null) {\r\n            return;\r\n        }\r\n\r\n        iconsHolder.appendChild(this.createElement(\"div\", \"peakIconHolder\", [\"retentionIconHolder\"]));\r\n        iconsHolder.appendChild(this.createElement(\"div\", \"frbIconHolder\", [\"retentionIconHolder\"]));\r\n\r\n        for (let i = 0; i < iconsHolder.children.length; i++) {\r\n            let child = iconsHolder.children[i];\r\n            child.addEventListener(\"click\", (event) => {\r\n                BetHigherThanMinDialog.closeDialog();\r\n            });\r\n        }\r\n    }\r\n\r\n    private createElement(type: string, id: string = \"\", classList: Array<string> = []): HTMLElement {\r\n        const elem = document.createElement(type);\r\n\r\n        if (!StringUtils.isNullOrEmpty(id)) {\r\n            elem.id = id;\r\n        }\r\n\r\n        if (classList.length > 0) {\r\n            for (let i = 0; i < classList.length; i++) {\r\n                elem.classList.add(classList[i]);\r\n            }\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    public updateCount(currentCount: number = -1): void {\r\n        currentCount = currentCount == -1 ? this.lastCount : currentCount;\r\n\r\n        const isPortrait = Scaling.isPortrait();\r\n        const slots = isPortrait\r\n            ? RetentionPanel.portraitMaxIconCount - currentCount\r\n            : RetentionPanel.landscapeMaxIconCount - currentCount;\r\n\r\n        if (this.iconsSlotsCount != slots) {\r\n            this.iconsSlotsCount = slots;\r\n            Platforms.Platforms.iconsCountAvailable(slots);\r\n        }\r\n\r\n        const isMultiIcon = this.isMultiIcon(currentCount);\r\n        this.icons.classList.remove(\r\n            \"retention-icon-count-\" + this.lastCount,\r\n            \"retention-icon-count-\" + this.lastCount + \"-m\",\r\n        );\r\n        this.icons.classList.add(\r\n            \"retention-icon-count-\" + currentCount + (isMultiIcon || RetentionPanel.peakActive > 1 ? \"-m\" : \"\"),\r\n        );\r\n        this.lastCount = currentCount;\r\n    }\r\n\r\n    private isMultiIcon(count: number): boolean {\r\n        if (count == 0 || count > 1) {\r\n            return false;\r\n        }\r\n\r\n        const style = window.getComputedStyle(this.icons);\r\n        const width = parseInt(style.width);\r\n        const height = parseInt(style.height);\r\n\r\n        return width != 0 ? height / width > 1.5 : false;\r\n    }\r\n\r\n    private hasActiveIcon(): boolean {\r\n        if (this.panel == null) {\r\n            return false;\r\n        }\r\n\r\n        if (this.icons == null) {\r\n            return false;\r\n        }\r\n\r\n        let result = false;\r\n        let count = 0;\r\n        RetentionPanel.peakActive = 0;\r\n        const children = this.icons.children;\r\n        for (let i = 0; i < children.length; i++) {\r\n            const child = children[i] as HTMLElement;\r\n            if (child != null) {\r\n                const iconChildren = child.children;\r\n\r\n                for (let j = 0; j < iconChildren.length; j++) {\r\n                    const iconChild = iconChildren[j] as HTMLElement;\r\n\r\n                    if (iconChild.getAttribute(\"active\") == \"true\") {\r\n                        result = true;\r\n                        count++;\r\n                        if (\r\n                            iconChild.hasAttribute(\"promotions-count\") &&\r\n                            parseInt(iconChild.getAttribute(\"promotions-count\")) > 0\r\n                        )\r\n                            RetentionPanel.peakActive = parseInt(iconChild.getAttribute(\"promotions-count\"));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        this.updateCount(count);\r\n        return result;\r\n    }\r\n\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"RetentionPanel\", \"RetentionPanel \" + s);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PUBLIC STATIC\r\n    //******************************************************************************************************************\r\n\r\n    private static getInstance(): RetentionPanel {\r\n        if (RetentionPanel.instance == null) {\r\n            RetentionPanel.instance = new RetentionPanel();\r\n        }\r\n\r\n        return RetentionPanel.instance;\r\n    }\r\n\r\n    public static initialize(): void {\r\n        RetentionPanel.getInstance();\r\n    }\r\n\r\n    public static show(): void {\r\n        RetentionPanel.canShow = true;\r\n        RetentionPanel.revalidate();\r\n\r\n        Scaling.Emitter.on(Scaling.EventResize, () => {\r\n            RetentionPanel.getInstance().updateCount();\r\n            RetentionPanel.getInstance().revalidate();\r\n        });\r\n\r\n        //revalidate possible loaded plugins after loading screen is hidden\r\n        setTimeout(() => {\r\n            RetentionPanel.revalidate();\r\n        }, RetentionPanel.initRevalidateTimeout);\r\n    }\r\n\r\n    public static revalidate(): void {\r\n        RetentionPanel.getInstance().revalidate();\r\n        Scaling.resizeRoot(false, false);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/RetentionPanel.ts\n **/","import { Languages } from \"../../../Utils/Languages\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { BetManager } from \"../../../Managers/BetManager\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { Communication } from \"neo-games\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\nimport { Jackpot } from \"../Bonuses/Jackpot\";\r\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\r\n\r\n/**\r\n * Class representing the Bet Higher Than Minimum Dialog.\r\n */\r\nexport class BetHigherThanMinDialog {\r\n    private static _wasOpened: boolean = false;\r\n    private static _isOpened: boolean = false;\r\n    private static _reopenDialog: boolean = false;\r\n    private static _gameStartedWithFeature: boolean = false;\r\n    private static _gameStarted: boolean = true;\r\n\r\n    /**\r\n     * Opens the dialog if the conditions are met.\r\n     */\r\n    public static openDialog(): void {\r\n        if (\r\n            !this.canNotifyBetHigherThanMin() ||\r\n            (this._wasOpened && !this._reopenDialog) ||\r\n            FreeRoundBonusDialog.dialogActive()\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        const minBet =\r\n            Languages.formatText(Languages.FormatMoney, this.getMinBet().toString()) +\r\n            \" \" +\r\n            DataManager.getDataById(GameData.DataCurrency);\r\n        const message = Languages.getRid(\"EXCEED_MIN_BET\", minBet);\r\n\r\n        const dialogData = {\r\n            text: message,\r\n            actions: [\r\n                {\r\n                    type: \"restore\",\r\n                    text: Languages.getRid(\"CONTINUE\"),\r\n                    customData: Communication.Game.GameModules.Base,\r\n                },\r\n            ],\r\n            special: true,\r\n        };\r\n\r\n        AppContext.current.showDialog(message, false, null, null, null, dialogData);\r\n        this._wasOpened = true;\r\n        this._isOpened = true;\r\n    }\r\n\r\n    /**\r\n     * Determines if the dialog can be opened.\r\n     * @returns True if the dialog can be opened, otherwise false.\r\n     */\r\n    public static canOpenDialog(): boolean {\r\n        return (\r\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n            !this.isMinBet() &&\r\n            !ModuleManager.gambleActive() &&\r\n            !(FreeRoundBonus.status && FreeRoundBonus.status === \"active\") &&\r\n            !Jackpot.hasMiniGame() &&\r\n            !this._wasOpened &&\r\n            this._gameStartedWithFeature\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Closes the dialog if it is opened or prevents from opening if bet was changed.\r\n     * @param changeBet - Indicates whether the bet was changed.\r\n     */\r\n    public static closeDialog(changeBet?: boolean): void {\r\n        if (this._isOpened) {\r\n            this._isOpened = false;\r\n            AppContext.current.closeDialog();\r\n        }\r\n        if (changeBet) {\r\n            this._wasOpened = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Hides the dialog for later restoration.\r\n     */\r\n    public static hideDialog(): void {\r\n        if (this._isOpened) {\r\n            this._reopenDialog = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Restores the dialog if it was hidden.\r\n     */\r\n    public static restoreDialog(): void {\r\n        if (this._reopenDialog) {\r\n            this.openDialog();\r\n            this._reopenDialog = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sets the opened status of the dialog to false.\r\n     */\r\n    public static setOpenedStatus(): void {\r\n        if (this._isOpened) {\r\n            this._isOpened = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Checks if a game feature is currently active.\r\n     * @returns True if any game feature is active, otherwise false.\r\n     */\r\n    private static gameFeatureActive(): boolean {\r\n        return (\r\n            ModuleManager.gambleActive() ||\r\n            (FreeRoundBonus.status && FreeRoundBonus.status === \"active\") ||\r\n            Jackpot.hasMiniGame() ||\r\n            !DataManager.GameRoundClosed\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Checks if the current bet is the minimum bet.\r\n     * @returns True if the current bet is the minimum bet, otherwise false.\r\n     */\r\n    private static isMinBet(): boolean {\r\n        BetManager.updateBetPosition();\r\n        return BetManager.minBet;\r\n    }\r\n\r\n    /**\r\n     * Determines if a notification for a bet higher than the minimum should be sent.\r\n     * @returns True if a notification should be sent, otherwise false.\r\n     */\r\n    public static canNotifyBetHigherThanMin(): boolean {\r\n        return (\r\n            !this.isMinBet() &&\r\n            AppContext.gameConfiguration.NotifyBetHigherThanMin &&\r\n            this._gameStartedWithFeature &&\r\n            !this.gameFeatureActive()\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Gets the minimum bet value from total bets.\r\n     * @returns The minimum bet.\r\n     */\r\n    private static getMinBet(): number {\r\n        return Math.min(...BetManager.TotalBets);\r\n    }\r\n\r\n    /**\r\n     * Checks if the game started with a feature.\r\n     * @returns True if the game started with a feature active, otherwise false.\r\n     */\r\n    public static getGameStartedWithoutFeature(): boolean {\r\n        if (this._gameStarted) {\r\n            this._gameStartedWithFeature = this.gameFeatureActive();\r\n            this._gameStarted = false;\r\n        }\r\n        return !this._gameStartedWithFeature && AppContext.gameConfiguration.NotifyBetHigherThanMin;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/BetHigherThanMinDialog.ts\n **/","import { Communication } from \"neo-games\";\r\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { RetentionPanel } from \"../../../Utils/RetentionPanel\";\r\n\r\ntype FreeRoundsOffersResponse = Communication.Game.FreeRoundsOffersResponse;\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\nexport class FreeRoundBonusIcon {\r\n    private static IconNew: HTMLElement;\r\n    private static IconActive: HTMLElement;\r\n\r\n    public static initalize(): void {\r\n        FreeRoundBonusIcon.IconNew = document.getElementById(\"frbIconNew\");\r\n        FreeRoundBonusIcon.IconActive = document.getElementById(\"frbIconActive\");\r\n        FreeRoundBonusIcon.bindEvents();\r\n    }\r\n\r\n    // new, active\r\n    public static showIcon(type: string): void {\r\n        FreeRoundBonusIcon.hideAllIcons();\r\n        switch (type) {\r\n            case \"new\":\r\n                DataManager.showDataElements(\"helpFRB\", \"block\");\r\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconNew);\r\n                RetentionPanel.revalidate();\r\n                break;\r\n            case \"active\":\r\n                DataManager.showDataElements(\"helpFRB\", \"block\");\r\n                DataManager.showDataElements(\"helpFRB_flex\", \"flex\");\r\n                FreeRoundBonusIcon.showElement(FreeRoundBonusIcon.IconActive);\r\n                if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n                    if (FreeRoundBonusIcon.IconActive != null) {\r\n                        FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n                    }\r\n                }\r\n                RetentionPanel.revalidate();\r\n                break;\r\n        }\r\n        FreeRoundBonusIcon.toggleCumulative();\r\n    }\r\n\r\n    /**\r\n     * Toggle cumulative style(s)\r\n     */\r\n    private static toggleCumulative(): void {\r\n        if (FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (FreeRoundBonusIcon.IconActive != null) {\r\n                FreeRoundBonusIcon.IconActive.classList.add(\"cumulativeFrb\");\r\n            }\r\n        } else {\r\n            if (FreeRoundBonusIcon.IconActive != null) {\r\n                FreeRoundBonusIcon.IconActive.classList.remove(\"cumulativeFrb\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static bindEvents(): void {\r\n        if (FreeRoundBonusIcon.IconNew != null) {\r\n            FreeRoundBonusIcon.IconNew.onclick = FreeRoundBonusIcon.handleIconClick.bind(\r\n                this,\r\n                FreeRoundBonusIcon.onNew,\r\n            );\r\n        }\r\n\r\n        if (FreeRoundBonusIcon.IconActive != null) {\r\n            FreeRoundBonusIcon.IconActive.onclick = FreeRoundBonusIcon.handleIconClick.bind(\r\n                this,\r\n                FreeRoundBonusIcon.onActive,\r\n            );\r\n        }\r\n    }\r\n\r\n    public static hideAllIcons(): void {\r\n        DataManager.hideDataElements(\"helpFRB\");\r\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconNew);\r\n        FreeRoundBonusIcon.hideElement(FreeRoundBonusIcon.IconActive);\r\n    }\r\n\r\n    public static disableActiveIcon(): void {\r\n        if (\r\n            FreeRoundBonusIcon.IconNew != null &&\r\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\r\n        ) {\r\n            FreeRoundBonusIcon.IconNew.classList.add(\"_disabled\");\r\n        }\r\n        if (\r\n            FreeRoundBonusIcon.IconActive != null &&\r\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\r\n        ) {\r\n            FreeRoundBonusIcon.IconActive.classList.add(\"_disabled\");\r\n        }\r\n    }\r\n\r\n    public static enableActiveIcon(): void {\r\n        if (DataManager.Autoplay && (parseFloat(DataManager.AutoplayCount) > 0 || DataManager.AutoplayCount === \"∞\")) {\r\n            return;\r\n        }\r\n        if (\r\n            FreeRoundBonusIcon.IconNew != null &&\r\n            !FreeRoundBonusIcon.IconNew.classList.contains(\"_hidden\") &&\r\n            FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")\r\n        ) {\r\n            FreeRoundBonusIcon.IconNew.classList.remove(\"_disabled\");\r\n        }\r\n        if (\r\n            FreeRoundBonusIcon.IconActive != null &&\r\n            !FreeRoundBonusIcon.IconActive.classList.contains(\"_hidden\") &&\r\n            FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")\r\n        ) {\r\n            FreeRoundBonusIcon.IconActive.classList.remove(\"_disabled\");\r\n        }\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    private static showElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (element.classList.contains(\"_disabled\")) {\r\n                element.classList.remove(\"_disabled\");\r\n            }\r\n            if (element.classList.contains(\"_hidden\")) {\r\n                element.classList.remove(\"_hidden\");\r\n            }\r\n            if (element.getAttribute(\"active\") != \"true\") {\r\n                element.setAttribute(\"active\", \"true\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static hideElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (element.classList.contains(\"_disabled\")) {\r\n                element.classList.remove(\"_disabled\");\r\n            }\r\n            if (!element.classList.contains(\"_hidden\")) {\r\n                element.classList.add(\"_hidden\");\r\n            }\r\n            if (element.getAttribute(\"active\") != \"false\") {\r\n                element.setAttribute(\"active\", \"false\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private static disableElement(element: HTMLElement): void {\r\n        if (element != null) {\r\n            if (!element.classList.contains(\"_disabled\")) {\r\n                element.classList.add(\"_disabled\");\r\n            }\r\n            if (element.classList.contains(\"_hidden\")) {\r\n                element.classList.remove(\"_hidden\");\r\n            }\r\n            if (element.getAttribute(\"active\") != \"true\") {\r\n                element.setAttribute(\"active\", \"true\");\r\n            }\r\n        }\r\n    }\r\n\r\n    public static isDisabled(): boolean {\r\n        let isDis: boolean = false;\r\n        if (FreeRoundBonusIcon.IconNew != null && FreeRoundBonusIcon.IconNew.classList.contains(\"_disabled\")) {\r\n            isDis = true;\r\n        }\r\n        if (FreeRoundBonusIcon.IconActive != null && FreeRoundBonusIcon.IconActive.classList.contains(\"_disabled\")) {\r\n            isDis = true;\r\n        }\r\n        return isDis;\r\n    }\r\n\r\n    private static handleIconClick(callback: () => void, event: Event): void {\r\n        let element = <Element>event.target;\r\n\r\n        if (!FreeRoundBonusIcon.isDisabled() && element != null) {\r\n            element.classList.add(\"_loading\");\r\n\r\n            GameApp.gameClient\r\n                .sendFreeRoundsOffersRequest(GameApp.key)\r\n                .then((response: FreeRoundsOffersResponse) => {\r\n                    if (response != null) {\r\n                        if (response.currentOffer != null || response.otherOffers != null) {\r\n                            callback();\r\n                        } else {\r\n                            FreeRoundBonus.expiredFreeRounds();\r\n                        }\r\n                    } else {\r\n                        FreeRoundBonus.expiredFreeRounds();\r\n                    }\r\n                })\r\n                .finally(() => {\r\n                    element.classList.remove(\"_loading\");\r\n                });\r\n        }\r\n    }\r\n\r\n    private static onNew(): void {\r\n        if (!FreeRoundBonusIcon.isDisabled()) {\r\n            PlayList.play(\"SND_Click\");\r\n            if (FreeRoundBonus.id != null) {\r\n                FreeRoundBonusDialog.showDialog(\"new\");\r\n            } else {\r\n                if (FreeRoundBonus.otherOfferes.length > 0) {\r\n                    FreeRoundBonusDialog.showDialog(\"other\");\r\n                }\r\n            }\r\n            ModuleManager.disableBase();\r\n        }\r\n    }\r\n\r\n    private static onActive(): void {\r\n        if (!FreeRoundBonusIcon.isDisabled() && parseInt(FreeRoundBonus.remainingCount()) > 0) {\r\n            PlayList.play(\"SND_Click\");\r\n            FreeRoundBonusDialog.showDialog(\"active\");\r\n            ModuleManager.disableBase();\r\n            ModuleManager.resetSceneAsOnCollect(GameModules.Base);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/FreeRoundBonusIcon.ts\n **/","import { Utils, Logger, NumberUtils, StringUtils } from \"neo-common\";\r\nimport { ClientHost, GameEngine, Platforms } from \"neo-games\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\nimport { FreeRoundBonusDialog } from \"./FreeRoundBonusDialog\";\r\nimport { RealityCheckGetInfoResponse } from \"neo-games/Engine/Communication/Game/Responses/RealityCheckGetInfoResponse\";\r\nimport { BetManager } from \"../../../Managers/BetManager\";\r\nimport { MessageManager } from \"../../../Managers/MessageManager\";\r\nimport { Jackpot } from \"../Bonuses/Jackpot\";\r\nimport { BetHigherThanMinDialog } from \"./BetHigherThanMinDialog\";\r\n\r\n/**\r\n * Create dialog filled from code.\r\n * @class Dialog\r\n */\r\nexport class ResponsibleDialog1 {\r\n    static opened: boolean = false;\r\n\r\n    static DisabledClass: string = \"_disabled\";\r\n\r\n    private static _element: HTMLElement;\r\n    private static _continueButton: HTMLElement;\r\n    private static _historyButton: HTMLElement;\r\n    private static _closeButton: HTMLElement;\r\n\r\n    static showResponsibleDialog1OnCollect: boolean = false;\r\n    static responsibleDialog1Data: ClientHost.Types.ClientHostResponsibleDialogData;\r\n\r\n    static openDialog(data: ClientHost.Types.ClientHostResponsibleDialogData): void {\r\n        if (AppContext.gameConfiguration.RCIInfo) {\r\n            GameManager.gameClient.getRealityCheckInfo().then((response: any): any => {\r\n                ResponsibleDialog1.openDialogContinue(data, response);\r\n            });\r\n        } else {\r\n            ResponsibleDialog1.openDialogContinue(data);\r\n        }\r\n    }\r\n\r\n    static openDialogContinue(\r\n        data: ClientHost.Types.ClientHostResponsibleDialogData,\r\n        info: RealityCheckGetInfoResponse = null,\r\n    ): void {\r\n        if (ResponsibleDialog1._element == null) {\r\n            ResponsibleDialog1._element = document.getElementById(\"responsibleGamingDialog\");\r\n        }\r\n\r\n        if (\r\n            !Utils.isNullOrUndefined(info) &&\r\n            !Utils.isNullOrUndefined(info[\"messages\"]) &&\r\n            info[\"messages\"].length > 0\r\n        ) {\r\n            MessageManager.postpone(ResponsibleDialog1.onContinue, info);\r\n            return;\r\n        }\r\n\r\n        let elementWin: HTMLElement = document.getElementById(\"rciWin\");\r\n        let elementLost: HTMLElement = document.getElementById(\"rciLost\");\r\n        let totalGain: number = 0;\r\n\r\n        Platforms.Platforms.dialogOpened(\"rci\", true);\r\n\r\n        if (info != null) {\r\n            if (info.totalGain <= 0) {\r\n                elementWin.style.display = \"none\";\r\n                elementLost.style.display = \"block\";\r\n                totalGain = -1 * info.totalGain;\r\n            } else {\r\n                elementWin.style.display = \"block\";\r\n                elementLost.style.display = \"none\";\r\n                totalGain = info.totalGain;\r\n            }\r\n        } else {\r\n            elementWin.style.display = \"none\";\r\n            elementLost.style.display = \"none\";\r\n        }\r\n\r\n        BetHigherThanMinDialog.hideDialog();\r\n        AppContext.current.closeDialog();\r\n        FreeRoundBonusDialog.hideDialog();\r\n        FreeRoundBonus.disableUi();\r\n        Jackpot.closeAllHistoryDialogs();\r\n        ResponsibleDialog1.opened = true;\r\n\r\n        if (ResponsibleDialog1._continueButton == null) {\r\n            ResponsibleDialog1._continueButton = document.getElementById(\"continueButton\");\r\n            if (ResponsibleDialog1._continueButton != null) {\r\n                ResponsibleDialog1._continueButton.onclick = ResponsibleDialog1.onContinue;\r\n                if (data.continue) {\r\n                    ResponsibleDialog1._continueButton.style.display = \"inline-block\";\r\n                } else {\r\n                    ResponsibleDialog1._continueButton.style.display = \"none\";\r\n                }\r\n            }\r\n        }\r\n\r\n        if (ResponsibleDialog1._historyButton == null) {\r\n            ResponsibleDialog1._historyButton = document.getElementById(\"historyButton\");\r\n            if (ResponsibleDialog1._historyButton != null) {\r\n                if (data.history) {\r\n                    ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onHistory;\r\n                    ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n                } else {\r\n                    if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n                        ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n                        ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n                    } else {\r\n                        if (AppContext.gameConfiguration.RCIShowHistoryButton) {\r\n                            ResponsibleDialog1._historyButton.onclick = ResponsibleDialog1.onGameRoundHistory;\r\n                            ResponsibleDialog1._historyButton.style.display = \"inline-block\";\r\n                        } else {\r\n                            ResponsibleDialog1._historyButton.style.display = \"none\";\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (ResponsibleDialog1._closeButton == null) {\r\n            ResponsibleDialog1._closeButton = document.getElementById(\"closeButton\");\r\n            if (ResponsibleDialog1._closeButton != null) {\r\n                ResponsibleDialog1._closeButton.onclick = ResponsibleDialog1.onClose;\r\n                if (data.exit) {\r\n                    ResponsibleDialog1._closeButton.style.display = \"inline-block\";\r\n                } else {\r\n                    ResponsibleDialog1._closeButton.style.display = \"none\";\r\n                }\r\n            }\r\n        }\r\n\r\n        //var now: Date = Time;\r\n        var startTime: number = (Date.now() - data.startTime.getTime()) / 1000;\r\n        var interval: string = \"\";\r\n        var t: number = startTime / 60;\r\n        var h: string = parseInt(t / 60 + \"\") + \"\";\r\n        if (parseInt(h) < 10) {\r\n            h = \"0\" + h;\r\n        }\r\n        var m: string = parseInt((t % 60) + \"\") + \"\";\r\n        if (parseInt(m) < 10) {\r\n            m = \"0\" + m;\r\n        }\r\n\r\n        if (data.interval % 60 === 0) {\r\n            interval = (data.interval / 60).toFixed(0);\r\n        } else {\r\n            interval = (data.interval / 60).toFixed(2);\r\n        }\r\n\r\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1\", Math.floor(t) + \"\");\r\n\r\n        if (AppContext.gameConfiguration.RCIInfo) {\r\n            if (info != null) {\r\n                if (DataManager.DisplayCurrencies.hasOwnProperty(info.currency)) {\r\n                    info.currency = DataManager.DisplayCurrencies[info.currency];\r\n                }\r\n\r\n                if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                    DataManager.updateDataElement(\r\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\r\n                        NumberUtils.devide(totalGain, BetManager.CoinSize).toString() + \" \" + info.currency,\r\n                    );\r\n                } else {\r\n                    DataManager.updateDataElement(\r\n                        \"RESPONSIBLE_DIALOG_1_SUM\",\r\n                        Languages.formatText(Languages.FormatMoney, totalGain.toString()) + \" \" + info.currency,\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        // RCI_IntervalInfo\r\n        DataManager.updateDataElement(\"RESPONSIBLE_DIALOG_1_INTERVAL\", interval);\r\n\r\n        let elementRciIntervalInfo = document.getElementById(\"rciIntervalInfo\");\r\n        if (AppContext.gameConfiguration.RCIIntervalInfo) {\r\n            if (elementRciIntervalInfo != null) {\r\n                elementRciIntervalInfo.style.display = \"block\";\r\n            }\r\n        } else {\r\n            if (elementRciIntervalInfo != null) {\r\n                elementRciIntervalInfo.style.display = \"none\";\r\n            }\r\n        }\r\n\r\n        if (ResponsibleDialog1._element != null) {\r\n            if (ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n                ResponsibleDialog1._element.classList.remove(ResponsibleDialog1.DisabledClass);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                Logger.errorGroup(\"ResponsibleDialog1\", \"ERROR no responsibleDialog1\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static onContinue(): void {\r\n        Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\r\n        ResponsibleDialog1.opened = false;\r\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        GameApp.continue();\r\n        GameManager.closeResponsibleDialog1();\r\n        BetHigherThanMinDialog.restoreDialog();\r\n        FreeRoundBonus.reopenFreeRounds();\r\n    }\r\n\r\n    static onHistory(): void {\r\n        Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\r\n        ResponsibleDialog1.opened = false;\r\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        GameApp.closeRealityCheck();\r\n        GameApp.history();\r\n        GameManager.closeResponsibleDialog1();\r\n        BetHigherThanMinDialog.restoreDialog();\r\n        FreeRoundBonus.reopenFreeRounds();\r\n    }\r\n\r\n    static onGameRoundHistory(): void {\r\n        Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\r\n        ResponsibleDialog1.opened = false;\r\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        GameApp.closeRealityCheck();\r\n        if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n            GameApp.openGameRoundHistoryFromUrl();\r\n        } else {\r\n            GameApp.openGameRoundHistory();\r\n        }\r\n        GameManager.closeResponsibleDialog1();\r\n        BetHigherThanMinDialog.restoreDialog();\r\n        FreeRoundBonus.reopenFreeRounds();\r\n    }\r\n\r\n    static onClose(): void {\r\n        Platforms.Platforms.dialogOpened(\"rci\", false);\r\n\r\n        ResponsibleDialog1.opened = false;\r\n        if (!ResponsibleDialog1._element.classList.contains(ResponsibleDialog1.DisabledClass)) {\r\n            ResponsibleDialog1._element.classList.add(ResponsibleDialog1.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n        GameApp.exit();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/ResponsibleDialog1.ts\n **/","import { StringUtils, Utils } from \"neo-common\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { GameApp } from \"../GameApp\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { BaseModel } from \"../GameComponents/Base/BaseModel\";\r\n\r\nexport class MessageManager {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected static dialog: HTMLElement;\r\n\r\n    protected static title: HTMLElement;\r\n\r\n    protected static text: HTMLElement;\r\n\r\n    protected static buttonsHolder: HTMLElement;\r\n\r\n    protected static buttons: Array<HTMLElement>;\r\n\r\n    protected static callback: (response: any) => void;\r\n\r\n    protected static response: any;\r\n\r\n    protected static step: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  POSTPONE\r\n    //******************************************************************************************************************\r\n\r\n    public static postpone(callback: (response: any) => void, response: any): void {\r\n        if (\r\n            !Utils.isNullOrUndefined(response) &&\r\n            !Utils.isNullOrUndefined(response.messages) &&\r\n            response.messages.length > 0\r\n        ) {\r\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n                MessageManager.dialog = document.getElementById(\"messageDialog\");\r\n\r\n                if (!Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n                    MessageManager.title = MessageManager.dialog.getElementsByTagName(\"h3\")[0];\r\n                    MessageManager.text = document.getElementById(\"messageDialogText\");\r\n\r\n                    MessageManager.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n                    MessageManager.buttons = [];\r\n                }\r\n            }\r\n\r\n            if (Utils.isNullOrUndefined(MessageManager.dialog)) {\r\n                callback(response);\r\n            } else {\r\n                MessageManager.callback = callback;\r\n                MessageManager.response = response;\r\n                MessageManager.step = 0;\r\n                MessageManager.handle();\r\n            }\r\n        } else {\r\n            callback(response);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  UPDATE DIALOG DATA\r\n    //******************************************************************************************************************\r\n\r\n    protected static updateDialogData(data: any): void {\r\n        MessageManager.resetDialogData();\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\r\n            MessageManager.title.innerHTML = data[\"title\"];\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\r\n            MessageManager.text.innerHTML = data[\"text\"];\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\r\n            MessageManager.removeAllButtons();\r\n\r\n            for (let i = 0; i < data[\"actions\"].length; i++) {\r\n                let action = data[\"actions\"][i];\r\n\r\n                switch (action.type) {\r\n                    case \"continue\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionContinue.bind(this, action));\r\n                        break;\r\n                    case \"exit\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionExit.bind(this, action));\r\n                        break;\r\n                    case \"history\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionHistory.bind(this, action));\r\n                        break;\r\n                    case \"reload\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionReload.bind(this, action));\r\n                        break;\r\n                    case \"cashier\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionCashier.bind(this, action));\r\n                        break;\r\n                    case \"link\":\r\n                        MessageManager.createButton(action[\"text\"], MessageManager.actionLink.bind(this, action));\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static resetDialogData(): void {\r\n        //default title\r\n        MessageManager.title.innerHTML = Languages.getRid(\"DLG_INFO\");\r\n\r\n        //remove all custom buttons\r\n        MessageManager.removeAllButtons();\r\n\r\n        //create default continue button\r\n        MessageManager.createButton(Languages.getRid(\"CONTINUE\"), MessageManager.actionContinue);\r\n    }\r\n\r\n    protected static removeAllButtons(): void {\r\n        while (MessageManager.buttons.length > 0) {\r\n            let button = MessageManager.buttons.pop();\r\n            MessageManager.buttonsHolder.removeChild(button);\r\n        }\r\n    }\r\n\r\n    protected static createButton(text: string, action: (data: any) => void): void {\r\n        let button: HTMLElement = document.createElement(\"div\");\r\n        button.textContent = text;\r\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n        button.onclick = action;\r\n\r\n        MessageManager.buttonsHolder.appendChild(button);\r\n        MessageManager.buttons.push(button);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ACTIONS\r\n    //******************************************************************************************************************\r\n\r\n    protected static actionContinue(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n        MessageManager.handle();\r\n    }\r\n\r\n    protected static actionExit(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n        Platforms.Platforms.exitHandler = \"messageDialog\";\r\n        GameApp.exit();\r\n    }\r\n\r\n    protected static actionReload(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n        Platforms.Platforms.gameReloading();\r\n        if (Platforms.Platforms.handleGameReload) {\r\n            return;\r\n        }\r\n\r\n        window.location.reload(true);\r\n    }\r\n\r\n    protected static actionHistory(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n            Platforms.Platforms.gotoHistory({ target: data[\"linkUrl\"] });\r\n            if (Platforms.Platforms.handleOpenHistoryPage) {\r\n                return;\r\n            }\r\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.HistoryUrl)) {\r\n            GameApp.openGameRoundHistoryFromUrl();\r\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.RCIHistoryUrl)) {\r\n            GameApp.openGameRoundHistoryFromUrl();\r\n        } else {\r\n            GameApp.openGameRoundHistory();\r\n        }\r\n    }\r\n\r\n    protected static actionCashier(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n            Platforms.Platforms.gotoCasier({ reason: \"InsufficientFunds\", target: data[\"linkUrl\"] });\r\n            if (Platforms.Platforms.handleOpenCashierPage) {\r\n                return;\r\n            }\r\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_self\");\r\n        } else if (!StringUtils.isNullOrEmpty(AppContext.gameConfiguration.CashierUrl)) {\r\n            Platforms.Platforms.gotoCasier({\r\n                reason: \"InsufficientFunds\",\r\n                target: AppContext.gameConfiguration.CashierUrl,\r\n            });\r\n            if (Platforms.Platforms.handleOpenCashierPage) {\r\n                return;\r\n            }\r\n            window.open(AppContext.gameConfiguration.CashierUrl, \"_self\");\r\n        }\r\n    }\r\n\r\n    protected static actionLink(data: any): void {\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"linkUrl\"])) {\r\n            window.open(data[\"linkUrl\"], !Utils.isNullOrUndefined(data[\"linkTarget\"]) ? data[\"linkTarget\"] : \"_blank\");\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLE\r\n    //******************************************************************************************************************\r\n\r\n    protected static handle(): void {\r\n        if (MessageManager.response.messages.length === MessageManager.step) {\r\n            MessageManager.dialog.classList.add(\"_disabled\");\r\n            MessageManager.callback(MessageManager.response);\r\n            Platforms.Platforms.dialogOpened(\"default\", false);\r\n        } else {\r\n            if (MessageManager.response.messages[MessageManager.step].type == \"plugin\") {\r\n                Platforms.Platforms.sendPluginMessage(MessageManager.response.messages[MessageManager.step].text);\r\n                MessageManager.step++;\r\n                MessageManager.handle();\r\n            } else {\r\n                MessageManager.dialog.classList.remove(\"_disabled\");\r\n                MessageManager.updateDialogData(MessageManager.response.messages[MessageManager.step]);\r\n                MessageManager.step++;\r\n                Platforms.Platforms.dialogOpened(\"default\", true);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CALLBACK\r\n    //******************************************************************************************************************\r\n    public static callbackFnc(response: any): void {\r\n        BaseModel.spinContinue();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/MessageManager.ts\n **/","import { Utils, NumberUtils } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { BaseController } from \"./BaseController\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { MessageManager } from \"../../Managers/MessageManager\";\r\nimport { FreeRoundBonus } from \"../../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\r\n\r\nexport class BaseModel {\r\n    public static LastScreen: Object = {};\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private static GameRequest: GameClientRequest = null;\r\n\r\n    protected controller: BaseController;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(controller: BaseController) {\r\n        this.controller = controller;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REQUESTS\r\n    //******************************************************************************************************************\r\n\r\n    public spin(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n\r\n        BaseModel.GameRequest = {} as GameClientRequest;\r\n        BaseModel.GameRequest.module = Communication.Game.GameModules.Base;\r\n        BaseModel.GameRequest.bet = BetManager.createBetForSpin();\r\n        BaseModel.GameRequest.callBackFcn = this.spinReceived.bind(this);\r\n\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient\r\n            .spin(Communication.Game.GameModules.Base, BetManager.createBetForSpin())\r\n            .then((response: any): any => {\r\n                MessageManager.postpone(this.spinReceived.bind(this), response);\r\n            });\r\n    }\r\n\r\n    public static spinContinue(): void {\r\n        if (!GameManager.requestSend && BaseModel.GameRequest) {\r\n            GameManager.requestSend = true;\r\n\r\n            GameManager.gameClient\r\n                .spin(BaseModel.GameRequest.module, BaseModel.GameRequest.bet)\r\n                .then((response: any): any => {\r\n                    MessageManager.postpone(BaseModel.GameRequest.callBackFcn, response);\r\n                });\r\n\r\n            //after message, we call gameclient spin once again, so we also need to send round started event\r\n            Platforms.Platforms.roundStarted({\r\n                totalBet: BetManager.Bet,\r\n                freeRound: FreeRoundBonus.inFrb,\r\n                userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\r\n            });\r\n        }\r\n    }\r\n\r\n    public respin(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient\r\n            .respin(Communication.Game.GameModules.Base, GameManager.baseResponse.respin)\r\n            .then((response: any): any => {\r\n                MessageManager.postpone(this.respinReceived.bind(this), response);\r\n            });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  RESPONSES\r\n    //******************************************************************************************************************\r\n\r\n    protected spinReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            BaseModel.GameRequest = null;\r\n            this.controller.spinReceived();\r\n            Platforms.Platforms.spinReceived({\r\n                balance: parseFloat(NumberUtils.add(response.balance.real, response.balance.bonus)),\r\n                win: GameManager.baseResponse.currentWin,\r\n                totalBet: BetManager.createBetForSpin().totalBet,\r\n                roundId: response.roundId,\r\n            });\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    private respinReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.respinReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n}\r\n\r\nexport type GameClientRequest = {\r\n    module: string;\r\n    bet: Communication.Game.SpinBet;\r\n    callBackFcn: () => void;\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseModel.ts\n **/","export class BaseActions {\r\n    static ActionSpin: string = \"SPIN\";\r\n    static ActionSpinStop: string = \"SPIN_STOP\";\r\n    static ActionAutoplay: string = \"AUTOPLAY\";\r\n    static ActionAutoplayStop: string = \"AUTOPLAY_STOP\";\r\n    static ActionBetPlus: string = \"BET_PLUS\";\r\n    static ActionBetMinus: string = \"BET_MINUS\";\r\n    static ActionBetCycle: string = \"BET_CYCLE\";\r\n    static ActionMaxBet: string = \"MAX_BET\";\r\n    static ActionBaseCollect: string = \"BASE_COLLECT\";\r\n    static ActionSelectPayline: string = \"SELECT_PAYLINE_\";\r\n    static ActionDenomSelect: string = \"DENOM_SELECT\";\r\n    static ActionDenomSelectValue: string = \"DENOM_SELECT_VALUE_\";\r\n    static ActionCoinCountSelect: string = \"COIN_COUNT_SELECT\";\r\n    static ActionCoinCountSelectValue: string = \"COIN_COUNT_SELECT_VALUE_\";\r\n    static ActionBetSelect: string = \"BET_SELECT\";\r\n    static ActionBetSelectValue: string = \"BET_SELECT_VALUE_\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/BaseActions.ts\n **/","import { Logger, lodash } from \"neo-common\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { HtmlButtonElement } from \"./Elements/HtmlButtonElement\";\r\nimport { HtmlElement } from \"./Elements/HtmlElement\";\r\nimport { UserAction } from \"./UserAction\";\r\nimport { HtmlContainerElement } from \"./Elements/HtmlContainerElement\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { ModuleManager } from \"../Managers/ModuleManager\";\r\nimport { BetManager } from \"../Managers/BetManager\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { GameApp } from \"../GameApp\";\r\nimport { BaseActions } from \"../Channels/Common/Actions/BaseActions\";\r\nimport { HtmlSoundContainerElement } from \"./Custom/HtmlSoundContainerElement\";\r\nimport { HtmlHideButtonElement } from \"./Custom/HtmlHideButtonElement\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { DataManager } from \"../Managers/DataManager\";\r\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\r\nimport { QuickspinDialog } from \"../Channels/Common/Dialogs/QuickspinDialog\";\r\nimport { IButtonElement } from \"../CustomComponents/IButtonElement\";\r\nimport { Paytable } from \"../Channels/Common/Paytable/Paytable\";\r\nimport { BetHigherThanMinDialog } from \"../Channels/Common/Dialogs/BetHigherThanMinDialog\";\r\n\r\n/**\r\n * Controller for html elements. Handle action dispatched from html elements.\r\n * @class HtmlController\r\n */\r\nexport class HtmlController {\r\n    static Configurations = { SHOW_BONUS_BALANCE: false };\r\n    static ActionElements: { [action: string]: Array<IButtonElement> } = {};\r\n    static UiActionElements: { [action: string]: Array<HtmlButtonElement> } = {};\r\n    static UiDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\r\n    static UiActionDispatchElements: { [action: string]: Array<HtmlContainerElement> } = {};\r\n    static ActionsHoldersElements: { [action: string]: Array<HtmlContainerElement> } = {};\r\n    static ContainerElementsById: { [id: string]: HtmlContainerElement } = {};\r\n    static DataElements: { [data: string]: Array<HtmlElement> } = {};\r\n    static RidElements: Array<HtmlElement> = [];\r\n    static DisabledClass: string = \"_disabled\";\r\n\r\n    public static SoundContainer: HtmlSoundContainerElement;\r\n    public static HideButtons: HtmlHideButtonElement[] = [];\r\n    public static dispatchActionAllowed: boolean = true;\r\n\r\n    /**\r\n     * Register HtmlButtonElement and pair him with action.\r\n     * @method registerActionElement\r\n     * @param action string name of action\r\n     * @param element HtmlButtonElement\r\n     * @return void\r\n     */\r\n    static registerActionElement(action: string, element: IButtonElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerActionElement action: \" + action);\r\n        }\r\n\r\n        if (this.ActionElements[action] == null) {\r\n            this.ActionElements[action] = [];\r\n        }\r\n        this.ActionElements[action].push(element);\r\n    }\r\n\r\n    /**\r\n     * Register HtmlButtonElement and pair him with ui action.\r\n     * @method registerUiActionElement\r\n     * @param action string name of action\r\n     * @param element HtmlButtonElement\r\n     * @return void\r\n     */\r\n    static registerUiActionElement(action: string, element: HtmlButtonElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerUiActionElement action: \" + action);\r\n        }\r\n\r\n        if (this.UiActionElements[action] == null) {\r\n            this.UiActionElements[action] = [];\r\n        }\r\n        this.UiActionElements[action].push(element);\r\n    }\r\n\r\n    /**\r\n     * Register HtmlContainerElement and pair him with ui disptacher.\r\n     * @method registerUiActionElement\r\n     * @param action string name of action\r\n     * @param element HtmlButtonElement\r\n     * @return void\r\n     */\r\n    static registerUiDispatchElement(action: string, element: HtmlContainerElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerUiDispatchElement action: \" + action);\r\n        }\r\n\r\n        if (this.UiDispatchElements[action] == null) {\r\n            this.UiDispatchElements[action] = [];\r\n        }\r\n        this.UiDispatchElements[action].push(element);\r\n    }\r\n\r\n    static registerActionsHoldersElement(action: string, element: HtmlContainerElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerActionsHoldersElement action: \" + action);\r\n        }\r\n\r\n        if (this.ActionsHoldersElements[action] == null) {\r\n            this.ActionsHoldersElements[action] = [];\r\n        }\r\n        this.ActionsHoldersElements[action].push(element);\r\n    }\r\n\r\n    /**\r\n     * Register HtmlContainerElement and pair him with ui action disptacher.\r\n     * @method registerUiActionElement\r\n     * @param action string name of action\r\n     * @param element HtmlButtonElement\r\n     * @return void\r\n     */\r\n    static registerUiActionDispatchElement(action: string, element: HtmlContainerElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerUiDispatchElement action: \" + action);\r\n        }\r\n\r\n        if (this.UiActionDispatchElements[action] == null) {\r\n            this.UiActionDispatchElements[action] = [];\r\n        }\r\n        this.UiActionDispatchElements[action].push(element);\r\n    }\r\n\r\n    /**\r\n     * Register HtmlElement and pair him with some data id.\r\n     * @method registerDataElement\r\n     * @param data string name of data id\r\n     * @param element HtmlElement\r\n     * @return void\r\n     */\r\n    static registerDataElement(data: string, element: HtmlElement): void {\r\n        if (DEBUG) {\r\n            this.log(\"registerDataElement data: \" + data);\r\n        }\r\n\r\n        if (this.DataElements[data] == null) {\r\n            this.DataElements[data] = [];\r\n        }\r\n        this.DataElements[data].push(element);\r\n    }\r\n\r\n    /**\r\n     * Dispatch action to controller.\r\n     * @method dispatchAction\r\n     * @param action string name of action\r\n     * @return void\r\n     */\r\n    static dispatchAction(action: string): void {\r\n        if (DEBUG) {\r\n            this.log(\"dispatchAction action: \" + action);\r\n        }\r\n\r\n        if (!HtmlController.dispatchActionAllowed) {\r\n            return;\r\n        }\r\n\r\n        let updateUI: boolean = true;\r\n        if (action === BaseActions.ActionDenomSelect) {\r\n            updateUI = false;\r\n            if (BetManager.CoinCountContainer != null) {\r\n                BetManager.CoinCountContainer.disable();\r\n            }\r\n            if (BetManager.BetContainer != null) {\r\n                BetManager.BetContainer.disable();\r\n            }\r\n            if (HtmlController.SoundContainer != null) {\r\n                HtmlController.SoundContainer.disable();\r\n            }\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n\r\n        if (action === BaseActions.ActionCoinCountSelect) {\r\n            updateUI = false;\r\n            if (BetManager.DenomContainer != null) {\r\n                BetManager.DenomContainer.disable();\r\n            }\r\n            if (BetManager.BetContainer != null) {\r\n                BetManager.BetContainer.disable();\r\n            }\r\n            if (HtmlController.SoundContainer != null) {\r\n                HtmlController.SoundContainer.disable();\r\n            }\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n\r\n        if (action === BaseActions.ActionBetSelect) {\r\n            updateUI = false;\r\n            if (BetManager.DenomContainer != null) {\r\n                BetManager.DenomContainer.disable();\r\n            }\r\n            if (BetManager.BetContainer != null) {\r\n                BetManager.BetContainer.disable();\r\n            }\r\n            if (HtmlController.SoundContainer != null) {\r\n                HtmlController.SoundContainer.disable();\r\n            }\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n\r\n        if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n            switch (action) {\r\n                case BaseActions.ActionBetPlus:\r\n                    updateUI = false;\r\n                    break;\r\n                case BaseActions.ActionBetMinus:\r\n                    updateUI = false;\r\n                    break;\r\n            }\r\n        }\r\n\r\n        if (updateUI) {\r\n            this.dispatchUiAction(\"\");\r\n        }\r\n        ModuleManager.dispatchAction(action);\r\n    }\r\n\r\n    static setSound(level: number): void {\r\n        if (HtmlController.SoundContainer != null) {\r\n            HtmlController.SoundContainer.setLevel(level);\r\n            return;\r\n        }\r\n\r\n        for (var i: number = 0; i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length; i++) {\r\n            var ele: HtmlButtonElement = HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\r\n            if (ele.instance != null) {\r\n                ele.instance.classList.remove(\"off\");\r\n                ele.instance.classList.remove(\"on1\");\r\n                ele.instance.classList.remove(\"on2\");\r\n                ele.instance.classList.remove(\"on3\");\r\n\r\n                switch (level) {\r\n                    case 0:\r\n                        ele.instance.classList.add(\"off\");\r\n                        PIXI.sound.volumeAll = 0;\r\n                        Platforms.Platforms.setVolume(0);\r\n                        break;\r\n                    case 1:\r\n                        ele.instance.classList.add(\"on1\");\r\n                        PIXI.sound.volumeAll = 0.25;\r\n                        Platforms.Platforms.setVolume(1);\r\n                        break;\r\n                    case 2:\r\n                        ele.instance.classList.add(\"on2\");\r\n                        PIXI.sound.volumeAll = 0.5;\r\n                        Platforms.Platforms.setVolume(2);\r\n                        break;\r\n                    case 3:\r\n                    default:\r\n                        ele.instance.classList.add(\"on3\");\r\n                        PIXI.sound.volumeAll = 1;\r\n                        Platforms.Platforms.setVolume(3);\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Dispatch ui action.\r\n     * @method dispatchUiAction\r\n     * @param action string name of action\r\n     * @return void\r\n     */\r\n    static dispatchUiAction(action: string): void {\r\n        if (DEBUG) {\r\n            this.log(\"dispatchUiAction action: \" + action);\r\n        }\r\n\r\n        if (!HtmlController.dispatchActionAllowed) {\r\n            return;\r\n        }\r\n\r\n        BetHigherThanMinDialog.closeDialog();\r\n\r\n        Jackpot.closeAllHistoryDialogs();\r\n\r\n        if (action === \"EMPTY\") {\r\n            PlayList.play(\"SND_Click\");\r\n            action = \"\";\r\n        }\r\n\r\n        var playSound: boolean = true;\r\n\r\n        if (HtmlController.ContainerElementsById[\"autoplaySelector\"]) {\r\n            var autoplaySelector: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplaySelector\"];\r\n            if (\r\n                autoplaySelector != null &&\r\n                autoplaySelector.instance != null &&\r\n                !autoplaySelector.instance.classList.contains(\"_disabled\")\r\n            ) {\r\n                if (autoplaySelector.recalculateHeight) {\r\n                    autoplaySelector.instance.removeAttribute(\"style\");\r\n                }\r\n                autoplaySelector.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n\r\n        if (HtmlController.ContainerElementsById[\"autoplayDialog\"]) {\r\n            var autoplayDialog: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialog\"];\r\n            if (\r\n                autoplayDialog != null &&\r\n                autoplayDialog.instance != null &&\r\n                !autoplayDialog.instance.classList.contains(\"_disabled\")\r\n            ) {\r\n                autoplayDialog.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n\r\n        if (BetManager.DenomContainer != null) {\r\n            BetManager.DenomContainer.disable();\r\n        }\r\n\r\n        if (BetManager.CoinCountContainer != null) {\r\n            BetManager.CoinCountContainer.disable();\r\n        }\r\n        if (action !== UserAction.ActionExit && DataManager.SimilarGames != null) {\r\n            DataManager.SimilarGames.disable();\r\n        }\r\n\r\n        switch (action) {\r\n            case \"\":\r\n                Paytable.clearListeners();\r\n                this.disableAllUiDispatchers(action);\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                playSound = false;\r\n                break;\r\n            case UserAction.ActionHelpTerminal:\r\n                ModuleManager.cycleHelp();\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionGameRoundReport:\r\n                HtmlController.dispatchUiAction(\"\");\r\n                GameApp.openGameRoundHistory(true);\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionExit:\r\n                this.disableAllUiDispatchers(action);\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                if (DataManager.SimilarGames != null && DataManager.SimilarGames.enabled) {\r\n                    if (DataManager.SimilarGames.open()) {\r\n                    } else {\r\n                        this.dispatchUiAction(\"\");\r\n                    }\r\n                    if (HtmlController.SoundContainer != null) {\r\n                        HtmlController.SoundContainer.disable();\r\n                    }\r\n                } else {\r\n                    Platforms.Platforms.exitHandler = \"exitBtn\";\r\n                    GameApp.exit();\r\n                }\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionExit + \"2\":\r\n                Platforms.Platforms.exitHandler = \"similarGamesExitBtn\";\r\n                GameApp.exit();\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionToggleSound:\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.toggle();\r\n                } else {\r\n                    if (HtmlController.UiActionElements[UserAction.ActionToggleSound] != null) {\r\n                        for (\r\n                            var i: number = 0;\r\n                            i < HtmlController.UiActionElements[UserAction.ActionToggleSound].length;\r\n                            i++\r\n                        ) {\r\n                            var ele: HtmlButtonElement =\r\n                                HtmlController.UiActionElements[UserAction.ActionToggleSound][i];\r\n                            if (ele.instance != null) {\r\n                                if (ele.instance.classList.contains(\"off\")) {\r\n                                    ele.instance.classList.remove(\"off\");\r\n                                    ele.instance.classList.add(\"on3\");\r\n                                    PIXI.sound.volumeAll = 1;\r\n                                    AppContext.current.setVolume(3);\r\n                                    Platforms.Platforms.setVolume(3);\r\n                                } else if (ele.instance.classList.contains(\"on1\")) {\r\n                                    ele.instance.classList.remove(\"on1\");\r\n                                    ele.instance.classList.add(\"off\");\r\n                                    playSound = false;\r\n                                    PIXI.sound.volumeAll = 0;\r\n                                    AppContext.current.setVolume(0);\r\n                                    Platforms.Platforms.setVolume(0);\r\n                                } else if (ele.instance.classList.contains(\"on2\")) {\r\n                                    ele.instance.classList.remove(\"on2\");\r\n                                    ele.instance.classList.add(\"on1\");\r\n                                    PIXI.sound.volumeAll = 0.25;\r\n                                    AppContext.current.setVolume(1);\r\n                                    Platforms.Platforms.setVolume(1);\r\n                                } else if (ele.instance.classList.contains(\"on3\")) {\r\n                                    ele.instance.classList.remove(\"on3\");\r\n                                    ele.instance.classList.add(\"on2\");\r\n                                    PIXI.sound.volumeAll = 0.5;\r\n                                    AppContext.current.setVolume(2);\r\n                                    Platforms.Platforms.setVolume(2);\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                break;\r\n            case UserAction.ActionToggleBet:\r\n                this.disableAllUiDispatchers(action);\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                break;\r\n            case UserAction.ActionTogglePaytable:\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.toggleUiAction(UserAction.ActionHelpOn, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                Paytable.instance.updateDataValues();\r\n                break;\r\n            case UserAction.ActionToggleMenu:\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"remove\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionToggleMenuBack:\r\n                this.toggleUiAction(UserAction.ActionToggleMenu, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionHelpOn:\r\n                this.disableAllUiDispatchers(action);\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                Platforms.Platforms.gotoHelp();\r\n                break;\r\n            case UserAction.ActionHelpOff:\r\n                this.disableAllUiDispatchers(action);\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionPaytableOn:\r\n                this.disableAllUiDispatchers(action);\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"remove\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                Platforms.Platforms.gotoPaytable();\r\n                Paytable.instance.updateDataValues();\r\n                break;\r\n            case UserAction.ActionPaytableOff:\r\n                Paytable.clearListeners();\r\n                this.disableAllUiDispatchers(action);\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionSwitchControls:\r\n                let body = document.body;\r\n                if (body.classList.contains(\"reverse\")) {\r\n                    body.classList.remove(\"reverse\");\r\n                } else {\r\n                    body.classList.add(\"reverse\");\r\n                }\r\n                break;\r\n            case UserAction.ActionSettingsOn:\r\n                this.disableAllUiDispatchers(action);\r\n                this.toggleUiAction(action, \"toggle\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                Platforms.Platforms.gotoSettings();\r\n                break;\r\n            case UserAction.ActionSettingsOff:\r\n                this.disableAllUiDispatchers(action);\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOn, \"remove\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionMenuOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionHelpOff, \"add\");\r\n                this.changeUiAcionDispatchers(UserAction.ActionPaytableOff, \"add\");\r\n                if (HtmlController.SoundContainer != null) {\r\n                    HtmlController.SoundContainer.disable();\r\n                }\r\n                break;\r\n            case UserAction.ActionQuickspinDialogOff:\r\n                QuickspinDialog.closeDialog();\r\n                break;\r\n            case UserAction.ActionQuickspinToggle:\r\n                DataManager.quickspinSet();\r\n                break;\r\n            case UserAction.ActionVibrationToggle:\r\n                DataManager.vibrationSet();\r\n                break;\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"No element with ui disptacher: \" + action);\r\n                }\r\n        }\r\n\r\n        if (playSound) {\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Disable all ui dispatcher at once.\r\n     * @method disableAllUiDispatchers\r\n     * @param action string name of action\r\n     * @return void\r\n     */\r\n    private static disableAllUiDispatchers(action: string): void {\r\n        for (var key in this.UiDispatchElements) {\r\n            for (var i: number = 0; i < this.UiDispatchElements[key].length; i++) {\r\n                if (\r\n                    this.UiDispatchElements[key][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n                        false &&\r\n                    key != action\r\n                ) {\r\n                    this.UiDispatchElements[key][i].instance.classList.add(HtmlController.DisabledClass);\r\n                    if (this.UiActionDispatchElements[key] != null) {\r\n                        for (var j: number = 0; j < this.UiActionDispatchElements[key].length; j++) {\r\n                            this.UiActionDispatchElements[key][j].instance.classList.toggle(\r\n                                HtmlController.DisabledClass,\r\n                            );\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Toggle disable for specific UI dispatcher.\r\n     * @method changeUiAcionDispatchers\r\n     * @param action string name of action\r\n     * @param type string\r\n     * @return void\r\n     */\r\n    private static changeUiAcionDispatchers(action: string, type: string): void {\r\n        if (this.UiActionDispatchElements[action] != null) {\r\n            for (var i: number = 0; i < this.UiActionDispatchElements[action].length; i++) {\r\n                if (type === \"add\") {\r\n                    if (\r\n                        this.UiActionDispatchElements[action][i].instance.classList.contains(\r\n                            HtmlController.DisabledClass,\r\n                        ) === false\r\n                    ) {\r\n                        this.UiActionDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n                    }\r\n                } else if (type === \"remove\") {\r\n                    this.UiActionDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n                } else {\r\n                    this.UiActionDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Toggle disable for specific UI action.\r\n     * @method toggleUiAction\r\n     * @param action string name of action\r\n     * @param type string\r\n     * @return void\r\n     */\r\n    private static toggleUiAction(action: string, type: string): void {\r\n        if (this.UiDispatchElements[action] != null) {\r\n            for (var i: number = 0; i < this.UiDispatchElements[action].length; i++) {\r\n                if (type === \"add\") {\r\n                    if (\r\n                        this.UiDispatchElements[action][i].instance.classList.contains(HtmlController.DisabledClass) ===\r\n                        false\r\n                    ) {\r\n                        this.UiDispatchElements[action][i].instance.classList.add(HtmlController.DisabledClass);\r\n                    }\r\n                } else if (type === \"remove\") {\r\n                    this.UiDispatchElements[action][i].instance.classList.remove(HtmlController.DisabledClass);\r\n                } else {\r\n                    this.UiDispatchElements[action][i].instance.classList.toggle(HtmlController.DisabledClass);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Update all elements with one data id.\r\n     * @method updateDataElement\r\n     * @param data string data id\r\n     * @param value string value for this data id\r\n     * @return void\r\n     */\r\n    static updateDataElement(data: string, value: string): void {\r\n        if (this.DataElements[data] != null) {\r\n            for (var i: number = 0; i < this.DataElements[data].length; i++) {\r\n                HtmlController.currencyNoZero(data, value);\r\n                this.DataElements[data][i].setText(value);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"No element with data id: \" + data);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Update all elements which has set some data id.\r\n     * @method updateDataElements\r\n     * @param gameData Object\r\n     * @return void\r\n     */\r\n    static updateDataElements(gameData: { [data: string]: string }): void {\r\n        if (DEBUG) {\r\n            this.log(\"udpateDataElements\");\r\n        }\r\n\r\n        for (var key in gameData) {\r\n            if (this.DataElements[key] != null) {\r\n                for (var i: number = 0; i < this.DataElements[key].length; i++) {\r\n                    HtmlController.currencyNoZero(key, gameData[key]);\r\n                    this.DataElements[key][i].setText(gameData[key]);\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"No element with data id: \" + key);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static currencyNoZero(data: string, value: string): void {\r\n        let parsedValue: number;\r\n\r\n        if (value === \"\") {\r\n            parsedValue = 0;\r\n        } else {\r\n            parsedValue = parseFloat(value);\r\n        }\r\n\r\n        if (data === GameData.DataTotalWin) {\r\n            if (parsedValue === 0) {\r\n                HtmlController.toggleElementsByClass(\"currencyNoZero\");\r\n            } else {\r\n                HtmlController.toggleElementsByClass(\"currencyNoZero\", true);\r\n            }\r\n        } else if (data === GameData.DataGambleColorWin) {\r\n            if (parsedValue === 0) {\r\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\");\r\n            } else {\r\n                HtmlController.toggleElementsByClass(\"gambleCurrencyNoZero\", true);\r\n            }\r\n        }\r\n    }\r\n\r\n    static toggleElementsByClass(cls: string, show: boolean = false): void {\r\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\r\n        for (var i: number = 0; i < elements.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>elements[i];\r\n            if (element != null) {\r\n                if (show) {\r\n                    element.style.display = \"\";\r\n                } else {\r\n                    element.style.display = \"none\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Update all elements which has set some action id.\r\n     * @method updateActionElements\r\n     * @param actionData Object\r\n     * @return void\r\n     */\r\n    static updateActionElements(actionData: Object): void {\r\n        if (DEBUG) {\r\n            this.log(\"updateActionElements\");\r\n        }\r\n\r\n        for (var key in actionData) {\r\n            if (this.ActionElements[key] != null) {\r\n                var i: number;\r\n                for (i = 0; i < this.ActionElements[key].length; i++) {\r\n                    this.ActionElements[key][i].changeState(actionData[key]);\r\n                }\r\n\r\n                if (this.ActionsHoldersElements[key] != null) {\r\n                    for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n                        this.ActionsHoldersElements[key][i].changeState(actionData[key]);\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    var keys = lodash.keys(this.ActionElements).join(\";\");\r\n\r\n                    this.log(\"No element with data id: \" + key + \", current keys: \" + keys);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static updateActionElement(key: string, value: boolean): void {\r\n        var i: number;\r\n        if (this.ActionElements[key] != null) {\r\n            for (i = 0; i < this.ActionElements[key].length; i++) {\r\n                this.ActionElements[key][i].changeState(value);\r\n            }\r\n        }\r\n\r\n        if (this.ActionsHoldersElements[key] != null) {\r\n            for (i = 0; i < this.ActionsHoldersElements[key].length; i++) {\r\n                this.ActionsHoldersElements[key][i].changeState(value);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"HtmlController\", data);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/HtmlController.ts\n **/","/**\r\n * Static variables of all UI action ids.\r\n * This variables can be used in xml as UiAction=\"{id}\".\r\n * @class UserAction\r\n */\r\nexport class UserAction {\r\n    // sound\r\n    static ActionToggleSound: string = \"TOGGLE_SOUND\";\r\n\r\n    // exit\r\n    static ActionExit: string = \"EXIT\";\r\n\r\n    // paytable\r\n    static ActionTogglePaytable: string = \"TOGGLE_PAYTABLE\";\r\n    static ActionPaytableOn: string = \"PAYTABLE_ON\";\r\n    static ActionPaytableOff: string = \"PAYTABLE_OFF\";\r\n\r\n    // menu\r\n    static ActionMenuOn: string = \"MENU_ON\";\r\n    static ActionMenuOff: string = \"MENU_OFF\";\r\n    static ActionToggleMenu: string = \"TOGGLE_MENU\";\r\n    static ActionToggleMenuBack: string = \"TOGGLE_MENU_BACK\";\r\n    static ActionSwitchControls: string = \"SWITCH_CONTROLS\";\r\n\r\n    // help\r\n    static ActionHelpOn: string = \"HELP_ON\";\r\n    static ActionHelpOff: string = \"HELP_OFF\";\r\n    static ActionHelpTerminal: string = \"TERMINAL_HELP_CYCLE\";\r\n\r\n    // bet\r\n    static ActionToggleBet: string = \"TOGGLE_BET\";\r\n\r\n    // settings\r\n    static ActionSettingsOn: string = \"SETTINGS_ON\";\r\n    static ActionSettingsOff: string = \"SETTINGS_OFF\";\r\n\r\n    // quickspin\r\n    static ActionQuickspinDialogOff: string = \"QUICKSPIN_DIALOG_OFF\";\r\n    static ActionQuickspinToggle: string = \"QUICKSPIN_TOGGLE\";\r\n\r\n    //vibration\r\n    static ActionVibrationToggle: string = \"VIBRATION_TOGGLE\";\r\n\r\n    static ActionGameRoundReport: string = \"GAME_ROUND_REPORT\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/UserAction.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { StageController } from \"../../../Components/StageController\";\r\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\r\nimport { TweenMax } from \"gsap\";\r\nimport { PageVisibilityHandler } from \"../../../CustomComponents/PageVisibilityHandler\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\n\r\nexport class QuickspinDialog {\r\n    private static _opened: boolean = false;\r\n    private static _wasOpened: boolean = false;\r\n    private static _container: HTMLElement;\r\n\r\n    static openDialog(): void {\r\n        QuickspinDialog.initializeDialog();\r\n\r\n        if (!QuickspinDialog._opened && !QuickspinDialog._wasOpened) {\r\n            if (QuickspinDialog._container != null && QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n                QuickspinDialog._container.classList.remove(\"_disabled\");\r\n            }\r\n\r\n            PIXI.sound.pauseAll();\r\n            StageController.pauseAnimations();\r\n            FrameTimerPool.pause();\r\n            TweenMax.pauseAll();\r\n\r\n            PageVisibilityHandler.Enabled = false;\r\n            QuickspinDialog._opened = true;\r\n            QuickspinDialog._wasOpened = true;\r\n\r\n            Platforms.Platforms.dialogOpened(\"quickspin\", true);\r\n        }\r\n    }\r\n\r\n    static closeDialog(): void {\r\n        if (QuickspinDialog._opened) {\r\n            QuickspinDialog.initializeDialog();\r\n            if (QuickspinDialog._container != null && !QuickspinDialog._container.classList.contains(\"_disabled\")) {\r\n                QuickspinDialog._container.classList.add(\"_disabled\");\r\n            }\r\n\r\n            PIXI.sound.resumeAll();\r\n            StageController.resumeAnimations();\r\n            FrameTimerPool.unpause();\r\n            TweenMax.resumeAll();\r\n\r\n            PageVisibilityHandler.Enabled = true;\r\n            QuickspinDialog._opened = false;\r\n\r\n            Platforms.Platforms.quickSpinDialog(DataManager.quickspinEnabled());\r\n            Platforms.Platforms.dialogOpened(\"quickspin\", false);\r\n        }\r\n    }\r\n\r\n    private static initializeDialog(): void {\r\n        if (QuickspinDialog._container == null) {\r\n            QuickspinDialog._container = document.getElementById(\"quickspinDialog\");\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/QuickspinDialog.ts\n **/","import { FrameTimerPool } from \"../Utils/FrameTimerPool\";\r\nimport { TweenMax } from \"gsap\";\r\n\r\nexport class PageVisibilityHandler {\r\n    public static Enabled: boolean = true;\r\n\r\n    private static Timer: number;\r\n\r\n    public static handle(): void {\r\n        let hidden: string;\r\n        let visibilityChange: string;\r\n        if (typeof document.hidden !== \"undefined\") {\r\n            hidden = \"hidden\";\r\n            visibilityChange = \"visibilitychange\";\r\n        } else if (typeof document.mozHidden !== \"undefined\") {\r\n            hidden = \"mozHidden\";\r\n            visibilityChange = \"mozvisibilitychange\";\r\n        } else if (typeof document.msHidden !== \"undefined\") {\r\n            hidden = \"msHidden\";\r\n            visibilityChange = \"msvisibilitychange\";\r\n        } else if (typeof document.webkitHidden !== \"undefined\") {\r\n            hidden = \"webkitHidden\";\r\n            visibilityChange = \"webkitvisibilitychange\";\r\n        } else {\r\n            return;\r\n        }\r\n\r\n        document.addEventListener(\r\n            visibilityChange,\r\n            (e: any) => {\r\n                if (PageVisibilityHandler.Enabled) {\r\n                    let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n\r\n                    if (document[hidden]) {\r\n                        PageVisibilityHandler.pauseAll();\r\n                    } else {\r\n                        if (isIos) {\r\n                            clearTimeout(PageVisibilityHandler.Timer);\r\n                            PageVisibilityHandler.Timer = setTimeout(() => {\r\n                                PageVisibilityHandler.resumeAll();\r\n                            }, 200);\r\n                        } else {\r\n                            PageVisibilityHandler.resumeAll();\r\n                        }\r\n                    }\r\n                }\r\n            },\r\n            false,\r\n        );\r\n\r\n        // https://github.com/pixijs/sound/issues/126#issuecomment-1460499693\r\n        window.addEventListener(\"focus\", () => {\r\n            let isIos = /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\n            if (isIos) {\r\n                const context: any = PIXI.sound.context.audioContext;\r\n\r\n                if (context.state === \"suspended\" || context.state === \"interrupted\") {\r\n                    context.resume();\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    public static pauseAll(): void {\r\n        TweenMax.pauseAll();\r\n        FrameTimerPool.pause();\r\n        PIXI.sound.pauseAll();\r\n    }\r\n\r\n    public static resumeAll(): void {\r\n        TweenMax.resumeAll();\r\n        FrameTimerPool.unpause();\r\n        PIXI.sound.resumeAll();\r\n        PIXI.sound.unmuteAll();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/PageVisibilityHandler.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { NumberUtils } from \"neo-common\";\r\nimport { BetManager } from \"../../../Managers/BetManager\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { UserAction } from \"../../../HTMLComponents/UserAction\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\n\r\nexport class Paytable {\r\n    static Configurations = {\r\n        PAYTABLE_COUNT_PREFIX: \"\",\r\n        PAYTABLE_COUNT_POSTFIX: \"\",\r\n        PAYTABLE_VALUE_PREFIX: \"\",\r\n        PAYTABLE_VALUE_POSTFIX: \"x\",\r\n    };\r\n\r\n    public static instance: Paytable;\r\n\r\n    private static hasBeenDisplayed: boolean = false;\r\n    private static payoutPage: number = -1;\r\n\r\n    private _pages: HTMLCollectionOf<Element>;\r\n    private _paginations: HTMLCollectionOf<Element>;\r\n    private _defaultFontSize: number;\r\n    private _defaultWidth: number;\r\n    private _maxBet: number;\r\n\r\n    constructor() {\r\n        Paytable.instance = this;\r\n    }\r\n\r\n    initialize(): void {\r\n        let prewPageButton: HTMLElement = document.getElementById(\"paytableButtonLeft\");\r\n        let nextPageButton: HTMLElement = document.getElementById(\"paytableButtonRight\");\r\n\r\n        if (prewPageButton != null) {\r\n            prewPageButton.onclick = this.prewPage.bind(this);\r\n        }\r\n\r\n        if (nextPageButton != null) {\r\n            nextPageButton.onclick = this.nextPage.bind(this);\r\n        }\r\n\r\n        this._pages = document.getElementsByClassName(\"paytablePage\");\r\n        this._paginations = document.getElementsByClassName(\"paytablePageNumber\");\r\n\r\n        this.updateDataValues();\r\n    }\r\n\r\n    public updateDataValues(): void {\r\n        var config: Element = Configuration.Configurations[\"PaytableConfiguration\"];\r\n\r\n        if (config != null) {\r\n            var data = {};\r\n            var next: Element = config.firstElementChild;\r\n            var maxValue = 0;\r\n            while (next != null) {\r\n                if (next.nodeName == \"Pages\") {\r\n                    if (next.hasAttribute(\"Payouts\")) {\r\n                        Paytable.payoutPage = parseInt(next.getAttribute(\"Payouts\")) - 1;\r\n                    }\r\n                } else if (next.hasAttribute(\"Symbol\")) {\r\n                    var id: string = next.getAttribute(\"Symbol\");\r\n                    var attrCounts: string = null;\r\n                    var attrValues: string = null;\r\n\r\n                    var i: number;\r\n                    if (next.hasAttribute(\"Counts\")) {\r\n                        attrCounts = next.getAttribute(\"Counts\");\r\n                        var counts: Array<string> = next.getAttribute(\"Counts\").split(\";\");\r\n                        for (i = 0; i < counts.length; i++) {\r\n                            data[\"PTB_SYMBOL_\" + id + \"_COUNT_\" + (i + 1)] =\r\n                                Paytable.Configurations.PAYTABLE_COUNT_PREFIX +\r\n                                counts[i] +\r\n                                Paytable.Configurations.PAYTABLE_COUNT_POSTFIX;\r\n                        }\r\n                    }\r\n\r\n                    if (next.hasAttribute(\"Values\")) {\r\n                        attrValues = next.getAttribute(\"Values\");\r\n                        var values: Array<string> = next.getAttribute(\"Values\").split(\";\");\r\n                        for (i = 0; i < values.length; i++) {\r\n                            if (parseInt(values[i]) > maxValue) {\r\n                                maxValue = parseInt(values[i]);\r\n                            }\r\n                            data[\"PTB_SYMBOL_\" + id + \"_VALUE_\" + (i + 1)] = this.getPaytableValue(values[i]);\r\n                        }\r\n                    }\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n\r\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\r\n                let elements = document.getElementsByClassName(\"ptbTotalBetMultiplierDisplay\");\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    elements[i].classList.add(\"_hidden\");\r\n                }\r\n\r\n                elements = document.getElementsByClassName(\"ptbTotalBetMultiplier\");\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    elements[i].classList.add(\"_invisible\");\r\n                }\r\n            }\r\n\r\n            if (data != null) {\r\n                this.updateFontSize(maxValue, data);\r\n                HtmlController.updateDataElements(data);\r\n            }\r\n\r\n            this.customContent();\r\n        }\r\n    }\r\n\r\n    private getPaytableValue(value: string, valueSepratator: string = \"-\"): string {\r\n        const valueArray = value.split(valueSepratator);\r\n\r\n        for (let i = 0; i < valueArray.length; i++) {\r\n            if (AppContext != null && AppContext.gameConfiguration.PaytableUseValue) {\r\n                valueArray[i] =\r\n                    Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(valueArray[i], BetManager.Bet)) +\r\n                    \" \" +\r\n                    DataManager.getDataById(GameData.DataCurrency);\r\n            } else {\r\n                valueArray[i] =\r\n                    Paytable.Configurations.PAYTABLE_VALUE_PREFIX +\r\n                    valueArray[i] +\r\n                    Paytable.Configurations.PAYTABLE_VALUE_POSTFIX;\r\n            }\r\n        }\r\n\r\n        return valueArray.join(valueSepratator);\r\n    }\r\n\r\n    private updateFontSize(maxValue: number, data: Object): void {\r\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\r\n            return;\r\n        }\r\n\r\n        let elements = HtmlController.DataElements[\"PTB_SYMBOL_1_VALUE_1\"];\r\n        let conversionRate = 1;\r\n\r\n        if (elements != null && elements.length > 0) {\r\n            const element = elements[0].instance;\r\n            element.removeAttribute(\"style\");\r\n            if (this._defaultWidth == undefined) {\r\n                this._defaultFontSize = parseInt(window.getComputedStyle(element).fontSize);\r\n                const defaultWidth = window.getComputedStyle(element).width;\r\n                this._defaultWidth =\r\n                    defaultWidth.indexOf(\"%\") > -1 ? undefined : parseInt(window.getComputedStyle(element).width);\r\n                this._maxBet = Math.max(...BetManager.TotalBets);\r\n            }\r\n\r\n            element.textContent =\r\n                Languages.formatText(Languages.FormatMoney, NumberUtils.multiply(maxValue, BetManager.Bet)) +\r\n                \" \" +\r\n                DataManager.getDataById(GameData.DataCurrency);\r\n            element.style.fontSize = this._defaultFontSize + \"px\";\r\n            element.style.width = \"auto\";\r\n            element.style.whiteSpace = \"nowrap\";\r\n            element.offsetWidth;\r\n            let currentWidth = parseFloat(window.getComputedStyle(element).width);\r\n            conversionRate = this._defaultWidth / (currentWidth * 1.1); //1.1 is padding\r\n            if (isNaN(conversionRate) || conversionRate > 1) {\r\n                conversionRate = 1;\r\n            }\r\n            element.style.fontSize = \"\";\r\n            element.style.width = \"\";\r\n        }\r\n\r\n        let fontConversion = window[\"CHANNEL\"] == \"mobile\" ? 1.1 : 1;\r\n        let fontSize = Math.floor(this._defaultFontSize * conversionRate * fontConversion) + \"px\";\r\n        for (let key in data) {\r\n            elements = HtmlController.DataElements[key];\r\n\r\n            if (elements != null) {\r\n                for (let i = 0; i < elements.length; i++) {\r\n                    elements[i].instance.style.fontSize = fontSize;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private customContent(): void {\r\n        if (AppContext != null && !AppContext.gameConfiguration.PaytableUseValue) {\r\n            /* Add classes paytableBonusSummary and paytableBonusSummaryDynamic when\r\n             * some values are inside text and need also some words to be removed in\r\n             * compare to original version of the text E.G.: text \"Total Bet\" has to\r\n             * be removed when using dynamic values. New Rid value should be created\r\n             * ORIGINAL_VALUE_CODE + _DYNAMIC = ORIGINAL_VALUE_CODE_DYNAMIC\r\n             * DYPT */\r\n            DataManager.showDataElements(\"paytableBonusSummary\");\r\n            DataManager.hideDataElements(\"paytableBonusSummaryDynamic\");\r\n            return;\r\n        }\r\n\r\n        DataManager.hideDataElements(\"paytableBonusSummary\");\r\n        DataManager.showDataElements(\"paytableBonusSummaryDynamic\");\r\n\r\n        /* USE IF: some value needs a different font size than the regular paytable values\r\n         * DYPT */\r\n        const dataIds = [\r\n            \"PTB_SYMBOL_12_VALUE_4\",\r\n            \"PTB_SYMBOL_12_VALUE_3\",\r\n            \"PTB_SYMBOL_12_VALUE_2\",\r\n            \"PTB_SYMBOL_12_VALUE_1\",\r\n        ];\r\n\r\n        dataIds.forEach((value) => {\r\n            if (value) {\r\n                const elements = HtmlController.DataElements[value];\r\n\r\n                if (elements != null) {\r\n                    for (let i = 0; i < elements.length; i++) {\r\n                        const fontSize = parseInt(elements[i].instance.style.fontSize);\r\n                        elements[i].instance.style.fontSize = Math.floor(fontSize * 1.7) + \"px\";\r\n                    }\r\n                }\r\n            }\r\n        });\r\n\r\n        /* USE IF: some value is inside text and should not be resized\r\n         * DYPT */\r\n        const preventResizeIds = [\"PTB_SYMBOL_8_COUNT_1\"];\r\n        preventResizeIds.forEach((value) => {\r\n            if (value) {\r\n                const elements = HtmlController.DataElements[value];\r\n\r\n                if (elements != null) {\r\n                    for (let i = 0; i < elements.length; i++) {\r\n                        elements[i].instance.removeAttribute(\"style\");\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n\r\n    private prewPage(): void {\r\n        let activeIndex: number = this.disableElementsAndReturnActive();\r\n        if (this._pages != null) {\r\n            if (activeIndex === 0) {\r\n                this._pages[this._pages.length - 1].classList.remove(\"_disabled\");\r\n                this._pages[this._pages.length - 1].classList.add(\"_active\");\r\n            } else {\r\n                this._pages[activeIndex - 1].classList.remove(\"_disabled\");\r\n                this._pages[activeIndex - 1].classList.add(\"_active\");\r\n            }\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n        if (this._paginations != null) {\r\n            if (activeIndex === 0) {\r\n                this._paginations[this._paginations.length - 1].classList.remove(\"_disabled\");\r\n                this._paginations[this._paginations.length - 1].classList.add(\"_active\");\r\n            } else {\r\n                this._paginations[activeIndex - 1].classList.remove(\"_disabled\");\r\n                this._paginations[activeIndex - 1].classList.add(\"_active\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private nextPage(): void {\r\n        let activeIndex: number = this.disableElementsAndReturnActive();\r\n        if (this._pages != null) {\r\n            if (activeIndex === this._pages.length - 1) {\r\n                this._pages[0].classList.remove(\"_disabled\");\r\n                this._pages[0].classList.add(\"_active\");\r\n            } else {\r\n                this._pages[activeIndex + 1].classList.remove(\"_disabled\");\r\n                this._pages[activeIndex + 1].classList.add(\"_active\");\r\n            }\r\n            PlayList.play(\"SND_Click\");\r\n        }\r\n        if (this._paginations != null) {\r\n            if (activeIndex === this._paginations.length - 1) {\r\n                this._paginations[0].classList.remove(\"_disabled\");\r\n                this._paginations[0].classList.add(\"_active\");\r\n            } else {\r\n                this._paginations[activeIndex + 1].classList.remove(\"_disabled\");\r\n                this._paginations[activeIndex + 1].classList.add(\"_active\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private setPage(page: number): void {\r\n        if (page < 0 || page > this._pages.length - 1) {\r\n            return;\r\n        }\r\n\r\n        this.disableElementsAndReturnActive();\r\n        if (this._pages != null) {\r\n            this._pages[page].classList.remove(\"_disabled\");\r\n            this._pages[page].classList.add(\"_active\");\r\n            (this._pages[page] as HTMLElement).scrollIntoView();\r\n        }\r\n\r\n        if (this._paginations != null) {\r\n            this._paginations[page].classList.remove(\"_disabled\");\r\n            this._paginations[page].classList.add(\"_active\");\r\n        }\r\n    }\r\n\r\n    private disableElementsAndReturnActive(): number {\r\n        let activeIndex: number = 0;\r\n        for (var i: number = 0; i < this._pages.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>this._pages[i];\r\n            if (element != null) {\r\n                if (!element.classList.contains(\"_disabled\")) {\r\n                    element.classList.add(\"_disabled\");\r\n                }\r\n                if (element.classList.contains(\"_active\")) {\r\n                    activeIndex = i;\r\n                    element.classList.remove(\"_active\");\r\n                }\r\n            }\r\n        }\r\n\r\n        for (var i: number = 0; i < this._paginations.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>this._paginations[i];\r\n            if (element != null) {\r\n                if (!element.classList.contains(\"_disabled\")) {\r\n                    element.classList.add(\"_disabled\");\r\n                }\r\n                if (element.classList.contains(\"_active\")) {\r\n                    element.classList.remove(\"_active\");\r\n                }\r\n            }\r\n        }\r\n\r\n        return activeIndex;\r\n    }\r\n\r\n    public static openAtStart(newGameRound: boolean = false): void {\r\n        if (Paytable.shouldOpen(newGameRound)) {\r\n            Paytable.show();\r\n        }\r\n    }\r\n\r\n    public static show(): void {\r\n        Paytable.hasBeenDisplayed = true;\r\n\r\n        let dipatchElementId = UserAction.ActionPaytableOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\r\n                }\r\n            }\r\n        }\r\n\r\n        Paytable.openPayoutPage();\r\n        window.addEventListener(\"resize\", Paytable.openPayoutPage);\r\n    }\r\n\r\n    private static openPayoutPage(): void {\r\n        Paytable.instance.setPage(Paytable.payoutPage);\r\n    }\r\n\r\n    public static clearListeners(): void {\r\n        window.removeEventListener(\"resize\", Paytable.openPayoutPage);\r\n    }\r\n\r\n    public static shouldOpen(newGameRound: boolean = false, isSpin: boolean = false): boolean {\r\n        if (!AppContext || !AppContext.gameConfiguration.ShowPaytableAtStart) {\r\n            return false;\r\n        }\r\n\r\n        //if prepareNewGameRound was called before GameManager.showGame, ignore hasBeenDisplayed\r\n        if (Paytable.hasBeenDisplayed && newGameRound) {\r\n            return false;\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            return false;\r\n        }\r\n\r\n        if (!DataManager.GameRoundClosed && !isSpin) {\r\n            return false;\r\n        }\r\n\r\n        if (FreeRoundBonus.isLastFrb) {\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Paytable/Paytable.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"./ComponentTypes\";\r\n\r\n/**\r\n * Configuration hold elements configurations from xml by ID.\r\n * @class Configuration\r\n */\r\n@engineComponent(ComponentTypes.Element)\r\nexport class Configuration {\r\n    static Configurations: { [id: string]: Element } = {};\r\n}\r\n\r\nexport const GeneralConfigurationAttributes = {\r\n    /**\r\n     * ReelCount is count of reels on screen for game.\r\n     * @property ReelCount\r\n     * @default null\r\n     */\r\n    REEL_COUNT: \"ReelCount\",\r\n    /**\r\n     * ReelX is array of x position for reels.\r\n     * @property ReelX\r\n     * @default null\r\n     */\r\n    REEL_X: \"ReelX\",\r\n    /**\r\n     * ReelY is array of y position for reels.\r\n     * @property ReelY\r\n     * @default null\r\n     */\r\n    REEL_Y: \"ReelY\",\r\n    /**\r\n     * Standard symbol width without offsets.\r\n     * @property SymbolWidth\r\n     * @default null\r\n     */\r\n    SYMBOL_WIDTH: \"SymbolWidth\",\r\n    /**\r\n     * Standard symbol height without offsets.\r\n     * @property SymbolHeight\r\n     * @default null\r\n     */\r\n    SYMBOL_HEIGHT: \"SymbolHeight\",\r\n    /**\r\n     * @property SymbolBottomCount\r\n     */\r\n    SYMBOL_BOTTOM_COUNT: \"SymbolBottomCount\",\r\n    /**\r\n     *@property SymbolTopCount\r\n     */\r\n    SYMBOL_TOP_COUNT: \"SymbolTopCount\",\r\n    /**\r\n     * Number of symbols visible on reel.\r\n     * @property VisibleSymbolCount\r\n     * @default null\r\n     */\r\n    VISIBLE_SYMBOL_COUNT: \"VisibleSymbolCount\",\r\n    /**\r\n     * Wins multipliers (need WinsAnimations with same array length).\r\n     * @property WinsMultipliers\r\n     * @default null\r\n     */\r\n    WINS_MULTIPLIERS: \"WinsMultipliers\",\r\n    /**\r\n     * Wins animations (need WinsMultipliers with same array length).\r\n     * @property WinsAnimations\r\n     * @default null\r\n     */\r\n    WINS_ANIMATIONS: \"WinsAnimations\",\r\n    /**\r\n     * GameMultipliers is array of multipliers.\r\n     * @property WinsAnimations\r\n     * @default null\r\n     */\r\n    GAME_MULTIPLIERS: \"GameMultipliers\",\r\n};\r\n\r\nexport const ReelConfigurationAttributes = {\r\n    /**\r\n     * ForceSpeed of rotation in frames.\r\n     * @property ForceSpeed\r\n     * @default 3\r\n     */\r\n    FORCE_SPEED: \"ForceSpeed\",\r\n    /**\r\n     * Multiplier for force speed.\r\n     * @property ForceSpeedMultipler\r\n     * @default 1.5\r\n     */\r\n    FORCE_SPEED_MULTIPLER: \"ForceSpeedMultipler\",\r\n    /**\r\n     * Pre roll height in pixels.\r\n     * @property PreRoll\r\n     * @default 180\r\n     */\r\n    PRE_ROLL: \"PreRoll\",\r\n    /**\r\n     * Pre roll speed in frames.\r\n     * @property PreRollSpeed\r\n     * @default 10\r\n     */\r\n    PRE_ROLL_SPEED: \"PreRollSpeed\",\r\n    /**\r\n     * Post roll height in pixels.\r\n     * @property PostRoll\r\n     * @default 180\r\n     */\r\n    POST_ROLL: \"PostRoll\",\r\n    /**\r\n     * Post roll speed in frames.\r\n     * @property PostRollSpeed\r\n     * @default 5\r\n     */\r\n    POST_ROLL_SPEED: \"PostRollSpeed\",\r\n    /**\r\n     * Speed of rotation in frames.\r\n     * @property Speed\r\n     * @default 3\r\n     */\r\n    SPEED: \"Speed\",\r\n};\r\n\r\nexport const MachineConfigurationAttributes = {\r\n    /**\r\n     * Min spin rotation in frames.\r\n     * @property MinSpinRotation\r\n     * @default 40\r\n     */\r\n    MIN_SPIN_ROTATION: \"MinSpinRotation\",\r\n    /**\r\n     * Min spin rotation in frames for outro high wins.\r\n     * @property MinSpinRotationLong\r\n     * @default 100\r\n     */\r\n    MIN_SPIN_ROTATION_LONG: \"MinSpinRotationLong\",\r\n    /**\r\n     * Delay to start rotation in frames.\r\n     * @property StartDelay\r\n     * @default 3\r\n     */\r\n    START_DELAY: \"StartDelay\",\r\n    /**\r\n     * Delay to stop rotation in frames.\r\n     * @property StopDelay\r\n     * @default 10\r\n     */\r\n    STOP_DELAY: \"StopDelay\",\r\n    /**\r\n     * Configuration ID for reels.\r\n     * @property StopDelay\r\n     * @type string\r\n     * @default null\r\n     */\r\n    REEL_CONFIGURATION: \"ReelConfiguration\",\r\n    /**\r\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\r\n     * @property Teasings\r\n     * @default null\r\n     *\r\n     * @deprecated Use TeasingSymbols istead Teasing\r\n     */\r\n    TEASINGS: \"Teasings\",\r\n    /**\r\n     * Teasings defined array of symbols which will go after reel stopped to teaser state.\r\n     * @property Teasings\r\n     * @default null\r\n     */\r\n    TEASING_SYMBOLS: \"TeasingSymbols\",\r\n    /**\r\n     *\r\n     */\r\n    TEASING_STOP_DELAY: \"TeasingStopDelay\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Configuration.ts\n **/","import { Configuration } from \"../../../Components/Configuration\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { UriHelper } from \"neo-common\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { Platforms } from \"neo-games\";\r\n\r\nexport class SimilarGames {\r\n    public enabled: boolean = false;\r\n\r\n    private _holder: HTMLElement;\r\n    private _pagesHolder: HTMLElement;\r\n    private _pagingHolder: HTMLElement;\r\n    private _pages: Array<HTMLElement> = [];\r\n    private _paging: Array<HTMLElement> = [];\r\n    private _actualPage: number = 0;\r\n\r\n    constructor() {}\r\n\r\n    initialize(): void {\r\n        if (\r\n            AppContext != null &&\r\n            AppContext.gameConfiguration != null &&\r\n            AppContext.gameConfiguration.ShowSimilarGames &&\r\n            AppContext.gameConfiguration.StaticContentUrl !== \"\" &&\r\n            this.getSimilarGamesList().length > 0\r\n        ) {\r\n            this._holder = document.getElementById(\"similarGames\");\r\n            this._pagesHolder = document.getElementById(\"similarGamesPagesContainer\");\r\n            this._pagingHolder = document.getElementById(\"similarGamesPaging\");\r\n\r\n            if (this._holder != null && this._pagesHolder != null) {\r\n                this.createPages();\r\n                this.enabled = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    private getSimilarGamesList(): Array<string> {\r\n        if (\r\n            AppContext != null &&\r\n            AppContext.gameConfiguration != null &&\r\n            AppContext.gameConfiguration.SimilarGamesList.length > 0\r\n        ) {\r\n            return AppContext.gameConfiguration.SimilarGamesList.filter((e) => e !== GameApp.key);\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    private createPages(): void {\r\n        if (AppContext != null && AppContext.gameConfiguration != null && this.getSimilarGamesList().length > 0) {\r\n            let filterArray: Array<string> = this.getSimilarGamesList();\r\n            let page: number = 0;\r\n            for (let i: number = 0; i < filterArray.length; i++) {\r\n                if (i % 15 === 0) {\r\n                    page = this.createNextPage();\r\n                }\r\n                this.createPageItem(filterArray[i], page);\r\n            }\r\n        }\r\n\r\n        if (this._pages.length > 1) {\r\n            let prewPageButton: HTMLElement = document.getElementById(\"similarGamesPrewArrow\");\r\n            let nextPageButton: HTMLElement = document.getElementById(\"similarGamesNextArrow\");\r\n            if (prewPageButton != null) {\r\n                prewPageButton.classList.remove(\"_hidden\");\r\n                prewPageButton.onclick = this.prewPage.bind(this);\r\n            }\r\n            if (nextPageButton != null) {\r\n                nextPageButton.classList.remove(\"_hidden\");\r\n                nextPageButton.onclick = this.nextPage.bind(this);\r\n            }\r\n            if (this._pagingHolder != null) {\r\n                this._pagingHolder.classList.remove(\"_hidden\");\r\n            }\r\n        }\r\n\r\n        const exitBtn = document.getElementById(\"exitBtn\");\r\n        if (exitBtn != null) {\r\n            if (\r\n                AppContext != null &&\r\n                AppContext.gameConfiguration != null &&\r\n                AppContext.gameConfiguration.ShowExitGameButton\r\n            ) {\r\n                exitBtn.classList.remove(\"_hidden\");\r\n            } else {\r\n                exitBtn.classList.add(\"_hidden\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private createNextPage(): number {\r\n        let newPage: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let newPageChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let newPaging: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n\r\n        newPage.classList.add(\"similarGamesPage\");\r\n        newPageChild.classList.add(\"customContent\");\r\n        newPaging.classList.add(\"similarGamesPageNumber\");\r\n\r\n        if (this._pages.length === 0) {\r\n            newPage.classList.add(\"_active\");\r\n            newPaging.classList.add(\"_active\");\r\n        } else {\r\n            newPage.classList.add(\"_disabled\");\r\n        }\r\n\r\n        newPage.appendChild(newPageChild);\r\n\r\n        this._pages.push(newPage);\r\n        this._paging.push(newPaging);\r\n        if (this._pagesHolder != null) {\r\n            this._pagesHolder.appendChild(newPage);\r\n        }\r\n        if (this._pagingHolder != null) {\r\n            this._pagingHolder.appendChild(newPaging);\r\n        }\r\n\r\n        return this._pages.length - 1;\r\n    }\r\n\r\n    private createPageItem(name: string, page: number): void {\r\n        let itemHolder: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLoading: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLoadingIcon: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let itemLogo: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n\r\n        itemHolder.classList.add(\"similarGameContainer\");\r\n        item.classList.add(\"similarGameItem\");\r\n        itemLoading.classList.add(\"similarGameLoading\");\r\n        itemLoadingIcon.classList.add(\"loadingIcon\");\r\n        itemLogo.classList.add(\"similarGameLogo\");\r\n        itemLogo.setAttribute(\"game\", name);\r\n\r\n        let img = document.createElement(\"img\");\r\n        img.setAttribute(\r\n            \"src\",\r\n            AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg\",\r\n        );\r\n        img.addEventListener(\"load\", this.setItemLogo.bind(this, itemLogo, itemLoading, name));\r\n\r\n        itemHolder.appendChild(item);\r\n        item.appendChild(itemLoading);\r\n        itemLoading.appendChild(itemLoadingIcon);\r\n        item.appendChild(itemLogo);\r\n        itemLogo.onclick = this.selectGame.bind(this);\r\n\r\n        if (this._pages[page] != null) {\r\n            this._pages[page].firstChild.appendChild(itemHolder);\r\n        }\r\n    }\r\n\r\n    private setItemLogo(itemLogo: HTMLDivElement, itemLoading: HTMLDivElement, name: string): void {\r\n        itemLoading.parentNode.removeChild(itemLoading);\r\n        itemLogo.style.background =\r\n            \"url(\" + AppContext.gameConfiguration.StaticContentUrl + name + \"/\" + window[\"QUALITY\"] + \"/logo.jpg)\";\r\n    }\r\n\r\n    private prewPage(): void {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        PlayList.play(\"SND_Click\");\r\n        this.disableAllPages();\r\n        this._actualPage--;\r\n        if (this._pages[this._actualPage] == null) {\r\n            this._actualPage = this._pages.length - 1;\r\n        }\r\n        if (this._pages[this._actualPage] != null) {\r\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n            this._pages[this._actualPage].classList.add(\"_active\");\r\n        }\r\n        if (this._paging[this._actualPage] != null) {\r\n            this._paging[this._actualPage].classList.add(\"_active\");\r\n        }\r\n    }\r\n\r\n    private nextPage(): void {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        PlayList.play(\"SND_Click\");\r\n        this.disableAllPages();\r\n        this._actualPage++;\r\n        if (this._pages[this._actualPage] == null) {\r\n            this._actualPage = 0;\r\n        }\r\n        if (this._pages[this._actualPage] != null) {\r\n            this._pages[this._actualPage].classList.remove(\"_disabled\");\r\n            this._pages[this._actualPage].classList.add(\"_active\");\r\n        }\r\n        if (this._paging[this._actualPage] != null) {\r\n            this._paging[this._actualPage].classList.add(\"_active\");\r\n        }\r\n    }\r\n\r\n    private disableAllPages(): void {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        for (let i: number = 0; i < this._pages.length; i++) {\r\n            if (this._pages[i].classList.contains(\"_active\")) {\r\n                this._pages[i].classList.remove(\"_active\");\r\n            }\r\n            if (!this._pages[i].classList.contains(\"_disabled\")) {\r\n                this._pages[i].classList.add(\"_disabled\");\r\n            }\r\n        }\r\n\r\n        for (let i: number = 0; i < this._paging.length; i++) {\r\n            if (this._paging[i].classList.contains(\"_active\")) {\r\n                this._paging[i].classList.remove(\"_active\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private selectGame(e: any): void {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        PlayList.play(\"SND_Click\");\r\n        if (e != null && e.target != null && e.target.hasAttribute(\"game\")) {\r\n            let urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n\r\n            if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n                let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\r\n                let token: string = urlInfo[\"hash\"].substring(1);\r\n                let newUrl: string = serverUrl + \"Launch/\" + e.target.getAttribute(\"game\") + \"?\" + token;\r\n                let root: HTMLElement = document.getElementById(\"root\");\r\n                if (root != null) {\r\n                    root.style.display = \"none\";\r\n                }\r\n                Platforms.Platforms.gameChange(e.target.getAttribute(\"game\"));\r\n                if (Platforms.Platforms.handleChangeGame) {\r\n                    return;\r\n                }\r\n\r\n                // GameApp.gameClient.leaveGame();\r\n                setTimeout(() => {\r\n                    window.location.replace(newUrl);\r\n                }, 100);\r\n            }\r\n        }\r\n    }\r\n\r\n    public open(): boolean {\r\n        if (this.enabled) {\r\n            if (this._holder.classList.contains(\"_disabled\")) {\r\n                this._holder.classList.remove(\"_disabled\");\r\n                return true;\r\n            } else {\r\n                return false;\r\n            }\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    public disable(): void {\r\n        if (!this.enabled) {\r\n            return;\r\n        }\r\n        if (!this._holder.classList.contains(\"_disabled\")) {\r\n            this._holder.classList.add(\"_disabled\");\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/SimilarGames/SimilarGames.ts\n **/","import { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { Platforms } from \"neo-games\";\r\n\r\nexport class LimitDialog {\r\n    private static _opened: boolean = false;\r\n    private static _limit: HTMLElement;\r\n    private static _openTimer: FrameTimerEventEmitter;\r\n    private static _closeTimer: FrameTimerEventEmitter;\r\n\r\n    static openDialog(): void {\r\n        LimitDialog.initializeDialog();\r\n\r\n        if (!LimitDialog._opened) {\r\n            LimitDialog._openTimer.start(1);\r\n            if (LimitDialog._limit != null) {\r\n                LimitDialog._limit.style.display = \"block\";\r\n            }\r\n\r\n            LimitDialog._opened = true;\r\n            Platforms.Platforms.dialogOpened(\"limit\", true);\r\n        }\r\n    }\r\n\r\n    static closeDialog(): void {\r\n        if (LimitDialog._opened) {\r\n            LimitDialog.initializeDialog();\r\n\r\n            LimitDialog._closeTimer.start(60);\r\n            if (LimitDialog._limit != null && !LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n                LimitDialog._limit.classList.add(\"_disabled\");\r\n            }\r\n\r\n            Platforms.Platforms.dialogOpened(\"limit\", false);\r\n        }\r\n    }\r\n\r\n    private static initializeDialog(): void {\r\n        if (LimitDialog._limit == null) {\r\n            LimitDialog._limit = document.getElementById(\"limitDialog\");\r\n        }\r\n\r\n        if (LimitDialog._openTimer == null) {\r\n            LimitDialog._openTimer = CreateFrameTimer(\"openTimer\");\r\n            LimitDialog._openTimer.on(FrameTimerEvents.Complete, this.showDialog);\r\n        }\r\n\r\n        if (LimitDialog._closeTimer == null) {\r\n            LimitDialog._closeTimer = CreateFrameTimer(\"closeTimer\");\r\n            LimitDialog._closeTimer.on(FrameTimerEvents.Complete, this.hideDialog);\r\n        }\r\n    }\r\n\r\n    private static showDialog(): void {\r\n        LimitDialog.initializeDialog();\r\n\r\n        if (LimitDialog._limit != null && LimitDialog._limit.classList.contains(\"_disabled\")) {\r\n            LimitDialog._limit.classList.remove(\"_disabled\");\r\n            PlayList.play(\"SND_BaseLimit\");\r\n        }\r\n    }\r\n\r\n    private static hideDialog(): void {\r\n        LimitDialog.initializeDialog();\r\n        if (LimitDialog._limit != null) {\r\n            LimitDialog._limit.style.display = \"none\";\r\n        }\r\n\r\n        LimitDialog._opened = false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/LimitDialog.ts\n **/","import { Communication, Plugins } from \"neo-games\";\r\nimport { WebSocketClient } from \"../Utils/WebSocketClient\";\r\nimport { BalanceManager } from \"./BalanceManager\";\r\nimport { GameManager } from \"./GameManager\";\r\nimport { ApiClientCommunication } from \"neo-common\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { WebSocketClientHub } from \"../Utils/WebSocketClientHub\";\r\nimport { DataManager } from \"./DataManager\";\r\nimport { Jackpot } from \"../Channels/Common/Bonuses/Jackpot\";\r\n\r\nexport class NotificationManager {\r\n    //******************************************************************************************************************\r\n    //  INSTANCE\r\n    //******************************************************************************************************************\r\n\r\n    private static instance: NotificationManager;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private webSocketClient: WebSocketClient;\r\n\r\n    private webSocketClientHub: WebSocketClientHub;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl) {\r\n            this.webSocketClientHub = new WebSocketClientHub();\r\n        } else {\r\n            this.webSocketClient = new WebSocketClient();\r\n        }\r\n\r\n        this.bindMessages();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PRIVATE FUNCTIONS\r\n    //******************************************************************************************************************\r\n\r\n    private bindMessages(): void {\r\n        if (this.webSocketClient != null) {\r\n            this.webSocketClient.on(\"RefreshBalance\", this.refreshBalance.bind(this));\r\n            this.webSocketClient.on(\"CloseSession\", this.closeSession.bind(this));\r\n            this.webSocketClient.on(\"UpdateStatusBar\", this.updateStatusBar.bind(this));\r\n        }\r\n\r\n        if (this.webSocketClientHub != null) {\r\n            this.onReceiveMessage(this.messageReceiver.bind(this));\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  GAME 2 SERVER\r\n    //******************************************************************************************************************\r\n\r\n    private sendMessage(message: Message): void {\r\n        if (this.webSocketClient != null) {\r\n            let methodName = message.action;\r\n            let data = message.data;\r\n\r\n            if (methodName == \"event/log\") {\r\n                methodName = \"LogEvent\";\r\n            }\r\n\r\n            this.webSocketClient.sendMessage(methodName, data);\r\n        }\r\n\r\n        if (this.webSocketClientHub != null) {\r\n            if (!this.webSocketClientHub.isConnectionEstablished()) {\r\n                this.webSocketClientHub.addMessage(this.sendMessage.bind(this, message));\r\n                return;\r\n            }\r\n\r\n            this.webSocketClientHub\r\n                .sendMessage(message)\r\n                .then(() => {\r\n                    if (DEBUG) {\r\n                        console.log(\"Message received\");\r\n                    }\r\n                })\r\n                .catch((error) => {\r\n                    if (DEBUG) {\r\n                        console.log(error);\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    private invokeCommand(message: Message): Promise<Result> {\r\n        if (this.webSocketClientHub != null) {\r\n            return this.webSocketClientHub.invokeCommand(message);\r\n        }\r\n\r\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\r\n    }\r\n\r\n    private onReceiveMessage(receiver: (message: Message) => void): void {\r\n        if (this.webSocketClientHub != null) {\r\n            this.webSocketClientHub.onReceiveMessage(receiver);\r\n        }\r\n    }\r\n\r\n    private disconnect(): void {\r\n        if (this.webSocketClientHub != null) {\r\n            this.webSocketClientHub.disconnect();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SERVER 2 GAME\r\n    //******************************************************************************************************************\r\n\r\n    private messageReceiver(message: Message): void {\r\n        if (message == null) {\r\n            if (DEBUG) {\r\n                console.log(\"ERROR - message object was not received from websocket\");\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (message.application.toLowerCase() != \"neo\") {\r\n            if (DEBUG) {\r\n                console.log('ERROR - message application was not \"NEO\"');\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (message.service.toLowerCase() == \"notification\") {\r\n            switch (message.action.toLowerCase()) {\r\n                case \"refreshbalance\":\r\n                    this.refreshBalance(message.data);\r\n                    break;\r\n                case \"closesession\":\r\n                    this.closeSession();\r\n                    break;\r\n                case \"updatestatusbar\":\r\n                    this.updateStatusBar(message.data);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        if (message.service.toLowerCase() == \"servertime\") {\r\n            switch (message.action.toLowerCase()) {\r\n                case \"update\":\r\n                    this.updateServerTime(message.data);\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    private refreshBalance(data: any): void {\r\n        //dynamic frb\r\n        if (data[\"freeRounds\"] != null) {\r\n            FreeRoundBonus.updateRemainingCount(data[\"freeRounds\"]);\r\n        }\r\n\r\n        //we dont want to update balance during mini game\r\n        if (Jackpot.hasActiveGame()) {\r\n            return;\r\n        }\r\n\r\n        BalanceManager.balanceReceived(data as Communication.Game.IBalance);\r\n    }\r\n\r\n    private closeSession(): void {\r\n        for (let key in Communication.Game.GameModules) {\r\n            ModuleManager.disableChannelModule(Communication.Game.GameModules[key]);\r\n        }\r\n\r\n        PageVisibilityHandler.Enabled = false;\r\n        PageVisibilityHandler.pauseAll();\r\n        HtmlController.dispatchActionAllowed = false;\r\n\r\n        GameManager.errorReceived({\r\n            requestInfo: {\r\n                request: NotificationManager,\r\n                url: null,\r\n                gameKey: null,\r\n            } as ApiClientCommunication.Types.IRequestInfo,\r\n            httpStatusCode: 401,\r\n        } as ApiClientCommunication.Types.ApiClientError);\r\n    }\r\n\r\n    private updateStatusBar(data: any): void {\r\n        let statusBar = Plugins.StatusBar.getInstance();\r\n        if (statusBar.hasActiveWidget(\"statusBarMessage\") && data != null && data[\"statusBarMessage\"]) {\r\n            statusBar.add(Plugins.StatusBar.Types.StatusBarMessage, \"statusBarMessage\", data[\"statusBarMessage\"]);\r\n            Scaling.resizeRoot();\r\n        }\r\n    }\r\n\r\n    private updateServerTime(data: any): void {\r\n        if (data == null) {\r\n            return;\r\n        }\r\n\r\n        DataManager.serverTimeReceived(data);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PUBLIC FUNCTIONS\r\n    //******************************************************************************************************************\r\n\r\n    public static initialize(): void {\r\n        if (NotificationManager.instance == null) {\r\n            NotificationManager.instance = new NotificationManager();\r\n        }\r\n    }\r\n\r\n    public static sendMessage(message: Message): void {\r\n        if (NotificationManager.instance != null) {\r\n            NotificationManager.instance.sendMessage(message);\r\n        }\r\n    }\r\n\r\n    public static invokeCommand(message: Message): Promise<Result> {\r\n        if (NotificationManager.instance != null) {\r\n            return NotificationManager.instance.invokeCommand(message);\r\n        }\r\n\r\n        return Promise.reject({ code: \"Hub connection not initialized\" } as Result);\r\n    }\r\n\r\n    public static onReceiveMessage(receiver: (message: Message) => void): void {\r\n        if (NotificationManager.instance != null) {\r\n            return NotificationManager.instance.onReceiveMessage(receiver);\r\n        }\r\n    }\r\n\r\n    public static disconnect(): void {\r\n        if (NotificationManager.instance != null) {\r\n            NotificationManager.instance.disconnect();\r\n        }\r\n    }\r\n}\r\n\r\nexport interface Message {\r\n    application: string;\r\n    service: string;\r\n    action: string;\r\n    data: Object;\r\n}\r\n\r\nexport interface Result {\r\n    code: string;\r\n    data: Object;\r\n}\r\n\r\nexport interface ResultError extends Error {\r\n    result: Result;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/NotificationManager.ts\n **/","import GameClientHubConnection = GameClientHub.GameClientHubConnection;\r\nimport { UriHelper } from \"neo-common\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\n\r\nexport class WebSocketClient {\r\n    private hubConnection: GameClientHubConnection;\r\n    private connected: boolean;\r\n\r\n    constructor() {\r\n        this.connected = false;\r\n\r\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n        if (urlInfo != null && urlInfo[\"query\"][\"serverUrl\"] && urlInfo[\"hash\"]) {\r\n            let serverUrl: string = urlInfo[\"query\"][\"serverUrl\"];\r\n\r\n            try {\r\n                this.hubConnection = new GameClientHub.GameClientHubConnection(\r\n                    serverUrl,\r\n                    this.getToken,\r\n                    AppContext.gameConfiguration,\r\n                );\r\n                this.connected = true;\r\n            } catch (e) {\r\n                if (DEBUG) {\r\n                    console.log(\"ERROR websocket connection was not created: \" + e);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private getToken(): string {\r\n        let token = \"\";\r\n\r\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n        }\r\n\r\n        return token;\r\n    }\r\n\r\n    public sendMessage(methodName: string, data: any): void {\r\n        if (this.hubConnection != null && this.connected) {\r\n            this.hubConnection.sendMessage(methodName, data);\r\n        }\r\n    }\r\n\r\n    public on(methodName: string, callbackFn: (message: string) => void): void {\r\n        if (this.hubConnection != null) {\r\n            this.hubConnection.on(methodName, callbackFn);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClient.ts\n **/","import ClientHubConnection = ClientHub.ClientHubConnection;\r\nimport Message = ClientHub.Message;\r\nimport UpdateTokenRequest = ClientHub.UpdateTokenRequest;\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { UriHelper } from \"neo-common\";\r\nimport Result = ClientHub.Result;\r\nimport { Platforms } from \"neo-games\";\r\n\r\nexport class WebSocketClientHub {\r\n    private clientHubConnection: ClientHubConnection;\r\n    private jwtToken: string;\r\n    private connectionEstablished: boolean;\r\n    private stackedMessages: Array<Function>;\r\n\r\n    constructor() {\r\n        if (AppContext.gameConfiguration == null) {\r\n            return;\r\n        }\r\n\r\n        if (AppContext.gameConfiguration.ApplicationGatewayUrl === \"\") {\r\n            return;\r\n        }\r\n\r\n        try {\r\n            this.stackedMessages = [];\r\n            this.connectionEstablished = false;\r\n            this.clientHubConnection = new ClientHubConnection(\r\n                AppContext.gameConfiguration.ApplicationGatewayUrl,\r\n                this.getToken,\r\n                () => {\r\n                    this.connectionEstablished = true;\r\n                    Platforms.Platforms.webSocketsInitialized();\r\n                    this.sendStackedMessages();\r\n                },\r\n            );\r\n            this.jwtToken = this.getToken();\r\n        } catch (e) {\r\n            if (DEBUG) {\r\n                console.log(\"ERROR websocket connection was not created: \" + e);\r\n            }\r\n        }\r\n    }\r\n\r\n    private getToken(): string {\r\n        let token = \"\";\r\n\r\n        const urlInfo: Object = UriHelper.parseUrl(window.location.href, true, true);\r\n        if (urlInfo != null && urlInfo[\"hash\"]) {\r\n            token = urlInfo[\"hash\"].substring(1).split(\"=\")[1];\r\n        }\r\n\r\n        return token;\r\n    }\r\n\r\n    private tokenChanged(): boolean {\r\n        const currentToken = this.getToken();\r\n        return currentToken != this.jwtToken;\r\n    }\r\n\r\n    private updateToken(): void {\r\n        if (!this.tokenChanged()) {\r\n            return;\r\n        }\r\n\r\n        if (!this.clientHubConnection) {\r\n            return;\r\n        }\r\n\r\n        const _self = this;\r\n        const token = this.getToken();\r\n        this.clientHubConnection\r\n            .updateToken(new UpdateTokenRequest(token))\r\n            .then(() => {\r\n                if (DEBUG) {\r\n                    console.log(\"Websocket connection token was updated successfully.\");\r\n                }\r\n                _self.jwtToken = token;\r\n            })\r\n            .catch((e) => {\r\n                if (DEBUG) {\r\n                    console.log(\"ERROR websocket token was not updated: \" + e);\r\n                }\r\n            });\r\n    }\r\n\r\n    private sendStackedMessages(): void {\r\n        for (let i = 0; i < this.stackedMessages.length; i++) {\r\n            const fn = this.stackedMessages[i];\r\n            if (fn) {\r\n                fn();\r\n            }\r\n        }\r\n\r\n        this.stackedMessages = [];\r\n    }\r\n\r\n    public addMessage(message: Function): void {\r\n        if (this.stackedMessages != null) {\r\n            this.stackedMessages.push(message);\r\n        }\r\n    }\r\n\r\n    public isConnectionEstablished(): boolean {\r\n        return this.connectionEstablished;\r\n    }\r\n\r\n    public sendMessage(message: Message): Promise<void> {\r\n        if (!this.clientHubConnection) {\r\n            return Promise.reject(new Error(\"Not initialized\"));\r\n        }\r\n\r\n        this.updateToken();\r\n        return this.clientHubConnection.sendMessage(message);\r\n    }\r\n\r\n    public invokeCommand(message: Message): Promise<Result> {\r\n        if (!this.clientHubConnection) {\r\n            return Promise.reject({ code: \"Not initialized\" } as Result);\r\n        }\r\n\r\n        this.updateToken();\r\n        return this.clientHubConnection.invokeCommand(message);\r\n    }\r\n\r\n    public onReceiveMessage(receiver: (message: Message) => void): void {\r\n        if (!this.clientHubConnection) {\r\n            return;\r\n        }\r\n\r\n        this.updateToken();\r\n        this.clientHubConnection.onReceiveMessage(receiver);\r\n    }\r\n\r\n    public disconnect(): void {\r\n        if (!this.clientHubConnection) {\r\n            return;\r\n        }\r\n\r\n        this.clientHubConnection.disconnect().catch((e) => {\r\n            console.log(\"ERROR websocket connection was disconnected: \" + e);\r\n        });\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/WebSocketClientHub.ts\n **/","import { PlayList } from \"../../../../Components/Sounds/PlayList\";\r\nimport { GameApp } from \"../../../../GameApp\";\r\nimport { GameManager } from \"../../../../Managers/GameManager\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { BaseModel } from \"../../../../GameComponents/Base/BaseModel\";\r\nimport { IErrorResponse } from \"neo-common/Engine/ApiClient/Types\";\r\nimport { Languages } from \"../../../../Utils/Languages\";\r\nimport { StringUtils, Utils } from \"neo-common\";\r\n\r\nexport class SessionTimer {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected static dialog: HTMLElement;\r\n\r\n    protected static title: HTMLElement;\r\n\r\n    protected static text: HTMLElement;\r\n\r\n    protected static buttonsHolder: HTMLElement;\r\n\r\n    protected static buttons: Array<HTMLElement>;\r\n\r\n    protected static callback: (response: any) => void;\r\n\r\n    protected static response: any;\r\n\r\n    protected static step: number;\r\n\r\n    protected static intervals: Array<number>;\r\n\r\n    protected static intervalIndex: number;\r\n\r\n    protected static intervalHolder: HTMLElement;\r\n\r\n    protected static intervalDisplay: HTMLElement;\r\n\r\n    //******************************************************************************************************************\r\n    //  POSTPONE\r\n    //******************************************************************************************************************\r\n\r\n    public static postpone(callback: (response: any) => void, response: any): void {\r\n        if (\r\n            !Utils.isNullOrUndefined(response) &&\r\n            !Utils.isNullOrUndefined(response.messages) &&\r\n            response.messages.length > 0\r\n        ) {\r\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n                SessionTimer.dialog = document.getElementById(\"messageDialog\");\r\n\r\n                if (!Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n                    SessionTimer.dialog.classList.add(\"sessionTimer\");\r\n                    SessionTimer.title = SessionTimer.dialog.getElementsByTagName(\"h3\")[0];\r\n                    SessionTimer.text = document.getElementById(\"messageDialogText\");\r\n\r\n                    SessionTimer.buttonsHolder = document.getElementById(\"messageDialogButtons\");\r\n                    SessionTimer.buttons = [];\r\n                }\r\n            }\r\n\r\n            if (Utils.isNullOrUndefined(SessionTimer.dialog)) {\r\n                callback(response);\r\n            } else {\r\n                SessionTimer.callback = callback;\r\n                SessionTimer.response = response;\r\n                SessionTimer.step = 0;\r\n                SessionTimer.handle();\r\n            }\r\n        } else {\r\n            callback(response);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  UPDATE DIALOG DATA\r\n    //******************************************************************************************************************\r\n\r\n    protected static updateDialogData(data: any): void {\r\n        SessionTimer.resetDialogData();\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"title\"])) {\r\n            SessionTimer.title.innerHTML = data[\"title\"];\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"text\"])) {\r\n            SessionTimer.text.innerHTML = data[\"text\"];\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"actions\"])) {\r\n            SessionTimer.removeAllButtons();\r\n\r\n            for (let i = 0; i < data[\"actions\"].length; i++) {\r\n                let action = data[\"actions\"][i];\r\n\r\n                switch (action.type) {\r\n                    case \"continue\":\r\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionContinue.bind(this, action));\r\n                        break;\r\n                    case \"exit\":\r\n                        SessionTimer.createButton(action[\"text\"], SessionTimer.actionExit.bind(this, action));\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(data[\"intervals\"])) {\r\n            SessionTimer.createIntervals(data[\"intervals\"]);\r\n        }\r\n    }\r\n\r\n    protected static resetDialogData(): void {\r\n        //default title\r\n        SessionTimer.title.innerHTML = Languages.getRid(\"DLG_INFO\");\r\n\r\n        //remove all custom buttons\r\n        SessionTimer.removeAllButtons();\r\n\r\n        //create default continue button\r\n        SessionTimer.createButton(Languages.getRid(\"CONTINUE\"), SessionTimer.actionContinue);\r\n\r\n        if (SessionTimer.intervalHolder != null) {\r\n            SessionTimer.intervalHolder.parentElement.removeChild(SessionTimer.intervalHolder);\r\n            SessionTimer.intervalHolder = null;\r\n        }\r\n    }\r\n\r\n    protected static removeAllButtons(): void {\r\n        while (SessionTimer.buttons.length > 0) {\r\n            let button = SessionTimer.buttons.pop();\r\n            SessionTimer.buttonsHolder.removeChild(button);\r\n        }\r\n    }\r\n\r\n    protected static disableAllButtons(): void {\r\n        for (let i = 0; i < SessionTimer.buttons.length; i++) {\r\n            let button = SessionTimer.buttons[i];\r\n\r\n            if (button != null) {\r\n                button.classList.add(\"_disabled\");\r\n                button.onclick = null;\r\n            }\r\n        }\r\n    }\r\n\r\n    protected static createButton(text: string, action: (data: any) => void): void {\r\n        let button: HTMLElement = document.createElement(\"div\");\r\n        button.textContent = text;\r\n        button.classList.add(\"dialogBtn\", \"customDialogBtn\");\r\n        button.onclick = action;\r\n\r\n        SessionTimer.buttonsHolder.appendChild(button);\r\n        SessionTimer.buttons.push(button);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ACTIONS\r\n    //******************************************************************************************************************\r\n\r\n    protected static actionContinue(): void {\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        SessionTimer.disableAllButtons();\r\n\r\n        let interval: number;\r\n        if (SessionTimer.intervals != null && SessionTimer.intervalIndex > 0) {\r\n            interval = SessionTimer.intervals[SessionTimer.intervalIndex];\r\n        }\r\n        GameManager.gameClient.resetRealityCheck(interval).then((response: Communication.Game.RealityCheckResponse) => {\r\n            this.onActionContinueReceived();\r\n        });\r\n    }\r\n\r\n    protected static onActionContinueReceived(): void {\r\n        SessionTimer.handle();\r\n    }\r\n\r\n    protected static actionExit(): void {\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        SessionTimer.disableAllButtons();\r\n\r\n        GameManager.gameClient.closeRealityCheck().then((response: Communication.Game.RealityCheckResponse) => {\r\n            this.onActionExitReceived();\r\n        });\r\n    }\r\n\r\n    protected static onActionExitReceived(): void {\r\n        Platforms.Platforms.exitHandler = \"responsibleDialog\";\r\n        GameApp.exit();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLE\r\n    //******************************************************************************************************************\r\n\r\n    protected static handle(): void {\r\n        if (SessionTimer.response.messages.length === SessionTimer.step) {\r\n            SessionTimer.dialog.classList.add(\"_disabled\");\r\n            SessionTimer.callback(SessionTimer.response);\r\n            Platforms.Platforms.dialogOpened(\"sessionTimer\", false);\r\n        } else {\r\n            if (SessionTimer.response.messages[SessionTimer.step].type == \"plugin\") {\r\n                Platforms.Platforms.sendPluginMessage(SessionTimer.response.messages[SessionTimer.step].text);\r\n                SessionTimer.step++;\r\n                SessionTimer.handle();\r\n            } else {\r\n                SessionTimer.dialog.classList.remove(\"_disabled\");\r\n                SessionTimer.updateDialogData(SessionTimer.response.messages[SessionTimer.step]);\r\n                SessionTimer.step++;\r\n                Platforms.Platforms.dialogOpened(\"sessionTimer\", true);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CUSTOM\r\n    //******************************************************************************************************************\r\n\r\n    protected static createIntervals(intervals: Array<number>): void {\r\n        if (SessionTimer.buttonsHolder != null) {\r\n            SessionTimer.intervals = intervals;\r\n            SessionTimer.intervalIndex = 0;\r\n\r\n            SessionTimer.intervalHolder = document.createElement(\"div\");\r\n            SessionTimer.intervalHolder.setAttribute(\"class\", \"sessionIntervals\");\r\n\r\n            let buttonMinus = document.createElement(\"div\");\r\n            buttonMinus.setAttribute(\"class\", \"minusBtn\");\r\n            buttonMinus.textContent = \"-\";\r\n\r\n            let buttonPlus = document.createElement(\"div\");\r\n            buttonPlus.setAttribute(\"class\", \"plusBtn\");\r\n            buttonPlus.textContent = \"+\";\r\n\r\n            buttonMinus.addEventListener(\r\n                \"click\",\r\n                SessionTimer.changeInterval.bind(this, true, buttonMinus, buttonPlus),\r\n            );\r\n            buttonPlus.addEventListener(\r\n                \"click\",\r\n                SessionTimer.changeInterval.bind(this, false, buttonMinus, buttonPlus),\r\n            );\r\n\r\n            SessionTimer.intervalDisplay = document.createElement(\"div\");\r\n            SessionTimer.intervalDisplay.setAttribute(\"class\", \"value\");\r\n            SessionTimer.intervalDisplay.innerText = intervals[0].toString();\r\n\r\n            if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n                buttonMinus.classList.add(\"_disabled\");\r\n            }\r\n\r\n            if (SessionTimer.intervalIndex == 0) {\r\n                buttonPlus.classList.add(\"_disabled\");\r\n            }\r\n\r\n            SessionTimer.intervalHolder.appendChild(buttonMinus);\r\n            SessionTimer.intervalHolder.appendChild(SessionTimer.intervalDisplay);\r\n            SessionTimer.intervalHolder.appendChild(buttonPlus);\r\n            SessionTimer.buttonsHolder.parentElement.insertBefore(\r\n                SessionTimer.intervalHolder,\r\n                SessionTimer.buttonsHolder,\r\n            );\r\n        }\r\n    }\r\n\r\n    protected static changeInterval(\r\n        increase: boolean = false,\r\n        buttonMinus: HTMLElement,\r\n        buttonPlus: HTMLElement,\r\n    ): void {\r\n        buttonMinus.classList.remove(\"_disabled\");\r\n        buttonPlus.classList.remove(\"_disabled\");\r\n\r\n        if (increase) {\r\n            if (SessionTimer.intervalIndex < SessionTimer.intervals.length - 1) {\r\n                SessionTimer.intervalIndex++;\r\n            }\r\n        } else {\r\n            if (SessionTimer.intervalIndex > 0) {\r\n                SessionTimer.intervalIndex--;\r\n            }\r\n        }\r\n\r\n        if (SessionTimer.intervalIndex == SessionTimer.intervals.length - 1) {\r\n            buttonMinus.classList.add(\"_disabled\");\r\n        }\r\n\r\n        if (SessionTimer.intervalIndex == 0) {\r\n            buttonPlus.classList.add(\"_disabled\");\r\n        }\r\n\r\n        SessionTimer.intervalDisplay.innerText = SessionTimer.intervals[SessionTimer.intervalIndex].toString();\r\n    }\r\n\r\n    public static callbackFnc(response: any): void {\r\n        SessionTimer.dialog.classList.remove(\"sessionTimer\");\r\n        BaseModel.spinContinue();\r\n    }\r\n\r\n    public static prepareData(response: IErrorResponse): any {\r\n        return {\r\n            messages: [\r\n                {\r\n                    text: response.message,\r\n                    actions: [\r\n                        {\r\n                            type: \"continue\",\r\n                            text: Languages.getRid(\"CONTINUE\"),\r\n                        },\r\n                        {\r\n                            type: \"exit\",\r\n                            text: Languages.getRid(\"CLOSE\"),\r\n                        },\r\n                    ],\r\n                    intervals: response.intervals,\r\n                },\r\n            ],\r\n        };\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Platforms/Playtech/SessionTimer.ts\n **/","import { Communication } from \"neo-games\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { MessageManager } from \"../Managers/MessageManager\";\r\n\r\ntype InitResponse = Communication.Game.InitResponse;\r\n\r\nexport class SplashScreen {\r\n    //******************************************************************************************************************\r\n    //  SETTINGS\r\n    //******************************************************************************************************************\r\n\r\n    private static readonly AutoCloseDelay: number = 15; //in seconds\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private static suspendInit: boolean = false;\r\n\r\n    private static instance: SplashScreen = null;\r\n\r\n    private _htmlInstance: Object;\r\n\r\n    private _initResponse: InitResponse;\r\n\r\n    private _autoCloseTimerFinished: boolean;\r\n\r\n    private _continueEnabled: boolean;\r\n\r\n    private _timer: any;\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE & INIT\r\n    //******************************************************************************************************************\r\n\r\n    constructor(htmlInstance: Object) {\r\n        if (htmlInstance != null) {\r\n            this._htmlInstance = {};\r\n            this._htmlInstance[\"instance\"] = htmlInstance;\r\n\r\n            SplashScreen.suspendInit = true;\r\n\r\n            this._autoCloseTimerFinished = false;\r\n            this._continueEnabled = false;\r\n\r\n            this._timer = setTimeout(() => {\r\n                this.autoCloseTimer();\r\n            }, SplashScreen.AutoCloseDelay * 1000);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  LOAD (INIT) COMPLETED\r\n    //******************************************************************************************************************\r\n\r\n    public onInitReceived(initResponse: InitResponse): void {\r\n        this._initResponse = initResponse;\r\n\r\n        //if gameround closed, then show Continue btn, else call onContinue to hide splashscreen\r\n        if (this._initResponse.status != null && this._initResponse.status == Communication.Game.GameStatus.Closed) {\r\n            this.showContinueButton();\r\n        } else {\r\n            this.showGame();\r\n        }\r\n    }\r\n\r\n    private autoCloseTimer(): void {\r\n        this._autoCloseTimerFinished = true;\r\n\r\n        if (this._continueEnabled) {\r\n            this.showGame();\r\n        }\r\n    }\r\n\r\n    private showContinueButton(): void {\r\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n            this._continueEnabled = true;\r\n\r\n            if (this._autoCloseTimerFinished) {\r\n                this.showGame();\r\n            } else {\r\n                this._htmlInstance[\"instance\"].showContinueButton(this.showGame.bind(this));\r\n            }\r\n        }\r\n    }\r\n\r\n    private showGame(): void {\r\n        clearTimeout(this._timer);\r\n        SplashScreen.suspendInit = false;\r\n        MessageManager.postpone(GameManager.continueInitReceived, this._initResponse);\r\n    }\r\n\r\n    public hideSplashScreen(): void {\r\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n            this._htmlInstance[\"instance\"].hideSplashScreen();\r\n            this._htmlInstance = null;\r\n        }\r\n    }\r\n\r\n    public showError(): void {\r\n        if (this._htmlInstance != null && this._htmlInstance[\"instance\"] != null) {\r\n            this._htmlInstance[\"instance\"].showError();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PUBLIC HANDLERS\r\n    //******************************************************************************************************************\r\n\r\n    public static createSplashScreen(htmlInstance: Object): void {\r\n        if (SplashScreen.instance == null) {\r\n            SplashScreen.instance = new SplashScreen(htmlInstance);\r\n        }\r\n    }\r\n\r\n    public static hideSplashScreen(): void {\r\n        if (SplashScreen.instance != null) {\r\n            SplashScreen.instance.hideSplashScreen();\r\n            SplashScreen.instance = null;\r\n        }\r\n    }\r\n\r\n    public static suspendInitReceived(initResponse: InitResponse): boolean {\r\n        if (SplashScreen.suspendInit && SplashScreen.instance != null) {\r\n            SplashScreen.instance.onInitReceived(initResponse);\r\n            return true;\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static showError(): void {\r\n        if (SplashScreen.instance != null) {\r\n            SplashScreen.instance.showError();\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/SplashScreen.ts\n **/","import { Utils, StringUtils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { TweenLite, TweenMax } from \"gsap\";\r\nimport { GsapEffects } from \"../../../Components/Effects/GsapEffects\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { CustomEase } from \"../../../Components/Effects/CustomEase\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { Jackpot } from \"../Bonuses/Jackpot\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { IProgressiveBonusLevel } from \"neo-games/Engine/Communication/Game/Types/IProgressiveBonusLevel\";\r\nimport { BalanceManager } from \"../../../Managers/BalanceManager\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { FrameTimerPool } from \"../../../Utils/FrameTimerPool\";\r\nimport { StageController } from \"../../../Components/StageController\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { AmbientBackground } from \"../../../Utils/AmbientBackground\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { MessageManager } from \"../../../Managers/MessageManager\";\r\nimport { JackpotData } from \"../Datas/JackpotData\";\r\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\ntype MaxPowerBonusInitResponse = Communication.Game.MaxPowerBonusInitResponse;\r\ntype MaxPowerBonusSpinResponse = Communication.Game.MaxPowerBonusSpinResponse;\r\n\r\nexport class JackpotGame {\r\n    //******************************************************************************************************************\r\n    //  SEETTINGS\r\n    //******************************************************************************************************************\r\n\r\n    private static readonly Strip: Array<number> = [\r\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,\r\n        1, 1, 3, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 4,\r\n    ];\r\n\r\n    private static readonly SymbolsCount: number = 4;\r\n\r\n    private static readonly BuzzerDuration: number = 180; //in frames\r\n\r\n    private static readonly SpinRollSpeed: number = 8; //lower number is faster\r\n\r\n    private static readonly MinSpinDuration: number = 360; //in frames\r\n\r\n    private static readonly MiddleSymbolIndex: number = 1;\r\n\r\n    private static readonly SpinPreRollDuration: number = 120;\r\n\r\n    private static readonly SpinPreRollSymbolCount: number = 8;\r\n\r\n    private static readonly SpinPostRollDuration: number = 360;\r\n\r\n    private static readonly SpinPostRollSymbolCount: number = 12;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected ticket: { id: string };\r\n\r\n    protected gameInitialized: boolean;\r\n\r\n    protected gameStarted: boolean;\r\n\r\n    protected autostart: boolean;\r\n\r\n    protected callback: () => void;\r\n\r\n    protected holder: HTMLElement;\r\n\r\n    protected root: HTMLElement;\r\n\r\n    protected reel: HTMLElement;\r\n\r\n    protected spinBtn: HTMLElement;\r\n\r\n    protected winContainer: HTMLElement;\r\n\r\n    protected gameData: MaxPowerBonusSpinResponse;\r\n\r\n    protected lastEvent: () => void;\r\n\r\n    protected stoppedFromMachine: boolean;\r\n\r\n    protected stoppedFromServer: boolean;\r\n\r\n    protected stopTimer: FrameTimerEventEmitter;\r\n\r\n    protected isStopping: boolean;\r\n\r\n    protected currentSymbols: Array<HTMLElement>;\r\n\r\n    protected currentSymbolsHeight: Array<number>;\r\n\r\n    protected symbolStepOffsets: Array<number>;\r\n\r\n    protected symbolsHeight: Array<number>;\r\n\r\n    protected stripIndex: number;\r\n\r\n    protected rootHeight: number;\r\n\r\n    protected currentOffset: number;\r\n\r\n    protected showHandPayDialog: boolean;\r\n\r\n    protected buzzerTimer: FrameTimerEventEmitter;\r\n\r\n    protected showWinDelay: FrameTimerEventEmitter;\r\n\r\n    protected assetsLoaded: boolean;\r\n\r\n    protected startAfterLoad: boolean;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(holder: HTMLElement) {\r\n        this.holder = holder;\r\n\r\n        this.root = this.createBaseLayout();\r\n        this.holder.appendChild(this.root);\r\n\r\n        let intro = this.createAnimations();\r\n        this.holder.appendChild(intro);\r\n\r\n        this.stopTimer = CreateFrameTimer(\"MiniGameSpinStop\");\r\n        this.stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\r\n        this.buzzerTimer = CreateFrameTimer(\"BuzzerTimer\");\r\n        this.buzzerTimer.on(FrameTimerEvents.Complete, this.buzzerTimeFinished.bind(this));\r\n\r\n        this.showWinDelay = CreateFrameTimer(\"BuzzerTimer\");\r\n        this.showWinDelay.on(FrameTimerEvents.Complete, this.updateWin.bind(this));\r\n\r\n        this.gameInitialized = false;\r\n        this.gameStarted = false;\r\n        this.autostart = false;\r\n        this.showHandPayDialog = false;\r\n        this.assetsLoaded = false;\r\n        this.startAfterLoad = false;\r\n\r\n        // CustomEase.create(\"miniGameSpinStopEase\", \"M0,0,C0,0,0.09,0.494,0.652,0.862,0.844,0.987,1,1,1,1\");\r\n        CustomEase.create(\r\n            \"miniGameSpinStopEase\",\r\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\",\r\n        );\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE\r\n    //******************************************************************************************************************\r\n\r\n    protected createBaseLayout(): HTMLElement {\r\n        let root = this.createElement(\"div\", \"jackpotGame\");\r\n\r\n        this.reel = this.createElement(\"div\", \"jackpotReel\", root);\r\n\r\n        this.createElement(\"div\", \"jackpotTextOverlay\", root);\r\n\r\n        let hintContainer = this.createElement(\"div\", \"jackpotStartHint\", root);\r\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n        this.createTextElement(\"div\", \"jackpotStartHintText\", Languages.getRid(\"PB_MINIGAME_SPINSTART\"), hintContainer);\r\n\r\n        this.createElement(\"div\", \"jackpotFrameLeft\", root);\r\n        this.createElement(\"div\", \"jackpotFrameRight\", root);\r\n        this.createElement(\"div\", \"jackpotGlowLeft\", root);\r\n        this.createElement(\"div\", \"jackpotGlowRight\", root);\r\n\r\n        let arrows = this.createElement(\"div\", \"jackpotArrows\", root);\r\n        let arrow = this.createElement(\"div\", \"jackpotArrowLeft\", arrows);\r\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n        arrow = this.createElement(\"div\", \"jackpotArrowRight\", arrows);\r\n        this.createElement(\"div\", \"jackpotArrowBlur\", arrow);\r\n\r\n        this.createTextElement(\"div\", \"jackpotGameName\", document.getElementById(\"gameTitle\").innerHTML, root);\r\n\r\n        return root;\r\n    }\r\n\r\n    protected createAnimations(): HTMLElement {\r\n        let intro = this.createElement(\"div\", \"jackpotIntro\");\r\n\r\n        for (let i = 0; i < 5; i++) {\r\n            let firework = this.createElement(\"div\", \"jackpotFireworks\", intro);\r\n            for (let j = 0; j < 8; j++) {\r\n                this.createElement(\"div\", \"fireworksPart\", firework);\r\n            }\r\n        }\r\n\r\n        let titles = this.createElement(\"div\", \"jackpotTitles\", intro);\r\n        let _self = this;\r\n\r\n        document.body.classList.add(\"jpt-loading\");\r\n\r\n        //dynamic content loader\r\n        Promise.all<Array<string>>([\r\n            this.getCustomContent(\"jackpotTextSynot\", \".png\"),\r\n            this.getCustomContent(\"jackpotTextProgressive\", \".png\"),\r\n            this.getCustomContent(\"jackpotTextBonus\", \".png\"),\r\n        ]).then((values: Array<Array<string>>) => {\r\n            for (let i = 0; i < values.length; i++) {\r\n                let elem = _self.createElement(\"div\", values[i][0], titles);\r\n\r\n                if (values[i][1] != \"\") {\r\n                    elem.style.background = `url(${values[i][1]}) no-repeat`;\r\n                }\r\n            }\r\n\r\n            document.body.classList.remove(\"jpt-loading\");\r\n            _self.assetsLoaded = true;\r\n            if (_self.startAfterLoad) {\r\n                _self.intro();\r\n            }\r\n        });\r\n\r\n        this.createElement(\"div\", \"jackpotTextOverlay\", intro);\r\n        this.winContainer = this.createElement(\"div\", \"jackpotWinValue\", intro);\r\n\r\n        return intro;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HANDLE GAME\r\n    //******************************************************************************************************************\r\n\r\n    public init(autostart: boolean, callback: () => void): void {\r\n        if (this.ticket == null && GameManager.gameResponse && GameManager.gameResponse[\"progressiveBonus\"].ticket) {\r\n            this.ticket = GameManager.gameResponse[\"progressiveBonus\"].ticket;\r\n\r\n            this.gameInitialized = false;\r\n            this.autostart = autostart;\r\n            this.callback = callback;\r\n            this.initSymbols();\r\n            this.createSymbols();\r\n            this.sendInitBonusGameRequest();\r\n        }\r\n    }\r\n\r\n    private initFinished(): void {\r\n        this.gameInitialized = true;\r\n\r\n        if (this.autostart) {\r\n            if (this.callback != null) {\r\n                this.callback();\r\n            }\r\n\r\n            this.intro();\r\n        }\r\n    }\r\n\r\n    public start(): void {\r\n        if (!this.autostart) {\r\n            this.intro();\r\n        }\r\n    }\r\n\r\n    private startGame(): void {\r\n        //close all opened dialogs\r\n        HtmlController.dispatchAction(\"\");\r\n\r\n        Jackpot.refreshBonusInfoBeforeSpin(this.sendSpinBonusGameRequest.bind(this));\r\n        this.spinStart();\r\n    }\r\n\r\n    private spinStop(fromMachine: boolean = true, fromServer: boolean = false): void {\r\n        if (fromMachine) {\r\n            this.stoppedFromMachine = true;\r\n        }\r\n\r\n        if (fromServer) {\r\n            this.stoppedFromServer = true;\r\n        }\r\n\r\n        if (this.stoppedFromMachine && this.stoppedFromServer) {\r\n            this.isStopping = true;\r\n        }\r\n    }\r\n\r\n    private closeMiniGame(): void {\r\n        if (this.callback != null && this.autostart) {\r\n            this.callback();\r\n        }\r\n\r\n        this.outroFinished(false);\r\n    }\r\n\r\n    private setBaseGameSound(enable: boolean): void {\r\n        ModuleManager.toggleModuleSounds(GameModules.Base, enable);\r\n    }\r\n\r\n    public hasInitializedGame(): boolean {\r\n        return this.gameInitialized;\r\n    }\r\n\r\n    public hasStartedGame(): boolean {\r\n        return this.gameStarted;\r\n    }\r\n\r\n    public disableAutostart(): void {\r\n        this.autostart = false;\r\n\r\n        //clear response to allow realitycheck on spin\r\n        this.clearJackpotGameResponse();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CLEAR\r\n    //******************************************************************************************************************\r\n\r\n    private clearJackpotGame(): void {\r\n        if (this.holder) {\r\n            this.holder.classList.remove(\"outro\");\r\n            this.holder.classList.add(\"_hidden\");\r\n            this.holder.className = \"jackpotGameHolder _hidden\";\r\n        }\r\n\r\n        if (this.root) {\r\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n        }\r\n\r\n        if (this.reel) {\r\n            this.reel.innerHTML = \"\";\r\n\r\n            this.currentOffset = 0;\r\n            this.setTransformY(this.reel, this.currentOffset);\r\n            this.currentSymbols = [];\r\n            this.currentSymbolsHeight = [];\r\n        }\r\n\r\n        if (this.winContainer) {\r\n            this.winContainer.style.transform = \"scale(0)\";\r\n            this.winContainer.innerHTML = \"\";\r\n\r\n            this.winContainer.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n            this.winContainer.removeEventListener(\"animationend\", this.lastEvent);\r\n        }\r\n\r\n        this.ticket = null;\r\n    }\r\n\r\n    private clearJackpotGameResponse(): void {\r\n        if (GameManager.gameResponse[\"progressiveBonus\"]) {\r\n            GameManager.gameResponse[\"progressiveBonus\"] = null;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REQUESTS & RESPONSE\r\n    //******************************************************************************************************************\r\n\r\n    private sendInitBonusGameRequest(): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient\r\n                .sendMaxPowerBonusInitRequest(this.ticket)\r\n                .then((response: MaxPowerBonusInitResponse) => {\r\n                    if (response != null && response.status == \"Active\") {\r\n                        this.initFinished();\r\n                    } else {\r\n                        this.closeMiniGame();\r\n                    }\r\n                });\r\n        }\r\n    }\r\n\r\n    private sendSpinBonusGameRequest(): void {\r\n        if (GameManager.gameClient) {\r\n            GameManager.gameClient\r\n                .sendMaxPowerBonusSpinRequest(this.ticket)\r\n                .then((response: MaxPowerBonusSpinResponse) => {\r\n                    this.setGameData(response);\r\n                });\r\n        }\r\n    }\r\n\r\n    private setGameData(response: MaxPowerBonusSpinResponse): void {\r\n        if (response != null) {\r\n            this.gameData = response;\r\n            this.spinStop(false, true);\r\n\r\n            if (AppContext != null && AppContext.gameConfiguration.GameRoundIdVisible) {\r\n                HtmlController.updateDataElement(GameData.DataRoundId, this.ticket.id);\r\n            }\r\n        } else {\r\n            Jackpot.showError();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INTRO & OUTRO\r\n    //******************************************************************************************************************\r\n\r\n    private intro(): void {\r\n        if (!this.assetsLoaded) {\r\n            this.startAfterLoad = true;\r\n            return;\r\n        }\r\n        if (!this.gameStarted) {\r\n            this.gameStarted = true;\r\n\r\n            PlayList.loop(\"SND_JackpotBuzzer\");\r\n            this.bounceCounters(true);\r\n\r\n            this.buzzerTimer.stop();\r\n            this.buzzerTimer.start(JackpotGame.BuzzerDuration);\r\n\r\n            //intro calls preparenewgameround before baseview intro\r\n            //timeout will call method after baseview intro\r\n            setTimeout(() => {\r\n                this.setBaseGameSound(false);\r\n            }, 1);\r\n        }\r\n    }\r\n\r\n    private buzzerTimeFinished(): void {\r\n        this.buzzerTimer.stop();\r\n        this.bounceCounters(false);\r\n        PlayList.stop(\"SND_JackpotBuzzer\");\r\n        LimitDialog.closeDialog();\r\n        DataManager.GameLimit = false; //avoid restoregameround open limit dialog again\r\n\r\n        if (this.holder) {\r\n            this.lastEvent = this.introFinished.bind(this);\r\n            this.root.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n            this.root.addEventListener(\"animationend\", this.lastEvent);\r\n\r\n            AmbientBackground.changeAmbientBackground(\"jackpotBg\", 1000, 5500);\r\n\r\n            PlayList.play(\"SND_JackpotIntroHit\");\r\n            PlayList.loop(\"SND_JackpotIntroWaitingLoop\", 360);\r\n\r\n            this.holder.classList.remove(\"_hidden\");\r\n            void this.holder.offsetWidth;\r\n            this.holder.classList.add(\"start\");\r\n        }\r\n    }\r\n\r\n    private introFinished(): void {\r\n        if (this.holder) {\r\n            this.root.removeEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n            this.root.removeEventListener(\"animationend\", this.lastEvent);\r\n\r\n            PlayList.stop(\"SND_JackpotIntroHit\");\r\n            this.holder.classList.add(\"startFinished\");\r\n            document.body.classList.add(\"spbStartFinished\");\r\n\r\n            this.setStageVisibility(false);\r\n            this.createSpinBtn();\r\n        }\r\n    }\r\n\r\n    private outro(): void {\r\n        this.setStageVisibility(true);\r\n\r\n        this.holder.classList.remove(\"spin\");\r\n        void this.holder.offsetWidth;\r\n        this.holder.classList.add(\"outro\");\r\n\r\n        AmbientBackground.changeAmbientBackground(\"base\", 2000, 8000);\r\n\r\n        //fire end event after winvalue animation end\r\n        this.lastEvent = this.outroFinished.bind(this);\r\n        this.winContainer.addEventListener(\"webkitAnimationEnd\", this.lastEvent);\r\n        this.winContainer.addEventListener(\"animationend\", this.lastEvent);\r\n    }\r\n\r\n    private outroFinished(collect: boolean = true): void {\r\n        if (collect) {\r\n            this.updateBalance();\r\n        }\r\n\r\n        this.clearJackpotGame();\r\n        this.clearJackpotGameResponse();\r\n\r\n        this.setBaseGameSound(true);\r\n\r\n        BalanceManager.refreshBalance();\r\n\r\n        if (this.showHandPayDialog) {\r\n            this.openHandPayDialog();\r\n        } else {\r\n            this.restoreGameRound(collect);\r\n        }\r\n\r\n        this.autostart = false;\r\n    }\r\n\r\n    private updateBalance(): void {\r\n        if (this.gameData != null) {\r\n            if (this.gameData.balance != null) {\r\n                this.showHandPayDialog = false;\r\n                BalanceManager.balanceReceived(this.gameData.balance);\r\n                PlayList.play(\"SND_BaseCollect\");\r\n\r\n                if (this.gameData.game != null && this.gameData.game.win != null) {\r\n                    DataManager.updateTotalGain(false, this.gameData.game.win.amount);\r\n                }\r\n\r\n                if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n                    this.updateWin(false, \"0\");\r\n                }\r\n            } else {\r\n                this.showHandPayDialog = true;\r\n            }\r\n        }\r\n    }\r\n\r\n    private restoreGameRound(collect: boolean = true): void {\r\n        this.gameInitialized = false;\r\n        this.gameStarted = false;\r\n        this.showHandPayDialog = false;\r\n        ModuleManager.restoreGameRound(GameModules.Base, collect);\r\n    }\r\n\r\n    private openHandPayDialog(): void {\r\n        let response = {\r\n            messages: [\r\n                {\r\n                    text: Languages.getRid(\r\n                        \"HANDPAY_DIALOG\",\r\n                        Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString()) +\r\n                            \" \" +\r\n                            DataManager.getDataById(GameData.DataCurrency),\r\n                    ),\r\n                },\r\n            ],\r\n        };\r\n        MessageManager.postpone(this.restoreGameRound.bind(this), response);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SHOW & UPDATE SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    private initSymbols(): void {\r\n        if (this.reel) {\r\n            this.currentSymbols = [];\r\n            this.currentSymbolsHeight = [];\r\n            // this.stripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\r\n            this.stripIndex = (JackpotGame.Strip.indexOf(4) + 2 + JackpotGame.Strip.length) % JackpotGame.Strip.length; //start with diamond symbols\r\n\r\n            //get rootHeight\r\n            if (!this.rootHeight) {\r\n                this.rootHeight = this.getElementHeight(this.root);\r\n            }\r\n\r\n            let symbolId: number;\r\n\r\n            //getSymbolsHeight\r\n            this.symbolsHeight = [];\r\n            for (let i = 0; i < JackpotGame.SymbolsCount; i++) {\r\n                symbolId = i + 1;\r\n                let symbol = this.createElement(\"div\", \"jackpotSymbol l-\" + symbolId, this.reel);\r\n                this.symbolsHeight.push(this.getElementHeight(symbol));\r\n\r\n                this.reel.removeChild(symbol);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createSymbols(): void {\r\n        if (this.reel) {\r\n            //add start symbols queue\r\n            let symbolId: number;\r\n            for (let i = 0; i < JackpotGame.SpinPreRollSymbolCount; i++) {\r\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n                symbolId = JackpotGame.Strip[this.stripIndex];\r\n                this.addSymbolToReel(symbolId, false, i > 3);\r\n            }\r\n\r\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n            this.setTransformY(this.reel, this.currentOffset);\r\n        }\r\n    }\r\n\r\n    private updateSymbols(): void {\r\n        //clear number of elements to 3\r\n        while (this.currentSymbols.length > 3) {\r\n            this.currentSymbolsHeight.pop();\r\n            let symbol = this.currentSymbols.pop();\r\n            this.reel.removeChild(symbol);\r\n        }\r\n\r\n        if (this.isStopping) {\r\n            this.updatePostRollSymbols();\r\n        } else {\r\n            this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n            let symbolId = JackpotGame.Strip[this.stripIndex];\r\n            this.addSymbolToReel(symbolId, false, true);\r\n\r\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n            this.setTransformY(this.reel, this.currentOffset);\r\n\r\n            this.spinRoll();\r\n        }\r\n    }\r\n\r\n    private updatePostRollSymbols(): void {\r\n        //get finish strip index\r\n        if (this.gameData != null) {\r\n            let winSymbolId = this.gameData.game.symbols[JackpotGame.MiddleSymbolIndex];\r\n            let finishStripIndex = Math.floor(Math.random() * JackpotGame.Strip.length);\r\n\r\n            //check if finished symbol is our win symbol, if not try next\r\n            while (JackpotGame.Strip[finishStripIndex] != winSymbolId) {\r\n                finishStripIndex = (finishStripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n            }\r\n\r\n            //set new strip index to finishStripIndex + postroll symbols - 1\r\n            this.stripIndex =\r\n                (finishStripIndex + (JackpotGame.SpinPostRollSymbolCount - 2) + JackpotGame.Strip.length) %\r\n                JackpotGame.Strip.length;\r\n\r\n            for (let i = 0; i < JackpotGame.SpinPostRollSymbolCount; i++) {\r\n                this.stripIndex = (this.stripIndex - 1 + JackpotGame.Strip.length) % JackpotGame.Strip.length;\r\n                let symbolId = JackpotGame.Strip[this.stripIndex];\r\n                this.addSymbolToReel(symbolId, i == JackpotGame.SpinPostRollSymbolCount - 3, i < 8);\r\n            }\r\n\r\n            this.currentOffset = this.getReelOffset(this.currentSymbols.length - 2);\r\n            this.setTransformY(this.reel, this.currentOffset);\r\n\r\n            this.spinPostRoll();\r\n        }\r\n    }\r\n\r\n    private removeOffScreenSymbols(): void {\r\n        //clear number of elements to 3\r\n        while (this.currentSymbols.length > 4) {\r\n            this.currentSymbolsHeight.pop();\r\n            let symbol = this.currentSymbols.pop();\r\n            this.reel.removeChild(symbol);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN\r\n    //******************************************************************************************************************\r\n\r\n    private spinStart(): void {\r\n        //remove spin btn\r\n        if (this.spinBtn) {\r\n            this.spinBtn.parentElement.removeChild(this.spinBtn);\r\n        }\r\n\r\n        document.removeEventListener(\"keyup\", this.lastEvent);\r\n\r\n        this.updateWin(false, \"0\");\r\n\r\n        PlayList.stop(\"SND_JackpotIntroWaitingLoop\");\r\n        PlayList.play(\"SND_JackpotStartHit\");\r\n        PlayList.play(\"SND_JackpotWheelMusic\");\r\n\r\n        this.stoppedFromMachine = false;\r\n        this.stoppedFromServer = false;\r\n\r\n        if (this.holder) {\r\n            this.holder.classList.remove(\"start\");\r\n            this.holder.classList.remove(\"startFinished\");\r\n            document.body.classList.remove(\"spbStartFinished\");\r\n\r\n            this.holder.classList.add(\"spin\");\r\n        }\r\n\r\n        this.isStopping = false;\r\n        this.stopTimer.start(JackpotGame.MinSpinDuration);\r\n        this.spinPreRoll();\r\n    }\r\n\r\n    private spinPreRoll(): void {\r\n        let nextOffset = this.getReelOffset(1);\r\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n        this.animate(\r\n            this.currentOffset,\r\n            nextOffset,\r\n            this.updateSymbols,\r\n            JackpotGame.SpinPreRollDuration,\r\n            \"Power2.easeIn\",\r\n            0,\r\n            <() => void>this.onSpinPostRollUpdate,\r\n        );\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ROLL\r\n    //******************************************************************************************************************\r\n\r\n    private spinRoll(): void {\r\n        let nextOffset = this.getReelOffset(1);\r\n        let duration = this.getSpinRollDuration(nextOffset);\r\n\r\n        this.symbolStepOffsets = this.getSymbolStepOffsets(1);\r\n        this.animate(\r\n            this.currentOffset,\r\n            nextOffset,\r\n            this.updateSymbols,\r\n            duration,\r\n            \"linear\",\r\n            0,\r\n            <() => void>this.onSpinPostRollUpdate,\r\n        );\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  POST ROLL\r\n    //******************************************************************************************************************\r\n\r\n    private spinPostRoll(): void {\r\n        Jackpot.refreshBonusInfoInMiniGame(this.createLevelDataOverride(false));\r\n\r\n        let nextOffset = this.getReelOffset(2);\r\n        this.symbolStepOffsets = this.getSymbolStepOffsets(2);\r\n        this.animate(\r\n            this.currentOffset,\r\n            nextOffset,\r\n            this.spinComplete,\r\n            JackpotGame.SpinPostRollDuration,\r\n            \"miniGameSpinStopEase\",\r\n            0,\r\n            <() => void>this.onSpinPostRollUpdate,\r\n        );\r\n    }\r\n\r\n    private onSpinPostRollUpdate(tween: TweenMax): void {\r\n        if (this.symbolStepOffsets.length > 0) {\r\n            if (tween.target._gsTransform.y > this.symbolStepOffsets[0]) {\r\n                PlayList.play(\"SND_JackpotWheelClick1\");\r\n\r\n                if (this.holder) {\r\n                    this.holder.classList.remove(\"hit\");\r\n                    this.holder.offsetWidth;\r\n                    this.holder.classList.add(\"hit\");\r\n                }\r\n\r\n                this.symbolStepOffsets.shift();\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  COMPLETE\r\n    //******************************************************************************************************************\r\n\r\n    private spinComplete(): void {\r\n        //close all opened dialogs\r\n        HtmlController.dispatchAction(\"\");\r\n\r\n        if (this.gameData != null) {\r\n            this.showWinDelay.start(135);\r\n\r\n            if (this.gameData.game.limit) {\r\n                LimitDialog.openDialog();\r\n            }\r\n        }\r\n\r\n        this.removeOffScreenSymbols();\r\n        Jackpot.refreshBonusInfoWithWinValue(this.createLevelDataOverride(true));\r\n        let isHigh = this.createWinValue();\r\n        PlayList.stop(\"SND_JackpotWheelMusic\", 30);\r\n        PlayList.play(\"SND_JackpotWinMusic\");\r\n\r\n        this.outro();\r\n    }\r\n\r\n    private updateWin(collected: boolean, value: string = \"\"): void {\r\n        this.showWinDelay.stop();\r\n        let uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n        let collectedWin = document.getElementById(\"collectedWin\");\r\n\r\n        if (uncollectedWin != null && collectedWin != null) {\r\n            if (!StringUtils.isNullOrEmpty(value)) {\r\n                HtmlController.updateDataElement(GameData.DataTotalWin, value);\r\n            } else {\r\n                HtmlController.updateDataElement(GameData.DataTotalWin, this.gameData.game.win.amount.toString());\r\n            }\r\n\r\n            if (collected) {\r\n                uncollectedWin.classList.add(\"_hidden\");\r\n                collectedWin.classList.remove(\"_hidden\");\r\n            } else {\r\n                uncollectedWin.classList.remove(\"_hidden\");\r\n                collectedWin.classList.add(\"_hidden\");\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN ANIMATION\r\n    //******************************************************************************************************************\r\n\r\n    private animate(\r\n        currentOffset: number,\r\n        newOffset: number,\r\n        callback: () => void,\r\n        duration: number,\r\n        ease: string = \"linear\",\r\n        delay: number = 0,\r\n        updateCallback: () => void = null,\r\n    ): void {\r\n        duration = duration * GsapEffects.TickTime;\r\n        delay = delay * GsapEffects.TickTime;\r\n\r\n        TweenMax.killTweensOf(this.reel);\r\n        let tween = TweenMax.fromTo(\r\n            this.reel,\r\n            duration,\r\n            { y: currentOffset, roundProps: \"y\" },\r\n            { y: newOffset, ease: ease, delay: delay, roundProps: \"y\" },\r\n        );\r\n\r\n        this.currentOffset = newOffset;\r\n\r\n        if (!Utils.isNullOrUndefined(callback)) {\r\n            tween.eventCallback(\"onComplete\", callback, [], this);\r\n        }\r\n\r\n        if (!Utils.isNullOrUndefined(updateCallback)) {\r\n            tween.eventCallback(\"onUpdate\", updateCallback, [\"{self}\"], this);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  WIN COUNTER\r\n    //******************************************************************************************************************\r\n\r\n    public createWinValue(): boolean {\r\n        if (this.gameData != null) {\r\n            let winValue = Languages.formatText(Languages.FormatMoney, this.gameData.game.win.amount.toString());\r\n\r\n            if (this.winContainer) {\r\n                let childs = this.winContainer.children;\r\n\r\n                for (let i = 0; i < winValue.length; i++) {\r\n                    if (!childs[i]) {\r\n                        this.createElement(\"div\", \"n\" + winValue.charCodeAt(i).toString(), this.winContainer);\r\n                    } else {\r\n                        childs[i].className = \"n\" + winValue.charCodeAt(i).toString();\r\n                    }\r\n                }\r\n            }\r\n\r\n            return this.gameData.game.win.level == \"Gold\" || this.gameData.game.win.level == \"Diamond\";\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HELPER\r\n    //******************************************************************************************************************\r\n\r\n    public getRoot(): HTMLElement {\r\n        return this.root;\r\n    }\r\n\r\n    private getElementHeight(elem: HTMLElement): number {\r\n        return parseInt(window.getComputedStyle(elem).height);\r\n    }\r\n\r\n    private getSpinRollDuration(newOffset: number): number {\r\n        let diff = Math.abs(this.currentOffset - newOffset);\r\n        return Math.round((diff / this.symbolsHeight[0]) * JackpotGame.SpinRollSpeed);\r\n    }\r\n\r\n    private getReelOffset(middleSymbolIndex: number): number {\r\n        let offset = Math.round(this.rootHeight * 0.5);\r\n\r\n        if (this.currentSymbols.length > 0) {\r\n            for (let i = 0; i < middleSymbolIndex; i++) {\r\n                offset -= this.currentSymbolsHeight[i];\r\n            }\r\n\r\n            offset -= Math.round(this.currentSymbolsHeight[middleSymbolIndex] * 0.5);\r\n        }\r\n\r\n        return offset;\r\n    }\r\n\r\n    private getSymbolStepOffsets(middleSymbolIndex: number): Array<number> {\r\n        let offset = this.currentOffset;\r\n        let result: Array<number> = [];\r\n\r\n        if (this.currentSymbols.length > 2) {\r\n            offset += this.currentSymbolsHeight[this.currentSymbols.length - 2] * 0.5;\r\n            result.push(offset);\r\n\r\n            for (let i = this.currentSymbolsHeight.length - 3; i > middleSymbolIndex; i--) {\r\n                offset += this.currentSymbolsHeight[i + (1 - middleSymbolIndex)]; //ToDo solve for higher middleSymbolIndex than 1\r\n                result.push(offset);\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private createElement(\r\n        tag: string,\r\n        className: string,\r\n        rootElem?: HTMLElement,\r\n        appendBefore: HTMLElement = null,\r\n    ): HTMLElement {\r\n        let elem = document.createElement(tag);\r\n        elem.setAttribute(\"class\", className);\r\n\r\n        if (rootElem != null) {\r\n            if (appendBefore != null) {\r\n                rootElem.insertBefore(elem, appendBefore);\r\n            } else {\r\n                rootElem.appendChild(elem);\r\n            }\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    private createSymbol(\r\n        tag: string,\r\n        className: string,\r\n        rootElem?: HTMLElement,\r\n        appendBefore: HTMLElement = null,\r\n    ): HTMLElement {\r\n        let elem = document.createElement(tag);\r\n        elem.setAttribute(\"class\", className);\r\n\r\n        let symbolHolder = document.createElement(tag);\r\n        symbolHolder.className = \"jackpotSymbolHolder\";\r\n        elem.appendChild(symbolHolder);\r\n\r\n        if (rootElem != null) {\r\n            if (appendBefore != null) {\r\n                rootElem.insertBefore(elem, appendBefore);\r\n            } else {\r\n                rootElem.appendChild(elem);\r\n            }\r\n        }\r\n\r\n        return elem;\r\n    }\r\n\r\n    //ToDo prerobit na resource ID\r\n    private createTextElement(tag: string, className: string, text: string, rootElem?: HTMLElement): HTMLElement {\r\n        let elem = this.createElement(tag, className, rootElem);\r\n        elem.innerHTML = text;\r\n\r\n        return elem;\r\n    }\r\n\r\n    private createSpinBtn(): void {\r\n        let userControls = document.getElementById(\"userControls\");\r\n        if (userControls) {\r\n            let spinBtn = userControls.getElementsByClassName(\"spinBtn\")[0];\r\n            if (spinBtn) {\r\n                let parent = spinBtn.parentElement;\r\n                this.spinBtn = this.createElement(\"div\", \"btn spinBtn\", parent);\r\n                this.spinBtn.innerHTML = spinBtn.innerHTML;\r\n                this.spinBtn.addEventListener(\"click\", this.startGame.bind(this));\r\n\r\n                this.lastEvent = this.handleSpaceStart.bind(this);\r\n                document.addEventListener(\"keyup\", this.lastEvent);\r\n            }\r\n        }\r\n    }\r\n\r\n    private createLevelDataOverride(winData: boolean): IProgressiveBonusLevel {\r\n        let result = {} as IProgressiveBonusLevel;\r\n\r\n        if (this.gameData != null) {\r\n            result.code = this.gameData.game.win.level;\r\n\r\n            //to always show minigame win value in counter\r\n            if (winData) {\r\n                result.lastWinAmount = this.gameData.game.win.amount;\r\n            } else {\r\n                result.nextValue = this.gameData.game.win.amount;\r\n                result.nextTimestamp = new Date(new Date().getTime() + 8000).toISOString();\r\n                result.previousValue = this.gameData.game.win.amount;\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    private setTransformY(elem: HTMLElement, y: number): void {\r\n        elem.style.transform = \"translate3d(0, \" + y + \"px, 0)\";\r\n    }\r\n\r\n    private setStageVisibility(visible: boolean): void {\r\n        if (StageController.Renderer != null && StageController.Renderer._lastObjectRendered) {\r\n            StageController.Renderer._lastObjectRendered.visible = visible;\r\n        }\r\n    }\r\n\r\n    private handleSpaceStart(event: KeyboardEvent): void {\r\n        if (event.keyCode == 32) {\r\n            this.startGame();\r\n        }\r\n    }\r\n\r\n    private addSymbolToReel(symbolId: number, winSymbol: boolean = false, blured: boolean = false): void {\r\n        let className = \"jackpotSymbol l-\" + symbolId;\r\n\r\n        if (winSymbol) {\r\n            className += \" jackpotWinSymbol\";\r\n            this.holder.classList.add(\"win-\" + symbolId);\r\n        }\r\n\r\n        if (blured) {\r\n            className += \" blur\";\r\n        }\r\n\r\n        let symbol = this.createSymbol(\"div\", className, this.reel, this.currentSymbols[0]);\r\n        // symbol.setAttribute('data-symbolId', symbolId.toString());\r\n        this.currentSymbols.unshift(symbol);\r\n        this.currentSymbolsHeight.unshift(this.symbolsHeight[symbolId - 1]);\r\n    }\r\n\r\n    private bounceCounters(enable: boolean): void {\r\n        let countersHolder = document.getElementById(\"jackpotCounters\");\r\n        let countersLogo = document.getElementById(\"jackpotLogo\");\r\n\r\n        if (countersHolder != null && countersLogo != null) {\r\n            if (enable) {\r\n                countersHolder.classList.add(\"jackpotBounce\");\r\n                countersLogo.classList.add(\"jackpotBounce\");\r\n            } else {\r\n                countersHolder.classList.remove(\"jackpotBounce\");\r\n                countersLogo.classList.remove(\"jackpotBounce\");\r\n            }\r\n        }\r\n    }\r\n\r\n    private getCustomContent(name: string, extension: string): Promise<Array<string>> {\r\n        return new Promise<Array<string>>((resolve: Function, reject: Function) => {\r\n            if (AppContext.gameConfiguration == null) {\r\n                resolve([name, \"\"]);\r\n                return;\r\n            }\r\n\r\n            if (AppContext.gameConfiguration.StaticContentUrl == \"\") {\r\n                resolve([name, \"\"]);\r\n                return;\r\n            }\r\n\r\n            let theme = AppContext.gameConfiguration.ProgressiveBonusTheme;\r\n            if (theme == \"\") {\r\n                if (AppContext.gameConfiguration.UseJackpotLocalization) {\r\n                    theme = Jackpot.JackpotTheme;\r\n                } else {\r\n                    resolve([name, \"\"]);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            const staticContentUrl = AppContext.gameConfiguration.StaticContentUrl;\r\n            const spbFolder = \"SynotProgressiveBonus\";\r\n            const url = `${staticContentUrl}${spbFolder}/${theme}/${window[\"QUALITY\"]}/${name}${extension}`;\r\n            let img = document.createElement(\"img\");\r\n            img.setAttribute(\"src\", url);\r\n\r\n            img.addEventListener(\"load\", (ev) => {\r\n                resolve([name, url]);\r\n            });\r\n            img.addEventListener(\"error\", (ev) => {\r\n                resolve([name, \"\"]);\r\n            });\r\n        });\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Jackpot/JackpotGame.ts\n **/","import { Logger } from \"neo-common\";\r\n\r\n/**\r\n * @class AmbientBackground\r\n */\r\nexport class AmbientBackground {\r\n    static changeAmbientBackground(newBackgroundName: string, duration: number = 200, delay: number = 0): void {\r\n        let base = document.getElementById(\"ambientBackgroundBase\");\r\n        let transition = document.getElementById(\"ambientBackgroundTransition\");\r\n\r\n        if (base && transition) {\r\n            if (!transition.classList.contains(newBackgroundName)) {\r\n                transition.classList.remove(\"show\");\r\n                base.className = transition.className;\r\n\r\n                transition.style.transitionDuration = duration + \"ms\";\r\n                transition.style.transitionDelay = delay + \"ms\";\r\n                transition.className = \"\";\r\n                transition.offsetWidth;\r\n                transition.classList.add(newBackgroundName, \"show\");\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string which will be traced to browser console.\r\n     * @return void\r\n     */\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Scaling\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/AmbientBackground.ts\n **/","import { Utils, Logger } from \"neo-common\";\r\nimport { Platforms } from \"neo-games\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { Scaling } from \"./Scaling\";\r\n\r\n/**\r\n * @class Focus\r\n */\r\nexport class Focus {\r\n    static clicked: boolean = false;\r\n\r\n    static focus(): void {\r\n        window.onblur = Focus.onBlur;\r\n        window.onfocus = Focus.onFocus;\r\n        window.onclick = Focus.onClick;\r\n\r\n        window.addEventListener(\"fullscreenchange\", Focus.onFullscreenChange.bind(this));\r\n    }\r\n\r\n    static onClick(): void {\r\n        if (\r\n            AppContext.gameConfiguration &&\r\n            AppContext.gameConfiguration.FullscreenOnClick &&\r\n            !Scaling.IsIOs &&\r\n            !Platforms.Platforms.handleFullscreen\r\n        ) {\r\n            if (document.body.requestFullscreen) {\r\n                document.body.requestFullscreen();\r\n                //@ts-ignore\r\n            } else if (document.body.webkitRequestFullscreen) {\r\n                //@ts-ignore\r\n                document.body.webkitRequestFullscreen();\r\n            }\r\n        }\r\n\r\n        if (!Focus.clicked) {\r\n            Focus.clicked = true;\r\n        }\r\n    }\r\n\r\n    static onFullscreenChange(e: Event): void {\r\n        Platforms.Platforms.fullscreen(document.fullscreenElement != null);\r\n    }\r\n\r\n    static onFocus(): void {\r\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\r\n            PIXI.sound.unmuteAll();\r\n        }\r\n    }\r\n\r\n    static onBlur(): void {\r\n        if (AppContext.gameConfiguration && AppContext.gameConfiguration.MuteOnLostFocus) {\r\n            PIXI.sound.muteAll();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string which will be traced to browser console.\r\n     * @return void\r\n     */\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Focus\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Focus.ts\n **/","import {\r\n    UriHelper,\r\n    Logger,\r\n    StringUtils,\r\n    lodash,\r\n    CommonTypes,\r\n    PreloaderProviderBase,\r\n    PreloaderResourceLoader,\r\n    PreloaderResourceItem,\r\n    PreloaderInfo,\r\n} from \"neo-common\";\r\nimport { Platforms } from \"neo-games\";\r\n\r\nimport { SndResource } from \"../Resources/SndResource\";\r\nimport { XmlResource } from \"../Resources/XmlResource\";\r\nimport { SoundManager } from \"./SoundManager\";\r\nimport { StyleManager } from \"./StyleManager\";\r\nimport { CanvasManager } from \"./CanvasManager\";\r\nimport { ConfigurationManager } from \"./ConfigurationManager\";\r\nimport { HtmlManager } from \"./HtmlManager\";\r\nimport { StageController } from \"../StageController\";\r\nimport { ActionManager } from \"./ActionManager\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { SpineElement } from \"../Elements/Graphics/SpineElement\";\r\nimport { GameApp } from \"../../GameApp\";\r\nimport { ILoadingElement } from \"../Elements/Interfaces/ILoadingElement\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\n\r\nconst DOCUMENT_TYPE = \"document\";\r\n\r\nconst PIXI_EVENTS = {\r\n    Load: \"load\",\r\n    Error: \"error\",\r\n    Complete: \"complete\",\r\n};\r\n\r\nconst LOADJS_EVENTS = {\r\n    FileLoad: \"fileload\",\r\n    Complete: \"complete\",\r\n    Progress: \"progress\",\r\n    Error: \"error\",\r\n};\r\n\r\nconst RESOURCE_FLAGS = {\r\n    Gamble: \"G\",\r\n};\r\n\r\nexport class PreloaderProvider extends PreloaderProviderBase {\r\n    private static _loadingElements: Array<ILoadingElement> = [];\r\n    private static _loadedGroups: Array<string> = [];\r\n\r\n    private _resourceLoader: PIXIResourceLoader;\r\n    private _audioResourceLoader: PIXIResourceLoader;\r\n\r\n    get resourceLoader(): PreloaderResourceLoader {\r\n        return this._resourceLoader;\r\n    }\r\n\r\n    get audioResourceLoader(): PreloaderResourceLoader {\r\n        return this._audioResourceLoader;\r\n    }\r\n\r\n    public static addLoadingElementFunction(fnc: ILoadingElement): void {\r\n        PreloaderProvider._loadingElements.push(fnc);\r\n    }\r\n\r\n    constructor() {\r\n        super();\r\n        this._resourceLoader = new PIXIResourceLoader(false);\r\n        this._audioResourceLoader = new PIXIResourceLoader(true);\r\n    }\r\n\r\n    public static isGroupLoaded(group: string): boolean {\r\n        return PreloaderProvider._loadedGroups.indexOf(group) != -1;\r\n    }\r\n\r\n    cleanup(): void {\r\n        this._resourceLoader = null;\r\n        this._audioResourceLoader = null;\r\n        XmlResource.cleanup();\r\n        StyleManager.cleanup();\r\n    }\r\n\r\n    prepareFileList(resources: Array<PreloaderResourceItem>): void {\r\n        if (resources) {\r\n            var gambleIsDisabled = !AppContext.gameDefinition.Gamble;\r\n\r\n            lodash.remove(resources, (resource) => {\r\n                var gambleResource = this.resourceHasFlag(resource, RESOURCE_FLAGS.Gamble);\r\n                // if resource has flag 'G' (gamble) but game is disabled, remove it from resources to be loaded!\r\n                var removeRes = gambleResource && gambleIsDisabled;\r\n\r\n                if (DEBUG) {\r\n                    if (removeRes) {\r\n                        Logger.debugGroup(\r\n                            \"Preloader\",\r\n                            `Gamble disabled -> removing resource path '${resource.path}' (because has gamble flag) from file list to be loaded.`,\r\n                        );\r\n                    }\r\n                }\r\n\r\n                return removeRes;\r\n            });\r\n        }\r\n    }\r\n\r\n    loadCompleted(): Promise<any> {\r\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n            let fnc = PreloaderProvider._loadingElements[i];\r\n            if (fnc != null) {\r\n                fnc.onLoadCompleted(PreloaderInfo.instance.loadSucceed);\r\n            }\r\n        }\r\n\r\n        return new Promise<any>((resolve: any, reject: any) => {\r\n            resolve();\r\n        });\r\n    }\r\n\r\n    onUpdateProgress(progress: number): void {\r\n        Platforms.Platforms.loadProgress(progress);\r\n\r\n        for (let i = 0; i < PreloaderProvider._loadingElements.length; i++) {\r\n            let fnc = PreloaderProvider._loadingElements[i];\r\n            if (fnc != null) {\r\n                fnc.onProgressUpdate(progress);\r\n            }\r\n        }\r\n    }\r\n\r\n    loadGroupCompleted(group: string): void {\r\n        Logger.debugGroup(\"loadGroupCompleted\", `Loaded group: ${group}`);\r\n\r\n        if (PreloaderProvider._loadedGroups.indexOf(group) == -1) {\r\n            PreloaderProvider._loadedGroups.push(group);\r\n        }\r\n    }\r\n\r\n    handleGroupError(error: any, group: string): void {\r\n        //todo\r\n    }\r\n\r\n    parseCurrentElements(): void {\r\n        const xmlItems = XmlResource.Items;\r\n\r\n        if (xmlItems != null && xmlItems.length > 0) {\r\n            const tempElements = lodash.map(xmlItems, (item) => {\r\n                const el = item.documentElement;\r\n                const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n                if (prio === -1) {\r\n                    if (DEBUG) {\r\n                        Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\r\n                    }\r\n                }\r\n                return { element: el, priority: prio };\r\n            });\r\n\r\n            const elements = lodash.map(\r\n                lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\r\n                (x) => x.element,\r\n            );\r\n\r\n            // 1st) parse: config/sound/style elements\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\r\n            }\r\n\r\n            for (var i = 0; i < elements.length; i++) {\r\n                var element = elements[i];\r\n                ConfigurationManager.parseElements(element);\r\n                SoundManager.parseElements(element);\r\n            }\r\n\r\n            for (var i = 0; i < elements.length; i++) {\r\n                var element = elements[i];\r\n                StyleManager.parseElements(element);\r\n            }\r\n\r\n            for (var i = 0; i < elements.length; i++) {\r\n                var element = elements[i];\r\n                ActionManager.parseActionSets(element);\r\n            }\r\n\r\n            // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\r\n            document.body.setAttribute(\"Language\", GameApp.language);\r\n\r\n            // 3rd) parse: canvas/html elements\r\n            for (var i = 0; i < elements.length; i++) {\r\n                var element = elements[i];\r\n                CanvasManager.parseElements(element);\r\n                HtmlManager.parseElements(element);\r\n            }\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\r\n            }\r\n        }\r\n\r\n        XmlResource.emptyItems();\r\n\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\r\n        }\r\n    }\r\n\r\n    parseElements(): Promise<any> {\r\n        return new Promise<any>((resolve: any, reject: any) => {\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\"Preloader\", `Parse xml resources started`);\r\n            }\r\n\r\n            const xmlItems = XmlResource.Items;\r\n\r\n            if (xmlItems != null && xmlItems.length > 0) {\r\n                const tempElements = lodash.map(xmlItems, (item) => {\r\n                    const el = item.documentElement;\r\n                    const prio = el.hasAttribute(\"Priority\") ? parseInt(el.getAttribute(\"Priority\")) : -1;\r\n                    if (prio === -1) {\r\n                        if (DEBUG) {\r\n                            Logger.errorGroup(\"Preloader\", `Element does not have \"Priority\" attr!`);\r\n                        }\r\n                    }\r\n                    return { element: el, priority: prio };\r\n                });\r\n\r\n                const elements = lodash.map(\r\n                    lodash.orderBy(tempElements, (item) => item.priority, \"desc\"),\r\n                    (x) => x.element,\r\n                );\r\n\r\n                // 1st) parse: config/sound/style elements\r\n                if (DEBUG) {\r\n                    Logger.debugGroup(\"Preloader\", `Parse Elements started: ${new Date().toString()}`);\r\n                }\r\n\r\n                for (var i = 0; i < elements.length; i++) {\r\n                    var element = elements[i];\r\n                    ConfigurationManager.parseElements(element);\r\n                    SoundManager.parseElements(element);\r\n                }\r\n\r\n                for (var i = 0; i < elements.length; i++) {\r\n                    var element = elements[i];\r\n                    StyleManager.parseElements(element);\r\n                }\r\n\r\n                for (var i = 0; i < elements.length; i++) {\r\n                    var element = elements[i];\r\n                    ActionManager.parseActionSets(element);\r\n                }\r\n\r\n                // 2nd) set correct language for body, as GameApp.handleStringsLoadCompleted may be skipped because of non-existing AppContext\r\n                document.body.setAttribute(\"Language\", GameApp.language);\r\n\r\n                // 3rd) parse: canvas/html elements\r\n                for (var i = 0; i < elements.length; i++) {\r\n                    var element = elements[i];\r\n                    CanvasManager.parseElements(element);\r\n                    HtmlManager.parseElements(element);\r\n                }\r\n                if (DEBUG) {\r\n                    Logger.debugGroup(\"Preloader\", `Parse Elements ended: ${new Date().toString()}`);\r\n                }\r\n            }\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\"Preloader\", `Parse xml resources ended.`);\r\n            }\r\n            resolve();\r\n        });\r\n    }\r\n}\r\n\r\nexport class PIXIResourceLoader extends PreloaderResourceLoader {\r\n    private _hasPreloaderVersionId: boolean;\r\n    private _loadSingleCompletedCallback: CommonTypes.ErrorFunction;\r\n    private _loadCompletedCallback: CommonTypes.ErrorFunction;\r\n    private _preloaderVersionId: string;\r\n    private _updatedTextures: Object;\r\n    private _loadingErrorCount: number;\r\n    private _loadingErrorFiles: Array<string>;\r\n    private _resourcesWithNoId: Object;\r\n\r\n    private loader: PIXI.loaders.Loader;\r\n\r\n    constructor(audio: boolean) {\r\n        super(audio);\r\n\r\n        this.loader = new PIXI.loaders.Loader();\r\n\r\n        this._hasPreloaderVersionId = null;\r\n        this._loadingErrorCount = 0;\r\n        this._loadingErrorFiles = [];\r\n        this._resourcesWithNoId = {};\r\n\r\n        this.handleBeforeLoad = this.handleBeforeLoad.bind(this);\r\n        this.handleLoad = this.handleLoad.bind(this);\r\n        this.handleError = this.handleError.bind(this);\r\n        this.handleComplete = this.handleComplete.bind(this);\r\n        this.handleGroupComplete = this.handleGroupComplete.bind(this);\r\n        this.updateTextureAfterLoad = this.updateTextureAfterLoad.bind(this);\r\n    }\r\n\r\n    cleanup(): void {\r\n        this._loadCompletedCallback = null;\r\n        this._updatedTextures = null;\r\n        this._preloaderVersionId = null;\r\n        this._loadingErrorCount = 0;\r\n        this._loadingErrorFiles = [];\r\n        this._resourcesWithNoId = null;\r\n\r\n        this.loader.reset();\r\n    }\r\n\r\n    xmlsResourceLoaded(document: XMLDocument, resource: PreloaderResourceItem): void {\r\n        const acceptedAsXmlResource = document && document.documentElement.nodeName === XmlResource.Root;\r\n        if (DEBUG) {\r\n            const extra = acceptedAsXmlResource ? \" and is accepted as xml resource for app\" : \"\";\r\n\r\n            Logger.debugGroup(\"Preloader\", `Resource \"${resource.path}\" is loaded as xml document` + extra);\r\n        }\r\n\r\n        if (acceptedAsXmlResource) {\r\n            XmlResource.add(document);\r\n        }\r\n    }\r\n\r\n    beforeResourcesLoad(): void {\r\n        this.loader.reset();\r\n        this._updatedTextures = {};\r\n        this.loader.use(this.updateTextureAfterLoad);\r\n    }\r\n\r\n    updateTextureAfterLoad(resource: PIXI.loaders.Resource, next: Function): void {\r\n        if (resource.data && (resource as any).isImage) {\r\n            if (resource.texture && resource.texture.baseTexture && resource.texture.baseTexture.hasLoaded) {\r\n                const imageUrl = resource.texture.baseTexture.imageUrl;\r\n                const noId = this._resourcesWithNoId.hasOwnProperty(imageUrl);\r\n\r\n                if (!this._updatedTextures.hasOwnProperty(imageUrl)) {\r\n                    if (noId) {\r\n                        if (DEBUG) {\r\n                            Logger.debugGroup(\r\n                                \"Preloader\",\r\n                                `Resource '${imageUrl}' has no 'id' assigned and will not be pushed to webgl cache`,\r\n                            );\r\n                        }\r\n                    } else {\r\n                        if (resource.name.substr(0, 3) === \"ANI\" || resource.name.substr(0, 5) === \"GROUP\") {\r\n                            StageController.updateTexture(resource.texture.baseTexture);\r\n                            this._updatedTextures[imageUrl] = true;\r\n                        }\r\n\r\n                        if (DEBUG) {\r\n                            Logger.debugGroup(\"Preloader\", `Updated texture '${imageUrl}' to webgl cache`);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        try {\r\n            next();\r\n        } catch (e) {\r\n            this._loadCompletedCallback(e);\r\n        }\r\n    }\r\n\r\n    handleBeforeLoad(resource: PIXI.loaders.Resource, next: Function): void {\r\n        if (this._hasPreloaderVersionId) {\r\n            const oldurl = resource.url;\r\n            resource.url = UriHelper.setTimeStamp(resource.url, this._preloaderVersionId);\r\n\r\n            if (DEBUG && resource.url !== oldurl) {\r\n                Logger.debugGroup(\"Preloader\", `Resource url \"${oldurl}\" changed to non-cached url \"${resource.url}\"`);\r\n            }\r\n        }\r\n\r\n        try {\r\n            next();\r\n        } catch (e) {\r\n            this._loadCompletedCallback(e);\r\n        }\r\n    }\r\n\r\n    handleLoad(loader: any, resource: PIXI.loaders.Resource): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\r\n                \"Preloader\",\r\n                `Resource \"${resource.url}\" [${resource.xhrType}] [${this.preloader.progressPercent} %]`,\r\n            );\r\n        }\r\n\r\n        if (resource.xhrType === DOCUMENT_TYPE) {\r\n            const xmlRoot: string = resource.data.documentElement.nodeName;\r\n            if (xmlRoot === XmlResource.Root) {\r\n                throw new Error(`Should not be there!`);\r\n            }\r\n        }\r\n\r\n        this._loadSingleCompletedCallback(false);\r\n    }\r\n\r\n    handleError(error: Error, loader: any, resource: PIXI.loaders.Resource): void {\r\n        if (DEBUG) {\r\n            Logger.errorGroup(\"Preloader\", `Resource load error: ${resource.url}`);\r\n        }\r\n\r\n        this._loadingErrorCount++;\r\n        this._loadingErrorFiles.push(resource.url);\r\n        this._loadSingleCompletedCallback(`Failed to load ${resource.url} resource!`);\r\n    }\r\n\r\n    handleComplete(): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"Preloader\", \"Completed PIXI resource load\");\r\n        }\r\n\r\n        if (this.audio) {\r\n            for (let key in this.loader.resources) {\r\n                if (key.indexOf(\"_meta\") !== -1) {\r\n                    const sound = key.substr(0, key.length - 5);\r\n\r\n                    if (PIXI.sound.exists(sound)) {\r\n                        let soundSprite: PIXI.sound.Sound = PIXI.sound.find(sound);\r\n\r\n                        if (lodash.isEmpty(soundSprite.sprites)) {\r\n                            soundSprite.addSprites(this.loader.resources[key].data.spritemap);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            for (let key in this.loader.resources) {\r\n                if (key.indexOf(\"SPINE_data\") !== -1) {\r\n                    SpineElement.Data = this.loader.resources[key];\r\n                }\r\n\r\n                if (key.indexOf(\"SPINE_atlas\") !== -1) {\r\n                    SpineElement.Atlas = this.loader.resources[key];\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    handleGroupComplete(): void {\r\n        this.loader.removeAllListeners(PIXI_EVENTS.Load);\r\n        this.loader.removeAllListeners(PIXI_EVENTS.Error);\r\n\r\n        this.handleComplete();\r\n\r\n        const loadError =\r\n            this._loadingErrorCount === 0\r\n                ? null\r\n                : `Failed to load ${this._loadingErrorCount} resources!: \\n${this._loadingErrorFiles.join(\",\\n\")}`;\r\n        this._loadingErrorCount = 0;\r\n        this._loadingErrorFiles = []; //reset counter of error for current group\r\n        this._loadCompletedCallback(loadError);\r\n    }\r\n\r\n    loadAllGroupsCompleted(): void {\r\n        // don't need to be implemented yed\r\n    }\r\n\r\n    loadResources(\r\n        resources: Array<PreloaderResourceItem>,\r\n        resolveSingleCallback: CommonTypes.ErrorFunction,\r\n        resolveCallback: CommonTypes.ErrorFunction,\r\n    ): void {\r\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n            if (!AppContext.gameConfiguration.CanvasFallback) {\r\n                const loadingScreen = document.getElementById(\"loading\");\r\n                const element = document.getElementById(\"progressNumber\");\r\n\r\n                if (loadingScreen != null) {\r\n                    loadingScreen.classList.add(\"_error\");\r\n                }\r\n                if (element != null) {\r\n                    element.innerHTML = \"WebGL error. Please contact support.\";\r\n                }\r\n\r\n                return;\r\n            }\r\n        }\r\n\r\n        this._loadSingleCompletedCallback = resolveSingleCallback;\r\n        this._loadCompletedCallback = resolveCallback;\r\n\r\n        this._preloaderVersionId = this.preloader.versionId;\r\n        this._hasPreloaderVersionId = !StringUtils.isNullOrEmpty(this._preloaderVersionId);\r\n\r\n        for (let i = 0; i < resources.length; i++) {\r\n            const resource = resources[i];\r\n\r\n            if (StringUtils.isNullOrEmpty(resource.id)) {\r\n                this.loader.add(resource.path);\r\n                this._resourcesWithNoId[resource.path] = true;\r\n            } else {\r\n                if (resource.id.indexOf(\"SPINE_data\") !== -1) {\r\n                    let spineLoaderOptions = { metadata: { spineAtlasSuffix: \".txt\" } };\r\n                    this.loader.add(resource.id, resource.path, spineLoaderOptions);\r\n                } else {\r\n                    this.loader.add(resource.id, resource.path);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.loader.pre(this.handleBeforeLoad);\r\n        this.loader.on(\"load\" /*PIXI_EVENTS.Load*/, this.handleLoad);\r\n        this.loader.on(\"error\" /*PIXI_EVENTS.Error*/, this.handleError);\r\n        this.loader.once(\"complete\" /*PIXI_EVENTS.Complete*/, this.handleGroupComplete);\r\n        this.loader.load();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/PreloaderProvider.ts\n **/","import { Resource } from \"./Resource\";\r\n\r\n/**\r\n * The XmlResource is used for holding xmls from preloading.\r\n * @class XmlResource\r\n * @extends Resource\r\n */\r\nexport class XmlResource extends Resource {\r\n    static Root: string = \"Elements\";\r\n\r\n    private static items: Array<XMLDocument> = [];\r\n\r\n    public static get Items(): Array<XMLDocument> {\r\n        return XmlResource.items;\r\n    }\r\n\r\n    public static add(doc: XMLDocument): void {\r\n        XmlResource.items.push(doc);\r\n    }\r\n\r\n    public static cleanup(): void {\r\n        if (XmlResource.items) {\r\n            XmlResource.items.length = 0;\r\n            XmlResource.items = null;\r\n        }\r\n    }\r\n\r\n    public static emptyItems(): void {\r\n        if (XmlResource.items) {\r\n            XmlResource.items = [];\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/XmlResource.ts\n **/","/**\r\n * The Resource class is used as parent for all types of resources.\r\n * @class Resource\r\n */\r\nexport class Resource {}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/Resource.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\nimport { StageController } from \"../StageController\";\r\nimport { ActionSet } from \"../ActionSet\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\n\r\n/**\r\n * The CanvasManager class is used for parsing elements which are extending display objects and render them to canvas.\r\n * @class CanvasManager\r\n */\r\nexport class CanvasManager {\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"CanvasManager\", data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parse display object elements from xml and add them to stage.\r\n     * @method parseElements\r\n     * @param {Element} startNode\r\n     * @param {PIXI.Container} parent\r\n     * @returns {Object}\r\n     */\r\n    static parseElements(startNode: Element, parent: PIXI.Container = null): Object {\r\n        const children: Object = {};\r\n\r\n        if (!startNode) {\r\n            return children;\r\n        }\r\n\r\n        CanvasManager.getNodesList(startNode.firstElementChild)\r\n            .reverse()\r\n            .filter(\r\n                (node: Element) =>\r\n                    node.hasAttribute(\"Class\") &&\r\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.DisplayObject),\r\n            )\r\n            .forEach((node: Element) => {\r\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n\r\n                if (node.getAttribute(\"Class\") == \"FilterElement\") {\r\n                    element.create(node, parent);\r\n                } else {\r\n                    element.create(node);\r\n                }\r\n\r\n                if (node.hasAttribute(\"LinkId\")) {\r\n                    ActionSet.ElementsToLink[node.getAttribute(\"LinkId\")] = element;\r\n                }\r\n\r\n                var noGamble: boolean = false;\r\n\r\n                if (node.hasAttribute(\"Key\")) {\r\n                    if (node.getAttribute(\"Key\") === \"gamble\" && !AppContext.gameDefinition.Gamble) {\r\n                        noGamble = true;\r\n                    }\r\n                }\r\n\r\n                if (!noGamble) {\r\n                    CanvasManager._addElementToParent(element, parent);\r\n                    CanvasManager._handleElementController(node, element);\r\n                }\r\n\r\n                children[node.nodeName] = element;\r\n            });\r\n\r\n        return children;\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param {Element} node\r\n     * @param {Array<Element>} nodeList\r\n     * @returns {Array<Element>}\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = CanvasManager.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n\r\n    /**\r\n     * Adds element either to its parent or to the stage\r\n     * @method _addElementToParent\r\n     * @param {PIXI.DisplayObject} element\r\n     * @param {PIXI.Container} parent\r\n     * @returns void\r\n     */\r\n    private static _addElementToParent(element: any, parent: PIXI.Container): void {\r\n        if (parent != null) {\r\n            parent.addChild(element);\r\n        } else if (element.children.length > 0) {\r\n            StageController.addChild(element);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * If node has controller attribute, (creates new controller, inits it and) registers it\r\n     * @method _handleElementController\r\n     * @param {Element} node\r\n     * @param {any} element\r\n     * @returns void\r\n     */\r\n    private static _handleElementController(node: Element, element: any): void {\r\n        const controllerAttribute = node.hasAttribute(\"Controller\") ? node.getAttribute(\"Controller\") : \"\";\r\n        if (controllerAttribute === \"\") {\r\n            return;\r\n        }\r\n\r\n        const elementController: any = EngineComponentFactory.get(controllerAttribute);\r\n        if (elementController != null) {\r\n            elementController.startInitialization(element);\r\n            if (node.hasAttribute(\"Key\")) {\r\n                if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n                    return;\r\n                }\r\n                ModuleManager.registerGameModule(node.getAttribute(\"Key\"), elementController);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                CanvasManager.log(\"ERROR no controller with name: \" + controllerAttribute);\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/CanvasManager.ts\n **/","import { engineComponent, EngineComponentFactory, Logger } from \"neo-common\";\r\nimport { ComponentTypes } from \"./ComponentTypes\";\r\n\r\n/**\r\n * Registers action sets, their elements, actions and dispatch action on event.\r\n *\r\n * @class ActionSet\r\n * @author Marek Turkovic\r\n */\r\n@engineComponent(ComponentTypes.ActionSet)\r\nexport class ActionSet {\r\n    /**\r\n     * Registered actions per action block\r\n     * @type {{}}\r\n     */\r\n    static ActionSets: { [id: string]: any } = {};\r\n\r\n    /**\r\n     * Elements that we want to control.\r\n     * @type {{}}\r\n     */\r\n    static ElementsToLink: { [id: string]: any } = {};\r\n\r\n    /**\r\n     * Elements containing attributes Action, Event, ActionCase. These elements emits actions.\r\n     * @type {{}}\r\n     */\r\n    actionElements: { [id: string]: any } = {};\r\n\r\n    /**\r\n     * xml nodes added to object by case name\r\n     */\r\n    cases: Object = {};\r\n\r\n    /**\r\n     * Registers action sets, their elements and actions\r\n     * @param node\r\n     */\r\n    public RegisterActionSet(node: Element): void {\r\n        ActionSet.getNodesList(node.firstElementChild)\r\n            .reverse()\r\n            .forEach((actionSetNode: Element) => {\r\n                switch (actionSetNode.nodeName) {\r\n                    case \"Elements\":\r\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n                            .reverse()\r\n                            .forEach((elementNode: Element) => {\r\n                                this.actionElements[elementNode.nodeName] = elementNode;\r\n                            });\r\n\r\n                        break;\r\n                    case \"Actions\":\r\n                        ActionSet.getNodesList(actionSetNode.firstElementChild)\r\n                            .reverse()\r\n                            .forEach((actionCase: Element) => {\r\n                                if (!actionCase.hasAttribute(ActionSetAttributes.CASE)) {\r\n                                    return;\r\n                                }\r\n\r\n                                if (this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] !== null) {\r\n                                    this.cases[actionCase.getAttribute(ActionSetAttributes.CASE)] = actionCase;\r\n                                } else {\r\n                                    if (DEBUG) {\r\n                                        this.log(\r\n                                            \"ERROR case \" +\r\n                                                actionCase.getAttribute(\"Case\") +\r\n                                                \" already exist in ActionSet \" +\r\n                                                node.nodeName,\r\n                                        );\r\n                                    }\r\n                                }\r\n                            });\r\n                        break;\r\n                }\r\n            });\r\n\r\n        ActionSet.ActionSets[node.nodeName] = this;\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param node Element\r\n     * @param nodeList Array<Element>\r\n     * @return Array<Element>\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = ActionSet.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n\r\n    /**\r\n     * Perform set of actions on main element throught linked element.\r\n     *\r\n     * @param action\r\n     * @constructor\r\n     */\r\n    public DispatchEvent(action: string): void {\r\n        ActionSet.getNodesList(this.cases[action].firstElementChild)\r\n            .reverse()\r\n            .forEach((elementNode: Element) => {\r\n                const linkedElement = this.actionElements[elementNode.nodeName];\r\n                const classAttribute = linkedElement.hasAttribute(\"Class\") ? linkedElement.getAttribute(\"Class\") : \"\";\r\n\r\n                if (classAttribute === \"\") {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING element with name: \" + linkedElement.nodeName + \" has no class\");\r\n                    }\r\n                    return;\r\n                }\r\n\r\n                if (!EngineComponentFactory.isTypeOf(classAttribute, ComponentTypes.LinkedElement)) {\r\n                    return;\r\n                }\r\n\r\n                const element: any = EngineComponentFactory.get(classAttribute);\r\n                element.create(linkedElement, elementNode);\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nexport const ActionSetAttributes = {\r\n    CASE: \"Case\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/ActionSet.ts\n **/","import { Logger } from \"neo-common\";\r\nimport { Configuration } from \"../Configuration\";\r\n\r\n/**\r\n * The ConfigurationManager class is used for parsing elements which are type of Configuration and store them for next usage.\r\n * @class ConfigurationManager\r\n */\r\nexport class ConfigurationManager {\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"ConfigurationManager\", data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parse configuration from xml and store them for next usage.\r\n     * @method parseElements\r\n     * @param startNode Element\r\n     * @return void\r\n     */\r\n    static parseElements(startNode: Element): void {\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n\r\n        ConfigurationManager.getNodesList(startNode.firstElementChild)\r\n            .reverse()\r\n            .filter((node: Element) => node.hasAttribute(\"Class\") && node.getAttribute(\"Class\") === \"Configuration\")\r\n            .forEach((node: Element) => (Configuration.Configurations[node.nodeName] = node));\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param node Element\r\n     * @param nodeList Array<Element>\r\n     * @return Array<Element>\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = ConfigurationManager.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ConfigurationManager.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\nimport { HtmlElement } from \"../../HTMLComponents/Elements/HtmlElement\";\r\nimport { UserControls } from \"../../Channels/Common/UserControls/UserControls\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { GambleUserControls } from \"../../Channels/Common/UserControls/GambleUserControls\";\r\nimport { DesktopBaseUserControls } from \"../../Channels/Desktop/DesktopBaseUserControls\";\r\nimport { DesktopBonusRespinsUserControls } from \"../../Channels/Desktop/DesktopBonusRespinsUserControls\";\r\nimport { MobileBonusRespinsUserControls } from \"../../Channels/Mobile/MobileBonusRespinsUserControls\";\r\nimport { MobileBaseUserControls } from \"../../Channels/Mobile/MobileBaseUserControls\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\n\r\n/**\r\n * The HtmlManager class is used for parsing html elements which are extending html element and append them to index.html.\r\n * @class HtmlManager\r\n */\r\nexport class HtmlManager {\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"HtmlManager\", data);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Parse html elements from xml and append them to index.html.\r\n     * @method parseElements\r\n     * @param startNode Element\r\n     * @param parent HtmlElement\r\n     * @return void\r\n     */\r\n    static parseElements(startNode: Element, parent: HtmlElement = null): Object {\r\n        const children: Object = {};\r\n\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n\r\n        HtmlManager.getNodesList(startNode.firstElementChild, [])\r\n            .reverse()\r\n            .filter(\r\n                (node: Element) =>\r\n                    node.hasAttribute(\"Class\") &&\r\n                    EngineComponentFactory.isTypeOf(node.getAttribute(\"Class\"), ComponentTypes.HtmlElement),\r\n            )\r\n            .forEach((node: Element) => {\r\n                const element: any = EngineComponentFactory.get(node.getAttribute(\"Class\"));\r\n                const root: HTMLElement = document.getElementById(\"root\");\r\n                let customRoot: HTMLElement;\r\n\r\n                if (node.hasAttribute(\"RootId\")) {\r\n                    customRoot = document.getElementById(node.getAttribute(\"RootId\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"Key\")) {\r\n                    if (!AppContext.gameDefinition.Gamble && node.getAttribute(\"Key\") === \"gamble\") {\r\n                        return;\r\n                    }\r\n\r\n                    if (element instanceof DesktopBaseUserControls) {\r\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n                    } else if (element instanceof DesktopBonusRespinsUserControls) {\r\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n                    } else if (element instanceof MobileBaseUserControls) {\r\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n                    } else if (element instanceof GambleUserControls) {\r\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n                    } else if (element instanceof MobileBonusRespinsUserControls) {\r\n                        ModuleManager.registerChannelModule(node.getAttribute(\"Key\"), element);\r\n                    }\r\n                }\r\n\r\n                if (element.instance != null) {\r\n                    if (parent != null) {\r\n                        parent.instance.appendChild(element.instance);\r\n                    } else {\r\n                        if (customRoot != null) {\r\n                            customRoot.appendChild(element.instance);\r\n                        } else if (root != null) {\r\n                            root.appendChild(element.instance);\r\n                        } else {\r\n                            document.body.appendChild(element.instance);\r\n                        }\r\n                    }\r\n                    element.create(node);\r\n                } else {\r\n                    element.create(node);\r\n                    if (parent != null) {\r\n                        parent.instance.appendChild(element.instance);\r\n                    } else {\r\n                        if (customRoot != null) {\r\n                            customRoot.appendChild(element.instance);\r\n                        } else if (root != null) {\r\n                            root.appendChild(element.instance);\r\n                        } else {\r\n                            document.body.appendChild(element.instance);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                children[node.nodeName] = element;\r\n            });\r\n\r\n        return children;\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param node Element\r\n     * @param nodeList Array<Element>\r\n     * @return Array<Element>\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element>): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = HtmlManager.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/HtmlManager.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\r\nimport { UserControls } from \"./UserControls\";\r\nimport { GambleActions } from \"../Actions/GambleActions\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { GambleController } from \"../../../GameComponents/Gamble/GambleController\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { LimitDialog } from \"../Dialogs/LimitDialog\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { BetManager } from \"../../../Managers/BetManager\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\nvar Color = Communication.Game.Color;\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class GambleUserControls extends UserControls {\r\n    protected _controller: GambleController;\r\n\r\n    private _collectDelay: FrameTimerEventEmitter;\r\n\r\n    private _gambleTickerDefault: HTMLElement;\r\n    private _gambleTickerHalveLimit: HTMLElement;\r\n    private _gambleTickerSoftLimit: HTMLElement;\r\n    private _gambleTickerGameLimit: HTMLElement;\r\n\r\n    private _collectedWinValue: number = 0;\r\n    private _allowStart: boolean;\r\n\r\n    private _screen: HTMLElement;\r\n\r\n    constructor() {\r\n        super(\"gamble\");\r\n\r\n        this._collectDelay = CreateFrameTimer(\"collectDelay\");\r\n        this._collectDelay.on(FrameTimerEvents.Complete, this.outro.bind(this));\r\n\r\n        this._allowStart = true;\r\n    }\r\n\r\n    private ticker(state: string = \"\"): void {\r\n        if (this._gambleTickerDefault != null) {\r\n            this._gambleTickerDefault.style.display = \"none\";\r\n        }\r\n        if (this._gambleTickerHalveLimit != null) {\r\n            this._gambleTickerHalveLimit.style.display = \"none\";\r\n        }\r\n        if (this._gambleTickerSoftLimit != null) {\r\n            this._gambleTickerSoftLimit.style.display = \"none\";\r\n        }\r\n        if (this._gambleTickerGameLimit != null) {\r\n            this._gambleTickerGameLimit.style.display = \"none\";\r\n        }\r\n\r\n        switch (state) {\r\n            case \"default\":\r\n                if (this._gambleTickerDefault != null) {\r\n                    this._gambleTickerDefault.style.display = \"block\";\r\n                }\r\n                break;\r\n            case \"halvelimit\":\r\n                if (this._gambleTickerHalveLimit != null) {\r\n                    this._gambleTickerHalveLimit.style.display = \"block\";\r\n                }\r\n                break;\r\n            case \"softLimit\":\r\n                if (this._gambleTickerSoftLimit != null) {\r\n                    this._gambleTickerSoftLimit.style.display = \"block\";\r\n                }\r\n                break;\r\n            case \"limit\":\r\n                if (this._gambleTickerGameLimit != null) {\r\n                    this._gambleTickerGameLimit.style.display = \"block\";\r\n                }\r\n                break;\r\n        }\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.registerActions();\r\n\r\n        this._gambleTickerDefault = document.getElementById(\"gambleTickerDefault\");\r\n        this._gambleTickerHalveLimit = document.getElementById(\"gambleTickerHalveLimit\");\r\n        this._gambleTickerSoftLimit = document.getElementById(\"gambleTickerSoftLimit\");\r\n        this._gambleTickerGameLimit = document.getElementById(\"gambleTickerGameLimit\");\r\n        this._screen = document.getElementById(\"screen\");\r\n        this.ticker(\"default\");\r\n    }\r\n\r\n    addController(controller: GambleController): void {\r\n        this._controller = controller;\r\n        this._controller.on(GambleController.StartReceived, this.startReceived.bind(this));\r\n        this._controller.on(GambleController.SelectReceived, this.selectReceived.bind(this));\r\n        this._controller.on(GambleController.HalveReceived, this.halveReceived.bind(this));\r\n        this._controller.on(GambleController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n        this._controller.on(GambleController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n        this._controller.on(GambleController.Lose, this.lose.bind(this));\r\n        this._controller.on(GambleController.IntroFinished, this.introFinished.bind(this));\r\n        this._controller.on(GambleController.OutroFinished, this.outroFinished.bind(this));\r\n    }\r\n\r\n    registerActions(): void {\r\n        this.actions.registerActions({\r\n            [GambleActions.ActionGambleStart]: false,\r\n            [GambleActions.ActionGambleRed]: false,\r\n            [GambleActions.ActionGambleBlack]: false,\r\n            [GambleActions.ActionGambleHalve]: false,\r\n            [GambleActions.ActionGambleCollect]: false,\r\n        });\r\n    }\r\n\r\n    initReceived(): void {\r\n        super.initReceived();\r\n\r\n        this._controller.initReceived();\r\n    }\r\n\r\n    collectReceived(): void {\r\n        this.ticker(\"\");\r\n        DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\r\n\r\n        super.collectReceived();\r\n\r\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\r\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\r\n        DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\r\n        DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\r\n        DataManager.updateDataElements();\r\n\r\n        Platforms.Platforms.roundEnded({\r\n            id: GameManager.gameResponse.roundId,\r\n            win: this._collectedWinValue,\r\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n        });\r\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\r\n        this._collectDelay.start(30);\r\n\r\n        if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n            DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\r\n        }\r\n        this.changeWinBox(true);\r\n    }\r\n\r\n    restoreGameRound(): void {\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    startReceived(): void {\r\n        if (\r\n            GameManager.gambleResponse != null &&\r\n            GameManager.gambleResponse[\"totalCount\"] != null &&\r\n            GameManager.gambleResponse[\"currentCount\"] != null\r\n        ) {\r\n            DataManager.updateDataElement(\r\n                GameData.DataGambleAttempts,\r\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\r\n            );\r\n        }\r\n        ModuleManager.startGamble();\r\n    }\r\n\r\n    selectReceived(): void {\r\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\r\n            this._collectedWinValue = parseFloat(\r\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\r\n            );\r\n        } else {\r\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\r\n        }\r\n    }\r\n\r\n    halveReceived(): void {\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleColorWin,\r\n            GameManager.gambleResponse.colorWin.toString(),\r\n        );\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleCurrentWin,\r\n            GameManager.gambleResponse.currentWin.toString(),\r\n        );\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleColorWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleCurrentWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n        }\r\n        DataManager.updateDataElements();\r\n\r\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\r\n\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    dispatchAction(action: string): void {\r\n        super.dispatchAction(action);\r\n\r\n        if (this.actions.getActionState(action)) {\r\n            PlayList.play(\"SND_Click\");\r\n            super.dispatchAction(action);\r\n\r\n            switch (action) {\r\n                case GambleActions.ActionGambleStart:\r\n                    this.start();\r\n                    break;\r\n                case GambleActions.ActionGambleHalve:\r\n                    this.halve();\r\n                    break;\r\n                case GambleActions.ActionGambleBlack:\r\n                    this.select(Color.Black);\r\n                    break;\r\n                case GambleActions.ActionGambleRed:\r\n                    this.select(Color.Red);\r\n                    break;\r\n                case GambleActions.ActionGambleCollect:\r\n                    this.collect();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    collect(): void {\r\n        if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\r\n            Platforms.Platforms.win(GameManager.gameResponse.totalWin);\r\n        }\r\n\r\n        if (GameManager.gambleResponse[\"paidWin\"] != null) {\r\n            this._collectedWinValue = parseFloat(\r\n                NumberUtils.add(GameManager.gambleResponse.currentWin, GameManager.gambleResponse[\"paidWin\"]),\r\n            );\r\n        } else {\r\n            this._collectedWinValue = GameManager.gambleResponse.currentWin;\r\n        }\r\n\r\n        if (GameManager.gameResponse.totalWin > 0) {\r\n            DataManager.updateLossLimit(GameManager.gameResponse.totalWin);\r\n        }\r\n        super.collect();\r\n\r\n        this.disable();\r\n        this.playCollectSound();\r\n\r\n        LimitDialog.closeDialog();\r\n\r\n        GameManager.collect(GameModules.Gamble);\r\n    }\r\n\r\n    start(): void {\r\n        this._allowStart = false;\r\n        this._collectedWinValue = GameManager.gameResponse.totalWin;\r\n        ModuleManager.disableBase();\r\n        this.disable();\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleColorWin,\r\n            GameManager.gambleResponse.colorWin.toString(),\r\n        );\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleCurrentWin,\r\n            GameManager.gambleResponse.currentWin.toString(),\r\n        );\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleColorWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleCurrentWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n        }\r\n        DataManager.updateDataElements();\r\n        this._controller.start();\r\n    }\r\n\r\n    select(color: Communication.Game.Color): void {\r\n        this.ticker(\"\");\r\n        this.disable();\r\n        this._controller.select(color);\r\n    }\r\n\r\n    halve(): void {\r\n        if (GameManager.gambleResponse.currentWin > 0) {\r\n            DataManager.updateLossLimit(GameManager.gambleResponse.currentWin / 2);\r\n        }\r\n        this.disable();\r\n        this.playCollectSound();\r\n        this._controller.halve();\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        if (GameManager.gambleResponse.currentWin > 0) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleCurrentWin,\r\n                GameManager.gambleResponse.currentWin.toString(),\r\n            );\r\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataGambleCurrentWinDenom,\r\n                    parseInt(\r\n                        NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\r\n                    ).toString(),\r\n                );\r\n            }\r\n            DataManager.updateDataElements();\r\n        } else {\r\n            if (\r\n                GameManager.gambleResponse != null &&\r\n                GameManager.gambleResponse[\"totalCount\"] != null &&\r\n                GameManager.gambleResponse[\"currentCount\"] != null\r\n            ) {\r\n                DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\r\n            }\r\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWin, \"\");\r\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWin, \"\");\r\n            DataManager.updateGameDataFromModule(GameData.DataGambleColorWinDenom, \"\");\r\n            DataManager.updateGameDataFromModule(GameData.DataGambleCurrentWinDenom, \"\");\r\n            DataManager.updateDataElements();\r\n        }\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleColorWin,\r\n            GameManager.gambleResponse.colorWin.toString(),\r\n        );\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleColorWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n        }\r\n        DataManager.updateDataElements();\r\n        if (GameManager.gambleResponse.currentWin > 0) {\r\n            this.prepareNewGameRound();\r\n        }\r\n    }\r\n\r\n    lose(): void {\r\n        this.outro();\r\n\r\n        if (this._collectedWinValue > 0) {\r\n            if (AppContext != null && AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n                DataManager.updateDataElement(GameData.DataTotalWin, this._collectedWinValue.toString());\r\n            }\r\n            this.changeWinBox(true);\r\n        } else {\r\n            this.changeWinBox();\r\n        }\r\n\r\n        Platforms.Platforms.roundEnded({\r\n            id: GameManager.gameResponse.roundId,\r\n            win: this._collectedWinValue,\r\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n        });\r\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\r\n    }\r\n\r\n    initIntro(): void {\r\n        super.initIntro();\r\n\r\n        FreeRoundBonus.disableUi();\r\n\r\n        this.prepareNewGameRound();\r\n\r\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n            this._screen.classList.add(\"_inGamble\");\r\n        }\r\n\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleColorWin,\r\n            GameManager.gambleResponse.colorWin.toString(),\r\n        );\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataGambleCurrentWin,\r\n            GameManager.gambleResponse.currentWin.toString(),\r\n        );\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleColorWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.colorWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleCurrentWinDenom,\r\n                parseInt(\r\n                    NumberUtils.devide(GameManager.gambleResponse.currentWin, BetManager.CoinSize).toString(),\r\n                ).toString(),\r\n            );\r\n        }\r\n        DataManager.updateDataElements();\r\n\r\n        this._controller.initIntro();\r\n    }\r\n\r\n    intro(): void {\r\n        FreeRoundBonus.disableUi();\r\n        if (this._screen != null && !this._screen.classList.contains(\"_inGamble\")) {\r\n            this._screen.classList.add(\"_inGamble\");\r\n        }\r\n        this._controller.intro();\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    outro(): void {\r\n        if (this._screen != null && this._screen.classList.contains(\"_inGamble\")) {\r\n            this._screen.classList.remove(\"_inGamble\");\r\n        }\r\n        DataManager.Collectable = true;\r\n        this._collectDelay.stop();\r\n        this._controller.outro();\r\n    }\r\n\r\n    outroFinished(): void {\r\n        this._allowStart = true;\r\n        FreeRoundBonus.enableUi();\r\n        ModuleManager.introModule(GameModules.Base);\r\n    }\r\n\r\n    prepareNewGameRound(): void {\r\n        if (\r\n            GameManager.gambleResponse != null &&\r\n            GameManager.gambleResponse[\"totalCount\"] != null &&\r\n            GameManager.gambleResponse[\"currentCount\"] != null\r\n        ) {\r\n            DataManager.updateDataElement(\r\n                GameData.DataGambleAttempts,\r\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\r\n            );\r\n            DataManager.updateGameDataFromModule(\r\n                GameData.DataGambleAttempts,\r\n                (GameManager.gambleResponse[\"totalCount\"] - GameManager.gambleResponse[\"currentCount\"]).toString(),\r\n            );\r\n        }\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.updateDataElement(GameData.DataGambleAttempts, 0 + \"\");\r\n            DataManager.updateGameDataFromModule(GameData.DataGambleAttempts, 0 + \"\");\r\n\r\n            this.limit();\r\n            this.ticker(\"limit\");\r\n        } else {\r\n            let softLimit: boolean = false;\r\n            if (GameManager.gambleResponse.colorWin === 0) {\r\n                softLimit = true;\r\n            }\r\n\r\n            if (softLimit) {\r\n                if (GameManager.gambleResponse.halveEnabled) {\r\n                    this.ticker(\"softLimit\");\r\n                } else {\r\n                    this.ticker(\"limit\");\r\n                }\r\n            } else if (GameManager.gambleResponse != null && !GameManager.gambleResponse.halveEnabled) {\r\n                this.ticker(\"halveLimit\");\r\n            } else {\r\n                this.ticker(\"default\");\r\n            }\r\n\r\n            this.actions.changeActionStates({\r\n                [GambleActions.ActionGambleStart]: false,\r\n                [GambleActions.ActionGambleRed]: !softLimit,\r\n                [GambleActions.ActionGambleBlack]: !softLimit,\r\n                [GambleActions.ActionGambleHalve]: GameManager.gambleResponse.halveEnabled,\r\n                [GambleActions.ActionGambleCollect]: true,\r\n            });\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    limit(): void {\r\n        LimitDialog.openDialog();\r\n\r\n        this.actions.changeActionStates({\r\n            [GambleActions.ActionGambleStart]: false,\r\n            [GambleActions.ActionGambleRed]: false,\r\n            [GambleActions.ActionGambleBlack]: false,\r\n            [GambleActions.ActionGambleHalve]: false,\r\n            [GambleActions.ActionGambleCollect]: true,\r\n        });\r\n    }\r\n\r\n    enable(): void {\r\n        this.actions.changeActionState(GambleActions.ActionGambleStart, this._allowStart);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    disable(): void {\r\n        this._actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/GambleUserControls.ts\n **/","import { engineComponent, EngineComponentFactory } from \"neo-common\";\r\nimport { HtmlContainerElement } from \"../../../HTMLComponents/Elements/HtmlContainerElement\";\r\nimport { ComponentTypes } from \"../../../Components/ComponentTypes\";\r\nimport { ActionsTypes, ActionSet } from \"../Actions/ActionSet\";\r\nimport { Controller } from \"../../../GameComponents/Controller\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { GameData } from \"../Datas/GameData\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { BetManager } from \"../../../Managers/BetManager\";\r\nimport { FreeRoundBonus } from \"../Bonuses/FreeRoundBonus\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class UserControls extends HtmlContainerElement {\r\n    protected _key: string = \"\";\r\n    protected _actions: ActionSet;\r\n\r\n    private _betLabel: HTMLElement;\r\n    private _freeBetLabel: HTMLElement;\r\n    private _betLabelFS: HTMLElement;\r\n    private _freeBetLabelFS: HTMLElement;\r\n    private _betValue: HTMLElement;\r\n    private _betPlus: HTMLElement;\r\n    private _betMinus: HTMLElement;\r\n    private _uncollectedWin: HTMLElement;\r\n    private _collectedWin: HTMLElement;\r\n\r\n    constructor(key: string) {\r\n        super();\r\n\r\n        this._key = key;\r\n\r\n        this._actions = new ActionSet(`${this._key}.actions`, EngineComponentFactory.getComponentName(this));\r\n    }\r\n\r\n    protected get actions(): ActionSet {\r\n        return this._actions;\r\n    }\r\n\r\n    getAllActions(): ActionsTypes {\r\n        return this._actions.getAllActions();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n    }\r\n\r\n    addController(controller: Controller): void {}\r\n\r\n    initReceived(): void {\r\n        this._uncollectedWin = document.getElementById(\"uncollectedWin\");\r\n        this._collectedWin = document.getElementById(\"collectedWin\");\r\n    }\r\n\r\n    collectReceived(): void {}\r\n\r\n    dispatchAction(action: string): void {}\r\n\r\n    collect(): void {}\r\n\r\n    initIntro(): void {}\r\n\r\n    flashBet(): void {\r\n        if (this._betValue == null) {\r\n            this._betValue = document.getElementById(\"betValue\");\r\n        }\r\n\r\n        if (this._betValue != null) {\r\n            this._betValue.classList.remove(\"flash\");\r\n            setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\r\n            setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\r\n            PlayList.play(\"SND_LowCredit\");\r\n        }\r\n    }\r\n\r\n    initNewBet(animate: boolean = true): void {\r\n        if (this._betLabel == null) {\r\n            this._betLabel = document.getElementById(\"betLabel\");\r\n        }\r\n\r\n        if (this._freeBetLabel == null) {\r\n            this._freeBetLabel = document.getElementById(\"freeBetLabel\");\r\n        }\r\n\r\n        if (this._betLabelFS == null) {\r\n            this._betLabelFS = document.getElementById(\"betLabelFS\");\r\n        }\r\n\r\n        if (this._freeBetLabelFS == null) {\r\n            this._freeBetLabelFS = document.getElementById(\"freeBetLabelFS\");\r\n        }\r\n\r\n        if (this._betValue == null) {\r\n            this._betValue = document.getElementById(\"betValue\");\r\n        }\r\n\r\n        if (this._betPlus == null) {\r\n            this._betPlus = document.getElementById(\"betPlus\");\r\n        }\r\n\r\n        if (this._betMinus == null) {\r\n            this._betMinus = document.getElementById(\"betMinus\");\r\n        }\r\n\r\n        if (FreeRoundBonus.inFrb) {\r\n            if (this._betLabel != null && !this._betLabel.classList.contains(\"_hidden\")) {\r\n                this._betLabel.classList.add(\"_hidden\");\r\n            }\r\n            if (this._freeBetLabel != null) {\r\n                if (this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n                    this._freeBetLabel.classList.remove(\"_hidden\");\r\n                }\r\n                if (animate) {\r\n                    this._freeBetLabel.classList.remove(\"flash\");\r\n                    setTimeout(() => this._freeBetLabel.classList.add(\"flash\"), 33);\r\n                    setTimeout(() => this._freeBetLabel.classList.remove(\"flash\"), 2000);\r\n                }\r\n            }\r\n            if (this._betLabelFS != null && !this._betLabelFS.classList.contains(\"_hidden\")) {\r\n                this._betLabelFS.classList.add(\"_hidden\");\r\n            }\r\n            if (this._freeBetLabelFS != null) {\r\n                if (this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n                    this._freeBetLabelFS.classList.remove(\"_hidden\");\r\n                }\r\n            }\r\n        } else {\r\n            if (this._freeBetLabel != null && !this._freeBetLabel.classList.contains(\"_hidden\")) {\r\n                this._freeBetLabel.classList.add(\"_hidden\");\r\n            }\r\n            if (this._betLabel != null) {\r\n                if (this._betLabel.classList.contains(\"_hidden\")) {\r\n                    this._betLabel.classList.remove(\"_hidden\");\r\n                }\r\n                if (animate) {\r\n                    this._betLabel.classList.remove(\"flash\");\r\n                    setTimeout(() => this._betLabel.classList.add(\"flash\"), 33);\r\n                    setTimeout(() => this._betLabel.classList.remove(\"flash\"), 2000);\r\n                }\r\n            }\r\n\r\n            if (this._freeBetLabelFS != null && !this._freeBetLabelFS.classList.contains(\"_hidden\")) {\r\n                this._freeBetLabelFS.classList.add(\"_hidden\");\r\n            }\r\n            if (this._betLabelFS != null) {\r\n                if (this._betLabelFS.classList.contains(\"_hidden\")) {\r\n                    this._betLabelFS.classList.remove(\"_hidden\");\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this._betValue != null) {\r\n            if (animate) {\r\n                this._betValue.classList.remove(\"flash\");\r\n                setTimeout(() => this._betValue.classList.add(\"flash\"), 33);\r\n                setTimeout(() => this._betValue.classList.remove(\"flash\"), 2000);\r\n            }\r\n        }\r\n\r\n        if (BetManager.TotalBets.length > 1) {\r\n            if (this._betPlus != null && this._betPlus.classList.contains(\"_invisible\")) {\r\n                this._betPlus.classList.remove(\"_invisible\");\r\n            }\r\n\r\n            if (this._betMinus != null && this._betMinus.classList.contains(\"_invisible\")) {\r\n                this._betMinus.classList.remove(\"_invisible\");\r\n            }\r\n        } else {\r\n            if (this._betPlus != null && !this._betPlus.classList.contains(\"_invisible\")) {\r\n                this._betPlus.classList.add(\"_invisible\");\r\n            }\r\n\r\n            if (this._betMinus != null && !this._betMinus.classList.contains(\"_invisible\")) {\r\n                this._betMinus.classList.add(\"_invisible\");\r\n            }\r\n        }\r\n    }\r\n\r\n    changeBetColor(green: boolean = false): void {\r\n        if (this._betValue == null) {\r\n            this._betValue = document.getElementById(\"betValue\");\r\n        }\r\n\r\n        if (this._betValue != null) {\r\n            if (green) {\r\n                this._betValue.style.color = \"#39ff04\";\r\n            } else {\r\n                this._betValue.style.color = \"#ffffff\";\r\n            }\r\n        }\r\n    }\r\n\r\n    playCollectSound(): void {\r\n        if (GameManager.gameResponse.totalWin > 0) {\r\n            if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod !== \"cumulative\") {\r\n                PlayList.play(\"SND_BaseCollect\");\r\n            } else if (!FreeRoundBonus.inFrb) {\r\n                PlayList.play(\"SND_BaseCollect\");\r\n            }\r\n        }\r\n    }\r\n\r\n    cycleHelp(): void {}\r\n\r\n    changeWinBox(collect: boolean = false): void {\r\n        if (AppContext != null && !AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n            return;\r\n        }\r\n        if (this._uncollectedWin != null) {\r\n            if (collect) {\r\n                if (!this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n                    this._uncollectedWin.classList.add(\"_hidden\");\r\n                }\r\n            } else {\r\n                if (this._uncollectedWin.classList.contains(\"_hidden\")) {\r\n                    DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n                    DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\r\n                    this._uncollectedWin.classList.remove(\"_hidden\");\r\n                }\r\n            }\r\n        }\r\n        if (this._collectedWin != null) {\r\n            if (collect) {\r\n                if (this._collectedWin.classList.contains(\"_hidden\")) {\r\n                    this._collectedWin.classList.remove(\"_hidden\");\r\n                }\r\n            } else {\r\n                if (!this._collectedWin.classList.contains(\"_hidden\")) {\r\n                    this._collectedWin.classList.add(\"_hidden\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    restoreGameRound(): void {}\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/UserControls/UserControls.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\r\nimport { HtmlElement } from \"./HtmlElement\";\r\nimport { HtmlContainerStyle } from \"../Styles/HtmlContainerStyle\";\r\nimport { StyleManager } from \"../../Components/Managers/StyleManager\";\r\nimport { HtmlManager } from \"../../Components/Managers/HtmlManager\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\n\r\n/**\r\n * The HtmlContainerElement class is class which creates holder for other html elements.\r\n * Can be defined also by Style with class HtmlContainerStyle.\r\n * Example 1:\r\n *   <HtmlContainerElement Class=\"HtmlContainerElement\">\r\n *       <Child1 />\r\n *       <Child1 />\r\n *       ...\r\n *   </HtmlContainerElement>\r\n *\r\n * Example 2:\r\n *   <HtmlContainerElement Class=\"HtmlContainerElement\" Style=\"HtmlContainerStyle\" />\r\n *\r\n * @class HtmlContainerElement\r\n * @extends HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlContainerElement extends HtmlElement {\r\n    static Over: string = \"mouseover\";\r\n    static Out: string = \"mouseout\";\r\n    static TouchStart: string = \"touchstart\";\r\n    static TouchEnd: string = \"touchend\";\r\n    static CustomClick: string = \"click\";\r\n\r\n    private _overId: string;\r\n    private _clickId: string;\r\n\r\n    childs: Object;\r\n    style: HtmlContainerStyle;\r\n\r\n    childrenHolderClass: string = \"\";\r\n    childrenClass: string = \"\";\r\n    recalculateHeight: boolean = false;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        if (node.hasAttribute(\"id\")) {\r\n            HtmlController.ContainerElementsById[node.getAttribute(\"id\")] = this;\r\n        }\r\n\r\n        /*\r\n         * Style can be define for better usage of html container elements.\r\n         * For example when you want to use same html element with same names on more than one places.\r\n         * Style for container element has to be instance of HtmlContainerStyle\r\n         * @property Style\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Style\")) {\r\n            // get style from loaded resources\r\n            this.style = <HtmlContainerStyle>StyleManager.HtmlStyles[node.getAttribute(\"Style\")];\r\n            if (this.style != null) {\r\n                // parse childs from style\r\n                this.childs = HtmlManager.parseElements(this.style.node, <HtmlElement>this);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.logError(\"ERROR no style with name \" + node.getAttribute(\"Style\"));\r\n                }\r\n            }\r\n        } else {\r\n            // parse childs from node\r\n            this.childs = HtmlManager.parseElements(node, <HtmlElement>this);\r\n        }\r\n\r\n        if (this.childs == null) {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING html container element with name \" + node.nodeName + \" has no children\");\r\n            }\r\n        }\r\n\r\n        /*\r\n         * Attribute OnOver define element which will be react to over event handled from this element.\r\n         * @property OnOver\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"OnOver\")) {\r\n            if (node.hasAttribute(\"OnOverAction\")) {\r\n                var actionEnabled: boolean = HtmlController.Configurations[node.getAttribute(\"OnOverAction\")];\r\n                if (actionEnabled) {\r\n                    this._overId = node.getAttribute(\"OnOver\");\r\n                }\r\n            } else {\r\n                this._overId = node.getAttribute(\"OnOver\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"ChildrenHolderClass\")) {\r\n            this.childrenHolderClass = node.getAttribute(\"ChildrenHolderClass\");\r\n        }\r\n        if (node.hasAttribute(\"ChildrenClass\")) {\r\n            this.childrenClass = node.getAttribute(\"ChildrenClass\");\r\n        }\r\n\r\n        if (node.hasAttribute(\"RecalculateHeight\")) {\r\n            this.recalculateHeight = StringUtils.parseBoolean(node.getAttribute(\"RecalculateHeight\"));\r\n        }\r\n\r\n        if (node.hasAttribute(\"OnClick\")) {\r\n            if (node.hasAttribute(\"OnClickAction\")) {\r\n                this._clickId = node.getAttribute(\"OnClick\");\r\n                this.instance.addEventListener(HtmlContainerElement.CustomClick, this.onCustomClick.bind(this));\r\n            }\r\n        }\r\n\r\n        if (this._overId != null) {\r\n            this.instance.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\r\n            this.instance.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\r\n        }\r\n\r\n        if (node.hasAttribute(\"ActionsHolder\")) {\r\n            HtmlController.registerActionsHoldersElement(node.getAttribute(\"ActionsHolder\"), this);\r\n        }\r\n\r\n        /*\r\n         * Test is html data attribute for automated testing support.\r\n         * @property Test\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Test\")) {\r\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n        }\r\n\r\n        /*\r\n         * Attribute UIDispatcher define element which will be dispatch UI action from this element.\r\n         * @property UIDispatcher\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"UIDispatcher\")) {\r\n            HtmlController.registerUiDispatchElement(node.getAttribute(\"UIDispatcher\"), this);\r\n        }\r\n\r\n        /*\r\n         * Attribute UIActionDispatcher define element which will be dispatch UI action from this element.\r\n         * @property UIActionDispatcher\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"UIActionDispatcher\")) {\r\n            HtmlController.registerUiActionDispatchElement(node.getAttribute(\"UIActionDispatcher\"), this);\r\n        }\r\n\r\n        /**\r\n         * Attribute TouchScroll define element scrollable by touchmove.\r\n         * @type {boolean}\r\n         */\r\n        let touchScroll: boolean = false;\r\n        if (node.hasAttribute(\"TouchScroll\")) {\r\n            touchScroll = StringUtils.parseBoolean(node.getAttribute(\"TouchScroll\"));\r\n        }\r\n\r\n        if (touchScroll) {\r\n            this.enableScrollOnTouchmove();\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    private enableScrollOnTouchmove(): void {\r\n        var allowScrollUp = true;\r\n        var allowScrollDown = true;\r\n        var lastY = 0;\r\n        let self = this;\r\n\r\n        /**\r\n         * On Touchstart event remember init values.\r\n         */\r\n        this.instance.addEventListener(\r\n            \"touchstart\",\r\n            function (event) {\r\n                // Decide enabled direction\r\n                allowScrollUp = this.scrollTop > 0;\r\n                allowScrollDown = this.scrollTop < this.scrollHeight - this.clientHeight;\r\n\r\n                // Remember where the touch started\r\n                lastY = event.touches[0].pageY;\r\n            },\r\n            true,\r\n        );\r\n\r\n        /**\r\n         * On Touchmove event decide if scroll if possible up or down.\r\n         */\r\n        this.instance.addEventListener(\r\n            \"touchmove\",\r\n            function (event) {\r\n                // Action only for one finger touch\r\n                if (event.touches.length === 1) {\r\n                    // Trying move by touch up or down?\r\n                    let up = event.touches[0].pageY > lastY;\r\n                    let down = !up;\r\n                    lastY = event.touches[0].pageY;\r\n\r\n                    // Trying to start past scroller bounds\r\n                    if ((up && allowScrollUp) || (down && allowScrollDown)) {\r\n                        // Stop this event from propagating, lest another object cancel it.\r\n                        event.stopPropagation();\r\n                    } else {\r\n                        // Cancel this event\r\n                        event.preventDefault();\r\n                    }\r\n                }\r\n            },\r\n            true,\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Handler for on over event.\r\n     * @method onOver\r\n     * @return void\r\n     */\r\n    private onOver(): void {\r\n        if (this._overId != null) {\r\n            var element: HTMLElement = document.getElementById(this._overId);\r\n            if (element != null) {\r\n                element.classList.remove(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handler for on out event.\r\n     * @method onOut\r\n     * @return void\r\n     */\r\n    private onOut(): void {\r\n        if (this._overId != null) {\r\n            var element: HTMLElement = document.getElementById(this._overId);\r\n            if (element != null) {\r\n                element.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n    }\r\n\r\n    private onCustomClick(): void {\r\n        if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\r\n            PlayList.play(\"SND_Click\");\r\n            var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\r\n            if (element != null && element.instance != null) {\r\n                if (element.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(\"\");\r\n                    if (element.recalculateHeight) {\r\n                        element.recalculateChildrenHeight(element);\r\n                    }\r\n                    element.reset();\r\n                    element.instance.classList.remove(HtmlController.DisabledClass);\r\n                } else {\r\n                    if (element.recalculateHeight) {\r\n                        element.instance.removeAttribute(\"style\");\r\n                    }\r\n                    element.instance.classList.add(HtmlController.DisabledClass);\r\n                }\r\n                if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n                    document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    recalculateChildrenHeight(element: HtmlContainerElement): void {\r\n        if (element.instance != null && element.childrenHolderClass != \"\" && element.childrenClass != \"\") {\r\n            let holders: NodeListOf<Element> = element.instance.getElementsByClassName(element.childrenHolderClass);\r\n            if (holders[0] != null) {\r\n                let paddingTop: number = parseInt(\r\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-top\"),\r\n                );\r\n                let paddingBottom: number = parseInt(\r\n                    window.getComputedStyle(holders[0], null).getPropertyValue(\"padding-bottom\"),\r\n                );\r\n                let holdersChildren: NodeListOf<Element> = holders[0].getElementsByClassName(element.childrenClass);\r\n                if (holdersChildren != null && holdersChildren.length > 0) {\r\n                    let height: number = paddingTop + paddingBottom;\r\n                    for (let i: number = 0; i < holdersChildren.length; i++) {\r\n                        let itemHeight: number = parseInt(\r\n                            window.getComputedStyle(holdersChildren[i], null).getPropertyValue(\"height\"),\r\n                        );\r\n                        height += itemHeight;\r\n                    }\r\n                    element.instance.style.height = height + \"px\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    changeState(value: boolean): void {\r\n        if (this.instance != null) {\r\n            if (value) {\r\n                this.instance.classList.remove(HtmlController.DisabledClass);\r\n            } else {\r\n                this.instance.classList.add(HtmlController.DisabledClass);\r\n                if (this._clickId != null && HtmlController.ContainerElementsById[this._clickId] != null) {\r\n                    var element: HtmlContainerElement = HtmlController.ContainerElementsById[this._clickId];\r\n                    if (element != null && element.instance != null) {\r\n                        if (!element.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                            if (element.recalculateHeight) {\r\n                                element.instance.removeAttribute(\"style\");\r\n                            }\r\n                            element.instance.classList.add(HtmlController.DisabledClass);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no instance\");\r\n            }\r\n        }\r\n    }\r\n\r\n    reset(): void {}\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlContainerElement.ts\n **/","import { Logger, engineComponent, StringUtils } from \"neo-common\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { Languages } from \"../../Utils/Languages\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { GameApp } from \"../../GameApp\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\n\r\n/**\r\n * HtmlElement handle basic properties for all kind of html elements.\r\n * @class HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlElement {\r\n    data: string;\r\n\r\n    instance: HTMLElement;\r\n\r\n    rid: string;\r\n    ridType: string;\r\n    ridFilter: string;\r\n\r\n    private currentValue: string;\r\n\r\n    constructor(tagName: string = \"div\") {\r\n        if (tagName !== \"\") {\r\n            this.instance = document.createElement(tagName);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        /*\r\n         * CSS id reference.\r\n         * @property id\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"id\")) {\r\n            this.instance.id = node.getAttribute(\"id\");\r\n        }\r\n\r\n        /*\r\n         * Filter text when reach some values. For example NO_ZERO will dont show zero values.\r\n         * @property RidFilter\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"RidFilter\")) {\r\n            this.ridFilter = node.getAttribute(\"RidFilter\");\r\n        }\r\n\r\n        /*\r\n         * RidType is typing for formating text. For example use MONEY to have number on two decimal places.\r\n         * @property RidType\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"RidType\")) {\r\n            this.ridType = node.getAttribute(\"RidType\");\r\n        }\r\n\r\n        /*\r\n         * Rid is key from languages.\r\n         * @property Rid\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Rid\")) {\r\n            this.rid = node.getAttribute(\"Rid\");\r\n            HtmlController.RidElements.push(this);\r\n            this.setText();\r\n        }\r\n\r\n        /*\r\n         * CssClass is html class attribute.\r\n         * @property CssClass\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"CssClass\")) {\r\n            this.instance.className = node.getAttribute(\"CssClass\");\r\n        }\r\n\r\n        /*\r\n         * Test is html data attribute for automated testing support.\r\n         * @property Test\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Test\")) {\r\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n        }\r\n\r\n        /*\r\n         * Data will handle dynamic texts dynamic from system.\r\n         * @property Data\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Data\")) {\r\n            this.data = node.getAttribute(\"Data\");\r\n            HtmlController.registerDataElement(node.getAttribute(\"Data\"), this);\r\n        }\r\n\r\n        if (node.hasAttribute(\"Lang\") && this.instance != null && GameApp.language != null) {\r\n            this.instance.setAttribute(\"Language\", GameApp.language);\r\n        }\r\n\r\n        if (node.hasAttribute(\"ConfigCondition\") && AppContext.gameConfiguration != null) {\r\n            let condition = node.getAttribute(\"ConfigCondition\").split(\"|\");\r\n\r\n            if (condition.length == 2) {\r\n                const config = AppContext.gameConfiguration[condition[0]].toString();\r\n\r\n                if (config != condition[1]) {\r\n                    this.instance.parentElement.removeChild(this.instance);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Set text content to instance if exists\r\n     * @method setText\r\n     * @param value string\r\n     * @return void\r\n     */\r\n    setText(value?: string): void {\r\n        var text: string = \"\";\r\n\r\n        if (value != null) {\r\n            text = value;\r\n            this.currentValue = value;\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            // find out rid from languages if element has rid\r\n            if (this.rid != null) {\r\n                if (Languages.getRid(this.rid) != null) {\r\n                    if (!StringUtils.isNullOrEmpty(text)) {\r\n                        var texts: Array<string> = text.split(\";\");\r\n                        if (texts.length === 2) {\r\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\r\n                        } else {\r\n                            text = Languages.getRid(this.rid, text);\r\n                        }\r\n                    } else {\r\n                        text = Languages.getRid(this.rid);\r\n                    }\r\n                }\r\n            }\r\n\r\n            // format text with ridType\r\n            if (this.ridType != null) {\r\n                text = Languages.formatText(this.ridType, text);\r\n            }\r\n\r\n            // filter text based on rid filter\r\n            if (this.ridFilter != null) {\r\n                text = Languages.filterText(this.ridFilter, text);\r\n\r\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n                    if (text === \"\") {\r\n                        this.instance.classList.add(\"_hidden\");\r\n                    } else {\r\n                        this.instance.classList.remove(\"_hidden\");\r\n                    }\r\n                }\r\n            }\r\n\r\n            // set text to instance\r\n            this.instance.innerHTML = text;\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no instance\");\r\n            }\r\n        }\r\n    }\r\n\r\n    updateText(): void {\r\n        var text: string = \"\";\r\n\r\n        if (this.currentValue != null) {\r\n            text = this.currentValue;\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            // find out rid from languages if element has rid\r\n            if (this.rid != null) {\r\n                if (Languages.getRid(this.rid) != null) {\r\n                    if (!StringUtils.isNullOrEmpty(text)) {\r\n                        var texts: Array<string> = text.split(\";\");\r\n                        if (texts.length === 2) {\r\n                            text = Languages.getRid(this.rid, texts[0], texts[1]);\r\n                        } else {\r\n                            text = Languages.getRid(this.rid, text);\r\n                        }\r\n                    } else {\r\n                        text = Languages.getRid(this.rid);\r\n                    }\r\n                }\r\n            }\r\n\r\n            // format text with ridType\r\n            if (this.ridType != null) {\r\n                text = Languages.formatText(this.ridType, text);\r\n            }\r\n\r\n            // filter text based on rid filter\r\n            if (this.ridFilter != null) {\r\n                text = Languages.filterText(this.ridFilter, text);\r\n\r\n                if (this.ridFilter === Languages.FilterNoZero && this.instance.classList.contains(\"bonus\")) {\r\n                    if (text === \"\") {\r\n                        this.instance.classList.add(\"_hidden\");\r\n                    } else {\r\n                        this.instance.classList.remove(\"_hidden\");\r\n                    }\r\n                }\r\n            }\r\n\r\n            // set text to instance\r\n            this.instance.innerHTML = text;\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no instance\");\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlElement.ts\n **/","import { Logger, Utils } from \"neo-common\";\r\n\r\nexport type ActionsTypes = { [action: string]: boolean };\r\n\r\n/**\r\n * @type BatchUpdatesFunction - predicate function where is able to do multiple batched actions changes and\r\n * only after on updates ends, event 'onChange' is triggered once!\r\n * @returns true if where was any changes, false if there was not changes (and thus no 'onChange' is called on end)\r\n */\r\nexport type BatchUpdatesFunction = (actions: IActionSet) => boolean | void;\r\n\r\nexport interface IActionSet {\r\n    changeActionState(action: string, value: boolean): boolean;\r\n}\r\n\r\n/**\r\n * @class ActionsData - List of actions and its states.\r\n */\r\nexport class ActionSet implements IActionSet {\r\n    private _setName: string;\r\n    private _owner: string;\r\n    private _actions: ActionsTypes = {};\r\n    private _batchUpdatesActive: boolean;\r\n    private _onChange: Function;\r\n    private _readonly: boolean;\r\n\r\n    constructor(setName: string, owner: string) {\r\n        this._setName = setName;\r\n        this._owner = owner;\r\n        this._batchUpdatesActive = false;\r\n        this._readonly = false;\r\n\r\n        this.registerActions = this.registerActions.bind(this);\r\n        this.registerAction = this.registerAction.bind(this);\r\n        this.changeActionState = this.changeActionState.bind(this);\r\n        this.getActionState = this.getActionState.bind(this);\r\n        this.getAllActions = this.getAllActions.bind(this);\r\n        this.batchUpdates = this.batchUpdates.bind(this);\r\n        this.disableAllActions = this.disableAllActions.bind(this);\r\n        this.invokeOnChange = this.invokeOnChange.bind(this);\r\n    }\r\n\r\n    public get onChange(): Function {\r\n        return this._onChange;\r\n    }\r\n\r\n    public set onChange(value: Function) {\r\n        this._onChange = value;\r\n    }\r\n\r\n    private log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(this._owner, `[${this._setName}] ` + s);\r\n        }\r\n    }\r\n\r\n    private logError(s: string, e?: Error): void {\r\n        if (DEBUG) {\r\n            Logger.errorGroup(this._owner, e, `[${this._setName}] ` + s);\r\n        }\r\n    }\r\n\r\n    private invokeOnChange(): void {\r\n        if (this._onChange && !this._batchUpdatesActive) {\r\n            try {\r\n                this.onChange();\r\n            } catch (e) {\r\n                if (DEBUG) {\r\n                    this.logError(\"invokeOnChange\", e);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private checkForReadonly(): void {\r\n        if (this._readonly) {\r\n            throw new Error(`ActionSet \"${this._owner}\" [${this._setName}] is readonly!`);\r\n        }\r\n    }\r\n\r\n    private beginBatchUpdates(): void {\r\n        this.checkForReadonly();\r\n\r\n        if (this._batchUpdatesActive) {\r\n            throw new Error(`\"${this._owner}\" [${this._setName}] Other batch updates is in pending state!`);\r\n        }\r\n\r\n        this._batchUpdatesActive = true;\r\n    }\r\n\r\n    private endBatchUpdates(hasChanges: boolean): void {\r\n        this.checkForReadonly();\r\n\r\n        this._batchUpdatesActive = false;\r\n\r\n        // when return is null or undefined we assume that something HAS changed (return bool was forgotten?)\r\n        if (Utils.isNullOrUndefined(hasChanges)) {\r\n            hasChanges = true;\r\n        }\r\n\r\n        if (hasChanges) {\r\n            this.invokeOnChange();\r\n        }\r\n    }\r\n\r\n    public batchUpdates(updateFn: BatchUpdatesFunction): void {\r\n        this.beginBatchUpdates();\r\n\r\n        var hasChanges: boolean;\r\n        try {\r\n            hasChanges = updateFn(this) as boolean;\r\n        } finally {\r\n            this.endBatchUpdates(hasChanges);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method registerActions - registers multiple actions at once, on end event 'onChange' is triggered.\r\n     * @param actions - list of actions with its initial state value.\r\n     */\r\n    public registerActions(actions: ActionsTypes): void {\r\n        this.beginBatchUpdates();\r\n\r\n        try {\r\n            for (var key in actions) {\r\n                if (actions.hasOwnProperty(key)) {\r\n                    this.registerAction(key, actions[key]);\r\n                }\r\n            }\r\n        } finally {\r\n            this.endBatchUpdates(true);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Register game action for specific controller and add him default value.\r\n     * @method registerAction\r\n     * @param action string name of action\r\n     * @param value boolean default value false\r\n     * @return true if successfully registered, otherwise returns false\r\n     */\r\n    private registerAction(action: string, value: boolean = false): boolean {\r\n        this.checkForReadonly();\r\n\r\n        var notExist = Utils.isNullOrUndefined(this._actions[action]);\r\n        if (notExist) {\r\n            this._actions[action] = value;\r\n\r\n            this.invokeOnChange();\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\r\n                    `[changeActionState] Could not register action '${action}', action was already registered!` +\r\n                        ` all actions: ${JSON.stringify(this._actions)}`,\r\n                );\r\n            }\r\n        }\r\n\r\n        return notExist;\r\n    }\r\n\r\n    /**\r\n     * @method changeActionStates - change value to multiple actions at once, after which event 'onChange' is triggered.\r\n     * @param actionNames\r\n     * @param value\r\n     */\r\n    public changeActionStates(actions: ActionsTypes): void;\r\n    public changeActionStates(value: boolean, actionNames: Array<string>): void;\r\n    public changeActionStates(actionsOrValue: boolean | ActionsTypes, actionNames?: Array<string>): void {\r\n        this.beginBatchUpdates();\r\n\r\n        try {\r\n            var hasValue = typeof actionsOrValue === \"boolean\";\r\n            if (hasValue) {\r\n                for (var i = 0; i < actionNames.length; i++) {\r\n                    var action = actionNames[i];\r\n                    this.changeActionState(action, actionsOrValue as boolean);\r\n                }\r\n            } else {\r\n                for (var key in actionsOrValue as ActionsTypes) {\r\n                    if ((actionsOrValue as ActionsTypes).hasOwnProperty(key)) {\r\n                        this.changeActionState(key, (actionsOrValue as ActionsTypes)[key]);\r\n                    }\r\n                }\r\n            }\r\n        } finally {\r\n            this.endBatchUpdates(true);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Change value for specific action.\r\n     * @method changeActionState\r\n     * @param action string name of action\r\n     * @param value boolean\r\n     * @return true when state was successfully changed, otherwise returns false\r\n     */\r\n    public changeActionState(action: string, value: boolean): boolean {\r\n        this.checkForReadonly();\r\n\r\n        var exist = !Utils.isNullOrUndefined(this._actions[action]);\r\n\r\n        if (exist) {\r\n            this._actions[action] = value;\r\n\r\n            this.invokeOnChange();\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\r\n                    `[changeActionState] Could not change action '${action}' value to '${value}', action was not registered!` +\r\n                        ` all actions: ${JSON.stringify(this._actions)}`,\r\n                );\r\n            }\r\n        }\r\n\r\n        return exist;\r\n    }\r\n\r\n    /**\r\n     * Get action state (true - action is enabled, false - action is disabled)\r\n     * @method getActionState\r\n     * @param action string name of action\r\n     * @return boolean\r\n     */\r\n    public getActionState(action: string): boolean {\r\n        if (this._actions[action] != null) {\r\n            return this._actions[action];\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\r\n                    `[changeActionState] Could not get action '${action}' value, action was not registered!` +\r\n                        ` all actions: ${JSON.stringify(this._actions)}`,\r\n                );\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Return all actions with states.\r\n     * @method getAllActions\r\n     * @return Object\r\n     */\r\n    public getAllActions(): ActionsTypes {\r\n        return this._actions;\r\n    }\r\n\r\n    /**\r\n     * clone action set to new instance and is returned as readonly by default\r\n     */\r\n    public clone(readonly?: boolean): ActionSet {\r\n        var cloned = new ActionSet(this._setName, this._owner);\r\n\r\n        for (var key in this._actions) {\r\n            if (this._actions.hasOwnProperty(key)) {\r\n                cloned.registerAction(key, this._actions[key]);\r\n            }\r\n        }\r\n\r\n        cloned._readonly = Utils.valueOrDefault(readonly, true);\r\n        return cloned;\r\n    }\r\n\r\n    /**\r\n     * Add value false for all action. Use this method for example after dispatch spin action.\r\n     * @method disableAllActions\r\n     * @return void\r\n     */\r\n    public disableAllActions(): void {\r\n        this.beginBatchUpdates();\r\n\r\n        try {\r\n            for (var key in this._actions) {\r\n                this._actions[key] = false;\r\n            }\r\n        } finally {\r\n            this.endBatchUpdates(true);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/ActionSet.ts\n **/","export class GambleActions {\r\n    static ActionGambleStart: string = \"GAMBLE_START\";\r\n    static ActionGambleRed: string = \"GAMBLE_RED\";\r\n    static ActionGambleBlack: string = \"GAMBLE_BLACK\";\r\n    static ActionGambleHalve: string = \"GAMBLE_HALVE\";\r\n    static ActionGambleCollect: string = \"GAMBLE_COLLECT\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GambleActions.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { Controller } from \"../Controller\";\r\nimport { GambleModel } from \"./GambleModel\";\r\nimport { GambleView } from \"./GambleView\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n@engineComponent(ComponentTypes.Controller)\r\nexport class GambleController extends Controller {\r\n    public static readonly StartReceived: string = \"eventStartReceived\";\r\n    public static readonly HalveReceived: string = \"eventHalveReceived\";\r\n    public static readonly SelectReceived: string = \"eventSelectReceived\";\r\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\r\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\r\n    public static readonly Lose: string = \"eventLose\";\r\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\r\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\r\n\r\n    protected _view: GambleView;\r\n    protected _model: GambleModel;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    startInitialization(view: any): void {\r\n        if (DEBUG) {\r\n            this.log(\"startInitialization\");\r\n        }\r\n\r\n        if (view instanceof GambleView) {\r\n            this._view = view;\r\n        } else {\r\n            this.log(\"ERROR view is not instance of GambleView\");\r\n        }\r\n\r\n        this._model = new GambleModel(this);\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._view.initReceived(this);\r\n    }\r\n\r\n    initIntro(): void {\r\n        this._view.initIntro();\r\n    }\r\n\r\n    start(): void {\r\n        this._model.start();\r\n    }\r\n\r\n    startReceived(): void {\r\n        this._view.startReceived();\r\n        this.emit(GambleController.StartReceived);\r\n    }\r\n\r\n    select(color: Communication.Game.Color): void {\r\n        this._model.select(color);\r\n    }\r\n\r\n    selectReceived(): void {\r\n        this._view.selectReceived();\r\n        this.emit(GambleController.SelectReceived);\r\n    }\r\n\r\n    halve(): void {\r\n        this._model.halve();\r\n    }\r\n\r\n    halveReceived(): void {\r\n        this.emit(GambleController.HalveReceived);\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        this.emit(GambleController.WinCalculationFinished);\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        this.emit(GambleController.AllWinsFinished);\r\n    }\r\n\r\n    lose(): void {\r\n        this.emit(GambleController.Lose);\r\n    }\r\n\r\n    intro(): void {\r\n        this._view.intro();\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.emit(GambleController.IntroFinished);\r\n    }\r\n\r\n    outro(): void {\r\n        this._view.outro();\r\n    }\r\n\r\n    outroFinished(): void {\r\n        this.emit(GambleController.OutroFinished);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleController.ts\n **/","import { Logger } from \"neo-common\";\r\n\r\nexport class Controller extends PIXI.utils.EventEmitter {\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            const compName = (this as any).__componentName__;\r\n\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Controller.ts\n **/","import { Utils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { GambleController } from \"./GambleController\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { MessageManager } from \"../../Managers/MessageManager\";\r\n\r\nexport class GambleModel {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected controller: GambleController;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(controller: GambleController) {\r\n        this.controller = controller;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REQUESTS\r\n    //******************************************************************************************************************\r\n\r\n    public start(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient.start(Communication.Game.GameModules.Gamble).then((response: any): any => {\r\n            MessageManager.postpone(this.startReceived.bind(this), response);\r\n        });\r\n    }\r\n\r\n    public select(color: Communication.Game.Color): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient.gambleSelect(color).then((response: any): any => {\r\n            MessageManager.postpone(this.selectReceived.bind(this), response);\r\n        });\r\n    }\r\n\r\n    public halve(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient.gambleHalve(Communication.Game.GameModules.Gamble).then((response: any): any => {\r\n            MessageManager.postpone(this.halveReceived.bind(this), response);\r\n        });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  RESPONSES\r\n    //******************************************************************************************************************\r\n\r\n    protected startReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.startReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    protected selectReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.selectReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    protected halveReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.halveReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleModel.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { GambleController } from \"./GambleController\";\r\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../../HTMLComponents/Elements/HtmlContainerElement\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class GambleView extends ContainerElement {\r\n    private _controller: GambleController;\r\n\r\n    private _gambleControls: HTMLElement;\r\n    private _gambleRedBtn: HTMLElement;\r\n    private _gambleBlackBtn: HTMLElement;\r\n    private _gambleActualCard: HTMLElement;\r\n    private _gambleCardBack: HTMLElement;\r\n    private _gambleWin: HTMLElement;\r\n    private _gambleWin2: HTMLElement;\r\n    private _previousCards: Array<HTMLElement>;\r\n\r\n    private _actualColor: string;\r\n\r\n    private _revealTimer: FrameTimerEventEmitter;\r\n    private _revealBackTimer: FrameTimerEventEmitter;\r\n    private _winTimer: FrameTimerEventEmitter;\r\n    private _loseTimer: FrameTimerEventEmitter;\r\n    private _introDelayTimer: FrameTimerEventEmitter;\r\n    private _introSoundTimer: FrameTimerEventEmitter;\r\n    private _outroDelayTimer: FrameTimerEventEmitter;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._revealTimer = CreateFrameTimer(\"revealTimer\");\r\n        this._revealTimer.on(FrameTimerEvents.Complete, this.reveal.bind(this));\r\n\r\n        this._revealBackTimer = CreateFrameTimer(\"revealTimer\");\r\n        this._revealBackTimer.on(FrameTimerEvents.Complete, this.revealBack.bind(this));\r\n\r\n        this._winTimer = CreateFrameTimer(\"revealTimer\");\r\n        this._winTimer.on(FrameTimerEvents.Complete, this.win.bind(this));\r\n\r\n        this._loseTimer = CreateFrameTimer(\"revealTimer\");\r\n        this._loseTimer.on(FrameTimerEvents.Complete, this.lose.bind(this));\r\n\r\n        this._introDelayTimer = CreateFrameTimer(\"introDelayTimer\");\r\n        this._introDelayTimer.on(FrameTimerEvents.Complete, this.introDelayed.bind(this));\r\n\r\n        this._introSoundTimer = CreateFrameTimer(\"introSoundTimer\");\r\n        this._introSoundTimer.on(FrameTimerEvents.Complete, this.introSoundStart.bind(this));\r\n\r\n        this._outroDelayTimer = CreateFrameTimer(\"revealTimer\");\r\n        this._outroDelayTimer.on(FrameTimerEvents.Complete, this.outroDelayed.bind(this));\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n    }\r\n\r\n    initReceived(controller: GambleController): void {\r\n        this._controller = controller;\r\n\r\n        this._gambleControls = document.getElementById(\"gamble\");\r\n\r\n        if (this._gambleControls == null) {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no gamble controlls\");\r\n            }\r\n        }\r\n\r\n        this._gambleActualCard = document.getElementById(\"gambleActualCard\");\r\n        if (this._gambleActualCard == null) {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no gambleActualCard\");\r\n            }\r\n        }\r\n\r\n        this._gambleCardBack = document.getElementById(\"gambleCardBack\");\r\n        if (this._gambleCardBack == null) {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no gambleCardBack\");\r\n            }\r\n        }\r\n\r\n        this._gambleWin = document.getElementById(\"gambleWin\");\r\n        if (this._gambleWin == null) {\r\n            this._gambleWin = document.getElementById(\"winBox\");\r\n            if (this._gambleWin == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no gambleWin\");\r\n                }\r\n            }\r\n        }\r\n\r\n        this._gambleWin2 = document.getElementById(\"winBox2\");\r\n        if (this._gambleWin2 == null) {\r\n            if (this._gambleWin2 == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no _gambleWin2\");\r\n                }\r\n            }\r\n        }\r\n\r\n        this._gambleRedBtn = document.getElementById(\"gambleRedBtn\");\r\n        this._gambleBlackBtn = document.getElementById(\"gambleBlackBtn\");\r\n        if (this._gambleRedBtn != null && this._gambleBlackBtn != null) {\r\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\r\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\r\n            this._gambleRedBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Over, this.onOver.bind(this));\r\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchStart, this.onOver.bind(this));\r\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.Out, this.onOut.bind(this));\r\n            this._gambleBlackBtn.addEventListener(HtmlContainerElement.TouchEnd, this.onOut.bind(this));\r\n        }\r\n\r\n        this._previousCards = [];\r\n        for (let i: number = 0; i < 5; i++) {\r\n            let card: HTMLElement = document.getElementById(\"previousCard\" + i);\r\n            if (card != null) {\r\n                this._previousCards.push(card);\r\n            }\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        this.previousCards();\r\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\r\n            this._gambleControls.style.display = \"block\";\r\n        }\r\n        PlayList.loop(\"SND_GambleLoop\");\r\n    }\r\n\r\n    private onOver(): void {\r\n        if (this._gambleRedBtn != null && !this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n            this._gambleRedBtn.classList.add(\"_hover\");\r\n        }\r\n        if (this._gambleBlackBtn != null && !this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n            this._gambleBlackBtn.classList.add(\"_hover\");\r\n        }\r\n    }\r\n\r\n    private onOut(): void {\r\n        if (this._gambleRedBtn != null && this._gambleRedBtn.classList.contains(\"_hover\")) {\r\n            this._gambleRedBtn.classList.remove(\"_hover\");\r\n        }\r\n        if (this._gambleBlackBtn != null && this._gambleBlackBtn.classList.contains(\"_hover\")) {\r\n            this._gambleBlackBtn.classList.remove(\"_hover\");\r\n        }\r\n    }\r\n\r\n    startReceived(): void {\r\n        this.previousCards();\r\n    }\r\n\r\n    selectReceived(): void {\r\n        if (GameManager.gambleResponse.currentCard != null) {\r\n            if (this._gambleActualCard != null && this._gambleCardBack != null) {\r\n                this._gambleCardBack.classList.remove(\"_CA\");\r\n                this._gambleCardBack.classList.remove(\"_DA\");\r\n                this._gambleCardBack.classList.remove(\"_HA\");\r\n                this._gambleCardBack.classList.remove(\"_SA\");\r\n                this._gambleCardBack.classList.remove(\"_JR\");\r\n                this._gambleCardBack.classList.add(\"_\" + GameManager.gambleResponse.currentCard);\r\n                this._gambleActualCard.classList.add(\"_reveal\");\r\n\r\n                if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\r\n                    this._revealTimer.start(30);\r\n                } else {\r\n                    this._revealTimer.start(60);\r\n                }\r\n\r\n                PlayList.play(\"SND_GambleDraw\");\r\n            }\r\n        }\r\n    }\r\n    private previousCards(): void {\r\n        if (this._previousCards != null && GameManager.gambleResponse.previousCards != null) {\r\n            for (var i: number = 0; i < GameManager.gambleResponse.previousCards.length; i++) {\r\n                var card: HTMLElement = this._previousCards[i];\r\n                if (card != null) {\r\n                    card.classList.remove(\"_CA\");\r\n                    card.classList.remove(\"_DA\");\r\n                    card.classList.remove(\"_HA\");\r\n                    card.classList.remove(\"_SA\");\r\n                    card.classList.remove(\"_JR\");\r\n                    if (GameManager.gambleResponse.previousCards[i] != \"XX\") {\r\n                        card.classList.add(\"_\" + GameManager.gambleResponse.previousCards[i]);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    reAnimate(color: string): boolean {\r\n        if (this._gambleActualCard != null && this._gambleActualCard.classList.contains(\"_reveal\")) {\r\n            this._actualColor = color;\r\n            this._gambleActualCard.classList.remove(\"_reveal\");\r\n\r\n            PlayList.play(\"SND_GambleDraw\");\r\n\r\n            this._revealBackTimer.start(30);\r\n            return false;\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    disabled(): void {\r\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    intro(): void {\r\n        this._introDelayTimer.start(1);\r\n        if (this._gambleControls != null) {\r\n            this._gambleControls.style.display = \"block\";\r\n        }\r\n    }\r\n\r\n    private introDelayed(): void {\r\n        this._introDelayTimer.stop();\r\n        if (this._gambleControls != null && this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._gambleControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n        PlayList.play(\"SND_Transition\");\r\n        this._introSoundTimer.start(30);\r\n    }\r\n\r\n    private introSoundStart(): void {\r\n        this._introSoundTimer.stop();\r\n        PlayList.loop(\"SND_GambleLoop\");\r\n        this._controller.introFinished();\r\n    }\r\n\r\n    outro(): void {\r\n        //timer set to 0 becaouse of gamble outro animation\r\n        this._outroDelayTimer.start(30);\r\n        if (this._gambleControls != null && !this._gambleControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._gambleControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n        PlayList.play(\"SND_Transition\");\r\n        PlayList.stop(\"SND_GambleLoop\");\r\n    }\r\n\r\n    private outroDelayed(): void {\r\n        this._outroDelayTimer.stop();\r\n        if (this._gambleControls != null) {\r\n            this._gambleControls.style.display = \"none\";\r\n        }\r\n        this._controller.outroFinished();\r\n    }\r\n\r\n    reveal(): void {\r\n        this._revealTimer.stop();\r\n        this.previousCards();\r\n        this._controller.winCalculationFinished();\r\n\r\n        if (GameManager.gambleResponse != null && GameManager.gambleResponse.currentWin > 0) {\r\n            this._gambleActualCard.classList.remove(\"_reveal\");\r\n            PlayList.play(\"SND_GambleWin\");\r\n            if (this._gambleWin != null && !this._gambleWin.classList.contains(\"winAnimation\")) {\r\n                this._gambleWin.classList.add(\"winAnimation\");\r\n            }\r\n            if (this._gambleWin2 != null && !this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n                this._gambleWin2.classList.add(\"winAnimation\");\r\n            }\r\n            this._winTimer.start(15);\r\n        } else {\r\n            this._gambleActualCard.classList.remove(\"_reveal\");\r\n            this._revealBackTimer.start(30);\r\n            this._loseTimer.start(30);\r\n        }\r\n    }\r\n\r\n    revealBack(): void {\r\n        this.onOut(); //remove _hover class\r\n        this._revealBackTimer.stop();\r\n    }\r\n\r\n    win(): void {\r\n        this._winTimer.stop();\r\n        this._revealBackTimer.start(5);\r\n        if (this._gambleWin != null && this._gambleWin.classList.contains(\"winAnimation\")) {\r\n            this._gambleWin.classList.remove(\"winAnimation\");\r\n        }\r\n        if (this._gambleWin2 != null && this._gambleWin2.classList.contains(\"winAnimation\")) {\r\n            this._gambleWin2.classList.remove(\"winAnimation\");\r\n        }\r\n        this._controller.allWinsFinished();\r\n    }\r\n\r\n    lose(): void {\r\n        this._loseTimer.stop();\r\n        this._controller.lose();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Gamble/GambleView.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { ContainerStyle } from \"../Styles/ContainerStyle\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { CanvasManager } from \"../../Managers/CanvasManager\";\r\nimport { HtmlManager } from \"../../Managers/HtmlManager\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\n\r\n/**\r\n * ContainerElement class is class which creates holder for other elements.\r\n * Container element can be used for grouping more display objects and better organization in xmls.\r\n * Can be defined also by Style with class ContainerStyle.\r\n * Example 1:\r\n *   <ContainerElement Class=\"ContainerElement\" X=\"0\" Y=\"0\">\r\n *       <Child1 />\r\n *       <Child2 />\r\n *       ...\r\n *       <ChildX />\r\n *   </ContainerElement>\r\n *\r\n * Example 2:\r\n *   <ContainerElement Class=\"ContainerElement\" Style=\"ContainerStyle\" />\r\n *\r\n * @class ContainerElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ContainerElement extends BaseElement {\r\n    // style is optional in this element\r\n    style: ContainerStyle;\r\n    // list of children\r\n    childs: Object;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs.hasOwnProperty(key)) {\r\n                    if (this.childs[key] instanceof PIXI.DisplayObject) {\r\n                        this.childs[key].destroy(options);\r\n                    }\r\n                    this.childs[key] = null;\r\n                }\r\n            }\r\n\r\n            this.childs = null;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    public createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        /*\r\n         * Style can be define for better usage of container elements.\r\n         * For example when you want to use same display objects with same names on more than one places.\r\n         * Style for container element has to be instance of ContainerStyle.\r\n         * @property Style\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(ContainerElementAttributes.STYLE)) {\r\n            // get style from StyleManager\r\n            this.style = <ContainerStyle>StyleManager.Styles[node.getAttribute(ContainerElementAttributes.STYLE)];\r\n            if (this.style != null) {\r\n                // parse childs from style\r\n                if (this.childs == null) {\r\n                    this.childs = CanvasManager.parseElements(this.style.node, this);\r\n                    HtmlManager.parseElements(this.style.node, null);\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no style with name \" + node.getAttribute(ContainerElementAttributes.STYLE));\r\n                }\r\n            }\r\n        } else {\r\n            // parse childs from node\r\n            if (this.childs == null) {\r\n                this.childs = CanvasManager.parseElements(node, this);\r\n                HtmlManager.parseElements(node, null);\r\n            }\r\n        }\r\n\r\n        if (this.childs == null) {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING container element with name \" + node.nodeName + \" has no children\");\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return ContainerElement\r\n     */\r\n    clone(): ContainerElement {\r\n        let element: ContainerElement = new ContainerElement();\r\n\r\n        element.style = this.style;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        element.name = this.name;\r\n\r\n        element.childs = {};\r\n        element.removeChildren();\r\n        for (let key in this.childs) {\r\n            element.childs[key] = this.childs[key].clone();\r\n            element.addChild(element.childs[key]);\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n            let elementMask = <ShapeElement>this.maskGraphics.clone();\r\n            elementMask.position.x = this.maskGraphics.position.x;\r\n            elementMask.position.y = this.maskGraphics.position.y;\r\n\r\n            element.maskGraphics = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nconst ContainerElementAttributes = {\r\n    DEBUG: \"Debug\",\r\n    /**\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    STYLE: \"Style\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ContainerElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\r\nimport { UserControls } from \"../Common/UserControls/UserControls\";\r\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { Paytable } from \"../Common/Paytable/Paytable\";\r\nimport { GameData } from \"../Common/Datas/GameData\";\r\nimport { GameActions } from \"../Common/Actions/GameActions\";\r\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\r\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\r\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\r\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\r\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { Languages } from \"../../Utils/Languages\";\r\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\r\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\r\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class DesktopBaseUserControls extends UserControls {\r\n    protected _controller: BaseController;\r\n\r\n    private _userControls: HTMLElement;\r\n    private _userControls_supreme: HTMLElement;\r\n    private _paytable: Paytable;\r\n    private _afterWinDelay: FrameTimerEventEmitter;\r\n    private _autoplayDelay: FrameTimerEventEmitter;\r\n\r\n    private _wasCalclulated: boolean = true;\r\n    private _unColectedWin: number = 0;\r\n    private _unColectedWinDelay: FrameTimerEventEmitter;\r\n    private _machineStopped: boolean = true;\r\n    private longIntro: boolean = false;\r\n\r\n    //private _respinDelay: FrameTimerEventEmitter;\r\n\r\n    constructor() {\r\n        super(\"base\");\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.registerActions();\r\n\r\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\r\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\r\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\r\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\r\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\r\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\r\n        // this._respinDelay = CreateFrameTimer('respinDelay');\r\n        // this._respinDelay.on(FrameTimerEvents.Complete, this.respin.bind(this));\r\n\r\n        this._userControls = document.getElementById(\"userControls\");\r\n    }\r\n\r\n    addController(controller: BaseController): void {\r\n        this._controller = controller;\r\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\r\n        //this._controller.on(BaseController.RespinReceived, this.respinReceived.bind(this));\r\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\r\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\r\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\r\n        this._controller.on(BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n        this._controller.on(BaseController.MachineStoppedWithAnimation, this.machineStoppedWithAnimation.bind(this));\r\n\r\n        //this._controller.on(BaseController.RunRespin, this.runRespin.bind(this));\r\n    }\r\n\r\n    registerActions(): void {\r\n        this.actions.registerActions({\r\n            [BaseActions.ActionAutoplay]: false,\r\n            [BaseActions.ActionAutoplayStop]: false,\r\n            [BaseActions.ActionBaseCollect]: false,\r\n            [BaseActions.ActionBetPlus]: false,\r\n            [BaseActions.ActionBetMinus]: false,\r\n            [BaseActions.ActionMaxBet]: false,\r\n            [BaseActions.ActionSpin]: false,\r\n            [BaseActions.ActionSpinStop]: false,\r\n        });\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\r\n        super.initReceived();\r\n\r\n        this._controller.initReceived();\r\n\r\n        this._paytable = new Paytable();\r\n        this._paytable.initialize();\r\n\r\n        if (GameManager.gameResponse != null) {\r\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataTotalWin,\r\n                    GameManager.gameResponse.totalWin.toString(),\r\n                );\r\n            }\r\n        }\r\n\r\n        if (this._userControls != null && !ModuleManager.gambleActive()) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null && !ModuleManager.gambleActive()) {\r\n            this._userControls_supreme.style.display = \"none\";\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this._userControls.style.display = \"none\";\r\n            this._userControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n\r\n        DataManager.updateDataElements();\r\n    }\r\n\r\n    collectReceived(): void {\r\n        FreeRoundBonus.enableUi();\r\n        Platforms.Platforms.roundEnded({\r\n            id: GameManager.gameResponse.roundId,\r\n            win: this._unColectedWin,\r\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n        });\r\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\r\n\r\n        super.collectReceived();\r\n\r\n        this._wasCalclulated = true;\r\n        DataManager.Collectable = true;\r\n        DataManager.updateDataElements();\r\n\r\n        this.prepareNewGameRound();\r\n\r\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\r\n            this.changeWinBox(true);\r\n        } else {\r\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            }\r\n            this.changeWinBox();\r\n        }\r\n        this._unColectedWinDelay.stop();\r\n        //this._unColectedWinDelay.start(75);\r\n        this._unColectedWin = 0;\r\n\r\n        if (FreeRoundBonus.isLastFrb) {\r\n            FreeRoundBonus.endFreeRounds();\r\n            ModuleManager.disableBase();\r\n            return;\r\n        }\r\n    }\r\n\r\n    restoreGameRound(collect: boolean = false): void {\r\n        super.collectReceived();\r\n        this.changeWinBox(collect);\r\n\r\n        FreeRoundBonus.enableUi();\r\n\r\n        DataManager.Collectable = true;\r\n\r\n        if (this._unColectedWin == 0) {\r\n            this._controller.resetWinAnimator();\r\n        }\r\n        this.prepareNewGameRound();\r\n        this.updateReelsByBetChange();\r\n    }\r\n\r\n    spinReceived(): void {\r\n        FreeRoundBonus.frbSpin();\r\n\r\n        if (DataManager.quickspinEnabled()) {\r\n            // auto quick stop\r\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            HtmlController.dispatchUiAction(\"\");\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BaseActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n        }\r\n    }\r\n\r\n    // respinReceived(): void\r\n    // {\r\n    //     this.actions.changeActionState(BaseActions.ActionSpinStop, AppContext.gameConfiguration.GameEnableReelsStop);\r\n    //     HtmlController.updateActionElements(this.getAllActions());\r\n    //     DataManager.updateDataElement(GameData.DataRoundId);\r\n    // }\r\n\r\n    dispatchAction(action: string): void {\r\n        if (ModuleManager.gambleActive()) {\r\n            return;\r\n        }\r\n\r\n        if (action === GameActions.ActionSpinOrStop) {\r\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\r\n                action = BaseActions.ActionSpin;\r\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\r\n                action = BaseActions.ActionSpinStop;\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.actions.getActionState(action)) {\r\n            if (action === BaseActions.ActionBaseCollect) {\r\n                this.changeWinBox(true);\r\n            } else {\r\n                this.changeWinBox();\r\n            }\r\n\r\n            PlayList.play(\"SND_Click\");\r\n            super.dispatchAction(action);\r\n\r\n            switch (action) {\r\n                case BaseActions.ActionSpin:\r\n                    this.spin();\r\n                    break;\r\n                case BaseActions.ActionSpinStop:\r\n                    this.stop();\r\n                    break;\r\n                case BaseActions.ActionAutoplay:\r\n                    this.autoplay();\r\n                    break;\r\n                case BaseActions.ActionAutoplayStop:\r\n                    this.autoplayStop();\r\n                    break;\r\n                case BaseActions.ActionMaxBet:\r\n                    this.changeBet(false, true, false);\r\n                    break;\r\n                case BaseActions.ActionBetPlus:\r\n                    this.changeBet(false, false, false);\r\n                    break;\r\n                case BaseActions.ActionBetMinus:\r\n                    this.changeBet(true, false, false);\r\n                    break;\r\n                case BaseActions.ActionBaseCollect:\r\n                    this.collect();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    collect(): void {\r\n        if (!this._wasCalclulated) {\r\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\r\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n            }\r\n        }\r\n\r\n        super.collect();\r\n\r\n        ModuleManager.disableGamble();\r\n        this.disable();\r\n        this.playCollectSound();\r\n\r\n        this._controller.collect();\r\n\r\n        LimitDialog.closeDialog();\r\n        GameManager.collect(GameModules.Base);\r\n\r\n        if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElement(\r\n                GameData.DataTotalWin,\r\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\r\n            );\r\n        }\r\n        //this._unColectedWinDelay.start(75);\r\n    }\r\n\r\n    unColectedWinDelay(): void {\r\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n    }\r\n\r\n    spin(): void {\r\n        this._machineStopped = false;\r\n\r\n        FreeRoundBonus.disableUi();\r\n        if (FreeRoundBonus.hasNewActiveOffer()) {\r\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                FreeRoundBonus.enableUi();\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (this.checkJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n            !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\r\n        ) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                GameManager.canExit();\r\n                this.changeWinBox();\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (BetHigherThanMinDialog.canOpenDialog()) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            }\r\n            BetHigherThanMinDialog.openDialog();\r\n            return;\r\n        }\r\n\r\n        if (Paytable.shouldOpen(true, true)) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                Paytable.show();\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (\r\n            !DataManager.Autoplay &&\r\n            !this._wasCalclulated &&\r\n            !DataManager.GameRoundClosed &&\r\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\r\n        ) {\r\n            this.changeWinBox(true);\r\n            this.collect();\r\n            return;\r\n        } else {\r\n            this.changeWinBox();\r\n            if (!this._wasCalclulated) {\r\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\r\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n                }\r\n            }\r\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && this._wasCalclulated) {\r\n                this._controller.forceShowCollectSymbols();\r\n            }\r\n        }\r\n\r\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\r\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: balanceAfter,\r\n                inSpin: true,\r\n            });\r\n        }\r\n\r\n        if (!Platforms.Platforms.canSpinOnCollect) {\r\n            this.autoplayStop();\r\n            this.changeWinBox(true);\r\n            this.collect();\r\n            return;\r\n        }\r\n\r\n        if (!BalanceManager.hasCredit(false, true)) {\r\n            DataManager.Autoplay = false;\r\n            ModuleManager.disableGamble();\r\n            this.prepareNewGameRound();\r\n            return;\r\n        }\r\n\r\n        DataManager.Collectable = false;\r\n        ModuleManager.disableGamble();\r\n        this.actions.disableAllActions();\r\n\r\n        if (DataManager.Autoplay) {\r\n            if (\r\n                !DataManager.AutoplayStarted &&\r\n                GameManager.baseResponse != null &&\r\n                GameManager.baseResponse.totalWin != null &&\r\n                GameManager.baseResponse.totalWin > 0\r\n            ) {\r\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\r\n            }\r\n            DataManager.updateLossLimit();\r\n            this.actions.changeActionState(\r\n                BaseActions.ActionAutoplayStop,\r\n                AppContext.gameConfiguration.AutoplayModeEnabled,\r\n            );\r\n        }\r\n        HtmlController.dispatchUiAction(\"\");\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        this.playCollectSound();\r\n\r\n        DataManager.updateTotalGain(true);\r\n        BalanceManager.fixBalance();\r\n        if (!DataManager.GameRoundClosed || (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElement(GameData.DataTotalWin);\r\n        }\r\n        this._controller.spin();\r\n\r\n        LimitDialog.closeDialog();\r\n\r\n        this._wasCalclulated = false;\r\n\r\n        Platforms.Platforms.roundStarted({\r\n            totalBet: BetManager.Bet,\r\n            freeRound: FreeRoundBonus.inFrb,\r\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\r\n        });\r\n        Platforms.Platforms.spinStarted();\r\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\r\n    }\r\n\r\n    // respin(): void\r\n    // {\r\n    //     this._machineStopped = false;\r\n\r\n    //     this._respinDelay.stop();\r\n\r\n    //     ModuleManager.disableGamble();\r\n    //     this.actions.disableAllActions();\r\n    //     if(DataManager.Autoplay) {\r\n    //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n    //     }\r\n    //     HtmlController.dispatchUiAction('');\r\n    //     HtmlController.updateActionElements(this.getAllActions());\r\n\r\n    //     DataManager.updateDataElement(GameData.DataTotalWin);\r\n    //     this._controller.respin();\r\n\r\n    //     Platforms.Platforms.spinStarted();\r\n    // }\r\n\r\n    stop(): void {\r\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        HtmlController.dispatchUiAction(\"\");\r\n        DataManager.quickspinStopped();\r\n        this._controller.stop();\r\n    }\r\n\r\n    autoplayDelayed(): void {\r\n        this._autoplayDelay.stop();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n    }\r\n\r\n    autoplay(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (this.checkJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (DataManager.AutoplayCount === \"∞\") {\r\n            DataManager.Autoplay = true;\r\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n            this.spin();\r\n        } else {\r\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\r\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\r\n                DataManager.Autoplay = true;\r\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n                this.spin();\r\n            } else {\r\n                DataManager.Autoplay = false;\r\n                this.prepareNewGameRound();\r\n            }\r\n        }\r\n    }\r\n\r\n    autoplayStop(): void {\r\n        DataManager.Autoplay = false;\r\n\r\n        Platforms.Platforms.autoplayStop();\r\n\r\n        if (this._machineStopped) {\r\n            if (DataManager.GameRoundClosed) {\r\n                FreeRoundBonus.enableUi();\r\n                Platforms.Platforms.roundEnded();\r\n                if (FreeRoundBonus.isLastFrb) {\r\n                    FreeRoundBonus.endFreeRounds();\r\n                    ModuleManager.disableBase();\r\n                }\r\n            }\r\n        }\r\n\r\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\r\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\r\n    }\r\n\r\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\r\n        if (!DataManager.GameRoundClosed) {\r\n            this._unColectedWin = 0;\r\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            this.changeWinBox();\r\n            this.collect();\r\n        } else {\r\n            this._controller.collect();\r\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\r\n            DataManager.updateDataElement(GameData.DataBalanceReal);\r\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\r\n            LimitDialog.closeDialog();\r\n        }\r\n        BetManager.changeBet(decrease, max, cycle);\r\n        this._paytable.updateDataValues();\r\n\r\n        if (BetManager.minBet) {\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\r\n        } else if (BetManager.maxBet) {\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\r\n        } else {\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\r\n        }\r\n        if (AppContext.gameConfiguration.ShowMaxBetMessage && max) {\r\n            const message = AppContext.gameConfiguration.MaxButton\r\n                ? Languages.getRid(\"MAX_BET_MESSAGE_PL\")\r\n                : Languages.getRid(\"MAX_BET_MESSAGE\");\r\n            GameManager.openConfirmationDialog(Communication.Game.GameModules.Base, message);\r\n        }\r\n        this.updateReelsByBetChange();\r\n\r\n        if (AppContext.gameConfiguration.ShowMaxBetMessage && max) {\r\n            const message = AppContext.gameConfiguration.MaxButton\r\n                ? Languages.getRid(\"MAX_BET_MESSAGE_PL\")\r\n                : Languages.getRid(\"MAX_BET_MESSAGE\");\r\n            GameManager.openConfirmationDialog(Communication.Game.GameModules.Base, message);\r\n        }\r\n    }\r\n\r\n    updateReelsByBetChange(): void {\r\n        this._controller.updateReelsByBetChange();\r\n    }\r\n\r\n    machineStoppedWithAnimation(): void {\r\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    quickWinCalculationFinished(): void {\r\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n    }\r\n\r\n    machineStopped(): void {\r\n        this._machineStopped = true;\r\n        Platforms.Platforms.spinEnded();\r\n\r\n        DataManager.stopAutoplayIfLossLimit();\r\n        DataManager.stopAutoplayIfWinLimit();\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\r\n            FreeRoundBonus.enableUi();\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n            });\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        this._unColectedWinDelay.stop();\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n\r\n        //     //respin will be triggered after stickyAnimation\r\n        //     return;\r\n        // }\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            FreeRoundBonus.disableUi();\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        if (DataManager.Autoplay) {\r\n            if (DataManager.AutoplayCount === 0 + \"\") {\r\n                DataManager.Autoplay = false;\r\n            }\r\n        }\r\n\r\n        if (GameManager.baseResponse.totalWin === 0) {\r\n            this._wasCalclulated = true;\r\n            DataManager.Collectable = true;\r\n        } else {\r\n            this._wasCalclulated = false;\r\n        }\r\n\r\n        ModuleManager.enableGamble();\r\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n        if (GameManager.baseResponse.totalWin > 0) {\r\n            this._afterWinDelay.start(30);\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\r\n            this._autoplayDelay.start(15);\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (\r\n                !DataManager.GameRoundClosed &&\r\n                GameManager.baseResponse.totalWin > 0 &&\r\n                GameManager.baseResponse.currentWin === 0\r\n            ) {\r\n                this._controller.resetWinAnimator();\r\n                this.collect();\r\n                return;\r\n            }\r\n        }\r\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\r\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (DataManager.GameRoundClosed) {\r\n                GameManager.canExit();\r\n            }\r\n        }\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        if (DataManager.GameRoundClosed) {\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n            });\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n        //     return;\r\n        // }\r\n\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.GameRoundClosed && !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElements();\r\n        }\r\n        ModuleManager.enableGamble();\r\n        DataManager.Collectable = true;\r\n        this.prepareNewGameRound();\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (!ModuleManager.gambleEnabled()) {\r\n                FreeRoundBonus.enableUi();\r\n            }\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                this.disableAllActions();\r\n                return;\r\n            }\r\n        } else {\r\n            FreeRoundBonus.enableFrbExpiration();\r\n        }\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        FreeRoundBonus.enableFrbExpiration();\r\n\r\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n        if (ModuleManager.bonusEnabled()) {\r\n            ModuleManager.enableBonus();\r\n            return;\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     let isLow = GameManager.baseResponse.currentWin <= BetManager.Bet;\r\n        //     this._respinDelay.start(isLow ? 30 : 0);\r\n\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n        //     return;\r\n        // }\r\n\r\n        this._afterWinDelay.stop();\r\n        this.prepareNewGameRound();\r\n        ModuleManager.enableGamble();\r\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\r\n            this.autoplay();\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                this._controller.resetWinAnimator();\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n                this._controller.resetWinAnimator();\r\n                this.collect();\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        super.initIntro();\r\n        this._controller.initIntro();\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            ModuleManager.enableBonus();\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n\r\n        //     this._respinDelay.start(75);\r\n        //     return;\r\n        // }\r\n\r\n        this.prepareNewGameRound();\r\n        ModuleManager.enableGamble();\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (DataManager.GameRoundClosed) {\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n            }\r\n            return;\r\n        }\r\n    }\r\n\r\n    intro(long: boolean = false, previousModule: string): void {\r\n        this._wasCalclulated = true;\r\n\r\n        //if(long) {\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n        // }\r\n\r\n        this.longIntro = long;\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\r\n            DataManager.updateDataElement(GameData.DataBalanceReal);\r\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\r\n\r\n            DataManager.Collectable = true;\r\n        }\r\n\r\n        this._controller.intro(long);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n    }\r\n\r\n    introFinished(): void {\r\n        if (DataManager.GameRoundClosed) {\r\n            Platforms.Platforms.roundEnded();\r\n        }\r\n        if (!ResponsibleDialog1.opened) {\r\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\r\n        }\r\n\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this.longIntro &&\r\n            DataManager.GameRoundClosed &&\r\n            (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0)\r\n        ) {\r\n            FreeRoundBonus.enableUi();\r\n            this.longIntro = false;\r\n        }\r\n\r\n        ModuleManager.enableGamble();\r\n        this.prepareNewGameRound();\r\n\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        }\r\n\r\n        if (FreeRoundBonus.isLastFrb && DataManager.GameRoundClosed) {\r\n            FreeRoundBonus.endFreeRounds();\r\n            ModuleManager.disableBase();\r\n            return;\r\n        }\r\n\r\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n                // Collect only when respin is not enabled/active\r\n                if (!CustomUtils.isRespinEnabled() && !CustomUtils.isRespinActive()) {\r\n                    ModuleManager.collect(GameModules.Base);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    outro(): void {\r\n        if (!this._wasCalclulated) {\r\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\r\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\r\n            }\r\n        }\r\n\r\n        this._afterWinDelay.stop();\r\n        this._autoplayDelay.stop();\r\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\r\n        DataManager.Autoplay = false;\r\n\r\n        if (ModuleManager.bonusActive()) {\r\n            DataManager.AutoplayAfterGamble = false;\r\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n                this._userControls.classList.add(HtmlController.DisabledClass);\r\n            }\r\n\r\n            if (\r\n                this._userControls_supreme != null &&\r\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n            ) {\r\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n\r\n        this._controller.outro();\r\n    }\r\n\r\n    outroFinished(): void {\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n\r\n        if (ModuleManager.bonusActive()) {\r\n            ModuleManager.introModule(GameModules.BonusRespins);\r\n        } else {\r\n            ModuleManager.introModule(GameModules.Gamble);\r\n        }\r\n    }\r\n\r\n    prepareNewGameRound(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (this.prepareJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (ResponsibleDialog1.opened) {\r\n            return;\r\n        }\r\n\r\n        BetHigherThanMinDialog.openDialog();\r\n        Paytable.openAtStart(true);\r\n\r\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\r\n            return;\r\n        }\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        } else {\r\n            if (!DataManager.Autoplay) {\r\n                this.actions.changeActionStates({\r\n                    [BaseActions.ActionAutoplay]:\r\n                        (DataManager.GameRoundClosed ||\r\n                            (FreeRoundBonus.inFrb &&\r\n                                FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n                                !FreeRoundBonus.isLastFrb)) &&\r\n                        AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BaseActions.ActionAutoplayStop]: false,\r\n                    [BaseActions.ActionBaseCollect]:\r\n                        FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\"\r\n                            ? false\r\n                            : !DataManager.GameRoundClosed,\r\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\r\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\r\n                    [BaseActions.ActionMaxBet]:\r\n                        !ModuleManager.gambleEnabled() &&\r\n                        !FreeRoundBonus.inFrb &&\r\n                        AppContext.gameConfiguration.MaxBetEnabled,\r\n                    [BaseActions.ActionSpin]: !FreeRoundBonus.isLastFrb,\r\n                    [BaseActions.ActionSpinStop]: false,\r\n                });\r\n                if (DataManager.GameRoundClosed) {\r\n                    Platforms.Platforms.roundInit();\r\n                }\r\n            }\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private prepareJackpotMiniGame(): boolean {\r\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\r\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n                DataManager.Autoplay = false;\r\n                this.resetWinAnimator();\r\n                this.disable();\r\n                FreeRoundBonus.disableUi();\r\n                Jackpot.startMiniGame();\r\n\r\n                return true;\r\n            } else {\r\n                const self = this;\r\n\r\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\r\n                if (this._wasCalclulated) {\r\n                    Jackpot.initMiniGame(true, () => {\r\n                        self.resetWinAnimator();\r\n                        self.disable();\r\n                        DataManager.Autoplay = false;\r\n                        FreeRoundBonus.disableUi();\r\n                    });\r\n                }\r\n\r\n                //in case we have nogamble and pb within or after gr, check limit\r\n                if (DataManager.GameLimit) {\r\n                    DataManager.Autoplay = false;\r\n                    this.limit();\r\n                }\r\n\r\n                if (Jackpot.waitForMiniGameInitialization()) {\r\n                    //in case we have limit, disable all actions during animation and wait for minigame\r\n                    this.actions.disableAllActions();\r\n                    HtmlController.updateActionElements(this.getAllActions());\r\n\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private checkJackpotMiniGame(): boolean {\r\n        if (!Jackpot.hasMiniGame() || FreeRoundBonus.inFrb) {\r\n            return false;\r\n        }\r\n\r\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox();\r\n                this._wasCalclulated = true;\r\n\r\n                if (!DataManager.GameRoundClosed) {\r\n                    this.collect(); //collect will call prepareNewGameRound\r\n                } else {\r\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\r\n                    this.playCollectSound();\r\n                    DataManager.updateDataElements();\r\n                    this.prepareNewGameRound();\r\n                }\r\n            } else {\r\n                this.prepareNewGameRound();\r\n            }\r\n\r\n            return true;\r\n        } else {\r\n            Jackpot.initMiniGame(false, null);\r\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    limit(): void {\r\n        LimitDialog.openDialog();\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            this.actions.changeActionStates({\r\n                [BaseActions.ActionAutoplay]: AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                [BaseActions.ActionAutoplayStop]: false,\r\n                [BaseActions.ActionBaseCollect]: false,\r\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\r\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\r\n                [BaseActions.ActionMaxBet]: !FreeRoundBonus.inFrb && AppContext.gameConfiguration.MaxBetEnabled,\r\n                [BaseActions.ActionSpin]: true,\r\n                [BaseActions.ActionSpinStop]: false,\r\n            });\r\n        } else {\r\n            this.actions.changeActionStates({\r\n                [BaseActions.ActionAutoplay]: false,\r\n                [BaseActions.ActionAutoplayStop]: false,\r\n                [BaseActions.ActionBaseCollect]: true,\r\n                [BaseActions.ActionBetPlus]: false,\r\n                [BaseActions.ActionBetMinus]: false,\r\n                [BaseActions.ActionMaxBet]: false,\r\n                [BaseActions.ActionSpin]: false,\r\n                [BaseActions.ActionSpinStop]: false,\r\n            });\r\n\r\n            if (DataManager.GameRoundClosed) {\r\n                Platforms.Platforms.roundInit();\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        this._afterWinDelay.stop();\r\n        this.actions.disableAllActions();\r\n        FreeRoundBonusIcon.disableActiveIcon();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        this._controller.disableBase();\r\n\r\n        // if(!CustomUtils.isRespin()) {\r\n        //     this._controller.disableBase();\r\n        // }\r\n    }\r\n\r\n    //disable base without reseting timer and win animations in winAnimator\r\n    //used in frb, to avoid not showing end message in last frb spin with win\r\n    private disableAllActions(): void {\r\n        this._afterWinDelay.stop();\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    // runRespin(): void {\r\n    //     if(CustomUtils.isRespin()) {\r\n    //         this._respinDelay.start(15);\r\n    //     }\r\n    // }\r\n\r\n    resetWinAnimator(): void {\r\n        this._controller.resetWinAnimator();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopBaseUserControls.ts\n **/","export class GameActions {\r\n    // space bar\r\n    static ActionSpinOrStop: string = \"SPIN_OR_STOP\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/GameActions.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Controller } from \"../Controller\";\r\nimport { BaseModel } from \"./BaseModel\";\r\nimport { BaseView } from \"./BaseView\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n@engineComponent(ComponentTypes.Controller)\r\nexport class BaseController extends Controller {\r\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\r\n    public static readonly RespinReceived: string = \"eventRespinReceived\";\r\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\r\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\r\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\r\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\r\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\r\n    public static readonly QuickWinCalculationFinished: string = \"eventMachineStoppedWithAnimation\";\r\n    public static readonly MachineStoppedWithAnimation: string = \"eventQuickWinCalculationFinished\";\r\n\r\n    public static readonly RunRespin: string = \"runRespin\";\r\n\r\n    protected _view: BaseView;\r\n    protected _model: BaseModel;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    startInitialization(view: any): void {\r\n        if (DEBUG) {\r\n            this.log(\"startInitialization\");\r\n        }\r\n\r\n        if (view instanceof BaseView) {\r\n            this._view = view;\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR view is not instance of BaseView\");\r\n            }\r\n        }\r\n\r\n        this._model = new BaseModel(this);\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._view.initReceived(this);\r\n    }\r\n\r\n    initIntro(): void {\r\n        this._view.initIntro();\r\n    }\r\n\r\n    collect(): void {\r\n        this._view.collect();\r\n    }\r\n\r\n    spin(): void {\r\n        this._model.spin();\r\n        this._view.spin();\r\n    }\r\n\r\n    respin(): void {\r\n        this._model.respin();\r\n        this._view.respin();\r\n    }\r\n\r\n    stop(): void {\r\n        this._view.stop();\r\n    }\r\n\r\n    spinReceived(): void {\r\n        this._view.spinReceived();\r\n        this.emit(BaseController.SpinReceived);\r\n    }\r\n\r\n    respinReceived(): void {\r\n        this._view.spinReceived();\r\n        this.emit(BaseController.RespinReceived);\r\n    }\r\n\r\n    machineStopped(): void {\r\n        this.emit(BaseController.MachineStopped);\r\n    }\r\n\r\n    quickWinCalculationFinished(): void {\r\n        this.emit(BaseController.QuickWinCalculationFinished);\r\n    }\r\n\r\n    forceShowCollectSymbols(): void {\r\n        this._view.forceShowCollectSymbols();\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        this.emit(BaseController.WinCalculationFinished);\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        this.emit(BaseController.AllWinsFinished);\r\n    }\r\n\r\n    resetWinAnimator(): void {\r\n        this._view.resetWinAnimator();\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        this._view.intro(long);\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.emit(BaseController.IntroFinished);\r\n    }\r\n\r\n    outro(): void {\r\n        this._view.outro();\r\n    }\r\n\r\n    runRespin(): void {\r\n        this.emit(BaseController.RunRespin);\r\n    }\r\n\r\n    outroFinished(): void {\r\n        this.emit(BaseController.OutroFinished);\r\n    }\r\n\r\n    disableBase(): void {\r\n        this._view.disableBase();\r\n    }\r\n\r\n    toggleSounds(enable: boolean): void {\r\n        this._view.toggleSounds(enable);\r\n    }\r\n\r\n    updateReelsByBetChange(): void {\r\n        this._view.updateReelsByBetChange();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseController.ts\n **/","import { ArrayUtils, engineComponent, Utils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { BaseController } from \"./BaseController\";\r\nimport { Paylines } from \"../Paylines\";\r\nimport { Symbols } from \"../Symbols\";\r\nimport { WinAnimator } from \"../WinAnimator\";\r\nimport { Machine } from \"../Machine\";\r\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\r\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { WinAnimatorExtended } from \"../../CustomComponents/WinAnimatorExtended\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { StageController } from \"../../Components/StageController\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { AmbientBackground } from \"../../Utils/AmbientBackground\";\r\nimport { MachineExtended } from \"../../CustomComponents/MachineExtended\";\r\nimport { ParticleElement } from \"../../Components/Elements/Graphics/ParticleElement\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { ImageElement } from \"../../Components/Elements/Graphics/ImageElement\";\r\nimport { GeneralConfigurationAttributes } from \"../../Components/Configuration\";\r\nimport { GameMultipliers } from \"../GameMultipliers\";\r\nimport { CollectFrames } from \"../CollectFrames\";\r\nimport { Tweens } from \"../../Components/Effects/Tweens\";\r\nimport { Character } from \"../Character\";\r\nimport { BaseModel } from \"./BaseModel\";\r\nimport { LayoutManager, LayoutManagerAttributes } from \"../../Managers/LayoutManager\";\r\nimport { LayoutContainerElement } from \"../../CustomComponents/LayoutContainerElement\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\n\r\ntype IWin = Communication.Game.IWin;\r\nvar GameModules = Communication.Game.GameModules;\r\nconst GAMBLE_HIDDING = [\r\n    \"ReelBack\",\r\n    \"CollectStick\",\r\n    \"PaddleRight\",\r\n    \"GameMultipliers\",\r\n    \"CollectFrames\",\r\n    \"FrameBottom\",\r\n    \"FrameTop\",\r\n    \"WinContainer\",\r\n    \"Paylines\",\r\n    \"NoWinContainer\",\r\n];\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BaseView extends LayoutContainerElement {\r\n    public static Respin: boolean = false;\r\n    public static LayoutManager: LayoutManager;\r\n\r\n    private _controller: BaseController;\r\n    private _wasFinished: boolean = false;\r\n    private _isGamble: boolean = false;\r\n\r\n    private _introDelay: FrameTimerEventEmitter;\r\n    private _outroDelay: FrameTimerEventEmitter;\r\n    private _outroFinishDelay: FrameTimerEventEmitter;\r\n\r\n    private _paylines: Paylines;\r\n    private _symbols: Symbols;\r\n    private _machine: MachineExtended;\r\n    private _winAnimator: WinAnimatorExtended;\r\n\r\n    private _respinCounter: number;\r\n\r\n    private _frameTop: SwitchElement;\r\n    private _paddleRight: SwitchElement;\r\n    private _multipliers: GameMultipliers;\r\n    private _collectFrames: CollectFrames;\r\n    private _character: Character;\r\n\r\n    protected currentBet: number = -1;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._introDelay = CreateFrameTimer(\"introDelay\");\r\n        this._introDelay.on(FrameTimerEvents.Complete, this.introFinished.bind(this));\r\n\r\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\r\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\r\n        this._outroFinishDelay = CreateFrameTimer(\"outroFinishDelay\");\r\n        this._outroFinishDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\r\n        StageController.baseStageContainer = this;\r\n\r\n        this._respinCounter = -1;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        BaseView.LayoutManager = new LayoutManager();\r\n\r\n        if (this.childs != null) {\r\n            this._symbols = <Symbols>this.childs[\"Symbols\"];\r\n            this._paylines = <Paylines>this.childs[\"Paylines\"];\r\n            this._winAnimator = <WinAnimatorExtended>this.childs[\"WinAnimator\"];\r\n            this._machine = <MachineExtended>this.childs[\"Machine\"];\r\n            this._multipliers = <GameMultipliers>this.childs[\"GameMultipliers\"];\r\n            this._collectFrames = <CollectFrames>this.childs[\"CollectFrames\"];\r\n            this._character = new Character(<SwitchElement>this.childs[\"Character\"], this._winAnimator);\r\n            this._multipliers.winAnimator = this._winAnimator;\r\n            this._multipliers.flyContainer = this.childs[\"FlyingContainer\"];\r\n\r\n            this._frameTop = <SwitchElement>this.childs[\"FrameTop\"];\r\n            this._paddleRight = <SwitchElement>this.childs[\"PaddleRight\"];\r\n\r\n            this._paylines.reset();\r\n        }\r\n    }\r\n\r\n    initReceived(controller: BaseController): void {\r\n        if (DEBUG) {\r\n            this.log(\"initReceived\");\r\n        }\r\n\r\n        this._controller = controller;\r\n\r\n        if (this._symbols != null) {\r\n            if (this._machine != null) {\r\n                if (GameManager.baseResponse != null) {\r\n                    if (GameManager.baseResponse.initData != null && GameManager.baseResponse.initData.reels != null) {\r\n                        this._machine.on(Machine.ReelStopped, this.onReelStopped.bind(this));\r\n                        this._machine.on(Machine.MachineStopped, this.machineStopped.bind(this));\r\n                        this._machine.on(Machine.StartedTeasing, this.startedTeasing.bind(this));\r\n                        this._machine.on(Machine.StoppedTeasing, this.stoppedTeasing.bind(this));\r\n                        this._machine.initialize(\r\n                            this._symbols,\r\n                            GameManager.baseResponse.initData.reels,\r\n                            <SwitchElement>this.childs[\"Teasing1\"],\r\n                            <SwitchElement>this.childs[\"Teasing2\"],\r\n                        );\r\n                    }\r\n\r\n                    this.updateCollectSymbols();\r\n\r\n                    if (\r\n                        GameManager.baseResponse.screen != null &&\r\n                        GameManager.baseResponse.screen.reels != null &&\r\n                        GameManager.baseResponse.screen.reels.length !== 0\r\n                    ) {\r\n                        if (this._winAnimator != null) {\r\n                            this._winAnimator.on(\r\n                                WinAnimator.FinishWinCalculation,\r\n                                this.finishWinCalculation.bind(this),\r\n                            );\r\n                            this._winAnimator.on(WinAnimator.FinishWinAnimator, this.finishWinAnimator.bind(this));\r\n                            this._winAnimator.on(\r\n                                WinAnimator.FinishQuickWinCalculation,\r\n                                this.finishQuickWinCalculation.bind(this),\r\n                            );\r\n                            this._winAnimator.initialize(\r\n                                this._symbols,\r\n                                this._paylines,\r\n                                this.childs[\"NoWinContainer\"],\r\n                                this.childs[\"WinContainer\"],\r\n                                this.childs[\"CollectFrames\"],\r\n                            );\r\n                            this._winAnimator.showSymbols(GameManager.baseResponse.screen.reels);\r\n                        }\r\n                        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no reels in response\");\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no base reponse\");\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no machine\");\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no symbols\");\r\n            }\r\n        }\r\n        if (ModuleManager.gambleActive()) {\r\n            this._isGamble = true;\r\n            this._toggleVisibleInGamble();\r\n        }\r\n\r\n        this._multipliers.show();\r\n    }\r\n\r\n    updateCollectSymbols(collectedSymbols: number[] = null, isShow = true, isAnim = false) {\r\n        if (\r\n            collectedSymbols ||\r\n            (GameManager.baseResponse != null &&\r\n                GameManager.baseResponse.customData != null &&\r\n                GameManager.baseResponse.customData.collectedSymbols != null)\r\n        ) {\r\n            this._collectFrames.updateCurrentSet(\r\n                collectedSymbols || GameManager.baseResponse.customData.collectedSymbols,\r\n            );\r\n            if (isShow) this._collectFrames.showCurrentSet(isAnim, collectedSymbols != null);\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        StageController.baseStage = true;\r\n        StageController.bonusStage = false;\r\n\r\n        // if (GameManager.gameResponse.totalWin > 0) {\r\n        //         PlayList.loop('SND_BaseRecapLoop');\r\n        // } else {\r\n        PlayList.loop(\"SND_BaseLoop\");\r\n        PlayList.loop(\"SND_LoopAmbience\");\r\n        //}\r\n\r\n        if (this.childs[\"Messages\"] != null) {\r\n            if (ModuleManager.bonusEnabled()) {\r\n                this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n                PlayList.play(\"SND_BonusPopup\");\r\n            }\r\n        }\r\n\r\n        this._winAnimator.showInitWins(GameManager.baseResponse.wins, GameManager.baseResponse.currentWin);\r\n\r\n        if (CustomUtils.isRespin()) {\r\n            this._respinCounter = 0;\r\n        }\r\n\r\n        this._character.enable();\r\n    }\r\n\r\n    collect(): void {\r\n        this._character.event(Character.WIN_ANIM_COMPLETED);\r\n        //this._multipliers.clearFlying();\r\n        PlayList.stop(\"SND_BaseRecapLoop\");\r\n        PlayList.loop(\"SND_BaseLoop\");\r\n\r\n        this._winAnimator.reset(true);\r\n        this.updateCollectSymbols(null, true, true);\r\n    }\r\n\r\n    spin(): void {\r\n        BaseView.Respin = false;\r\n\r\n        PlayList.stop(\"SND_RespinLoop\");\r\n        PlayList.stop(\"SND_BaseRecapLoop\");\r\n        PlayList.loop(\"SND_BaseLoop\");\r\n\r\n        this._respinCounter = 0;\r\n\r\n        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n        this._multipliers.hide();\r\n\r\n        this._character.event(Character.SPIN);\r\n        this._paddleRight.goToCase(\"JUMP\");\r\n\r\n        // if(!AppContext.gameConfiguration.CollectOnUnCalculatedWin) {\r\n        //     const customBetData = DataManager.getCustomBetDataForCurrentBetAmount();\r\n        //     this.updateCollectSymbols(customBetData.collectingSymbols, true, true);\r\n        // }\r\n\r\n        this.forceShowCollectSymbols();\r\n    }\r\n\r\n    forceShowCollectSymbols(): void {\r\n        this._collectFrames.showCurrentSet(true);\r\n    }\r\n\r\n    stop(): void {\r\n        this._machine.spinStop(null, true);\r\n    }\r\n\r\n    spinReceived(): void {\r\n        DataManager.updateCustomBetsData();\r\n\r\n        this._machine.setStoppedSymbolsArray(GameManager.baseResponse.screen.reels);\r\n        this._machine.spinStop(null, false, true);\r\n\r\n        this._multipliers.show();\r\n    }\r\n\r\n    onReelStopped(): void {\r\n        this._winAnimator.onReelStopped(GameManager.baseResponse.screen.reels, this._machine.actualReelStopped);\r\n        this._frameTop.goToCase(\"IDLE\");\r\n        this._frameTop.goToCase(\"JUMP\");\r\n    }\r\n\r\n    machineStopped(): void {\r\n        this._wasFinished = false;\r\n        this._controller.machineStopped();\r\n\r\n        this.updateCollectSymbols(null, false);\r\n\r\n        if (\r\n            this._winAnimator.showWins(\r\n                GameManager.baseResponse.wins,\r\n                GameManager.baseResponse.currentWin,\r\n                GameManager.baseResponse.customData,\r\n            )\r\n        ) {\r\n            PlayList.stop(\"SND_BaseLoop\");\r\n        }\r\n\r\n        // if(GameManager.baseResponse.currentWin > 0) {\r\n        //     if (GameManager.baseResponse.gameMultiplier > 1) {\r\n        //         this._multipliers.fly();\r\n        //     }\r\n        // }\r\n\r\n        if (\r\n            GameManager.baseResponse.customData &&\r\n            GameManager.baseResponse.customData.collectedSymbols &&\r\n            GameManager.baseResponse.customData.collectedSymbols.length >= 5\r\n        ) {\r\n            this._character.event(Character.COLLECTION);\r\n        } else this._character.event(Character.REELS_STOP);\r\n    }\r\n\r\n    private startedTeasing() {\r\n        this._character.event(Character.MASK_TEASING_START);\r\n        this._winAnimator.setTeasing(true);\r\n    }\r\n    private stoppedTeasing() {\r\n        this._character.event(Character.MASK_TEASING_END);\r\n        this._winAnimator.setTeasing(false);\r\n    }\r\n\r\n    private finishQuickWinCalculation(): void {\r\n        this._controller.quickWinCalculationFinished();\r\n    }\r\n\r\n    finishWinCalculation(): void {\r\n        this._character.event(Character.WIN_ANIM_COMPLETED);\r\n        //this._multipliers.clearFlying();\r\n        this._wasFinished = true;\r\n        this._controller.winCalculationFinished();\r\n    }\r\n\r\n    finishWinAnimator(): void {\r\n        if (!DataManager.Autoplay) {\r\n            //PlayList.stop('SND_BaseLoop');\r\n            PlayList.loop(\"SND_BaseLoop\");\r\n        }\r\n\r\n        if (this.childs[\"Messages\"] != null && ModuleManager.bonusEnabled()) {\r\n            this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n            PlayList.play(\"SND_BonusPopup\");\r\n            this._character.event(Character.BONUS_MESSAGE_START);\r\n        } else {\r\n            this._character.event(Character.WIN_ANIMS);\r\n        }\r\n\r\n        this._controller.allWinsFinished();\r\n    }\r\n\r\n    resetWinAnimator(): void {\r\n        this._winAnimator.reset(true);\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        StageController.baseStage = true;\r\n        StageController.bonusStage = false;\r\n\r\n        this.visible = true;\r\n\r\n        PlayList.stop(\"SND_RespinLoop\");\r\n        PlayList.stop(\"SND_BaseRecapLoop\");\r\n        PlayList.loop(\"SND_BaseLoop\");\r\n\r\n        this._introDelay.start(30);\r\n\r\n        this._isGamble = false;\r\n        this._toggleVisibleInGamble();\r\n\r\n        this._character.enable();\r\n        this.updateReelsByBetChange();\r\n    }\r\n\r\n    introFinished(): void {\r\n        StageController.baseStage = true;\r\n\r\n        // if (GameManager.gameResponse.totalWin > 0) {\r\n        //     PlayList.stop('SND_BaseLoop');\r\n\r\n        // } else {\r\n        //     PlayList.stop('SND_BaseRecapLoop');\r\n        //     PlayList.loop('SND_BaseLoop');\r\n        // }\r\n\r\n        if (this.childs[\"Messages\"] != null) {\r\n            if (ModuleManager.bonusEnabled()) {\r\n                this.childs[\"Messages\"].goToCase(\"SHOW_BONUS\");\r\n                PlayList.play(\"SND_BonusPopup\");\r\n            }\r\n        }\r\n\r\n        this._controller.introFinished();\r\n    }\r\n\r\n    updateReelsByBetChange(): void {\r\n        const customBetData = DataManager.getCustomBetDataForCurrentBetAmount();\r\n\r\n        if (!Utils.isNullOrUndefined(customBetData)) {\r\n            if (this.currentBet != customBetData.betAmount) {\r\n                this.currentBet = customBetData.betAmount;\r\n\r\n                if (!Utils.isNullOrUndefined(customBetData.reelsData)) {\r\n                    this._winAnimator.showSymbols(customBetData.reelsData);\r\n\r\n                    if (BaseModel.LastScreen != null) {\r\n                        BaseModel.LastScreen[\"reels\"] = customBetData.reelsData;\r\n                        this._multipliers.hide();\r\n                        this._multipliers.show(customBetData.gameMultiplier);\r\n                    }\r\n                }\r\n            }\r\n            this.updateCollectSymbols(customBetData.collectingSymbols);\r\n        }\r\n    }\r\n\r\n    outro(): void {\r\n        StageController.baseStage = true;\r\n\r\n        PlayList.stop(\"SND_RespinLoop\");\r\n        PlayList.stop(\"SND_BaseLoop\");\r\n        //PlayList.stop('SND_BaseRecapLoop');\r\n\r\n        this._character.disable();\r\n\r\n        if (ModuleManager.bonusActive()) {\r\n            this.outroToBonus();\r\n        } else {\r\n            this.outroToGamble();\r\n        }\r\n    }\r\n\r\n    private outroToBonus(): void {\r\n        // PlayList.play('SND_BonusTransIn');\r\n        // PlayList.stop('SND_BonusWait');\r\n\r\n        if (this.childs[\"Messages\"] != null && this.childs[\"Messages\"].getCurrentCase() == \"SHOW_BONUS\") {\r\n            this.childs[\"Messages\"].goToCase(\"HIDE_BONUS\");\r\n        }\r\n        this._character.event(Character.HIDE);\r\n\r\n        this._outroDelay.start(30);\r\n\r\n        DataManager.clearCollectedSymbolsForCurrentBet();\r\n    }\r\n\r\n    private outroToGamble(): void {\r\n        const inHighWins = this._winAnimator.reset(true);\r\n\r\n        if (this._wasFinished) {\r\n            this.outroStart();\r\n        } else {\r\n            if (inHighWins) {\r\n                this._outroDelay.start(60);\r\n            } else {\r\n                this._outroDelay.start(30);\r\n            }\r\n        }\r\n        this._isGamble = true;\r\n        this._toggleVisibleInGamble();\r\n    }\r\n\r\n    outroStart(): void {\r\n        //if (this._transition != null) {\r\n        if (ModuleManager.bonusActive()) {\r\n            this.outroFinished();\r\n        } else {\r\n            PlayList.play(\"SND_GambleTransitionIn\");\r\n\r\n            // this._transition.setDynamicTime(0);\r\n            // this._transition.goToCase('HIDE_GAMBLE');\r\n            this._outroFinishDelay.start(30);\r\n        }\r\n        // }\r\n    }\r\n\r\n    outroFinished(): void {\r\n        this._outroFinishDelay.stop();\r\n\r\n        //we want to keep current screen when move to bonus\r\n        // if (!ModuleManager.bonusActive()) {\r\n        //     this._winAnimator.reset(true);\r\n        // } else {\r\n        this._winAnimator.reset(true);\r\n        this._collectFrames.updateCurrentSet([]);\r\n        this._collectFrames.showCurrentSet();\r\n        //}\r\n\r\n        this._controller.outroFinished();\r\n    }\r\n\r\n    /* RESPIN */\r\n\r\n    respin(): void {\r\n        BaseView.Respin = true;\r\n\r\n        this._respinCounter++;\r\n        //PlayList.stop('SND_BaseRecapLoop');\r\n        //PlayList.stop('SND_BaseLoop');\r\n        if (this._respinCounter === 1) {\r\n            PlayList.loop(\"SND_RespinLoop\", 0, true);\r\n        }\r\n\r\n        this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n    }\r\n\r\n    disableBase(): void {\r\n        this._winAnimator.resetTimer();\r\n    }\r\n\r\n    /**\r\n     * Toggle all sounds used in base game (background, effects, .etc)\r\n     * @param enable\r\n     */\r\n    toggleSounds(enable: boolean): void {\r\n        if (enable) {\r\n            PlayList.loop(\"SND_BaseLoop\");\r\n            PlayList.loop(\"SND_LoopAmbience\");\r\n            this._character.enable();\r\n        } else {\r\n            PlayList.stop(\"SND_BaseLoop\");\r\n            PlayList.stop(\"SND_LoopAmbience\");\r\n            this._character.disable();\r\n        }\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean) {\r\n        super.onLayoutChange(isPortrait);\r\n        this._toggleVisibleInGamble();\r\n        if (BaseView.LayoutManager.getPlatform() == LayoutManagerAttributes.DESKTOP && !isPortrait) {\r\n            this.childs[\"BarLogo\"].visible = true;\r\n            this.childs[\"LogoLong_L\"] && (this.childs[\"LogoLong_L\"].visible = false);\r\n        }\r\n    }\r\n\r\n    _toggleVisibleInGamble() {\r\n        for (let i = 0; i < GAMBLE_HIDDING.length; i++) {\r\n            this.childs[GAMBLE_HIDDING[i]].visible = !this._isGamble;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Base/BaseView.ts\n **/","import { ArrayUtils, engineComponent, NumberUtils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { Payline } from \"./Payline\";\r\nimport { Paylines } from \"./Paylines\";\r\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\r\nimport { Symbol } from \"./Symbol\";\r\nimport { Symbols } from \"./Symbols\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Configuration, GeneralConfigurationAttributes } from \"../Components/Configuration\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { TimelineElement } from \"../Components/Elements/Graphics/TimelineElement\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { BetManager } from \"../Managers/BetManager\";\r\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { CollectFrames } from \"./CollectFrames\";\r\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\r\n\r\n/**\r\n * WinAnimator uses paylines and symbols to create presentation of wins to user.\r\n * Also handle high wins animation for presentation special screens to user when win is bigger than some defined values.\r\n * @class WinAnimator\r\n * @extends ContainerElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class WinAnimator extends ContainerElement {\r\n    //******************************************************************************************************************\r\n    //  EVENTS\r\n    //******************************************************************************************************************\r\n\r\n    public static readonly FinishWinCalculation: string = \"eventFinishWinCalculation\";\r\n\r\n    public static readonly FinishWinAnimator: string = \"eventFinishWinAnimator\";\r\n\r\n    public static readonly FinishQuickWinCalculation: string = \"eventFinishQuickWinCalculation\";\r\n\r\n    //******************************************************************************************************************\r\n    //  TIMER STATUSES\r\n    //******************************************************************************************************************\r\n\r\n    protected static readonly Idle: string = \"idle\";\r\n\r\n    protected static readonly CycleWins: string = \"cycleWins\";\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected reelCount: number;\r\n    protected reelX: Array<number>;\r\n    protected reelY: Array<number>;\r\n\r\n    protected symbolCount: number;\r\n    protected symbolWidth: number;\r\n    protected symbolHeight: number;\r\n\r\n    protected timerStatus: string;\r\n    protected timer: FrameTimerEventEmitter;\r\n    protected csTimer: FrameTimerEventEmitter;\r\n\r\n    protected symbols: Symbols;\r\n    protected noWinSymbolsContainer: ContainerElement;\r\n    protected symbolsContainer: ContainerElement;\r\n    public currentSymbols: Array<Array<Symbol>>;\r\n\r\n    protected paylines: Paylines;\r\n\r\n    protected multipliers: Array<number>;\r\n    protected currentMultiplierIndex: number;\r\n\r\n    protected animationNames: Array<string>;\r\n    protected animationsContainer: ContainerElement;\r\n    protected animations: Array<TimelineElement>;\r\n    protected currentAnimationIndex: number;\r\n    protected currentAnimationFinished: boolean;\r\n    protected value: TimelineElement;\r\n\r\n    protected currentReels: Array<Communication.Game.IReel>;\r\n    protected currentWins: Array<Communication.Game.IWin>;\r\n    protected currentWin: number;\r\n    protected customData: any;\r\n\r\n    protected currentCycle: number;\r\n\r\n    private collectFrames: CollectFrames;\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE, INITIALIZE\r\n    //******************************************************************************************************************\r\n\r\n    public createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(WinAnimatorAttributes.CONFIGS)) {\r\n            let configs: Array<string> = node.getAttribute(WinAnimatorAttributes.CONFIGS).split(\";\");\r\n\r\n            for (let i = 0; i < configs.length; i++) {\r\n                this.configure(Configuration.Configurations[configs[i]]);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected configure(node: Element): void {\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_COUNT)) {\r\n            this.reelCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.REEL_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_X)) {\r\n            this.reelX = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_X));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_Y)) {\r\n            this.reelY = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\r\n            this.symbolCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH)) {\r\n            this.symbolWidth = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT)) {\r\n            this.symbolHeight = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.WINS_MULTIPLIERS)) {\r\n            this.multipliers = ArrayUtils.numberArray(\r\n                node.getAttribute(GeneralConfigurationAttributes.WINS_MULTIPLIERS),\r\n            );\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.WINS_ANIMATIONS)) {\r\n            this.animationNames = node.getAttribute(GeneralConfigurationAttributes.WINS_ANIMATIONS).split(\";\");\r\n        }\r\n    }\r\n\r\n    public initialize(\r\n        symbols: Symbols,\r\n        paylines?: Paylines,\r\n        noWinSymbolsContainer?: ContainerElement,\r\n        symbolsContainer?: ContainerElement,\r\n        collectFrames?: CollectFrames,\r\n    ): void {\r\n        this.collectFrames = collectFrames;\r\n        this.createTimer();\r\n        this.createSymbols(symbols, noWinSymbolsContainer, symbolsContainer);\r\n        this.createPaylines(paylines);\r\n        this.createAnimations();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ON REEL STOPPED, SHOW SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number): void {\r\n        this.currentReels = reelsData;\r\n\r\n        for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n            this.removeCurrentSymbol(reelIndex, i);\r\n        }\r\n\r\n        // for (let i = 0; i < reelsData[reelIndex].symbols.length; i++) {\r\n        for (let i = reelsData[reelIndex].symbols.length - 1; i >= 0; i--) {\r\n            this.addCurrentSymbol(reelIndex, i);\r\n        }\r\n    }\r\n\r\n    public showSymbols(reelsData: Array<Communication.Game.IReel>): void {\r\n        this.currentReels = reelsData;\r\n\r\n        for (let i = 0; i < reelsData.length; i++) {\r\n            for (let j = 0; j < reelsData[i].symbols.length; j++) {\r\n                this.removeCurrentSymbol(i, j);\r\n            }\r\n        }\r\n\r\n        for (let i = 0; i < reelsData.length; i++) {\r\n            // for (let j = 0; j < reelsData[i].symbols.length; j++) {\r\n            for (let j = reelsData[i].symbols.length - 1; j >= 0; j--) {\r\n                this.addCurrentSymbol(i, j);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SHOW WINS\r\n    //******************************************************************************************************************\r\n\r\n    public showWins(wins: Array<Communication.Game.IWin>, win: number, customData: any): boolean {\r\n        this.currentWins = wins;\r\n        this.currentWin = win;\r\n        this.customData = customData;\r\n\r\n        this.resetAnimations();\r\n\r\n        if (wins != null && wins.length > 0) {\r\n            this.currentMultiplierIndex = 0;\r\n\r\n            for (let i = 0; i < this.multipliers.length; i++) {\r\n                if (this.currentWin / BetManager.Bet >= this.multipliers[i]) {\r\n                    this.currentMultiplierIndex = i;\r\n                }\r\n            }\r\n\r\n            if (!this.showCustomWin()) {\r\n                this.showFirstWins();\r\n            }\r\n\r\n            return this.currentMultiplierIndex >= 3;\r\n        } else {\r\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    protected showCustomWin(): boolean {\r\n        return false;\r\n    }\r\n\r\n    protected showFirstWins(): void {\r\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\r\n        this.allPaylinesGoToCase(Payline.CaseNowin);\r\n\r\n        for (let i = 0; i < this.currentWins.length; i++) {\r\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\r\n            this.winPaylineGoToCase(i, Payline.CaseWin);\r\n        }\r\n\r\n        this.startAnimation();\r\n    }\r\n\r\n    protected finishFirstWins(): void {\r\n        this.currentCycle = 0;\r\n        this.collectSymbols(this.collectSymbolsCompleted.bind(this));\r\n    }\r\n\r\n    private collectSymbolsCompleted() {\r\n        this.emit(WinAnimator.FinishWinAnimator);\r\n        this.startCycleWins();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SHOW INIT WINS\r\n    //******************************************************************************************************************\r\n\r\n    public showInitWins(wins: Array<Communication.Game.IWin>, win: number): void {\r\n        this.currentWins = wins;\r\n        this.currentWin = win;\r\n\r\n        this.resetAnimations();\r\n\r\n        if (wins != null && wins.length > 0) {\r\n            this.showCustomInitWin();\r\n            this.showFirstInitWins();\r\n            this.finishFirstInitWins();\r\n        } else {\r\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n        }\r\n    }\r\n\r\n    protected showCustomInitWin(): void {}\r\n\r\n    protected showFirstInitWins(): void {\r\n        this.allSymbolsGoToCase(Symbol.CaseNowin, true);\r\n        this.allPaylinesGoToCase(Payline.CaseNowin);\r\n\r\n        for (let i = 0; i < this.currentWins.length; i++) {\r\n            this.winSymbolsGoToCase(i, Symbol.CaseWin, false);\r\n            this.winPaylineGoToCase(i, Payline.CaseWin);\r\n        }\r\n    }\r\n\r\n    protected finishFirstInitWins(): void {\r\n        this.currentCycle = 0;\r\n\r\n        this.startCycleWins();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CYCLE WINS\r\n    //******************************************************************************************************************\r\n\r\n    protected startCycleWins(): void {\r\n        for (let i = 0; i < this.currentWins.length; i++) {\r\n            this.winSymbolsGoToCase(i, Symbol.CaseCyclePause, true);\r\n        }\r\n        this.cycleWins();\r\n    }\r\n\r\n    protected cycleWins(): void {\r\n        if (this.currentWins == null) {\r\n            return;\r\n        }\r\n\r\n        this.allPaylinesGoToCase(Payline.CaseNowin);\r\n        PlayList.play(\"SND_BaseWinline\");\r\n\r\n        for (let i = 0; i < this.currentWins.length; i++) {\r\n            this.winPaylineGoToCase(i, Payline.CaseNormal);\r\n        }\r\n\r\n        this.winSymbolsGoToCase(this.currentCycle, Symbol.CaseCycle, true);\r\n        this.winPaylineGoToCase(this.currentCycle, Payline.CaseCycle);\r\n\r\n        this.currentCycle = (this.currentCycle + 1) % this.currentWins.length;\r\n\r\n        this.startTimer(WinAnimator.CycleWins, this.getCycleWinsDelay());\r\n    }\r\n\r\n    protected getCycleWinsDelay(): number {\r\n        return 90;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  RESET\r\n    //******************************************************************************************************************\r\n\r\n    public reset(showLastSymbols: boolean): boolean {\r\n        this.stopTimer();\r\n\r\n        if (showLastSymbols) {\r\n            this.allSymbolsGoToReset();\r\n        } else {\r\n            this.allSymbolsGoToCase(Symbol.CaseEmpty, false);\r\n        }\r\n\r\n        if (this.csTimer) {\r\n            this.csTimer.stop();\r\n        }\r\n\r\n        this.allPaylinesGoToCase(Payline.CaseNormal);\r\n\r\n        if (showLastSymbols) {\r\n            this.startTimer(WinAnimator.Idle, this.getInitialIdleDelay());\r\n        }\r\n\r\n        this.value.visible = false;\r\n\r\n        let lastMultiplierIndex = this.currentMultiplierIndex;\r\n        this.currentMultiplierIndex = -1;\r\n\r\n        if (this.currentAnimationIndex != null) {\r\n            if (this.currentAnimationFinished) {\r\n                this.resetAnimations();\r\n\r\n                this.currentWins = null;\r\n                this.currentWin = null;\r\n                return false;\r\n            } else {\r\n                this.stopAnimation();\r\n\r\n                this.currentWins = null;\r\n                this.currentWin = null;\r\n                return lastMultiplierIndex >= 3;\r\n            }\r\n        } else {\r\n            this.currentWins = null;\r\n            this.currentWin = null;\r\n            return lastMultiplierIndex >= 3;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  TIMER\r\n    //******************************************************************************************************************\r\n\r\n    protected createTimer(): void {\r\n        this.timerStatus = \"\";\r\n\r\n        this.timer = CreateFrameTimer(\"timer\");\r\n        this.timer.on(FrameTimerEvents.Complete, this.onTimerComplete.bind(this));\r\n    }\r\n\r\n    protected startTimer(status: string, duration: number): void {\r\n        this.timerStatus = status;\r\n        this.timer.stop();\r\n        this.timer.start(duration);\r\n    }\r\n\r\n    protected stopTimer(): void {\r\n        if (this.timer != null) {\r\n            this.timer.stop();\r\n        }\r\n    }\r\n\r\n    public resetTimer(): void {\r\n        this.stopTimer();\r\n\r\n        if (!this.currentAnimationFinished) {\r\n            this.stopAnimation();\r\n        }\r\n    }\r\n\r\n    protected onTimerComplete(): void {\r\n        this.timer.stop();\r\n\r\n        switch (this.timerStatus) {\r\n            case WinAnimator.Idle:\r\n                this.idle();\r\n                break;\r\n            case WinAnimator.CycleWins:\r\n                this.cycleWins();\r\n                break;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    protected createSymbols(\r\n        symbols: Symbols,\r\n        noWinSymbolsContainer: ContainerElement,\r\n        symbolsContainer: ContainerElement,\r\n    ): void {\r\n        this.symbols = symbols;\r\n\r\n        if (noWinSymbolsContainer != null) {\r\n            this.noWinSymbolsContainer = noWinSymbolsContainer;\r\n        } else {\r\n            this.noWinSymbolsContainer = new ContainerElement();\r\n            this.noWinSymbolsContainer.name = \"NoWinSymbols\";\r\n\r\n            this.addChild(this.noWinSymbolsContainer);\r\n        }\r\n\r\n        if (symbolsContainer != null) {\r\n            this.symbolsContainer = symbolsContainer;\r\n        } else {\r\n            this.symbolsContainer = new ContainerElement();\r\n            this.symbolsContainer.name = \"Symbols\";\r\n\r\n            this.addChild(this.symbolsContainer);\r\n        }\r\n\r\n        this.currentSymbols = [];\r\n\r\n        for (let i = 0; i < this.reelCount; i++) {\r\n            this.currentSymbols.push([]);\r\n\r\n            for (let j = 0; j < this.symbolCount; j++) {\r\n                this.currentSymbols[i].push(null);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected addCurrentSymbol(reelIndex: number, symbolIndex: number): void {\r\n        if (this.currentSymbols[reelIndex][symbolIndex] === null) {\r\n            const id = this.currentReels[reelIndex].symbols[symbolIndex];\r\n\r\n            const symbol = this.symbols.getSymbol(id - 1, Symbol.CaseNormal);\r\n            symbol.position.x = this.reelX[reelIndex] - symbol.offsetX;\r\n            symbol.position.y = this.reelY[reelIndex] + this.symbolHeight * symbolIndex - symbol.offsetY;\r\n\r\n            this.noWinSymbolsContainer.addChild(symbol);\r\n\r\n            this.currentSymbols[reelIndex][symbolIndex] = symbol;\r\n        }\r\n    }\r\n\r\n    protected removeCurrentSymbol(reelIndex: number, symbolIndex: number): void {\r\n        if (this.currentSymbols[reelIndex][symbolIndex] !== null) {\r\n            this.symbols.returnSymbol(this.currentSymbols[reelIndex][symbolIndex]);\r\n\r\n            this.currentSymbols[reelIndex][symbolIndex] = null;\r\n        }\r\n    }\r\n\r\n    protected allSymbolsGoToReset(): void {\r\n        const caseType = Symbol.CaseNormal;\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            // for (let j = 0; j < this.currentSymbols[i].length; j++) {\r\n            for (let j = this.currentSymbols[i].length - 1; j >= 0; j--) {\r\n                const symbol = this.currentSymbols[i][j];\r\n\r\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n                    const currentCaseType = symbol.getCurrentCase();\r\n\r\n                    if (caseType !== currentCaseType && currentCaseType.indexOf(Symbol.CaseIdle) === -1) {\r\n                        symbol.goToCase(caseType);\r\n                    }\r\n\r\n                    this.symbolsContainer.addChild(symbol);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected allSymbolsGoToCase(caseType: string, noWin: boolean): void {\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            // for (let j = 0; j < this.currentSymbols[i].length; j++) {\r\n            for (let j = this.currentSymbols[i].length - 1; j >= 0; j--) {\r\n                const symbol = this.currentSymbols[i][j];\r\n\r\n                if (symbol !== null && this.allowSymbolGoToCase(i, j, caseType)) {\r\n                    symbol.goToCase(caseType);\r\n\r\n                    if (noWin) {\r\n                        this.noWinSymbolsContainer.addChild(symbol);\r\n                    } else {\r\n                        this.symbolsContainer.addChild(symbol);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    protected winSymbolsGoToCase(winIndex: number, caseType: string, useValue: boolean): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        let symbols: Array<Symbol> = [];\r\n\r\n        switch (win.trigger) {\r\n            case Communication.Game.WinTrigger.Payline:\r\n                symbols = this.winSymbolsGoToCaseAsPayline(winIndex, caseType);\r\n                break;\r\n            case Communication.Game.WinTrigger.Scatter:\r\n                symbols = this.winSymbolsGoToCaseAsScatter(winIndex, caseType);\r\n                break;\r\n            case Communication.Game.WinTrigger.Way:\r\n                symbols = this.winSymbolsGoToCaseAsWay(winIndex, caseType);\r\n                break;\r\n            default:\r\n                symbols = this.winSymbolsGoToCaseAsCustom(winIndex, caseType);\r\n                break;\r\n        }\r\n\r\n        if (useValue && symbols.length > 0 && win.amount > 0) {\r\n            this.value.visible = true;\r\n            this.value.position.x = symbols[0].position.x + symbols[0].offsetX;\r\n            this.value.position.y = symbols[0].position.y + symbols[0].offsetY;\r\n\r\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                ImageTextCounterElement.Round = true;\r\n                this.value.play(parseInt(NumberUtils.devide(win.amount, BetManager.CoinSize).toString()));\r\n            } else {\r\n                ImageTextCounterElement.Round = false;\r\n                this.value.play(parseFloat(Languages.formatText(Languages.FormatMoney, win.amount.toString())));\r\n            }\r\n\r\n            let shadowCnt = <ContainerElement>this.value.getChildElementByName(\"ValueCounterShadow\");\r\n            if (shadowCnt) {\r\n                let shadowImg = <ImageElement>shadowCnt.getChildByName(\"CounterShadow\");\r\n                let counterElement = <ImageTextCounterElement>this.value.getChildElementByName(\"WinCounter\");\r\n                shadowImg.width = counterElement.width * 1.2;\r\n            }\r\n        } else {\r\n            this.value.visible = false;\r\n        }\r\n\r\n        return symbols;\r\n    }\r\n\r\n    protected winSymbolsGoToCaseAsPayline(winIndex: number, caseType: string): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        const symbols: Array<Symbol> = [];\r\n\r\n        if (this.paylines != null) {\r\n            const definition = PaylinesDefinitions.getPaylineDefinitionsById(\r\n                win.paylineId,\r\n                this.paylines.paylineDefinition,\r\n            );\r\n\r\n            for (let i = 0; i < definition.length; i++) {\r\n                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\r\n                    const symbol = this.currentSymbols[i][definition[i]];\r\n                    symbol.goToCase(caseType);\r\n\r\n                    this.symbolsContainer.addChild(symbol);\r\n\r\n                    symbols.push(symbol);\r\n                }\r\n            }\r\n        }\r\n\r\n        return symbols;\r\n    }\r\n\r\n    protected winSymbolsGoToCaseAsScatter(winIndex: number, caseType: string): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        const symbols: Array<Symbol> = [];\r\n\r\n        for (let i = 0; i < this.reelCount; i++) {\r\n            for (let j = 0; j < this.symbolCount; j++) {\r\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n                    const symbol = this.currentSymbols[i][j];\r\n                    symbol.goToCase(caseType);\r\n\r\n                    this.symbolsContainer.addChild(symbol);\r\n\r\n                    symbols.push(symbol);\r\n                }\r\n            }\r\n        }\r\n\r\n        return symbols;\r\n    }\r\n\r\n    protected winSymbolsGoToCaseAsWay(winIndex: number, caseType: string): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        const symbols: Array<Symbol> = [];\r\n\r\n        for (let i = 0; i < this.reelCount; i++) {\r\n            for (let j = 0; j < this.symbolCount; j++) {\r\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n                    const symbol = this.currentSymbols[i][j];\r\n                    symbol.goToCase(caseType);\r\n\r\n                    this.symbolsContainer.addChild(symbol);\r\n\r\n                    symbols.push(symbol);\r\n                }\r\n            }\r\n        }\r\n\r\n        return symbols;\r\n    }\r\n\r\n    protected winSymbolsGoToCaseAsCustom(winIndex: number, caseType: string): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        if (win.type == Communication.Game.WinType.Feature) {\r\n            return [];\r\n        }\r\n        const symbols: Array<Symbol> = [];\r\n        for (let i = 0; i < this.reelCount; i++) {\r\n            for (let j = 0; j < this.symbolCount; j++) {\r\n                if ((win.mask[i] & (1 << j)) !== 0 && this.allowSymbolGoToCase(i, j, caseType)) {\r\n                    const symbol = this.currentSymbols[i][j];\r\n                    symbol.goToCase(caseType);\r\n                    this.symbolsContainer.addChild(symbol);\r\n                    symbols.push(symbol);\r\n                }\r\n            }\r\n        }\r\n        return symbols;\r\n    }\r\n\r\n    private collectSymbols(callback: () => void) {\r\n        this.csTimer = CreateFrameTimer(\"collectingSymbolsTimer\");\r\n        this.csTimer.on(FrameTimerEvents.Complete, () => {\r\n            if (callback != null) callback();\r\n            this.csTimer.stop();\r\n        });\r\n        let timerDelay = 0;\r\n        for (let winIndex = 0; winIndex < this.currentWins.length; winIndex++) {\r\n            const win = this.currentWins[winIndex];\r\n            if (win.type == Communication.Game.WinType.Feature) continue;\r\n            for (let i = 0; i < this.reelCount; i++) {\r\n                for (let j = 0; j < this.symbolCount; j++) {\r\n                    if ((win.mask[i] & (1 << j)) !== 0) {\r\n                        const symbol = this.currentSymbols[i][j];\r\n                        let isNewCollect = this.collectFrames.isNew(symbol.id + 1);\r\n                        if (isNewCollect) {\r\n                            symbol.goToCase(Symbol.CaseCollecting);\r\n                            let sGp = symbol.getGlobalPosition();\r\n                            this.collectFrames.collectSymbol(symbol.id + 1, sGp.x, sGp.y);\r\n                            timerDelay = 30;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.csTimer.start(timerDelay);\r\n    }\r\n\r\n    protected allowSymbolGoToCase(reelIndex: number, symbolIndex: number, caseType: string): boolean {\r\n        return true;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PAYLINES\r\n    //******************************************************************************************************************\r\n\r\n    protected createPaylines(paylines: Paylines): void {\r\n        this.paylines = paylines;\r\n\r\n        this.allPaylinesGoToCase(Payline.CaseNormal);\r\n    }\r\n\r\n    protected allPaylinesGoToCase(caseType: string): void {\r\n        if (this.paylines != null) {\r\n            this.paylines.goToCase(caseType);\r\n        }\r\n    }\r\n\r\n    protected winPaylineGoToCase(winIndex: number, caseType: string): void {\r\n        if (this.paylines != null) {\r\n            const win = this.currentWins[winIndex];\r\n\r\n            if (win.trigger === Communication.Game.WinTrigger.Payline) {\r\n                if (caseType === Payline.CaseCycle && this.currentWins.length === 1) {\r\n                    this.paylines.goToCase(Payline.CaseSingleCycle, win.paylineId);\r\n                } else {\r\n                    this.paylines.goToCase(caseType, win.paylineId);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  ANIMATIONS\r\n    //******************************************************************************************************************\r\n\r\n    protected createAnimations(): void {\r\n        this.animationsContainer = new ContainerElement();\r\n        this.animationsContainer.name = \"Animations\";\r\n\r\n        this.addChild(this.animationsContainer);\r\n\r\n        if (this.childs[\"Value\"]) {\r\n            this.value = this.childs[\"Value\"];\r\n\r\n            this.animationsContainer.addChild(this.value);\r\n        }\r\n\r\n        this.animations = [];\r\n\r\n        for (let i = 0; i < this.animationNames.length; i++) {\r\n            if (this.childs[this.animationNames[i]]) {\r\n                let animation = this.childs[this.animationNames[i]];\r\n                animation.visible = false;\r\n                animation.on(\"finished\", this.onAnimationFinished.bind(this));\r\n                animation.on(TimelineElement.AnimationComplete, this.onAnimationComplete.bind(this));\r\n                animation.on(\"calculationFinished\", this.onCalculationFinished.bind(this));\r\n\r\n                this.animations.push(animation);\r\n\r\n                this.animationsContainer.addChild(animation);\r\n            }\r\n        }\r\n\r\n        this.currentAnimationIndex = null;\r\n        this.currentAnimationFinished = true;\r\n    }\r\n\r\n    protected resetAnimations(): void {\r\n        this.currentAnimationIndex = null;\r\n        this.currentAnimationFinished = true;\r\n\r\n        for (let i = 0; i < this.animations.length; i++) {\r\n            const animation = this.animations[i];\r\n            animation.visible = false;\r\n            animation.stop();\r\n        }\r\n    }\r\n\r\n    protected startAnimation(): void {\r\n        this.currentAnimationIndex = this.getAnimationIndex();\r\n        this.currentAnimationFinished = false;\r\n\r\n        const animation = this.animations[this.currentAnimationIndex];\r\n        animation.visible = true;\r\n\r\n        if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n            ImageTextCounterElement.Round = true;\r\n            animation.play(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\r\n        } else {\r\n            ImageTextCounterElement.Round = false;\r\n            animation.play(this.currentWin);\r\n        }\r\n    }\r\n\r\n    protected stopAnimation(): void {\r\n        if (this.currentAnimationIndex != null) {\r\n            const animation = this.animations[this.currentAnimationIndex];\r\n            animation.visible = true;\r\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                ImageTextCounterElement.Round = true;\r\n                animation.goToOutro(parseInt(NumberUtils.devide(this.currentWin, BetManager.CoinSize).toString()));\r\n            } else {\r\n                ImageTextCounterElement.Round = false;\r\n                animation.goToOutro(this.currentWin);\r\n            }\r\n\r\n            this.currentAnimationIndex = null;\r\n            this.currentAnimationFinished = true;\r\n        }\r\n    }\r\n\r\n    protected getAnimationIndex(): number {\r\n        return this.currentMultiplierIndex;\r\n    }\r\n\r\n    protected onCalculationFinished(): void {\r\n        //win0 has no counting duration, so we want to override total win update\r\n        this.emit(WinAnimator.FinishQuickWinCalculation);\r\n    }\r\n\r\n    protected onAnimationFinished(): void {\r\n        this.currentAnimationFinished = true;\r\n\r\n        this.emit(WinAnimator.FinishWinCalculation);\r\n    }\r\n\r\n    protected onAnimationComplete(): void {\r\n        this.currentAnimationIndex = null;\r\n        this.currentMultiplierIndex = -1;\r\n\r\n        this.finishFirstWins();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  IDLE\r\n    //******************************************************************************************************************\r\n\r\n    protected idle(): void {\r\n        for (let i = 0; i < this.getIdleActiveElementsCount(); i++) {\r\n            const symbol =\r\n                this.currentSymbols[Math.floor(Math.random() * this.reelCount)][\r\n                    Math.floor(Math.random() * this.symbolCount)\r\n                ];\r\n\r\n            if (symbol && symbol.getCurrentCase() === Symbol.CaseNormal) {\r\n                if (symbol.hasCase(Symbol.CaseIdle)) {\r\n                    symbol.goToCase(Symbol.CaseIdle);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.startTimer(WinAnimator.Idle, this.getIdleDelay());\r\n    }\r\n\r\n    protected getInitialIdleDelay(): number {\r\n        return 60;\r\n    }\r\n\r\n    protected getIdleDelay(): number {\r\n        return 60;\r\n    }\r\n\r\n    protected getIdleActiveElementsCount(): number {\r\n        return 2;\r\n    }\r\n}\r\n\r\nexport const WinAnimatorAttributes = {\r\n    /**\r\n     * Name of config for win animator.\r\n     * @property Configs\r\n     * @type string\r\n     * @default null\r\n     */\r\n    CONFIGS: \"Configs\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/WinAnimator.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Attributes } from \"../Utils/Attributes\";\r\n\r\n/**\r\n * The payline element is used for hold payline special cases and handle payline behaviour on screen.\r\n * @class Symbol\r\n * @extends SwitchElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Payline extends SwitchElement {\r\n    //base payline cases\r\n    static CaseSelect: string = \"SELECT\";\r\n\r\n    static CaseNormal: string = \"NORMAL\";\r\n    static CaseNowin: string = \"NOWIN\";\r\n    static CaseWin: string = \"WIN\";\r\n    static CaseSingleCycle: string = \"SINGLE_CYCLE\";\r\n    static CaseCycle: string = \"CYCLE\";\r\n\r\n    zIndex: number = 0;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        this.zIndex = Attributes.assignFloatAttribute(node, PaylineAttributes.Z_INDEX, this.zIndex);\r\n    }\r\n}\r\n\r\nexport const PaylineAttributes = {\r\n    /**\r\n     * Z-index of symbol on screen\r\n     * @property Zindex\r\n     * @default 0\r\n     */\r\n    Z_INDEX: \"Zindex\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Payline.ts\n **/","import { engineComponent, ArrayUtils, StringUtils } from \"neo-common\";\r\nimport { BaseElement, BaseElementAttributes } from \"./BaseElement\";\r\nimport { ContainerElement } from \"./ContainerElement\";\r\nimport { SwitchStyle, SwitchStyleCaseAttributes } from \"../Styles/SwitchStyle\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { AnimationElement } from \"./AnimationElement\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ParticleElement } from \"./ParticleElement\";\r\nimport { Attributes } from \"../../../Utils/Attributes\";\r\nimport { ITweenable, Tweens, TweensAttributes } from \"../../Effects/Tweens\";\r\nimport { ImageElementAttributes } from \"./ImageElement\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\n\r\n/**\r\n * SwitchElement class is class which creates holder for other elements and holds cases which can change children by switching cases.\r\n * Can be defined only with SwitchStyle (See SwitchStyle class).\r\n * Default case is NONE.\r\n * Example 1:\r\n *   <SwitchElement Class=\"SwitchElement\" Style=\"SwitchStyle\" />\r\n *\r\n * @class SwitchElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class SwitchElement extends BaseElement {\r\n    // event for dispatch end of movie clip\r\n    static AnimationComplete: string = \"animationComplete\";\r\n    static FinishAnimation: string = \"finishAnimation\";\r\n\r\n    // style is mandatory in this element\r\n    protected style: SwitchStyle;\r\n    protected case: string;\r\n\r\n    protected elements: ContainerElement;\r\n\r\n    protected timer: FrameTimerEventEmitter;\r\n\r\n    // TODO clean\r\n    center: boolean;\r\n    // symbol width without offsetX\r\n    private _symbolWidth: number;\r\n    // symbol height without offsetY\r\n    private _symbolHeight: number;\r\n\r\n    private dynamicTime = 0;\r\n\r\n    protected previousRandomCase: number = -1;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        // default case\r\n        this.case = \"NONE\";\r\n        this.center = false;\r\n\r\n        this.timer = CreateFrameTimer(\"timer\");\r\n    }\r\n\r\n    public get symbolWidth(): number {\r\n        return this._symbolWidth;\r\n    }\r\n\r\n    public get symbolHeight(): number {\r\n        return this._symbolHeight;\r\n    }\r\n\r\n    public set symbolWidth(value: number) {\r\n        this._symbolWidth = value;\r\n    }\r\n\r\n    public set symbolHeight(value: number) {\r\n        this._symbolHeight = value;\r\n    }\r\n\r\n    public get hasElements(): boolean {\r\n        return this.elements != null && this.elements.childs != null;\r\n    }\r\n\r\n    public getAllChildElements(): Object {\r\n        if (this.hasElements) {\r\n            return this.elements.childs;\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    public getChildElementByName(name: string): Object {\r\n        if (this.hasElements) {\r\n            return this.elements.childs[name];\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(SwitchElementAttributes.STYLE)) {\r\n            this.style = <SwitchStyle>StyleManager.Styles[node.getAttribute(SwitchElementAttributes.STYLE)];\r\n            if (this.style != null) {\r\n                // get all elements and add them to this display list\r\n                if (this.style.container != null) {\r\n                    if (\r\n                        node.hasAttribute(SwitchElementAttributes.CLONE) &&\r\n                        StringUtils.parseBoolean(node.getAttribute(SwitchElementAttributes.CLONE))\r\n                    ) {\r\n                        this.elements = this.style.container.clone();\r\n                    } else {\r\n                        this.elements = this.style.container;\r\n                    }\r\n                    this.addChild(this.elements);\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(SwitchElementAttributes.STYLE));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\r\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\r\n        }\r\n        if (this.maskGraphics != null) {\r\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleX\")) {\r\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleY\")) {\r\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskX\")) {\r\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskY\")) {\r\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param node\r\n     */\r\n    public runBezierTween(node: Element): void {\r\n        let bezierX: Array<number> = null;\r\n        let bezierY: Array<number> = null;\r\n        let bezier: any = null;\r\n\r\n        // if (node.hasAttribute(ImageElementAttributes.BEZIER_TWEEN_X) && node.hasAttribute(ImageElementAttributes.BEZIER_TWEEN_Y)) {\r\n        bezierX = ArrayUtils.numberArray(node.getAttribute(\"BezierTweenX\"));\r\n        bezierY = ArrayUtils.numberArray(node.getAttribute(\"BezierTweenY\"));\r\n        bezier = { values: [] };\r\n\r\n        for (let i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\r\n            bezier.values.push({ x: bezierX[i], y: bezierY[i] });\r\n        }\r\n\r\n        const tweenEase: string = null;\r\n        const tweenDuration: number = parseInt(node.getAttribute(\"BezierTweenDuration\"));\r\n        const tweenDelay: number = null;\r\n        const tweenLoop: boolean = null;\r\n\r\n        Tweens.bezierTween(this, { bezier, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    updateByNode(node: Element) {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(SwitchElementAttributes.CASE)) {\r\n            this.goToCase(node.getAttribute(SwitchElementAttributes.CASE));\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            if (node.hasAttribute(\"BitmapMaskScaleTweenY\")) {\r\n                this.runBitmapMaskScaleTween(node, this.maskSprite);\r\n            }\r\n\r\n            if (node.hasAttribute(\"BitmapMaskScaleY\")) {\r\n                this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"BitmapMaskScaleX\")) {\r\n                this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\r\n            }\r\n        }\r\n\r\n        if (this.maskGraphics != null) {\r\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleX\")) {\r\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleY\")) {\r\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskX\")) {\r\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskY\")) {\r\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"BezierTweenX\") && node.hasAttribute(\"BezierTweenY\")) {\r\n            this.runBezierTween(node);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Find out if this element has case s.\r\n     * @method hasCase\r\n     * @param s name of case\r\n     * @return Boolean\r\n     */\r\n    hasCase(s: string): Boolean {\r\n        return this.style != null && this.style.cases != null && this.style.cases[s];\r\n    }\r\n\r\n    /**\r\n     * Returns xml element of case s.\r\n     * @method getCase\r\n     * @param s name of case\r\n     * @return Element\r\n     */\r\n    getCase(s: string): Element {\r\n        if (this.style != null && this.style.cases != null && this.style.cases[s]) {\r\n            return this.style.cases[s];\r\n        }\r\n        return null;\r\n    }\r\n\r\n    public getCurrentCase(): string {\r\n        return this.case;\r\n    }\r\n\r\n    /**\r\n     * Switch this elemenet to case s.\r\n     * @method goToCase\r\n     * @param s name of case\r\n     * @param emitEvent boolean\r\n     * @return void\r\n     */\r\n    goToCase(s: string, emitEvent: boolean = false): void {\r\n        if (emitEvent) {\r\n            this.animationComplete();\r\n        }\r\n\r\n        if (this.style != null && this.style.cases != null && this.case !== s) {\r\n            if (this.timer != null) {\r\n                this.timer.removeAllListeners(FrameTimerEvents.Complete);\r\n                this.timer.stop();\r\n            }\r\n\r\n            if (this.hasCase(s)) {\r\n                let node: Element = this.style.cases[s];\r\n                if (node != null) {\r\n                    if (DEBUG) {\r\n                        if (node.hasAttribute(\"Debug\") && node.getAttribute(\"Debug\") === \"true\") {\r\n                            debugger;\r\n                        }\r\n                    }\r\n\r\n                    if (node.hasAttribute(\"FinishHandler\")) {\r\n                        this.emit(SwitchElement.FinishAnimation);\r\n                    }\r\n\r\n                    let element: any;\r\n                    this.case = s;\r\n                    let next: Element = node.firstElementChild;\r\n                    let arr: Array<string> = [];\r\n                    while (next != null) {\r\n                        arr.push(next.nodeName);\r\n                        element = this.elements.childs[next.nodeName];\r\n                        if (element != null) {\r\n                            element.visible = true;\r\n                            // send new node to element and set / change new attributes\r\n\r\n                            /*if(this.center) {\r\n                                if (this._symbolWidth != null) {\r\n                                    element.pivot.x = this._symbolWidth / 2;\r\n                                }\r\n                                if (this._symbolHeight != null) {\r\n                                    element.pivot.y = this._symbolHeight / 2;\r\n                                }\r\n                            }*/\r\n                            element.updateByNode(next);\r\n                        } else {\r\n                            if (DEBUG) {\r\n                                this.log(\r\n                                    \"WARNING no element child with name: \" +\r\n                                        next.nodeName +\r\n                                        \" in case: \" +\r\n                                        s +\r\n                                        \" in style: \" +\r\n                                        this.style.name,\r\n                                );\r\n                            }\r\n                        }\r\n                        next = next.nextElementSibling;\r\n                    }\r\n\r\n                    for (let key in this.elements.childs) {\r\n                        this.elements.childs[key].removeAllListeners();\r\n\r\n                        let found: boolean = false;\r\n                        for (let i: number = 0; i < arr.length; i++) {\r\n                            if (key === arr[i]) {\r\n                                found = true;\r\n                            }\r\n                        }\r\n                        if (!found) {\r\n                            if (this.elements.childs[key] instanceof ParticleElement) {\r\n                                (this.elements.childs[key] as any as ParticleElement).stop();\r\n                            } else if (this.elements.childs[key] instanceof SwitchElement) {\r\n                                this.elements.childs[key].visible = false;\r\n                                this.elements.childs[key].goToCase(\"EMPTY\");\r\n                            } else if (this.elements.childs[key] instanceof PIXI.DisplayObject) {\r\n                                this.elements.childs[key].visible = false;\r\n                            }\r\n\r\n                            Tweens.removeTweens(this.elements.childs[key]);\r\n                        }\r\n                    }\r\n\r\n                    let nextCase: string = null;\r\n                    if (node.hasAttribute(SwitchStyleCaseAttributes.NEXT_CASE)) {\r\n                        nextCase = node.getAttribute(SwitchStyleCaseAttributes.NEXT_CASE);\r\n                    } else if (node.hasAttribute(SwitchStyleCaseAttributes.NEXT_RANDOM_CASE)) {\r\n                        nextCase = this.getRandomCase(node.getAttribute(SwitchStyleCaseAttributes.NEXT_RANDOM_CASE));\r\n                    }\r\n\r\n                    if (nextCase != null && this.hasCase(nextCase)) {\r\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\r\n                            let multiplier = 1;\r\n                            if (node.hasAttribute(SwitchElementAttributes.RANDOM)) {\r\n                                multiplier = this.getRandomDurationMultiplier(node);\r\n                            }\r\n\r\n                            this.timer.on(FrameTimerEvents.Complete, this.goToCase.bind(this, nextCase));\r\n                            if (node.getAttribute(SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\r\n                                this.timer.start(this.dynamicTime * multiplier);\r\n                            } else {\r\n                                this.timer.start(\r\n                                    parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * multiplier,\r\n                                );\r\n                            }\r\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\r\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\r\n                            if (element) {\r\n                                element.on(\r\n                                    AnimationElement.AnimationComplete,\r\n                                    this.goToCase.bind(this, nextCase, true),\r\n                                );\r\n                            }\r\n                        } else {\r\n                            this.goToCase(nextCase);\r\n                        }\r\n                    } else {\r\n                        if (node.hasAttribute(SwitchStyleCaseAttributes.TIMER)) {\r\n                            let multiplier = 1;\r\n                            if (node.hasAttribute(SwitchElementAttributes.RANDOM)) {\r\n                                multiplier = this.getRandomDurationMultiplier(node);\r\n                            }\r\n\r\n                            this.timer.on(FrameTimerEvents.Complete, this.animationComplete.bind(this));\r\n                            if (node.getAttribute(SwitchStyleCaseAttributes.TIMER) === \"dynamic\") {\r\n                                this.timer.start(this.dynamicTime * multiplier);\r\n                            } else {\r\n                                this.timer.start(\r\n                                    parseInt(node.getAttribute(SwitchStyleCaseAttributes.TIMER)) * multiplier,\r\n                                );\r\n                            }\r\n                        } else if (node.hasAttribute(SwitchStyleCaseAttributes.HANDLER)) {\r\n                            element = this.elements.childs[node.getAttribute(SwitchStyleCaseAttributes.HANDLER)];\r\n                            if (element) {\r\n                                element.on(AnimationElement.AnimationComplete, this.animationComplete.bind(this));\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no case: \" + s + \" for \" + this.name);\r\n                }\r\n            }\r\n        } else {\r\n        }\r\n\r\n        if (emitEvent) {\r\n            this.animationComplete();\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {Element} node\r\n     * @returns {number}\r\n     */\r\n    private getRandomDurationMultiplier(node: Element): number {\r\n        let result = 1;\r\n\r\n        let dataArray = ArrayUtils.numberArray(node.getAttribute(SwitchElementAttributes.RANDOM));\r\n        if (dataArray.length > 0) {\r\n            let max = dataArray[0];\r\n            let min = 1;\r\n\r\n            if (dataArray.length === 2) {\r\n                min = dataArray[0];\r\n                max = min > dataArray[1] ? min : dataArray[1];\r\n            }\r\n\r\n            result = Math.round(this.getRandom(min, max));\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    /**\r\n     * Get random case from array of cases.\r\n     * @returns {string}\r\n     * @param s\r\n     */\r\n    private getRandomCase(s: string): string {\r\n        let result = 0;\r\n\r\n        let dataArray: Array<string> = ArrayUtils.stringArray(s);\r\n        if (dataArray.length > 0) {\r\n            let max = dataArray.length - 1;\r\n            let min = 0;\r\n\r\n            result = Math.round(this.getRandom(min, max));\r\n\r\n            if (result == this.previousRandomCase) {\r\n                while (result == this.previousRandomCase) {\r\n                    result = Math.round(this.getRandom(min, max));\r\n                }\r\n\r\n                this.previousRandomCase = result;\r\n            } else {\r\n                this.previousRandomCase = result;\r\n            }\r\n        } else {\r\n            return null;\r\n        }\r\n\r\n        return dataArray[result];\r\n    }\r\n\r\n    /**\r\n     * Set time of timer dynamicaly from code.\r\n     * @param {number} time\r\n     */\r\n    public setDynamicTime(time: number): void {\r\n        this.dynamicTime = time;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} min\r\n     * @param {number} max\r\n     * @returns {number}\r\n     */\r\n    public getRandom(min: number, max: number): number {\r\n        return Math.random() * (max - min) + min;\r\n    }\r\n\r\n    /**\r\n     * Emit complete event when finish changing state.\r\n     * @method animationComplete\r\n     * @return void\r\n     */\r\n    animationComplete(): void {\r\n        this.emit(SwitchElement.AnimationComplete);\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return SwitchElement\r\n     */\r\n    clone(): SwitchElement {\r\n        const element: SwitchElement = new SwitchElement();\r\n\r\n        element.style = this.style;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            elementMask.pivot.x = this.maskSprite.pivot.x;\r\n            elementMask.pivot.y = this.maskSprite.pivot.y;\r\n\r\n            elementMask.scale.x = this.maskSprite.scale.x;\r\n            elementMask.scale.y = this.maskSprite.scale.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n        }\r\n\r\n        element.elements = this.elements.clone();\r\n        element.addChild(element.elements);\r\n\r\n        element.case = this.case;\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runBitmapMaskScaleTween(node: Element, maskObject: any): void {\r\n        let scaleTweenY: Array<number>;\r\n        let tweenValues: Array<number> = [];\r\n        let tweenDuration: Array<number> = [];\r\n        let tweenEase: Array<string> = [];\r\n        let tweenDelay: Array<number> = [];\r\n        let tweenLoop: boolean = false;\r\n\r\n        let maskSprite: ITweenable = <any>maskObject;\r\n\r\n        if (maskObject instanceof ShapeElement) {\r\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenScaleY\"));\r\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenYScaleDuration\") || \"120\");\r\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\r\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\r\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\r\n        } else {\r\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleTweenY\"));\r\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleYTweenDuration\") || \"120\");\r\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\r\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\r\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\r\n        }\r\n\r\n        Tweens.removeTweens(maskSprite, \"all\");\r\n        Tweens.customTween(maskSprite, {\r\n            tween: \"scale.y\",\r\n            tweenValues,\r\n            tweenEase,\r\n            tweenDuration,\r\n            tweenDelay,\r\n            tweenLoop,\r\n        });\r\n    }\r\n}\r\n\r\n/**\r\n * XML has attributes SwitchElementAttributes, BaseElementAttributes\r\n * @type {{STYLE: string; CASE: string}}\r\n */\r\nexport const SwitchElementAttributes = {\r\n    /*\r\n     * Property case is used for set element to some case\r\n     * @property Case\r\n     * @type string\r\n     * @default null\r\n     */\r\n    CASE: \"Case\",\r\n    CLONE: \"Clone\",\r\n    DEBUG_INFO: \"DebugInfo\",\r\n    DEBUG: \"Debug\",\r\n    /*\r\n     * Style holds elements as ContainerElement and also holds cases as xml nodes.\r\n     * Style for switch element has to be instance of SwitchStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    /*\r\n     * Multiplies timer with random number between min and max\r\n     * @property Random\r\n     * @type string\r\n     * @default 1\r\n     */\r\n    RANDOM: \"Random\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/SwitchElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * SwitchStyle create container from child <elements> and holds xml nodes of cases for this switch elements.\r\n * Example:\r\n *   <SwitchStyle Class=\"SwitchStyle\">\r\n *      <Elements>\r\n *           <Child1 />\r\n *           <Child2 X=\"0\" />\r\n *           ...\r\n *      </Elements>\r\n *      <Cases>\r\n *          <Case Case=\"CASE1\">\r\n *              <Child2 X=\"50\" />\r\n *          </Case>\r\n *          <Case Case=\"CASE2\">\r\n *              <Child1 X=\"200\" />\r\n *          </Case>\r\n *      </Cases>\r\n *   </SwitchStyle>\r\n * @class SwitchStyle\r\n * @extends Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class SwitchStyle extends Style {\r\n    // container for childs of switch element\r\n    container: ContainerElement;\r\n\r\n    // xml nodes added to object by case name\r\n    cases: Object;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.cases = {};\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return  void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case \"Elements\":\r\n                    this.container = new ContainerElement();\r\n                    this.container.create(next);\r\n                    break;\r\n                case \"Cases\":\r\n                    let nextCase: Element = next.firstElementChild;\r\n                    while (nextCase != null) {\r\n                        if (nextCase.hasAttribute(SwitchStyleCaseAttributes.CASE)) {\r\n                            if (this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] !== null) {\r\n                                this.cases[nextCase.getAttribute(SwitchStyleCaseAttributes.CASE)] = nextCase;\r\n                            } else {\r\n                                if (DEBUG) {\r\n                                    this.log(\r\n                                        \"ERROR case \" +\r\n                                            nextCase.getAttribute(\"Case\") +\r\n                                            \" already exist in switchStyle \" +\r\n                                            node.nodeName,\r\n                                    );\r\n                                }\r\n                            }\r\n                        }\r\n                        nextCase = nextCase.nextElementSibling;\r\n                    }\r\n                    break;\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n}\r\n\r\nconst SwitchStyleAttributes = {};\r\n\r\nexport const SwitchStyleCaseAttributes = {\r\n    CASE: \"Case\",\r\n    HANDLER: \"Handler\",\r\n    NEXT_CASE: \"NextCase\",\r\n    NEXT_RANDOM_CASE: \"NextRandomCase\",\r\n    TIMER: \"Timer\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/SwitchStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * Style holds basic properties for all kind of styles.\r\n * @class Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class Style {\r\n    name: string;\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/Style.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { AnimationStyle } from \"../Styles/AnimationStyle\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\nimport { Tweens, ITweenable, TweensAttributes } from \"../../Effects/Tweens\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { TextElement } from \"../Texts/TextElement\";\r\nimport { IElement } from \"../Interfaces/IElement\";\r\nimport { Attributes } from \"../../../Utils/Attributes\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\n\r\n/**\r\n * AnimationElement can play animations from spritesheets.\r\n * AnimationElement uses spritesheets generated from editor (Adobe Animate) with json definition.\r\n * This element doesnt work without style. Style for this class is AnimationStyle.\r\n * Example:\r\n *   <AnimationElement Class=\"AnimationElement\" Style=\"AnimationStyle\" X=\"0\" Y=\"0\" />\r\n * @class AnimationElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class AnimationElement extends PIXI.extras.AnimatedSprite implements IElement, ITweenable {\r\n    // event for dispatch end of movie clip\r\n    static AnimationComplete: string = \"animationComplete\";\r\n\r\n    static DynamicTint: string = \"ff0000\";\r\n\r\n    private _uid: string;\r\n    private _cloned: boolean;\r\n    private __destroyed: boolean;\r\n\r\n    // style is mandatory in this element\r\n    protected _style: AnimationStyle;\r\n    // animation settings for movie clip\r\n    private _startFrame: number;\r\n    private _endFrame: number;\r\n    private _stop: boolean;\r\n    private _randomStartFrame: boolean;\r\n    private _reverse: boolean;\r\n    private _continue: boolean;\r\n\r\n    public usedInPool: boolean;\r\n\r\n    maskSprite: PIXI.Sprite;\r\n\r\n    static _destroyOptions: PIXI.DestroyOptions = {\r\n        children: true,\r\n    };\r\n\r\n    /**\r\n     * Let's create animation with empty texture\r\n     */\r\n    constructor() {\r\n        let textureArray: Array<PIXI.Texture> = [PIXI.Texture.EMPTY];\r\n\r\n        super(textureArray, false);\r\n        PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n\r\n        // default values\r\n        this._startFrame = 0;\r\n        this._randomStartFrame = false;\r\n        this.tint = 0xffffff;\r\n\r\n        this._cloned = false;\r\n        this.__destroyed = false;\r\n\r\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                this._uid = PerfDebug.generateElementUID(this);\r\n                PerfDebug.newElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    public update(deltaTime: number): void {\r\n        if (this.playing) {\r\n            super.update(deltaTime);\r\n        }\r\n    }\r\n\r\n    public create(node: Element): void {\r\n        this.createByNode(node);\r\n        this.updateByNode(node);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method _create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private createByNode(node: Element): void {\r\n        this.assertDestroyed(\"_create()\");\r\n\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\r\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        /*\r\n         * Style define animation. You can use one style on more than one elements.\r\n         * Style for AnimationElement has to be instance of AnimationStyle.\r\n         * @property Style\r\n         * @type string\r\n         */\r\n        if (\r\n            node.hasAttribute(AnimationElementAttributes.STYLE) ||\r\n            node.hasAttribute(AnimationElementAttributes.STYLE2)\r\n        ) {\r\n            if (node.hasAttribute(AnimationElementAttributes.STYLE)) {\r\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE)];\r\n            } else if (node.hasAttribute(AnimationElementAttributes.STYLE2)) {\r\n                this._style = <AnimationStyle>StyleManager.Styles[node.getAttribute(AnimationElementAttributes.STYLE2)];\r\n            }\r\n\r\n            if (this._style != null) {\r\n                if (this._style.startFrame != null) {\r\n                    this._startFrame = this._style.startFrame;\r\n                } else {\r\n                    this._startFrame = null;\r\n                }\r\n\r\n                if (this._style.endFrame != null) {\r\n                    this._endFrame = this._style.endFrame;\r\n                } else {\r\n                    this._endFrame = null;\r\n                }\r\n\r\n                if (this._style.stop != null) {\r\n                    this._stop = this._style.stop;\r\n                }\r\n\r\n                if (this._style.animation !== \"\") {\r\n                    let texture: PIXI.Texture;\r\n                    let textures: PIXI.Texture[] = [];\r\n                    if (this._endFrame != null) {\r\n                        for (let i = this._startFrame; i <= this._endFrame; i++) {\r\n                            let val = this.zerosPad(i, 4);\r\n                            texture = PIXI.utils.TextureCache[this._style.animation + val];\r\n                            if (texture != null) {\r\n                                if (i == this._startFrame) {\r\n                                    this.texture = texture;\r\n                                }\r\n\r\n                                textures.push(texture);\r\n                            } else {\r\n                                if (DEBUG) {\r\n                                    this.log(\r\n                                        \"WARNING: No texture\" +\r\n                                            this._style.animation +\r\n                                            val +\r\n                                            \" in TextureCache of AnimationElement!\",\r\n                                    );\r\n                                }\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\r\n                                \"WARNING: animation has no endframe number. Use ImageElement with attribute Animation instead AnimationElement!\",\r\n                            );\r\n                        }\r\n\r\n                        //  todo Disallow animations without endFrame\r\n                        let frame = this.zerosPad(this._startFrame, 4);\r\n                        texture = PIXI.utils.TextureCache[this._style.animation + frame];\r\n                        if (texture != null) {\r\n                            this.texture = texture;\r\n                            textures.push(texture);\r\n                        }\r\n                    }\r\n\r\n                    this.textures = textures;\r\n                    if (this.textures.length > 0) {\r\n                        this.onComplete = this._movieClipComplete.bind(this);\r\n\r\n                        this.loop = false;\r\n                        this.animationSpeed = 1;\r\n                        this.tint = 0xffffff;\r\n                        this.blendMode = PIXI.BLEND_MODES.NORMAL;\r\n                        this.alpha = 1;\r\n                        this._reverse = false;\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no frames in \" + this._style.animation);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR animation in style is not defined\");\r\n                    }\r\n                }\r\n\r\n                if (this._style.loop != null) {\r\n                    this.loop = this._style.loop;\r\n                }\r\n\r\n                if (this._style.reverse != null) {\r\n                    this._reverse = this._style.reverse;\r\n                }\r\n\r\n                if (this._style.speed != null) {\r\n                    this.animationSpeed = this._style.speed * (this._style.reverse ? -1 : 1);\r\n                }\r\n\r\n                if (this._style.tint != null) {\r\n                    this.tint = this._style.tint;\r\n                }\r\n\r\n                if (this._style.blendMode != null) {\r\n                    this.blendMode = CustomUtils.getBlendMode(this._style.blendMode);\r\n                }\r\n\r\n                if (this._style.alpha != null) {\r\n                    this.alpha = this._style.alpha;\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR missing style: \" + node.getAttribute(AnimationElementAttributes.STYLE));\r\n                }\r\n            }\r\n        }\r\n\r\n        this._randomStartFrame = Attributes.assignBooleanAttribute(\r\n            node,\r\n            AnimationElementAttributes.RANDOM_START_FRAME,\r\n            this._randomStartFrame,\r\n        );\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.MASK)) {\r\n            let next: Element = node.parentElement.firstElementChild;\r\n            while (next != null) {\r\n                if (next.nodeName === node.getAttribute(AnimationElementAttributes.MASK)) {\r\n                    let shapeElement: ShapeElement = new ShapeElement();\r\n                    shapeElement.create(next);\r\n                    this.mask = shapeElement;\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n\r\n            if (this.mask == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(AnimationElementAttributes.MASK));\r\n                }\r\n            }\r\n        }\r\n\r\n        /**\r\n         * todo Replace by AnimationElementAttributes\r\n         */\r\n        if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK)) {\r\n            let image = StageController.getTextureByResourceId(\r\n                node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\r\n            );\r\n\r\n            if (image != null) {\r\n                this.maskSprite = new PIXI.Sprite(image);\r\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_X)) {\r\n                    this.maskSprite.position.x = parseFloat(\r\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_X),\r\n                    );\r\n                }\r\n                if (node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_Y)) {\r\n                    this.maskSprite.position.y = parseFloat(\r\n                        node.getAttribute(AnimationElementAttributes.BITMAP_MASK_Y),\r\n                    );\r\n                }\r\n                if (!node.hasAttribute(AnimationElementAttributes.BITMAP_MASK_SHOW)) {\r\n                    this.addChild(this.maskSprite);\r\n                    this.mask = this.maskSprite;\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\r\n                        \"ERROR\" +\r\n                            this.componentName +\r\n                            \" no image with name for mask: \" +\r\n                            node.getAttribute(AnimationElementAttributes.BITMAP_MASK),\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\r\n            this.animationSpeed =\r\n                parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.createElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): void {\r\n        if (!node) {\r\n            this.logError(\"No node specified for element update!\");\r\n            return;\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(AnimationElementAttributes.DEBUG) &&\r\n                node.getAttribute(AnimationElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        if (\r\n            !node.hasAttribute(\"RemoveTweens\") ||\r\n            StringUtils.parseBoolean(node.getAttribute(\"RemoveTweens\")) != false\r\n        ) {\r\n            Tweens.removeTweens(this);\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.TINT)) {\r\n            if (node.getAttribute(AnimationElementAttributes.TINT) === \"0\") {\r\n                this.tint = null;\r\n            } else if (node.getAttribute(AnimationElementAttributes.TINT) === \"dynamic\") {\r\n                this.tint = parseInt(AnimationElement.DynamicTint, 16);\r\n            } else {\r\n                this.tint = parseInt(node.getAttribute(AnimationElementAttributes.TINT), 16);\r\n            }\r\n        }\r\n\r\n        this.alpha = Attributes.assignFloatAttribute(node, AnimationElementAttributes.ALPHA, this.alpha);\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.ANCHOR)) {\r\n            this.anchor.x = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\r\n            this.anchor.y = parseFloat(node.getAttribute(AnimationElementAttributes.ANCHOR));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.ROTATION)) {\r\n            this.rotation = this.degrees2radians(parseInt(node.getAttribute(AnimationElementAttributes.ROTATION)));\r\n        }\r\n\r\n        /**\r\n         * todo Replace by AnimationElementAttributes\r\n         */\r\n        if (node.hasAttribute(AnimationElementAttributes.START_ROTATION)) {\r\n            if (\r\n                node.getAttribute(AnimationElementAttributes.START_ROTATION) ===\r\n                AnimationElementAttributes.START_ROTATION\r\n            ) {\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        this.scale.x = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_X, this.scale.x);\r\n        this.scale.y = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SCALE_Y, this.scale.y);\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(AnimationElementAttributes.SCALE));\r\n        }\r\n\r\n        this.skew.x = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SKEW_X, this.skew.x);\r\n        this.skew.y = Attributes.assignFloatAttribute(node, AnimationElementAttributes.SKEW_Y, this.skew.y);\r\n\r\n        this.position.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.X, this.position.x);\r\n        this.position.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.Y, this.position.y);\r\n        this.pivot.x = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_X, this.pivot.x);\r\n        this.pivot.y = Attributes.assignIntAttribute(node, AnimationElementAttributes.PIVOT_Y, this.pivot.y);\r\n        this.visible = Attributes.assignBooleanAttribute(node, AnimationElementAttributes.VISIBLE, this.visible);\r\n\r\n        if (\r\n            node.hasAttribute(AnimationElementAttributes.CONTINUE) &&\r\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.CONTINUE))\r\n        ) {\r\n            this._continue = true;\r\n            this.playMe();\r\n        } else {\r\n            this._continue = false;\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(AnimationElementAttributes.PLAY) &&\r\n            StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.PLAY))\r\n        ) {\r\n            this._stop = false;\r\n            this._reverse = false;\r\n            if (\r\n                node.hasAttribute(AnimationElementAttributes.REVERSE) &&\r\n                StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE))\r\n            ) {\r\n                this._reverse = StringUtils.parseBoolean(node.getAttribute(AnimationElementAttributes.REVERSE));\r\n                this.animationSpeed = this.animationSpeed * (this._reverse ? -1 : 1);\r\n            }\r\n\r\n            if (node.hasAttribute(AnimationElementAttributes.SPEED)) {\r\n                this.animationSpeed =\r\n                    parseFloat(node.getAttribute(AnimationElementAttributes.SPEED)) * (this._reverse ? -1 : 1);\r\n            }\r\n\r\n            this.playMe();\r\n        } /*else if (this._startFrame != null && this._endFrame == null) {\r\n            this._stop = false;\r\n            this.playMe();\r\n        }*/\r\n\r\n        /**\r\n         * @deprecated\r\n         */\r\n        if (node.hasAttribute(AnimationElementAttributes.STOP)) {\r\n            //this._stop = true;\r\n            this.showMe(parseInt(node.getAttribute(AnimationElementAttributes.STOP)));\r\n        }\r\n\r\n        /**\r\n         *\r\n         */\r\n        if (node.hasAttribute(AnimationElementAttributes.SHOW_FRAME)) {\r\n            //this._stop = true;\r\n            this.showMe(parseInt(node.getAttribute(AnimationElementAttributes.SHOW_FRAME)));\r\n        }\r\n\r\n        this.runPositionTween(node);\r\n        this.runScaleTween(node);\r\n        this.runRotationTween(node);\r\n        this.runAlphaTween(node);\r\n        this.runTween(node);\r\n\r\n        if (DEBUG) {\r\n            /*this._printDebugInfo({\r\n             'element': 'Animation',\r\n             'style': this._style.node.nodeName,\r\n             'currentFrame': this.currentFrame,\r\n             'currentTime': this._currentTime,\r\n             'start': this._startFrame,\r\n             'end': this._endFrame,\r\n             'x': this.position.x,\r\n             'y': this.position.y\r\n             }, node);*/\r\n        }\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Play movie clip set up for this class.\r\n     * If animation has Loop property set to true play will loop throught the movie clip.\r\n     * If animation has Stop property set to true play will loop only single frame on start frame position.\r\n     * If animation has Reverse property set to true play will start from frame on end frame position.\r\n     *\r\n     * @method play\r\n     * @return void\r\n     */\r\n    playMe(frame: number = -1): void {\r\n        if (!this._continue || !this.playing) {\r\n            if (this._randomStartFrame && this._startFrame === 0 && this._endFrame != null) {\r\n                this._startFrame = Math.floor(Math.random() * this._endFrame);\r\n            }\r\n\r\n            if (this._reverse) {\r\n                this.gotoAndPlay(this._endFrame);\r\n            } else {\r\n                this.gotoAndPlay(this._startFrame);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {number} frameNumber\r\n     */\r\n    showMe(frameNumber: number): void {\r\n        if (frameNumber != null) {\r\n            this.gotoAndStop(frameNumber);\r\n        } else {\r\n            if (this._reverse) {\r\n                this.gotoAndStop(this._endFrame);\r\n            } else {\r\n                this.gotoAndStop(this._startFrame);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return movie clip.\r\n     * @method getMovieClip\r\n     * @return PIXI.extras.AnimatedSprite\r\n     *\r\n     * @deprecated - use only \"object\" instead \"object.getMovieClip()\"\r\n     */\r\n    getMovieClip(): PIXI.extras.AnimatedSprite {\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Dispatch event complete when movie clip goto last frame.\r\n     * @method movieClipComplete\r\n     * @return void\r\n     */\r\n    private _movieClipComplete(): void {\r\n        this.emit(AnimationElement.AnimationComplete);\r\n    }\r\n\r\n    /**\r\n     * Runs the position tween\r\n     * @method runPositionTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runPositionTween(node: Element): boolean {\r\n        if (\r\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_X) ||\r\n            !node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        let positionTweenX: Array<number>;\r\n        let positionTweenY: Array<number>;\r\n\r\n        let positionTweenPosition: string = Attributes.assignStringAttribute(\r\n            node,\r\n            AnimationElementAttributes.POSITION_TWEEN_POSITION,\r\n            null,\r\n        );\r\n        if (positionTweenPosition == AnimationElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X)).map(\r\n                (value) => value + this.position.x,\r\n            );\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y)).map(\r\n                (value) => value + this.position.y,\r\n            );\r\n        } else {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_X));\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_Y));\r\n        }\r\n\r\n        let bezierX: Array<number> = null;\r\n        let bezierY: Array<number> = null;\r\n        let bezier: any = null;\r\n\r\n        if (\r\n            node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_X) &&\r\n            node.hasAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y)\r\n        ) {\r\n            bezierX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_X));\r\n            bezierY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.POSITION_TWEEN_BEZIER_Y));\r\n            bezier = { values: [] };\r\n\r\n            for (let i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\r\n                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\r\n            }\r\n        }\r\n\r\n        const tweenX: Array<number> = positionTweenX || [];\r\n        const tweenY: Array<number> = positionTweenY || [];\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            AnimationElementAttributes.POSITION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.POSITION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.POSITION_TWEEN_DELAY,\r\n            0,\r\n        );\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            AnimationElementAttributes.POSITION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, bezier });\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runScaleTween(node: Element): boolean {\r\n        let scaleTweenX: Array<number>;\r\n        let scaleTweenY: Array<number>;\r\n        let scaleTween: Array<PIXI.Point>;\r\n        let tweenValues: Array<PIXI.Point> = [];\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_X)) {\r\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_X));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN_Y)) {\r\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(AnimationElementAttributes.SCALE_TWEEN_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationElementAttributes.SCALE_TWEEN)) {\r\n            scaleTween = AnimationElement._getPointsFromPointsAttribute(\r\n                node.getAttribute(AnimationElementAttributes.SCALE_TWEEN),\r\n            ) as Array<PIXI.Point>;\r\n        }\r\n\r\n        if (scaleTween && scaleTween.length) {\r\n            tweenValues = scaleTween;\r\n        } else if (scaleTweenX && scaleTweenY) {\r\n            if (scaleTweenX.length === scaleTweenY.length) {\r\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                    return {\r\n                        x: scaleXValue,\r\n                        y: scaleTweenY[i],\r\n                    } as PIXI.Point;\r\n                });\r\n            }\r\n        } else if (scaleTweenX) {\r\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                return {\r\n                    x: scaleXValue,\r\n                    y: this.scale.y,\r\n                } as PIXI.Point;\r\n            });\r\n        } else if (scaleTweenY) {\r\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\r\n                return {\r\n                    x: this.scale.x,\r\n                    y: scaleYValue,\r\n                } as PIXI.Point;\r\n            });\r\n        } else {\r\n            return false;\r\n        }\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            AnimationElementAttributes.SCALE_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.SCALE_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, AnimationElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            AnimationElementAttributes.SCALE_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the rotation tween\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runRotationTween(node: Element): boolean {\r\n        if (!node.hasAttribute(AnimationElementAttributes.ROTATION_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(AnimationElementAttributes.ROTATION_TWEEN),\r\n        );\r\n\r\n        const degrees: Array<number> = rotationTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            AnimationElementAttributes.ROTATION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.ROTATION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.ROTATION_TWEEN_DELAY,\r\n            0,\r\n        );\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            AnimationElementAttributes.ROTATION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the alpha tween\r\n     * @method runAlphaTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runAlphaTween(node: Element): boolean {\r\n        if (!node.hasAttribute(AnimationElementAttributes.ALPHA_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let alphaTween: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(AnimationElementAttributes.ALPHA_TWEEN),\r\n        );\r\n\r\n        const alphas: Array<number> = alphaTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            AnimationElementAttributes.ALPHA_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            AnimationElementAttributes.ALPHA_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, AnimationElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            AnimationElementAttributes.ALPHA_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {Element} node\r\n     * @returns {boolean}\r\n     */\r\n    public runTween(node: Element): boolean {\r\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\r\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\r\n\r\n            for (let i: number = 0; i < tweens.length; i++) {\r\n                //return if there are no values to tween\r\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\r\n                    return false;\r\n                }\r\n\r\n                let tween: string = tweens[i];\r\n\r\n                const tweenValues: Array<number> = this.formatTweenValues(\r\n                    tween,\r\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\r\n                );\r\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\r\n                );\r\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\r\n                );\r\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\r\n                );\r\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n                    node,\r\n                    TweensAttributes.TWEEN_LOOP + i,\r\n                    null,\r\n                );\r\n\r\n                if (tween == \"scale\") {\r\n                    tween = \"scale.x\";\r\n                    tweens[i] = \"scale.y\";\r\n                    i--;\r\n                }\r\n\r\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * Formats values in case of characters \"c/+/-\".\r\n     * @param tween\r\n     * @param values\r\n     */\r\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\r\n        let tweenValues: Array<number> = [];\r\n\r\n        if (tween === \"scale\") {\r\n            tween = \"scale.x\";\r\n        }\r\n        let property: Array<string> = tween.split(\".\");\r\n        let value: number;\r\n\r\n        for (let i: number = 0; i < values.length; i++) {\r\n            let current = values[i];\r\n            switch (current[current.length - 1]) {\r\n                case \"c\": //if we want current value\r\n                    if (property.length == 1) {\r\n                        value = this[property[0]];\r\n                        if (property[0] === \"rotation\") {\r\n                            value = this.radians2degrees(value);\r\n                        }\r\n                        tweenValues.push(value);\r\n                    } else if (property.length == 2) {\r\n                        tweenValues.push(this[property[0]][property[1]]);\r\n                    }\r\n\r\n                    break;\r\n                case \"+\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] + value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"-\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] - value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                default:\r\n                    tweenValues.push(parseFloat(current));\r\n            }\r\n        }\r\n\r\n        return tweenValues;\r\n    }\r\n\r\n    /**\r\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.\r\n     * @method _getPointsFromPointsAttribute\r\n     * @return Array<PIXI.Points>\r\n     */\r\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\r\n        return pointsString\r\n            .replace(/\\s/g, \"\")\r\n            .split(\";\")\r\n            .map((valuesPair: string) => {\r\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n            })\r\n            .map((valuesPair: Array<string>) => {\r\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Add zero padding\r\n     * @param {number} num\r\n     * @param {number} size\r\n     * @returns {string}\r\n     */\r\n    private zerosPad(num: number, size: number): string {\r\n        let s = num + \"\";\r\n        while (s.length < size) s = \"0\" + s;\r\n        return s;\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return AnimationElement\r\n     */\r\n    clone(): AnimationElement {\r\n        let element: AnimationElement = new AnimationElement();\r\n\r\n        element._style = this._style;\r\n        element._startFrame = this._startFrame;\r\n        element._endFrame = this._endFrame;\r\n        element._stop = this._stop;\r\n        element._randomStartFrame = this._randomStartFrame;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.rotation = this.rotation;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.skew.x = this.skew.x;\r\n        element.skew.y = this.skew.y;\r\n        element.visible = this.visible;\r\n        element.blendMode = this.blendMode;\r\n        element.tint = this.tint;\r\n        element.name = this.name;\r\n        element.alpha = this.alpha;\r\n\r\n        if (this.textures != null && this.textures.length > 0) {\r\n            element.texture = this.texture;\r\n            element.textures = this.textures;\r\n            element.onComplete = element._movieClipComplete.bind(element);\r\n            if (this._style != null && this._style.loop != null) {\r\n                element.loop = this._style.loop;\r\n            }\r\n\r\n            element.animationSpeed = this.animationSpeed;\r\n\r\n            //element.removeChildren();\r\n            /* todo Potrebujeme ? */\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.playMe = element.playMe.bind(element);\r\n        element.showMe = element.showMe.bind(element);\r\n        element.stop = element.stop.bind(element);\r\n        //element.getMovieClip = this.getMovieClip.bind(element);\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n\r\n        return element;\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    protected markAsCloned(): void {\r\n        this._markAsCloned();\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    _markAsCloned(): void {\r\n        this.assertDestroyed(\"_markAsCloned()\");\r\n        this._cloned = true;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.clone(this);\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    protected removeAndDestroyChildren(): void {\r\n        this._removeAndDestroyChildren();\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    _removeAndDestroyChildren(): void {\r\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\r\n        let destroyOptions: PIXI.DestroyOptions = {\r\n            children: true,\r\n        };\r\n\r\n        if (this.children != null && this.children.length > 0) {\r\n            for (let i = this.children.length - 1; i >= 0; i--) {\r\n                if (this.children[i] != null) {\r\n                    (this.children[i] as any).destroy(destroyOptions);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.removeChildren();\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param method\r\n     */\r\n    protected assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param method\r\n     * @private\r\n     */\r\n    /*    protected _assertDestroyed(method: string): void\r\n     {\r\n     if (DEBUG) {\r\n     if (this.__destroyed) {\r\n     throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n     }\r\n     }\r\n     }*/\r\n\r\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this.assertDestroyed(\"destroy\");\r\n\r\n        if (Utils.isNullOrUndefined(options)) {\r\n            options = AnimationElement._destroyOptions;\r\n        }\r\n\r\n        this.internalDestroy(options);\r\n\r\n        if (!Utils.isNullOrUndefined(this.children)) {\r\n            super.destroy();\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.destroy(this);\r\n            }\r\n        }\r\n\r\n        this.__destroyed = true;\r\n    }\r\n\r\n    /**\r\n     * @method internalDestroy - cleanup resources\r\n     * @param options\r\n     */\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this.onComplete = null;\r\n        this.textures = [PIXI.Texture.EMPTY];\r\n\r\n        Tweens.removeTweens(this);\r\n    }\r\n\r\n    /**\r\n     *\r\n     *\r\n     * @returns {any}\r\n     */\r\n    getDebugInfo(): string {\r\n        if (DEBUG) {\r\n            let debugInfoFn = this.debugInfo;\r\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {any}\r\n     */\r\n    debugInfo(): string {\r\n        if (DEBUG) {\r\n            let result = `${this.uid}\\nName: [${this.name}]`;\r\n            let animation = this._style ? this._style.animation : \"\";\r\n            if (!StringUtils.isNullOrEmpty(animation)) {\r\n                result += \"\\nAnimation: \" + animation;\r\n            }\r\n\r\n            return result;\r\n        }\r\n\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     * @property cloned - indicates if element was cloned or not.\r\n     * @returns {boolean}\r\n     */\r\n    public get cloned(): boolean {\r\n        return this._cloned;\r\n    }\r\n\r\n    public get destroyed(): boolean {\r\n        return this.__destroyed;\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public radians2degrees(radians: number): number {\r\n        return radians * (180 / Math.PI);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param speed\r\n     */\r\n    public changeAnimationSpeed(speed: number): void {\r\n        this.animationSpeed = speed;\r\n    }\r\n\r\n    /**\r\n     * Prints output on screen inside element with specified debug content\r\n     */\r\n    protected _printDebugInfo(text: any, node?: Element) {\r\n        if (DEBUG) {\r\n            if (this.getChildByName(AnimationElementAttributes.DEBUG_INFO) != null) {\r\n                //this.getChildByName(AnimationElementAttributes.DEBUG_INFO).destroy();\r\n                this.removeChild(this.getChildByName(AnimationElementAttributes.DEBUG_INFO));\r\n            }\r\n            if (\r\n                node == undefined ||\r\n                (node.hasAttribute(AnimationElementAttributes.DEBUG_INFO) &&\r\n                    node.getAttribute(AnimationElementAttributes.DEBUG_INFO) === \"true\")\r\n            ) {\r\n                // test\r\n                /*let border = new ShapeElement();\r\n                 border.beginFill(0xFFFFFF, 0);\r\n                 border.lineStyle(2, 0xff0000);\r\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\r\n                 this.addChild(border);*/\r\n\r\n                let textInfo = new TextElement();\r\n                textInfo.name = AnimationElementAttributes.DEBUG_INFO;\r\n                textInfo.x = textInfo.y = 0;\r\n                textInfo.style.fill = 0xffffff;\r\n                textInfo.style.fontSize = 12;\r\n                textInfo.text = JSON.stringify(text, null, 4);\r\n\r\n                this.addChild(textInfo);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param s\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nexport const AnimationElementAttributes = {\r\n    /*\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n    ANCHOR: \"Anchor\",\r\n    /*\r\n     * A ImageElement instance that defines a mask for this display object.\r\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).\r\n     * @property BitmapMask\r\n     * @type string\r\n     * @default null\r\n     */\r\n    BITMAP_MASK: \"BitmapMask\",\r\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n    BITMAP_MASK_X: \"BitmapMaskX\",\r\n    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n    /**\r\n     * If Continue is true animation is not restarted.\r\n     * @property Continue\r\n     * @type boolean\r\n     */\r\n    CONTINUE: \"Continue\",\r\n    DEBUG_INFO: \"DebugInfo\",\r\n    DEBUG: \"Debug\",\r\n    /*\r\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\r\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).\r\n     * @property Mask\r\n     * @type ShapeElement\r\n     * @default null\r\n     */\r\n    MASK: \"Mask\",\r\n    /*\r\n     * X pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotX\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_X: \"PivotX\",\r\n    /*\r\n     * Y pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotY\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_Y: \"PivotY\",\r\n    /*\r\n     * Start playing animation.\r\n     * @property Play\r\n     * @type boolean\r\n     */\r\n    PLAY: \"Play\",\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\r\n    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n    /*\r\n     *\r\n     */\r\n    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n    /*\r\n     * Indicates if animation should animate reverse.\r\n     * @property Reverse\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    REVERSE: \"Reverse\",\r\n    /*\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    /*\r\n     * Tween rotation of this display object with children.\r\n     * For duration use RotateTweenDuration (number - frames).\r\n     * For tweenEase use RotateTweenEase (string - name of easeing function).\r\n     * @property RotateTweenDegrees\r\n     * @type Array<numbers> - consist of two values (start degrees; end degrees) or three values (start degrees, middle degrees, end degrees)\r\n     * @default null\r\n     */\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n    /*\r\n     * Tween scale of this display object with children.\r\n     * For ease use ScaleTweenEase (string - name of easeing function).\r\n     * For scaling X use ScaleTweenX (consist of two values (start scaleX; end scaleX) or three values (start scaleX; middle scaleX, end scaleX)).\r\n     * For scaling Y use ScaleTweenY (consist of two values (start scaleY; end scaleY) or three values (start scaleY; middle scaleY, end scaleY)).\r\n     * @property ScaleTweenDuration\r\n     * @type number - frames\r\n     * @default null\r\n     */\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n    /*\r\n     * The factor to stretch this display object horizontally.\r\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.\r\n     * @property ScaleX\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_X: \"ScaleX\",\r\n    /*\r\n     * The factor to stretch this display object vertically.\r\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.\r\n     * @property ScaleY\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_Y: \"ScaleY\",\r\n    /*\r\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n     * @property Scale\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE: \"Scale\",\r\n    /*\r\n     * The factor to skew this display object horizontally.\r\n     * @property SkewX\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    SKEW_X: \"SkewX\",\r\n    /*\r\n     * The factor to skew this display object vertically.\r\n     * @property SkewY\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    SKEW_Y: \"SkewY\",\r\n    /*\r\n     * Random rotation in degrees for this display object.\r\n     * @property StartRotation\r\n     * @type Number\r\n     * @default null\r\n     */\r\n    START_ROTATION: \"StartRotation\",\r\n    SHOW_FRAME: \"ShowFrame\",\r\n    SPEED: \"Speed\",\r\n    /*\r\n     * @deprecated Instead this use ShowFrame attribute.\r\n     * @property Stop\r\n     * @type Number\r\n     */\r\n    STOP: \"Stop\",\r\n    STYLE: \"Style\",\r\n    STYLE2: \"Style2\",\r\n    /*\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    /*\r\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n     * @property Visible\r\n     * @type Boolean\r\n     * @default true\r\n     */\r\n    VISIBLE: \"Visible\",\r\n    /*\r\n     * X (horizontal) position of the display object, relative to its parent.\r\n     * @property X\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    X: \"X\",\r\n    /*\r\n     * Y (vertical) position of the display object, relative to its parent.\r\n     * @property Y\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    Y: \"Y\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/AnimationElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * The image text element render bitmap font to text.\r\n * Example:\r\n *   <TextElement Class=\"TextElement\" Font=\"fontName\" Text=\"09123456789.,+\" X=\"960\" Y=\"540\" TextAlign=\"center\" TextBaseline=\"middle\" />\r\n *\r\n * @class TextElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class TextElement extends PIXI.Text {\r\n    private _uid: string;\r\n    private _cloned: boolean;\r\n    private __destroyed: boolean;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.text = \"\";\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                this._uid = PerfDebug.generateElementUID(this);\r\n                PerfDebug.newElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    public create(node: Element): void {\r\n        this.createByNode(node);\r\n        this.updateByNode(node);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element) {\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.FONT)) {\r\n            this.style.fontFamily = node.getAttribute(TextElementAttributes.FONT);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): void {\r\n        if (node.hasAttribute(TextElementAttributes.TEXT)) {\r\n            this.text = node.getAttribute(TextElementAttributes.TEXT);\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.TEXT_ALIGN)) {\r\n            //this.style.align = node.getAttribute(TextElementAttributes.TEXT_ALIGN);\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.TEXT_BASELINE)) {\r\n            //this.textBaseline = node.getAttribute(TextElementAttributes.TEXT_BASELINE);\r\n            /*switch (node.getAttribute(TextElementAttributes.TEXT_BASELINE)) {\r\n                case TextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\r\n                    this.position.y = this.position.y - this.parent.height / 2;\r\n                    break;\r\n                case TextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\r\n                    this.position.y = -this.parent.height;\r\n                    break;\r\n            }*/\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.SIZE)) {\r\n            this.style.fontSize = parseInt(node.getAttribute(TextElementAttributes.SIZE));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.ALPHA)) {\r\n            this.alpha = parseFloat(node.getAttribute(TextElementAttributes.ALPHA));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.ROTATION)) {\r\n            this.rotation = parseInt(node.getAttribute(TextElementAttributes.ROTATION));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.START_ROTATION)) {\r\n            if (node.getAttribute(TextElementAttributes.START_ROTATION) === TextElementAttributes.START_ROTATION) {\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.SCALE_X)) {\r\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE_X));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.SCALE_Y)) {\r\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(TextElementAttributes.SCALE));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.X)) {\r\n            this.position.x = parseInt(node.getAttribute(TextElementAttributes.X));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.Y)) {\r\n            this.position.y = parseInt(node.getAttribute(TextElementAttributes.Y));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.PIVOT_X)) {\r\n            this.pivot.x = parseInt(node.getAttribute(TextElementAttributes.PIVOT_X));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.PIVOT_Y)) {\r\n            this.pivot.y = parseInt(node.getAttribute(TextElementAttributes.PIVOT_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.VISIBLE)) {\r\n            this.visible = StringUtils.parseBoolean(node.getAttribute(TextElementAttributes.VISIBLE));\r\n        }\r\n\r\n        if (node.hasAttribute(TextElementAttributes.TINT)) {\r\n            if (node.getAttribute(TextElementAttributes.TINT) === \"0\") {\r\n                this.style.fill = null;\r\n            } else {\r\n                this.style.fill = parseInt(node.getAttribute(TextElementAttributes.TINT), 16);\r\n            }\r\n        }\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    markAsCloned(): void {\r\n        this._markAsCloned();\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    protected _markAsCloned(): void {\r\n        this.assertDestroyed(\"markAsCloned()\");\r\n        this._cloned = true;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.clone(this);\r\n\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    protected assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    getDebugInfo(): string {\r\n        if (DEBUG) {\r\n            let debugInfoFn = (this as any).debugInfo;\r\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    debugInfo(): string {\r\n        if (DEBUG) {\r\n            let result = `${this.uid}\\nName: [${this.name}]`;\r\n\r\n            return result;\r\n        }\r\n        return \"\";\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @type {{DURATION: string; ROUND: string; FORCE: string}}\r\n */\r\nexport const TextElementAttributes = {\r\n    /**\r\n     * The text to display.\r\n     * @property Text\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TEXT: \"Text\",\r\n    /*\r\n     * Bitmap font for text.\r\n     * @property Font\r\n     * @type string\r\n     * @default null\r\n     */\r\n    FONT: \"Font\",\r\n    /**\r\n     * The font size (as a number it converts to px, but as a string, equivalents are '26px','20pt','160%' or '1.6em')\r\n     */\r\n    SIZE: \"Size\",\r\n    /*\r\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\r\n     * For detailed information view the whatwg spec. Default is \"left\".\r\n     * @property TextAlign\r\n     * @type string\r\n     * @default left\r\n     */\r\n    TEXT_ALIGN: \"TextAlign\",\r\n    TEXT_ALIGN_VALUE: {\r\n        LEFT: \"left\",\r\n        CENTER: \"center\",\r\n        RIGHT: \"right\",\r\n    },\r\n    /*\r\n     * The vertical alignment point on the text.\r\n     * Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\r\n     * @property TextBaseline\r\n     * @type string\r\n     * @default top\r\n     */\r\n    TEXT_BASELINE: \"TextBaseline\",\r\n    TEXT_BASELINE_VALUE: {\r\n        MIDDLE: \"middle\",\r\n        BOTTOM: \"bottom\",\r\n    },\r\n    /*\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n    /*\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    /*\r\n     * Random rotation in degrees for this display object.\r\n     * @property StartRotation\r\n     * @type Number\r\n     * @default null\r\n     */\r\n    START_ROTATION: \"StartRotation\",\r\n    /*\r\n     * The factor to stretch this display object horizontally.\r\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.\r\n     * @property ScaleX\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_X: \"ScaleX\",\r\n    /*\r\n     * The factor to stretch this display object vertically.\r\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.\r\n     * @property ScaleY\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_Y: \"ScaleY\",\r\n    /*\r\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n     * @property Scale\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE: \"Scale\",\r\n    /*\r\n     * X (horizontal) position of the display object, relative to its parent.\r\n     * @property X\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    X: \"X\",\r\n    /*\r\n     * Y (vertical) position of the display object, relative to its parent.\r\n     * @property Y\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    Y: \"Y\",\r\n    /*\r\n     * X pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotX\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_X: \"PivotX\",\r\n    /*\r\n     * Y pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotY\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_Y: \"PivotY\",\r\n    /*\r\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n     * @property Visible\r\n     * @type Boolean\r\n     * @default true\r\n     */\r\n    VISIBLE: \"Visible\",\r\n    /*\r\n     * Tint of image. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/TextElement.ts\n **/","import { GameManager } from \"../Managers/GameManager\";\r\nimport { DataManager } from \"../Managers/DataManager\";\r\nimport { Scaling } from \"./Scaling\";\r\nimport { Communication } from \"neo-games\";\r\n\r\nvar WinType = Communication.Game.WinType;\r\n\r\n/**\r\n * @class CustomUtils\r\n */\r\nexport class CustomUtils {\r\n    public static SymbolEmpty: number = 32;\r\n    public static SymbolWild: number = 10;\r\n    public static SymbolBonus: number = 12;\r\n    public static SymbolScatter: number = 11;\r\n    public static SymbolBigScatter: number = 27;\r\n    public static SymbolBonusMajor: number = 15;\r\n    public static SymbolExpandedWild: number = 16;\r\n    public static BigSymbolIdOffset: number = 16;\r\n\r\n    static isRespin(): boolean {\r\n        return (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.respin != null &&\r\n            GameManager.bonusRespinsResponse.respin !== 0\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Indicates that respin was triggered.\r\n     * @returns {boolean}\r\n     */\r\n    static isRespinEnabled(): boolean {\r\n        return (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.respin != null &&\r\n            GameManager.bonusRespinsResponse.respin !== 0 &&\r\n            GameManager.bonusRespinsResponse.spinId === 0\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Indicates that respin is in progress.\r\n     * @returns {boolean}\r\n     */\r\n    static isRespinActive(): boolean {\r\n        return (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.respin != null &&\r\n            GameManager.bonusRespinsResponse.respin !== 0 &&\r\n            GameManager.bonusRespinsResponse.spinId > 0\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Indicates that last respin round is in progress.\r\n     * @returns {boolean}\r\n     */\r\n    static isRespinLast(): boolean {\r\n        return (\r\n            GameManager.bonusRespinsResponse != null &&\r\n            GameManager.bonusRespinsResponse.respin != null &&\r\n            GameManager.bonusRespinsResponse.respin === 0 &&\r\n            GameManager.bonusRespinsResponse.spinId > 0\r\n        );\r\n    }\r\n\r\n    /**\r\n     * Indicates that last bonus round is in progress.\r\n     * @returns {boolean}\r\n     */\r\n    static isLastBonusSpin(): boolean {\r\n        return (\r\n            GameManager.bonusRespinsResponse.bonusRespins != null &&\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount != null &&\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount === 0 &&\r\n            GameManager.bonusRespinsResponse.respin == 0 &&\r\n            GameManager.bonusRespinsResponse.spinId > -1\r\n        );\r\n    }\r\n\r\n    static getRemainingRespins(): number {\r\n        if (\r\n            GameManager.bonusRespinsResponse.bonusRespins != null &&\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount != null\r\n        ) {\r\n            return GameManager.bonusRespinsResponse.bonusRespins.remainingCount;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    static isBonusSymbol(symbolId: number): boolean {\r\n        return symbolId >= CustomUtils.SymbolBonus && symbolId <= CustomUtils.SymbolBonusMajor;\r\n    }\r\n\r\n    static isBonusSymbolInArray(symbolIds: Array<number>): boolean {\r\n        for (let i = 0; i < symbolIds.length; i++) {\r\n            if (symbolIds[i] >= CustomUtils.SymbolBonus && symbolIds[i] <= CustomUtils.SymbolBonusMajor) {\r\n                return true;\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    public static getBlendMode(blendMode: number): number {\r\n        if (Scaling.IsIOs) {\r\n            if (blendMode == 1) {\r\n                blendMode = 3;\r\n            }\r\n        }\r\n\r\n        return blendMode;\r\n    }\r\n\r\n    public static updateSpineData(spineData: JSON): JSON {\r\n        if (Scaling.IsIOs) {\r\n            if (spineData != null) {\r\n                let spineTextData = JSON.stringify(spineData);\r\n                spineTextData = spineTextData.split('\"blend\":\"additive\"').join('\"blend\":\"screen\"');\r\n                spineData = JSON.parse(spineTextData);\r\n            }\r\n        }\r\n\r\n        return spineData;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/CustomUtils.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ImageElement } from \"./ImageElement\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { Tweens } from \"../../Effects/Tweens\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\nimport { AnimationElement } from \"./AnimationElement\";\r\nimport Animation = gsap.Animation;\r\n\r\n// TODO add comments\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ParticleElement extends BaseElement {\r\n    // handle definition for particles\r\n    private _style: ParticleStyle;\r\n    private _styleName: string;\r\n\r\n    //  holds particles in pool and reused them\r\n    private _pool: Array<ImageElement | AnimationElement>;\r\n\r\n    // container of whole particle element\r\n    private _target: BaseElement;\r\n    // timer for add particles\r\n    private _timer: FrameTimerEventEmitter;\r\n\r\n    private _stopping: boolean;\r\n    private _stop: boolean;\r\n    private _emitOnce: boolean;\r\n    private _preGenerate: boolean;\r\n    private _startType: string;\r\n    private _randomStartFrame: boolean;\r\n    private _maxEmit: number;\r\n\r\n    private _blendMode: number;\r\n    private _created: boolean;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._pool = [];\r\n\r\n        this._timer = CreateFrameTimer(\"particleTimer\");\r\n        this._timer.on(FrameTimerEvents.Complete, this.addParticles.bind(this));\r\n\r\n        this._blendMode = 0;\r\n        this._created = false;\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._emitOnce = false;\r\n        this._preGenerate = false;\r\n        this._startType = \"\";\r\n        this._randomStartFrame = false;\r\n        this._maxEmit = 1;\r\n        this.visible = false;\r\n        this._target = this;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INITIALIZATION\r\n    //******************************************************************************************************************\r\n\r\n    createByNode(node: Element): void {\r\n        if (!this._created) {\r\n            super.createByNode(node);\r\n\r\n            //prevent generating wasted amount of particles, emit once can be setup only on create\r\n            if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\r\n                this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\r\n            }\r\n\r\n            if (node.hasAttribute(ParticleElementAttributes.PRE_GENERATE)) {\r\n                this._preGenerate = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.PRE_GENERATE));\r\n            }\r\n\r\n            if (node.hasAttribute(ParticleElementAttributes.BLEND_MODE)) {\r\n                this._blendMode = parseInt(node.getAttribute(ParticleElementAttributes.BLEND_MODE));\r\n            }\r\n\r\n            if (node.hasAttribute(ParticleElementAttributes.RANDOM_START_FRAME)) {\r\n                this._randomStartFrame = StringUtils.parseBoolean(\r\n                    node.getAttribute(ParticleElementAttributes.RANDOM_START_FRAME),\r\n                );\r\n            }\r\n\r\n            if (\r\n                node.hasAttribute(ParticleElementAttributes.STYLE) ||\r\n                node.hasAttribute(ParticleElementAttributes.STYLE2)\r\n            ) {\r\n                if (node.hasAttribute(ParticleElementAttributes.STYLE)) {\r\n                    this._style = <ParticleStyle>(\r\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE)]\r\n                    );\r\n                } else {\r\n                    this._style = <ParticleStyle>(\r\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE2)]\r\n                    );\r\n                }\r\n\r\n                this._styleName = this._style.name;\r\n            }\r\n\r\n            //if is subParticle, create image representation of particle, otherwise create just child particles\r\n            this.createParticles();\r\n            this._created = true;\r\n        }\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(ParticleElementAttributes.DEBUG) &&\r\n                node.getAttribute(ParticleElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.MAX_EMIT)) {\r\n            this._maxEmit = parseInt(node.getAttribute(ParticleElementAttributes.MAX_EMIT));\r\n            this._maxEmit = this._maxEmit * 0.01;\r\n\r\n            if (this._maxEmit > 1) {\r\n                this._maxEmit = 1;\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\r\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.START) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\r\n        ) {\r\n            this.start(this._emitOnce, this._startType);\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\r\n        ) {\r\n            this.stopping();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\r\n        ) {\r\n            this.stop();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\r\n        ) {\r\n            this.reset();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\r\n        ) {\r\n            this.clear();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATING PARTICLES\r\n    //******************************************************************************************************************\r\n\r\n    public createParticles(): void {\r\n        if (this._style != null) {\r\n            if (this._style.images != null && this._style.images.length > 0) {\r\n                let count: number = this._emitOnce ? this._style.count : this._style.calculateElements();\r\n\r\n                for (let i: number = 0; i < count; i++) {\r\n                    let particle: ImageElement | AnimationElement = this.createParticle();\r\n\r\n                    this._pool.push(particle);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private createParticle(): ImageElement | AnimationElement {\r\n        let particle: ImageElement | AnimationElement;\r\n        particle = this.createParticleResource();\r\n\r\n        this.setupParticle(particle);\r\n\r\n        if (this._preGenerate) {\r\n            this.setupPosition(particle);\r\n            this.addBehaviour(particle);\r\n        }\r\n\r\n        this.addChild(particle);\r\n        return particle;\r\n    }\r\n\r\n    private createParticleResource(): ImageElement | AnimationElement {\r\n        if (this._style != null) {\r\n            let resource: ImageElement | AnimationElement = null;\r\n            let resourceId = this.getRandomResource();\r\n\r\n            if (resourceId.indexOf(\"GFX_\") > -1) {\r\n                resource = new ImageElement(StageController.getTextureByResourceId(resourceId));\r\n                resource.blendMode = CustomUtils.getBlendMode(this._blendMode);\r\n            } else if (resourceId.indexOf(\"ANI_\") > -1) {\r\n                let node: Element = document.createElement(\"Animation\");\r\n                node.setAttribute(\"Style2\", resourceId);\r\n                node.setAttribute(\"RandomStartFrame\", this._randomStartFrame.toString());\r\n                resource = new AnimationElement();\r\n                resource.create(node);\r\n            }\r\n\r\n            let localBounds = resource.getLocalBounds();\r\n            resource.pivot.set(localBounds.width / 2, localBounds.height / 2);\r\n            return resource;\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    private getRandomResource(): string {\r\n        return this._style.images[Math.floor(Math.random() * this._style.images.length)];\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INITIAL SETUP\r\n    //******************************************************************************************************************\r\n\r\n    private setupParticle(particle: ImageElement | AnimationElement) {\r\n        this.setVisibility(particle, false);\r\n        particle.usedInPool = false;\r\n\r\n        return particle;\r\n    }\r\n\r\n    private setVisibility(particle: ImageElement | AnimationElement, visible: boolean): void {\r\n        particle.visible = visible;\r\n\r\n        if (particle instanceof AnimationElement) {\r\n            if (visible) {\r\n                particle.playMe();\r\n            } else {\r\n                particle.stop();\r\n            }\r\n        }\r\n    }\r\n\r\n    private setupPosition(particle: ImageElement | AnimationElement): void {\r\n        let startX = 0;\r\n        let startY = 0;\r\n\r\n        switch (this._style.positionZone.type) {\r\n            case ParticleStyle.ZoneRectangle:\r\n                startX = this._style.positionZone.x + Math.random() * this._style.positionZone.width;\r\n                startY = this._style.positionZone.y + Math.random() * this._style.positionZone.height;\r\n\r\n                if (this._style.positionZone.innerWidth != -1 && this._style.positionZone.innerHeight != -1) {\r\n                    let centerX = this._style.positionZone.x + this._style.positionZone.width / 2;\r\n                    let centerY = this._style.positionZone.y + this._style.positionZone.height / 2;\r\n                    let innerCenterX = this._style.positionZone.innerX + this._style.positionZone.innerWidth / 2;\r\n                    let innerCenterY = this._style.positionZone.innerY + this._style.positionZone.innerHeight / 2;\r\n                    let correctX = Math.random() > 0.5;\r\n\r\n                    if (correctX) {\r\n                        if (startX > centerX) {\r\n                            startX = this.getRandom(\r\n                                innerCenterX + this._style.positionZone.innerWidth * 0.5,\r\n                                centerX + this._style.positionZone.width * 0.5,\r\n                            );\r\n                        } else {\r\n                            startX = this.getRandom(0, innerCenterX - this._style.positionZone.innerWidth * 0.5);\r\n                        }\r\n                    } else {\r\n                        if (startY > centerY) {\r\n                            startY = this.getRandom(\r\n                                innerCenterY + this._style.positionZone.innerHeight * 0.5,\r\n                                centerY + this._style.positionZone.height * 0.5,\r\n                            );\r\n                        } else {\r\n                            startY = this.getRandom(0, innerCenterY - this._style.positionZone.innerHeight * 0.5);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                particle.x = startX;\r\n                particle.y = startY;\r\n\r\n                break;\r\n            case ParticleStyle.ZoneTarget:\r\n                startX =\r\n                    this._target.x +\r\n                    Math.random() * this._style.positionZone.width -\r\n                    this._style.positionZone.width / 2;\r\n                startY =\r\n                    this._target.y +\r\n                    Math.random() * this._style.positionZone.height -\r\n                    this._style.positionZone.height / 2;\r\n\r\n                particle.x = startX;\r\n                particle.y = startY;\r\n                break;\r\n            case ParticleStyle.ZoneLine:\r\n                // TODO\r\n                break;\r\n            case ParticleStyle.ZoneEllipse:\r\n                startX = this._style.positionZone.x;\r\n                startY = this._style.positionZone.y;\r\n                let radianDegrees = Math.floor(\r\n                    this.getRandom(this._style.positionZone.startAngle, this._style.positionZone.angle),\r\n                );\r\n                let radian = this.degrees2radians(radianDegrees);\r\n\r\n                //start is not from origin but from another, inner circle\r\n                if (this._style.positionZone.innerRadius > 0) {\r\n                    let radius = this.getRandom(\r\n                        this._style.positionZone.minInnerRadius,\r\n                        this._style.positionZone.innerRadius,\r\n                    );\r\n                    let radiusB = this.getRandom(\r\n                        this._style.positionZone.minInnerRadiusB,\r\n                        this._style.positionZone.innerRadiusB,\r\n                    );\r\n\r\n                    startX = Math.floor(this._style.positionZone.innerX + radius * Math.cos(radian));\r\n                    startY = Math.floor(this._style.positionZone.innerY + radiusB * Math.sin(radian));\r\n                }\r\n\r\n                particle.x = startX;\r\n                particle.y = startY;\r\n                particle.rotation = radian;\r\n\r\n                break;\r\n            case ParticleStyle.ZoneFountain:\r\n                particle.x = this.getRandom(this._style.positionZone.startX[0], this._style.positionZone.startX[1]);\r\n                particle.y = this.getRandom(this._style.positionZone.startY[0], this._style.positionZone.startY[1]);\r\n                break;\r\n        }\r\n    }\r\n\r\n    public setTargetElement(element: BaseElement): void {\r\n        this._target = element;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  BEHAVIOUR\r\n    //******************************************************************************************************************\r\n\r\n    private addBehaviour(particle: ImageElement | AnimationElement): void {\r\n        let particleLife: number =\r\n            Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\r\n\r\n        this.addPathBehaviour(particle, particleLife);\r\n        this.addScaleBehaviour(particle, particleLife);\r\n        this.addRotationBehaviour(particle, particleLife);\r\n        this.addAlphaBehaviour(particle, particleLife);\r\n    }\r\n\r\n    private addPathBehaviour(particle: ImageElement | AnimationElement, life: number): void {\r\n        switch (this._style.positionZone.type) {\r\n            case ParticleStyle.ZoneRectangle:\r\n            case ParticleStyle.ZoneTarget:\r\n                this.addRectanglePathBehavior(particle, life);\r\n                break;\r\n            case ParticleStyle.ZoneEllipse:\r\n                this.addEllipsePathBehavior(particle, life);\r\n                break;\r\n\r\n            case ParticleStyle.ZoneFountain:\r\n                this.addFountainPathBehavior(particle, life);\r\n                break;\r\n        }\r\n    }\r\n\r\n    private addRectanglePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\r\n        if (this._style.pathValues != null) {\r\n            let points: Array<Object> = [];\r\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\r\n                if (\r\n                    this._style.pathValues[i] != null &&\r\n                    this._style.pathValues[i].x != null &&\r\n                    this._style.pathValues[i].y != null\r\n                ) {\r\n                    let valueX: number = this._style.pathValues[i].x;\r\n                    let valueY: number = this._style.pathValues[i].y;\r\n                    if (this._style.pathValues[i].randomX != null) {\r\n                        valueX =\r\n                            Math.floor(\r\n                                Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x),\r\n                            ) + this._style.pathValues[i].x;\r\n                        valueX = Math.floor(\r\n                            this.getRandom(\r\n                                this._style.pathValues[i].x - this._style.pathValues[i].randomX,\r\n                                this._style.pathValues[i].x + this._style.pathValues[i].randomX,\r\n                            ),\r\n                        );\r\n                    }\r\n                    if (this._style.pathValues[i].randomY != null) {\r\n                        valueY =\r\n                            Math.floor(\r\n                                Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y),\r\n                            ) + this._style.pathValues[i].y;\r\n\r\n                        valueY = Math.floor(\r\n                            this.getRandom(\r\n                                this._style.pathValues[i].y - this._style.pathValues[i].randomY,\r\n                                this._style.pathValues[i].y + this._style.pathValues[i].randomY,\r\n                            ),\r\n                        );\r\n                    }\r\n                    points.push({ x: particle.x + valueX, y: particle.y + valueY });\r\n                }\r\n            }\r\n            if (points.length > 2) {\r\n                Tweens.positionTween(particle, {\r\n                    bezier: {\r\n                        values: points,\r\n                    },\r\n                    tweenX: [particle.x, particle.x],\r\n                    tweenY: [particle.y, particle.y],\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                    callbackFunction: this.removeFromPool,\r\n                    callbackParams: [particle],\r\n                    callbackScope: null,\r\n                });\r\n            } else if (points.length === 2) {\r\n                Tweens.positionTween(particle, {\r\n                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\r\n                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                    callbackFunction: this.removeFromPool,\r\n                    callbackParams: [particle],\r\n                    callbackScope: null,\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    private addEllipsePathBehavior(particle: ImageElement | AnimationElement, life: number): void {\r\n        let radius = this.getRandom(this._style.positionZone.minRadius, this._style.positionZone.radius);\r\n        let radiusB = this.getRandom(this._style.positionZone.minRadiusB, this._style.positionZone.radiusB);\r\n        let finalX = Math.floor(this._style.positionZone.x + radius * Math.cos(particle.rotation));\r\n        let finalY = Math.floor(this._style.positionZone.y + radiusB * Math.sin(particle.rotation));\r\n\r\n        if (this._style.positionZone.bezierEllipse) {\r\n            let points: Array<Object> = [];\r\n\r\n            let xValue = Math.round(Math.random() * 50 + 50);\r\n            let yValue = Math.round(Math.random() * 50 + 50);\r\n\r\n            if (Math.round(Math.random()) == 0) {\r\n                xValue *= -1;\r\n            }\r\n\r\n            if (Math.round(Math.random()) == 0) {\r\n                yValue *= -1;\r\n            }\r\n\r\n            points.push({ x: particle.x, y: particle.y });\r\n\r\n            points.push({ x: particle.x + xValue, y: particle.y + yValue });\r\n\r\n            points.push({ x: finalX, y: finalY });\r\n\r\n            Tweens.positionTween(particle, {\r\n                bezier: {\r\n                    values: points,\r\n                },\r\n                tweenX: [particle.x, particle.x],\r\n                tweenY: [particle.y, particle.y],\r\n                tweenDuration: life,\r\n                paused: false,\r\n                callbackFunction: this.removeFromPool,\r\n                callbackParams: [particle],\r\n                callbackScope: null,\r\n            });\r\n        } else {\r\n            Tweens.positionTween(particle, {\r\n                tweenX: [particle.x, finalX],\r\n                tweenY: [particle.y, finalY],\r\n                tweenDuration: life,\r\n                paused: false,\r\n                callbackFunction: this.removeFromPool,\r\n                callbackParams: [particle],\r\n                callbackScope: null,\r\n            });\r\n        }\r\n    }\r\n\r\n    private addFountainPathBehavior(particle: ImageElement | AnimationElement, life: number): void {\r\n        let points: Array<Object> = [];\r\n        let valueX: number = this.getRandom(\r\n            this._style.positionZone.intervalX[0],\r\n            this._style.positionZone.intervalX[1],\r\n        );\r\n        let valueY: number = 0;\r\n\r\n        if (Math.round(Math.random()) == 0) {\r\n            valueX *= -1;\r\n        }\r\n\r\n        for (let i: number = 0; i < this._style.positionZone.bezierY.length; i++) {\r\n            valueY = this.getRandom(\r\n                this._style.positionZone.bezierY[i] - this._style.positionZone.intervalY[i],\r\n                this._style.positionZone.bezierY[i] + this._style.positionZone.intervalY[i],\r\n            );\r\n            points.push({ x: particle.x + valueX, y: valueY });\r\n            valueX = valueX + valueX;\r\n        }\r\n\r\n        Tweens.positionTween(particle, {\r\n            bezier: {\r\n                values: points,\r\n            },\r\n            tweenX: [particle.x, particle.x],\r\n            tweenY: [particle.y, particle.y],\r\n            tweenDuration: life,\r\n            paused: false,\r\n            tweenEase: \"slowMoInOut\",\r\n            callbackFunction: this.removeFromPool,\r\n            callbackParams: [particle],\r\n            callbackScope: null,\r\n        });\r\n    }\r\n\r\n    private addScaleBehaviour(particle: ImageElement | AnimationElement, life: number): void {\r\n        if (this._style.scaleValues != null) {\r\n            let scalePoints: Array<PIXI.Point> = [];\r\n            for (let i: number = 0; i < this._style.scaleValues.length; i++) {\r\n                let scaleValue: number;\r\n                if (this._style.scaleValues[i].length > 1) {\r\n                    scaleValue =\r\n                        Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\r\n                        this._style.scaleValues[i][0];\r\n                } else {\r\n                    scaleValue = this._style.scaleValues[i][0];\r\n                }\r\n\r\n                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\r\n            }\r\n\r\n            if (scalePoints.length === 1) {\r\n                particle.scale.x = scalePoints[0].x;\r\n                particle.scale.y = scalePoints[0].y;\r\n            } else if (scalePoints.length > 1) {\r\n                Tweens.scaleTween(particle, {\r\n                    tweenValues: scalePoints,\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    private addRotationBehaviour(particle: ImageElement | AnimationElement, life: number): void {\r\n        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\r\n            let rotationAngles: Array<number> = [];\r\n            for (let i: number = 0; i < this._style.rotationValues.length; i++) {\r\n                let scaleValue: number;\r\n                if (this._style.rotationValues[i].length > 1) {\r\n                    scaleValue =\r\n                        Math.random() * (this._style.rotationValues[i][1] - this._style.rotationValues[i][0]) +\r\n                        this._style.rotationValues[i][0];\r\n                } else {\r\n                    scaleValue = this._style.rotationValues[i][0];\r\n                }\r\n\r\n                rotationAngles.push(scaleValue);\r\n            }\r\n\r\n            Tweens.rotationTween(particle, {\r\n                degrees: [rotationAngles[0], rotationAngles[1]],\r\n                tweenDuration: life,\r\n                paused: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    private addAlphaBehaviour(particle: ImageElement | AnimationElement, life: number): void {\r\n        if (this._style.alphaValues != null) {\r\n            let alphas: Array<number> = [];\r\n\r\n            for (let i: number = 0; i < this._style.alphaValues.length; i++) {\r\n                let alpha: number;\r\n                if (this._style.alphaValues[i].length > 1) {\r\n                    alpha =\r\n                        Math.random() * (this._style.alphaValues[i][1] - this._style.alphaValues[i][0]) +\r\n                        this._style.alphaValues[i][0];\r\n                } else {\r\n                    alpha = this._style.alphaValues[i][0];\r\n                }\r\n\r\n                alphas.push(alpha);\r\n            }\r\n\r\n            Tweens.alphaTween(particle, {\r\n                alphas: alphas,\r\n                tweenDuration: life,\r\n                paused: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  GETTING PARTICLES\r\n    //******************************************************************************************************************\r\n\r\n    private addParticles(): void {\r\n        if (this.worldVisible) {\r\n            if (!this._stop) {\r\n                let tabActive = true;\r\n                if (document.visibilityState != null && document.visibilityState === \"hidden\") {\r\n                    tabActive = false;\r\n                }\r\n\r\n                if (tabActive) {\r\n                    this.getFromPool();\r\n                }\r\n\r\n                if (!this._stopping) {\r\n                    this._timer.start(this._style.time);\r\n                }\r\n            }\r\n        } else {\r\n            this.stop();\r\n        }\r\n    }\r\n\r\n    private getFreeParticleIndex(): number {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            if (!this._pool[i].usedInPool) {\r\n                return i;\r\n            }\r\n        }\r\n\r\n        return -1;\r\n    }\r\n\r\n    private getFromPool(): void {\r\n        let count = Math.floor(this._style.count * this._maxEmit);\r\n\r\n        for (let i: number = 0; i < count; i++) {\r\n            let particle: ImageElement | AnimationElement;\r\n            let index: number = this.getFreeParticleIndex();\r\n\r\n            // to keep pool ordered by usedInPool check if first element is usedInPool\r\n            // if yes, create new and push to pool\r\n            // if not, shift element, set usedInPool and push to pool\r\n            if (index == -1) {\r\n                particle = this.createParticle();\r\n\r\n                this._pool.push(particle);\r\n            } else {\r\n                particle = this._pool[index];\r\n            }\r\n\r\n            if (particle != null) {\r\n                particle.usedInPool = true;\r\n                this.setVisibility(particle, true);\r\n\r\n                if (this._preGenerate) {\r\n                    Tweens.restartTweens(particle.uid);\r\n                } else {\r\n                    Tweens.removeTweens(particle);\r\n                    this.setupPosition(particle);\r\n                    this.addBehaviour(particle);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CONTROLS\r\n    //******************************************************************************************************************\r\n\r\n    start(emitOnce: boolean = false, startType: string = \"\"): void {\r\n        this.visible = true;\r\n\r\n        //if there is no style, there is no particles to emit\r\n        if (this._style != null) {\r\n            this._timer.stop();\r\n            this._emitOnce = emitOnce;\r\n            this._startType = startType;\r\n            this._stopping = emitOnce;\r\n            this._stop = false;\r\n            if (!this._emitOnce) {\r\n                this._timer.start(this._style.time);\r\n                if (this._startType === \"now\") {\r\n                    this.addParticles();\r\n                }\r\n            } else {\r\n                if (this._startType === \"now\") {\r\n                    this.addParticles();\r\n                } else {\r\n                    this._timer.start(this._style.time);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    stopping(): void {\r\n        this._stopping = true;\r\n    }\r\n\r\n    stop(): void {\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._timer.stop();\r\n        this.visible = false;\r\n    }\r\n\r\n    reset(): void {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            this.setupPosition(this._pool[i]);\r\n            this.setVisibility(this._pool[i], false);\r\n        }\r\n    }\r\n\r\n    clear(): void {\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._timer.stop();\r\n        this.visible = false;\r\n        this.removeAllFromPool();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REMOVING\r\n    //******************************************************************************************************************\r\n\r\n    private removeFromPool(particle: ImageElement | AnimationElement): void {\r\n        // this.setVisibility(particle, false);\r\n        particle.visible = false;\r\n        if (particle instanceof AnimationElement) {\r\n            particle.stop();\r\n        }\r\n        particle.usedInPool = false;\r\n    }\r\n\r\n    private removeAllFromPool(): void {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            this.setVisibility(this._pool[i], false);\r\n            Tweens.removeTweens(this._pool[i]);\r\n            this._pool[i].usedInPool = false;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  HELPER\r\n    //******************************************************************************************************************\r\n\r\n    private getRandom(min: number, max: number): number {\r\n        return Math.random() * (max - min) + min;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CLONE\r\n    //******************************************************************************************************************\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return ParticleElement\r\n     */\r\n    clone(): ParticleElement {\r\n        let element: ParticleElement = new ParticleElement();\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n        element.visible = this.visible;\r\n        element._target = this._target;\r\n        element._blendMode = this._blendMode;\r\n        element._emitOnce = this._emitOnce;\r\n        element._maxEmit = this._maxEmit;\r\n        element._preGenerate = this._preGenerate;\r\n        let node: Element = document.createElement(this.name);\r\n        node.setAttribute(\"Style2\", this._styleName);\r\n        element.create(node);\r\n        element._markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const ParticleElementAttributes = {\r\n    /**\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @type number\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    DEBUG: \"Debug\",\r\n    /**\r\n     * Random start frame, when animation particles are used\r\n     */\r\n    RANDOM_START_FRAME: \"RandomStartFrame\",\r\n    SPEED: \"Speed\",\r\n    EMIT_ONCE: \"EmitOnce\",\r\n    START_TYPE: \"StartType\",\r\n    /**\r\n     * Setup particle position and tween after create, so Start function just restart already created tween\r\n     */\r\n    PRE_GENERATE: \"PreGenerate\",\r\n    /**\r\n     * How many particles in one fire will be used in percentage. Max 100%\r\n     */\r\n    MAX_EMIT: \"MaxEmit\",\r\n    // Tweens used in BaseElementParticle\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    /**\r\n     * Style define animation. You can use one style on more than one place.\r\n     * Style for ParticleElement has to be instance of ParticleStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    STYLE2: \"Style2\",\r\n    EXTEND_STYLE: \"ExtendStyle\",\r\n    START: \"Start\",\r\n    STOPPING: \"Stopping\",\r\n    STOP: \"Stop\",\r\n    RESET: \"Reset\",\r\n    CLEAR: \"Clear\",\r\n    IMAGE: \"Image\",\r\n    /**\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    ATTR_COUNT: \"Count\",\r\n    ATTR_TIME: \"Time\",\r\n    ATTR_MIN: \"Min\",\r\n    ATTR_MAX: \"Max\",\r\n    ATTR_FROM_FRAME: \"FromFrame\",\r\n    ATTR_IMAGES: \"Images\",\r\n    ATTR_TYPE: \"Type\",\r\n    ATTR_X: \"X\",\r\n    ATTR_Y: \"Y\",\r\n    ATTR_RANDOM_X: \"RandomX\",\r\n    ATTR_RANDOM_Y: \"RandomY\",\r\n    ATTR_WIDTH: \"Width\",\r\n    ATTR_HEIGHT: \"Height\",\r\n    ATTR_RADIUS: \"Radius\",\r\n    ATTR_POSITION_RADIUS: \"PositionRadius\",\r\n    ATTR_RANDOM_POSITION_ANGLE: \"RandomPositionAngle\",\r\n    ATTR_MIN_RADIUS: \"MinRadius\",\r\n    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n    ATTR_ANGLE: \"Angle\",\r\n    ATTR_SHOW_ANGLE: \"ShowAngle\",\r\n    ATTR_VALUES: \"Values\",\r\n    ATTR_VALUE: \"Value\",\r\n    IMAGE_MASK: \"ImageMask\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleElement.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { Tweens, ITweenable, TweensAttributes } from \"../../Effects/Tweens\";\r\nimport { IElement } from \"../Interfaces/IElement\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\nimport { Attributes } from \"../../../Utils/Attributes\";\r\nimport { TextElement } from \"../Texts/TextElement\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\n\r\n/**\r\n * ImageElement class is class which creates holder for image from resources. This image will be rendered to canvas.\r\n * Example:\r\n *   <ImageElement Class=\"ImageElement\" Image=\"[imageId]\" X=\"0\" Y=\"0\" />\r\n * @class ImageElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ImageElement extends PIXI.Sprite implements IElement, ITweenable {\r\n    static DynamicTint: string = \"ff0000\";\r\n\r\n    private _uid: string;\r\n    private _cloned: boolean;\r\n    private __destroyed: boolean;\r\n    private count: number;\r\n\r\n    maskGraphics: ShapeElement;\r\n    maskSprite: PIXI.Sprite;\r\n\r\n    usedInPool: boolean;\r\n\r\n    static _destroyOptions: PIXI.DestroyOptions = {\r\n        children: true,\r\n    };\r\n\r\n    zIndex: number = 0;\r\n\r\n    constructor(texture?: PIXI.Texture) {\r\n        super(texture);\r\n        this.usedInPool = false;\r\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\r\n\r\n        this.tint = 0xffffff;\r\n        this.count = 0;\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                this._uid = PerfDebug.generateElementUID(this);\r\n                PerfDebug.newElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    public create(node: Element): void {\r\n        this.createByNode(node);\r\n        this.updateByNode(node);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element): void {\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\r\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.IMAGE)) {\r\n            // get loaded image from resources\r\n            this.texture = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.IMAGE));\r\n        } else if (node.hasAttribute(ImageElementAttributes.FROM_FRAME)) {\r\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\r\n                let frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\r\n                let frameStr = frame < 10 ? \"0\" + frame : frame;\r\n                this.texture = StageController.getTextureByResourceId(\r\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME) + \"00\" + frameStr,\r\n                );\r\n            } else {\r\n                this.texture = StageController.getTextureByResourceId(\r\n                    node.getAttribute(ImageElementAttributes.FROM_FRAME),\r\n                );\r\n            }\r\n        } else if (node.hasAttribute(ImageElementAttributes.ANIMATION)) {\r\n            let frame: number = 0;\r\n            if (node.hasAttribute(ImageElementAttributes.FRAME)) {\r\n                frame = parseInt(node.getAttribute(ImageElementAttributes.FRAME));\r\n            }\r\n            let frameStr = frame < 10 ? \"0\" + frame : frame;\r\n\r\n            this.texture = StageController.getTextureByResourceId(\r\n                node.getAttribute(ImageElementAttributes.ANIMATION) + \"00\" + frameStr,\r\n            );\r\n        }\r\n\r\n        if (this.texture) {\r\n            if (node.hasAttribute(ImageElementAttributes.ANCHOR)) {\r\n                let anchorPoints = node.getAttribute(ImageElementAttributes.ANCHOR).split(\";\");\r\n\r\n                if (anchorPoints.length === 1) {\r\n                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n                    this.anchor.y = parseFloat(anchorPoints[0]);\r\n                } else if (anchorPoints.length === 2) {\r\n                    this.anchor.x = parseFloat(anchorPoints[0]);\r\n                    this.anchor.y = parseFloat(anchorPoints[1]);\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                if (!(this.texture && this.texture.baseTexture)) {\r\n                    //this.log('ERROR no Image with name: ' + node.getAttribute(ImageElementAttributes.IMAGE));\r\n                    this.log(\"ERROR Image has no texture\");\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.maskGraphics != null) {\r\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleX\")) {\r\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleY\")) {\r\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskX\")) {\r\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskY\")) {\r\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n            }\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.createElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): ImageElement {\r\n        if (!node) {\r\n            this.logError(\"No node specified for element update!\");\r\n            return;\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (\r\n                node.hasAttribute(ImageElementAttributes.DEBUG) &&\r\n                node.getAttribute(ImageElementAttributes.DEBUG) === \"true\"\r\n            ) {\r\n                debugger;\r\n            }\r\n        }\r\n\r\n        if (!node.hasAttribute(\"RemoveTweens\")) {\r\n            Tweens.removeTweens(this);\r\n        }\r\n\r\n        this.visible = Attributes.assignBooleanAttribute(node, ImageElementAttributes.VISIBLE, this.visible);\r\n        this.alpha = Attributes.assignFloatAttribute(node, ImageElementAttributes.ALPHA, this.alpha);\r\n        this.blendMode = CustomUtils.getBlendMode(\r\n            this.getBlendModeByString(\r\n                Attributes.assignStringAttribute(node, ImageElementAttributes.BLEND_MODE, this.blendMode),\r\n            ),\r\n        );\r\n        this.pivot.x = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_X, this.pivot.x);\r\n        this.pivot.y = Attributes.assignIntAttribute(node, ImageElementAttributes.PIVOT_Y, this.pivot.y);\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.ROTATION)) {\r\n            this.rotation = this.degrees2radians(parseFloat(node.getAttribute(ImageElementAttributes.ROTATION)));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.START_ROTATION)) {\r\n            if (node.getAttribute(ImageElementAttributes.START_ROTATION) === ImageElementAttributes.START_ROTATION) {\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        this.position.x = Attributes.assignIntAttribute(node, ImageElementAttributes.X, this.position.x);\r\n        this.position.y = Attributes.assignIntAttribute(node, ImageElementAttributes.Y, this.position.y);\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE_X)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE_Y)) {\r\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE)) {\r\n            this.scale.x = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\r\n            this.scale.y = parseFloat(node.getAttribute(ImageElementAttributes.SCALE));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SKEW_X)) {\r\n            this.skew.x = parseFloat(node.getAttribute(ImageElementAttributes.SKEW_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SKEW_Y)) {\r\n            this.skew.y = parseFloat(node.getAttribute(ImageElementAttributes.SKEW_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SKEW)) {\r\n            this.skew.x = parseFloat(node.getAttribute(ImageElementAttributes.SKEW));\r\n            this.skew.y = parseFloat(node.getAttribute(ImageElementAttributes.SKEW));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.MASK)) {\r\n            let next: Element = node.parentElement.firstElementChild;\r\n            while (next != null) {\r\n                if (next.nodeName === node.getAttribute(ImageElementAttributes.MASK)) {\r\n                    let shapeElement: ShapeElement = new ShapeElement();\r\n                    shapeElement.create(next);\r\n                    this.maskGraphics = shapeElement;\r\n                    this.mask = shapeElement;\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n\r\n            if (this.mask == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(ImageElementAttributes.MASK));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK)) {\r\n            let image = StageController.getTextureByResourceId(node.getAttribute(ImageElementAttributes.BITMAP_MASK));\r\n\r\n            if (image != null) {\r\n                this.maskSprite = new PIXI.Sprite(image);\r\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_X)) {\r\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_X));\r\n                }\r\n                if (node.hasAttribute(ImageElementAttributes.BITMAP_MASK_Y)) {\r\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(ImageElementAttributes.BITMAP_MASK_Y));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskPivotX\")) {\r\n                    this.maskSprite.pivot.x = parseInt(node.getAttribute(\"BitmapMaskPivotX\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskPivotY\")) {\r\n                    this.maskSprite.pivot.y = parseInt(node.getAttribute(\"BitmapMaskPivotY\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskScaleY\")) {\r\n                    this.maskSprite.scale.y = parseFloat(node.getAttribute(\"BitmapMaskScaleY\"));\r\n                }\r\n\r\n                if (node.hasAttribute(\"BitmapMaskScaleX\")) {\r\n                    this.maskSprite.scale.x = parseFloat(node.getAttribute(\"BitmapMaskScaleX\"));\r\n                }\r\n\r\n                if (!node.hasAttribute(ImageElementAttributes.BITMAP_MASK_SHOW)) {\r\n                    this.addChild(this.maskSprite);\r\n                    this.mask = this.maskSprite;\r\n                }\r\n\r\n                this.runBitmapMaskScaleTween(node, this.maskSprite);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\r\n                        \"ERROR\" +\r\n                            this.componentName +\r\n                            \" no image with name for mask: \" +\r\n                            node.getAttribute(ImageElementAttributes.BITMAP_MASK),\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.TINT)) {\r\n            let spr: PIXI.Sprite;\r\n            if (node.getAttribute(ImageElementAttributes.TINT) === \"0\") {\r\n                this.tint = null;\r\n            } else if (node.getAttribute(ImageElementAttributes.TINT) === \"dynamic\") {\r\n                this.tint = parseInt(ImageElement.DynamicTint, 16);\r\n            } else {\r\n                this.tint = parseInt(node.getAttribute(ImageElementAttributes.TINT), 16);\r\n                if (this.children != null && this.children[0] != null && this.children[0] instanceof PIXI.Sprite) {\r\n                    spr = <PIXI.Sprite>this.children[0];\r\n                    spr.tint = this.tint;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.maskGraphics != null) {\r\n            if (node.hasAttribute(\"MaskTweenScaleY\")) {\r\n                this.runBitmapMaskScaleTween(node, this.maskGraphics);\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleX\")) {\r\n                this.maskGraphics.scale.x = parseFloat(node.getAttribute(\"MaskScaleX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskScaleY\")) {\r\n                this.maskGraphics.scale.y = parseFloat(node.getAttribute(\"MaskScaleY\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskX\")) {\r\n                this.maskGraphics.position.x = parseFloat(node.getAttribute(\"MaskX\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"MaskY\")) {\r\n                this.maskGraphics.position.y = parseFloat(node.getAttribute(\"MaskY\"));\r\n            }\r\n        }\r\n\r\n        this.runPositionTween(node);\r\n        this.runScaleTween(node);\r\n        this.runRotationTween(node);\r\n        this.runAlphaTween(node);\r\n        this.runTween(node);\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    /**\r\n     * Runs the alpha tween\r\n     * @method runAlphaTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runAlphaTween(node: Element): boolean {\r\n        if (!node.hasAttribute(ImageElementAttributes.ALPHA_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let alphaTween: Array<number> = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.ALPHA_TWEEN));\r\n\r\n        const alphas: Array<number> = alphaTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.ALPHA_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ImageElementAttributes.ALPHA_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.ALPHA_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ImageElementAttributes.ALPHA_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the position tween\r\n     * @method runPositionTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runPositionTween(node: Element): boolean {\r\n        if (\r\n            (!node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_X) ||\r\n                !node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_Y)) &&\r\n            (!node.hasAttribute(\"PositionTweenToX\") || !node.hasAttribute(\"PositionTweenToY\")) &&\r\n            (!node.hasAttribute(\"AbsolutePositionTweenToX\") || !node.hasAttribute(\"AbsolutePositionTweenToY\"))\r\n        ) {\r\n            return false;\r\n        }\r\n\r\n        let positionTweenX: Array<number>;\r\n        let positionTweenY: Array<number>;\r\n\r\n        if (\r\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_X) &&\r\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_Y)\r\n        ) {\r\n            let positionTweenPosition: string = Attributes.assignStringAttribute(\r\n                node,\r\n                ImageElementAttributes.POSITION_TWEEN_POSITION,\r\n                null,\r\n            );\r\n            if (positionTweenPosition === ImageElementAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n                positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X)).map(\r\n                    (value) => value + this.position.x,\r\n                );\r\n                positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y)).map(\r\n                    (value) => value + this.position.y,\r\n                );\r\n            } else {\r\n                positionTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_X));\r\n                positionTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_Y));\r\n            }\r\n        } else if (node.hasAttribute(\"PositionTweenToX\") && node.hasAttribute(\"PositionTweenToY\")) {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToX\"));\r\n            positionTweenX.unshift(this.position.x);\r\n\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(\"PositionTweenToY\"));\r\n            positionTweenY.unshift(this.position.y);\r\n        } else if (node.hasAttribute(\"AbsolutePositionTweenToX\") && node.hasAttribute(\"AbsolutePositionTweenToY\")) {\r\n            positionTweenX = ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToX\")).map(\r\n                (value) => this.position.x + (value - this.getGlobalPosition().x),\r\n            );\r\n            positionTweenX.unshift(this.position.x);\r\n\r\n            positionTweenY = ArrayUtils.numberArray(node.getAttribute(\"AbsolutePositionTweenToY\")).map(\r\n                (value) => this.position.y + (value - this.getGlobalPosition().y),\r\n            );\r\n            positionTweenY.unshift(this.position.y);\r\n        }\r\n\r\n        let bezierX: Array<number> = null;\r\n        let bezierY: Array<number> = null;\r\n        let bezier: any = null;\r\n\r\n        if (\r\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_X) &&\r\n            node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_Y)\r\n        ) {\r\n            bezierX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_X));\r\n            bezierY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_Y));\r\n            bezier = { values: [] };\r\n\r\n            for (let i = 0; i < Math.min(bezierX.length, bezierY.length); i++) {\r\n                bezier.values.push({ x: bezierX[i], y: bezierY[i] });\r\n            }\r\n\r\n            if (node.hasAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE)) {\r\n                let autorotate: string = node.getAttribute(ImageElementAttributes.POSITION_TWEEN_BEZIER_AUTOROTATE);\r\n                if (parseInt(autorotate) || StringUtils.parseBoolean(autorotate)) {\r\n                    bezier[\"autoRotate\"] = autorotate;\r\n                } else {\r\n                    let autorotateArray: Array<any> = autorotate.split(\";\");\r\n                    if (autorotateArray.length == 5) {\r\n                        // e.g. [\"x\",\"y\",\"rotation\",45,true]\r\n                        let [a, b, c, d, e] = autorotateArray;\r\n                        bezier[\"autoRotate\"] = [];\r\n                        bezier[\"autoRotate\"].push(a);\r\n                        bezier[\"autoRotate\"].push(b);\r\n                        bezier[\"autoRotate\"].push(c);\r\n                        bezier[\"autoRotate\"].push(parseInt(d));\r\n                        bezier[\"autoRotate\"].push(e == \"true\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        const tweenX: Array<number> = positionTweenX || [];\r\n        const tweenY: Array<number> = positionTweenY || [];\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            ImageElementAttributes.POSITION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ImageElementAttributes.POSITION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.POSITION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ImageElementAttributes.POSITION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration, tweenDelay, tweenLoop, bezier });\r\n    }\r\n\r\n    /**\r\n     * Runs the rotation tween\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runRotationTween(node: Element): boolean {\r\n        if (!node.hasAttribute(ImageElementAttributes.ROTATION_TWEEN)) {\r\n            return false;\r\n        }\r\n\r\n        let rotationTween: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(ImageElementAttributes.ROTATION_TWEEN),\r\n        );\r\n\r\n        const degrees: Array<number> = rotationTween || [];\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(\r\n            node,\r\n            ImageElementAttributes.ROTATION_TWEEN_EASE,\r\n            null,\r\n        );\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ImageElementAttributes.ROTATION_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.ROTATION_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ImageElementAttributes.ROTATION_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runScaleTween(node: Element): boolean {\r\n        let scaleTweenX: Array<number>;\r\n        let scaleTweenY: Array<number>;\r\n        let scaleTween: Array<PIXI.Point>;\r\n        let tweenValues: Array<PIXI.Point> = [];\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_X)) {\r\n            scaleTweenX = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_X));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN_Y)) {\r\n            scaleTweenY = ArrayUtils.numberArray(node.getAttribute(ImageElementAttributes.SCALE_TWEEN_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageElementAttributes.SCALE_TWEEN)) {\r\n            scaleTween = ImageElement._getPointsFromPointsAttribute(\r\n                node.getAttribute(ImageElementAttributes.SCALE_TWEEN),\r\n            ) as Array<PIXI.Point>;\r\n        }\r\n\r\n        if (scaleTween && scaleTween.length) {\r\n            tweenValues = scaleTween;\r\n        } else if (scaleTweenX && scaleTweenY) {\r\n            if (scaleTweenX.length === scaleTweenY.length) {\r\n                tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                    return {\r\n                        x: scaleXValue,\r\n                        y: scaleTweenY[i],\r\n                    } as PIXI.Point;\r\n                });\r\n            }\r\n        } else if (scaleTweenX) {\r\n            tweenValues = scaleTweenX.map((scaleXValue: number, i: number) => {\r\n                return {\r\n                    x: scaleXValue,\r\n                    y: this.scale.y,\r\n                } as PIXI.Point;\r\n            });\r\n        } else if (scaleTweenY) {\r\n            tweenValues = scaleTweenY.map((scaleYValue: number, i: number) => {\r\n                return {\r\n                    x: this.scale.x,\r\n                    y: scaleYValue,\r\n                } as PIXI.Point;\r\n            });\r\n        } else {\r\n            return false;\r\n        }\r\n\r\n        const tweenEase: string = Attributes.assignStringAttribute(node, ImageElementAttributes.SCALE_TWEEN_EASE, null);\r\n        const tweenDuration: number = Attributes.assignIntAttribute(\r\n            node,\r\n            ImageElementAttributes.SCALE_TWEEN_DURATION,\r\n            120,\r\n        );\r\n        const tweenDelay: number = Attributes.assignIntAttribute(node, ImageElementAttributes.SCALE_TWEEN_DELAY, 0);\r\n        const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n            node,\r\n            ImageElementAttributes.SCALE_TWEEN_LOOP,\r\n            null,\r\n        );\r\n\r\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n    }\r\n\r\n    /**\r\n     * Runs the scale tween\r\n     *\r\n     * @method runScaleTween\r\n     * @param node\r\n     * @returns {boolean}\r\n     */\r\n    public runBitmapMaskScaleTween(node: Element, maskObject: any): void {\r\n        let scaleTweenY: Array<number>;\r\n        let tweenValues: Array<number> = [];\r\n        let tweenDuration: Array<number> = [];\r\n        let tweenEase: Array<string> = [];\r\n        let tweenDelay: Array<number> = [];\r\n        let tweenLoop: boolean = false;\r\n\r\n        let maskSprite: ITweenable = <any>maskObject;\r\n\r\n        if (maskObject instanceof ShapeElement) {\r\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenScaleY\"));\r\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"MaskTweenYScaleDuration\") || \"120\");\r\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\r\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\r\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\r\n        } else {\r\n            tweenValues = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleTweenY\"));\r\n            tweenDuration = ArrayUtils.numberArray(node.getAttribute(\"BitmapMaskScaleYTweenDuration\") || \"120\");\r\n            tweenEase = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_EASE) || \"linear\");\r\n            tweenDelay = ArrayUtils.numberArray(node.getAttribute(TweensAttributes.TWEEN_DELAY) || \"0\");\r\n            tweenLoop = Attributes.assignBooleanAttribute(node, TweensAttributes.TWEEN_LOOP, null);\r\n        }\r\n\r\n        Tweens.removeTweens(maskSprite, \"all\");\r\n        Tweens.customTween(maskSprite, {\r\n            tween: \"scale.y\",\r\n            tweenValues,\r\n            tweenEase,\r\n            tweenDuration,\r\n            tweenDelay,\r\n            tweenLoop,\r\n        });\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {Element} node\r\n     * @returns {boolean}\r\n     */\r\n    public runTween(node: Element): boolean {\r\n        if (node.hasAttribute(TweensAttributes.TWEEN)) {\r\n            let tweens: Array<string> = ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN));\r\n\r\n            for (let i: number = 0; i < tweens.length; i++) {\r\n                //return if there are no values to tween\r\n                if (!node.hasAttribute(TweensAttributes.TWEEN_VALUES + i)) {\r\n                    return false;\r\n                }\r\n\r\n                let tween: string = tweens[i];\r\n\r\n                const tweenValues: Array<number> = this.formatTweenValues(\r\n                    tween,\r\n                    ArrayUtils.stringArray(node.getAttribute(TweensAttributes.TWEEN_VALUES + i)),\r\n                );\r\n                const tweenDuration: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DURATION + i) || \"120\",\r\n                );\r\n                const tweenEase: Array<string> = ArrayUtils.stringArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_EASE + i) || \"linear\",\r\n                );\r\n                const tweenDelay: Array<number> = ArrayUtils.numberArray(\r\n                    node.getAttribute(TweensAttributes.TWEEN_DELAY + i) || \"0\",\r\n                );\r\n                const tweenLoop: boolean = Attributes.assignBooleanAttribute(\r\n                    node,\r\n                    TweensAttributes.TWEEN_LOOP + i,\r\n                    null,\r\n                );\r\n\r\n                if (tween === \"scale\") {\r\n                    tween = \"scale.x\";\r\n                    tweens[i] = \"scale.y\";\r\n                    i--;\r\n                }\r\n\r\n                Tweens.customTween(this, { tween, tweenValues, tweenEase, tweenDuration, tweenDelay, tweenLoop });\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private formatTweenValues(tween: string, values: Array<string>): Array<number> {\r\n        let tweenValues: Array<number> = [];\r\n\r\n        if (tween === \"scale\") {\r\n            tween = \"scale.x\";\r\n        }\r\n        let property: Array<string> = tween.split(\".\");\r\n        let value: number;\r\n\r\n        for (let i: number = 0; i < values.length; i++) {\r\n            let current = values[i];\r\n            switch (current[current.length - 1]) {\r\n                case \"c\": //if we want current value\r\n                    if (property.length == 1) {\r\n                        value = this[property[0]];\r\n                        if (property[0] === \"rotation\") {\r\n                            value = this.radians2degrees(value);\r\n                        }\r\n                        tweenValues.push(value);\r\n                    } else if (property.length == 2) {\r\n                        tweenValues.push(this[property[0]][property[1]]);\r\n                    }\r\n\r\n                    break;\r\n                case \"+\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] + value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"-\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n                    if (tweenValues.length > 0) {\r\n                        value = tweenValues[tweenValues.length - 1] - value;\r\n                    }\r\n                    tweenValues.push(value);\r\n                    break;\r\n                case \"~\":\r\n                    value = parseFloat(current.slice(0, -1));\r\n\r\n                    if (property[0] == \"position\") {\r\n                        if (property[1] == \"x\") {\r\n                            value = this.position.x + (value - this.getGlobalPosition().x);\r\n                        } else if (property[1] == \"y\") {\r\n                            value = this.position.y + (value - this.getGlobalPosition().y);\r\n                        }\r\n                    }\r\n\r\n                    tweenValues.push(value);\r\n                    break;\r\n                default:\r\n                    tweenValues.push(parseFloat(current));\r\n            }\r\n        }\r\n\r\n        return tweenValues;\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return ImageElement\r\n     */\r\n    clone(): ImageElement {\r\n        let element: ImageElement = new ImageElement();\r\n        element.removeChildren();\r\n\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n        element.visible = this.visible;\r\n        element.alpha = this.alpha;\r\n        element.anchor = this.anchor;\r\n        element.tint = this.tint;\r\n        element.blendMode = this.blendMode;\r\n        element.name = this.name;\r\n\r\n        if (this.texture != null) {\r\n            element.texture = this.texture;\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n\r\n        return element;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param options\r\n     */\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        Tweens.removeTweens(this);\r\n\r\n        this.texture = null;\r\n    }\r\n\r\n    getDebugInfo(): string {\r\n        if (DEBUG) {\r\n            let debugInfoFn = this.debugInfo;\r\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    debugInfo(): string {\r\n        if (DEBUG) {\r\n            let result = `${this.uid}\\nName: [${this.name}]`;\r\n            let imgurl = this.texture && this.texture.baseTexture ? this.texture.baseTexture.imageUrl : \"\";\r\n            if (!StringUtils.isNullOrEmpty(imgurl)) {\r\n                result += \"\\nUrl: \" + imgurl;\r\n            }\r\n            return result;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     * @property cloned - indicates if element was cloned or not.\r\n     * @returns {boolean}\r\n     */\r\n    public get cloned(): boolean {\r\n        return this._cloned;\r\n    }\r\n\r\n    public get destroyed(): boolean {\r\n        return this.__destroyed;\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this.assertDestroyed(\"destroy\");\r\n\r\n        if (Utils.isNullOrUndefined(options)) {\r\n            options = ImageElement._destroyOptions;\r\n        }\r\n\r\n        this.internalDestroy(options);\r\n\r\n        if (!Utils.isNullOrUndefined(this.children)) {\r\n            super.destroy(options);\r\n        }\r\n\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.destroy(this);\r\n            }\r\n        }\r\n\r\n        this.__destroyed = true;\r\n    }\r\n\r\n    protected assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\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.\r\n     * @method _getPointsFromPointsAttribute\r\n     * @return Array<PIXI.Points>\r\n     */\r\n    private static _getPointsFromPointsAttribute(pointsString: string): Array<{ x: number; y: number }> {\r\n        if (!pointsString) {\r\n            return [];\r\n        }\r\n\r\n        return pointsString\r\n            .replace(/\\s/g, \"\")\r\n            .split(\";\")\r\n            .map((valuesPair: string) =>\r\n                /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair],\r\n            )\r\n            .map((valuesPair: Array<string>) => {\r\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    protected _markAsCloned(): void {\r\n        this.markAsCloned();\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    markAsCloned(): void {\r\n        this._assertDestroyed(\"markAsCloned()\");\r\n        this._cloned = true;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.clone(this);\r\n\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param method\r\n     * @private\r\n     */\r\n    protected _assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    removeAndDestroyChildren(): void {\r\n        this._removeAndDestroyChildren();\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    protected _removeAndDestroyChildren(): void {\r\n        this._assertDestroyed(\"_removeAndDestroyChildren\");\r\n\r\n        let destroyOptions: PIXI.DestroyOptions = {\r\n            children: true,\r\n        };\r\n\r\n        if (this.children != null && this.children.length > 0) {\r\n            for (let i = this.children.length - 1; i >= 0; i--) {\r\n                if (this.children[i] != null) {\r\n                    (this.children[i] as any).destroy(destroyOptions);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.removeChildren();\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param degrees\r\n     * @returns {number}\r\n     */\r\n    public radians2degrees(radians: number): number {\r\n        return radians * (180 / Math.PI);\r\n    }\r\n\r\n    /**\r\n     * Important! The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes.\r\n     * Anything else will silently act like NORMAL.\r\n     *\r\n     * @param mode\r\n     * @returns {number}\r\n     */\r\n    public getBlendModeByString(mode: string): number {\r\n        mode = mode.toString();\r\n        switch (mode) {\r\n            case \"0\":\r\n            case \"normal\":\r\n                return PIXI.BLEND_MODES.NORMAL;\r\n            case \"1\":\r\n            case \"add\":\r\n                return PIXI.BLEND_MODES.ADD;\r\n            case \"2\":\r\n            case \"multiply\":\r\n                return PIXI.BLEND_MODES.MULTIPLY;\r\n            case \"3\":\r\n            case \"screen\":\r\n                return PIXI.BLEND_MODES.SCREEN;\r\n            case \"4\":\r\n            case \"overlay\":\r\n                return PIXI.BLEND_MODES.OVERLAY;\r\n            case \"5\":\r\n            case \"darken\":\r\n                return PIXI.BLEND_MODES.DARKEN;\r\n            case \"6\":\r\n            case \"lighten\":\r\n                return PIXI.BLEND_MODES.LIGHTEN;\r\n            case \"7\":\r\n            case \"color_dodge\":\r\n                return PIXI.BLEND_MODES.COLOR_DODGE;\r\n            case \"8\":\r\n            case \"color_burn\":\r\n                return PIXI.BLEND_MODES.COLOR_BURN;\r\n            case \"9\":\r\n            case \"hard_light\":\r\n                return PIXI.BLEND_MODES.HARD_LIGHT;\r\n            case \"10\":\r\n            case \"soft_light\":\r\n                return PIXI.BLEND_MODES.SOFT_LIGHT;\r\n            case \"11\":\r\n            case \"difference\":\r\n                return PIXI.BLEND_MODES.DIFFERENCE;\r\n            case \"12\":\r\n            case \"exclusion\":\r\n                return PIXI.BLEND_MODES.EXCLUSION;\r\n            case \"13\":\r\n            case \"hue\":\r\n                return PIXI.BLEND_MODES.HUE;\r\n            case \"14\":\r\n            case \"saturation\":\r\n                return PIXI.BLEND_MODES.SATURATION;\r\n            case \"15\":\r\n            case \"color\":\r\n                return PIXI.BLEND_MODES.COLOR;\r\n            case \"16\":\r\n            case \"luminosity\":\r\n                return PIXI.BLEND_MODES.LUMINOSITY;\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR Unknown blending mode \" + mode + \". Used default mode NORMAL.\");\r\n                }\r\n                return PIXI.BLEND_MODES.NORMAL;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Prints output on screen inside element with specified debug content\r\n     */\r\n    protected _printDebugInfo(text: any, node?: Element) {\r\n        if (DEBUG) {\r\n            if (this.getChildByName(ImageElementAttributes.DEBUG_INFO) != null) {\r\n                this.removeChild(this.getChildByName(ImageElementAttributes.DEBUG_INFO));\r\n            }\r\n            if (\r\n                node == undefined ||\r\n                (node.hasAttribute(ImageElementAttributes.DEBUG_INFO) &&\r\n                    node.getAttribute(ImageElementAttributes.DEBUG_INFO) === \"true\")\r\n            ) {\r\n                // test\r\n                /*let border = new ShapeElement();\r\n                 border.beginFill(0xFFFFFF, 0);\r\n                 border.lineStyle(2, 0xff0000);\r\n                 border.drawRect(0, 0, this._textures[0].width, this._textures[0].height);\r\n                 this.addChild(border);*/\r\n\r\n                let textInfo = new TextElement();\r\n                textInfo.name = ImageElementAttributes.DEBUG_INFO;\r\n                textInfo.x = textInfo.y = 0;\r\n                textInfo.style.fill = 0xff0000;\r\n                textInfo.style.fontSize = 10;\r\n                textInfo.text = JSON.stringify(text, null, 4);\r\n\r\n                this.addChild(textInfo);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param s\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nclass ShockwaveOptions {\r\n    amplitude?: number;\r\n    wavelength?: number;\r\n    brightness?: number;\r\n    speed?: number;\r\n    radius?: number;\r\n}\r\n\r\nexport const ImageElementAttributes = {\r\n    /**\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n    ALPHA_TWEEN_LOOP: \"AlphaTweenLoop\",\r\n    ANCHOR: \"Anchor\",\r\n    /**\r\n     * Target animation from where is specific frame selected. Attribute Frame=\"?\" needed.\r\n     */\r\n    ANIMATION: \"Animation\",\r\n    /**\r\n     * A ImageElement instance that defines a mask for this display object.\r\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).\r\n     * @property BitmapMask\r\n     * @type string\r\n     * @default null\r\n     */\r\n    BITMAP_MASK: \"BitmapMask\",\r\n    BITMAP_MASK_SHOW: \"BitmapMaskShow\",\r\n    BITMAP_MASK_X: \"BitmapMaskX\",\r\n    BITMAP_MASK_Y: \"BitmapMaskY\",\r\n    /**\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @type number\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    DEBUG_INFO: \"DebugInfo\",\r\n    DEBUG: \"Debug\",\r\n\r\n    FRAME: \"Frame\",\r\n\r\n    FROM_FRAME: \"FromFrame\",\r\n    /**\r\n     * Reference to image from resources.\r\n     * @property Image\r\n     * @type string\r\n     * @default 0\r\n     */\r\n    IMAGE: \"Image\",\r\n    /**\r\n     * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\r\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).\r\n     * @property Mask\r\n     * @type ShapeElement\r\n     * @default null\r\n     */\r\n    MASK: \"Mask\",\r\n    /**\r\n     * X pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotX\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_X: \"PivotX\",\r\n    /**\r\n     * Y pivot for container. Used mainly for scale tweening and rotation.\r\n     * @property PivotY\r\n     * @type number\r\n     * @default null\r\n     */\r\n    PIVOT_Y: \"PivotY\",\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_BEZIER_AUTOROTATE: \"PositionTweenBezierAutorotate\",\r\n    POSITION_TWEEN_BEZIER_X: \"PositionTweenBezierX\",\r\n    POSITION_TWEEN_BEZIER_Y: \"PositionTweenBezierY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_DELAY: \"PositionTweenDelay\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n    POSITION_TWEEN_LOOP: \"PositionTweenLoop\",\r\n    /**\r\n     * Rotation in degrees for this display object.\r\n     * @property Rotation\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    ROTATION: \"Rotation\",\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n    ROTATION_TWEEN_LOOP: \"RotationTweenLoop\",\r\n    /**\r\n     *\r\n     */\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_X: \"ScaleTweenX\",\r\n    SCALE_TWEEN_Y: \"ScaleTweenY\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_DELAY: \"ScaleTweenDelay\",\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    SCALE_TWEEN_LOOP: \"ScaleTweenLoop\",\r\n    /**\r\n     * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n     * @property Scale\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE: \"Scale\",\r\n    SCALE_X: \"ScaleX\",\r\n    /**\r\n     * The factor to stretch this display object vertically.\r\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.\r\n     * @property ScaleY\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    SCALE_Y: \"ScaleY\",\r\n    SKEW: \"Skew\",\r\n    /**\r\n     * The factor to skew this display object horizontally.\r\n     * @property SkewX\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    SKEW_X: \"SkewX\",\r\n    /**\r\n     * The factor to skew this display object vertically.\r\n     * @property SkewY\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    SKEW_Y: \"SkewY\",\r\n    /**\r\n     * Random rotation in degrees for this display object.\r\n     * @property StartRotation\r\n     * @type Number\r\n     * @default null\r\n     */\r\n    START_ROTATION: \"StartRotation\",\r\n    /**\r\n     * Tint of image. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    /**\r\n     * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n     * @property Visible\r\n     * @type Boolean\r\n     * @default true\r\n     */\r\n    VISIBLE: \"Visible\",\r\n    /**\r\n     * X (horizontal) position of the display object, relative to its parent.\r\n     * @property X\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    X: \"X\",\r\n    /**\r\n     * Y (vertical) position of the display object, relative to its parent.\r\n     * @property Y\r\n     * @type Number\r\n     * @default 0\r\n     */\r\n    Y: \"Y\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ImageElement.ts\n **/","import { ArrayUtils, engineComponent, StringUtils } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { ParticleElementAttributes } from \"../Graphics/ParticleElement\";\r\n\r\nexport interface IZoneOptions {\r\n    type: string;\r\n    x?: number;\r\n    y?: number;\r\n    width?: number;\r\n    height?: number;\r\n    innerWidth?: number;\r\n    innerHeight?: number;\r\n    radius?: number;\r\n    minRadius?: number;\r\n    radiusB?: number;\r\n    minRadiusB?: number;\r\n    innerRadius?: number;\r\n    minInnerRadius?: number;\r\n    innerRadiusB?: number;\r\n    minInnerRadiusB?: number;\r\n    innerX?: number;\r\n    innerY?: number;\r\n    angle?: number;\r\n    startAngle?: number;\r\n    //    Fountain\r\n    startX?: Array<number>;\r\n    startY?: Array<number>;\r\n    intervalX?: Array<number>;\r\n    intervalY?: Array<number>;\r\n    bezierY?: Array<number>;\r\n    bezierEllipse?: boolean;\r\n}\r\n\r\nexport interface IPathOptions {\r\n    x?: number;\r\n    y?: number;\r\n    randomX?: number;\r\n    randomY?: number;\r\n}\r\n\r\n@engineComponent(ComponentTypes.Style)\r\n// TODO add comments\r\nexport class ParticleStyle extends Style {\r\n    // value in percentage for creating reserv in display list to pooling particles\r\n    static ElementsReserve: number = 0.5;\r\n\r\n    // names for zones\r\n    static ZoneRectangle: string = \"Rectangle\";\r\n    static ZoneLine: string = \"Line\";\r\n    static ZoneEllipse: string = \"Ellipse\";\r\n    static ZoneTarget: string = \"Target\";\r\n    static ZoneDynamic: string = \"Dynamic\";\r\n    static ZoneFountain: string = \"Fountain\";\r\n\r\n    static NodeCount: string = \"Count\";\r\n    static NodeLife: string = \"Life\";\r\n    static NodeImages: string = \"Images\";\r\n    static NodePosition: string = \"Position\";\r\n    static NodePath: string = \"Path\";\r\n    static NodeScale: string = \"Scale\";\r\n    static NodeRotation: string = \"Rotation\";\r\n    static NodeAlpha: string = \"Alpha\";\r\n    static NodeValue: string = \"Value\";\r\n\r\n    // TODO possible memory leak\r\n    node: Element;\r\n\r\n    private _count: number;\r\n    private _time: number;\r\n    private _minLife: number;\r\n    private _maxLife: number;\r\n    private _images: Array<string>;\r\n    private _randomStartFrame: boolean;\r\n    private _subParticleStyle: string;\r\n    private _positionZone: IZoneOptions;\r\n    private _pathValues: Array<IPathOptions>;\r\n    private _scaleValues: Array<Array<number>>;\r\n    private _rotationValues: Array<Array<number>>;\r\n    private _alphaValues: Array<Array<number>>;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._count = 1;\r\n        this._time = 60;\r\n        this._minLife = 60;\r\n        this._maxLife = 120;\r\n        this._images = [];\r\n        this._randomStartFrame = false;\r\n        this._subParticleStyle = \"\";\r\n        this._positionZone = {\r\n            type: ParticleStyle.ZoneRectangle,\r\n            x: 0,\r\n            y: 0,\r\n            innerX: 0,\r\n            innerY: 0,\r\n            width: StageController.Width,\r\n            height: StageController.Height,\r\n            innerWidth: -1,\r\n            innerHeight: -1,\r\n            radius: 0,\r\n            minRadius: 0,\r\n            radiusB: 0,\r\n            minRadiusB: 0,\r\n            innerRadius: 0,\r\n            minInnerRadius: 0,\r\n            innerRadiusB: 0,\r\n            minInnerRadiusB: 0,\r\n            angle: 360,\r\n            startAngle: 0, //used to prevent container rotation deformation with ellipse,\r\n            startX: [960],\r\n            startY: [540],\r\n            intervalX: [170, 670],\r\n            intervalY: [200, 1000],\r\n            bezierY: [300, 900],\r\n            bezierEllipse: false,\r\n        };\r\n        this._pathValues = [];\r\n        this._scaleValues = [];\r\n        this._rotationValues = [];\r\n        this._alphaValues = [];\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element) {\r\n        this.node = node;\r\n\r\n        super.create(node);\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.EXTEND_STYLE)) {\r\n            let extendStyle: ParticleStyle = <ParticleStyle>(\r\n                StyleManager.Styles[node.getAttribute(ParticleElementAttributes.EXTEND_STYLE)]\r\n            );\r\n            if (extendStyle != null && extendStyle.node != null) {\r\n                this.parseChildrenNodes(extendStyle.node);\r\n            }\r\n        }\r\n\r\n        this.parseChildrenNodes(node);\r\n    }\r\n\r\n    private parseChildrenNodes(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case ParticleStyle.NodeCount:\r\n                    this.initializeCount(next);\r\n                    break;\r\n                case ParticleStyle.NodeLife:\r\n                    this.initializeLife(next);\r\n                    break;\r\n                case ParticleStyle.NodeImages:\r\n                    this.initializeImages(next);\r\n                    break;\r\n                case ParticleStyle.NodePosition:\r\n                    this.initializePosition(next);\r\n                    break;\r\n                case ParticleStyle.NodePath:\r\n                    this.initializePath(next);\r\n                    break;\r\n                case ParticleStyle.NodeScale:\r\n                    this.initializeScale(next);\r\n                    break;\r\n                case ParticleStyle.NodeRotation:\r\n                    this.initializeRotation(next);\r\n                    break;\r\n                case ParticleStyle.NodeAlpha:\r\n                    this.initializeAlpha(next);\r\n                    break;\r\n                default:\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\r\n                    }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    get count(): number {\r\n        return this._count;\r\n    }\r\n\r\n    get time(): number {\r\n        return this._time;\r\n    }\r\n\r\n    get minLife(): number {\r\n        return this._minLife;\r\n    }\r\n\r\n    get maxLife(): number {\r\n        return this._maxLife;\r\n    }\r\n\r\n    get images(): Array<string> {\r\n        return this._images;\r\n    }\r\n\r\n    get randomStartFrame(): boolean {\r\n        return this._randomStartFrame;\r\n    }\r\n\r\n    get subParticleStyle(): string {\r\n        return this._subParticleStyle;\r\n    }\r\n\r\n    get positionZone(): IZoneOptions {\r\n        return this._positionZone;\r\n    }\r\n\r\n    get pathValues(): Array<IPathOptions> {\r\n        return this._pathValues;\r\n    }\r\n\r\n    get scaleValues(): Array<Array<number>> {\r\n        return this._scaleValues;\r\n    }\r\n\r\n    get rotationValues(): Array<Array<number>> {\r\n        return this._rotationValues;\r\n    }\r\n\r\n    get alphaValues(): Array<Array<number>> {\r\n        return this._alphaValues;\r\n    }\r\n\r\n    calculateElements(): number {\r\n        let elementsPerSecond: number = (StageController.FPS / this._time) * this._count;\r\n        let elementsWithLife: number = (this._maxLife / StageController.FPS) * elementsPerSecond;\r\n        return elementsWithLife;\r\n    }\r\n\r\n    /**\r\n     * Initialize elements per second.\r\n     * Count - how much elements\r\n     * Time - time when specified count of elements is generated\r\n     *\r\n     * Example:\r\n     *  <Count Count=\"8\" Time=\"2\"/>\r\n     * @param node\r\n     */\r\n    private initializeCount(node: Element): void {\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_COUNT)) {\r\n            this._count = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_COUNT));\r\n        }\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TIME)) {\r\n            this._time = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_TIME));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Example:\r\n     *  <Life Min=\"500\" Max=\"1000\"/>\r\n     * @param node\r\n     */\r\n    private initializeLife(node: Element): void {\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN)) {\r\n            this._minLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MIN));\r\n        }\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_MAX)) {\r\n            this._maxLife = parseInt(node.getAttribute(ParticleStyleAttributes.ATTR_MAX));\r\n        }\r\n\r\n        if (this._minLife > this._maxLife) {\r\n            this._maxLife = this._minLife;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Example:\r\n     *  <Images Images=\"GFX_particle1;GFX_particle2;...\"/>\r\n     * @param node\r\n     */\r\n    private initializeImages(node: Element): void {\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME)) {\r\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_FROM_FRAME).split(\";\");\r\n\r\n            for (let i: number = 0; i < this._images.length; i++) {\r\n                // TODO 0000\r\n                this._images[i] = this._images[i] + \"0000\";\r\n            }\r\n        } else if (node.hasAttribute(ParticleStyleAttributes.ATTR_IMAGES)) {\r\n            this._images = node.getAttribute(ParticleStyleAttributes.ATTR_IMAGES).split(\";\");\r\n        }\r\n\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME)) {\r\n            this._randomStartFrame = StringUtils.parseBoolean(\r\n                node.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_START_FRAME),\r\n            );\r\n        }\r\n\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE)) {\r\n            this._subParticleStyle = node.getAttribute(ParticleStyleAttributes.ATTR_SUB_PARTICLE_STYLE);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Bornplace of elements.\r\n     * Example:\r\n     *  <Position Type=\"Rectangle\" X=\"0\" Y=\"-100\" Width=\"288\" Height=\"1080\"/>\r\n     * @param node\r\n     */\r\n    private initializePosition(node: Element): void {\r\n        if (node.hasAttribute(ParticleStyleAttributes.ATTR_TYPE)) {\r\n            this._positionZone.type = node.getAttribute(ParticleStyleAttributes.ATTR_TYPE);\r\n            switch (this._positionZone.type) {\r\n                case ParticleStyle.ZoneRectangle:\r\n                    // TODO separate method get Zone\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n                        this._positionZone.innerX = this._positionZone.x;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n                        this._positionZone.innerY = this._positionZone.y;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH)) {\r\n                        this._positionZone.innerWidth = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_WIDTH),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT)) {\r\n                        this._positionZone.innerHeight = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_HEIGHT),\r\n                        );\r\n                    }\r\n                    break;\r\n                case ParticleStyle.ZoneTarget:\r\n                    this._positionZone.width = 0;\r\n                    this._positionZone.height = 0;\r\n\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_WIDTH)) {\r\n                        this._positionZone.width = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_WIDTH));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_HEIGHT)) {\r\n                        this._positionZone.height = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_HEIGHT));\r\n                    }\r\n\r\n                    break;\r\n                case ParticleStyle.ZoneDynamic:\r\n                    break;\r\n                case ParticleStyle.ZoneLine:\r\n                    // TODO\r\n                    break;\r\n                case ParticleStyle.ZoneEllipse:\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n                        this._positionZone.innerX = this._positionZone.x;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n                        this._positionZone.innerY = this._positionZone.y;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_X)) {\r\n                        this._positionZone.innerX = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_X));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_Y)) {\r\n                        this._positionZone.innerY = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_Y));\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS)) {\r\n                        let radius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS));\r\n                        //set all attributes by radius, if we have only circle with no minRadius\r\n                        this._positionZone.radius = radius;\r\n                        this._positionZone.radiusB = radius;\r\n                        this._positionZone.minRadius = radius;\r\n                        this._positionZone.minRadiusB = radius;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS)) {\r\n                        this._positionZone.minRadius = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS),\r\n                        );\r\n                        this._positionZone.minRadiusB = this._positionZone.minRadius;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_RADIUS_B)) {\r\n                        this._positionZone.radiusB = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_RADIUS_B),\r\n                        );\r\n                        this._positionZone.minRadiusB = this._positionZone.radiusB;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B)) {\r\n                        this._positionZone.minRadiusB = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_RADIUS_B),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS)) {\r\n                        let innerRadius = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS));\r\n                        this._positionZone.innerRadius = innerRadius;\r\n                        this._positionZone.innerRadiusB = innerRadius;\r\n                        this._positionZone.minInnerRadius = innerRadius;\r\n                        this._positionZone.minInnerRadiusB = innerRadius;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS)) {\r\n                        this._positionZone.minInnerRadius = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS),\r\n                        );\r\n                        this._positionZone.minInnerRadiusB = this._positionZone.minInnerRadius;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B)) {\r\n                        this._positionZone.innerRadiusB = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INNER_RADIUS_B),\r\n                        );\r\n                        this._positionZone.minInnerRadiusB = this._positionZone.innerRadiusB;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B)) {\r\n                        this._positionZone.minInnerRadiusB = parseFloat(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_MIN_INNER_RADIUS_B),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_ANGLE)) {\r\n                        let startAngle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_START_ANGLE));\r\n                        this._positionZone.startAngle = startAngle;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_ANGLE)) {\r\n                        let angle = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_ANGLE));\r\n                        this._positionZone.angle = angle;\r\n                    }\r\n                    if (node.hasAttribute(\"BezierEllipse\")) {\r\n                        this._positionZone.bezierEllipse = StringUtils.parseBoolean(node.getAttribute(\"BezierEllipse\"));\r\n                    }\r\n                    break;\r\n\r\n                case ParticleStyle.ZoneFountain:\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n                        this._positionZone.x = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n                        this._positionZone.innerX = this._positionZone.x;\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n                        this._positionZone.y = parseFloat(node.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n                        this._positionZone.innerY = this._positionZone.y;\r\n                    }\r\n\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_X)) {\r\n                        this._positionZone.startX = ArrayUtils.numberArray(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_START_X),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_START_Y)) {\r\n                        this._positionZone.startY = ArrayUtils.numberArray(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_START_Y),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INTERVAL_X)) {\r\n                        this._positionZone.intervalX = ArrayUtils.numberArray(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INTERVAL_X),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_INTERVAL_Y)) {\r\n                        this._positionZone.intervalY = ArrayUtils.numberArray(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_INTERVAL_Y),\r\n                        );\r\n                    }\r\n                    if (node.hasAttribute(ParticleStyleAttributes.ATTR_BEZIER_Y)) {\r\n                        this._positionZone.bezierY = ArrayUtils.numberArray(\r\n                            node.getAttribute(ParticleStyleAttributes.ATTR_BEZIER_Y),\r\n                        );\r\n                    }\r\n\r\n                    break;\r\n                default:\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING unknown zone \" + this._positionZone.type);\r\n                    }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Initialize movement from defined start points to end points with possible random range.\r\n     * Example:\r\n     *  <Path>\r\n     *      <Value X=\"0\" Y=\"0\"/>\r\n     *      <Value X=\"100\" Y=\"-100\" RandomX=\"100\" RandomY=\"-100\"/>\r\n     *  </Path>\r\n     * @param node\r\n     */\r\n    private initializePath(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            if (next.nodeName === ParticleStyle.NodeValue) {\r\n                let path: IPathOptions = {};\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_X)) {\r\n                    path.x = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_X));\r\n                } else {\r\n                    path.x = 0;\r\n                }\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_Y)) {\r\n                    path.y = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_Y));\r\n                } else {\r\n                    path.y = 0;\r\n                }\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_X)) {\r\n                    path.randomX = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_X));\r\n                } else {\r\n                    path.randomX = null;\r\n                }\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y)) {\r\n                    path.randomY = parseFloat(next.getAttribute(ParticleStyleAttributes.ATTR_RANDOM_Y));\r\n                } else {\r\n                    path.randomY = null;\r\n                }\r\n                this._pathValues.push(path);\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Scale of object.\r\n     * Example:\r\n     *  <Scale>\r\n     *      <Value Values=\"0.5;1\"/>\r\n     *      <Value Values=\"0.1;0.2\"/>\r\n     *  </Scale>\r\n     * @param node\r\n     */\r\n    private initializeScale(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            if (next.nodeName === ParticleStyle.NodeValue) {\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUES)) {\r\n                    this._scaleValues.push(\r\n                        ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUES)),\r\n                    );\r\n                }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Rotations of object in degrees.\r\n     * Example:\r\n     *  <Rotation>\r\n     *      <Value Value=\"0.1\"/>\r\n     *      <Value Value=\"3\"/>\r\n     *  </Rotation>\r\n     * @param node\r\n     */\r\n    private initializeRotation(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            if (next.nodeName === ParticleStyle.NodeValue) {\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n                    this._rotationValues.push(\r\n                        ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)),\r\n                    );\r\n                }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Example:\r\n     *  <Alpha>\r\n     *      <Value Value=\"0.8\"/>\r\n     *      <Value Value=\"1\"/>\r\n     *  </Alpha>\r\n     * @param node The Alpha node\r\n     */\r\n    private initializeAlpha(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            if (next.nodeName === ParticleStyle.NodeValue) {\r\n                if (next.hasAttribute(ParticleStyleAttributes.ATTR_VALUE)) {\r\n                    this._alphaValues.push(\r\n                        ArrayUtils.numberArray(next.getAttribute(ParticleStyleAttributes.ATTR_VALUE)),\r\n                    );\r\n                }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n}\r\n\r\nconst ParticleStyleAttributes = {\r\n    ATTR_COUNT: \"Count\",\r\n    ATTR_TIME: \"Time\",\r\n    ATTR_MIN: \"Min\",\r\n    ATTR_MAX: \"Max\",\r\n    ATTR_FROM_FRAME: \"FromFrame\",\r\n    ATTR_IMAGES: \"Images\",\r\n    ATTR_TYPE: \"Type\",\r\n    ATTR_X: \"X\",\r\n    ATTR_Y: \"Y\",\r\n    ATTR_INNER_X: \"InnerX\",\r\n    ATTR_INNER_Y: \"InnerY\",\r\n    ATTR_RADIUS: \"Radius\",\r\n    ATTR_MIN_RADIUS: \"MinRadius\",\r\n    ATTR_RADIUS_B: \"RadiusB\",\r\n    ATTR_MIN_RADIUS_B: \"MinRadiusB\",\r\n    ATTR_INNER_RADIUS: \"InnerRadius\",\r\n    ATTR_MIN_INNER_RADIUS: \"MinInnerRadius\",\r\n    ATTR_INNER_RADIUS_B: \"InnerRadiusB\",\r\n    ATTR_MIN_INNER_RADIUS_B: \"MinInnerRadiusB\",\r\n    ATTR_ANGLE: \"Angle\",\r\n    ATTR_START_ANGLE: \"StartAngle\",\r\n    ATTR_RANDOM_X: \"RandomX\",\r\n    ATTR_RANDOM_Y: \"RandomY\",\r\n    ATTR_WIDTH: \"Width\",\r\n    ATTR_HEIGHT: \"Height\",\r\n    ATTR_INNER_WIDTH: \"InnerWidth\",\r\n    ATTR_INNER_HEIGHT: \"InnerHeight\",\r\n    ATTR_VALUES: \"Values\",\r\n    ATTR_VALUE: \"Value\",\r\n    ATTR_RANDOM_START_FRAME: \"RandomStartFrame\",\r\n    ATTR_SUB_PARTICLE_STYLE: \"SubParticleStyle\",\r\n\r\n    // FOUNTAIN\r\n    ATTR_START_X: \"StartX\",\r\n    ATTR_START_Y: \"StartY\",\r\n    ATTR_INTERVAL_X: \"IntervalX\",\r\n    ATTR_INTERVAL_Y: \"IntervalY\",\r\n    ATTR_BEZIER_Y: \"BezierY\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ParticleStyle.ts\n **/","import { Logger } from \"neo-common\";\r\n\r\n/**\r\n * Definitions for payline for all kind of reels.\r\n * @class PaylinesDefinitions\r\n */\r\nexport class PaylinesDefinitions {\r\n    private static _paylineGroupsDefinitions: Object = {};\r\n\r\n    /**\r\n     * Initialize payline definiftion specific for game.\r\n     * @method initializePaylineDefinitions\r\n     * @param paylineGroupId string\r\n     * @return void\r\n     */\r\n    static initializePaylineDefinitions(paylineGroupId: string) {\r\n        var definition: Object = {};\r\n\r\n        switch (paylineGroupId) {\r\n            case \"3x3_5\":\r\n                definition[1] = [1, 1, 1];\r\n                definition[2] = [0, 0, 0];\r\n                definition[3] = [2, 2, 2];\r\n                definition[4] = [0, 1, 2];\r\n                definition[5] = [2, 1, 0];\r\n                break;\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n                }\r\n                return;\r\n        }\r\n\r\n        this._paylineGroupsDefinitions[paylineGroupId] = definition;\r\n    }\r\n\r\n    /**\r\n     * Get payline by id and group id.\r\n     * @method getPaylineDefinitionsById\r\n     * @param paylineId string\r\n     * @param paylineGroupId string\r\n     * @return void\r\n     */\r\n    static getPaylineDefinitionsById(paylineId: number, paylineGroupId: string): Array<number> {\r\n        if (this._paylineGroupsDefinitions != null) {\r\n            if (this._paylineGroupsDefinitions[paylineGroupId] != null) {\r\n                if (this._paylineGroupsDefinitions[paylineGroupId][paylineId] != null) {\r\n                    return this._paylineGroupsDefinitions[paylineGroupId][paylineId];\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no paylineId: \" + paylineId + \" in \" + paylineGroupId);\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no definition for \" + paylineGroupId);\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no paylines definitions\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    private static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"PaylineDefinitions\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesDefinitions.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Attributes } from \"../Utils/Attributes\";\r\nimport { GeneralConfigurationAttributes } from \"../Components/Configuration\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\n\r\n/**\r\n * The symbol element is used for hold symbol special cases and handle symbol behaviour on screen.\r\n * @class Symbol\r\n * @extends SwitchElement\r\n */\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Symbol extends SwitchElement {\r\n    // base symbol cases\r\n    static CaseRotation: string = \"ROTATION\";\r\n    static CaseBlur: string = \"BLUR\";\r\n    static CaseTease: string = \"TEASE\";\r\n    static CaseEmpty: string = \"EMPTY\";\r\n    static CaseNormal: string = \"NORMAL\";\r\n    static CaseIdle: string = \"IDLE\";\r\n    static CaseNowin: string = \"NOWIN\";\r\n    static CaseWin: string = \"WIN\";\r\n    static CaseHighWin: string = \"HIGH_WIN\";\r\n    static CaseCycle: string = \"CYCLE\";\r\n    static CaseCyclePause: string = \"CYCLE_PAUSE\";\r\n    static CaseCollecting: string = \"COLLECTING\";\r\n    static CaseLanding: string = \"LANDING\";\r\n\r\n    //offsets for symbol which has bigger dimension than standard symbols\r\n    offsetX: number;\r\n    offsetY: number;\r\n\r\n    zIndex: number = 0;\r\n    type: string;\r\n    hasWinFrame: boolean;\r\n\r\n    usedInPool: boolean;\r\n    id: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        //default values\r\n        this.offsetX = 0;\r\n        this.offsetY = 0;\r\n\r\n        this.center = true;\r\n\r\n        this.usedInPool = false;\r\n        this.id = -1;\r\n\r\n        this.hasWinFrame = true;\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        this.offsetX = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_X, this.offsetX);\r\n        this.offsetY = Attributes.assignFloatAttribute(node, SymbolAttributes.OFFSET_Y, this.offsetY);\r\n\r\n        if (node.hasAttribute(SymbolAttributes.OFFSET)) {\r\n            this.offsetX = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\r\n            this.offsetY = parseFloat(node.getAttribute(SymbolAttributes.OFFSET));\r\n        }\r\n\r\n        this.zIndex = Attributes.assignFloatAttribute(node, SymbolAttributes.Z_INDEX, this.zIndex);\r\n        this.type = Attributes.assignStringAttribute(node, SymbolAttributes.TYPE, this.type);\r\n\r\n        this.hasWinFrame = Attributes.assignBooleanAttribute(node, \"HasWinFrame\", this.hasWinFrame);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from configuration and set up supported properties.\r\n     * @method configurate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    configurate(node: Element): void {\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH)) {\r\n            this.symbolWidth = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT)) {\r\n            this.symbolHeight = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT));\r\n        }\r\n    }\r\n\r\n    goToCase(s: string, emitEvent: boolean = false): void {\r\n        if (this.case == \"IMPACT\" && s == Symbol.CaseNormal && GameManager.gameResponse.totalWin == 0) {\r\n            return;\r\n        }\r\n\r\n        super.goToCase(s, emitEvent);\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return Symbol\r\n     */\r\n    clone(): Symbol {\r\n        let element: Symbol = new Symbol();\r\n\r\n        element.elements = this.elements.clone();\r\n        element.addChild(element.elements);\r\n\r\n        element.style = this.style;\r\n        element.offsetX = this.offsetX;\r\n        element.offsetY = this.offsetY;\r\n        element.symbolWidth = this.symbolWidth;\r\n        element.symbolHeight = this.symbolHeight;\r\n        element.visible = this.visible;\r\n        element.case = this.case;\r\n        element.style = this.style;\r\n        element.zIndex = this.zIndex;\r\n        element.type = this.type;\r\n        element.hasWinFrame = this.hasWinFrame;\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const SymbolAttributes = {\r\n    DEBUG: \"Debug\",\r\n    /**\r\n     *\r\n     */\r\n    OFFSET_X: \"OffsetX\",\r\n    /**\r\n     * OffsetY is difference between heigth of this symbol and standard symbol height divided by two.\r\n     * @property OffsetX\r\n     * @default 0\r\n     */\r\n    OFFSET_Y: \"OffsetY\",\r\n    /**\r\n     * Use offset property when offseX and offsetY is the same number.\r\n     * @property Offset\r\n     * @default 0\r\n     */\r\n    OFFSET: \"Offset\",\r\n    /**\r\n     * Z-index of symbol on screen\r\n     * @property Zindex\r\n     * @default 0\r\n     */\r\n    Z_INDEX: \"Zindex\",\r\n    /**\r\n     * Type of symbol. E.g.: wild\r\n     */\r\n    TYPE: \"Type\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbol.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { TimelineStyle } from \"../Styles/TimelineStyle\";\r\nimport { ImageTextCounterElement } from \"../Texts/ImageTextCounterElement\";\r\nimport { ContainerElement } from \"./ContainerElement\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { SoundManager } from \"../../Managers/SoundManager\";\r\nimport { PlayList } from \"../../Sounds/PlayList\";\r\nimport { SongAttributes } from \"../../Sounds/Song\";\r\nimport { Tweens } from \"../../Effects/Tweens\";\r\n\r\n/**\r\n * TimelineElement is element which can create animation flow from object and setting up these elemenets based on frames.\r\n * TimelineElement need TimelineStyle as definition of animation.\r\n * Example:\r\n *   <TimelineElement Class=\"TimelineElement\" Style=\"TimelineStyle\" Loop=\"true\" />\r\n *\r\n * @class TimelineElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class TimelineElement extends BaseElement {\r\n    static AnimationComplete: string = \"animationComplete\";\r\n\r\n    private _style: TimelineStyle;\r\n    private _elements: ContainerElement;\r\n    private _timer: FrameTimerEventEmitter;\r\n    private _framesArray: Array<number>;\r\n    private _frameCounter: number;\r\n    private _loop: boolean;\r\n    private _winValue: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._frameCounter = 0;\r\n        this._loop = false;\r\n\r\n        this._timer = CreateFrameTimer(\"TimelineElement\");\r\n        this._timer.on(FrameTimerEvents.Complete, this.animate.bind(this));\r\n    }\r\n\r\n    public get currentKeyframe(): number {\r\n        return this._frameCounter;\r\n    }\r\n\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this._timer.stop();\r\n\r\n        if (this._elements.childs != null) {\r\n            for (var key in this._elements.childs) {\r\n                if (this._elements.childs.hasOwnProperty(key)) {\r\n                    if (this._elements.childs[key] instanceof PIXI.DisplayObject) {\r\n                        this._elements.childs[key].destroy(options);\r\n                    }\r\n                    this._elements.childs[key] = null;\r\n                }\r\n            }\r\n\r\n            this._elements.childs = null;\r\n        }\r\n    }\r\n\r\n    public get hasElements(): boolean {\r\n        return this._elements != null && this._elements.childs != null;\r\n    }\r\n\r\n    public getChildElementByName(name: string): Object {\r\n        if (this.hasElements) {\r\n            return this._elements.childs[name];\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    public createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(TimelineElementAttributes.LOOP)) {\r\n            this._loop = StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.LOOP));\r\n        }\r\n\r\n        if (node.hasAttribute(TimelineElementAttributes.STYLE)) {\r\n            this._style = <TimelineStyle>StyleManager.Styles[node.getAttribute(TimelineElementAttributes.STYLE)];\r\n            if (this._style != null) {\r\n                // get all elements and add them to this display list\r\n                if (this._style.container != null) {\r\n                    if (\r\n                        node.hasAttribute(TimelineElementAttributes.CLONE) &&\r\n                        StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.CLONE))\r\n                    ) {\r\n                        this._elements = this._style.container.clone();\r\n                    } else {\r\n                        this._elements = this._style.container;\r\n                    }\r\n                    this.addChild(this._elements);\r\n\r\n                    if (this._style.frames != null) {\r\n                        this._framesArray = [];\r\n\r\n                        for (let key in this._style.frames) {\r\n                            this._framesArray.push(parseInt(key));\r\n                        }\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING no timeline\");\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no children\");\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(TimelineElementAttributes.STYLE));\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @param node\r\n     */\r\n    public updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(TimelineElementAttributes.TINT)) {\r\n            if (this._elements != null && this._elements.children != null && this._elements.children.length > 0) {\r\n                for (let i: number = 0; i < this._elements.children.length; i++) {\r\n                    let child: any = this._elements.children[i];\r\n                    if (child instanceof PIXI.DisplayObject) {\r\n                        if (child.children != null && child.children.length > 0) {\r\n                            for (let j: number = 0; j < child.children.length; j++) {\r\n                                let childOfChild: any = child.children[j];\r\n                                if (\r\n                                    childOfChild instanceof PIXI.Sprite ||\r\n                                    childOfChild instanceof PIXI.extras.AnimatedSprite\r\n                                ) {\r\n                                    if (node.getAttribute(TimelineElementAttributes.TINT) === \"0\") {\r\n                                        childOfChild.tint = 0xffffff;\r\n                                    } else {\r\n                                        childOfChild.tint = parseInt(\r\n                                            node.getAttribute(TimelineElementAttributes.TINT),\r\n                                            16,\r\n                                        );\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(TimelineElementAttributes.PLAY) &&\r\n            StringUtils.parseBoolean(node.getAttribute(TimelineElementAttributes.PLAY))\r\n        ) {\r\n            if (this._framesArray != null) {\r\n                this.startAnimate();\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING can't play because movieClip is null\");\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"GoToOutro\") && StringUtils.parseBoolean(node.getAttribute(\"GoToOutro\"))) {\r\n            this.goToOutro();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Start playing animation.\r\n     * @method play\r\n     * @param winValue number - optional\r\n     * @return void\r\n     */\r\n    play(winValue?: number): void {\r\n        if (winValue != null) {\r\n            this._winValue = winValue;\r\n        }\r\n\r\n        if (this._framesArray != null) {\r\n            this.startAnimate();\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    stop(): void {\r\n        if (this._elements.childs != null) {\r\n            for (let key in this._elements.childs) {\r\n                if (this._elements.childs.hasOwnProperty(key)) {\r\n                    Tweens.removeTweens(this._elements.childs[key], \"all\");\r\n                    this._elements.childs[key].visible = false;\r\n                    if (this._elements.childs[key] instanceof ImageTextCounterElement) {\r\n                        this._elements.childs[key].stop();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        this.stopAnimate();\r\n    }\r\n\r\n    /**\r\n     * Stop animation and go to last outro state.\r\n     * @method goToOutro\r\n     * @return void\r\n     */\r\n    goToOutro(winValue?: number): void {\r\n        if (winValue != null) {\r\n            this._winValue = winValue;\r\n        }\r\n        this._timer.stop();\r\n        if (this._style != null && this._style.outro != null) {\r\n            let node: Element = this._style.outro;\r\n            if (node != null) {\r\n                let next: Element = node.firstElementChild;\r\n                if (next != null) {\r\n                    while (next != null) {\r\n                        let element: any = this._elements.childs[next.nodeName];\r\n                        if (element != null) {\r\n                            // send new node to element and set / change new attributes\r\n                            element.updateByNode(next);\r\n                            if (element instanceof ImageTextCounterElement) {\r\n                                if (this._winValue != null) {\r\n                                    element.start(0, this._winValue, 0);\r\n                                } else {\r\n                                    if (next.tagName == \"WinEmit\") {\r\n                                        // element.setBitmapText(this._winValue);\r\n                                    }\r\n\r\n                                    element.force();\r\n                                }\r\n                            }\r\n                        }\r\n                        next = next.nextElementSibling;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (this._style != null && this._style.outroSounds != null) {\r\n                let node2: Element = this._style.outroSounds;\r\n                if (node2 != null) {\r\n                    let next: Element = node2.firstElementChild;\r\n                    if (next != null) {\r\n                        while (next != null) {\r\n                            if (next.hasAttribute(SongAttributes.SONG)) {\r\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\r\n                                        PlayList.play(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.play(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\r\n                                        PlayList.loop(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                                if (next.hasAttribute(SongAttributes.STOP)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\r\n                                        PlayList.stop(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                            }\r\n                            next = next.nextElementSibling;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Start animate on timeline.\r\n     * @method startAnimate\r\n     * @return void\r\n     */\r\n    private startAnimate(): void {\r\n        this._timer.stop();\r\n        this._frameCounter = 0;\r\n\r\n        if (this.children != null) {\r\n            if (this._framesArray[0] === 0) {\r\n                this.animate();\r\n            } else {\r\n                this._timer.start(this._framesArray[0]);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Reset timeline and start animation again.\r\n     * @method reset\r\n     * @return void\r\n     */\r\n    private reset(): void {\r\n        this.startAnimate();\r\n    }\r\n\r\n    /**\r\n     * Stop timeline.\r\n     * @method stopAnimate\r\n     * @return void\r\n     */\r\n    private stopAnimate(): void {\r\n        this._timer.stop();\r\n    }\r\n\r\n    /**\r\n     * Animate change elements when reach new frame.\r\n     * @method animate\r\n     * @return void\r\n     */\r\n    private animate(): void {\r\n        if (this._framesArray != null) {\r\n            if (this._framesArray[this._frameCounter] != null) {\r\n                this.goToFrame(this._framesArray[this._frameCounter]);\r\n            } else {\r\n                this._timer.stop();\r\n                if (this._loop) {\r\n                    this.reset();\r\n                }\r\n            }\r\n        }\r\n        this._frameCounter++;\r\n\r\n        if (this._framesArray[this._frameCounter] != null) {\r\n            this._timer.stop();\r\n            this._timer.start(this._framesArray[this._frameCounter] - this._framesArray[this._frameCounter - 1]);\r\n        } else {\r\n            this.emit(TimelineElement.AnimationComplete);\r\n            this._timer.stop();\r\n            if (this._loop) {\r\n                this.reset();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Go to frame get xml node from frames and set up children to state defined in frames xml node.\r\n     * @method goToFrame\r\n     * @param frame number\r\n     * @return void\r\n     */\r\n    private goToFrame(frame: number) {\r\n        if (this._style != null && this._style.frames != null) {\r\n            let node: Element = this._style.frames[frame.toString()];\r\n\r\n            if (node.hasAttribute(\"Emit\")) {\r\n                this.emit(node.getAttribute(\"Emit\"));\r\n            }\r\n\r\n            if (node != null && node.childElementCount > 0) {\r\n                let next: Element = node.firstElementChild;\r\n                if (next != null) {\r\n                    while (next != null) {\r\n                        let element: any = this._elements.childs[next.nodeName];\r\n                        if (element != null) {\r\n                            // send new node to element and set / change new attributes\r\n                            element.updateByNode(next);\r\n                            if (element instanceof ImageTextCounterElement && this._winValue != null) {\r\n                                if (element.visible) {\r\n                                    if (next.tagName == \"WinEmit\") {\r\n                                        element.setBitmapText(this._winValue);\r\n                                    }\r\n                                    element.start(0, this._winValue);\r\n                                    this._winValue = null;\r\n                                } else {\r\n                                    element.setBitmapText(this._winValue);\r\n                                }\r\n                            }\r\n                        }\r\n                        next = next.nextElementSibling;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (this._style != null && this._style.framesSounds != null) {\r\n                let node2: Element = this._style.framesSounds[frame.toString()];\r\n                if (node2 != null) {\r\n                    let next: Element = node2.firstElementChild;\r\n                    if (next != null) {\r\n                        while (next != null) {\r\n                            if (next.hasAttribute(SongAttributes.SONG)) {\r\n                                if (next.hasAttribute(SongAttributes.PLAY)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\r\n                                        PlayList.play(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.play(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                                if (next.hasAttribute(SongAttributes.LOOP)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEIN)) {\r\n                                        PlayList.loop(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEIN)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.loop(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                                if (next.hasAttribute(SongAttributes.STOP)) {\r\n                                    if (next.hasAttribute(SongAttributes.FADEOUT)) {\r\n                                        PlayList.stop(\r\n                                            next.getAttribute(SongAttributes.SONG),\r\n                                            parseInt(next.getAttribute(SongAttributes.FADEOUT)),\r\n                                        );\r\n                                    } else {\r\n                                        PlayList.stop(next.getAttribute(SongAttributes.SONG));\r\n                                    }\r\n                                }\r\n                            }\r\n                            next = next.nextElementSibling;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this._timer.stop();\r\n        super.destroy(options);\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return TimelineElement\r\n     */\r\n    clone(): TimelineElement {\r\n        let element: TimelineElement = new TimelineElement();\r\n\r\n        element._elements = this._elements.clone();\r\n        element.addChild(element._elements);\r\n        element._style = this._style;\r\n        element._framesArray = this._framesArray;\r\n        element._loop = this._loop;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const TimelineElementAttributes = {\r\n    CLONE: \"Clone\",\r\n    DEBUG: \"Debug\",\r\n    EMIT: \"Emit\",\r\n    /*\r\n     * Indicates whenever this element should loop when it reaches the end of its timeline.\r\n     * @property Loop\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    LOOP: \"Loop\",\r\n    /*\r\n     * Start playing animation.\r\n     * @property Play\r\n     * @type boolean\r\n     */\r\n    PLAY: \"Play\",\r\n    /*\r\n     * Playlist id for machine.\r\n     * @property Sounds\r\n     * @type string\r\n     * @default null\r\n     */\r\n    SOUNDS: \"Sounds\",\r\n    /*\r\n     * Style holds elements as ContainerElement and also holds frames as xml nodes.\r\n     * Style for TimelineElement has to be instance of TimelineStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    /*\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/TimelineElement.ts\n **/","import { engineComponent, NumberUtils, StringUtils } from \"neo-common\";\r\nimport { ImageTextElement } from \"./ImageTextElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ITweenable, Tweens } from \"../../Effects/Tweens\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { ImageElementAttributes } from \"../Graphics/ImageElement\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ImageTextCounterElement extends ImageTextElement {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    static Round: boolean = false;\r\n\r\n    protected from: number;\r\n\r\n    protected to: number;\r\n\r\n    protected duration: number;\r\n\r\n    protected round: boolean;\r\n\r\n    protected currentValue: number;\r\n\r\n    protected finalValue: number;\r\n\r\n    protected appendText: string;\r\n\r\n    protected prependText: string;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.from = 0;\r\n        this.to = 0;\r\n        this.duration = 0;\r\n        this.round = false;\r\n        this.currentValue = 0;\r\n        this.finalValue = 0;\r\n        this.appendText = \"\";\r\n        this.prependText = \"\";\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE, UPDATE\r\n    //******************************************************************************************************************\r\n\r\n    public updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.FROM)) {\r\n            this.from = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.FROM));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.TO)) {\r\n            this.to = parseFloat(node.getAttribute(ImageTextCounterElementAttributes.TO));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.DURATION)) {\r\n            this.duration = parseInt(node.getAttribute(ImageTextCounterElementAttributes.DURATION));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ROUND)) {\r\n            this.round = StringUtils.parseBoolean(node.getAttribute(ImageTextCounterElementAttributes.ROUND));\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.APPEND_TEXT)) {\r\n            this.appendText = node.getAttribute(ImageTextCounterElementAttributes.APPEND_TEXT);\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.PREPEND_TEXT)) {\r\n            this.prependText = node.getAttribute(ImageTextCounterElementAttributes.PREPEND_TEXT);\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextCounterElementAttributes.ACTION)) {\r\n            switch (node.getAttribute(ImageTextCounterElementAttributes.ACTION)) {\r\n                case ImageTextCounterElementAttributes.ACTION_VALUE.START:\r\n                    this.start(this.from, this.to, this.duration);\r\n                    break;\r\n                case ImageTextCounterElementAttributes.ACTION_VALUE.STOP:\r\n                    this.stop();\r\n                    break;\r\n                case ImageTextCounterElementAttributes.ACTION_VALUE.FORCE:\r\n                    this.force();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    public setBitmapText(value: number): void {\r\n        this.finalValue = value;\r\n        this.bitmapText.text = \"\";\r\n        this.bitmapText.text =\r\n            this.prependText +\r\n            NumberUtils.valueToNumber(\r\n                value,\r\n                this.round || ImageTextCounterElement.Round ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\r\n            ) +\r\n            this.appendText;\r\n\r\n        this.realign();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  START\r\n    //******************************************************************************************************************\r\n\r\n    public start(from: number, to: number, duration?: number, delay?: number): void {\r\n        const d = duration != null ? duration : this.duration;\r\n        const del = delay != null ? delay : 0;\r\n\r\n        if (d <= 0 || from === to) {\r\n            this.currentValue = to;\r\n            this.finalValue = to;\r\n\r\n            this.onCountTo();\r\n        } else {\r\n            this.currentValue = from;\r\n            this.finalValue = from;\r\n\r\n            this.onCountTo();\r\n\r\n            this.finalValue = to;\r\n\r\n            Tweens.customTween(this, {\r\n                tween: \"currentValue\",\r\n                tweenValues: [this.currentValue, this.finalValue],\r\n                tweenDuration: [d],\r\n                tweenDelay: [del],\r\n                callbackType: \"onUpdate\",\r\n                callbackFunction: this.onCountTo,\r\n                callbackScope: this,\r\n            });\r\n        }\r\n    }\r\n\r\n    protected onCountTo(): void {\r\n        if (this.currentValue === this.finalValue) {\r\n            Tweens.removeTweens(this, \"currentValue\");\r\n        }\r\n\r\n        this.bitmapText.text =\r\n            this.prependText +\r\n            NumberUtils.valueToNumber(\r\n                this.currentValue,\r\n                this.round || ImageTextCounterElement.Round ? 0 : AppContext.gameConfiguration.ShowDecimalPlaces,\r\n            ) +\r\n            this.appendText;\r\n\r\n        this.realign();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  STOP\r\n    //******************************************************************************************************************\r\n\r\n    public stop(): void {\r\n        Tweens.removeTweens(this, \"currentValue\");\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  FORCE\r\n    //******************************************************************************************************************\r\n\r\n    public force(): void {\r\n        this.currentValue = this.finalValue;\r\n\r\n        this.onCountTo();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CLONE\r\n    //******************************************************************************************************************\r\n\r\n    public clone(): ImageTextCounterElement {\r\n        let element: ImageTextCounterElement = new ImageTextCounterElement();\r\n        element.visible = this.visible;\r\n        element.alpha = this.alpha;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n\r\n        element.appendText = this.appendText;\r\n        element.prependText = this.prependText;\r\n\r\n        element.font = this.font;\r\n        element.text = this.text;\r\n        element.textAlign = this.textAlign;\r\n        element.textBaseline = this.textBaseline;\r\n\r\n        element.from = this.from;\r\n        element.to = this.to;\r\n        element.duration = this.duration;\r\n        element.round = this.round;\r\n\r\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n        element.addChild(element.bitmapText);\r\n\r\n        element.realign();\r\n        element.markAsCloned();\r\n\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const ImageTextCounterElementAttributes = {\r\n    /**\r\n     * Round will show numbers without decimal places.\r\n     * @property Round\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    ROUND: \"Round\",\r\n    /**\r\n     * Duration in frames. This property sets how long will counter run in frames.\r\n     * @property Duration\r\n     * @type number\r\n     * @default 0\r\n     */\r\n    DURATION: \"Duration\",\r\n    FROM: \"From\",\r\n    TO: \"To\",\r\n    ACTION: \"Action\",\r\n    ACTION_VALUE: {\r\n        START: \"Start\",\r\n        STOP: \"Stop\",\r\n        FORCE: \"Force\",\r\n    },\r\n    APPEND_TEXT: \"Append\",\r\n    PREPEND_TEXT: \"Prepend\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextCounterElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { BaseElement } from \"../Graphics/BaseElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ImageTextElement extends BaseElement {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    public textAlign: string;\r\n\r\n    public textBaseline: string;\r\n\r\n    public text: string;\r\n\r\n    public font: string;\r\n\r\n    public bitmapText: PIXI.extras.BitmapText;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.textAlign = ImageTextElementAttributes.TEXT_ALIGN_VALUE.LEFT;\r\n        this.textBaseline = ImageTextElementAttributes.TEXT_BASELINE_VALUE.TOP;\r\n        this.text = \"\";\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE, UPDATE\r\n    //******************************************************************************************************************\r\n\r\n    public createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        if (this.bitmapText == null) {\r\n            if (node.hasAttribute(ImageTextElementAttributes.FONT)) {\r\n                if (node.hasAttribute(ImageTextElementAttributes.TEXT)) {\r\n                    this.text = node.getAttribute(ImageTextElementAttributes.TEXT);\r\n                }\r\n\r\n                this.font = node.getAttribute(ImageTextElementAttributes.FONT);\r\n\r\n                this.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n\r\n                this.addChild(this.bitmapText);\r\n            }\r\n        }\r\n    }\r\n\r\n    public updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_ALIGN)) {\r\n            this.textAlign = node.getAttribute(ImageTextElementAttributes.TEXT_ALIGN);\r\n\r\n            this.realign();\r\n        }\r\n\r\n        if (node.hasAttribute(ImageTextElementAttributes.TEXT_BASELINE)) {\r\n            this.textBaseline = node.getAttribute(ImageTextElementAttributes.TEXT_BASELINE);\r\n\r\n            this.realign();\r\n        }\r\n\r\n        if (node.hasAttribute(\"Tint\")) {\r\n            this.bitmapText.tint = parseInt(node.getAttribute(\"Tint\"), 16);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  REALIGN\r\n    //******************************************************************************************************************\r\n\r\n    public realign(): void {\r\n        switch (this.textAlign) {\r\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.RIGHT:\r\n                this.bitmapText.position.x = -this.bitmapText.width;\r\n                break;\r\n            case ImageTextElementAttributes.TEXT_ALIGN_VALUE.CENTER:\r\n                this.bitmapText.position.x = -this.bitmapText.width * 0.5;\r\n                break;\r\n            default:\r\n                this.bitmapText.position.x = 0;\r\n                break;\r\n        }\r\n\r\n        switch (this.textBaseline) {\r\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.BOTTOM:\r\n                this.bitmapText.position.y = -this.bitmapText.height;\r\n                break;\r\n            case ImageTextElementAttributes.TEXT_BASELINE_VALUE.MIDDLE:\r\n                this.bitmapText.position.y = -this.bitmapText.height * 0.5;\r\n                break;\r\n            default:\r\n                this.bitmapText.position.y = 0;\r\n                break;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CLONE\r\n    //******************************************************************************************************************\r\n\r\n    public clone(): ImageTextElement {\r\n        let element: ImageTextElement = new ImageTextElement();\r\n        element.visible = this.visible;\r\n        element.alpha = this.alpha;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n\r\n        element.font = this.font;\r\n        element.text = this.text;\r\n        element.textAlign = this.textAlign;\r\n        element.textBaseline = this.textBaseline;\r\n\r\n        element.bitmapText = new PIXI.extras.BitmapText(this.text, { font: this.font });\r\n        element.addChild(element.bitmapText);\r\n\r\n        element.realign();\r\n        element.markAsCloned();\r\n\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const ImageTextElementAttributes = {\r\n    /**\r\n     * The text to display.\r\n     * @property Text\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TEXT: \"Text\",\r\n    /**\r\n     * Bitmap font for text.\r\n     * @property Font\r\n     * @type string\r\n     * @default null\r\n     */\r\n    FONT: \"Font\",\r\n    /**\r\n     * The horizontal text alignment. Any of \"left\", \"right\", and \"center\".\r\n     * For detailed information view the whatwg spec. Default is \"left\".\r\n     * @property TextAlign\r\n     * @type string\r\n     * @default left\r\n     */\r\n    TEXT_ALIGN: \"TextAlign\",\r\n    TEXT_ALIGN_VALUE: {\r\n        LEFT: \"left\",\r\n        CENTER: \"center\",\r\n        RIGHT: \"right\",\r\n    },\r\n    /**\r\n     * The vertical alignment point on the text. Any of \"top\", \"middle\" or \"bottom\". Default is \"top\".\r\n     * @property TextBaseline\r\n     * @type string\r\n     * @default top\r\n     */\r\n    TEXT_BASELINE: \"TextBaseline\",\r\n    TEXT_BASELINE_VALUE: {\r\n        TOP: \"top\",\r\n        MIDDLE: \"middle\",\r\n        BOTTOM: \"bottom\",\r\n    },\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Texts/ImageTextElement.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\n\r\n@engineComponent(ComponentTypes.Song)\r\nexport class Song {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    public id: string;\r\n\r\n    protected sound: PIXI.sound.Sound;\r\n\r\n    protected alias: string;\r\n\r\n    protected instance: PIXI.sound.IMediaInstance;\r\n\r\n    protected group: string;\r\n\r\n    protected volume: number;\r\n\r\n    protected pan: number;\r\n\r\n    protected fade: number;\r\n\r\n    protected fadeStartTime: number;\r\n\r\n    protected fadeEndTime: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE\r\n    //******************************************************************************************************************\r\n\r\n    public create(node: Element): void {\r\n        this.id = node.nodeName;\r\n        this.alias = node.hasAttribute(SongAttributes.ALIAS) ? node.getAttribute(SongAttributes.ALIAS) : null;\r\n        this.instance = null;\r\n        this.group = node.hasAttribute(SongAttributes.GROUP) ? node.getAttribute(SongAttributes.GROUP) : null;\r\n        this.volume = node.hasAttribute(SongAttributes.VOLUME)\r\n            ? parseFloat(node.getAttribute(SongAttributes.VOLUME))\r\n            : 1;\r\n        this.pan = node.hasAttribute(SongAttributes.PAN) ? parseFloat(node.getAttribute(SongAttributes.PAN)) : 0;\r\n        this.fade = 0;\r\n        this.fadeStartTime = 0;\r\n        this.fadeEndTime = 0;\r\n\r\n        if (node.hasAttribute(SongAttributes.SONG)) {\r\n            if (PIXI.sound.exists(node.getAttribute(SongAttributes.SONG))) {\r\n                this.sound = PIXI.sound.find(node.getAttribute(SongAttributes.SONG));\r\n            } else {\r\n                this.sound = null;\r\n\r\n                if (DEBUG) {\r\n                    this.log(`ERROR no sound with id: ${node.getAttribute(\"Song\")}`);\r\n                }\r\n            }\r\n        } else {\r\n            this.sound = null;\r\n\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no attribute: Song\");\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PLAY\r\n    //******************************************************************************************************************\r\n\r\n    public play(loop: boolean, fadeIn: number, reset: boolean): void {\r\n        if (this.group === \"BackgroundMusic\" && !AppContext.current.isBackgroundMusicEnabled) {\r\n            return;\r\n        }\r\n\r\n        if (this.sound !== null && (reset || this.instance === null)) {\r\n            this.sound.filters = this.pan === 0 ? null : [new PIXI.sound.filters.StereoFilter(this.pan)];\r\n\r\n            if (fadeIn > 0) {\r\n                this.fade = 1;\r\n                this.fadeStartTime = new Date().getTime();\r\n                this.fadeEndTime = this.fadeStartTime + fadeIn * 16.7;\r\n            } else {\r\n                this.fade = 0;\r\n                this.fadeStartTime = 0;\r\n                this.fadeEndTime = 0;\r\n            }\r\n\r\n            this.playInstance(loop);\r\n        }\r\n    }\r\n\r\n    protected playInstance(loop: boolean = true): void {\r\n        this.stopInstance();\r\n\r\n        let volume = this.volume;\r\n\r\n        if (this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame) {\r\n            volume = 0;\r\n        } else if (this.fade > 0) {\r\n            volume = this.getFadeInVolume();\r\n        } else if (this.fade < 0) {\r\n            volume = this.getFadeOutVolume();\r\n        }\r\n\r\n        this.instance = <any>(\r\n            this.sound.play(this.alias !== null ? { sprite: this.alias, volume: volume } : { volume: volume })\r\n        );\r\n        this.instance.on(\"end\", loop ? this.playInstance : this.stopInstance, this);\r\n\r\n        if (this.fade !== 0) {\r\n            this.instance.on(\"progress\", this.fade === 1 ? this.onFadeIn : this.onFadeOut, this);\r\n        }\r\n    }\r\n\r\n    protected onFadeIn(): void {\r\n        const volume = this.getFadeInVolume();\r\n\r\n        try {\r\n            this.instance.volume =\r\n                this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame ? 0 : volume;\r\n        } catch (e) {}\r\n\r\n        if (volume === this.volume) {\r\n            this.instance.off(\"progress\", this.onFadeIn, this);\r\n        }\r\n    }\r\n\r\n    protected getFadeInVolume(): number {\r\n        const duration = this.fadeEndTime - this.fadeStartTime;\r\n        const progress = new Date().getTime() - this.fadeStartTime;\r\n\r\n        return this.volume * Math.min(progress / duration, 1);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  STOP\r\n    //******************************************************************************************************************\r\n\r\n    public stop(fadeOut: number): void {\r\n        if (this.instance != null) {\r\n            if (fadeOut > 0) {\r\n                this.fade = -1;\r\n                this.fadeStartTime = new Date().getTime();\r\n                this.fadeEndTime = this.fadeStartTime + fadeOut * 16.7;\r\n\r\n                this.instance.off(\"progress\", this.onFadeIn, this);\r\n                this.instance.on(\"progress\", this.onFadeOut, this);\r\n            } else {\r\n                this.stopInstance();\r\n            }\r\n        }\r\n    }\r\n\r\n    protected stopInstance(): void {\r\n        if (this.instance != null) {\r\n            this.instance.off(\"progress\", this.onFadeIn, this);\r\n            this.instance.off(\"progress\", this.onFadeOut, this);\r\n            this.instance.off(\"end\", this.playInstance, this);\r\n            this.instance.off(\"end\", this.stopInstance, this);\r\n            this.instance.stop();\r\n            this.instance = null;\r\n        }\r\n    }\r\n\r\n    protected onFadeOut(): void {\r\n        const volume = this.getFadeOutVolume();\r\n\r\n        try {\r\n            this.instance.volume =\r\n                this.group === \"BackgroundMusic\" && !DataManager.BackSoundsPlayingFromGame ? 0 : volume;\r\n        } catch (e) {}\r\n\r\n        if (volume === 0) {\r\n            this.stopInstance();\r\n        }\r\n    }\r\n\r\n    protected getFadeOutVolume(): number {\r\n        const duration = this.fadeEndTime - this.fadeStartTime;\r\n        const progress = new Date().getTime() - this.fadeStartTime;\r\n\r\n        return this.volume - this.volume * Math.min(progress / duration, 1);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  TOGGLE\r\n    //******************************************************************************************************************\r\n\r\n    public toggleGroup(group: string, toggle: boolean = false): void {\r\n        if (this.group === group && this.instance != null) {\r\n            try {\r\n                this.instance.volume = toggle ? this.volume : 0;\r\n            } catch (e) {}\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  LOG\r\n    //******************************************************************************************************************\r\n\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            const compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nexport const SongAttributes = {\r\n    SONG: \"Song\",\r\n    ALIAS: \"Alias\",\r\n    GROUP: \"Group\",\r\n    VOLUME: \"Volume\",\r\n    PAN: \"Pan\",\r\n    PLAY: \"Play\",\r\n    LOOP: \"Loop\",\r\n    STOP: \"Stop\",\r\n    FADEIN: \"FadeIn\",\r\n    FADEOUT: \"FadeOut\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Sounds/Song.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\r\nimport { Symbols } from \"./Symbols\";\r\nimport { Reel } from \"./Reel\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport {\r\n    Configuration,\r\n    GeneralConfigurationAttributes,\r\n    MachineConfigurationAttributes,\r\n} from \"../Components/Configuration\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { GameData } from \"../Channels/Common/Datas/GameData\";\r\nimport { DataManager } from \"../Managers/DataManager\";\r\nimport { ModuleManager } from \"../Managers/ModuleManager\";\r\nimport { ReelExtended } from \"../CustomComponents/ReelExtended\";\r\nimport { FreeRoundBonus } from \"../Channels/Common/Bonuses/FreeRoundBonus\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\n\r\ntype IReel = Communication.Game.IReel;\r\n\r\n/**\r\n * Machine handle reels and symbols for reels rotation.\r\n * Machine define behaviour for complete flow of reel rotation.\r\n * @class Machine\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Machine extends BaseElement {\r\n    // events for view when reel or machine stopped\r\n    static MachineStopped: string = \"machineStopped\";\r\n    static ReelStopped: string = \"onReelStopped\";\r\n    static StartedTeasing: string = \"startedTeasing\";\r\n    static StoppedTeasing: string = \"stoppedTeasing\";\r\n\r\n    // symbols from view\r\n    protected _symbols: Symbols;\r\n    // array of reel indexes\r\n    protected _reels: Array<ReelExtended>;\r\n    // array of stopped symbols for finish reel rotation\r\n    protected _stoppedSymbolsArray: Array<IReel>;\r\n\r\n    // count of reel\r\n    protected _reelCount: number;\r\n    // reels x positions\r\n    protected _reelX: Array<number>;\r\n    // reels y positions\r\n    protected _reelY: Array<number>;\r\n    // symbol width without offsetX\r\n    protected _symbolWidth: number;\r\n    // symbol height without offsetY\r\n    protected _symbolHeight: number;\r\n    // number of symbols which will be visible on screen during the rotation\r\n    protected _visibleSymbolCount: number;\r\n    // number of symbols under visible symbols\r\n    private _symbolTopCount: number;\r\n    // number of symbols below visible symbols\r\n    private _symbolBottomCount: number;\r\n    // min spin rotation in frames\r\n    protected _minSpinRotation: number;\r\n    // min spin rotation in frames for high wins\r\n    protected _minSpinRotationLong: number;\r\n\r\n    // delay to start rotation in frames\r\n    protected _startDelay: number;\r\n    // delay to stop rotation in frames\r\n    protected _stopDelay: number;\r\n    // configuration ID for reels\r\n    protected _reelConfiguration: string;\r\n\r\n    // timer for minimal time to stop reels\r\n    protected _stopTimer: FrameTimerEventEmitter;\r\n    // timer for defined time in configuration.json to stop reels\r\n    protected _legalStopTimer: number;\r\n\r\n    // boolean which indicates that machine can stop and rotate min defined time\r\n    protected _stoppedFromMachine: boolean;\r\n    // boolean which indicates that machine can stop and response has arrived\r\n    protected _stoppedFromServer: boolean;\r\n    // boolean which indicates that machine can stop and rotate min legal time\r\n    protected _stoppedFromLegal: boolean;\r\n\r\n    protected _startSpinTime: number;\r\n\r\n    // container as a parent for reels\r\n    protected _reelsContainer: PIXI.Container;\r\n\r\n    // helper to count stopped reels\r\n    protected _stoppedReelIndexes: number;\r\n\r\n    // information for view which reel was stopped actualy\r\n    actualReelStopped: number;\r\n\r\n    private _teasing: SwitchElement[];\r\n    protected _canTease: boolean;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        // default values\r\n        this._reels = [];\r\n        this._teasing = [];\r\n        this._stoppedSymbolsArray = [];\r\n        this._stoppedFromServer = false;\r\n        this._stoppedFromMachine = false;\r\n        this._stoppedFromLegal = false;\r\n        this._stoppedReelIndexes = 0;\r\n\r\n        this._stopTimer = CreateFrameTimer(\"Machine\");\r\n        this._stopTimer.on(FrameTimerEvents.Complete, this.spinStop.bind(this));\r\n\r\n        this.actualReelStopped = -1;\r\n\r\n        this._symbolTopCount = 1;\r\n        this._symbolBottomCount = 1;\r\n\r\n        this._reelsContainer = new PIXI.Container();\r\n        this.addChild(this._reelsContainer);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    public createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        if (this.maskSprite != null && this._reelsContainer != null) {\r\n            this._reelsContainer.addChild(this.maskSprite);\r\n            this._reelsContainer.mask = this.maskSprite;\r\n        }\r\n\r\n        if (this.maskGraphics != null && this._reelsContainer != null) {\r\n            this._reelsContainer.addChild(this.maskGraphics);\r\n            this._reelsContainer.mask = this.maskGraphics;\r\n        }\r\n\r\n        if (node.hasAttribute(MachineAttributes.CONFIGS)) {\r\n            let configs: Array<string> = node.getAttribute(MachineAttributes.CONFIGS).split(\";\");\r\n            for (let i: number = 0; i < configs.length; i++) {\r\n                let config: Element = Configuration.Configurations[configs[i]];\r\n                if (config != null) {\r\n                    this.configurate(config);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get attributes from configuration and set up supported properties.\r\n     * @method configurate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private configurate(node: Element): void {\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_COUNT)) {\r\n            this._reelCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.REEL_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_X)) {\r\n            this._reelX = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_X));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.REEL_Y)) {\r\n            this._reelY = ArrayUtils.numberArray(node.getAttribute(GeneralConfigurationAttributes.REEL_Y));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH)) {\r\n            this._symbolWidth = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT)) {\r\n            this._symbolHeight = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_HEIGHT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT)) {\r\n            this._visibleSymbolCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.VISIBLE_SYMBOL_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_TOP_COUNT)) {\r\n            this._symbolTopCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_TOP_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.SYMBOL_BOTTOM_COUNT)) {\r\n            this._symbolBottomCount = parseInt(node.getAttribute(GeneralConfigurationAttributes.SYMBOL_BOTTOM_COUNT));\r\n        }\r\n\r\n        if (node.hasAttribute(MachineConfigurationAttributes.MIN_SPIN_ROTATION)) {\r\n            this._minSpinRotation = parseInt(node.getAttribute(MachineConfigurationAttributes.MIN_SPIN_ROTATION));\r\n        } else {\r\n            this._minSpinRotation = 40;\r\n        }\r\n\r\n        if (node.hasAttribute(MachineConfigurationAttributes.MIN_SPIN_ROTATION_LONG)) {\r\n            this._minSpinRotationLong = parseInt(\r\n                node.getAttribute(MachineConfigurationAttributes.MIN_SPIN_ROTATION_LONG),\r\n            );\r\n        } else {\r\n            this._minSpinRotationLong = 100;\r\n        }\r\n\r\n        if (node.hasAttribute(MachineConfigurationAttributes.START_DELAY)) {\r\n            this._startDelay = parseInt(node.getAttribute(MachineConfigurationAttributes.START_DELAY));\r\n        } else {\r\n            this._startDelay = 3;\r\n        }\r\n\r\n        if (node.hasAttribute(MachineConfigurationAttributes.STOP_DELAY)) {\r\n            this._stopDelay = parseInt(node.getAttribute(MachineConfigurationAttributes.STOP_DELAY));\r\n        } else {\r\n            this._stopDelay = 10;\r\n        }\r\n\r\n        if (node.hasAttribute(MachineConfigurationAttributes.REEL_CONFIGURATION)) {\r\n            this._reelConfiguration = node.getAttribute(MachineConfigurationAttributes.REEL_CONFIGURATION);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Create reels based on response and xml configuration.\r\n     * @method createReels\r\n     * @param reels Array<Array<number>> from initialization and based on response\r\n     * @return void\r\n     */\r\n    private createReels(reels: Array<Array<number>>): void {\r\n        for (let i: number = 0; i < this._reelCount; i++) {\r\n            this._reels.push(new ReelExtended());\r\n        }\r\n\r\n        for (let i: number = 0; i < this._reelCount; i++) {\r\n            const reel = this._reels[i];\r\n\r\n            if (this._reelConfiguration != null) {\r\n                let configs: Array<string> = this._reelConfiguration.split(\";\");\r\n                for (let j: number = 0; j < configs.length; j++) {\r\n                    reel.configure(Configuration.Configurations[configs[j]]);\r\n                }\r\n            }\r\n            reel.visible = false;\r\n            reel.initialize(\r\n                i > 0 ? this._reels[i - 1] : null,\r\n                i < this._reelCount - 1 ? this._reels[i + 1] : null,\r\n                i,\r\n                this._symbols,\r\n                reels[i],\r\n                this._reelX[i],\r\n                this._reelY[i],\r\n                this._visibleSymbolCount,\r\n                this._symbolTopCount,\r\n                this._symbolBottomCount,\r\n                this._symbolWidth,\r\n                this._symbolHeight,\r\n                this._startDelay * i,\r\n                this._stopDelay * i,\r\n            );\r\n            reel.on(Reel.ReelStopped, this.onReelStopped.bind(this));\r\n            this._reelsContainer.addChild(reel);\r\n        }\r\n        this._reelsContainer.visible = false;\r\n    }\r\n\r\n    /**\r\n     * Initialize reference correct symbols and create reels.\r\n     * @method initialize\r\n     * @param symbols Symbols\r\n     * @param reels Array<Array<number>>\r\n     * @return void\r\n     */\r\n    public initialize(\r\n        symbols: Symbols,\r\n        reels: Array<Array<number>>,\r\n        teasing1?: SwitchElement,\r\n        teasing2?: SwitchElement,\r\n    ): void {\r\n        this._symbols = symbols;\r\n        this._teasing[1] = teasing1;\r\n        this._teasing[2] = teasing2;\r\n        this.createReels(reels);\r\n    }\r\n\r\n    /**\r\n     * Set symbols which stopped after reels will be stopped.\r\n     * @method setStoppedSymbolsArray\r\n     * @param value Array<number>\r\n     * @return void\r\n     */\r\n    public setStoppedSymbolsArray(value: Array<IReel>): void {\r\n        this._stoppedSymbolsArray = value;\r\n    }\r\n\r\n    /**\r\n     * Show static symbols on reels.\r\n     * @method showSymbols\r\n     * @param reelsData Array<IReel>\r\n     * @return void\r\n     */\r\n    public showSymbols(reelsData: Array<IReel>): void {\r\n        if (DEBUG) {\r\n            this.log(\"showSymbols\");\r\n        }\r\n\r\n        this.actualReelStopped = -1;\r\n\r\n        if (this._reels != null) {\r\n            for (let i: number = 0; i < this._reelCount; i++) {\r\n                if (reelsData[i] != null) {\r\n                    if (this._reels[i] != null) {\r\n                        this._reels[i].visible = true;\r\n                        this._reels[i].setData(reelsData[i]);\r\n                        this._reels[i].showSymbols();\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no reel with index: \" + i);\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no reelsData with index: \" + i);\r\n                    }\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no reels\");\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Start spinning reels.\r\n     * @method spinStart\r\n     * @param longRotation boolean\r\n     * @return void\r\n     */\r\n    public spinStart(longRotation?: boolean): void {\r\n        if (DEBUG) {\r\n            this.log(\"spinStart\");\r\n        }\r\n\r\n        this._stoppedFromServer = false;\r\n        this._stoppedFromMachine = false;\r\n        this._stoppedFromLegal = false;\r\n\r\n        this._startSpinTime = Date.now();\r\n\r\n        this.visible = true;\r\n        this._reelsContainer.visible = true;\r\n\r\n        this.actualReelStopped = -1;\r\n        this._stoppedReelIndexes = 0;\r\n\r\n        if (this._reels != null) {\r\n            for (let i: number = 0; i < this._reelCount; i++) {\r\n                if (this._reels[i] != null) {\r\n                    this._reelsContainer.children[i].visible = true;\r\n                    if (this._stoppedSymbolsArray.length > 0) {\r\n                        this._reels[i].visible = true;\r\n                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n                        this._reels[i].showSymbols();\r\n                        this._reels[i].spinStart();\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no stopped symbols\");\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no reel with index: \" + i);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (longRotation != null && longRotation) {\r\n                this._stopTimer.start(this._minSpinRotationLong);\r\n            } else {\r\n                this._stopTimer.start(this._minSpinRotation);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no reels\");\r\n            }\r\n        }\r\n\r\n        PlayList.play(\"SND_BaseRotationStart\");\r\n        PlayList.loop(\"SND_BaseRotation\", 0, true);\r\n    }\r\n\r\n    protected verifyMinGameRoundDurationConditions(): boolean {\r\n        return (\r\n            AppContext.gameConfiguration.MinGameRoundDuration > 0 || AppContext.gameConfiguration.GameRoundMinSpan > 0\r\n        );\r\n    }\r\n\r\n    /**d\r\n     * Stop reels rotation.\r\n     * @method spinStop\r\n     * @param event any - from timer\r\n     * @param force boolean - default false used when spin_stop was dispatch\r\n     * @param fromServer boolean - default false used when spin_stop was dispatch from server\r\n     * @param legal\r\n     * @return void\r\n     */\r\n    public spinStop(event: any, force: boolean = false, fromServer: boolean = false, legal: boolean = false): void {\r\n        if (fromServer) {\r\n            this._stoppedFromServer = true;\r\n            if (this._legalStopTimer != null) {\r\n                clearTimeout(this._legalStopTimer);\r\n            }\r\n            if (this.verifyMinGameRoundDurationConditions()) {\r\n                this._legalStopTimer = +setTimeout(\r\n                    () => this.spinStop(null, false, false, true),\r\n                    this.getLegalRemainingSpinDuration(),\r\n                );\r\n            } else {\r\n                this._stoppedFromLegal = true;\r\n            }\r\n        } else if (legal) {\r\n            if (this._legalStopTimer != null) {\r\n                clearTimeout(this._legalStopTimer);\r\n            }\r\n            this._stoppedFromLegal = true;\r\n        } else {\r\n            this._stopTimer.stop();\r\n            this._stoppedFromMachine = true;\r\n        }\r\n\r\n        if (force) {\r\n            if (this._legalStopTimer != null) {\r\n                clearTimeout(this._legalStopTimer);\r\n            }\r\n            this._stoppedFromLegal = true;\r\n            this._stopTimer.stop();\r\n            this._stoppedFromMachine = true;\r\n        }\r\n        if (force && this.checkTeasing()) {\r\n            PlayList.stop(\"SND_Teasing\"); // ####\r\n            this.emit(Machine.StoppedTeasing);\r\n        }\r\n        if (DEBUG) {\r\n            this.log(\"spinStop: \" + force);\r\n        }\r\n\r\n        if (this._stoppedFromServer && this._stoppedFromMachine && this._stoppedFromLegal) {\r\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n                DataManager.updateDataElement(GameData.DataTotalWinDenom, \"0\");\r\n            }\r\n            if (force) {\r\n                this._teasing[1] && this._teasing[1].goToCase(\"EMPTY\");\r\n                this._teasing[2] && this._teasing[2].goToCase(\"EMPTY\");\r\n            }\r\n            this._canTease = force ? false : this.checkTeasing();\r\n            if (this._reels != null) {\r\n                for (let i: number = 0; i < this._reelCount; i++) {\r\n                    if (this._reels[i] != null) {\r\n                        if (this._stoppedSymbolsArray.length !== 0) {\r\n                            this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n                            if (force || !this._canTease) {\r\n                                this._reels[i].spinStop(force);\r\n                            } else {\r\n                                if (this._canTease) {\r\n                                    if (i === 0) {\r\n                                        this._reels[i].spinStop(force);\r\n                                    }\r\n                                }\r\n                            }\r\n                        } else {\r\n                            if (DEBUG) {\r\n                                this.log(\"ERROR no stopped symbols\");\r\n                            }\r\n                        }\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no reel with index: \" + i);\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no reels\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private checkTeasing(): boolean {\r\n        // let count = 0;\r\n        // let reelIndex = 2;\r\n        // for (let i = 0; i < reelIndex; i++) {\r\n        //     if (this._stoppedSymbolsArray[i].symbols.indexOf(8) !== -1) {\r\n        //         count++;\r\n        //     }\r\n        // }\r\n        // return (count >= 2);\r\n        return this._stoppedSymbolsArray[0].symbols.indexOf(8) !== -1;\r\n    }\r\n\r\n    /**\r\n     * Get remaining time for legal spin duration\r\n     * @method getLegalRemainingSpinDuration\r\n     * @return number\r\n     */\r\n    protected getLegalRemainingSpinDuration(): number {\r\n        if (AppContext.gameConfiguration.GameRoundMinSpan > 0) {\r\n            return this.calculateRemainingSpinDuration(AppContext.gameConfiguration.GameRoundMinSpan);\r\n        }\r\n\r\n        if (AppContext.gameConfiguration.MinGameRoundDuration > 0) {\r\n            return AppContext.gameConfiguration.MinGameRoundDuration;\r\n        }\r\n\r\n        return 0;\r\n    }\r\n\r\n    /**\r\n     * Calculate remaining time for legal spin duration\r\n     * @method calculateRemainingSpinDuration\r\n     * @param minTime: number - minimal spin duration in seconds\r\n     * @return number\r\n     */\r\n    protected calculateRemainingSpinDuration(minTime: number): number {\r\n        const now = Date.now();\r\n        const diff = now - this._startSpinTime;\r\n        const reelStopDuration = this.getReelStopDuration();\r\n        return Math.max(minTime - diff - reelStopDuration, 0);\r\n    }\r\n\r\n    protected getReelStopDuration(): number {\r\n        return (this._reels[this._reelCount - 1].getStopDuration() / 60) * 1000;\r\n    }\r\n\r\n    /**\r\n     * Dispatched onMachineStopped when all reels are stopped.\r\n     * @method onReelStopped\r\n     * @param reelIndex number - reel index\r\n     * @return void\r\n     */\r\n    public onReelStopped(reelIndex: number): void {\r\n        if (DEBUG) {\r\n            this.log(\"reel stopped: \" + reelIndex);\r\n        }\r\n\r\n        if (!this._stoppedSymbolsArray[reelIndex].hasOwnProperty(\"overlay\")) {\r\n            PlayList.play(\"SND_BaseRotationEnd\"); // + reelIndex);\r\n        }\r\n\r\n        this._stoppedReelIndexes++;\r\n        this.actualReelStopped = reelIndex;\r\n        this._reels[reelIndex].visible = false;\r\n\r\n        this._canTease && this.tease(reelIndex);\r\n\r\n        this.emit(Machine.ReelStopped);\r\n\r\n        if (this._stoppedReelIndexes === this._reelCount) {\r\n            PlayList.stop(\"SND_BaseRotation\", 10);\r\n            if (this._legalStopTimer != null) {\r\n                clearTimeout(this._legalStopTimer);\r\n            }\r\n            this._stopTimer.stop();\r\n            if (DEBUG) {\r\n                const old = AppContext.gameConfiguration.MinGameRoundDuration;\r\n                const current = AppContext.gameConfiguration.GameRoundMinSpan;\r\n                const minDuration = current > 0 ? current : old > 0 ? old : 0;\r\n                const spinDuration = Date.now() - this._startSpinTime;\r\n\r\n                if (spinDuration > minDuration || !this.verifyMinGameRoundDurationConditions()) {\r\n                    this.log(\"Spin time duration: \" + spinDuration + \" ms\");\r\n                } else {\r\n                    console.log(\"%cError spin time duration:\" + spinDuration + \" ms\", \"color: #ff9900\");\r\n                }\r\n            }\r\n            this.emit(Machine.MachineStopped);\r\n            this._reelsContainer.visible = false;\r\n        }\r\n    }\r\n\r\n    private tease(reelIndex: number): void {\r\n        // ####\r\n        const L = this._reels.length;\r\n        const hasMask = this._stoppedSymbolsArray[reelIndex].symbols.indexOf(8) > -1;\r\n\r\n        switch (reelIndex) {\r\n            // 0\r\n            case L - 3:\r\n                this._reels[reelIndex + 1].spinTease([8], 120);\r\n                PlayList.play(\"SND_Teasing\");\r\n                this._teasing[reelIndex + 1].goToCase(\"TEASE\");\r\n                this.emit(Machine.StartedTeasing);\r\n                break;\r\n\r\n            // 1\r\n            case L - 2:\r\n                if (hasMask) {\r\n                    this._reels[reelIndex + 1].spinTease([8], 120);\r\n                    PlayList.play(\"SND_Teasing\");\r\n                    this._teasing[reelIndex + 1].goToCase(\"TEASE\");\r\n                } else {\r\n                    PlayList.stop(\"SND_Teasing\");\r\n                    this._reels[reelIndex + 1].spinStop();\r\n                    this.emit(Machine.StoppedTeasing);\r\n                }\r\n                if (this._teasing[L - 2] && this._teasing[L - 2].getCurrentCase() == \"TEASE\")\r\n                    this._teasing[L - 2].goToCase(\"OUT\");\r\n                break;\r\n\r\n            // 2\r\n            case L - 1:\r\n                PlayList.stop(\"SND_Teasing\");\r\n                if (this._teasing[L - 2] && this._teasing[L - 2].getCurrentCase() == \"TEASE\")\r\n                    this._teasing[L - 2].goToCase(\"OUT\");\r\n                if (this._teasing[L - 1] && this._teasing[L - 1].getCurrentCase() == \"TEASE\")\r\n                    this._teasing[L - 1].goToCase(\"OUT\");\r\n                let count = 0;\r\n                for (let i = 0; i <= reelIndex; i++) {\r\n                    if (this._stoppedSymbolsArray[i].symbols.indexOf(8) !== -1) count++;\r\n                }\r\n                if (count == L - 1) this.emit(Machine.StoppedTeasing);\r\n                break;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * Inherits attributes from BaseElement.\r\n */\r\nexport const MachineAttributes = {\r\n    /**\r\n     * Name of config for machine.\r\n     * @property Configs\r\n     * @type string\r\n     * @default null\r\n     */\r\n    CONFIGS: \"Configs\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Machine.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { Symbol } from \"./Symbol\";\r\nimport { Symbols } from \"./Symbols\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Tweens } from \"../Components/Effects/Tweens\";\r\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport { ReelConfigurationAttributes } from \"../Components/Configuration\";\r\n\r\n/**\r\n * Class reel represent reel symbols rotation.\r\n * @class Reel\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Reel extends BaseElement {\r\n    //******************************************************************************************************************\r\n    //  EVENTS\r\n    //******************************************************************************************************************\r\n\r\n    public static readonly ReelStopped: string = \"reelStopped\";\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES (CONFIGURE)\r\n    //******************************************************************************************************************\r\n\r\n    protected preRoll: number;\r\n\r\n    protected preRollSpeed: number;\r\n\r\n    protected postRoll: number;\r\n\r\n    protected postRollSpeed: number;\r\n\r\n    protected speed: number;\r\n\r\n    protected forceSpeed: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES (INITIALIZE)\r\n    //******************************************************************************************************************\r\n\r\n    protected previousReel: Reel;\r\n\r\n    protected nextReel: Reel;\r\n\r\n    protected index: number;\r\n\r\n    protected symbols: Symbols;\r\n\r\n    protected strip: Array<number>;\r\n\r\n    protected positionX: number;\r\n\r\n    protected positionY: number;\r\n\r\n    protected symbolCount: number;\r\n\r\n    protected symbolTopCount: number;\r\n\r\n    protected symbolBottomCount: number;\r\n\r\n    protected symbolWidth: number;\r\n\r\n    protected symbolHeight: number;\r\n\r\n    protected startDelay: number;\r\n\r\n    protected stopDelay: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected stopTimer: FrameTimerEventEmitter;\r\n\r\n    public currentSymbols: Array<Symbol>;\r\n\r\n    protected data: Communication.Game.IReel;\r\n\r\n    protected shouldBeStopping: boolean;\r\n\r\n    public isStopping: boolean;\r\n\r\n    protected stoppingCounter: number;\r\n\r\n    protected isTeasing: boolean;\r\n\r\n    protected teasingSymbols: Array<number>;\r\n\r\n    protected rollSpeed: number;\r\n\r\n    protected stripIndex: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONFIGURE\r\n    //******************************************************************************************************************\r\n\r\n    public configure(node: Element): void {\r\n        this.preRoll = node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL))\r\n            : 180;\r\n        this.preRollSpeed = node.hasAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.PRE_ROLL_SPEED))\r\n            : 10;\r\n        this.postRoll = node.hasAttribute(ReelConfigurationAttributes.POST_ROLL)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.POST_ROLL))\r\n            : 180;\r\n        this.postRollSpeed = node.hasAttribute(ReelConfigurationAttributes.POST_ROLL_SPEED)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.POST_ROLL_SPEED))\r\n            : 5;\r\n        this.speed = node.hasAttribute(ReelConfigurationAttributes.SPEED)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.SPEED))\r\n            : 3;\r\n        this.forceSpeed = node.hasAttribute(ReelConfigurationAttributes.FORCE_SPEED)\r\n            ? parseInt(node.getAttribute(ReelConfigurationAttributes.FORCE_SPEED))\r\n            : 2;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  INITIALIZE\r\n    //******************************************************************************************************************\r\n\r\n    public initialize(\r\n        previousReel: Reel,\r\n        nextReel: Reel,\r\n        index: number,\r\n        symbols: Symbols,\r\n        strip: Array<number>,\r\n        positionX: number,\r\n        positionY: number,\r\n        symbolCount: number,\r\n        symbolTopCount: number,\r\n        symbolBottomCount: number,\r\n        symbolWidth: number,\r\n        symbolHeight: number,\r\n        startDelay: number,\r\n        stopDelay: number,\r\n    ): void {\r\n        this.previousReel = previousReel;\r\n        this.nextReel = nextReel;\r\n        this.index = index;\r\n        this.symbols = symbols;\r\n        this.strip = strip;\r\n        this.positionX = positionX;\r\n        this.positionY = positionY;\r\n        this.symbolCount = symbolCount;\r\n        this.symbolTopCount = symbolTopCount;\r\n        this.symbolBottomCount = symbolBottomCount;\r\n        this.symbolWidth = symbolWidth;\r\n        this.symbolHeight = symbolHeight;\r\n        this.startDelay = startDelay;\r\n        this.stopDelay = stopDelay;\r\n\r\n        this.stopTimer = CreateFrameTimer(\"reel\");\r\n        this.stopTimer.on(FrameTimerEvents.Complete, this.onStopTimerComplete.bind(this));\r\n\r\n        this.currentSymbols = [];\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SET DATA\r\n    //******************************************************************************************************************\r\n\r\n    public setData(data: Communication.Game.IReel) {\r\n        this.data = data;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SHOW SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    public showSymbols(): void {\r\n        this.shouldBeStopping = false;\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = false;\r\n        this.teasingSymbols = [];\r\n\r\n        this.x = this.positionX;\r\n        this.y = this.positionY;\r\n\r\n        while (this.currentSymbols.length > 0) {\r\n            this.returnSymbol(this.currentSymbols.pop());\r\n        }\r\n\r\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n            let symbolId: number;\r\n            let symbolCase: string;\r\n\r\n            if (i < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            }\r\n\r\n            this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\r\n            this.addChild(this.currentSymbols[0]);\r\n        }\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            const symbol = this.currentSymbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN START\r\n    //******************************************************************************************************************\r\n\r\n    public spinStart(): void {\r\n        this.shouldBeStopping = false;\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = false;\r\n        this.teasingSymbols = [];\r\n        this.rollSpeed = this.speed;\r\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n\r\n        this.spinPreRoll();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN STOP\r\n    //******************************************************************************************************************\r\n\r\n    public spinStop(force: boolean = false, customDelay: number = 0): void {\r\n        this.stopTimer.stop();\r\n\r\n        if (force) {\r\n            this.shouldBeStopping = true;\r\n            this.rollSpeed = this.forceSpeed;\r\n        } else {\r\n            this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n        }\r\n    }\r\n\r\n    protected onStopTimerComplete(): void {\r\n        this.shouldBeStopping = true;\r\n        this.isStopping = true;\r\n    }\r\n\r\n    public getStopDuration(): number {\r\n        const stoppingSymbols = this.symbolTopCount + this.symbolCount + this.symbolBottomCount - 1;\r\n        return this.stopDelay + stoppingSymbols * this.speed + this.postRollSpeed * 2;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN TEASE\r\n    //******************************************************************************************************************\r\n\r\n    public spinTease(symbols: Array<number>, customDelay: number = 0): void {\r\n        this.shouldBeStopping = false;\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = true;\r\n        this.teasingSymbols = symbols;\r\n\r\n        this.stopTimer.stop();\r\n        this.stopTimer.start(customDelay !== 0 ? customDelay : this.stopDelay);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN PRE ROLL\r\n    //******************************************************************************************************************\r\n\r\n    protected spinPreRoll(): void {\r\n        Tweens.removeTweens(this, \"position\");\r\n        Tweens.positionTween(this, {\r\n            tweenX: [this.positionX, this.positionX, this.positionX],\r\n            tweenY: [this.positionY, this.positionY - this.preRoll, this.positionY],\r\n            tweenDuration: this.preRollSpeed * 2,\r\n            tweenDelay: this.startDelay,\r\n            callbackFunction: this.spinRoll,\r\n            callbackScope: this,\r\n        });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN ROLL\r\n    //******************************************************************************************************************\r\n\r\n    protected spinRoll(): void {\r\n        Tweens.removeTweens(this, \"position\");\r\n        Tweens.positionTween(this, {\r\n            tweenX: [this.positionX, this.positionX],\r\n            tweenY: [this.positionY, this.positionY + this.symbolHeight],\r\n            tweenDuration: this.rollSpeed,\r\n            callbackFunction: this.updateReel,\r\n            callbackScope: this,\r\n        });\r\n    }\r\n\r\n    protected updateReel(): void {\r\n        this.returnSymbol(this.currentSymbols.pop());\r\n\r\n        if (this.shouldBeStopping && !this.isStopping) {\r\n            if (this.previousReel === null) {\r\n                this.isStopping = true;\r\n            } else if (this.previousReel.isStopping) {\r\n                this.isStopping = true;\r\n            }\r\n        }\r\n\r\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\r\n        let symbolId = this.strip[this.stripIndex];\r\n        let symbolCase = Symbol.CaseBlur;\r\n\r\n        if (this.isStopping) {\r\n            if (this.stoppingCounter < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index +\r\n                            this.symbolBottomCount +\r\n                            this.symbolCount -\r\n                            this.stoppingCounter -\r\n                            1 +\r\n                            this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase =\r\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index +\r\n                            this.symbolBottomCount +\r\n                            this.symbolCount -\r\n                            this.stoppingCounter -\r\n                            1 +\r\n                            this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase =\r\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n                        ? Symbol.CaseRotation\r\n                        : Symbol.CaseBlur;\r\n            }\r\n\r\n            this.stoppingCounter++;\r\n        }\r\n\r\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\r\n        this.addChild(this.currentSymbols[0]);\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            const symbol = this.currentSymbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n\r\n        if (\r\n            this.isStopping &&\r\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\r\n        ) {\r\n            this.spinPostRoll();\r\n        } else {\r\n            this.spinRoll();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN POST ROLL\r\n    //******************************************************************************************************************\r\n\r\n    protected spinPostRoll(): void {\r\n        Tweens.removeTweens(this, \"position\");\r\n        Tweens.positionTween(this, {\r\n            tweenX: [this.positionX, this.positionX, this.positionX],\r\n            tweenY: [this.positionY, this.positionY + this.postRoll, this.positionY],\r\n            tweenDuration: this.postRollSpeed * 2,\r\n            callbackFunction: this.spinComplete,\r\n            callbackScope: this,\r\n        });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN COMPLETE\r\n    //******************************************************************************************************************\r\n\r\n    protected spinComplete(): void {\r\n        Tweens.removeTweens(this, \"position\");\r\n\r\n        while (this.currentSymbols.length > 0) {\r\n            this.returnSymbol(this.currentSymbols.pop());\r\n        }\r\n\r\n        this.emit(Reel.ReelStopped, this.index);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    protected getSymbol(symbolId: number, symbolCase: string): Symbol {\r\n        return this.symbols.getSymbol(symbolId, symbolCase);\r\n    }\r\n\r\n    protected returnSymbol(symbol: Symbol): void {\r\n        this.symbols.returnSymbol(symbol);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Reel.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Reel } from \"../GameComponents/Reel\";\r\nimport { Symbol } from \"../GameComponents/Symbol\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ReelExtended extends Reel {\r\n    private collectedSymbols: number[];\r\n\r\n    public spinStart(): void {\r\n        if (\r\n            GameManager.baseResponse &&\r\n            GameManager.baseResponse.customData &&\r\n            GameManager.baseResponse.customData.collectedSymbols\r\n        ) {\r\n            this.collectedSymbols = [...GameManager.baseResponse.customData.collectedSymbols];\r\n        }\r\n        super.spinStart();\r\n    }\r\n\r\n    public showSymbols(useTransform: boolean = false): void {\r\n        this.shouldBeStopping = false;\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = false;\r\n        this.teasingSymbols = [];\r\n\r\n        this.x = this.positionX;\r\n        this.y = this.positionY;\r\n\r\n        if (!useTransform) {\r\n            while (this.currentSymbols.length > 0) {\r\n                this.returnSymbol(this.currentSymbols.pop());\r\n            }\r\n        }\r\n\r\n        let bottomSymbols: Array<Symbol> = [];\r\n        let topSymbols: Array<Symbol> = [];\r\n\r\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n            let symbolId: number;\r\n            let symbolCase: string;\r\n\r\n            if (i < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            }\r\n\r\n            if (!useTransform) {\r\n                // when we don't want use symbols from WinAnimator\r\n                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n            } else {\r\n                // currentSymbols are used from WinAnimator. We only need to add new top and bottom symbols\r\n                if (i < this.symbolBottomCount) {\r\n                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n                } else if (i > this.symbolBottomCount + this.symbolCount - 1) {\r\n                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (useTransform) {\r\n            while (bottomSymbols.length > 0) {\r\n                this.currentSymbols.push(bottomSymbols.shift());\r\n            }\r\n\r\n            while (topSymbols.length > 0) {\r\n                this.currentSymbols.unshift(topSymbols.shift());\r\n            }\r\n        }\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            if (this.currentSymbols[i] == null) {\r\n                continue; //skip null symbol\r\n            }\r\n\r\n            this.addChild(this.currentSymbols[i]);\r\n            const symbol = this.currentSymbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n    }\r\n\r\n    protected updateReel(): void {\r\n        this.returnSymbol(this.currentSymbols.pop());\r\n\r\n        if (this.shouldBeStopping && !this.isStopping) {\r\n            if (this.previousReel === null) {\r\n                this.isStopping = true;\r\n            } else if (this.previousReel.isStopping) {\r\n                this.isStopping = true;\r\n            }\r\n        }\r\n\r\n        this.stripIndex = (this.stripIndex - 1 + this.strip.length) % this.strip.length;\r\n\r\n        let symbolId = this.strip[this.stripIndex];\r\n        let symbolCase = Symbol.CaseBlur;\r\n\r\n        if (this.isStopping) {\r\n            if (this.stoppingCounter < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index +\r\n                            this.symbolBottomCount +\r\n                            this.symbolCount -\r\n                            this.stoppingCounter -\r\n                            1 +\r\n                            this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase =\r\n                    this.stoppingCounter === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (this.stoppingCounter < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - this.stoppingCounter - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index +\r\n                            this.symbolBottomCount +\r\n                            this.symbolCount -\r\n                            this.stoppingCounter -\r\n                            1 +\r\n                            this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase =\r\n                    this.stoppingCounter === this.symbolBottomCount + this.symbolCount\r\n                        ? Symbol.CaseRotation\r\n                        : Symbol.CaseBlur;\r\n            }\r\n\r\n            this.stoppingCounter++;\r\n        }\r\n\r\n        if (symbolId >= 9 && symbolId <= 13 && symbolCase == Symbol.CaseBlur) {\r\n            if (this.collectedSymbols && this.collectedSymbols.indexOf(symbolId) < 0) {\r\n                symbolCase = Symbol.CaseRotation;\r\n            }\r\n        }\r\n\r\n        if (this.isTeasing) symbolCase = Symbol.CaseTease;\r\n\r\n        this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\r\n        this.addChild(this.currentSymbols[0]);\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            const symbol = this.currentSymbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n\r\n        if (\r\n            this.isStopping &&\r\n            this.stoppingCounter === this.symbolBottomCount + this.symbolCount + this.symbolTopCount\r\n        ) {\r\n            this.spinPostRoll();\r\n        } else {\r\n            this.spinRoll();\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ReelExtended.ts\n **/","import { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { WinAnimatorExtended } from \"../CustomComponents/WinAnimatorExtended\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport { WinAnimator } from \"./WinAnimator\";\r\n\r\nconst complexCases = [\"GUITAR\", \"GUITAR_FAST\", \"BONUS_FRUIT\"];\r\nconst WAVE_PERIOD = 1200;\r\n\r\nexport class Character {\r\n    static SPIN = \"spin\";\r\n    static SHOW = \"show\";\r\n    static HIDE = \"hide\";\r\n    static REELS_STOP = \"reels_stop\";\r\n    static WIN_ANIMS = \"win_anims\";\r\n    static COLLECTION = \"collection\";\r\n    static MASK_TEASING_START = \"mask_teasing_start\";\r\n    static MASK_TEASING_END = \"mask_teasing_end\";\r\n    static WIN_ANIM_COMPLETED = \"win_anim_completed\";\r\n\r\n    static BONUS_SPIN = \"bonus_spin\";\r\n    static BONUS_SYMBOL_WIN = \"bonus_symbol_win\";\r\n    static BONUS_MISTERY = \"bonus_mistery\";\r\n    static BONUS_MISTERY_END = \"bonus_mistery_end\";\r\n    static BONUS_TOTAL_WIN = \"bonus_total_win\";\r\n    static BONUS_MESSAGE_START = \"bonus_message_start\";\r\n    static BONUS_FINAL = \"bonus_final\";\r\n\r\n    public onWave: () => void;\r\n\r\n    private _view: SwitchElement;\r\n    private _nextCase: string = \"\";\r\n    private _waveDelay: FrameTimerEventEmitter;\r\n    private _defaultState: string;\r\n    private _winAnimator: WinAnimatorExtended;\r\n    private _currentEvent: string;\r\n\r\n    constructor(view: SwitchElement, winAnimator?: WinAnimatorExtended) {\r\n        this._view = view;\r\n        this._winAnimator = winAnimator;\r\n        this._view.on(SwitchElement.AnimationComplete, this._caseAnimFinish_handler.bind(this));\r\n        this._defaultState = this._view.getCurrentCase();\r\n    }\r\n\r\n    enable() {\r\n        this._waveDelay = CreateFrameTimer(\"waveDelay\");\r\n        this._waveDelay.on(FrameTimerEvents.Complete, this._doWave.bind(this));\r\n        this._waveDelay.start(WAVE_PERIOD);\r\n        this._view.goToCase(\"IDLE\");\r\n    }\r\n\r\n    disable() {\r\n        this._waveDelay && this._waveDelay.stop();\r\n        this._waveDelay = null;\r\n        this._view.goToCase(this._defaultState);\r\n    }\r\n\r\n    get currentEvent(): string {\r\n        return this._currentEvent;\r\n    }\r\n\r\n    event(name: string): void {\r\n        this._currentEvent = name;\r\n        if (this._waveDelay) {\r\n            this._waveDelay.stop();\r\n            this._waveDelay.start(WAVE_PERIOD);\r\n        }\r\n        let currCase = this._view.getCurrentCase();\r\n        switch (name) {\r\n            case Character.SPIN:\r\n                // default\r\n                break;\r\n            case Character.BONUS_SPIN:\r\n                this._nextCase = \"GUITAR_BEGIN\";\r\n                break;\r\n            case Character.COLLECTION:\r\n                this._nextCase = \"AMAZED\";\r\n                break;\r\n            case Character.SHOW:\r\n                this._nextCase = \"IDLE\";\r\n                break;\r\n            case Character.HIDE:\r\n                this._nextCase = \"EMPTY\";\r\n                break;\r\n            case Character.MASK_TEASING_START:\r\n                this._nextCase = \"TEASING_START\";\r\n                break;\r\n            case Character.MASK_TEASING_END:\r\n                this._nextCase = \"TEASING_END\";\r\n                break;\r\n            case Character.REELS_STOP:\r\n                if (GameManager.baseResponse.currentWin > 0) {\r\n                    if (this._winAnimator && this._winAnimator.isHighWin()) {\r\n                        this._nextCase = \"HIGH_WIN\";\r\n                    } else this._nextCase = this._getRandCase([\"CLAP\", \"THUMBS_UP\"]);\r\n                }\r\n                break;\r\n            case Character.BONUS_SYMBOL_WIN:\r\n                this._nextCase = \"SYMBOL_WIN\";\r\n                this._waveDelay && this._waveDelay.stop();\r\n                // if(GameManager.bonusRespinsResponse.currentWin > 0) {\r\n                //     this._nextCase = this._getRandCase([\"CLAP\", \"THUMBS_UP\"]);\r\n                // }\r\n                break;\r\n            case Character.WIN_ANIM_COMPLETED:\r\n                if (this._winAnimator.isHighWin()) this._nextCase = \"GUITAR_END\";\r\n                break;\r\n            case Character.BONUS_MISTERY:\r\n                this._nextCase = \"MISTERY\";\r\n                this._waveDelay && this._waveDelay.stop();\r\n                break;\r\n            case Character.BONUS_MISTERY_END:\r\n                this._nextCase = \"MISTERY_END\";\r\n                break;\r\n            case Character.BONUS_TOTAL_WIN:\r\n                this._nextCase = \"MYSTERY_TOTAL\";\r\n                break;\r\n            case Character.BONUS_FINAL:\r\n                this._nextCase = \"HAND_WAVE\";\r\n                this._waveDelay && this._waveDelay.stop();\r\n                break;\r\n            case Character.BONUS_MESSAGE_START:\r\n                this._nextCase = \"START_BONUS\";\r\n                this._waveDelay && this._waveDelay.stop();\r\n                break;\r\n        }\r\n        if (complexCases.indexOf(currCase) >= 0) {\r\n            this._doOut();\r\n        } else this._toNextCase();\r\n    }\r\n\r\n    _caseAnimFinish_handler() {\r\n        let caseName = this._view.getCurrentCase();\r\n        if (caseName.indexOf(\"_OUT\") >= 0) {\r\n            this._toNextCase();\r\n        }\r\n    }\r\n\r\n    _doOut() {\r\n        let caseName = this._view.getCurrentCase();\r\n        switch (caseName) {\r\n            case \"GUITAR\":\r\n            case \"GUITAR_FAST\":\r\n                this._view.goToCase(\"GUITAR_OUT\");\r\n                break;\r\n            case \"BONUS_FRUIT\":\r\n                this._view.goToCase(\"BONUS_FRUIT_OUT\");\r\n                break;\r\n        }\r\n    }\r\n\r\n    _toNextCase() {\r\n        if (this._nextCase.length) {\r\n            this._view.goToCase(this._nextCase);\r\n            this._playSoundByCase(this._nextCase);\r\n            this._nextCase = \"\";\r\n        }\r\n    }\r\n\r\n    _getRandCase(cases: string[]): string {\r\n        let r = Math.floor(Math.random() * cases.length);\r\n        if (r == cases.length) r = 0;\r\n        return cases[r];\r\n    }\r\n\r\n    _doWave() {\r\n        if (this.onWave != null) this.onWave();\r\n        this._waveDelay.stop();\r\n        this._nextCase = \"HAND_WAVE\";\r\n        // if(complexCases.indexOf(this._view.getCurrentCase()) >= 0) {\r\n        //     this._doOut();\r\n        // } else\r\n        this._toNextCase();\r\n        this._waveDelay.start(WAVE_PERIOD);\r\n    }\r\n\r\n    _playSoundByCase(caseName: string) {\r\n        switch (caseName) {\r\n            case \"HAND_WAVE\":\r\n                PlayList.play(\"SND_CharacterWave\");\r\n                break;\r\n            case \"CLAP\":\r\n                PlayList.play(\"SND_CharacterClap\");\r\n                break;\r\n            case \"MISTERY\":\r\n                PlayList.play(\"SND_CharacterClap\");\r\n                break;\r\n            case \"SYMBOL_WIN\":\r\n                PlayList.play(\"SND_CharacterClap\");\r\n                break;\r\n            case \"HIGH_WIN\":\r\n            case \"THUMBS_UP\":\r\n                PlayList.play(\"SND_CharacterThumbsUp\");\r\n                break;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Character.ts\n **/","import { ArrayUtils, StringUtils, NumberUtils } from \"neo-common\";\r\nimport { Configuration } from \"../Components/Configuration\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { ILayoutElement } from \"../CustomComponents/ILayoutElement\";\r\n\r\nexport class LayoutManager {\r\n    private static readonly ExtraPortraitClass: string = \"extendPortrait\";\r\n\r\n    private static SwitchPrefix = \"\";\r\n\r\n    private static PreviousSwitchPrefix = \"\";\r\n\r\n    private static LayoutElements: Array<ILayoutElement> = [];\r\n\r\n    private platform: string;\r\n\r\n    private usePlatform: boolean;\r\n\r\n    private width: Array<number>;\r\n\r\n    private height: Array<number>;\r\n\r\n    private ratioIntervals: Array<Array<number>>;\r\n\r\n    private configured: boolean;\r\n\r\n    constructor() {\r\n        this.usePlatform = false;\r\n        this.configured = false;\r\n        this.ratioIntervals = [];\r\n\r\n        let config: Element = Configuration.Configurations[\"LayoutManagerConfiguration\"];\r\n        if (config != null) {\r\n            this.configurate(config);\r\n            this.configured = true;\r\n        }\r\n\r\n        if (Scaling.Emitter != null) {\r\n            Scaling.Emitter.on(Scaling.EventResize, this.onLayoutChange.bind(this));\r\n        }\r\n    }\r\n\r\n    public static addLayoutElement(layoutElement: ILayoutElement): void {\r\n        LayoutManager.LayoutElements.push(layoutElement);\r\n    }\r\n\r\n    public static getSwitchPrefix(): string {\r\n        return LayoutManager.SwitchPrefix;\r\n    }\r\n\r\n    public static getPreviousSwitchPrefix(): string {\r\n        return LayoutManager.PreviousSwitchPrefix;\r\n    }\r\n\r\n    getPlatform() {\r\n        return this.platform;\r\n    }\r\n\r\n    private configurate(node: Element): void {\r\n        this.platform =\r\n            window[\"CHANNEL\"] == \"mobile\" ? LayoutManagerAttributes.MOBILE : LayoutManagerAttributes.DESKTOP;\r\n\r\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.USE_PLATFORM)) {\r\n            this.usePlatform = StringUtils.parseBoolean(\r\n                node.getAttribute(LayoutManagerConfigurationAttributes.USE_PLATFORM),\r\n            );\r\n        }\r\n\r\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.WIDTH)) {\r\n            this.width = ArrayUtils.numberArray(node.getAttribute(LayoutManagerConfigurationAttributes.WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.HEIGHT)) {\r\n            this.height = ArrayUtils.numberArray(node.getAttribute(LayoutManagerConfigurationAttributes.HEIGHT));\r\n        }\r\n\r\n        if (node.hasAttribute(LayoutManagerConfigurationAttributes.RATIO_INTERVALS)) {\r\n            let intervals = ArrayUtils.stringArray(\r\n                node.getAttribute(LayoutManagerConfigurationAttributes.RATIO_INTERVALS),\r\n                \"|\",\r\n            );\r\n\r\n            for (let i = 0; i < intervals.length; i++) {\r\n                this.ratioIntervals.push(ArrayUtils.numberArray(intervals[i]));\r\n            }\r\n        }\r\n    }\r\n\r\n    private onLayoutChange(\r\n        isPortrait: boolean,\r\n        ratio: number,\r\n        screenWidth: number,\r\n        screenHeight: number,\r\n        ratioWidth: number,\r\n        ratioHeight: number,\r\n    ): void {\r\n        if (!this.configured) {\r\n            return;\r\n        }\r\n\r\n        isPortrait = this.allowedPortraitLayout(isPortrait, ratio); //check screen size\r\n        isPortrait = this.allowedCanvasPortraitLayout(isPortrait, screenHeight, ratioWidth); //check canvas size due to SPB for example\r\n\r\n        LayoutManager.SwitchPrefix = \"\";\r\n        if (this.usePlatform) {\r\n            LayoutManager.SwitchPrefix = this.platform + \"_\";\r\n        }\r\n\r\n        if (isPortrait) {\r\n            document.body.classList.add(LayoutManager.ExtraPortraitClass);\r\n        } else {\r\n            document.body.classList.remove(LayoutManager.ExtraPortraitClass);\r\n        }\r\n\r\n        this.changeCanvasSize(isPortrait, screenWidth, screenHeight, ratioWidth, ratioHeight);\r\n        this.updateLayoutElements(isPortrait);\r\n\r\n        LayoutManager.PreviousSwitchPrefix = LayoutManager.SwitchPrefix;\r\n    }\r\n\r\n    private allowedPortraitLayout(isPortrait: boolean, ratio: number): boolean {\r\n        if (isPortrait) {\r\n            for (let i = 0; i < this.ratioIntervals.length; i++) {\r\n                if (ratio > this.ratioIntervals[i][0] && ratio < this.ratioIntervals[i][1]) {\r\n                    return true;\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private allowedCanvasPortraitLayout(isPortrait: boolean, screenHeight: number, ratioWidth: number): boolean {\r\n        if (isPortrait) {\r\n            let screen = document.getElementById(\"screen\");\r\n            let offset = parseInt(window.getComputedStyle(screen).top);\r\n            if (!document.body.classList.contains(\"jpt-on\")) {\r\n                offset *= -1; //if we dont have jackpot, game has small gap, so we can calculated without this gap\r\n            }\r\n\r\n            const height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\r\n            const canvasRatio = this.width[1] / height;\r\n\r\n            return this.allowedPortraitLayout(isPortrait, canvasRatio);\r\n        }\r\n\r\n        return isPortrait;\r\n    }\r\n\r\n    private changeCanvasSize(\r\n        isPortrait: boolean,\r\n        screenWidth: number,\r\n        screenHeight: number,\r\n        ratioWidth: number,\r\n        ratioHeight: number,\r\n    ): void {\r\n        let screen = document.getElementById(\"screen\");\r\n        if (isPortrait) {\r\n            const offset = parseInt(window.getComputedStyle(screen).top);\r\n            const height = (screenHeight * (1 / ratioWidth) - offset) * (1920 / 1080);\r\n            StageController.Renderer.resize(this.width[1], height); //portrait\r\n        } else {\r\n            StageController.Renderer.resize(this.width[0], this.height[0]); //landscape\r\n        }\r\n\r\n        //ToDo render only if renderer is paused\r\n        StageController.Renderer.render(StageController.Stage);\r\n    }\r\n\r\n    private updateLayoutElements(isPortrait: boolean): void {\r\n        for (let i = 0; i < LayoutManager.LayoutElements.length; i++) {\r\n            LayoutManager.LayoutElements[i].onLayoutChange(isPortrait);\r\n        }\r\n    }\r\n}\r\n\r\nexport const LayoutManagerConfigurationAttributes = {\r\n    USE_ORIENTATION: \"UseOrientation\",\r\n    USE_PLATFORM: \"UsePlatform\",\r\n    HEIGHT: \"Height\",\r\n    WIDTH: \"Width\",\r\n    RATIO_INTERVALS: \"RatioIntervals\",\r\n};\r\n\r\nexport const LayoutManagerAttributes = {\r\n    PORTRAIT: \"PORTRAIT\",\r\n    LANDSCAPE: \"LANDSCAPE\",\r\n    DESKTOP: \"DESKTOP\",\r\n    MOBILE: \"MOBILE\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/LayoutManager.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { ILayoutElement } from \"./ILayoutElement\";\r\nimport { LayoutManager } from \"../Managers/LayoutManager\";\r\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { ContainerStyle } from \"../Components/Elements/Styles/ContainerStyle\";\r\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class LayoutContainerElement extends ContainerElement implements ILayoutElement {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private portraitStyle: ContainerStyle;\r\n\r\n    private styleNodeList: Array<Element>;\r\n\r\n    private portraitStyleNodeList: Array<Element>;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        LayoutManager.addLayoutElement(this);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PUBLIC HANDLERS\r\n    //******************************************************************************************************************\r\n\r\n    createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)) {\r\n            this.portraitStyle = <ContainerStyle>(\r\n                StyleManager.Styles[node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE)]\r\n            );\r\n            if (this.portraitStyle != null) {\r\n                this.portraitStyleNodeList = this.getNodesList(this.portraitStyle.node.firstElementChild);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\r\n                        \"ERROR no style with name \" +\r\n                            node.getAttribute(LayoutContainerElementAttributes.PORTRAIT_STYLE),\r\n                    );\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.style != null) {\r\n            this.styleNodeList = this.getNodesList(this.style.node.firstElementChild);\r\n        }\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean): void {\r\n        if (isPortrait) {\r\n            this.updateChildElements(this.portraitStyleNodeList, this.styleNodeList);\r\n        } else {\r\n            this.updateChildElements(this.styleNodeList, this.portraitStyleNodeList);\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  FUNCTIONS\r\n    //******************************************************************************************************************\r\n\r\n    private updateChildElements(styleNodeList: Array<Element>, previousStyleNodeList: Array<Element>): void {\r\n        if (styleNodeList != null && previousStyleNodeList != null) {\r\n            if (styleNodeList.length === previousStyleNodeList.length) {\r\n                for (let i = 0; i < styleNodeList.length; i++) {\r\n                    let elementStyle = styleNodeList[i];\r\n                    let previousElementStyle = previousStyleNodeList[i];\r\n\r\n                    if (this.childs[elementStyle.nodeName] != null) {\r\n                        this.childs[elementStyle.nodeName].updateByNode(\r\n                            this.updateDefaultValues(elementStyle, previousElementStyle),\r\n                        );\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = this.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n\r\n    private updateDefaultValues(node: Element, previousNode: Element): Element {\r\n        if (!node.hasAttribute(\"X\") && previousNode.hasAttribute(\"X\")) {\r\n            node.setAttribute(\"X\", \"0\");\r\n        }\r\n\r\n        if (!node.hasAttribute(\"Y\") && previousNode.hasAttribute(\"Y\")) {\r\n            node.setAttribute(\"Y\", \"0\");\r\n        }\r\n\r\n        if (!node.hasAttribute(\"PivotX\") && previousNode.hasAttribute(\"PivotX\")) {\r\n            node.setAttribute(\"PivotX\", \"0\");\r\n        }\r\n\r\n        if (!node.hasAttribute(\"PivotY\") && previousNode.hasAttribute(\"PivotY\")) {\r\n            node.setAttribute(\"PivotY\", \"0\");\r\n        }\r\n\r\n        if (\r\n            !node.hasAttribute(\"Scale\") &&\r\n            !(node.hasAttribute(\"ScaleX\") || node.hasAttribute(\"ScaleY\")) &&\r\n            previousNode.hasAttribute(\"Scale\")\r\n        ) {\r\n            node.setAttribute(\"Scale\", \"1\");\r\n        }\r\n\r\n        if (!node.hasAttribute(\"Visible\") && previousNode.hasAttribute(\"Visible\")) {\r\n            node.setAttribute(\"Visible\", \"true\");\r\n        }\r\n\r\n        if (!node.hasAttribute(\"RemoveTweens\")) {\r\n            node.setAttribute(\"RemoveTweens\", \"false\");\r\n        }\r\n\r\n        //not inclde CASE attribute due to initial case state\r\n        if (node.hasAttribute(\"Case\")) {\r\n            node.removeAttribute(\"Case\");\r\n        }\r\n\r\n        return node;\r\n    }\r\n\r\n    clone(): LayoutContainerElement {\r\n        const element: LayoutContainerElement = new LayoutContainerElement();\r\n\r\n        element.style = this.style;\r\n        element.portraitStyle = this.portraitStyle;\r\n        element.styleNodeList = this.styleNodeList;\r\n        element.portraitStyleNodeList = this.portraitStyleNodeList;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        element.name = this.name;\r\n\r\n        element.childs = {};\r\n        element.removeChildren();\r\n        for (let key in this.childs) {\r\n            element.childs[key] = this.childs[key].clone();\r\n            element.addChild(element.childs[key]);\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n            let elementMask = <ShapeElement>this.maskGraphics.clone();\r\n            elementMask.position.x = this.maskGraphics.position.x;\r\n            elementMask.position.y = this.maskGraphics.position.y;\r\n\r\n            element.maskGraphics = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nconst LayoutContainerElementAttributes = {\r\n    PORTRAIT_STYLE: \"PortraitStyle\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { BonusRespinsActions } from \"../Common/Actions/BonusRespinsActions\";\r\nimport { UserControls } from \"../Common/UserControls/UserControls\";\r\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { GameData } from \"../Common/Datas/GameData\";\r\nimport { GameActions } from \"../Common/Actions/GameActions\";\r\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\r\nimport { BonusRespinsController } from \"../../GameComponents/BonusRespins/BonusRespinsController\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class DesktopBonusRespinsUserControls extends UserControls {\r\n    protected _controller: BonusRespinsController;\r\n\r\n    private _userControls: HTMLElement;\r\n    private _userControls_supreme: HTMLElement;\r\n    private _afterWinDelay: FrameTimerEventEmitter;\r\n    private _autoplayDelay: FrameTimerEventEmitter;\r\n\r\n    private _wasCalclulated: boolean = true;\r\n    private longIntro: boolean = false;\r\n\r\n    constructor() {\r\n        super(\"bonusrespins\");\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.registerActions();\r\n\r\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\r\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\r\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\r\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\r\n        this._userControls = document.getElementById(\"bonusUserControls\");\r\n    }\r\n\r\n    addController(controller: BonusRespinsController): void {\r\n        this._controller = controller;\r\n        this._controller.on(BonusRespinsController.StartReceived, this.startReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.SpinReceived, this.spinReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.RespinReceived, this.respinReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.EndReceived, this.endReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.MachineStopped, this.machineStopped.bind(this));\r\n        this._controller.on(BonusRespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.IntroFinished, this.introFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.OutroFinished, this.outroFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.SpinEnd, this.spinEnd.bind(this));\r\n    }\r\n\r\n    registerActions(): void {\r\n        this.actions.registerActions({\r\n            [BonusRespinsActions.ActionStart]: false,\r\n            [BonusRespinsActions.ActionBack]: false,\r\n            [BonusRespinsActions.ActionAutoplay]: false,\r\n            [BonusRespinsActions.ActionAutoplayStop]: false,\r\n            [BonusRespinsActions.ActionSpin]: false,\r\n            [BonusRespinsActions.ActionSpinStop]: false,\r\n        });\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\r\n        super.initReceived();\r\n\r\n        this._controller.initReceived();\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        }\r\n    }\r\n\r\n    restoreGameRound(collect: boolean = false): void {\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    startReceived(): void {\r\n        ModuleManager.outroModule(GameModules.Base);\r\n    }\r\n\r\n    spinReceived(): void {\r\n        if (DataManager.quickspinEnabled()) {\r\n            this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            HtmlController.dispatchUiAction(\"\");\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n        }\r\n    }\r\n\r\n    respinReceived(): void {\r\n        if (DataManager.quickspinEnabled()) {\r\n            this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n            HtmlController.dispatchUiAction(\"\");\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n        }\r\n    }\r\n\r\n    endReceived(): void {\r\n        ModuleManager.outroModule(GameModules.BonusRespins);\r\n    }\r\n\r\n    dispatchAction(action: string): void {\r\n        if (action === GameActions.ActionSpinOrStop) {\r\n            if (this.actions.getActionState(BonusRespinsActions.ActionStart)) {\r\n                action = BonusRespinsActions.ActionStart;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionBack)) {\r\n                action = BonusRespinsActions.ActionBack;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionSpin)) {\r\n                action = BonusRespinsActions.ActionSpin;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionSpinStop)) {\r\n                action = BonusRespinsActions.ActionSpinStop;\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.actions.getActionState(action)) {\r\n            super.dispatchAction(action);\r\n\r\n            switch (action) {\r\n                case BonusRespinsActions.ActionStart:\r\n                    this.start();\r\n                    break;\r\n                case BonusRespinsActions.ActionBack:\r\n                    this.back();\r\n                    break;\r\n                case BonusRespinsActions.ActionSpin:\r\n                    this.spin();\r\n                    break;\r\n                case BonusRespinsActions.ActionSpinStop:\r\n                    this.stop();\r\n                    break;\r\n                case BonusRespinsActions.ActionAutoplay:\r\n                    this.autoplay();\r\n                    break;\r\n                case BonusRespinsActions.ActionAutoplayStop:\r\n                    this.autoplayStop();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    start(): void {\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        this._controller.start();\r\n    }\r\n\r\n    spin(): void {\r\n        //we have only respins\r\n        this.respin();\r\n    }\r\n\r\n    respin(): void {\r\n        DataManager.Collectable = false;\r\n        ModuleManager.disableGamble();\r\n        this.actions.disableAllActions();\r\n\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            (GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            (GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString(),\r\n        );\r\n\r\n        if (DataManager.Autoplay) {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionAutoplayStop,\r\n                AppContext.gameConfiguration.AutoplayModeEnabled,\r\n            );\r\n        }\r\n        HtmlController.dispatchUiAction(\"\");\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n        this._controller.respin();\r\n\r\n        Platforms.Platforms.spinStarted();\r\n    }\r\n\r\n    back(): void {\r\n        this.disable();\r\n        ModuleManager.endBonus();\r\n    }\r\n\r\n    stop(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        HtmlController.dispatchUiAction(\"\");\r\n        DataManager.quickspinStopped();\r\n        this._controller.stop();\r\n    }\r\n\r\n    end(): void {\r\n        if (GameManager.bonusRespinsResponse != null && GameManager.bonusRespinsResponse.totalWin > 0) {\r\n            Platforms.Platforms.win(GameManager.bonusRespinsResponse.totalWin);\r\n        }\r\n        this._controller.end();\r\n    }\r\n\r\n    autoplayDelayed(): void {\r\n        this._autoplayDelay.stop();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n    }\r\n\r\n    autoplay(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.AutoplayCount === \"∞\") {\r\n            DataManager.Autoplay = true;\r\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n            this.spin();\r\n        } else {\r\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\r\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\r\n                DataManager.Autoplay = true;\r\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n                this.spin();\r\n            } else {\r\n                DataManager.Autoplay = false;\r\n                this.prepareNewGameRound();\r\n            }\r\n        }\r\n    }\r\n\r\n    autoplayStop(): void {\r\n        DataManager.Autoplay = false;\r\n        this.actions.changeActionState(BonusRespinsActions.ActionAutoplayStop, false);\r\n        HtmlController.updateActionElement(BonusRespinsActions.ActionAutoplayStop, false);\r\n    }\r\n\r\n    machineStopped(): void {\r\n        Platforms.Platforms.spinEnded();\r\n\r\n        this._wasCalclulated = GameManager.bonusRespinsResponse.currentWin === 0;\r\n\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n\r\n        if (DataManager.Autoplay && (DataManager.GameLimit || CustomUtils.isLastBonusSpin())) {\r\n            DataManager.Autoplay = false;\r\n        }\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            this.actions.disableAllActions();\r\n            if (DataManager.GameLimit) {\r\n                this.limit();\r\n            }\r\n        } else this.machineStopFinished();\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private spinEnd(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private machineStopFinished(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        if (GameManager.bonusRespinsResponse.currentWin > 0) {\r\n            this._afterWinDelay.start(30);\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n\r\n        // if(DataManager.Autoplay && GameManager.bonusRespinsResponse.currentWin === 0) {\r\n        //     this._autoplayDelay.start(15);\r\n        // }\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (CustomUtils.isRespin()) {\r\n            this.disable();\r\n            if (DataManager.Autoplay) {\r\n                this.actions.changeActionState(BonusRespinsActions.ActionAutoplayStop, true);\r\n                HtmlController.updateActionElements(this.getAllActions());\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            DataManager.Autoplay = false;\r\n            this.actions.disableAllActions();\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            return;\r\n        }\r\n\r\n        //this.prepareNewGameRound();\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        if (GameManager.bonusRespinsResponse != null && GameManager.bonusRespinsResponse.currentWin > 0) {\r\n            Platforms.Platforms.win(GameManager.bonusRespinsResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n\r\n        this._afterWinDelay.stop();\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            DataManager.Autoplay = false;\r\n            this.actions.disableAllActions();\r\n            this.actions.changeActionState(BonusRespinsActions.ActionBack, true);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n\r\n            return;\r\n        }\r\n\r\n        this.prepareNewGameRound();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        FreeRoundBonus.disableUi();\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.add(\"bonus\");\r\n        }\r\n\r\n        super.initIntro();\r\n        this._controller.initIntro();\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            this.actions.disableAllActions();\r\n            this.actions.changeActionState(BonusRespinsActions.ActionBack, true);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            return;\r\n        }\r\n\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        FreeRoundBonus.disableUi();\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n\r\n        this._controller.intro(long);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.add(\"bonus\");\r\n        }\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.prepareNewGameRound();\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    outro(): void {\r\n        DataManager.Autoplay = false;\r\n\r\n        this._controller.outro();\r\n\r\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    outroFinished(): void {\r\n        ModuleManager.introModule(GameModules.Base, true);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.remove(\"bonus\");\r\n        }\r\n    }\r\n\r\n    prepareNewGameRound(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        } else {\r\n            if (!DataManager.Autoplay) {\r\n                this.actions.changeActionStates({\r\n                    [BonusRespinsActions.ActionStart]: false,\r\n                    [BonusRespinsActions.ActionBack]: false,\r\n                    [BonusRespinsActions.ActionAutoplay]:\r\n                        !DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BonusRespinsActions.ActionAutoplayStop]:\r\n                        DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BonusRespinsActions.ActionSpin]: true,\r\n                    [BonusRespinsActions.ActionSpinStop]: false,\r\n                });\r\n            }\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    limit(): void {\r\n        LimitDialog.openDialog();\r\n\r\n        this.actions.changeActionStates({\r\n            [BonusRespinsActions.ActionStart]: false,\r\n            [BonusRespinsActions.ActionBack]: false,\r\n            [BonusRespinsActions.ActionAutoplay]: false,\r\n            [BonusRespinsActions.ActionAutoplayStop]: false,\r\n            [BonusRespinsActions.ActionSpin]: false,\r\n            [BonusRespinsActions.ActionSpinStop]: false,\r\n        });\r\n    }\r\n\r\n    enable(test?: any): void {\r\n        // DataManager.updateDataElement(GameData.DataBonusSpinRemainingCount, (GameManager.bonusRespinsResponse.bonusRespins.remainingCount).toString());\r\n        // DataManager.updateDataElement(GameData.DataBonusSpinCount, (GameManager.bonusRespinsResponse.bonusRespins.totalCount).toString());\r\n\r\n        this.actions.changeActionState(BonusRespinsActions.ActionStart, true);\r\n        HtmlController.updateActionElement(BonusRespinsActions.ActionStart, true);\r\n        this._controller.enable();\r\n    }\r\n\r\n    disable(): void {\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Desktop/DesktopBonusRespinsUserControls.ts\n **/","export class BonusRespinsActions {\r\n    static ActionStart: string = \"BONUS_START\";\r\n    static ActionBack: string = \"BONUS_BACK_TO_GAME\";\r\n    static ActionSpin: string = \"BONUS_SPIN\";\r\n    static ActionSpinStop: string = \"BONUS_SPIN_STOP\";\r\n    static ActionAutoplay: string = \"BONUS_AUTOPLAY\";\r\n    static ActionAutoplayStop: string = \"BONUS_AUTOPLAY_STOP\";\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Actions/BonusRespinsActions.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Controller } from \"../Controller\";\r\nimport { BonusRespinsModel } from \"./BonusRespinsModel\";\r\nimport { BonusRespinsView } from \"./BonusRespinsView\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\n\r\n@engineComponent(ComponentTypes.Controller)\r\nexport class BonusRespinsController extends Controller {\r\n    public static readonly StartReceived: string = \"eventStartReceived\";\r\n    public static readonly SpinReceived: string = \"eventSpinReceived\";\r\n    public static readonly RespinReceived: string = \"eventRespinReceived\";\r\n    public static readonly EndReceived: string = \"eventEndReceived\";\r\n    public static readonly MachineStopped: string = \"eventMachineStopped\";\r\n    public static readonly SpinEnd: string = \"eventSpinEnd\";\r\n    public static readonly WinCalculationFinished: string = \"eventWinCalculationFinished\";\r\n    public static readonly AllWinsFinished: string = \"eventAllWinsFinished\";\r\n    public static readonly IntroFinished: string = \"eventIntroFinished\";\r\n    public static readonly OutroFinished: string = \"eventOutroFinished\";\r\n\r\n    protected _view: BonusRespinsView;\r\n    protected _model: BonusRespinsModel;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    startInitialization(view: any): void {\r\n        if (DEBUG) {\r\n            this.log(\"startInitialization\");\r\n        }\r\n\r\n        if (view instanceof BonusRespinsView) {\r\n            this._view = view;\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR view is not instance of BaseView\");\r\n            }\r\n        }\r\n\r\n        this._model = new BonusRespinsModel(this);\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._view.initReceived(this);\r\n    }\r\n\r\n    disableLogo(): void {\r\n        this._view.disableLogo();\r\n    }\r\n\r\n    initIntro(): void {\r\n        this._view.initIntro();\r\n    }\r\n\r\n    start(): void {\r\n        this._model.start();\r\n    }\r\n\r\n    spin(): void {\r\n        this._model.spin();\r\n        this._view.spin();\r\n    }\r\n\r\n    respin(): void {\r\n        this._view.respin();\r\n        this._model.respin();\r\n    }\r\n\r\n    end(): void {\r\n        if (DataManager.GameLimit) this.endReceived();\r\n        else this._model.end();\r\n    }\r\n\r\n    stop(): void {\r\n        this._view.stop();\r\n    }\r\n\r\n    startReceived(): void {\r\n        this._view.startReceived();\r\n        this.emit(BonusRespinsController.StartReceived);\r\n    }\r\n\r\n    spinReceived(): void {\r\n        this._view.spinReceived();\r\n        this.emit(BonusRespinsController.SpinReceived);\r\n    }\r\n\r\n    respinReceived(): void {\r\n        //Machine.Respin = true;\r\n        this._view.spinReceived();\r\n        this.emit(BonusRespinsController.RespinReceived);\r\n    }\r\n\r\n    endReceived(): void {\r\n        this._view.endReceived();\r\n        this.emit(BonusRespinsController.EndReceived);\r\n    }\r\n\r\n    spinEnd(): void {\r\n        this.emit(BonusRespinsController.SpinEnd);\r\n    }\r\n\r\n    machineStopped(): void {\r\n        this.emit(BonusRespinsController.MachineStopped);\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        this.emit(BonusRespinsController.WinCalculationFinished);\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        this.emit(BonusRespinsController.AllWinsFinished);\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        this._view.intro(long);\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.emit(BonusRespinsController.IntroFinished);\r\n    }\r\n\r\n    outro(): void {\r\n        this._view.outro();\r\n    }\r\n\r\n    outroFinished(): void {\r\n        this.emit(BonusRespinsController.OutroFinished);\r\n    }\r\n\r\n    enable(): void {\r\n        this._view.enable();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/BonusRespins/BonusRespinsController.ts\n **/","import { BonusRespinsController } from \"./BonusRespinsController\";\r\nimport { Utils } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { MessageManager } from \"../../Managers/MessageManager\";\r\n\r\nexport class BonusRespinsModel {\r\n    protected controller: BonusRespinsController;\r\n    private _currentStep: number;\r\n\r\n    constructor(controller: BonusRespinsController) {\r\n        this.controller = controller;\r\n        this._currentStep = 0;\r\n    }\r\n\r\n    public start(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient.bonusRespinsStart().then((response: any): any => {\r\n            MessageManager.postpone(this.startReceived.bind(this), response);\r\n        });\r\n    }\r\n\r\n    public spin(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient\r\n            .bonusRespinsSpin(Communication.Game.GameModules.BonusRespins)\r\n            .then((response: any): any => {\r\n                MessageManager.postpone(this.spinReceived.bind(this), response);\r\n            });\r\n    }\r\n\r\n    public end(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient.endBonusRespins().then((response: any): any => {\r\n            MessageManager.postpone(this.endReceived.bind(this), response);\r\n        });\r\n    }\r\n\r\n    public respin(): void {\r\n        if (GameManager.requestSend) {\r\n            return;\r\n        }\r\n\r\n        GameManager.requestSend = true;\r\n        DataManager.controlAutoplay();\r\n        GameManager.gameClient\r\n            .respin(Communication.Game.GameModules.BonusRespins, GameManager.bonusRespinsResponse.respin)\r\n            .then((response: any): any => {\r\n                MessageManager.postpone(this.respinReceived.bind(this), response);\r\n            });\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  RESPONSES\r\n    //******************************************************************************************************************\r\n\r\n    protected startReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            Platforms.Platforms.featureStarted({ type: Communication.Game.GameModules.BonusRespins });\r\n            this.controller.startReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    protected spinReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.spinReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    protected endReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            Platforms.Platforms.featureFinished({ type: Communication.Game.GameModules.BonusRespins });\r\n            this.controller.endReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n\r\n    private respinReceived(response: Communication.Game.GameResponse): void {\r\n        if (!Utils.isNullOrUndefined(response)) {\r\n            GameManager.parseResponses(response);\r\n            DataManager.updateResponseData();\r\n\r\n            this.controller.respinReceived();\r\n        }\r\n\r\n        GameManager.requestSend = false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/BonusRespins/BonusRespinsModel.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Communication } from \"neo-games\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { BonusRespinsController } from \"./BonusRespinsController\";\r\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { StageController } from \"../../Components/StageController\";\r\nimport { Symbols } from \"../Symbols\";\r\nimport { Back, Expo, Linear, Sine, TweenLite } from \"gsap\";\r\nimport { SwitchElement } from \"../../Components/Elements/Graphics/SwitchElement\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { BonusSymbol } from \"./BonusSymbol\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { ImageTextCounterElement } from \"../../Components/Elements/Texts/ImageTextCounterElement\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { Character } from \"../Character\";\r\nimport { BaseElement } from \"../../Components/Elements/Graphics/BaseElement\";\r\nimport { ImageTextElement } from \"../../Components/Elements/Texts/ImageTextElement\";\r\nimport { LayoutContainerElement } from \"../../CustomComponents/LayoutContainerElement\";\r\nimport { LayoutManager, LayoutManagerAttributes } from \"../../Managers/LayoutManager\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\nconst CELL_SIZE = 146;\r\nconst FULL_ROUNDS = 1;\r\nconst MYSTERY_SYMBOL = 8;\r\nconst STEP_FADE_DIST = 5;\r\n\r\ntype CellProp = {\r\n    position: number[];\r\n    frameDirect: string;\r\n};\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BonusRespinsView extends LayoutContainerElement {\r\n    private _controller: BonusRespinsController;\r\n    private _symbols: Symbols;\r\n    private _symbolsContainer: ContainerElement;\r\n    private _symbolsContainerTop: ContainerElement;\r\n    private _fieldSymbolIds: Array<number>;\r\n    private _bigSymbolContainer: ContainerElement;\r\n    private _frameLightContainer: ContainerElement;\r\n    private _mysteryFeature: SwitchElement;\r\n    private _frameAnim: SwitchElement;\r\n    private _selectFrame: SwitchElement;\r\n    private _messages: SwitchElement;\r\n    private _winCounter: SwitchElement;\r\n    private _mysteryTotalX: SwitchElement;\r\n    private _mysteryTotalXText: ImageTextCounterElement;\r\n    private _mysteryTotalXValue: number;\r\n    private _currentCellID: number;\r\n    private _currentRound: number;\r\n    private _startDistance: number;\r\n    private _targetCellID: number;\r\n    private _stepNum: number;\r\n    private _fastStopMode: boolean;\r\n    private isDesktop: boolean;\r\n\r\n    private _fieldSymbols: Array<BonusSymbol>;\r\n    private _bigSymbol: BonusSymbol;\r\n    private _currentSymbID: number;\r\n\r\n    private _duration: number;\r\n    private _callback: Function;\r\n\r\n    private _introDelay: FrameTimerEventEmitter;\r\n    private _mysteryDelay: FrameTimerEventEmitter;\r\n    private _updateMultipliersDelay: FrameTimerEventEmitter;\r\n    private _outroDelay: FrameTimerEventEmitter;\r\n    private _messageDelay: FrameTimerEventEmitter;\r\n    private _collectDelay: FrameTimerEventEmitter;\r\n\r\n    private _character: Character;\r\n    private _selframeStartPos: number[];\r\n    private _cellSize: number;\r\n\r\n    constructor() {\r\n        super();\r\n        this._currentCellID = 0;\r\n        this._currentRound = 0;\r\n        this._startDistance = 0;\r\n        this._stepNum = 0;\r\n        this._fieldSymbolIds = [];\r\n        this._fieldSymbols = [];\r\n\r\n        this.isDesktop = new LayoutManager().getPlatform() == LayoutManagerAttributes.DESKTOP;\r\n\r\n        this._introDelay = CreateFrameTimer(\"introDelay\");\r\n        this._introDelay.on(FrameTimerEvents.Complete, this.introFinished.bind(this));\r\n\r\n        this._mysteryDelay = CreateFrameTimer(\"mysteryDelay\");\r\n        this._mysteryDelay.on(FrameTimerEvents.Complete, this.mysteryAnimation.bind(this));\r\n\r\n        this._updateMultipliersDelay = CreateFrameTimer(\"updateMultipliersDelay\");\r\n        this._updateMultipliersDelay.on(FrameTimerEvents.Complete, this._updateMultipliers.bind(this, true));\r\n\r\n        this._outroDelay = CreateFrameTimer(\"outroDelay\");\r\n        this._outroDelay.on(FrameTimerEvents.Complete, this.outroFinished.bind(this));\r\n\r\n        this._messageDelay = CreateFrameTimer(\"messageDelay\");\r\n        this._messageDelay.on(FrameTimerEvents.Complete, this._showFinalMessage.bind(this));\r\n\r\n        this._collectDelay = CreateFrameTimer(\"collectDelay\");\r\n        this._collectDelay.on(FrameTimerEvents.Complete, this._winCollectCompleted.bind(this));\r\n\r\n        StageController.bonusStageContainer = this;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n        if (this.childs != null) {\r\n            this._symbols = <Symbols>this.childs[\"Symbols\"];\r\n            this._symbolsContainer = <ContainerElement>this.childs[\"SymbolsContainer\"];\r\n            this._symbolsContainerTop = <ContainerElement>this.childs[\"SymbolsContainerTop\"];\r\n            this._bigSymbolContainer = <ContainerElement>this.childs[\"BigSymbolContainer\"];\r\n            this._frameLightContainer = <ContainerElement>this.childs[\"FrameLightContainer\"];\r\n            this._mysteryFeature = <SwitchElement>this.childs[\"MysteryFeature\"];\r\n            this._frameAnim = <SwitchElement>this.childs[\"FB_FrameAnim\"];\r\n            this._selectFrame = <SwitchElement>this.childs[\"BonusFrameLight\"];\r\n            this._messages = <SwitchElement>this.childs[\"Messages\"];\r\n            this._winCounter = <SwitchElement>this.childs[\"FB_WinCollect\"];\r\n            this._mysteryTotalX = <SwitchElement>this.childs[\"MysteryTotalX\"];\r\n            this._mysteryTotalXText = <ImageTextCounterElement>(\r\n                this._mysteryTotalX.getChildElementByName(\"CounterTotalX\")\r\n            );\r\n            this._character = new Character(<SwitchElement>this.childs[\"FB_Character\"]);\r\n            this._selectFrame.goToCase(\"N\");\r\n            this._frameLightContainer && this._frameLightContainer.addChild(this._selectFrame);\r\n\r\n            this._selframeStartPos = [this._selectFrame.x, this._selectFrame.y];\r\n        }\r\n        this._character.onWave = () => {\r\n            this._frameAnim.goToCase(\"WAVE\");\r\n            PlayList.play(\"SND_BonusFrameAnim\");\r\n        };\r\n        if (node.hasAttribute(\"CellSize\")) {\r\n            this._cellSize = parseFloat(node.getAttribute(\"CellSize\"));\r\n        }\r\n    }\r\n\r\n    disableLogo(): void {\r\n        // if (this.childs['Logo'] != null) {\r\n        //     this.removeChild(this.childs['Logo']);\r\n        // }\r\n    }\r\n\r\n    initReceived(controller: BonusRespinsController): void {\r\n        this._controller = controller;\r\n        if (GameManager.bonusRespinsResponse != null) {\r\n            if (\r\n                GameManager.bonusRespinsResponse.initData != null &&\r\n                GameManager.bonusRespinsResponse.initData.reels !== null\r\n            ) {\r\n                this._fieldSymbolIds = GameManager.bonusRespinsResponse.initData.reels[0];\r\n                this._setFieldSymbols();\r\n                this._updateCurrentCell();\r\n                this._updateMultipliers();\r\n                if (this._messages != null && CustomUtils.isLastBonusSpin()) {\r\n                    this._character.event(Character.BONUS_FINAL);\r\n                    this._showFinalMessage();\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no bonus reponse\");\r\n            }\r\n        }\r\n        this.visible = false;\r\n    }\r\n\r\n    initIntro(): void {\r\n        StageController.baseStage = false;\r\n        StageController.bonusStage = true;\r\n        document.body.classList.toggle(\"fruitbonus\", true);\r\n\r\n        this.visible = true;\r\n\r\n        PlayList.loop(\"SND_BonusLoop\");\r\n        PlayList.loop(\"SND_LoopAmbience\");\r\n    }\r\n\r\n    spin(): void {\r\n        // StageController.baseStage = false;\r\n        // StageController.bonusStage = true;\r\n        // PlayList.loop('SND_BonusLoop');\r\n        // if (this._bonusMessageStart != null && !this._bonusMessageStart.classList.contains(HtmlController.DisabledClass)) {\r\n        //     this._bonusMessageStart.classList.add(HtmlController.DisabledClass);\r\n        // }\r\n        //this._machine.spinStart(this._winAnimator.reset(true), true, this._winAnimator.currentSymbols);\r\n    }\r\n\r\n    respin(): void {\r\n        this._character.event(Character.BONUS_SPIN);\r\n\r\n        this._currentRound = FULL_ROUNDS;\r\n        this._bigSymbol && this._bigSymbol.fadeOut();\r\n        this._mysteryFeature.goToCase(\"EMPTY\");\r\n        this._mysteryFeature.alpha = 1;\r\n        this.winboxAnim(false);\r\n\r\n        this._fastStopMode = false;\r\n        this._stepNum = 0;\r\n        this._startDistance = 0;\r\n        this._step();\r\n        this._frameAnim.goToCase(\"SPIN\");\r\n        while (this._symbolsContainerTop.children.length) {\r\n            this._symbolsContainer.addChild(this._symbolsContainerTop.removeChildAt(0));\r\n        }\r\n        // PlayList.stop('SND_BaseRecapLoop');\r\n        // PlayList.stop('SND_BaseLoop');\r\n    }\r\n\r\n    stop(): void {\r\n        this._fastStopMode = true;\r\n        //this._fastStep();\r\n    }\r\n\r\n    startReceived(): void {\r\n        this._setFieldSymbols();\r\n        this._updateCurrentCell();\r\n        this._updateMultipliers();\r\n\r\n        let introAnimTimer = CreateFrameTimer(\"introAnimTimer\");\r\n        introAnimTimer.on(FrameTimerEvents.Complete, () => {\r\n            this._frameAnim.goToCase(\"WAVE\");\r\n            PlayList.play(\"SND_BonusFrameAnim\");\r\n        });\r\n        introAnimTimer.start(60);\r\n    }\r\n\r\n    _setFieldSymbols() {\r\n        this._symbolsContainer.removeChildren();\r\n        this._fieldSymbols.length = 0;\r\n        for (let i = 0; i < this._fieldSymbolIds.length; i++) {\r\n            let smb: BonusSymbol;\r\n            let cId = this._fieldSymbolIds[i];\r\n            if (cId == 0) cId = 14;\r\n            smb = new BonusSymbol(\r\n                this._symbols.getSymbol(cId - 1, \"BONUS\"),\r\n                cId,\r\n                false,\r\n                [70, 112],\r\n                \"fontNumbersSmall\",\r\n                0.9,\r\n            );\r\n            smb.alpha = 1;\r\n            let position = this._getCellProps(i).position;\r\n            smb.x = position[0];\r\n            smb.y = position[1];\r\n            this._symbolsContainer.addChild(smb);\r\n            this._fieldSymbols.push(smb);\r\n            if (this._symbolsContainer.rotation > 0) smb.rotation = -this._symbolsContainer.rotation;\r\n        }\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean): void {\r\n        super.onLayoutChange(isPortrait);\r\n        for (let i = 0; i < this._fieldSymbolIds.length; i++) {\r\n            this._fieldSymbols[i].rotation = isPortrait ? -Math.PI / 2 : 0;\r\n        }\r\n    }\r\n\r\n    _updateCurrentCell() {\r\n        this._currentCellID = GameManager.bonusRespinsResponse.screen.reels[0].index;\r\n        let selectFramePosition = this._getCellProps(this._currentCellID).position;\r\n        this._selectFrame.x = this._selframeStartPos[0] + selectFramePosition[0];\r\n        this._selectFrame.y = this._selframeStartPos[1] + selectFramePosition[1];\r\n    }\r\n\r\n    _updateMultipliers(isBombAnim: boolean = false) {\r\n        this._updateMultipliersDelay.stop();\r\n        let multipliers = GameManager.bonusRespinsResponse.customData.collectingSymbolsMultiplier;\r\n        let bombDelay = 0;\r\n        if (multipliers) {\r\n            bombDelay = 25;\r\n            for (let i = 0; i < this._fieldSymbols.length; i++) {\r\n                let smb = this._fieldSymbols[i];\r\n                let mult = multipliers[smb.symbolId];\r\n                let changed = smb.updateNumber(mult, isBombAnim ? bombDelay : -1);\r\n                changed && (bombDelay += 5);\r\n            }\r\n        }\r\n        if (isBombAnim) {\r\n            this._controller.winCalculationFinished();\r\n            this._collectDelay.start(60 + bombDelay);\r\n\r\n            let sndBombTimer = CreateFrameTimer(\"sndBombTimer\");\r\n            sndBombTimer.on(FrameTimerEvents.Complete, () => PlayList.play(\"SND_BonusChangeMults\"));\r\n            sndBombTimer.start(25);\r\n        }\r\n    }\r\n\r\n    _getCellProps(index: number): CellProp {\r\n        let prop: CellProp;\r\n        let cs = this._cellSize;\r\n        if (index < 7) {\r\n            prop = { position: [cs * (index + 2), 0], frameDirect: \"L\" };\r\n        } else if (index < 12) {\r\n            prop = { position: [cs * 9, cs * (index - 7)], frameDirect: \"T\" };\r\n        } else if (index < 21) {\r\n            prop = { position: [cs * (21 - index), cs * 5], frameDirect: \"R\" };\r\n        } else if (index < 26) {\r\n            prop = { position: [0, cs * (26 - index)], frameDirect: \"B\" };\r\n        } else {\r\n            prop = { position: [cs * (index - 26), 0], frameDirect: \"L\" };\r\n        }\r\n        if (index == 7 || index == 12 || index == 21 || index == 26) prop.frameDirect = \"N\";\r\n        return prop;\r\n    }\r\n\r\n    spinReceived(): void {\r\n        let data = GameManager.bonusRespinsResponse.screen.reels[0];\r\n        this._targetCellID = data.index;\r\n        this._currentSymbID = data.symbols[0];\r\n        this._startDistance = this._calcDistance();\r\n\r\n        this._bigSymbolContainer.removeChildren();\r\n        if (this._currentSymbID > 0) {\r\n            this._bigSymbol = new BonusSymbol(\r\n                this._symbols.getSymbol(this._currentSymbID - 1, \"BONUS_BIG\"),\r\n                this._currentSymbID,\r\n                true,\r\n                [66, 56],\r\n                \"fontNumbersBig\",\r\n                0.9,\r\n            );\r\n            this._bigSymbolContainer.addChild(this._bigSymbol);\r\n        }\r\n    }\r\n\r\n    private _step() {\r\n        this._currentCellID += 1;\r\n        this._stepNum += 1;\r\n        if (this._currentCellID >= this._fieldSymbolIds.length) {\r\n            this._currentCellID = 0;\r\n        }\r\n\r\n        let durCoef = 1;\r\n        let distance = this._calcDistance();\r\n        /*if(this._stepNum < STEP_FADE_DIST) durCoef = STEP_FADE_DIST - this._stepNum;\r\n        else*/ if (this._startDistance) {\r\n            if (distance < STEP_FADE_DIST) durCoef = STEP_FADE_DIST - distance;\r\n        }\r\n        durCoef -= 0.3 * durCoef;\r\n\r\n        if (this._fastStopMode) {\r\n            durCoef = 0.01;\r\n        }\r\n\r\n        let cellProp = this._getCellProps(this._currentCellID);\r\n        TweenLite.to(this._selectFrame, 0.085 * durCoef, {\r\n            x: this._selframeStartPos[0] + cellProp.position[0],\r\n            y: this._selframeStartPos[1] + cellProp.position[1],\r\n            onComplete: () => {\r\n                if (this._fieldSymbolIds[this._currentCellID] > 0 && !this._fastStopMode) {\r\n                    this._fieldSymbols[this._currentCellID].bounceOnField();\r\n                }\r\n                this._selectFrame.goToCase(cellProp.frameDirect);\r\n                if (this._currentCellID == this._targetCellID) {\r\n                    if (this._currentRound == 0) {\r\n                        if (cellProp.frameDirect != \"N\") this._bounce(cellProp);\r\n                        else {\r\n                            this.machineStopped();\r\n                            this._selectFrame.goToCase(\"N\");\r\n                        }\r\n                        PlayList.play(\"SND_FrameStepEnd\");\r\n                    } else {\r\n                        this._currentRound--;\r\n                        this._step();\r\n                    }\r\n                } else this._step();\r\n            },\r\n            ease: Linear.easeNone,\r\n        });\r\n        this._fastStopMode || PlayList.play(\"SND_FrameStep\");\r\n    }\r\n\r\n    _bounce(cellProp: CellProp) {\r\n        let dx = 0;\r\n        let dy = 0;\r\n        let cellPos = {\r\n            x: this._selframeStartPos[0] + cellProp.position[0],\r\n            y: this._selframeStartPos[1] + cellProp.position[1],\r\n        };\r\n        switch (cellProp.frameDirect) {\r\n            case \"L\":\r\n                dx = +30;\r\n                break;\r\n            case \"T\":\r\n                dy = +30;\r\n                break;\r\n            case \"R\":\r\n                dx = -30;\r\n                break;\r\n            case \"B\":\r\n                dy = -30;\r\n                break;\r\n        }\r\n        TweenLite.to(this._selectFrame, this._fastStopMode ? 0.1 : 0.2, {\r\n            x: cellPos.x + dx,\r\n            y: cellPos.y + dy,\r\n            onComplete: () => {\r\n                this._selectFrame.goToCase(\"N\");\r\n                TweenLite.to(this._selectFrame, this._fastStopMode ? 0.1 : 0.3, {\r\n                    x: cellPos.x,\r\n                    y: cellPos.y,\r\n                    ease: Expo.easeOut,\r\n                });\r\n                this.machineStopped();\r\n            },\r\n        });\r\n    }\r\n\r\n    _calcDistance(): number {\r\n        let distance =\r\n            this._targetCellID >= this._currentCellID\r\n                ? this._targetCellID - this._currentCellID\r\n                : this._fieldSymbolIds.length + this._targetCellID - this._currentCellID;\r\n        return this._currentRound * this._fieldSymbolIds.length + distance;\r\n    }\r\n\r\n    endReceived(): void {}\r\n\r\n    // onReelStopped(): void {\r\n    // }\r\n\r\n    machineStopped(): void {\r\n        if (this._currentSymbID == MYSTERY_SYMBOL) {\r\n            this._character.event(Character.BONUS_MISTERY);\r\n            this._mysteryFeature.goToCase(\"MYSTERY\");\r\n            this._mysteryDelay.start(80);\r\n            PlayList.play(\"SND_BonusSymbMytery\");\r\n        } else {\r\n            if (!CustomUtils.isLastBonusSpin()) {\r\n                this._character.event(Character.BONUS_SYMBOL_WIN);\r\n                this._winCounterStart(90);\r\n                this._updateMultipliersDelay.start(170);\r\n            } else this._winCollectCompleted();\r\n        }\r\n        if (this._currentSymbID != 0) {\r\n            this._symbolsContainerTop.addChild(this._fieldSymbols[this._currentCellID]);\r\n        }\r\n        this._controller.spinEnd();\r\n    }\r\n\r\n    private mysteryAnimation(): void {\r\n        this._bigSymbolContainer.removeChildren();\r\n        let data = GameManager.bonusRespinsResponse.wins[0].customData;\r\n\r\n        let mysteryCaseName = String(data.mysteryType).toUpperCase();\r\n        if (data.mysteryType == \"add\") this._mysteryFeature.goToCase(mysteryCaseName + \"_\" + data.mysteryValue);\r\n        else this._mysteryFeature.goToCase(mysteryCaseName);\r\n\r\n        if (data.mysteryType == \"collect\") {\r\n            let delayTimer = CreateFrameTimer(\"startTotalCollectingDelay\");\r\n            delayTimer.on(FrameTimerEvents.Complete, this.startTotalCollecting.bind(this));\r\n            delayTimer.start(30);\r\n        } else this._updateMultipliersDelay.start(15);\r\n\r\n        switch (data.mysteryType) {\r\n            case \"add\":\r\n            case \"multiply\":\r\n                PlayList.play(\"SND_BonusSymbAdd\");\r\n                break;\r\n            case \"collect\":\r\n                PlayList.play(\"SND_BonusSymbTotal\");\r\n                break;\r\n        }\r\n    }\r\n\r\n    private startTotalCollecting() {\r\n        this._mysteryTotalXText.setBitmapText(0);\r\n        this._mysteryTotalX.goToCase(\"SHOW\");\r\n        this._mysteryTotalXValue = 0;\r\n        this.totalCollectX(0, () => {\r\n            this._winCounterStart(40, 90);\r\n            this._mysteryTotalX.goToCase(\"HIDE\");\r\n            this._collectDelay.start(125);\r\n        });\r\n    }\r\n\r\n    private totalCollectX(index: number, onComplete: () => void) {\r\n        if (index >= this._fieldSymbols.length) {\r\n            onComplete();\r\n            return;\r\n        }\r\n        let smb = this._fieldSymbols[index];\r\n        if (smb.symbolId == 8 || smb.symbolId == 14) this.totalCollectX(index + 1, onComplete);\r\n        else {\r\n            let tf = smb.cloneTextField();\r\n            tf.bitmapText.text = \"x\" + smb.multiplier;\r\n            if (this._symbolsContainer.rotation > 0) {\r\n                tf.rotation = -this._symbolsContainer.rotation;\r\n                let px = tf.position.x;\r\n                let py = tf.position.y;\r\n                tf.position.x = smb.position.x + py;\r\n                tf.position.y = smb.position.y - px;\r\n            } else {\r\n                tf.position.x = smb.position.x + tf.position.x;\r\n                tf.position.y = smb.position.y + tf.position.y;\r\n            }\r\n            this._symbolsContainerTop.addChild(tf);\r\n            tf.scale.set(1.2, 1.2);\r\n            PlayList.play(\"SND_MysteryXCounter\");\r\n            TweenLite.to(tf.scale, 0.2, { x: 1, y: 1 });\r\n            let toX: number;\r\n            let toY: number;\r\n            if (this._symbolsContainer.rotation == 0) {\r\n                toX = this._mysteryTotalX.x - this._symbolsContainer.x;\r\n                toY = this._mysteryTotalX.y - this._symbolsContainer.y;\r\n            } else {\r\n                // portrait case, when _symbolsContainer rotation = 90 grad\r\n                let sc = this._symbolsContainer.scale.x;\r\n                toX = -this._symbolsContainer.y / sc + this._mysteryTotalX.y / sc;\r\n                toY = +this._symbolsContainer.x / sc - this._mysteryTotalX.x / sc;\r\n            }\r\n            TweenLite.to(tf, 0.2, {\r\n                x: toX,\r\n                y: toY,\r\n                ease: Sine.easeInOut,\r\n                onComplete: () => {\r\n                    this._mysteryTotalXText.start(\r\n                        this._mysteryTotalXValue,\r\n                        this._mysteryTotalXValue + smb.multiplier,\r\n                        15,\r\n                        0,\r\n                    );\r\n                    this._mysteryTotalXValue += smb.multiplier;\r\n                    this.totalCollectX(index + 1, onComplete);\r\n                    this._symbolsContainerTop.removeChild(tf);\r\n                },\r\n            });\r\n        }\r\n    }\r\n\r\n    private _winCounterStart(delay: number, countDuration = 30): void {\r\n        let delayTimer = CreateFrameTimer(\"wincounterDelay\");\r\n        delayTimer.on(FrameTimerEvents.Complete, () => {\r\n            let textField = <ImageTextCounterElement>this._winCounter.getChildElementByName(\"CounterTotal\");\r\n            textField.start(0, GameManager.bonusRespinsResponse.wins[0].amount, countDuration, 10);\r\n            this._winCounter.goToCase(this.isDesktop ? \"COUNT_DESKTOP\" : \"COUNT\");\r\n            this.winboxAnim(true);\r\n            PlayList.loop(\"SND_BaseCreditboxLoop\");\r\n            let counterSoundTimer = CreateFrameTimer(\"counterSoundTimer\");\r\n            counterSoundTimer.on(FrameTimerEvents.Complete, () => {\r\n                PlayList.stop(\"SND_BaseCreditboxLoop\");\r\n                PlayList.play(\"SND_BaseCreditboxEnd\");\r\n            });\r\n            counterSoundTimer.start(countDuration + 10);\r\n            if (\r\n                GameManager.bonusRespinsResponse.wins[0].customData &&\r\n                GameManager.bonusRespinsResponse.wins[0].customData.mysteryType == \"collect\"\r\n            ) {\r\n                TweenLite.to(this._mysteryFeature, 0.5, { alpha: 0 });\r\n            }\r\n        });\r\n        delayTimer.start(delay);\r\n    }\r\n\r\n    private _winCollectCompleted(): void {\r\n        this._collectDelay.stop();\r\n        this._controller.machineStopped();\r\n        this._controller.winCalculationFinished();\r\n        this.finishWinAnimator();\r\n        if (this._currentSymbID == MYSTERY_SYMBOL) {\r\n            let data = GameManager.bonusRespinsResponse.wins[0].customData;\r\n            this._character.event(\r\n                data.mysteryType == \"collect\" ? Character.BONUS_TOTAL_WIN : Character.BONUS_MISTERY_END,\r\n            );\r\n            if (GameManager.bonusRespinsResponse.wins[0].customData.mysteryType != \"collect\") {\r\n                TweenLite.to(this._mysteryFeature, 0.5, { alpha: 0 });\r\n            }\r\n        }\r\n    }\r\n\r\n    private winboxAnim(active: boolean) {\r\n        let fieldWin = document.getElementById(\"bonusUserControls\").getElementsByClassName(\"field win\")[0];\r\n        if (!fieldWin) return;\r\n        if (active) {\r\n            let delay = CreateFrameTimer(\"winBoxAnimDelay\");\r\n            delay.on(FrameTimerEvents.Complete, () => {\r\n                fieldWin.classList.toggle(\"anim\", true);\r\n            });\r\n            delay.start(80);\r\n        } else {\r\n            fieldWin.classList.toggle(\"anim\", false);\r\n        }\r\n    }\r\n\r\n    private totalWinCountFinished(): void {\r\n        // PlayList.play('SND_BonusReturn');\r\n    }\r\n\r\n    finishWinAnimator(): void {\r\n        //PlayList.loop('SND_BonusWait', 15);\r\n\r\n        if (this._messages != null && CustomUtils.isLastBonusSpin()) {\r\n            this._character.event(Character.BONUS_FINAL);\r\n            this._messageDelay.start(60);\r\n        } else {\r\n            this._controller.allWinsFinished();\r\n        }\r\n    }\r\n\r\n    _showFinalMessage() {\r\n        this._messages.goToCase(\"SHOW_MESSAGE\");\r\n        PlayList.play(\"SND_BonusEndMsg\");\r\n        this._controller.allWinsFinished();\r\n        let textField = <ImageTextCounterElement>this._messages.getChildElementByName(\"WinCounter\");\r\n        //textField.bitmapText.text = GameManager.bonusRespinsResponse.totalWin.toFixed(2);\r\n        textField.start(0, GameManager.gameResponse.totalWin, 0);\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        StageController.baseStage = false;\r\n        StageController.bonusStage = true;\r\n        document.body.classList.toggle(\"fruitbonus\", true);\r\n        this._messages.goToCase(\"EMPTY\");\r\n        this.visible = true;\r\n\r\n        this._introDelay.start(30);\r\n\r\n        this._character.enable();\r\n\r\n        PlayList.loop(\"SND_BonusLoop\");\r\n    }\r\n\r\n    introFinished(): void {\r\n        //PlayList.loop('SND_BonusLoop');\r\n\r\n        this._controller.introFinished();\r\n    }\r\n\r\n    outro(): void {\r\n        this._character.disable();\r\n        PlayList.stop(\"SND_BonusLoop\");\r\n        // PlayList.stop('SND_BonusWait');\r\n        // PlayList.stop('SND_FSWait');\r\n\r\n        this.outroToBase();\r\n    }\r\n\r\n    private outroToBase(): void {\r\n        if (this._messages != null && this._messages.getCurrentCase() == \"SHOW_MESSAGE\") {\r\n            this._messages.goToCase(\"HIDE_MESSAGE\");\r\n        }\r\n\r\n        this._outroDelay.start(30);\r\n    }\r\n\r\n    outroFinished(): void {\r\n        StageController.bonusStage = false;\r\n        document.body.classList.toggle(\"fruitbonus\", false);\r\n\r\n        this.visible = false;\r\n\r\n        this._controller.outroFinished();\r\n    }\r\n\r\n    enable(): void {\r\n        //  PlayList.play('SND_BonusMessage');\r\n        //  PlayList.loop('SND_BonusWait');\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/BonusRespins/BonusRespinsView.ts\n **/","import { Back, Expo, Linear, TweenLite } from \"gsap\";\r\nimport { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { ContainerElement } from \"../../Components/Elements/Graphics/ContainerElement\";\r\nimport { SpineElement } from \"../../Components/Elements/Graphics/SpineElement\";\r\nimport { ImageTextElement } from \"../../Components/Elements/Texts/ImageTextElement\";\r\nimport { Symbol } from \"../Symbol\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BonusSymbol extends ContainerElement {\r\n    public symbolId: number;\r\n    public multiplier: number;\r\n    private textField: ImageTextElement;\r\n    private symbol: Symbol;\r\n    private isSpecSymbol: boolean;\r\n    private isBigImage: boolean;\r\n    private textScale: number;\r\n\r\n    constructor(smb: Symbol, sid: number, isBig: boolean, textPos: number[], textFont: string, textScale: number = 1) {\r\n        super();\r\n        this.symbol = smb;\r\n        this.symbolId = sid;\r\n        this.isBigImage = isBig;\r\n        this.isSpecSymbol = sid < 9 || sid > 13;\r\n        this.addChild(smb);\r\n        this.alpha = 0;\r\n        this.textScale = textScale;\r\n        let smbSize = [smb.width, smb.height];\r\n        if (!isBig) this.symbol.position.set(smbSize[0] / 2, smbSize[1] / 2);\r\n\r\n        if (!this.isSpecSymbol) {\r\n            this.textField = new ImageTextElement();\r\n            this.textField.font = textFont;\r\n            this.textField.textAlign = \"center\";\r\n            this.textField.textBaseline = \"middle\";\r\n            this.textField.scale.set(textScale);\r\n            this.textField.bitmapText = new PIXI.extras.BitmapText(\"0\", { font: this.textField.font });\r\n            this.textField.position.set(smbSize[0] / 2, smbSize[1] * 0.78);\r\n            this.textField.addChild(this.textField.bitmapText);\r\n            this.addChild(this.textField);\r\n        }\r\n    }\r\n\r\n    cloneTextField(): ImageTextElement {\r\n        return this.textField.clone();\r\n    }\r\n\r\n    bounceOnField() {\r\n        if (this.isBigImage) return;\r\n        TweenLite.to(this.symbol.scale, 0.15, {\r\n            x: 1.5,\r\n            y: 1.5,\r\n            ease: Linear.ease,\r\n            onComplete: () => {\r\n                TweenLite.to(this.symbol.scale, 0.3, { x: 1, y: 1, ease: Expo.easeOut });\r\n            },\r\n        });\r\n    }\r\n\r\n    fadeIn(updateNumber?: number) {\r\n        this.scale = new PIXI.Point(0.2, 0.2);\r\n        if (!this.alpha) {\r\n            TweenLite.to(this, 0.3, { alpha: 1 });\r\n            TweenLite.to(this.scale, 0.5, {\r\n                x: 1,\r\n                y: 1,\r\n                ease: Back.easeOut,\r\n                onComplete: () => {\r\n                    if (updateNumber != null) {\r\n                        this.updateNumber(updateNumber, 0);\r\n                    }\r\n                },\r\n            });\r\n        }\r\n    }\r\n\r\n    fadeOut() {\r\n        if (this.alpha) TweenLite.to(this, 0.3, { alpha: 0 });\r\n    }\r\n\r\n    fadeInMystery() {\r\n        this.symbol.goToCase(\"BONUS_MYSTERY\");\r\n        this.fadeIn();\r\n    }\r\n\r\n    fadeOutMystery(onComplete?: Function) {\r\n        TweenLite.to(this.scale, 0.3, { x: 0.3, y: 0.3, ease: Back.easeIn });\r\n        TweenLite.to(this, 0.3, {\r\n            alpha: 0,\r\n            onComplete: () => {\r\n                if (onComplete) onComplete();\r\n            },\r\n        });\r\n    }\r\n\r\n    updateNumber(num: number, bombDelay: number = -1): boolean {\r\n        this.multiplier = num;\r\n        let change: string = \"x\" + num;\r\n        if (!this.isSpecSymbol && this.textField.bitmapText.text != change) {\r\n            if (bombDelay >= 0) {\r\n                let bombTimer = CreateFrameTimer(\"bombDelay\");\r\n                bombTimer.on(FrameTimerEvents.Complete, () => {\r\n                    this.symbol.goToCase(this.isBigImage ? \"BONUS_BIG_BOMB\" : \"BONUS_BOMB\");\r\n                    this.textField.bitmapText.text = change;\r\n                    this.textField.pivot.x = this.textField.width / 2;\r\n                    TweenLite.to(this.textField.scale, 0.15, {\r\n                        x: this.textScale * 1.5,\r\n                        y: this.textScale * 1.5,\r\n                        ease: Linear.ease,\r\n                        onComplete: () => {\r\n                            TweenLite.to(this.textField.scale, 0.3, {\r\n                                x: this.textScale,\r\n                                y: this.textScale,\r\n                                ease: Expo.easeOut,\r\n                            });\r\n                        },\r\n                    });\r\n                });\r\n                bombTimer.start(bombDelay);\r\n            } else {\r\n                this.textField.bitmapText.text = change;\r\n                this.textField.pivot.x = this.textField.width / 2;\r\n                this.textField.pivot.y = this.textField.height / 2;\r\n            }\r\n            return true;\r\n        } else return false;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/BonusRespins/BonusSymbol.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Communication, Platforms } from \"neo-games\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { UserControls } from \"../Common/UserControls/UserControls\";\r\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { GameData } from \"../Common/Datas/GameData\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\r\nimport { BonusRespinsActions } from \"../Common/Actions/BonusRespinsActions\";\r\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\r\nimport { BonusRespinsController } from \"../../GameComponents/BonusRespins/BonusRespinsController\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { GameActions } from \"../Common/Actions/GameActions\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\nvar WinType = Communication.Game.WinType;\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class MobileBonusRespinsUserControls extends UserControls {\r\n    protected _controller: BonusRespinsController;\r\n\r\n    private _userControls: HTMLElement;\r\n    private _userControls_supreme: HTMLElement;\r\n    private _afterWinDelay: FrameTimerEventEmitter;\r\n    private _autoplayDelay: FrameTimerEventEmitter;\r\n\r\n    private _wasCalclulated: boolean = true;\r\n\r\n    constructor() {\r\n        super(\"bonusrespins\");\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.registerActions();\r\n\r\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\r\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\r\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\r\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\r\n        this._userControls = document.getElementById(\"bonusUserControls\");\r\n    }\r\n\r\n    addController(controller: BonusRespinsController): void {\r\n        this._controller = controller;\r\n        this._controller.on(BonusRespinsController.StartReceived, this.startReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.SpinReceived, this.spinReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.RespinReceived, this.respinReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.EndReceived, this.endReceived.bind(this));\r\n        this._controller.on(BonusRespinsController.MachineStopped, this.machineStopped.bind(this));\r\n        this._controller.on(BonusRespinsController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.IntroFinished, this.introFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.OutroFinished, this.outroFinished.bind(this));\r\n        this._controller.on(BonusRespinsController.SpinEnd, this.spinEnd.bind(this));\r\n    }\r\n\r\n    registerActions(): void {\r\n        this.actions.registerActions({\r\n            [BonusRespinsActions.ActionStart]: false,\r\n            [BonusRespinsActions.ActionBack]: false,\r\n            [BonusRespinsActions.ActionAutoplay]: false,\r\n            [BonusRespinsActions.ActionAutoplayStop]: false,\r\n            [BonusRespinsActions.ActionSpin]: false,\r\n            [BonusRespinsActions.ActionSpinStop]: false,\r\n        });\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\r\n        super.initReceived();\r\n\r\n        this._controller.initReceived();\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        }\r\n    }\r\n\r\n    restoreGameRound(): void {\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    startReceived(): void {\r\n        ModuleManager.outroModule(GameModules.Base);\r\n    }\r\n\r\n    spinReceived(): void {\r\n        if (DataManager.quickspinEnabled()) {\r\n            this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            HtmlController.dispatchUiAction(\"\");\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n        }\r\n    }\r\n\r\n    respinReceived(): void {\r\n        if (DataManager.quickspinEnabled()) {\r\n            this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n            HtmlController.dispatchUiAction(\"\");\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n        }\r\n    }\r\n\r\n    endReceived(): void {\r\n        ModuleManager.outroModule(GameModules.BonusRespins);\r\n    }\r\n\r\n    dispatchAction(action: string): void {\r\n        if (action === GameActions.ActionSpinOrStop) {\r\n            if (this.actions.getActionState(BonusRespinsActions.ActionStart)) {\r\n                action = BonusRespinsActions.ActionStart;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionBack)) {\r\n                action = BonusRespinsActions.ActionBack;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionSpin)) {\r\n                action = BonusRespinsActions.ActionSpin;\r\n            } else if (this.actions.getActionState(BonusRespinsActions.ActionSpinStop)) {\r\n                action = BonusRespinsActions.ActionSpinStop;\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.actions.getActionState(action)) {\r\n            super.dispatchAction(action);\r\n\r\n            switch (action) {\r\n                case BonusRespinsActions.ActionStart:\r\n                    this.start();\r\n                    break;\r\n                case BonusRespinsActions.ActionBack:\r\n                    this.back();\r\n                    break;\r\n                case BonusRespinsActions.ActionSpin:\r\n                    this.spin();\r\n                    break;\r\n                case BonusRespinsActions.ActionSpinStop:\r\n                    this.stop();\r\n                    break;\r\n                case BonusRespinsActions.ActionAutoplay:\r\n                    this.autoplay();\r\n                    break;\r\n                case BonusRespinsActions.ActionAutoplayStop:\r\n                    this.autoplayStop();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    start(): void {\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        this._controller.start();\r\n    }\r\n\r\n    spin(): void {\r\n        //we have only respins\r\n        this.respin();\r\n    }\r\n\r\n    respin(): void {\r\n        DataManager.Collectable = false;\r\n        ModuleManager.disableGamble();\r\n        this.actions.disableAllActions();\r\n\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            (GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            (GameManager.bonusRespinsResponse.bonusRespins.remainingCount - 1).toString(),\r\n        );\r\n\r\n        if (DataManager.Autoplay) {\r\n            this.actions.changeActionState(\r\n                BonusRespinsActions.ActionAutoplayStop,\r\n                AppContext.gameConfiguration.AutoplayModeEnabled,\r\n            );\r\n        }\r\n        HtmlController.dispatchUiAction(\"\");\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n        this._controller.respin();\r\n\r\n        Platforms.Platforms.spinStarted();\r\n    }\r\n\r\n    back(): void {\r\n        this.disable();\r\n        ModuleManager.endBonus();\r\n    }\r\n\r\n    stop(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        HtmlController.dispatchUiAction(\"\");\r\n        DataManager.quickspinStopped();\r\n        this._controller.stop();\r\n    }\r\n\r\n    end(): void {\r\n        if (GameManager.bonusRespinsResponse != null && GameManager.bonusRespinsResponse.totalWin > 0) {\r\n            Platforms.Platforms.win(GameManager.bonusRespinsResponse.totalWin);\r\n        }\r\n\r\n        this._controller.end();\r\n    }\r\n\r\n    autoplayDelayed(): void {\r\n        this._autoplayDelay.stop();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n    }\r\n\r\n    autoplay(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.AutoplayCount === \"∞\") {\r\n            DataManager.Autoplay = true;\r\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n            this.spin();\r\n        } else {\r\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\r\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\r\n                DataManager.Autoplay = true;\r\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n                this.spin();\r\n            } else {\r\n                DataManager.Autoplay = false;\r\n                this.prepareNewGameRound();\r\n            }\r\n        }\r\n    }\r\n\r\n    autoplayStop(): void {\r\n        DataManager.Autoplay = false;\r\n        this.actions.changeActionState(BonusRespinsActions.ActionAutoplayStop, false);\r\n        HtmlController.updateActionElement(BonusRespinsActions.ActionAutoplayStop, false);\r\n    }\r\n\r\n    machineStopped(): void {\r\n        Platforms.Platforms.spinEnded();\r\n\r\n        this._wasCalclulated = GameManager.bonusRespinsResponse.currentWin === 0;\r\n\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n\r\n        if (DataManager.Autoplay && (DataManager.GameLimit || CustomUtils.isLastBonusSpin())) {\r\n            DataManager.Autoplay = false;\r\n        }\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            this.actions.disableAllActions();\r\n            if (DataManager.GameLimit) {\r\n                this.limit();\r\n            }\r\n        } else this.machineStopFinished();\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private spinEnd(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private machineStopFinished(): void {\r\n        this.actions.changeActionState(BonusRespinsActions.ActionSpinStop, false);\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        if (GameManager.bonusRespinsResponse.currentWin > 0) {\r\n            this._afterWinDelay.start(30);\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n\r\n        // if(DataManager.Autoplay && GameManager.bonusRespinsResponse.currentWin === 0) {\r\n        //     this._autoplayDelay.start(15);\r\n        // }\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (CustomUtils.isRespin()) {\r\n            this.disable();\r\n            if (DataManager.Autoplay) {\r\n                this.actions.changeActionState(BonusRespinsActions.ActionAutoplayStop, true);\r\n                HtmlController.updateActionElements(this.getAllActions());\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            DataManager.Autoplay = false;\r\n            this.actions.disableAllActions();\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            return;\r\n        }\r\n\r\n        //this.prepareNewGameRound();\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        if (GameManager.bonusRespinsResponse != null && GameManager.bonusRespinsResponse.currentWin > 0) {\r\n            Platforms.Platforms.win(GameManager.bonusRespinsResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n\r\n        this._afterWinDelay.stop();\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            DataManager.Autoplay = false;\r\n            this.actions.disableAllActions();\r\n            this.actions.changeActionState(BonusRespinsActions.ActionBack, true);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n\r\n            return;\r\n        }\r\n\r\n        this.prepareNewGameRound();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        FreeRoundBonus.disableUi();\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.add(\"bonus\");\r\n        }\r\n\r\n        super.initIntro();\r\n        this._controller.initIntro();\r\n\r\n        if (CustomUtils.isLastBonusSpin()) {\r\n            this.actions.disableAllActions();\r\n            this.actions.changeActionState(BonusRespinsActions.ActionBack, true);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            return;\r\n        }\r\n\r\n        this.prepareNewGameRound();\r\n    }\r\n\r\n    intro(long: boolean = false): void {\r\n        FreeRoundBonus.disableUi();\r\n        DataManager.updateGameDataFromModule(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n        DataManager.updateDataElement(\r\n            GameData.DataBonusSpinRemainingCount,\r\n            GameManager.bonusRespinsResponse.bonusRespins.remainingCount.toString(),\r\n        );\r\n\r\n        this._controller.intro(long);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null && !this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.add(\"bonus\");\r\n        }\r\n    }\r\n\r\n    introFinished(): void {\r\n        this.prepareNewGameRound();\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    outro(): void {\r\n        DataManager.Autoplay = false;\r\n\r\n        this._controller.outro();\r\n\r\n        if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.add(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    outroFinished(): void {\r\n        ModuleManager.introModule(GameModules.Base, true);\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n        if (this._userControls_supreme != null && this._userControls_supreme.classList.contains(\"bonus\")) {\r\n            this._userControls_supreme.classList.remove(\"bonus\");\r\n        }\r\n    }\r\n\r\n    prepareNewGameRound(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        } else {\r\n            if (!DataManager.Autoplay) {\r\n                this.actions.changeActionStates({\r\n                    [BonusRespinsActions.ActionStart]: false,\r\n                    [BonusRespinsActions.ActionBack]: false,\r\n                    [BonusRespinsActions.ActionAutoplay]:\r\n                        !DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BonusRespinsActions.ActionAutoplayStop]:\r\n                        DataManager.Autoplay && AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BonusRespinsActions.ActionSpin]: true,\r\n                    [BonusRespinsActions.ActionSpinStop]: false,\r\n                });\r\n            }\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    limit(): void {\r\n        LimitDialog.openDialog();\r\n\r\n        this.actions.changeActionStates({\r\n            [BonusRespinsActions.ActionStart]: false,\r\n            [BonusRespinsActions.ActionBack]: false,\r\n            [BonusRespinsActions.ActionAutoplay]: false,\r\n            [BonusRespinsActions.ActionAutoplayStop]: false,\r\n            [BonusRespinsActions.ActionSpin]: false,\r\n            [BonusRespinsActions.ActionSpinStop]: false,\r\n        });\r\n    }\r\n\r\n    enable(): void {\r\n        // DataManager.updateDataElement(GameData.DataBonusSpinRemainingCount, (GameManager.bonusRespinsResponse.bonusRespins.remainingCount).toString());\r\n        // DataManager.updateDataElement(GameData.DataBonusSpinCount, (GameManager.bonusRespinsResponse.bonusRespins.totalCount).toString());\r\n\r\n        this.actions.changeActionState(BonusRespinsActions.ActionStart, true);\r\n        HtmlController.updateActionElement(BonusRespinsActions.ActionStart, true);\r\n        this._controller.enable();\r\n    }\r\n\r\n    disable(): void {\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileBonusRespinsUserControls.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { ClientHost, Communication, GameEngine, Platforms } from \"neo-games\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../Utils/FrameTimer\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { BaseActions } from \"../Common/Actions/BaseActions\";\r\nimport { UserControls } from \"../Common/UserControls/UserControls\";\r\nimport { HtmlController } from \"../../HTMLComponents/HtmlController\";\r\nimport { GameManager } from \"../../Managers/GameManager\";\r\nimport { Paytable } from \"../Common/Paytable/Paytable\";\r\nimport { GameData } from \"../Common/Datas/GameData\";\r\nimport { GameActions } from \"../Common/Actions/GameActions\";\r\nimport { BaseController } from \"../../GameComponents/Base/BaseController\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { ModuleManager } from \"../../Managers/ModuleManager\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { BalanceManager } from \"../../Managers/BalanceManager\";\r\nimport { LimitDialog } from \"../Common/Dialogs/LimitDialog\";\r\nimport { ResponsibleDialog1 } from \"../Common/Dialogs/ResponsibleDialog1\";\r\nimport { FreeRoundBonus } from \"../Common/Bonuses/FreeRoundBonus\";\r\nimport { Jackpot } from \"../Common/Bonuses/Jackpot\";\r\nimport { CustomUtils } from \"../../Utils/CustomUtils\";\r\nimport { BetHigherThanMinDialog } from \"../Common/Dialogs/BetHigherThanMinDialog\";\r\nimport { FreeRoundBonusDialog } from \"../Common/Dialogs/FreeRoundBonusDialog\";\r\nimport { FreeRoundBonusIcon } from \"../Common/Dialogs/FreeRoundBonusIcon\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class MobileBaseUserControls extends UserControls {\r\n    protected _controller: BaseController;\r\n\r\n    private _betSettings: HTMLElement;\r\n    private _userControls: HTMLElement;\r\n    private _userControls_supreme: HTMLElement;\r\n    private _paytable: Paytable;\r\n    private _afterWinDelay: FrameTimerEventEmitter;\r\n    private _autoplayDelay: FrameTimerEventEmitter;\r\n\r\n    private _wasCalclulated: boolean = true;\r\n    private _unColectedWin: number = 0;\r\n    private _unColectedWinDelay: FrameTimerEventEmitter;\r\n    private _machineStopped: boolean = true;\r\n    private longIntro: boolean = false;\r\n\r\n    private _respinDelay: FrameTimerEventEmitter;\r\n\r\n    constructor() {\r\n        super(\"base\");\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.registerActions();\r\n\r\n        this._afterWinDelay = CreateFrameTimer(\"afterWinDelay\");\r\n        this._afterWinDelay.on(FrameTimerEvents.Complete, this.prepareNewGameRound.bind(this));\r\n\r\n        this._autoplayDelay = CreateFrameTimer(\"autoplayDelay\");\r\n        this._autoplayDelay.on(FrameTimerEvents.Complete, this.autoplayDelayed.bind(this));\r\n\r\n        this._unColectedWinDelay = CreateFrameTimer(\"unColectedWinDelay\");\r\n        this._unColectedWinDelay.on(FrameTimerEvents.Complete, this.unColectedWinDelay.bind(this));\r\n\r\n        // this._respinDelay = CreateFrameTimer('respinDelay');\r\n        // this._respinDelay.on(FrameTimerEvents.Complete, this.respin.bind(this));\r\n\r\n        this._userControls = document.getElementById(\"userControls\");\r\n\r\n        this._betSettings = document.getElementById(\"betSettings\");\r\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    addController(controller: BaseController): void {\r\n        this._controller = controller;\r\n        this._controller.on(BaseController.SpinReceived, this.spinReceived.bind(this));\r\n        //this._controller.on(BaseController.RespinReceived, this.respinReceived.bind(this));\r\n        this._controller.on(BaseController.MachineStopped, this.machineStopped.bind(this));\r\n        this._controller.on(BaseController.WinCalculationFinished, this.winCalculationFinished.bind(this));\r\n        this._controller.on(BaseController.AllWinsFinished, this.allWinsFinished.bind(this));\r\n        this._controller.on(BaseController.IntroFinished, this.introFinished.bind(this));\r\n        this._controller.on(BaseController.OutroFinished, this.outroFinished.bind(this));\r\n        this._controller.on(BaseController.QuickWinCalculationFinished, this.quickWinCalculationFinished.bind(this));\r\n\r\n        //this._controller.on(BaseController.RunRespin, this.runRespin.bind(this));\r\n    }\r\n\r\n    registerActions(): void {\r\n        this.actions.registerActions({\r\n            [BaseActions.ActionAutoplay]: false,\r\n            [BaseActions.ActionAutoplayStop]: false,\r\n            [BaseActions.ActionBaseCollect]: false,\r\n            [BaseActions.ActionBetCycle]: false,\r\n            [BaseActions.ActionBetPlus]: false,\r\n            [BaseActions.ActionBetMinus]: false,\r\n            [BaseActions.ActionSpin]: false,\r\n            [BaseActions.ActionSpinStop]: false,\r\n        });\r\n\r\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    initReceived(): void {\r\n        this._userControls_supreme = document.getElementById(\"userControls_supreme\");\r\n\r\n        super.initReceived();\r\n\r\n        this._controller.initReceived();\r\n\r\n        this._paytable = new Paytable();\r\n        this._paytable.initialize();\r\n\r\n        if (GameManager.gameResponse != null) {\r\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                DataManager.updateGameDataFromModule(\r\n                    GameData.DataTotalWin,\r\n                    GameManager.gameResponse.totalWin.toString(),\r\n                );\r\n            }\r\n        }\r\n\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null && !ModuleManager.gambleActive()) {\r\n            this._userControls_supreme.style.display = \"none\";\r\n        }\r\n\r\n        DataManager.updateDataElements();\r\n    }\r\n\r\n    collectReceived(): void {\r\n        FreeRoundBonus.enableUi();\r\n        Platforms.Platforms.roundEnded({\r\n            id: GameManager.gameResponse.roundId,\r\n            win: this._unColectedWin,\r\n            balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n        });\r\n        Platforms.Platforms.balanceUpdated({ amount: GameManager.gameResponse.balance.real });\r\n\r\n        super.collectReceived();\r\n\r\n        this._wasCalclulated = true;\r\n        DataManager.Collectable = true;\r\n        DataManager.updateDataElements();\r\n\r\n        this.prepareNewGameRound();\r\n\r\n        if (AppContext.gameConfiguration.CollectOnUnCalculatedWin && this._unColectedWin > 0) {\r\n            DataManager.updateDataElement(GameData.DataTotalWin, this._unColectedWin.toString());\r\n            this.changeWinBox(true);\r\n        } else {\r\n            if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n                DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            }\r\n            this.changeWinBox();\r\n        }\r\n        this._unColectedWinDelay.stop();\r\n        //this._unColectedWinDelay.start(75);\r\n        this._unColectedWin = 0;\r\n\r\n        if (FreeRoundBonus.isLastFrb) {\r\n            FreeRoundBonus.endFreeRounds();\r\n            ModuleManager.disableBase();\r\n            return;\r\n        }\r\n    }\r\n\r\n    restoreGameRound(collect: boolean = false): void {\r\n        super.collectReceived();\r\n        this.changeWinBox(collect);\r\n\r\n        FreeRoundBonus.enableUi();\r\n\r\n        DataManager.Collectable = true;\r\n\r\n        if (this._unColectedWin == 0) {\r\n            this._controller.resetWinAnimator();\r\n        }\r\n        this.prepareNewGameRound();\r\n        this.updateReelsByBetChange();\r\n    }\r\n\r\n    spinReceived(): void {\r\n        FreeRoundBonus.frbSpin();\r\n\r\n        if (DataManager.quickspinEnabled()) {\r\n            this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            HtmlController.dispatchUiAction(\"\");\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n            this._controller.stop();\r\n        } else {\r\n            this.actions.changeActionState(\r\n                BaseActions.ActionSpinStop,\r\n                AppContext.gameConfiguration.GameEnableReelsStop,\r\n            );\r\n            HtmlController.updateActionElements(this.getAllActions());\r\n            DataManager.updateDataElement(GameData.DataRoundId);\r\n        }\r\n    }\r\n\r\n    // respinReceived(): void\r\n    // {\r\n    //     this.actions.changeActionState(BaseActions.ActionSpinStop, AppContext.gameConfiguration.GameEnableReelsStop);\r\n    //     HtmlController.updateActionElements(this.getAllActions());\r\n    //     DataManager.updateDataElement(GameData.DataRoundId);\r\n    // }\r\n\r\n    dispatchAction(action: string): void {\r\n        if (ModuleManager.gambleActive()) {\r\n            return;\r\n        }\r\n\r\n        if (action === GameActions.ActionSpinOrStop) {\r\n            if (this.actions.getActionState(BaseActions.ActionSpin)) {\r\n                action = BaseActions.ActionSpin;\r\n            } else if (this.actions.getActionState(BaseActions.ActionSpinStop)) {\r\n                action = BaseActions.ActionSpinStop;\r\n            } else {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (this.actions.getActionState(action)) {\r\n            if (action === BaseActions.ActionBaseCollect) {\r\n                this.changeWinBox(true);\r\n            } else {\r\n                this.changeWinBox();\r\n            }\r\n\r\n            PlayList.play(\"SND_Click\");\r\n            super.dispatchAction(action);\r\n\r\n            switch (action) {\r\n                case BaseActions.ActionSpin:\r\n                    this.spin();\r\n                    break;\r\n                case BaseActions.ActionSpinStop:\r\n                    this.stop();\r\n                    break;\r\n                case BaseActions.ActionAutoplay:\r\n                    this.autoplay();\r\n                    break;\r\n                case BaseActions.ActionAutoplayStop:\r\n                    this.autoplayStop();\r\n                    break;\r\n                case BaseActions.ActionBetCycle:\r\n                    this.changeBet(false, false, true);\r\n                    break;\r\n                case BaseActions.ActionBetPlus:\r\n                    this.changeBet(false, false, false);\r\n                    break;\r\n                case BaseActions.ActionBetMinus:\r\n                    this.changeBet(true, false, false);\r\n                    break;\r\n                case BaseActions.ActionBaseCollect:\r\n                    this.collect();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    collect(): void {\r\n        if (!this._wasCalclulated) {\r\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\r\n                Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n            }\r\n        }\r\n\r\n        super.collect();\r\n\r\n        ModuleManager.disableGamble();\r\n        this.disable();\r\n        this.playCollectSound();\r\n\r\n        this._controller.collect();\r\n\r\n        LimitDialog.closeDialog();\r\n        GameManager.collect(GameModules.Base);\r\n\r\n        if (!(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElement(\r\n                GameData.DataTotalWin,\r\n                !AppContext.gameDefinition.Gamble ? \"0\" : this._unColectedWin.toString(),\r\n            );\r\n        }\r\n        //this._unColectedWinDelay.start(75);\r\n    }\r\n\r\n    unColectedWinDelay(): void {\r\n        DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n    }\r\n\r\n    spin(): void {\r\n        this._machineStopped = false;\r\n\r\n        FreeRoundBonus.disableUi();\r\n        if (FreeRoundBonus.hasNewActiveOffer()) {\r\n            if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                FreeRoundBonus.enableUi();\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (this.checkJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (\r\n            ResponsibleDialog1.showResponsibleDialog1OnCollect &&\r\n            !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")\r\n        ) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                GameManager.canExit();\r\n                this.changeWinBox();\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        if (BetHigherThanMinDialog.canOpenDialog()) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            }\r\n            BetHigherThanMinDialog.openDialog();\r\n            return;\r\n        }\r\n\r\n        if (Paytable.shouldOpen(true, true)) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox(true);\r\n                this.collect();\r\n            } else {\r\n                Paytable.show();\r\n            }\r\n            return;\r\n        }\r\n\r\n        if (\r\n            !DataManager.Autoplay &&\r\n            !this._wasCalclulated &&\r\n            !DataManager.GameRoundClosed &&\r\n            AppContext.gameConfiguration.CollectOnUnCalculatedWin\r\n        ) {\r\n            this.changeWinBox(true);\r\n            this.collect();\r\n            return;\r\n        } else {\r\n            this.changeWinBox();\r\n            if (!this._wasCalclulated) {\r\n                if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0) {\r\n                    Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n                }\r\n            }\r\n            if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && this._wasCalclulated) {\r\n                this._controller.forceShowCollectSymbols();\r\n            }\r\n        }\r\n\r\n        if (GameManager.gameResponse.totalWin > 0 && !DataManager.GameRoundClosed) {\r\n            const balanceTotal = parseFloat(DataManager.getDataById(GameData.DataBalanceTotal));\r\n            const balanceAfter = parseFloat(NumberUtils.add(GameManager.gameResponse.totalWin, balanceTotal));\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: balanceAfter,\r\n                inSpin: true,\r\n            });\r\n        }\r\n\r\n        if (!Platforms.Platforms.canSpinOnCollect) {\r\n            this.autoplayStop();\r\n            this.changeWinBox(true);\r\n            this.collect();\r\n            return;\r\n        }\r\n\r\n        if (!BalanceManager.hasCredit(false, true)) {\r\n            DataManager.Autoplay = false;\r\n            ModuleManager.disableGamble();\r\n            this.prepareNewGameRound();\r\n            return;\r\n        }\r\n\r\n        DataManager.Collectable = false;\r\n        ModuleManager.disableGamble();\r\n        this.actions.disableAllActions();\r\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n        }\r\n        if (DataManager.Autoplay) {\r\n            if (\r\n                !DataManager.AutoplayStarted &&\r\n                GameManager.baseResponse != null &&\r\n                GameManager.baseResponse.totalWin != null &&\r\n                GameManager.baseResponse.totalWin > 0\r\n            ) {\r\n                DataManager.updateLossLimit(GameManager.baseResponse.totalWin);\r\n            }\r\n            DataManager.updateLossLimit();\r\n            this.actions.changeActionState(\r\n                BaseActions.ActionAutoplayStop,\r\n                AppContext.gameConfiguration.AutoplayModeEnabled,\r\n            );\r\n        }\r\n        HtmlController.dispatchUiAction(\"\");\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        this.playCollectSound();\r\n\r\n        DataManager.updateTotalGain(true);\r\n        BalanceManager.fixBalance();\r\n        if (!DataManager.GameRoundClosed || (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElement(GameData.DataTotalWin);\r\n        }\r\n        this._controller.spin();\r\n\r\n        LimitDialog.closeDialog();\r\n\r\n        this._wasCalclulated = false;\r\n\r\n        Platforms.Platforms.roundStarted({\r\n            totalBet: BetManager.Bet,\r\n            freeRound: FreeRoundBonus.inFrb,\r\n            userAction: DataManager.getTrustedUserAction(BaseActions.ActionSpin),\r\n        });\r\n        Platforms.Platforms.spinStarted();\r\n        Platforms.Platforms.balanceUpdated({ amount: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)) });\r\n    }\r\n\r\n    // respin(): void\r\n    // {\r\n    //     this._machineStopped = false;\r\n\r\n    //     this._respinDelay.stop();\r\n\r\n    //     ModuleManager.disableGamble();\r\n    //     this.actions.disableAllActions();\r\n    //     if(DataManager.Autoplay) {\r\n    //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n    //     }\r\n    //     HtmlController.dispatchUiAction('');\r\n    //     HtmlController.updateActionElements(this.getAllActions());\r\n\r\n    //     DataManager.updateDataElement(GameData.DataTotalWin);\r\n    //     this._controller.respin();\r\n\r\n    //     Platforms.Platforms.spinStarted();\r\n    // }\r\n\r\n    stop(): void {\r\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        HtmlController.dispatchUiAction(\"\");\r\n        DataManager.quickspinStopped();\r\n        this._controller.stop();\r\n    }\r\n\r\n    autoplayDelayed(): void {\r\n        this._autoplayDelay.stop();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n    }\r\n\r\n    autoplay(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (this.checkJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (DataManager.AutoplayCount === \"∞\") {\r\n            DataManager.Autoplay = true;\r\n            DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n            this.spin();\r\n        } else {\r\n            DataManager.AutoplayCount = (parseInt(DataManager.AutoplayCount) - 1).toString();\r\n            if (parseInt(DataManager.AutoplayCount) >= 0) {\r\n                DataManager.Autoplay = true;\r\n                DataManager.updateDataElement(GameData.DataAutoplayCount, DataManager.AutoplayCount);\r\n                this.spin();\r\n            } else {\r\n                DataManager.Autoplay = false;\r\n                this.prepareNewGameRound();\r\n            }\r\n        }\r\n    }\r\n\r\n    autoplayStop(): void {\r\n        DataManager.Autoplay = false;\r\n\r\n        Platforms.Platforms.autoplayStop();\r\n\r\n        if (this._machineStopped) {\r\n            if (DataManager.GameRoundClosed) {\r\n                FreeRoundBonus.enableUi();\r\n                Platforms.Platforms.roundEnded();\r\n                if (FreeRoundBonus.isLastFrb) {\r\n                    FreeRoundBonus.endFreeRounds();\r\n                    ModuleManager.disableBase();\r\n                }\r\n            }\r\n        }\r\n\r\n        this.actions.changeActionState(BaseActions.ActionAutoplayStop, false);\r\n        HtmlController.updateActionElement(BaseActions.ActionAutoplayStop, false);\r\n    }\r\n\r\n    changeBet(decrease: boolean = false, max: boolean = false, cycle: boolean = false): void {\r\n        if (!DataManager.GameRoundClosed) {\r\n            this._unColectedWin = 0;\r\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            this.changeWinBox();\r\n            this.collect();\r\n        } else {\r\n            this._controller.collect();\r\n            DataManager.updateDataElement(GameData.DataTotalWin, \"0\");\r\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\r\n            DataManager.updateDataElement(GameData.DataBalanceReal);\r\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\r\n            LimitDialog.closeDialog();\r\n        }\r\n        BetManager.changeBet(decrease, max, cycle);\r\n        this._paytable.updateDataValues();\r\n\r\n        if (BetManager.minBet) {\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, false);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, false);\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\r\n        } else if (BetManager.maxBet) {\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, false);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, false);\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\r\n        } else {\r\n            this.actions.changeActionState(BaseActions.ActionBetPlus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetPlus, true);\r\n            this.actions.changeActionState(BaseActions.ActionBetMinus, true);\r\n            HtmlController.updateActionElement(BaseActions.ActionBetMinus, true);\r\n        }\r\n\r\n        this.updateReelsByBetChange();\r\n    }\r\n\r\n    updateReelsByBetChange(): void {\r\n        this._controller.updateReelsByBetChange();\r\n    }\r\n\r\n    machineStopped(): void {\r\n        this._machineStopped = true;\r\n        Platforms.Platforms.spinEnded();\r\n\r\n        DataManager.stopAutoplayIfLossLimit();\r\n        DataManager.stopAutoplayIfWinLimit();\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin === 0) {\r\n            FreeRoundBonus.enableUi();\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n            });\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        this._unColectedWinDelay.stop();\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n        //     return;\r\n        // }\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            FreeRoundBonus.disableUi();\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        if (DataManager.Autoplay) {\r\n            if (DataManager.AutoplayCount === 0 + \"\") {\r\n                DataManager.Autoplay = false;\r\n            }\r\n        }\r\n\r\n        if (GameManager.baseResponse.totalWin === 0) {\r\n            this._wasCalclulated = true;\r\n            DataManager.Collectable = true;\r\n        } else {\r\n            this._wasCalclulated = false;\r\n        }\r\n\r\n        ModuleManager.enableGamble();\r\n        this.actions.changeActionState(BaseActions.ActionSpinStop, false);\r\n        if (GameManager.baseResponse.totalWin > 0) {\r\n            this._afterWinDelay.start(30);\r\n        } else {\r\n            this.prepareNewGameRound();\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        if (DataManager.Autoplay && GameManager.baseResponse.totalWin === 0) {\r\n            this._autoplayDelay.start(30);\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        // Collect total win in last cumulative FRB round when GR isn't yet closed and there isn't current win\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (\r\n                !DataManager.GameRoundClosed &&\r\n                GameManager.baseResponse.totalWin > 0 &&\r\n                GameManager.baseResponse.currentWin === 0\r\n            ) {\r\n                this._controller.resetWinAnimator();\r\n                this.collect();\r\n                return;\r\n            }\r\n        }\r\n        //  Try to show RCI dialog by canExit() call when in FRB Cumulative and GameRound is closed\r\n        if (FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (DataManager.GameRoundClosed) {\r\n                GameManager.canExit();\r\n            }\r\n        }\r\n    }\r\n\r\n    quickWinCalculationFinished(): void {\r\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n    }\r\n\r\n    winCalculationFinished(): void {\r\n        if (DataManager.GameRoundClosed) {\r\n            Platforms.Platforms.roundEnded({\r\n                id: GameManager.gameResponse.roundId,\r\n                win: GameManager.gameResponse.totalWin,\r\n                balanceAfter: parseFloat(DataManager.getDataById(GameData.DataBalanceTotal)),\r\n            });\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        DataManager.updateDataElement(GameData.DataTotalWin);\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n        //     return;\r\n        // }\r\n\r\n        this._afterWinDelay.stop();\r\n\r\n        if (DataManager.GameRoundClosed && !(FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\")) {\r\n            DataManager.updateDataElements();\r\n        }\r\n        ModuleManager.enableGamble();\r\n        DataManager.Collectable = true;\r\n        this.prepareNewGameRound();\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (!ModuleManager.gambleEnabled()) {\r\n                FreeRoundBonus.enableUi();\r\n            }\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                this.disableAllActions();\r\n                return;\r\n            }\r\n        } else {\r\n            FreeRoundBonus.enableFrbExpiration();\r\n        }\r\n    }\r\n\r\n    allWinsFinished(): void {\r\n        FreeRoundBonus.enableFrbExpiration();\r\n\r\n        if (GameManager.baseResponse != null && GameManager.baseResponse.currentWin > 0 && !this._wasCalclulated) {\r\n            Platforms.Platforms.win(GameManager.baseResponse.currentWin);\r\n        }\r\n\r\n        this._wasCalclulated = true;\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            ModuleManager.enableBonus();\r\n            return;\r\n        }\r\n\r\n        if (ModuleManager.gambleActive()) {\r\n            this.disable();\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n        //     let isLow = GameManager.baseResponse.currentWin <= BetManager.Bet;\r\n        //     this._respinDelay.start(isLow ? 30 : 0);\r\n\r\n        //     if(DataManager.Autoplay) {\r\n        //         this.actions.changeActionState(BaseActions.ActionAutoplayStop, true);\r\n        //         HtmlController.updateActionElements(this.getAllActions());\r\n        //     }\r\n        //     return;\r\n        // }\r\n\r\n        this._afterWinDelay.stop();\r\n        this.prepareNewGameRound();\r\n        ModuleManager.enableGamble();\r\n        if (DataManager.Autoplay && this.actions.getActionState(BaseActions.ActionAutoplayStop)) {\r\n            this.autoplay();\r\n        }\r\n\r\n        if (DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n            if (FreeRoundBonus.isLastFrb) {\r\n                this._controller.resetWinAnimator();\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (!DataManager.GameRoundClosed && GameManager.baseResponse.totalWin > 0) {\r\n                this._controller.resetWinAnimator();\r\n                this.collect();\r\n                return;\r\n            }\r\n        }\r\n    }\r\n\r\n    initIntro(): void {\r\n        super.initIntro();\r\n        this._controller.initIntro();\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n\r\n        if (ModuleManager.bonusEnabled()) {\r\n            ModuleManager.enableBonus();\r\n            return;\r\n        }\r\n\r\n        // if(CustomUtils.isRespin()) {\r\n        //     this.disable();\r\n\r\n        //     this._respinDelay.start(75);\r\n        //     return;\r\n        // }\r\n\r\n        this.prepareNewGameRound();\r\n        ModuleManager.enableGamble();\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (DataManager.GameRoundClosed) {\r\n                FreeRoundBonus.endFreeRounds();\r\n                ModuleManager.disableBase();\r\n            }\r\n            return;\r\n        }\r\n    }\r\n\r\n    intro(long: boolean = false, previousModule: string): void {\r\n        this._wasCalclulated = true;\r\n\r\n        //if(long) {\r\n        this._unColectedWin = GameManager.gameResponse.totalWin;\r\n        //}\r\n\r\n        this.longIntro = long;\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            DataManager.updateDataElement(GameData.DataBalanceBonus);\r\n            DataManager.updateDataElement(GameData.DataBalanceReal);\r\n            DataManager.updateDataElement(GameData.DataBalanceTotal);\r\n\r\n            DataManager.Collectable = true;\r\n        }\r\n\r\n        this._controller.intro(long);\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"block\";\r\n        }\r\n\r\n        if (this._userControls_supreme != null) {\r\n            this._userControls_supreme.style.display = \"block\";\r\n        }\r\n    }\r\n\r\n    introFinished(): void {\r\n        if (DataManager.GameRoundClosed) {\r\n            Platforms.Platforms.roundEnded();\r\n        }\r\n        if (!ResponsibleDialog1.opened) {\r\n            DataManager.Autoplay = DataManager.AutoplayAfterGamble;\r\n        }\r\n\r\n        ModuleManager.enableGamble();\r\n        this.prepareNewGameRound();\r\n        if (DataManager.Autoplay) {\r\n            this.autoplay();\r\n        }\r\n        if (this._userControls != null && this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n            this._userControls.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this._userControls_supreme != null &&\r\n            this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n        ) {\r\n            this._userControls_supreme.classList.remove(HtmlController.DisabledClass);\r\n        }\r\n\r\n        if (\r\n            this.longIntro &&\r\n            DataManager.GameRoundClosed &&\r\n            (FreeRoundBonus.id != null || FreeRoundBonus.otherOfferes.length > 0)\r\n        ) {\r\n            FreeRoundBonus.enableUi();\r\n            this.longIntro = false;\r\n        }\r\n\r\n        if (FreeRoundBonus.isLastFrb && DataManager.GameRoundClosed) {\r\n            FreeRoundBonus.endFreeRounds();\r\n            ModuleManager.disableBase();\r\n            return;\r\n        }\r\n\r\n        // Collect total win in last cumulative FRB round when GR isn't yet closed\r\n        if (FreeRoundBonus.isLastFrb && FreeRoundBonus.winPayMethod === \"cumulative\") {\r\n            if (!DataManager.GameRoundClosed && GameManager.gameResponse.totalWin > 0) {\r\n                ModuleManager.collect(GameModules.Base);\r\n            }\r\n        }\r\n    }\r\n\r\n    outro(): void {\r\n        if (!this._wasCalclulated) {\r\n            if (GameManager.gameResponse != null && GameManager.gameResponse.totalWin > 0) {\r\n                Platforms.Platforms.win(GameManager.gameResponse.totalWin);\r\n            }\r\n        }\r\n\r\n        this._afterWinDelay.stop();\r\n        this._autoplayDelay.stop();\r\n        DataManager.AutoplayAfterGamble = DataManager.Autoplay;\r\n        DataManager.Autoplay = false;\r\n\r\n        if (ModuleManager.bonusActive()) {\r\n            DataManager.AutoplayAfterGamble = false;\r\n            if (this._userControls != null && !this._userControls.classList.contains(HtmlController.DisabledClass)) {\r\n                this._userControls.classList.add(HtmlController.DisabledClass);\r\n            }\r\n\r\n            if (\r\n                this._userControls_supreme != null &&\r\n                !this._userControls_supreme.classList.contains(HtmlController.DisabledClass)\r\n            ) {\r\n                this._userControls_supreme.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n\r\n        this._controller.outro();\r\n    }\r\n\r\n    outroFinished(): void {\r\n        if (this._userControls != null) {\r\n            this._userControls.style.display = \"none\";\r\n        }\r\n\r\n        if (ModuleManager.bonusActive()) {\r\n            ModuleManager.introModule(GameModules.BonusRespins);\r\n        } else {\r\n            ModuleManager.introModule(GameModules.Gamble);\r\n        }\r\n    }\r\n\r\n    prepareNewGameRound(): void {\r\n        this._afterWinDelay.stop();\r\n\r\n        if (this.prepareJackpotMiniGame()) {\r\n            return;\r\n        }\r\n\r\n        if (ResponsibleDialog1.opened) {\r\n            return;\r\n        }\r\n\r\n        BetHigherThanMinDialog.openDialog();\r\n        Paytable.openAtStart(true);\r\n\r\n        if (BetHigherThanMinDialog.canOpenDialog() && FreeRoundBonusDialog.dialogActive()) {\r\n            return;\r\n        }\r\n\r\n        if (DataManager.GameLimit) {\r\n            DataManager.Autoplay = false;\r\n            this.limit();\r\n        } else {\r\n            if (!DataManager.Autoplay) {\r\n                this.actions.changeActionStates({\r\n                    [BaseActions.ActionAutoplay]:\r\n                        (DataManager.GameRoundClosed ||\r\n                            (FreeRoundBonus.inFrb &&\r\n                                FreeRoundBonus.winPayMethod === \"cumulative\" &&\r\n                                !FreeRoundBonus.isLastFrb)) &&\r\n                        AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                    [BaseActions.ActionAutoplayStop]: false,\r\n                    [BaseActions.ActionBaseCollect]:\r\n                        FreeRoundBonus.inFrb && FreeRoundBonus.winPayMethod === \"cumulative\"\r\n                            ? false\r\n                            : !DataManager.GameRoundClosed,\r\n                    [BaseActions.ActionBetCycle]: !ModuleManager.gambleEnabled(),\r\n                    [BaseActions.ActionBetPlus]: !BetManager.maxBet,\r\n                    [BaseActions.ActionBetMinus]: !BetManager.minBet,\r\n                    [BaseActions.ActionSpin]: !FreeRoundBonus.isLastFrb,\r\n                    [BaseActions.ActionSpinStop]: false,\r\n                });\r\n                if (this._betSettings != null) {\r\n                    if (!ModuleManager.gambleEnabled()) {\r\n                        if (this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n                            this._betSettings.classList.remove(HtmlController.DisabledClass);\r\n                        }\r\n                    } else {\r\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n                        }\r\n                    }\r\n\r\n                    if (FreeRoundBonus.inFrb) {\r\n                        if (!this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n                            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (DataManager.GameRoundClosed) {\r\n                    Platforms.Platforms.roundInit();\r\n                }\r\n            }\r\n        }\r\n\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n    }\r\n\r\n    private prepareJackpotMiniGame(): boolean {\r\n        if (DataManager.GameRoundClosed && Jackpot.hasMiniGame() && !FreeRoundBonus.inFrb) {\r\n            if (Jackpot.hasInitializedGame() && this._wasCalclulated) {\r\n                DataManager.Autoplay = false;\r\n                this.resetWinAnimator();\r\n                this.disable();\r\n                FreeRoundBonus.disableUi();\r\n                Jackpot.startMiniGame();\r\n\r\n                return true;\r\n            } else {\r\n                const self = this;\r\n\r\n                //in nogamble we need to wait for winCalculated finish to not run minigame right after machinestopped\r\n                if (this._wasCalclulated) {\r\n                    Jackpot.initMiniGame(true, () => {\r\n                        self.resetWinAnimator();\r\n                        self.disable();\r\n                        DataManager.Autoplay = false;\r\n                        FreeRoundBonus.disableUi();\r\n                    });\r\n                }\r\n\r\n                //in case we have nogamble and pb within or after gr, check limit\r\n                if (DataManager.GameLimit) {\r\n                    DataManager.Autoplay = false;\r\n                    this.limit();\r\n                }\r\n\r\n                if (Jackpot.waitForMiniGameInitialization()) {\r\n                    //in case we have limit, disable all actions during animation and wait for minigame\r\n                    this.actions.disableAllActions();\r\n                    HtmlController.updateActionElements(this.getAllActions());\r\n                    if (\r\n                        this._betSettings != null &&\r\n                        !this._betSettings.classList.contains(HtmlController.DisabledClass)\r\n                    ) {\r\n                        this._betSettings.classList.add(HtmlController.DisabledClass);\r\n                    }\r\n\r\n                    return true;\r\n                }\r\n            }\r\n        }\r\n\r\n        return false;\r\n    }\r\n\r\n    private checkJackpotMiniGame(): boolean {\r\n        if (!Jackpot.hasMiniGame() || FreeRoundBonus.inFrb) {\r\n            return false;\r\n        }\r\n\r\n        if (Jackpot.hasInitializedGame() || Jackpot.waitForMiniGameInitialization()) {\r\n            if (GameManager.gameResponse.totalWin > 0) {\r\n                this.changeWinBox();\r\n                this._wasCalclulated = true;\r\n\r\n                if (!DataManager.GameRoundClosed) {\r\n                    this.collect(); //collect will call prepareNewGameRound\r\n                } else {\r\n                    //in nogamble gameround is closed, we need to update balance, if we have totalwin > 0\r\n                    this.playCollectSound();\r\n                    DataManager.updateDataElements();\r\n                    this.prepareNewGameRound();\r\n                }\r\n            } else {\r\n                this.prepareNewGameRound();\r\n            }\r\n\r\n            return true;\r\n        } else {\r\n            Jackpot.initMiniGame(false, null);\r\n            Jackpot.disableMiniGameAutostart(); //if init was called from preparenewgameround\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    limit(): void {\r\n        LimitDialog.openDialog();\r\n\r\n        if (DataManager.GameRoundClosed) {\r\n            this.actions.changeActionStates({\r\n                [BaseActions.ActionAutoplay]: AppContext.gameConfiguration.AutoplayModeEnabled,\r\n                [BaseActions.ActionAutoplayStop]: false,\r\n                [BaseActions.ActionBaseCollect]: false,\r\n                [BaseActions.ActionBetCycle]: true,\r\n                [BaseActions.ActionBetPlus]: !BetManager.maxBet,\r\n                [BaseActions.ActionBetMinus]: !BetManager.minBet,\r\n                [BaseActions.ActionSpin]: true,\r\n                [BaseActions.ActionSpinStop]: false,\r\n            });\r\n            if (this._betSettings != null && this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n                this._betSettings.classList.remove(HtmlController.DisabledClass);\r\n            }\r\n        } else {\r\n            this.actions.changeActionStates({\r\n                [BaseActions.ActionAutoplay]: false,\r\n                [BaseActions.ActionAutoplayStop]: false,\r\n                [BaseActions.ActionBaseCollect]: true,\r\n                [BaseActions.ActionBetCycle]: false,\r\n                [BaseActions.ActionBetPlus]: false,\r\n                [BaseActions.ActionBetMinus]: false,\r\n                [BaseActions.ActionSpin]: false,\r\n                [BaseActions.ActionSpinStop]: false,\r\n            });\r\n            if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n                this._betSettings.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        this._afterWinDelay.stop();\r\n        this.actions.disableAllActions();\r\n        FreeRoundBonusIcon.disableActiveIcon();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n\r\n        this._controller.disableBase();\r\n\r\n        if (!CustomUtils.isRespin()) {\r\n            this._controller.disableBase();\r\n        }\r\n\r\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    //disable base without reseting timer and win animations in winAnimator\r\n    //used in frb, to avoid not showing end message in last frb spin with win\r\n    private disableAllActions(): void {\r\n        this._afterWinDelay.stop();\r\n        this.actions.disableAllActions();\r\n        HtmlController.updateActionElements(this.getAllActions());\r\n        if (this._betSettings != null && !this._betSettings.classList.contains(HtmlController.DisabledClass)) {\r\n            this._betSettings.classList.add(HtmlController.DisabledClass);\r\n        }\r\n    }\r\n\r\n    runRespin(): void {\r\n        if (CustomUtils.isRespin()) {\r\n            this._respinDelay.start(15);\r\n        }\r\n    }\r\n\r\n    resetWinAnimator(): void {\r\n        this._controller.resetWinAnimator();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Mobile/MobileBaseUserControls.ts\n **/","import { Logger, EngineComponentFactory } from \"neo-common\";\r\nimport { ActionSet } from \"../ActionSet\";\r\nimport { ComponentTypes } from \"../ComponentTypes\";\r\n\r\n/**\r\n * The ActionManager class is used for parsing elements which are extending display objects and render them to canvas.\r\n * @class ActionManager\r\n * @author Marek Turkovic\r\n *\r\n *  <Actions123 Class=\"ActionSet\">\r\n *      <Elements>\r\n *          <Hocico LinkedToId=\"123\" Class=\"LinkedElement\"/>\r\n *      </Elements>\r\n *      <Actions>\r\n *          <Action Case=\"PackOfActions1\">\r\n *              <Hocico RotationTween=\"50\" />\r\n *          </Action>\r\n *          <Action Case=\"PackOfActions2\">\r\n *              <Hocico Scale=\"0.5\" Tint=\"ff0000\" Rotation=\"45\"/>\r\n *          </Action>\r\n *      </Actions>\r\n *  </Actions123>\r\n */\r\nexport class ActionManager {\r\n    /**\r\n     * Parse ActionSet object elements from xml and add them to ActionSet.ActionSets object.\r\n     *\r\n     * @method parseActionSets\r\n     * @param startNode\r\n     * @return void\r\n     */\r\n    static parseActionSets(startNode: Element): void {\r\n        if (!startNode) {\r\n            return;\r\n        }\r\n\r\n        ActionManager.getNodesList(startNode.firstElementChild)\r\n            .reverse()\r\n            .filter(\r\n                (node: Element) =>\r\n                    node.hasAttribute(\"Class\") &&\r\n                    node.getAttribute(\"Class\") === \"ActionSet\" &&\r\n                    EngineComponentFactory.isTypeOf(\"ActionSet\", ComponentTypes.ActionSet),\r\n            )\r\n            .forEach((node: Element) => (EngineComponentFactory.get(\"ActionSet\") as ActionSet).RegisterActionSet(node));\r\n    }\r\n\r\n    /**\r\n     * Recursively extracts sibling nodes.\r\n     * @method getNodesList\r\n     * @param node Element\r\n     * @param nodeList Array<Element>\r\n     * @return Array<Element>\r\n     */\r\n    private static getNodesList(node: Element, nodeList: Array<Element> = []): Array<Element> {\r\n        if (!node) {\r\n            return nodeList;\r\n        }\r\n\r\n        if (node.nextElementSibling) {\r\n            nodeList = ActionManager.getNodesList(node.nextElementSibling, nodeList);\r\n        }\r\n\r\n        return nodeList.concat(node);\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param data any\r\n     * @return void\r\n     */\r\n    private static log(data: any): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"ActionManager\", data);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Managers/ActionManager.ts\n **/","import { ArrayUtils, engineComponent, NumberUtils, StringUtils, Utils } from \"neo-common\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { TextElementAttributes } from \"../Texts/TextElement\";\r\nimport { ImageElementAttributes } from \"./ImageElement\";\r\n\r\n/**\r\n * SpineElement class is class which creates holder for spine object.\r\n * Examples (Create):\r\n *  <Item Class=\"SpineElement\" Spine=\"name\"/>\r\n *  <Item Class=\"SpineElement\" Spine=\"name\" Speed=\"0.5\"/>\r\n *  <Item Class=\"SpineElement\" Spine=\"name\" Speed=\"0.5\" Animations=\"Idle\"/>\r\n *  <Item Class=\"SpineElement\" Spine=\"name\" Animations=\"Idle;true\"/>\r\n *  <Item Class=\"SpineElement\" Spine=\"name\" Speed=\"0.5\" Animations=\"Idle|Win;false;60|Idle;true;60\"/>\r\n *  <Item Class=\"SpineElement\" Spine=\"name\" Mixes=\"Idle;Win;30|Win;Idle;30\" Animations=\"Idle|Win;false;60|Idle;true;60|Cycle;true;0;1\"/>\r\n * Examples (Update):\r\n *  <Item Speed=\"0.5\"/>\r\n *  <Item Speed=\"0.5\" Animations=\"Idle\"/>\r\n *  <Item Animations=\"Idle;true\"/>\r\n *  <Item Speed=\"0.5\" Animations=\"Idle|Win;false;60|Idle;true\"/>\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class SpineElement extends BaseElement {\r\n    //******************************************************************************************************************\r\n    //  GLOBAL CONSTANTS (PRE-LOADER)\r\n    //******************************************************************************************************************\r\n\r\n    public static Data: any;\r\n\r\n    public static Atlas: any;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    protected spine: PIXI.spine.Spine;\r\n\r\n    protected mixes: {\r\n        from: string;\r\n        to: string;\r\n        duration: number;\r\n    }[];\r\n\r\n    private _noWebGL: boolean = false;\r\n\r\n    protected updateAllowed: boolean = true;\r\n\r\n    //******************************************************************************************************************\r\n    //  GETTERS, SETTERS\r\n    //******************************************************************************************************************\r\n\r\n    public set speed(value: number) {\r\n        this.spine.state.timeScale = value;\r\n    }\r\n\r\n    public get speed(): number {\r\n        return this.spine.state.timeScale;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.spine = null;\r\n        this.mixes = [];\r\n\r\n        if (StageController.Renderer instanceof PIXI.CanvasRenderer) {\r\n            this._noWebGL = true;\r\n        }\r\n\r\n        if (!this._noWebGL) {\r\n            PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n        }\r\n    }\r\n\r\n    public update(deltaTime: number): void {\r\n        if (this.worldVisible) {\r\n            if (this.visible && this.spine && this.updateAllowed) {\r\n                this.spine.update((deltaTime / PIXI.ticker.shared.speed / PIXI.settings.TARGET_FPMS) * 0.001);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE, UPDATE\r\n    //******************************************************************************************************************\r\n\r\n    public createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        const spine = node.hasAttribute(SpineElementAttributes.SPINE)\r\n            ? node.getAttribute(SpineElementAttributes.SPINE)\r\n            : \"spine\";\r\n        const mixes = node.hasAttribute(SpineElementAttributes.MIXES)\r\n            ? ArrayUtils.stringArray(node.getAttribute(SpineElementAttributes.MIXES), \"|\")\r\n            : [];\r\n\r\n        for (let i = 0; i < mixes.length; i++) {\r\n            const mix = ArrayUtils.stringArray(mixes[i]);\r\n\r\n            this.mixes.push({ from: mix[0], to: mix[1], duration: parseFloat(mix[2]) });\r\n        }\r\n\r\n        this.createSpine(spine);\r\n        this.setMixes();\r\n    }\r\n\r\n    public updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(SpineElementAttributes.SPINE)) {\r\n            console.log(\"--\");\r\n        }\r\n\r\n        if (node.hasAttribute(SpineElementAttributes.SPEED)) {\r\n            this.spine.state.timeScale = parseFloat(node.getAttribute(SpineElementAttributes.SPEED));\r\n        }\r\n\r\n        if (node.hasAttribute(\"Update\")) {\r\n            this.updateAllowed = false;\r\n            PIXI.ticker.shared.remove(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n        } else {\r\n            if (!this.updateAllowed) {\r\n                PIXI.ticker.shared.add(this.update, this, PIXI.UPDATE_PRIORITY.HIGH);\r\n            }\r\n            this.updateAllowed = true;\r\n        }\r\n\r\n        if (node.hasAttribute(SpineElementAttributes.TINT)) {\r\n            this.spine.tint = parseInt(node.getAttribute(SpineElementAttributes.TINT), 16);\r\n        } else {\r\n            this.spine.tint = parseInt(\"ffffff\", 16);\r\n        }\r\n\r\n        if (node.hasAttribute(SpineElementAttributes.ANIMATIONS)) {\r\n            const animations = ArrayUtils.stringArray(node.getAttribute(SpineElementAttributes.ANIMATIONS), \"|\");\r\n            const tracks: { name: string; loop?: boolean; delay?: number }[] = [];\r\n\r\n            for (let i = 0; i < animations.length; i++) {\r\n                let animation = ArrayUtils.stringArray(animations[i]);\r\n                const track: { name: string; loop?: boolean; delay?: number; track?: number } = { name: animation[0] };\r\n\r\n                if (animation.length > 1) {\r\n                    track.loop = StringUtils.parseBoolean(animation[1]);\r\n                }\r\n\r\n                if (animation.length > 2) {\r\n                    track.delay = parseInt(animation[2]);\r\n                }\r\n\r\n                if (animation.length > 3) {\r\n                    track.track = parseInt(animation[3]);\r\n                }\r\n\r\n                tracks.push(track);\r\n            }\r\n\r\n            this.animate(tracks);\r\n        }\r\n\r\n        if (node.hasAttribute(\"UpdateFrame\")) {\r\n            let frames: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"UpdateFrame\"));\r\n\r\n            if (frames.length == 1) {\r\n                this.spine.update(frames[0]);\r\n            } else {\r\n                let updateTime: number = Math.floor(Math.random() * (frames[1] - frames[0]) + frames[0]);\r\n                this.spine.update(updateTime);\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPINE\r\n    //******************************************************************************************************************\r\n\r\n    protected createSpine(key: string): void {\r\n        const textureAtlas = new PIXI.spine.core.TextureAtlas(SpineElement.Atlas.data, function (\r\n            line: any,\r\n            callback: any,\r\n        ) {\r\n            line = line.replace(/\\.png/g, \"\");\r\n            callback(PIXI.BaseTexture.from(line));\r\n        });\r\n        const atlasAttachmentLoader = new PIXI.spine.core.AtlasAttachmentLoader(textureAtlas);\r\n        const skeletonJson = new PIXI.spine.core.SkeletonJson(atlasAttachmentLoader);\r\n        const skeletonData = skeletonJson.readSkeletonData(CustomUtils.updateSpineData(SpineElement.Data.data[key]));\r\n\r\n        this.spine = new PIXI.spine.Spine(skeletonData);\r\n        this.spine.autoUpdate = false;\r\n\r\n        this.addChild(this.spine);\r\n    }\r\n\r\n    protected setMixes(): void {\r\n        for (let i = 0; i < this.mixes.length; i++) {\r\n            this.spine.stateData.setMix(this.mixes[i].from, this.mixes[i].to, this.mixes[i].duration / 60);\r\n        }\r\n    }\r\n\r\n    public animate(animations: { name: string; loop?: boolean; delay?: number; track?: number }[]): void {\r\n        const tracks: { name: string; loop?: boolean; delay?: number; track?: number }[][] = [];\r\n\r\n        if (this._noWebGL) {\r\n            this.spine.cacheAsBitmap = false;\r\n        } else if (!this.updateAllowed) {\r\n            // this.spine.cacheAsBitmap = false;\r\n        }\r\n\r\n        animations.forEach((animation): void => {\r\n            const track = Utils.isNullOrUndefined(animation.track) ? 0 : animation.track;\r\n\r\n            while (tracks.length < track + 1) {\r\n                tracks.push([]);\r\n            }\r\n\r\n            tracks[track].push(animation);\r\n        });\r\n\r\n        tracks.forEach((track, i): void => {\r\n            track.forEach((animation, j): void => {\r\n                const name = animation.name;\r\n                const loop = Utils.isNullOrUndefined(animation.loop) ? false : animation.loop;\r\n                const delay = Utils.isNullOrUndefined(animation.delay) ? 0 : animation.delay / 60;\r\n\r\n                if (j === 0) {\r\n                    if (name === \"Empty\") {\r\n                        this.spine.state.setEmptyAnimation(i, 0);\r\n                    } else {\r\n                        this.spine.state.setAnimation(i, name, loop);\r\n                    }\r\n                } else {\r\n                    if (name === \"Empty\") {\r\n                        this.spine.state.addEmptyAnimation(i, 0, delay);\r\n                    } else {\r\n                        this.spine.state.addAnimation(i, name, loop, delay);\r\n                    }\r\n                }\r\n            });\r\n        });\r\n\r\n        if (this._noWebGL) {\r\n            this.spine.update(0);\r\n            this.spine.cacheAsBitmap = true;\r\n        } else if (!this.updateAllowed) {\r\n            this.spine.update(0);\r\n            // this.spine.cacheAsBitmap = true;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  CLONE\r\n    //******************************************************************************************************************\r\n\r\n    public clone(): SpineElement {\r\n        const element = new SpineElement();\r\n        element.alpha = this.alpha;\r\n        element.name = this.name;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.rotation = this.rotation;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        element.updateAllowed = this.updateAllowed;\r\n\r\n        if (this.maskSprite != null) {\r\n            let maskElement = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            maskElement.position.x = this.maskSprite.position.x;\r\n            maskElement.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = maskElement;\r\n            element.addChild(maskElement);\r\n            element.mask = maskElement;\r\n        }\r\n\r\n        element.spine = new PIXI.spine.Spine(this.spine.spineData);\r\n        element.spine.autoUpdate = false;\r\n        element.addChild(element.spine);\r\n\r\n        element.mixes = this.mixes;\r\n        element.setMixes();\r\n\r\n        element.markAsCloned();\r\n\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const SpineElementAttributes = {\r\n    SPINE: \"Spine\",\r\n    MIXES: \"Mixes\",\r\n    SPEED: \"Speed\",\r\n    ANIMATIONS: \"Animations\",\r\n    TINT: \"Tint\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/SpineElement.ts\n **/","import { Logger, Utils } from \"neo-common\";\r\nimport { ClientHost, GameEngine, Communication } from \"neo-games\";\r\n\r\nimport { Dialog, DialogOpenData } from \"../Channels/Common/Dialogs/Dialog\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { BalanceManager } from \"../Managers/BalanceManager\";\r\nimport { ModuleManager } from \"../Managers/ModuleManager\";\r\nimport { BetManager } from \"../Managers/BetManager\";\r\nimport { DataManager } from \"../Managers/DataManager\";\r\nimport { Languages } from \"../Utils/Languages\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { SplashScreen } from \"../CustomComponents/SplashScreen\";\r\n\r\ntype IBalance = Communication.Game.IBalance;\r\n\r\nexport class GameClientHostConsumer extends GameEngine.GameClientHostConsumerBase {\r\n    private _dialog: Dialog;\r\n\r\n    constructor(app: GameEngine.IApp) {\r\n        super(app);\r\n    }\r\n\r\n    private get dialog(): Dialog {\r\n        if (Utils.isNullOrUndefined(this._dialog)) {\r\n            this._dialog = new Dialog(this._app);\r\n        }\r\n\r\n        return this._dialog;\r\n    }\r\n\r\n    /**\r\n     * Handle dispatched action from client host\r\n     * @param actionGroup - group name where action belongs to\r\n     * @param action - name of action to handle\r\n     */\r\n    handleAction(actionGroup: string, action: string): void {\r\n        if (!HtmlController.dispatchActionAllowed) {\r\n            return;\r\n        }\r\n\r\n        if (actionGroup === ClientHost.Types.ClientHostActionGroup.Default.toString()) {\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\r\n                    \"GameClientHostConsumer\",\r\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchAction() ...`,\r\n                );\r\n            }\r\n\r\n            DataManager.addTrustedUserAction(action);\r\n            ModuleManager.dispatchAction(action);\r\n        } else if (actionGroup === ClientHost.Types.ClientHostActionGroup.Terminal.toString()) {\r\n            if (DEBUG) {\r\n                Logger.debugGroup(\r\n                    \"GameClientHostConsumer\",\r\n                    `Received action \"${action}\" (group: '${actionGroup}'), dispatching to controller.dispatchTerminalAction() ...`,\r\n                );\r\n            }\r\n\r\n            DataManager.addTrustedUserAction(action);\r\n            ModuleManager.dispatchAction(action);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * handle request to show dialog with message (optionally error)\r\n     * @param request - show dialog request data\r\n     */\r\n    handleShowDialog(request: ClientHost.Types.ClientHostDialogRequest): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside handleShowDialog(), request: `, request);\r\n        }\r\n\r\n        if (request.type === ClientHost.Types.ClientHostDialogType.Responsible1) {\r\n            this.showResponsibleDialog1(request.data as ClientHost.Types.ClientHostResponsibleDialogData);\r\n        } else {\r\n            let dialogData = Utils.isNullOrUndefined(request.data) ? null : (request.data as DialogOpenData);\r\n            let special = false;\r\n            let gameRoundId = \"0\";\r\n            let errorId = \"\";\r\n            if (!Utils.isNullOrUndefined(dialogData)) {\r\n                special = dialogData.special;\r\n                gameRoundId = dialogData.gameRoundId;\r\n                errorId = dialogData.errorId;\r\n            }\r\n            let isError = request.type === ClientHost.Types.ClientHostDialogType.Error;\r\n            let code = request.error ? request.error.errorCode : \"\";\r\n\r\n            SplashScreen.hideSplashScreen();\r\n            this.dialog.openDialog(request.text, code, errorId, isError, special, gameRoundId, request);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * handle request to show dialog with message\r\n     */\r\n    handleShowEndGameDialog(): void {\r\n        //dialog without buttons\r\n        let customData = {\r\n            data: {\r\n                actions: [null] as Array<Object>,\r\n            },\r\n        };\r\n\r\n        this.dialog.openDialog(Languages.getRid(\"DLG_ENDGAME\"), \"\", \"\", false, true, \"\", customData);\r\n        PIXI.sound.removeAll();\r\n\r\n        //remove game and keep only dialog\r\n        let dialog = document.getElementById(\"dialog\");\r\n        let root = document.getElementById(\"root\");\r\n        if (root != null && dialog != null) {\r\n            root.innerHTML = dialog.outerHTML;\r\n            document.body.innerHTML = \"\";\r\n            document.body.appendChild(root);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * handle request to close currently visible dialog (if any)\r\n     */\r\n    handleCloseDialog(): void {\r\n        this.dialog.closeDialog();\r\n    }\r\n\r\n    /**\r\n     * @method handleRefreshAccount - handle 'refresh account' request from client host\r\n     */\r\n    handleRefreshAccount(): void {\r\n        BalanceManager.refreshBalance();\r\n    }\r\n\r\n    /**\r\n     * @method handleError - handle error from client host.\r\n     * @param error - error message\r\n     * @param data - structure with information about error\r\n     */\r\n    handleError(error: string, data?: any): void {\r\n        this.dialog.openDialog(error, null, \"\", true);\r\n    }\r\n\r\n    handleBlockRequest(blocked: boolean): void {\r\n        if (blocked) {\r\n            if (DataManager.Autoplay) {\r\n                DataManager.gameState(\"AutoPlayEnded\");\r\n            }\r\n            DataManager.Autoplay = false;\r\n            DataManager.AutoplayCount = \"∞\";\r\n            DataManager.AutoplayLossLimit = \"∞\";\r\n            DataManager.AutoplayWinLimit = \"∞\";\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method handlePaytableAction - handle paytable action (load, show, ...)\r\n     * @param request - request to do with paytable\r\n     */\r\n    handlePaytableRequest(request: ClientHost.Types.ClientHostPaytableRequest): void {}\r\n\r\n    handleAccountUpdate(balance: IBalance, forceShow: boolean): void {\r\n        if (forceShow) {\r\n            BetManager.unHideValues(true);\r\n        }\r\n\r\n        BalanceManager.balanceReceived(balance);\r\n    }\r\n\r\n    handleAutoplayAction(action: ClientHost.Types.AutoplayAction): void {\r\n        switch (action) {\r\n            case ClientHost.Types.AutoplayAction.Stop: {\r\n                if (DataManager.Autoplay) {\r\n                    DataManager.gameState(\"AutoPlayEnded\");\r\n                }\r\n                DataManager.Autoplay = false;\r\n                DataManager.AutoplayCount = \"∞\";\r\n                DataManager.AutoplayLossLimit = \"∞\";\r\n                DataManager.AutoplayWinLimit = \"∞\";\r\n                break;\r\n            }\r\n            case ClientHost.Types.AutoplayAction.Enable: {\r\n                DataManager.AutoplayEnabled = true;\r\n                break;\r\n            }\r\n            case ClientHost.Types.AutoplayAction.Disable: {\r\n                if (DataManager.Autoplay) {\r\n                    DataManager.gameState(\"AutoPlayEnded\");\r\n                }\r\n                DataManager.Autoplay = false;\r\n                DataManager.AutoplayCount = \"∞\";\r\n                DataManager.AutoplayLossLimit = \"∞\";\r\n                DataManager.AutoplayWinLimit = \"∞\";\r\n                DataManager.AutoplayEnabled = false;\r\n                break;\r\n            }\r\n            default: {\r\n                if (DEBUG) {\r\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown autoplay action '${action}'`);\r\n                }\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    handleGameplayAction(action: ClientHost.Types.GamePlayAction): void {\r\n        switch (action) {\r\n            case ClientHost.Types.GamePlayAction.Enable: {\r\n                GameManager.enablePlay();\r\n                break;\r\n            }\r\n            case ClientHost.Types.GamePlayAction.Disable: {\r\n                GameManager.disablePlay();\r\n                break;\r\n            }\r\n            default: {\r\n                if (DEBUG) {\r\n                    Logger.errorGroup(\"GameClientHostConsumer\", `Unknown gameplay action '${action}'`);\r\n                }\r\n                break;\r\n            }\r\n        }\r\n    }\r\n\r\n    terminateOnCollect(): boolean {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"GameClientHostConsumer\", `inside terminateOnCollect()`);\r\n        }\r\n\r\n        return GameManager.canExit(true);\r\n    }\r\n\r\n    private showResponsibleDialog1(data: ClientHost.Types.ClientHostResponsibleDialogData) {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"GameClientHostConsumer\", `showResponsibleDialog1(), data: `, data);\r\n        }\r\n\r\n        GameManager.showResponsibleDialog1(data);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/ClientHost/ClientHostConsumer.ts\n **/","import { GameEngine } from \"neo-games\";\r\n\r\nexport class GameDefinition extends GameEngine.GameDefinitionBase {\r\n    /**\r\n     * @property ClientHostType - type name for client host, eg.(Default, Desktop ...)\r\n     */\r\n    public get Gamble(): boolean {\r\n        return this.getValue(\"Gamble\", true);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameDefinition.ts\n **/","import { GameEngine } from \"neo-games\";\r\nimport { GameManager } from \"../Game/Managers/GameManager\";\r\n\r\nconst key_GameEnableReelsStop = \"GameEnableReelsStop\";\r\nconst key_GameEnableQuickSpin = \"GameEnableQuickSpin\";\r\nconst key_QuickSpinDialogCount = \"QuickSpinDialogCount\";\r\nconst key_QuickSpinDecayDelay = \"QuickSpinDecayDelay\";\r\nconst key_MinGameRoundDuration = \"MinGameRoundDuration\";\r\nconst key_GameRoundMinSpan = \"GameRoundMinSpan\";\r\nconst key_UIShowTime = \"UIShowTime\";\r\nconst key_GUIShowSessionTime = \"GUI_ShowSessionTime\";\r\nconst key_GUIShowSessionTimeStartValue = \"GUI_ShowSessionTimeStartValue\";\r\nconst key_UseServerTime = \"UseServerTime\";\r\nconst key_UseHtmlAudio = \"UseHtmlAudio\";\r\nconst key_FullscreenOnClick = \"FullscreenOnClick\";\r\nconst key_UseCoins = \"UseCoins\";\r\nconst key_AutoplayGambleEnabled = \"AutoplayGambleEnabled\";\r\nconst key_AutoplayMode = \"AutoplayMode\";\r\nconst key_AutoplayCounts = \"AutoplayCounts\";\r\nconst key_AutoplayLossLimit = \"AutoplayLossLimit\";\r\nconst key_AutoplaySingleWinLimit = \"AutoplaySingleWinLimit\";\r\nconst key_HelpShowGameLimit = \"HelpShowGameLimit\";\r\nconst key_HelpShowRTP = \"HelpShowRTP\";\r\nconst key_ShowGameRoundsHistory = \"ShowGameRoundsHistory\";\r\nconst key_ExpirationResolveHours = \"ExpirationResolveHours\";\r\nconst key_AutoplayModeSpeed = \"AutoplayModeSpeed\";\r\nconst key_HideAmountsEnabled = \"HideAmountsEnabled\";\r\nconst key_AutoplayModeEnabled = \"AutoplayModeEnabled\";\r\nconst key_ResetCoinCountOnDenomChange = \"ResetCoinCountOnDenomChange\";\r\nconst key_CollectOnUnCalculatedWin = \"CollectOnUnCalculatedWin\";\r\nconst key_PluginUrl = \"PluginUrl\";\r\nconst key_PluginOrigin = \"PluginOrigin\";\r\nconst key_Platform = \"Platform\";\r\nconst key_PollCredit = \"PollCredit\";\r\nconst key_ShowDecimalPlaces = \"ShowDecimalPlaces\";\r\nconst key_SelectorRolloutDuration = \"SelectorRolloutDuration\";\r\nconst key_DisplayCurrencies = \"DisplayCurrencies\";\r\nconst key_CanvasFallback = \"CanvasFallback\";\r\nconst key_GameRoundIdVisible = \"GameRoundIdVisible\";\r\nconst key_MuteOnLostFocus = \"MuteOnLostFocus\";\r\nconst key_ShowCashierMessage = \"ShowCashierMessage\";\r\nconst key_CashierMessageShowRefreshBalanceButton = \"CashierMessageShowRefreshBalanceButton\";\r\nconst key_CashierUrl = \"CashierUrl\";\r\nconst key_DisableUntrustedClicks = \"DisableUntrustedClicks\";\r\nconst key_PlayerSessionReconnectionInterval = \"PlayerSessionReconnectionInterval\";\r\nconst key_ApplicationGatewayUrl = \"ApplicationGatewayUrl\";\r\nconst key_EventTrackerEnabled = \"EventTrackerEnabled\";\r\nconst key_GameEnableVibration = \"GameEnableVibration\";\r\nconst key_SplashScreen = \"SplashScreen\";\r\nconst key_PaytableUseValue = \"PaytableUseValue\";\r\n\r\nconst key_GUI_HistoryUrl = \"GUI_HistoryUrl\";\r\nconst key_RCI_HistoryUrl = \"RCI_HistoryUrl\";\r\nconst key_RCI_Info = \"RCI_Info\";\r\nconst key_RCI_IntervalInfo = \"RCI_IntervalInfo\";\r\nconst key_RCI_ShowHistoryButton = \"RCI_ShowHistoryButton\";\r\n\r\nconst key_FeatureAutoPlay = \"FeatureAutoPlay\";\r\nconst key_FeatureAutoPick = \"FeatureAutoPick\";\r\n\r\nconst key_ShowSimilarGames = \"ShowSimilarGames\";\r\nconst key_SimilarGamesList = \"SimilarGamesList\";\r\nconst key_ShowExitGameButton = \"ShowExitGameButton\";\r\nconst key_StaticContentUrl = \"StaticContentUrl\";\r\nconst key_ShowHomeButton = \"ShowHomeButton\";\r\nconst key_UsePortraitMode = \"UsePortraitMode\";\r\nconst key_FRBShowDenyButton = \"FRBShowDenyButton\";\r\nconst key_FRBShowPostponeButton = \"FRBShowPostponeButton\";\r\nconst key_StatusBar = \"StatusBar\";\r\nconst key_StatusBarData = \"StatusBarData\";\r\n\r\nconst key_ProgressiveBonusId = \"ProgressiveBonusId\";\r\nconst key_ProgressiveBonusContributeOnlyQualified = \"ProgressiveBonusContributeOnlyQualified\";\r\nconst key_ProgressiveBonusMinQualifyingBet = \"ProgressiveBonusMinQualifyingBet\";\r\nconst key_ProgressiveBonusMaxQualifyingBet = \"ProgressiveBonusMaxQualifyingBet\";\r\nconst key_ProgressiveBonusVisibleMax = \"ProgressiveBonusVisibleMax\";\r\nconst key_ProgressiveBonusHelpShowMaxVisibleLimit = \"ProgressiveBonusHelpShowMaxVisibleLimit\";\r\nconst key_ProgressiveBonusHelpShowCumulativeWinLimit = \"ProgressiveBonusHelpShowCumulativeWinLimit\";\r\nconst key_ProgressiveBonusTicketConstraint = \"ProgressiveBonusTicketConstraint\";\r\nconst key_UseJackpotLocalization = \"UseJackpotLocalization\";\r\nconst key_ProgressiveBonusTheme = \"ProgressiveBonusTheme\";\r\n\r\nconst key_SessionBalance = \"SessionBalance\";\r\nconst key_TotalBet = \"TotalBet\";\r\nconst key_TotalWin = \"TotalWin\";\r\nconst key_PlayerTokenId = \"PlayerTokenId\";\r\nconst key_ClientToken = \"ClientToken\";\r\nconst key_MaxBetEnabled = \"MaxBetEnabled\";\r\nconst key_ShowMaxBetMessage = \"ShowMaxBetMessage\";\r\nconst key_HelpShowGameModuleVersion = \"HelpShowGameModuleVersion\";\r\nconst key_NotifyBetHigherThanMin = \"NotifyBetHigherThanMin\";\r\nconst key_ShowPaytableAtStart = \"ShowPaytableAtStart\";\r\nconst key_HelpShowMaxPayoutProbability = \"HelpShowMaxPayoutProbability\";\r\nconst key_HelpShowMaxPayoutProbabilityFrequency = \"HelpShowMaxPayoutProbabilityFrequency\";\r\n\r\nexport class GameConfiguration extends GameEngine.GameConfigurationBase {\r\n    /**\r\n     * @property GameEnableReelsStop - game enable reels stop.\r\n     */\r\n    public get GameEnableReelsStop(): boolean {\r\n        return this.getValue(key_GameEnableReelsStop, true);\r\n    }\r\n\r\n    /**\r\n     * @property GameEnableQuickSpin - game allows automatic quick stop.\r\n     */\r\n    public get GameEnableQuickSpin(): boolean {\r\n        return this.getValue(key_GameEnableQuickSpin, false);\r\n    }\r\n\r\n    /**\r\n     * @property QuickSpinDialogCount - number of subsequent quick stops before dialog is shown.\r\n     */\r\n    public get QuickSpinDialogCount(): number {\r\n        return this.getValue(key_QuickSpinDialogCount, 3);\r\n    }\r\n\r\n    public get QuickSpinDecayDelay(): number {\r\n        return this.getValue(key_QuickSpinDecayDelay, 30);\r\n    }\r\n\r\n    /**\r\n     * @property MinGameRoundDuration - number min round duration from start to stop reels\r\n     */\r\n    public get MinGameRoundDuration(): number {\r\n        return this.getValue(key_MinGameRoundDuration, 0);\r\n    }\r\n\r\n    /**\r\n     * @property GameRoundMinSpan - min game round duration in milliseconds\r\n     */\r\n    public get GameRoundMinSpan(): number {\r\n        return this.getValue(key_GameRoundMinSpan, 0);\r\n    }\r\n\r\n    /**\r\n     * @property UIShowTime\r\n     */\r\n    public get UIShowTime(): boolean {\r\n        return this.getValue(key_UIShowTime, false);\r\n    }\r\n\r\n    /**\r\n     * @property GUIShowSessionTime\r\n     */\r\n    public get GUIShowSessionTime(): boolean {\r\n        return this.getValue(key_GUIShowSessionTime, false);\r\n    }\r\n\r\n    /**\r\n     * @property GUIShowSessionTimeStartValue\r\n     */\r\n    public get GUIShowSessionTimeStartValue(): number {\r\n        return this.getValue(key_GUIShowSessionTimeStartValue, 0);\r\n    }\r\n\r\n    /**\r\n     * @property UseServerTime\r\n     */\r\n    public get UseServerTime(): boolean {\r\n        return this.getValue(key_UseServerTime, false);\r\n    }\r\n\r\n    /**\r\n     * @property UseHtmlAudio\r\n     */\r\n    public get UseHtmlAudio(): boolean {\r\n        return this.getValue(key_UseHtmlAudio, false);\r\n    }\r\n\r\n    /**\r\n     * @property FullscreenOnClick\r\n     */\r\n    public get FullscreenOnClick(): boolean {\r\n        return this.getValue(key_FullscreenOnClick, false);\r\n    }\r\n\r\n    /**\r\n     * @property UseCoins\r\n     */\r\n    public get UseCoins(): boolean {\r\n        return this.getValue(key_UseCoins, false);\r\n    }\r\n\r\n    /**\r\n     * @property AutoplayGambleEnabled - Enables/disables gamble feature during Autoplay\r\n     */\r\n    public get AutoplayGambleEnabled(): boolean {\r\n        return this.getValue(key_AutoplayGambleEnabled, true);\r\n    }\r\n\r\n    /**\r\n     * @property MaxBetEnabled Enables max bet button in game UI\r\n     */\r\n    public get MaxBetEnabled(): boolean {\r\n        return this.getValue(key_MaxBetEnabled, false);\r\n    }\r\n\r\n    /**\r\n     * @property ShowMaxBetMessage Enables max bet button confirmation dialog in game UI\r\n     */\r\n    public get ShowMaxBetMessage(): boolean {\r\n        return this.getValue(key_ShowMaxBetMessage, false);\r\n    }\r\n\r\n    /**\r\n     * @property AutoplayMode - Determines what autoplay features are available to the player:\r\n     * Basic = Basic autoplay is used\r\n     * Simple = simple autoplay is used\r\n     * Advanced = advanced autoplay is used\r\n     */\r\n    public get AutoplayMode(): string {\r\n        return this.getValue(key_AutoplayMode, \"simple\");\r\n    }\r\n\r\n    /**\r\n     * @property AutoplayCounts - shows selection of preset Autoplay games for simple and advanced autoplay; -1 = no limit/infinite option\r\n     */\r\n    public get AutoplayCounts(): Array<number> {\r\n        return this.getValue(key_AutoplayCounts, [-1, 1000, 750, 500, 250, 100, 75, 50, 25, 10]);\r\n    }\r\n\r\n    /**\r\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\r\n     */\r\n    public get AutoplayLossLimit(): Array<number> {\r\n        return this.getValue(key_AutoplayLossLimit, [-1, 5, 20, 50]);\r\n    }\r\n\r\n    /**\r\n     * @property AutoplaySingleWinLimit - List of values shown to player, where player can set his singleWinLimit; -1 = no limit option\r\n     */\r\n    public get AutoplaySingleWinLimit(): Array<number> {\r\n        return this.getValue(key_AutoplaySingleWinLimit, [-1, 10, 20, 75]);\r\n    }\r\n\r\n    /**\r\n     * @property HelpShowGameLimit - Show game limit in help.\r\n     */\r\n    public get HelpShowGameLimit(): boolean {\r\n        return this.getValue(key_HelpShowGameLimit, true);\r\n    }\r\n\r\n    /**\r\n     * @property HelpShowRTP - Show rtp in help.\r\n     */\r\n    public get HelpShowRTP(): boolean {\r\n        return this.getValue(key_HelpShowRTP, true);\r\n    }\r\n\r\n    /**\r\n     * @property ShowGameRoundsHistory - show button which open new window to last 10 game rounds.\r\n     */\r\n    public get ShowGameRoundsHistory(): boolean {\r\n        return GameManager.gameResponse.roundId > -1 && this.getValue(key_ShowGameRoundsHistory, true);\r\n    }\r\n\r\n    /**\r\n     * @property ExpirationResolveHours - Automatic game resolve\r\n     */\r\n    public get ExpirationResolveHours(): number {\r\n        return this.getValue(key_ExpirationResolveHours, -1);\r\n    }\r\n\r\n    /**\r\n     * @property AutoplayModeSpeed - can speed up reel rotation in autoplay - !!!! for now only in Firebird\r\n     * standard = normal autoplay flow\r\n     * fast = if game has stop button enabled reel rotation will stop rotation after response will came from server\r\n     */\r\n    public get AutoplayModeSpeed(): string {\r\n        return this.getValue(key_AutoplayModeSpeed, \"standard\");\r\n    }\r\n\r\n    /**\r\n     * @property HideAmountsEnabled - show hide buttons for credit and bet - !!!! for now only in Firebird\r\n     */\r\n    public get HideAmountsEnabled(): boolean {\r\n        return this.getValue(key_HideAmountsEnabled, false);\r\n    }\r\n\r\n    /**\r\n     * @property AutoplayModeEnabled - enable or disable autoplay functionality - !!!! for now only in Firebird\r\n     */\r\n    public get AutoplayModeEnabled(): boolean {\r\n        return this.getValue(key_AutoplayModeEnabled, true);\r\n    }\r\n\r\n    /**\r\n     * @property ResetCoinCountOnDenomChange\r\n     * true => reset coin count to lowest value available after every denomination change\r\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\r\n     */\r\n    public get ResetCoinCountOnDenomChange(): boolean {\r\n        return this.getValue(key_ResetCoinCountOnDenomChange, true);\r\n    }\r\n\r\n    /**\r\n     * @property CollectOnUnCalculatedWin\r\n     * true => collect win on spin when player didnt see calculated win in win box\r\n     * false => standard flow\r\n     */\r\n    public get CollectOnUnCalculatedWin(): boolean {\r\n        return this.getValue(key_CollectOnUnCalculatedWin, false);\r\n    }\r\n\r\n    /**\r\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)\r\n     */\r\n    public get PluginUrl(): string {\r\n        return this.getValue(key_PluginUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property PluginUrl - if is not empty  and plugin URL creates hidden iframe this parameter will be applied for messaging between iframe and game\r\n     */\r\n    public get PluginOrigin(): string {\r\n        return this.getValue(key_PluginOrigin, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property Platform - name of platform for external apis - for now we supported only iforium platform\r\n     */\r\n    public get Platform(): string {\r\n        return this.getValue(key_Platform, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property PollCredit\r\n     * -1 => Not used\r\n     * > 0 => Number in miliseconds run timer to refresh balance when credit is lower than bet in closed gameround\r\n     */\r\n    public get PollCredit(): number {\r\n        return this.getValue(key_PollCredit, -1);\r\n    }\r\n\r\n    /**\r\n     * @property ShowDecimalPlaces - all wins and currency values are shown with selected decimal places (except RTP of course)\r\n     */\r\n    public get ShowDecimalPlaces(): number {\r\n        return this.getValue(key_ShowDecimalPlaces, 2);\r\n    }\r\n\r\n    /**\r\n     * @property SelectorRolloutDuration\r\n     * 0 => Disabled\r\n     * > 0 => Selector rollout duration in seconds.\r\n     */\r\n    public get SelectorRolloutDuration(): number {\r\n        return this.getValue(key_SelectorRolloutDuration, 5);\r\n    }\r\n\r\n    /**\r\n     * @property DisplayCurrencies\r\n     * @returns {string[]}\r\n     */\r\n    public get DisplayCurrencies(): string[] {\r\n        return this.getValue(key_DisplayCurrencies, []);\r\n    }\r\n\r\n    /**\r\n     * @property CanvasFallback\r\n     * @returns {boolean}\r\n     */\r\n    public get CanvasFallback(): boolean {\r\n        return this.getValue(key_CanvasFallback, false);\r\n    }\r\n\r\n    /**\r\n     * @property GameRoundIdVisible\r\n     * @returns {boolean}\r\n     */\r\n    public get GameRoundIdVisible(): boolean {\r\n        return this.getValue(key_GameRoundIdVisible, true);\r\n    }\r\n\r\n    /**\r\n     * @property MuteOnLostFocus\r\n     * @returns {boolean}\r\n     */\r\n    public get MuteOnLostFocus(): boolean {\r\n        return this.getValue(key_MuteOnLostFocus, true);\r\n    }\r\n\r\n    /**\r\n     * @property ShowCashierMessage\r\n     * @returns {boolean}\r\n     */\r\n    public get ShowCashierMessage(): boolean {\r\n        return this.getValue(key_ShowCashierMessage, false);\r\n    }\r\n\r\n    /**\r\n     * @property CashierMessageShowRefreshBalanceButton\r\n     * @returns {boolean}\r\n     */\r\n    public get CashierMessageShowRefreshBalanceButton(): boolean {\r\n        return this.getValue(key_CashierMessageShowRefreshBalanceButton, false);\r\n    }\r\n\r\n    /**\r\n     * @property CashierUrl\r\n     * @returns {string}\r\n     */\r\n    public get CashierUrl(): string {\r\n        return this.getValue(key_CashierUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property DisableUntrustedClicks\r\n     * @returns {string}\r\n     */\r\n    public get DisableUntrustedClicks(): boolean {\r\n        return this.getValue(key_DisableUntrustedClicks, true);\r\n    }\r\n\r\n    /**\r\n     * @property SplashScreen\r\n     * @returns {boolean}\r\n     */\r\n    public get SplashScreen(): boolean {\r\n        return this.getValue(key_SplashScreen, true);\r\n    }\r\n\r\n    /**\r\n     * @property GUIHistoryUrl\r\n     * @returns {string}\r\n     */\r\n    public get GUIHistoryUrl(): string {\r\n        return this.getValue(key_GUI_HistoryUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property RCIHistoryUrl\r\n     * @returns {string}\r\n     */\r\n    public get RCIHistoryUrl(): string {\r\n        return this.getValue(key_RCI_HistoryUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property RCIInfo\r\n     * @returns {boolean}\r\n     */\r\n    public get RCIInfo(): boolean {\r\n        return this.getValue(key_RCI_Info, false);\r\n    }\r\n\r\n    /**\r\n     * @property RCIIntervalInfo\r\n     * @returns {boolean}\r\n     */\r\n    public get RCIIntervalInfo(): boolean {\r\n        return this.getValue(key_RCI_IntervalInfo, true);\r\n    }\r\n\r\n    /**\r\n     * @property RCIShowHistoryButton\r\n     * @returns {boolean}\r\n     */\r\n    public get RCIShowHistoryButton(): boolean {\r\n        return this.getValue(key_RCI_ShowHistoryButton, false);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {number}\r\n     * @constructor\r\n     */\r\n    public get FeatureAutoPlay(): number {\r\n        return (this.getValue(key_FeatureAutoPlay, 0) / 1000) * 60;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {boolean}\r\n     * @constructor\r\n     */\r\n    public get FeatureAutoPick(): boolean {\r\n        return this.getValue(key_FeatureAutoPick, false);\r\n    }\r\n\r\n    /**\r\n     * @property ShowSimilarGames\r\n     * @returns {boolean}\r\n     */\r\n    public get ShowSimilarGames(): boolean {\r\n        return this.getValue(key_ShowSimilarGames, false);\r\n    }\r\n\r\n    /**\r\n     * @property SimilarGamesList\r\n     * @returns {array string}\r\n     */\r\n    public get SimilarGamesList(): Array<string> {\r\n        return this.getValue(key_SimilarGamesList, []);\r\n    }\r\n\r\n    /**\r\n     * @property ShowExitGameButton\r\n     * @returns {boolean}\r\n     */\r\n    public get ShowExitGameButton(): boolean {\r\n        return this.getValue(key_ShowExitGameButton, true);\r\n    }\r\n\r\n    /**\r\n     * @property StaticContentUrl\r\n     * @returns {string}\r\n     */\r\n    public get StaticContentUrl(): string {\r\n        return this.getValue(key_StaticContentUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property ShowHomeButton\r\n     * @returns {boolean}\r\n     */\r\n    public get ShowHomeButton(): boolean {\r\n        return this.getValue(key_ShowHomeButton, true);\r\n    }\r\n\r\n    /**\r\n     * @property UsePortraitMode\r\n     * @returns {boolean}\r\n     */\r\n    public get UsePortraitMode(): boolean {\r\n        return this.getValue(key_UsePortraitMode, true);\r\n    }\r\n\r\n    /**\r\n     * @property FRBShowDenyButton\r\n     * @returns {boolean}\r\n     */\r\n    public get FRBShowDenyButton(): boolean {\r\n        return this.getValue(key_FRBShowDenyButton, true);\r\n    }\r\n\r\n    /**\r\n     * @property FRBShowPostponeButton\r\n     * @returns {boolean}\r\n     */\r\n    public get FRBShowPostponeButton(): boolean {\r\n        return this.getValue(key_FRBShowPostponeButton, true);\r\n    }\r\n\r\n    /**\r\n     * @property StatusBar\r\n     * @returns {array string}\r\n     */\r\n    public get StatusBar(): Array<string> {\r\n        return this.getValue(key_StatusBar, []);\r\n    }\r\n\r\n    /**\r\n     * @property StatusBarData\r\n     * @returns {object}\r\n     */\r\n    public get StatusBarData(): Object {\r\n        return this.getValue(key_StatusBarData, {});\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusId\r\n     * @returns {number}\r\n     */\r\n    public get ProgressiveBonusId(): number {\r\n        return this.getValue(key_ProgressiveBonusId, -1);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusContributeOnlyQualified\r\n     * @returns {boolean}\r\n     */\r\n    public get ProgressiveBonusContributeOnlyQualified(): boolean {\r\n        return this.getValue(key_ProgressiveBonusContributeOnlyQualified, false);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusMinQualifyingBet\r\n     * @returns {number}\r\n     */\r\n    public get ProgressiveBonusMinQualifyingBet(): number {\r\n        return this.getValue(key_ProgressiveBonusMinQualifyingBet, -1);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusMaxQualifyingBet\r\n     * @returns {number}\r\n     */\r\n    public get ProgressiveBonusMaxQualifyingBet(): number {\r\n        return this.getValue(key_ProgressiveBonusMaxQualifyingBet, -1);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusVisibleMax\r\n     * @returns {number}\r\n     */\r\n    public get ProgressiveBonusVisibleMax(): number {\r\n        return this.getValue(key_ProgressiveBonusVisibleMax, -1);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusHelpShowMaxVisibleLimit\r\n     * @returns {boolean}\r\n     */\r\n    public get ProgressiveBonusHelpShowMaxVisibleLimit(): boolean {\r\n        return this.getValue(key_ProgressiveBonusHelpShowMaxVisibleLimit, true);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusHelpShowCumulativeWinLimit\r\n     * @returns {boolean}\r\n     */\r\n    public get ProgressiveBonusHelpShowCumulativeWinLimit(): boolean {\r\n        return this.getValue(key_ProgressiveBonusHelpShowCumulativeWinLimit, true);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusTicketConstraint\r\n     * @returns {string}\r\n     */\r\n    public get ProgressiveBonusTicketConstraint(): string {\r\n        return this.getValue(key_ProgressiveBonusTicketConstraint, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property UseJackpotLocalization\r\n     * @returns {boolean}\r\n     */\r\n    public get UseJackpotLocalization(): boolean {\r\n        return this.getValue(key_UseJackpotLocalization, false);\r\n    }\r\n\r\n    /**\r\n     * @property ProgressiveBonusTheme\r\n     * @returns {string}\r\n     */\r\n    public get ProgressiveBonusTheme(): string {\r\n        return this.getValue(key_ProgressiveBonusTheme, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property SessionBalance\r\n     * @constructor\r\n     */\r\n    public get SessionBalance(): number {\r\n        return this.getValue(key_SessionBalance, 0);\r\n    }\r\n\r\n    /**\r\n     * @propertyTotalBet\r\n     * @constructor\r\n     */\r\n    public get TotalBet(): number {\r\n        return this.getValue(key_TotalBet, 0);\r\n    }\r\n\r\n    /**\r\n     * @propertyTotalWin\r\n     * @constructor\r\n     */\r\n    public get TotalWin(): number {\r\n        return this.getValue(key_TotalWin, 0);\r\n    }\r\n\r\n    /**\r\n     * @propertyPlayerTokenId\r\n     * @constructor\r\n     */\r\n    public get PlayerTokenId(): string {\r\n        return this.getValue(key_PlayerTokenId, \"\");\r\n    }\r\n\r\n    /**\r\n     * @propertyClientToken\r\n     * @constructor\r\n     */\r\n    public get ClientToken(): string {\r\n        return this.getValue(key_ClientToken, \"\");\r\n    }\r\n\r\n    /**\r\n     * @propertyPlayerSessionReconnectionInterval\r\n     * @constructor\r\n     */\r\n    public get PlayerSessionReconnectionInterval(): number {\r\n        return this.getValue(key_PlayerSessionReconnectionInterval, 0);\r\n    }\r\n\r\n    /**\r\n     * @property ApplicationGatewayUrl\r\n     * @constructor\r\n     */\r\n    public get ApplicationGatewayUrl(): string {\r\n        return this.getValue(key_ApplicationGatewayUrl, \"\");\r\n    }\r\n\r\n    /**\r\n     * @property GameEnableVibration\r\n     * @constructor\r\n     */\r\n    public get GameEnableVibration(): boolean {\r\n        return this.getValue(key_GameEnableVibration, false);\r\n    }\r\n\r\n    /**\r\n     * @property HelpShowGameModuleVersion\r\n     * true - Enable game module version info in Help.\r\n     * false - Disable game module version info in Help.\r\n     */\r\n    public get HelpShowGameModuleVersion(): boolean {\r\n        return this.getValue(key_HelpShowGameModuleVersion, false);\r\n    }\r\n\r\n    /**\r\n     * @property NotifyBetHigherThanMin\r\n     * true - Set bet to minimal on game start and show\r\n     *        notification after if game entered during\r\n     *        feature using bet other than min bet.\r\n     * false - Disable notification and bet update\r\n     */\r\n    public get NotifyBetHigherThanMin(): boolean {\r\n        return this.getValue(key_NotifyBetHigherThanMin, false);\r\n    }\r\n\r\n    /**\r\n     * @property HelpShowMaxPayoutProbability\r\n     * true - Show additional info about Max Payout\r\n     *        Probability in Help.\r\n     */\r\n    public get HelpShowMaxPayoutProbability(): boolean {\r\n        return this.getValue(key_HelpShowMaxPayoutProbability, false);\r\n    }\r\n\r\n    /**\r\n     * @property HelpShowMaxPayoutProbabilityFrequency\r\n     * true - Show additional info about Max Payout\r\n     *        Probability Frequency in Help.\r\n     */\r\n    public get HelpShowMaxPayoutProbabilityFrequency(): boolean {\r\n        return this.getValue(key_HelpShowMaxPayoutProbabilityFrequency, false);\r\n    }\r\n\r\n    /**\r\n     * @property ShowPaytableAtStart\r\n     * If true, the game must show the paytable at start of the game session\r\n     */\r\n    public get ShowPaytableAtStart(): boolean {\r\n        return this.getValue(key_ShowPaytableAtStart, false);\r\n    }\r\n\r\n    /**\r\n     * @property PaytableUseValue\r\n     * @constructor\r\n     */\r\n    public get PaytableUseValue(): boolean {\r\n        return this.getValue(key_PaytableUseValue, false);\r\n    }\r\n\r\n    /**\r\n     * @property EventTrackerEnabled\r\n     * @constructor\r\n     */\r\n    public get EventTrackerEnabled(): boolean {\r\n        return this.getValue(key_EventTrackerEnabled, false);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Common/GameConfiguration.ts\n **/","import { Platforms, Communication } from \"neo-games\";\r\nimport { DataManager } from \"./DataManager\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\nimport { BalanceManager } from \"./BalanceManager\";\r\nimport { HtmlController } from \"../HTMLComponents/HtmlController\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { UserAction } from \"../HTMLComponents/UserAction\";\r\nimport { GameApp } from \"../GameApp\";\r\nimport { RetentionPanel } from \"../Utils/RetentionPanel\";\r\nimport { ModuleManager } from \"./ModuleManager\";\r\nimport { PageVisibilityHandler } from \"../CustomComponents/PageVisibilityHandler\";\r\nimport { EventData } from \"neo-games/Engine/Plugins/EventTracker/EventTracker\";\r\nimport { NotificationManager } from \"./NotificationManager\";\r\nimport { AutoplayData } from \"neo-games/Engine/Platforms/IPlatforms\";\r\n\r\nvar GameModules = Communication.Game.GameModules;\r\n\r\nexport class PlatformsManager {\r\n    static create(): void {\r\n        let pluginOrigin = \"*\";\r\n\r\n        if (AppContext != null && AppContext.gameConfiguration != null) {\r\n            if (AppContext.gameConfiguration.PluginOrigin != \"\") {\r\n                pluginOrigin = AppContext.gameConfiguration.PluginOrigin;\r\n            }\r\n\r\n            Platforms.Platforms.getTimeDataFnc = DataManager.getTimeData;\r\n            Platforms.Platforms.getGameTimeFnc = DataManager.getGameTime;\r\n            Platforms.Platforms.createEmitter();\r\n\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.AutoplayStop, PlatformsManager.stopAutoplay);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RestoreAutoplay, (autoplayData) => {\r\n                PlatformsManager.restoreAutoplay(autoplayData);\r\n            });\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ResizeGame, PlatformsManager.resizeGame);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.RefreshBalance, PlatformsManager.refreshBalance);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayStop, (disableChannel) => {\r\n                PlatformsManager.gamePlayStop(disableChannel);\r\n            });\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayResume, PlatformsManager.gamePlayResume);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GamePlayFreeze, PlatformsManager.gamePlayFreeze);\r\n            Platforms.Platforms.eventEmitter.on(\r\n                Platforms.Platforms.GamePlayUnfreeze,\r\n                PlatformsManager.gamePlayUnfreeze,\r\n            );\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioEnable, PlatformsManager.gameAudioEnable);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioMute, PlatformsManager.gameAudioMute);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameAudioSet, (level: number) => {\r\n                PlatformsManager.gameAudioSet(level);\r\n            });\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.GameQuickSpin, (enabled: boolean) => {\r\n                PlatformsManager.gameQuickSpin(enabled);\r\n            });\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowHelp, PlatformsManager.showHelp);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HideHelp, PlatformsManager.hideHelp);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ToggleHelp, PlatformsManager.toggleHelp);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.ShowPaytable, PlatformsManager.showPaytable);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.HidePaytable, PlatformsManager.hidePaytable);\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.TogglePaytable, PlatformsManager.togglePaytable);\r\n            Platforms.Platforms.eventEmitter.on(\r\n                Platforms.Platforms.PlatformCloseMenu,\r\n                PlatformsManager.platformCloseMenu,\r\n            );\r\n            Platforms.Platforms.eventEmitter.on(\r\n                Platforms.Platforms.PlatformCloseGame,\r\n                PlatformsManager.platformCloseGame,\r\n            );\r\n            Platforms.Platforms.eventEmitter.on(\r\n                Platforms.Platforms.PlatformUpdateUI,\r\n                PlatformsManager.platformUpdateUI,\r\n            );\r\n            Platforms.Platforms.eventEmitter.on(\r\n                Platforms.Platforms.PlatformErrorMessageDismissed,\r\n                PlatformsManager.platformErrorMessageDismissed,\r\n            );\r\n            Platforms.Platforms.eventEmitter.on(Platforms.Platforms.CreateNotification, (events: Array<EventData>) => {\r\n                PlatformsManager.createNotification(events);\r\n            });\r\n\r\n            Platforms.Platforms.create(\r\n                AppContext.gameConfiguration.Platform,\r\n                AppContext.gameConfiguration.PluginUrl,\r\n                pluginOrigin,\r\n                { gameKey: GameApp.key, lang: GameApp.language, clientHub: NotificationManager },\r\n            );\r\n        }\r\n    }\r\n\r\n    static stopAutoplay(): void {\r\n        DataManager.Autoplay = false;\r\n        DataManager.AutoplayCount = \"∞\";\r\n        DataManager.AutoplayLossLimit = \"∞\";\r\n        DataManager.AutoplayWinLimit = \"∞\";\r\n    }\r\n\r\n    static restoreAutoplay(autoplayData: AutoplayData): void {\r\n        DataManager.Autoplay = true;\r\n        DataManager.AutoplayCount = autoplayData.autoplayCount;\r\n        DataManager.AutoplayLossLimit = autoplayData.autoplayLossLimit;\r\n        DataManager.AutoplayWinLimit = autoplayData.autoplayWinLimit;\r\n        HtmlController.dispatchAction(\"AUTOPLAY\");\r\n    }\r\n\r\n    static resizeGame(): void {\r\n        Scaling.resizeRoot();\r\n    }\r\n\r\n    static refreshBalance(): void {\r\n        BalanceManager.refreshBalance(true);\r\n    }\r\n\r\n    static gamePlayStop(disableChannel: boolean = false): void {\r\n        // Stop autoplay\r\n        PlatformsManager.stopAutoplay();\r\n\r\n        // Disable channel module\r\n        if (disableChannel) {\r\n            if (ModuleManager.gambleActive()) {\r\n                //ModuleManager.disableChannelModule(GameModules.Gamble);\r\n            } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\r\n                //ModuleManager.disableChannelModule(GameModules.Freespins);\r\n            } else {\r\n                ModuleManager.disableChannelModule(GameModules.Base);\r\n            }\r\n        }\r\n    }\r\n\r\n    static gamePlayResume(): void {\r\n        // Restore game round\r\n        if (ModuleManager.gambleActive()) {\r\n            //ModuleManager.restoreGameRound(GameModules.Gamble);\r\n        } else if (ModuleManager[\"freespinsActive\"] && ModuleManager[\"freespinsActive\"]()) {\r\n            //ModuleManager.restoreGameRound(GameModules.Freespins);\r\n        } else {\r\n            ModuleManager.restoreGameRound(GameModules.Base);\r\n        }\r\n    }\r\n\r\n    static gamePlayFreeze(): void {\r\n        if (!Platforms.Platforms.canSpinOnCollect) {\r\n            //handle freeze when idle (rc)\r\n            PlatformsManager.stopAutoplay();\r\n        }\r\n\r\n        PageVisibilityHandler.Enabled = false;\r\n        PageVisibilityHandler.pauseAll();\r\n        HtmlController.dispatchActionAllowed = false;\r\n        document.body.classList.add(\"freeze\");\r\n    }\r\n\r\n    static gamePlayUnfreeze(): void {\r\n        document.body.classList.remove(\"freeze\");\r\n        HtmlController.dispatchActionAllowed = true;\r\n        PageVisibilityHandler.resumeAll();\r\n        PageVisibilityHandler.Enabled = true;\r\n    }\r\n\r\n    static gameAudioEnable(): void {\r\n        HtmlController.setSound(3);\r\n    }\r\n\r\n    static gameAudioMute(): void {\r\n        HtmlController.setSound(0);\r\n    }\r\n\r\n    static gameAudioSet(level: number): void {\r\n        HtmlController.setSound(level);\r\n    }\r\n\r\n    static showHelp(): void {\r\n        let dipatchElementId = UserAction.ActionHelpOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static hideHelp(): void {\r\n        let dipatchElementId = UserAction.ActionHelpOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static toggleHelp(): void {\r\n        let dipatchElementId = UserAction.ActionHelpOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOn);\r\n                } else {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionHelpOff);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static showPaytable(): void {\r\n        let dipatchElementId = UserAction.ActionPaytableOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static hidePaytable(): void {\r\n        let dipatchElementId = UserAction.ActionPaytableOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (!dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static togglePaytable(): void {\r\n        let dipatchElementId = UserAction.ActionPaytableOn;\r\n        if (HtmlController.UiDispatchElements[dipatchElementId]) {\r\n            let dipatchElement = HtmlController.UiDispatchElements[dipatchElementId][0];\r\n\r\n            if (dipatchElement != null) {\r\n                if (dipatchElement.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOn);\r\n                } else {\r\n                    HtmlController.dispatchUiAction(UserAction.ActionPaytableOff);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    static gameQuickSpin(enabled: boolean): void {\r\n        //not all games has quickspin fnc, use object key as function name\r\n        if (DataManager[\"quickspinSet\"]) {\r\n            DataManager[\"quickspinSet\"](enabled);\r\n        }\r\n    }\r\n\r\n    static platformCloseMenu(): void {\r\n        HtmlController.dispatchUiAction(\"\");\r\n    }\r\n\r\n    static platformCloseGame(): void {\r\n        Platforms.Platforms.exitHandler = \"platformsManager\";\r\n        GameApp.exit();\r\n    }\r\n\r\n    static platformUpdateUI(): void {\r\n        RetentionPanel.revalidate();\r\n    }\r\n\r\n    static platformErrorMessageDismissed(): void {\r\n        //ToDo not implemented yet\r\n    }\r\n\r\n    static createNotification(events: Array<EventData>): void {\r\n        if (AppContext.gameConfiguration.EventTrackerEnabled) {\r\n            NotificationManager.sendMessage({\r\n                application: \"EventTrackingServer\",\r\n                service: \"EventTracker\",\r\n                action: \"event/log\",\r\n                data: { events: events },\r\n            });\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Managers/PlatformsManager.ts\n **/","import { Utils, Logger } from \"neo-common\";\r\nimport { ClientHost, GameEngine } from \"neo-games\";\r\nimport { Languages } from \"../../../Utils/Languages\";\r\nimport { FrameTimerEventEmitter, FrameTimerEvents, CreateFrameTimer } from \"../../../Utils/FrameTimer\";\r\nimport { AppContext } from \"../../../../Common/AppContext\";\r\nimport { GameApp } from \"../../../GameApp\";\r\nimport { DataManager } from \"../../../Managers/DataManager\";\r\nimport { GameManager } from \"../../../Managers/GameManager\";\r\nimport { PlayList } from \"../../../Components/Sounds/PlayList\";\r\nimport { ModuleManager } from \"../../../Managers/ModuleManager\";\r\nimport { BaseActions } from \"../Actions/BaseActions\";\r\nimport { HtmlController } from \"../../../HTMLComponents/HtmlController\";\r\nimport { UserAction } from \"../../../HTMLComponents/UserAction\";\r\n\r\n/**\r\n * Create dialog filled from code.\r\n * @class Dialog\r\n */\r\nexport class ChangeBetDialog {\r\n    static opened: boolean = false;\r\n\r\n    static DisabledClass: string = \"_disabled\";\r\n\r\n    private static _element: HTMLElement;\r\n    private static _continueButton: HTMLElement;\r\n    private static _historyButton: HTMLElement;\r\n    private static _closeButton: HTMLElement;\r\n\r\n    static showChangeBetDialogOnCollect: boolean = false;\r\n    static ChangeBetDialogData: ClientHost.Types.ClientHostResponsibleDialogData;\r\n    static dispatchAction: string = \"\";\r\n\r\n    static openDialog(action: string): void {\r\n        ChangeBetDialog.opened = true;\r\n\r\n        ChangeBetDialog.dispatchAction = action;\r\n\r\n        if (ChangeBetDialog._element == null) {\r\n            ChangeBetDialog._element = document.getElementById(\"changeBetDialog\");\r\n\r\n            if (ChangeBetDialog._element != null) {\r\n                const titleElement = ChangeBetDialog._element.getElementsByTagName(\"h3\")[0];\r\n\r\n                if (titleElement != null) {\r\n                    titleElement.innerHTML = Languages.getRid(\"CHANGE_BET_TITLE\");\r\n\r\n                    if (action == BaseActions.ActionMaxBet && AppContext.gameConfiguration.ShowMaxBetMessage) {\r\n                        titleElement.innerHTML = AppContext.gameConfiguration.MaxButton\r\n                            ? Languages.getRid(\"MAX_BET_MESSAGE_RHR_PL\")\r\n                            : Languages.getRid(\"MAX_BET_MESSAGE_RHR\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (ChangeBetDialog._continueButton == null) {\r\n            ChangeBetDialog._continueButton = document.getElementById(\"continueChangeBetButton\");\r\n            if (ChangeBetDialog._continueButton != null) {\r\n                ChangeBetDialog._continueButton.onclick = ChangeBetDialog.onContinue;\r\n                ChangeBetDialog._continueButton.style.display = \"inline-block\";\r\n            }\r\n        }\r\n\r\n        if (ChangeBetDialog._closeButton == null) {\r\n            ChangeBetDialog._closeButton = document.getElementById(\"closeChangeBetButton\");\r\n            if (ChangeBetDialog._closeButton != null) {\r\n                ChangeBetDialog._closeButton.onclick = ChangeBetDialog.onClose;\r\n                ChangeBetDialog._closeButton.style.display = \"inline-block\";\r\n            }\r\n        }\r\n\r\n        if (ChangeBetDialog._element != null) {\r\n            if (ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n                ChangeBetDialog._element.classList.remove(ChangeBetDialog.DisabledClass);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                Logger.errorGroup(\"ChangeBetDialog\", \"ERROR no ChangeBetDialog\");\r\n            }\r\n        }\r\n    }\r\n\r\n    static onContinue(): void {\r\n        ChangeBetDialog.opened = false;\r\n        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n\r\n        //ModuleManager.setIsRespinDisabled(true);\r\n        ModuleManager.dispatchAction(ChangeBetDialog.dispatchAction);\r\n    }\r\n\r\n    static closeDialog(): void {\r\n        ChangeBetDialog.opened = false;\r\n        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n        }\r\n\r\n        PlayList.play(\"SND_Click\");\r\n    }\r\n\r\n    static onClose(): void {\r\n        ChangeBetDialog.opened = false;\r\n        if (!ChangeBetDialog._element.classList.contains(ChangeBetDialog.DisabledClass)) {\r\n            ChangeBetDialog._element.classList.add(ChangeBetDialog.DisabledClass);\r\n        }\r\n\r\n        //HtmlController.dispatchUiAction(UserAction.ActionHideBet);\r\n\r\n        PlayList.play(\"SND_Click\");\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Channels/Common/Dialogs/ChangeBetDialog.ts\n **/","import { Utils, StringUtils, ArrayUtils, Logger, engineComponent } from \"neo-common\";\r\nimport { ShapeElement } from \"./ShapeElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { Tweens, ITweenable } from \"../../Effects/Tweens\";\r\nimport { IElement } from \"../Interfaces/IElement\";\r\n\r\n/**\r\n * BaseElementParticle class is class which creates holder for other display objects.\r\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask.\r\n * @class BaseElementParticle\r\n * @extends PIXI.Container\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BaseElementParticle extends PIXI.particles.ParticleContainer implements ITweenable, IElement {\r\n    static _destroyOptions: PIXI.DestroyOptions = {\r\n        children: true,\r\n    };\r\n\r\n    private _uid: string;\r\n    private _cloned: boolean;\r\n    private __destroyed: boolean;\r\n\r\n    maskSprite: PIXI.Sprite;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._cloned = false;\r\n        this.__destroyed = false;\r\n\r\n        this._uid = `${this.componentName}_${Utils.generateUuid()}`;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                this._uid = PerfDebug.generateElementUID(this);\r\n                PerfDebug.newElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @method _create - setup element from xml node\r\n     * @param node\r\n     * @private\r\n     */\r\n    _create(node: Element): void {\r\n        this.assertDestroyed(\"_create()\");\r\n\r\n        Tweens.removeTweens(this);\r\n\r\n        if (this.name == null) {\r\n            this.name = node.nodeName;\r\n        }\r\n\r\n        /*\r\n         * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n         * @property Alpha\r\n         * @type Number\r\n         * @default 1\r\n         */\r\n        if (node.hasAttribute(\"Alpha\")) {\r\n            this.alpha = parseFloat(node.getAttribute(\"Alpha\"));\r\n        }\r\n\r\n        /*\r\n         * Rotation in degrees for this display object.\r\n         * @property Rotation\r\n         * @type Number\r\n         * @default 0\r\n         */\r\n        if (node.hasAttribute(\"Rotation\")) {\r\n            this.rotation = parseInt(node.getAttribute(\"Rotation\"));\r\n        }\r\n\r\n        /*\r\n         * Random rotation in degrees for this display object.\r\n         * @property StartRotation\r\n         * @type Number\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"StartRotation\")) {\r\n            if (node.getAttribute(\"StartRotation\") === \"random\") {\r\n                //this.rotation = Math.floor(Math.random() * 360);\r\n                this.rotation = Math.floor(Math.random() * 360) / 100;\r\n            }\r\n        }\r\n\r\n        /*\r\n         * The factor to stretch this display object horizontally.\r\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.\r\n         * @property ScaleX\r\n         * @type Number\r\n         * @default 1\r\n         */\r\n        if (node.hasAttribute(\"ScaleX\")) {\r\n            this.scale.x = parseFloat(node.getAttribute(\"scaleX\"));\r\n        }\r\n\r\n        /*\r\n         * The factor to stretch this display object vertically.\r\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.\r\n         * @property ScaleY\r\n         * @type Number\r\n         * @default 1\r\n         */\r\n        if (node.hasAttribute(\"ScaleY\")) {\r\n            this.scale.y = parseFloat(node.getAttribute(\"ScaleY\"));\r\n        }\r\n\r\n        /*\r\n         * The factor to stretch this display object horizontally and vertically. Use this instead of using ScaleX and ScaleY with same value.\r\n         * @property Scale\r\n         * @type Number\r\n         * @default 1\r\n         */\r\n        if (node.hasAttribute(\"Scale\")) {\r\n            this.scale.x = parseFloat(node.getAttribute(\"Scale\"));\r\n            this.scale.y = parseFloat(node.getAttribute(\"Scale\"));\r\n        }\r\n\r\n        /*\r\n         * X (horizontal) position of the display object, relative to its parent.\r\n         * @property X\r\n         * @type Number\r\n         * @default 0\r\n         */\r\n        if (node.hasAttribute(\"X\")) {\r\n            this.position.x = parseInt(node.getAttribute(\"X\"));\r\n        }\r\n\r\n        /*\r\n         * Y (vertical) position of the display object, relative to its parent.\r\n         * @property Y\r\n         * @type Number\r\n         * @default 0\r\n         */\r\n        if (node.hasAttribute(\"Y\")) {\r\n            this.position.y = parseInt(node.getAttribute(\"Y\"));\r\n        }\r\n\r\n        /*\r\n         * X pivot for container. Used mainly for scale tweening and rotation.\r\n         * @property PivotX\r\n         * @type number\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"PivotX\")) {\r\n            this.pivot.x = parseInt(node.getAttribute(\"PivotX\"));\r\n        }\r\n\r\n        /*\r\n         * Y pivot for container. Used mainly for scale tweening and rotation.\r\n         * @property PivotY\r\n         * @type number\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"PivotY\")) {\r\n            this.pivot.y = parseInt(node.getAttribute(\"PivotY\"));\r\n        }\r\n\r\n        /*\r\n         * Indicates whether this display object should be rendered to the canvas and included when running the Stage Stage/getObjectsUnderPoint method.\r\n         * @property Visible\r\n         * @type Boolean\r\n         * @default true\r\n         */\r\n        if (node.hasAttribute(\"Visible\")) {\r\n            this.visible = StringUtils.parseBoolean(node.getAttribute(\"Visible\"));\r\n        }\r\n\r\n        /*\r\n         * A ShapeElement instance that defines a vector mask (clipping path) for this display object.\r\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).\r\n         * @property Mask\r\n         * @type ShapeElement\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Mask\")) {\r\n            var next: Element = node.parentElement.firstElementChild;\r\n            while (next != null) {\r\n                if (next.nodeName === node.getAttribute(\"Mask\")) {\r\n                    var shapeElement: ShapeElement = new ShapeElement();\r\n                    shapeElement.create(next);\r\n                    this.mask = shapeElement;\r\n                }\r\n                next = next.nextElementSibling;\r\n            }\r\n\r\n            if (this.mask == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with name: \" + node.getAttribute(\"Mask\"));\r\n                }\r\n            }\r\n        }\r\n\r\n        /*\r\n         * A ImageElement instance that defines a mask for this display object.\r\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).\r\n         * @property BitmapMask\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"BitmapMask\")) {\r\n            var image = StageController.getTextureByResourceId(node.getAttribute(\"BitmapMask\"));\r\n\r\n            if (image != null) {\r\n                this.maskSprite = new PIXI.Sprite(image);\r\n                if (node.hasAttribute(\"BitmapMaskX\")) {\r\n                    this.maskSprite.position.x = parseFloat(node.getAttribute(\"BitmapMaskX\"));\r\n                }\r\n                if (node.hasAttribute(\"BitmapMaskY\")) {\r\n                    this.maskSprite.position.y = parseFloat(node.getAttribute(\"BitmapMaskY\"));\r\n                }\r\n                if (!node.hasAttribute(\"BitmapMaskShow\")) {\r\n                    this.addChild(this.maskSprite);\r\n                    this.mask = this.maskSprite;\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no image with name for mask: \" + node.getAttribute(\"BitmapMask\"));\r\n                }\r\n            }\r\n        }\r\n\r\n        this._positionTweenOnCreate(node);\r\n        this._scaleTweenOnCreate(node);\r\n        this._rotationTweenOnCreate(node);\r\n        this._alphaTweenOnCreate(node);\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.createElement(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get scale-tweening-specific attributes from xml and fire the tween\r\n     * @method _scaleTweenOnCreate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private _positionTweenOnCreate(node: Element): void {\r\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)\"\r\n\r\n        if (\r\n            !node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X) ||\r\n            !node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y)\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        let tweenX: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_X),\r\n        );\r\n        let tweenY: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_Y),\r\n        );\r\n\r\n        if (tweenX == null || tweenY == null) {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING wrong parameters for PositionTween\");\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_DURATION))\r\n            : 120;\r\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\r\n            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_EASE)\r\n            : null;\r\n        const position: string = node.hasAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\r\n            ? node.getAttribute(BaseElementParticleAttributes.POSITION_TWEEN_POSITION)\r\n            : null;\r\n\r\n        if (position == BaseElementParticleAttributes.POSITION_TWEEN_POSITION_VALUE.RELATIVE) {\r\n            tweenX = tweenX.map((value) => {\r\n                return value + this.position.x;\r\n            });\r\n\r\n            tweenY = tweenY.map((value) => {\r\n                return value + this.position.y;\r\n            });\r\n        }\r\n\r\n        Tweens.positionTween(this, { tweenX, tweenY, tweenEase, tweenDuration });\r\n    }\r\n\r\n    /**\r\n     * Get scale-tweening-specific attributes from xml and fire the tween\r\n     * @method _scaleTweenOnCreate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private _scaleTweenOnCreate(node: Element): void {\r\n        if (!node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN)) {\r\n            return;\r\n        }\r\n\r\n        const tweenValues: Array<PIXI.Point> = BaseElementParticle._getPointsFromPointsAttribute(\r\n            node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN),\r\n        );\r\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_DURATION))\r\n            : 120;\r\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\r\n            ? node.getAttribute(BaseElementParticleAttributes.SCALE_TWEEN_EASE)\r\n            : null;\r\n\r\n        Tweens.scaleTween(this, { tweenValues, tweenEase, tweenDuration });\r\n    }\r\n\r\n    /**\r\n     * Get rotation-tweening-specific attributes from xml and fire the tween\r\n     * @method _scaleTweenOnCreate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private _rotationTweenOnCreate(node: Element): void {\r\n        if (!node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN)) {\r\n            return;\r\n        }\r\n\r\n        const degrees: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN),\r\n        );\r\n\r\n        if (degrees == null) {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING wrong parameters for RotationTween\");\r\n            }\r\n\r\n            return;\r\n        }\r\n\r\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DURATION))\r\n            : 120;\r\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\r\n            ? node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_EASE)\r\n            : null;\r\n        const tweenDelay: number = node.hasAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ROTATION_TWEEN_DELAY))\r\n            : 0;\r\n\r\n        Tweens.rotationTween(this, { degrees, tweenEase, tweenDuration, tweenDelay });\r\n    }\r\n\r\n    /**\r\n     * Get alpha-tweening-specific attributes from xml and fire the tween\r\n     * @method _scaleTweenOnCreate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private _alphaTweenOnCreate(node: Element): void {\r\n        if (!node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN)) {\r\n            return;\r\n        }\r\n\r\n        const alphas: Array<number> = ArrayUtils.numberArray(\r\n            node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN),\r\n        );\r\n\r\n        if (alphas == null) {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING wrong parameters for RotationTween\");\r\n            }\r\n            return;\r\n        }\r\n\r\n        const tweenDuration: number = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DURATION))\r\n            : 120;\r\n        const tweenDelay: number = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY)\r\n            ? parseInt(node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_DELAY))\r\n            : 0;\r\n        const tweenEase: string = node.hasAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\r\n            ? node.getAttribute(BaseElementParticleAttributes.ALPHA_TWEEN_EASE)\r\n            : null;\r\n\r\n        Tweens.alphaTween(this, { alphas, tweenEase, tweenDuration, tweenDelay });\r\n    }\r\n\r\n    /**\r\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.\r\n     * @method _getPointsFromPointsAttribute\r\n     * @return Array<PIXI.Points>\r\n     */\r\n    private static _getPointsFromPointsAttribute(pointsString: string): any {\r\n        return pointsString\r\n            .replace(/\\s/g, \"\")\r\n            .split(\";\")\r\n            .map((valuesPair: string) => {\r\n                return /\\(|\\)/.test(valuesPair) ? valuesPair.slice(1, -1).split(\",\") : [valuesPair, valuesPair];\r\n            })\r\n            .map((valuesPair: Array<string>) => {\r\n                return { x: parseFloat(valuesPair[0]), y: parseFloat(valuesPair[1]) };\r\n            });\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        this._create(node);\r\n    }\r\n\r\n    getDebugInfo(): string {\r\n        if (DEBUG) {\r\n            var debugInfoFn = (this as any).debugInfo;\r\n            return debugInfoFn ? debugInfoFn.call(this) : `${this.uid}\\nName: [${this.name}]`;\r\n        }\r\n        return \"\";\r\n    }\r\n\r\n    /**\r\n     * @property cloned - indicates if element was cloned or not.\r\n     * @returns {boolean}\r\n     */\r\n    public get cloned(): boolean {\r\n        return this._cloned;\r\n    }\r\n\r\n    public get destroyed(): boolean {\r\n        return this.__destroyed;\r\n    }\r\n\r\n    /**\r\n     * @property uid - unique identifier of element.\r\n     * @returns {string}\r\n     */\r\n    public get uid(): string {\r\n        return this._uid;\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    destroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this.assertDestroyed(\"destroy\");\r\n\r\n        if (Utils.isNullOrUndefined(options)) {\r\n            options = BaseElementParticle._destroyOptions;\r\n        }\r\n\r\n        this.internalDestroy(options);\r\n\r\n        if (!Utils.isNullOrUndefined(this.children)) {\r\n            super.destroy(options);\r\n        }\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.destroy(this);\r\n            }\r\n        }\r\n\r\n        this.__destroyed = true;\r\n    }\r\n\r\n    /**\r\n     * @method internalDestroy - cleanup resources\r\n     * @param options\r\n     */\r\n    protected internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        Tweens.removeTweens(this);\r\n    }\r\n\r\n    public clone(): any {\r\n        throw new Error(\"Not implemented\");\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    protected removeAndDestroyChildren(): void {\r\n        this._removeAndDestroyChildren();\r\n    }\r\n\r\n    /**\r\n     * @method removeAndDestroyChildren - recursivelly destroy and remove whole children tree.\r\n     */\r\n    _removeAndDestroyChildren(): void {\r\n        this.assertDestroyed(\"_removeAndDestroyChildren\");\r\n\r\n        var destroyOptions: PIXI.DestroyOptions = {\r\n            children: true,\r\n        };\r\n\r\n        if (this.children != null && this.children.length > 0) {\r\n            for (var i = this.children.length - 1; i >= 0; i--) {\r\n                if (this.children[i] != null) {\r\n                    (this.children[i] as any).destroy(destroyOptions);\r\n                }\r\n            }\r\n        }\r\n\r\n        this.removeChildren();\r\n    }\r\n\r\n    protected assertDestroyed(method: string): void {\r\n        if (DEBUG) {\r\n            if (this.__destroyed) {\r\n                throw new Error(`${this.componentName}[${this.uid}] was already destroyed, calling method '${method}'`);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    protected markAsCloned(): void {\r\n        this._markAsCloned();\r\n    }\r\n\r\n    /**\r\n     * Marks element as cloned\r\n     */\r\n    _markAsCloned(): void {\r\n        this.assertDestroyed(\"markAsCloned()\");\r\n        this._cloned = true;\r\n\r\n        // NOTE(psulek) Do not join these two ifs into one, required 2 ifs for webpack optimization\r\n        if (DEBUG) {\r\n            if (PERFDEBUG_ENABLED) {\r\n                PerfDebug.clone(this);\r\n\r\n                PerfDebug.updateDebugInfo(this, this.getDebugInfo());\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param message\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nconst BaseElementParticleAttributes = {\r\n    /*\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @type number\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    EMIT: \"Emit\",\r\n    // Tweens used in BaseElementParticle\r\n    ALPHA_TWEEN: \"AlphaTween\",\r\n    ALPHA_TWEEN_EASE: \"AlphaTweenEase\",\r\n    ALPHA_TWEEN_DELAY: \"AlphaTweenDelay\",\r\n    ALPHA_TWEEN_DURATION: \"AlphaTweenDuration\",\r\n\r\n    POSITION_TWEEN_X: \"PositionTweenX\",\r\n    POSITION_TWEEN_Y: \"PositionTweenY\",\r\n    POSITION_TWEEN_EASE: \"PositionTweenEase\",\r\n    POSITION_TWEEN_DURATION: \"PositionTweenDuration\",\r\n    POSITION_TWEEN_POSITION: \"PositionTweenPosition\",\r\n    POSITION_TWEEN_POSITION_VALUE: {\r\n        ABSOLUTE: \"absolute\",\r\n        RELATIVE: \"relative\",\r\n    },\r\n\r\n    ROTATION_TWEEN: \"RotationTween\",\r\n    ROTATION_TWEEN_EASE: \"RotationTweenEase\",\r\n    ROTATION_TWEEN_DURATION: \"RotationTweenDuration\",\r\n    ROTATION_TWEEN_DELAY: \"RotationTweenDelay\",\r\n\r\n    SCALE_TWEEN: \"ScaleTween\",\r\n    SCALE_TWEEN_EASE: \"ScaleTweenEase\",\r\n    SCALE_TWEEN_DURATION: \"ScaleTweenDuration\",\r\n    /*\r\n     * Style define animation. You can use one style on more than one place.\r\n     * Style for ParticleElement has to be instance of ParticleStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    STYLE2: \"Style2\",\r\n    START: \"Start\",\r\n    STOPPING: \"Stopping\",\r\n    STOP: \"Stop\",\r\n    /*\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BaseElementParticle.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ImageElement } from \"./ImageElement\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { BGParticleStyle } from \"../Styles/BGParticleStyle\";\r\n\r\n// TODO add comments\r\n/**\r\n * BGParticleElement class is class which creates particles of images on full screen that moves in diferent ways, speed, scale,....\r\n * Can be defined only with BGParticleStyle (See BGParticleStyle class).\r\n * Example 1:\r\n *   <BGParticleElement Class=\"BGParticleElement\" Style=\"BGParticleStyle\" />\r\n *\r\n * @class SwitchElement\r\n * @extends BaseElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class BGParticleElement extends BaseElement {\r\n    // handle definition for particles\r\n    private _style: BGParticleStyle;\r\n    private _styleName: string;\r\n    //  holds particles in pool and reused them\r\n    private _pool: Array<ImageElement>;\r\n    // timer for add particles\r\n    private _timer: FrameTimerEventEmitter;\r\n\r\n    private _stopping: boolean;\r\n    private _stop: boolean;\r\n    private _emitOnce: boolean;\r\n    private _startType: string;\r\n\r\n    private _blendMode: number;\r\n\r\n    private circles: Array<any> = [];\r\n    private circlesData: Array<any> = [];\r\n    private lines: PIXI.Graphics;\r\n\r\n    private connectionZoneWidth: Array<any> = [];\r\n    private connectionZoneHeight: Array<any> = [];\r\n\r\n    private counts: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._pool = [];\r\n\r\n        this._timer = CreateFrameTimer(\"bgTimer\");\r\n        this._timer.on(FrameTimerEvents.Complete, this.startUpdate.bind(this));\r\n\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._emitOnce = false;\r\n        this._startType = \"\";\r\n        this.visible = false;\r\n        this.counts = 0;\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.BLEND_MODE)) {\r\n            this._blendMode = parseInt(node.getAttribute(BGParticleElementAttributes.BLEND_MODE));\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.STYLE)) {\r\n            this._style = <BGParticleStyle>StyleManager.Styles[node.getAttribute(BGParticleElementAttributes.STYLE)];\r\n            this._styleName = this._style.name;\r\n            this.visible = true;\r\n\r\n            this.connectionZoneHeight = this._style.connectionZoneHeight;\r\n            this.connectionZoneWidth = this._style.connectionZoneWidth;\r\n\r\n            this.createParticles();\r\n        }\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n    }\r\n\r\n    private createParticles(): void {\r\n        let startCount = this._style.count;\r\n        let imageElement: any;\r\n\r\n        this.counts = this._style.counts[this._style.connected - 1];\r\n\r\n        for (let i = 0; i < startCount; i++) {\r\n            let speedX: number = 0;\r\n            let speedY: number = 0;\r\n            let scale: number = 1;\r\n            let randomX = Math.random() * StageController.Width;\r\n            let randomY = Math.random() * StageController.Height;\r\n\r\n            for (let j = 0; j < this._style.images.length; j++) {\r\n                if (i < this._style.counts[j]) {\r\n                    imageElement = new ImageElement(StageController.getTextureByResourceId(this._style.images[j]));\r\n                    speedX =\r\n                        Math.random() * (this._style.speedX[j][1] - this._style.speedX[j][0]) +\r\n                        this._style.speedX[j][0];\r\n                    speedY =\r\n                        Math.random() * (this._style.speedY[j][1] - this._style.speedY[j][0]) +\r\n                        this._style.speedY[j][0];\r\n                    scale =\r\n                        Math.random() * (this._style.scale[j][1] - this._style.scale[j][0]) + this._style.scale[j][0];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            imageElement.position.x = randomX;\r\n            imageElement.position.y = randomY;\r\n            imageElement.pivot.x = imageElement.width / 2;\r\n            imageElement.pivot.y = imageElement.height / 2;\r\n            imageElement.scale.x = scale;\r\n            imageElement.scale.y = scale;\r\n\r\n            if (Math.round(Math.random()) == 0) {\r\n                speedX = -speedX;\r\n            }\r\n\r\n            if (Math.round(Math.random()) == 0) {\r\n                speedY = -speedY;\r\n            }\r\n\r\n            this.circles.push(imageElement);\r\n            this.addChild(imageElement);\r\n            this.circlesData.push([speedX, speedY]);\r\n        }\r\n\r\n        // for(let i=0; i< this.circles.length;i++){\r\n        //     let pointsS: Array<any>= [];\r\n        //     let counter = 0\r\n        //\r\n        //     for (let j = i; j < this.circles.length;j++) {\r\n        //         if(i < this.counts && j < this.counts){\r\n        //\r\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));\r\n        //             let opacity = 1 - distance / this._style.radius;\r\n        //             if (opacity > 0) {\r\n        //                 if(opacity > this._style.lineAlpha) {opacity = this._style.lineAlpha}\r\n        //                 if(counter<3){\r\n        //                     pointsS.push(this.circles[j])\r\n        //                 }\r\n        //                 counter++;\r\n        //             }\r\n        //         }\r\n        //     }\r\n        //     // if(pointsS.length == 3)\r\n        //         this.conectedPoints.push(pointsS)\r\n        // }\r\n\r\n        this.lines = new PIXI.Graphics();\r\n        this.addChildAt(this.lines, 0);\r\n        this.startUpdate();\r\n    }\r\n\r\n    startUpdate(): void {\r\n        let _this = this;\r\n        _this.updateU();\r\n        this._timer.start(2);\r\n    }\r\n\r\n    updateU(): void {\r\n        this.lines.clear();\r\n\r\n        for (let i = 0; i < this.circles.length; i++) {\r\n            this.circles[i].position.x += this.circlesData[i][0];\r\n            this.circles[i].position.y += this.circlesData[i][1];\r\n\r\n            if (this.circles[i].position.x > 1920) {\r\n                this.circlesData[i][0] *= -1;\r\n                this.circles[i].position.x = 1920;\r\n            } else if (this.circles[i].position.x < 0) {\r\n                this.circlesData[i][0] *= -1;\r\n                this.circles[i].position.x = 0;\r\n            }\r\n\r\n            if (this.circles[i].position.y > 1080) {\r\n                this.circlesData[i][1] *= -1;\r\n                this.circles[i].position.y = 1080;\r\n            } else if (this.circles[i].position.y < 0) {\r\n                this.circlesData[i][1] *= -1;\r\n                this.circles[i].position.y = 0;\r\n            }\r\n\r\n            let inZone = false;\r\n            for (let k = 0; k < this.connectionZoneHeight.length; k++) {\r\n                if (\r\n                    this.circles[i].position.y >= this.connectionZoneHeight[k][0] &&\r\n                    this.circles[i].position.y <= this.connectionZoneHeight[k][1] &&\r\n                    this.circles[i].position.x >= this.connectionZoneWidth[k][0] &&\r\n                    this.circles[i].position.x <= this.connectionZoneWidth[k][1]\r\n                ) {\r\n                    inZone = true;\r\n                }\r\n            }\r\n\r\n            if (inZone) {\r\n                if (this.circles[i].alpha < 1) {\r\n                    this.circles[i].alpha += 0.0125;\r\n                }\r\n\r\n                for (let j = i; j < this.circles.length; j++) {\r\n                    if (i < this.counts && j < this.counts) {\r\n                        let distance = Math.sqrt(\r\n                            Math.pow(this.circles[j].x - this.circles[i].x, 2) +\r\n                                Math.pow(this.circles[j].y - this.circles[i].y, 2),\r\n                        );\r\n                        let opacity = 1 - distance / this._style.radius;\r\n\r\n                        if (opacity > 0) {\r\n                            if (opacity > this._style.lineAlpha) {\r\n                                opacity = this._style.lineAlpha;\r\n                            }\r\n                            this.lines\r\n                                .lineStyle(this._style.lineWidth, this._style.lineColor, opacity)\r\n                                .moveTo(this.circles[i].x, this.circles[i].y)\r\n                                .lineTo(this.circles[j].x, this.circles[j].y);\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                if (this.circles[i].alpha > 0.3) {\r\n                    this.circles[i].alpha -= 0.0125;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public degrees2radians(degrees: number): number {\r\n        return degrees * (Math.PI / 180);\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return BGParticleElement\r\n     */\r\n    clone(): BGParticleElement {\r\n        let element: BGParticleElement = new BGParticleElement();\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n        element.visible = this.visible;\r\n        let node: Element = document.createElement(\"particle\");\r\n        node.setAttribute(\"Style2\", this._styleName);\r\n        element.create(node);\r\n        element._markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const BGParticleElementAttributes = {\r\n    /**\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    SPEED_X: \"SpeedX\",\r\n    SPEED_Y: \"SpeedY\",\r\n    EMIT_ONCE: \"EmitOnce\",\r\n    START_TYPE: \"StartType\",\r\n    // Tweens used in BaseElementParticle\r\n    ALPHA: \"Alpha\",\r\n\r\n    SCALE: \"Scale\",\r\n\r\n    /**\r\n     * Style define animation. You can use one style on more than one place.\r\n     * Style for BGParticleElement has to be instance of ParticleStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    START: \"Start\",\r\n    STOPPING: \"Stopping\",\r\n    STOP: \"Stop\",\r\n    /**\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    ATTR_COUNT: \"Count\",\r\n    ATTR_COUNTS: \"Counts\",\r\n    ATTR_IMAGES: \"Images\",\r\n    ATTR_FROM_FRAME: \"FromFrame\",\r\n    ATTR_X: \"X\",\r\n    ATTR_Y: \"Y\",\r\n    RADIUS: \"Radius\",\r\n    CONNECTED: \"Connected\",\r\n    CONNECTION_ZONE_HEIGHT: \"ConnectionZoneHeight\",\r\n    CONNECTION_ZONE_WIDTH: \"ConnectionZoneWidth\",\r\n    LINE_COLOR: \"LineColor\",\r\n    LINE_WIDTH: \"LineWidth\",\r\n    LINE_ALPHA: \"LineAlpha\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/BGParticleElement.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ActionSet } from \"../../ActionSet\";\r\n\r\n/**\r\n * LinkedElement class is class which creates holder for other display objects.\r\n * Also handle all basic properties of display object as X, Y, Rotation, Tween, Scale, Visible, Mask (?)\r\n *\r\n * @class LinkedElement\r\n * @author Marek Turkovic\r\n */\r\n@engineComponent(ComponentTypes.LinkedElement)\r\nexport class LinkedElement {\r\n    constructor() {}\r\n\r\n    /**\r\n     *\r\n     * @param node\r\n     * @param nodeAttributes\r\n     */\r\n    public create(node: Element, nodeAttributes?: Element): void {\r\n        if (node.hasAttribute(LinkedElementAttributes.LINKED_TO_ID)) {\r\n            if (\r\n                ActionSet.ElementsToLink != null &&\r\n                ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)] != null\r\n            ) {\r\n                let mainElement = ActionSet.ElementsToLink[node.getAttribute(LinkedElementAttributes.LINKED_TO_ID)];\r\n\r\n                if (nodeAttributes != null) {\r\n                    mainElement.updateByNode(nodeAttributes);\r\n                } else {\r\n                    mainElement.updateByNode(node);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * @protected componentName - component type name.\r\n     * @returns {string}\r\n     */\r\n    public get componentName(): string {\r\n        return (this as any).__componentName__;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Log error into console\r\n     * @param s\r\n     */\r\n    protected logError(s: string): void {\r\n        if (DEBUG) {\r\n            let compName = (this as any).__componentName__;\r\n            Logger.errorGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\r\nexport const LinkedElementAttributes = {\r\n    LINKED_TO_ID: \"LinkedToId\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/LinkedElement.ts\n **/","import { ArrayUtils, StringUtils, Logger, engineComponent, Utils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { Tweens } from \"../../Effects/Tweens\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { ParticleStyle, IPathOptions } from \"../Styles/ParticleStyle\";\r\nimport { FrameTimerEventEmitter, CreateFrameTimer, FrameTimerEvents } from \"../../../Utils/FrameTimer\";\r\nimport { AnimationElement } from \"./AnimationElement\";\r\nimport { ParticleElementAttributes } from \"./ParticleElement\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\n\r\n/**\r\n * @deprecated Use ParticleElement instead ParticleAnimationElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ParticleAnimationElement extends BaseElement {\r\n    // handle definition for particles\r\n    private _style: ParticleStyle;\r\n    private _styleName: string;\r\n    //  holds particles in pool and reused them\r\n    private _pool: Array<AnimationElement>;\r\n    // timer for add particles\r\n    private _timer: FrameTimerEventEmitter;\r\n\r\n    private _stopping: boolean;\r\n    private _stop: boolean;\r\n    private _emitOnce: boolean;\r\n    private _startType: string;\r\n\r\n    private _blendMode: number;\r\n    private _created: boolean;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._pool = [];\r\n\r\n        this._timer = CreateFrameTimer(\"particleTimer\");\r\n        this._timer.on(FrameTimerEvents.Complete, this.addParticles.bind(this));\r\n\r\n        this._created = false;\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._emitOnce = false;\r\n        this._startType = \"\";\r\n        this.visible = false;\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        if (!this._created) {\r\n            super.createByNode(node);\r\n\r\n            if (node.hasAttribute(ParticleElementAttributes.BLEND_MODE)) {\r\n                this._blendMode = parseInt(node.getAttribute(ParticleElementAttributes.BLEND_MODE));\r\n            }\r\n\r\n            if (\r\n                node.hasAttribute(ParticleElementAttributes.STYLE) ||\r\n                node.hasAttribute(ParticleElementAttributes.STYLE2)\r\n            ) {\r\n                if (node.hasAttribute(ParticleElementAttributes.STYLE)) {\r\n                    this._style = <ParticleStyle>(\r\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE)]\r\n                    );\r\n                } else {\r\n                    this._style = <ParticleStyle>(\r\n                        StyleManager.Styles[node.getAttribute(ParticleElementAttributes.STYLE2)]\r\n                    );\r\n                }\r\n\r\n                this._styleName = this._style.name;\r\n\r\n                this.createParticles();\r\n                this._created = true;\r\n            }\r\n\r\n            if (node.hasAttribute(\"Speed\")) {\r\n                this.setSpeed(parseFloat(node.getAttribute(\"Speed\")));\r\n            }\r\n        }\r\n    }\r\n\r\n    private setSpeed(speed: number): void {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            this._pool[i].changeAnimationSpeed(speed);\r\n        }\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\r\n            this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\r\n        }\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\r\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.START) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\r\n        ) {\r\n            this.start(this._emitOnce, this._startType);\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\r\n        ) {\r\n            this.stopping();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\r\n        ) {\r\n            this.stop();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\r\n        ) {\r\n            this.reset();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\r\n        ) {\r\n            this.clear();\r\n        }\r\n    }\r\n\r\n    start(emitOnce: boolean = false, startType: string): void {\r\n        this.visible = true;\r\n        this._emitOnce = emitOnce;\r\n        this._startType = startType;\r\n        this._stopping = emitOnce;\r\n        this._stop = false;\r\n        if (!this._emitOnce) {\r\n            this._timer.start(this._style.time);\r\n            if (this._startType === \"now\") {\r\n                this.addParticles();\r\n            }\r\n        } else {\r\n            this.addParticles();\r\n        }\r\n    }\r\n\r\n    stopping(): void {\r\n        this._stopping = true;\r\n    }\r\n\r\n    stop(): void {\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._timer.stop();\r\n        this.visible = false;\r\n    }\r\n\r\n    reset(): void {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            this.setupPosition(this._pool[i]);\r\n            this._pool[i].visible = false;\r\n            this._pool[i].stop();\r\n        }\r\n    }\r\n\r\n    clear(): void {\r\n        this._stopping = false;\r\n        this._stop = true;\r\n        this._timer.stop();\r\n        this.visible = false;\r\n        this.removeAllFromPool();\r\n    }\r\n\r\n    private createParticles(): void {\r\n        if (this._style != null) {\r\n            if (this._style.images != null && this._style.images.length > 0) {\r\n                let elementsCount: number = this._style.calculateElements();\r\n                let elementsResources: Array<string> = this.prepareResources(elementsCount);\r\n\r\n                for (let i: number = 0; i < elementsCount; i++) {\r\n                    var node: Element = document.createElement(\"particle\");\r\n                    node.setAttribute(\"Style2\", elementsResources[i]);\r\n                    node.setAttribute(\"RandomStartFrame\", \"true\");\r\n                    let imageElement: AnimationElement = new AnimationElement();\r\n                    imageElement.create(node);\r\n                    let particleLife: number =\r\n                        Math.floor(Math.random() * (this._style.maxLife - this._style.minLife)) + this._style.minLife;\r\n\r\n                    this.setupParticle(imageElement);\r\n                    this.setupPosition(imageElement);\r\n\r\n                    this.addPathBehaviour(imageElement, particleLife);\r\n                    this.addScaleBehaviour(imageElement, particleLife);\r\n                    this.addRotationBehaviour(imageElement, particleLife);\r\n                    this.addAlphaBehaviour(imageElement, particleLife);\r\n\r\n                    this.addChild(imageElement);\r\n                    this._pool.push(imageElement);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private prepareResources(count: number): Array<string> {\r\n        let resources: Array<string> = [];\r\n        for (let i: number = 0; i < count; i++) {\r\n            resources.push(this._style.images[Math.floor(Math.random() * this._style.images.length)]);\r\n        }\r\n        return resources;\r\n    }\r\n\r\n    private setupParticle(imageElement: AnimationElement): void {\r\n        imageElement.visible = false;\r\n        imageElement.usedInPool = false;\r\n\r\n        if (this._blendMode != null) {\r\n            imageElement.blendMode = CustomUtils.getBlendMode(this._blendMode);\r\n        }\r\n    }\r\n\r\n    private setupPosition(imageElement: AnimationElement): void {\r\n        imageElement.pivot.x = imageElement.width / 2;\r\n        imageElement.pivot.y = imageElement.height / 2;\r\n\r\n        switch (this._style.positionZone.type) {\r\n            case ParticleStyle.ZoneRectangle:\r\n                imageElement.x = parseInt(\r\n                    (this._style.positionZone.x + Math.random() * this._style.positionZone.width).toFixed(0),\r\n                );\r\n                imageElement.y = parseInt(\r\n                    (this._style.positionZone.y + Math.random() * this._style.positionZone.height).toFixed(0),\r\n                );\r\n                break;\r\n            case ParticleStyle.ZoneLine:\r\n                // TODO\r\n                break;\r\n            /*case ParticleStyle.ZoneCircle:\r\n                // TODO\r\n                break;*/\r\n            case ParticleStyle.ZoneEllipse:\r\n                // TODO\r\n                break;\r\n        }\r\n    }\r\n\r\n    private addPathBehaviour(imageElement: AnimationElement, life: number): void {\r\n        if (this._style.pathValues != null) {\r\n            let points: Array<Object> = [];\r\n            for (let i: number = 0; i < this._style.pathValues.length; i++) {\r\n                if (\r\n                    this._style.pathValues[i] != null &&\r\n                    this._style.pathValues[i].x != null &&\r\n                    this._style.pathValues[i].y != null\r\n                ) {\r\n                    let valueX: number = this._style.pathValues[i].x;\r\n                    let valueY: number = this._style.pathValues[i].y;\r\n                    if (this._style.pathValues[i].randomX != null) {\r\n                        valueX =\r\n                            Math.floor(\r\n                                Math.random() * (this._style.pathValues[i].randomX - this._style.pathValues[i].x),\r\n                            ) + this._style.pathValues[i].x;\r\n                    }\r\n                    if (this._style.pathValues[i].randomY != null) {\r\n                        valueY =\r\n                            Math.floor(\r\n                                Math.random() * (this._style.pathValues[i].randomY - this._style.pathValues[i].y),\r\n                            ) + this._style.pathValues[i].y;\r\n                    }\r\n                    points.push({ x: imageElement.x + valueX, y: imageElement.y + valueY });\r\n                }\r\n            }\r\n            if (points.length > 2) {\r\n                Tweens.positionTween(imageElement, {\r\n                    bezier: {\r\n                        values: points,\r\n                    },\r\n                    tweenX: [imageElement.x, imageElement.x],\r\n                    tweenY: [imageElement.y, imageElement.y],\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                    callbackFunction: this.removeFromPool,\r\n                    callbackParams: [imageElement],\r\n                    callbackScope: null,\r\n                });\r\n            } else if (points.length === 2) {\r\n                Tweens.positionTween(imageElement, {\r\n                    tweenX: [points[0][\"x\"], points[1][\"x\"]],\r\n                    tweenY: [points[0][\"y\"], points[1][\"y\"]],\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                    callbackFunction: this.removeFromPool,\r\n                    callbackParams: [imageElement],\r\n                    callbackScope: null,\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    private addScaleBehaviour(imageElement: AnimationElement, life: number): void {\r\n        if (this._style.scaleValues != null) {\r\n            let scalePoints: Array<PIXI.Point> = [];\r\n            for (let i: number = 0; i < this._style.scaleValues.length; i++) {\r\n                let scaleValue: number;\r\n                if (this._style.scaleValues[i].length > 1) {\r\n                    scaleValue = parseFloat(\r\n                        (\r\n                            Math.random() * (this._style.scaleValues[i][1] - this._style.scaleValues[i][0]) +\r\n                            this._style.scaleValues[i][0]\r\n                        ).toFixed(1),\r\n                    );\r\n                } else {\r\n                    scaleValue = this._style.scaleValues[i][0];\r\n                }\r\n                scalePoints.push(new PIXI.Point(scaleValue, scaleValue));\r\n            }\r\n\r\n            if (scalePoints.length === 1) {\r\n                imageElement.scale.x = scalePoints[0].x;\r\n                imageElement.scale.y = scalePoints[0].y;\r\n            } else {\r\n                Tweens.scaleTween(imageElement, {\r\n                    tweenValues: scalePoints,\r\n                    tweenDuration: life,\r\n                    paused: false,\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    private addRotationBehaviour(imageElement: AnimationElement, life: number): void {\r\n        if (this._style.rotationValues != null && this._style.rotationValues.length > 1) {\r\n            let rotationAngles: Array<number> = [];\r\n            for (let i: number = 0; i < this._style.rotationValues.length; i++) {\r\n                let scaleValue: number;\r\n                if (this._style.rotationValues[i].length > 1) {\r\n                    scaleValue =\r\n                        Math.random() * (this._style.rotationValues[i][1] - this._style.rotationValues[i][0]) +\r\n                        this._style.rotationValues[i][0];\r\n                } else {\r\n                    scaleValue = this._style.rotationValues[i][0];\r\n                }\r\n\r\n                rotationAngles.push(scaleValue);\r\n            }\r\n\r\n            Tweens.rotationTween(imageElement, {\r\n                degrees: [rotationAngles[0], rotationAngles[1]],\r\n                tweenDuration: life,\r\n                paused: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    private addAlphaBehaviour(imageElement: AnimationElement, life: number): void {\r\n        if (this._style.alphaValues != null) {\r\n            let alphas: Array<number> = [];\r\n\r\n            for (let i: number = 0; i < this._style.alphaValues.length; i++) {\r\n                let alpha: number;\r\n                if (this._style.alphaValues[i].length > 1) {\r\n                    alpha =\r\n                        Math.random() * (this._style.alphaValues[i][1] - this._style.alphaValues[i][0]) +\r\n                        this._style.alphaValues[i][0];\r\n                } else {\r\n                    alpha = this._style.alphaValues[i][0];\r\n                }\r\n\r\n                alphas.push(alpha);\r\n            }\r\n\r\n            Tweens.alphaTween(imageElement, {\r\n                alphas: alphas,\r\n                tweenDuration: life,\r\n                paused: false,\r\n            });\r\n        }\r\n    }\r\n\r\n    private addParticles(): void {\r\n        if (!this._stop) {\r\n            this.getFromPool();\r\n\r\n            if (!this._stopping && this._style.time > 0) {\r\n                this._timer.start(this._style.time);\r\n            }\r\n        }\r\n    }\r\n\r\n    private getFromPool(): void {\r\n        this._pool.sort(function () {\r\n            return 0.5 - Math.random();\r\n        });\r\n\r\n        let counter: number = 0;\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            if (counter === this._style.count) {\r\n                return;\r\n            }\r\n            if (!this._pool[i].usedInPool) {\r\n                this._pool[i].usedInPool = true;\r\n                this._pool[i].visible = true;\r\n                this._pool[i].playMe();\r\n                counter++;\r\n                Tweens.restartTweens(this._pool[i].uid);\r\n            }\r\n        }\r\n    }\r\n\r\n    private removeFromPool(imageElement: AnimationElement): void {\r\n        imageElement.visible = false;\r\n        imageElement.usedInPool = false;\r\n        imageElement.stop();\r\n    }\r\n\r\n    private removeAllFromPool(): void {\r\n        for (let i: number = 0; i < this._pool.length; i++) {\r\n            this._pool[i].visible = false;\r\n            this._pool[i].usedInPool = false;\r\n            // TODO stop all tweens\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Clone method used for cloning instance of this element with his main properties.\r\n     * @method clone\r\n     * @return ParticleAnimationElement\r\n     */\r\n    clone(): ParticleAnimationElement {\r\n        var element: ParticleAnimationElement = new ParticleAnimationElement();\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        element._blendMode = this._blendMode;\r\n        var node: Element = document.createElement(\"particle\");\r\n        node.setAttribute(\"Style2\", this._styleName);\r\n        element.create(node);\r\n        element._markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleAnimationElement.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { ContainerElement } from \"./ContainerElement\";\r\nimport { ParticleElement, ParticleElementAttributes } from \"./ParticleElement\";\r\nimport { ParticleAnimationElement } from \"./ParticleAnimationElement\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\n// TODO add comments\r\nexport class ParticleGroupElement extends ContainerElement {\r\n    static DynamicKey: string = \"\";\r\n\r\n    private _emitOnce: boolean;\r\n    private _startType: string;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._emitOnce = false;\r\n        this._startType = \"\";\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        this.visible = false;\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.EMIT_ONCE)) {\r\n            this._emitOnce = StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.EMIT_ONCE));\r\n        }\r\n\r\n        if (node.hasAttribute(ParticleElementAttributes.START_TYPE)) {\r\n            this._startType = node.getAttribute(ParticleElementAttributes.START_TYPE);\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.START) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.START))\r\n        ) {\r\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n                this.start(this._emitOnce);\r\n            } else {\r\n                this.startSelected(this._emitOnce, ParticleGroupElement.DynamicKey);\r\n            }\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOPPING) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOPPING))\r\n        ) {\r\n            this.stopping();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.STOP) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.STOP))\r\n        ) {\r\n            this.stop();\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.RESET) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.RESET))\r\n        ) {\r\n            if (StringUtils.isNullOrEmpty(ParticleGroupElement.DynamicKey)) {\r\n                this.reset();\r\n            } else {\r\n                this.resetSelected(ParticleGroupElement.DynamicKey);\r\n            }\r\n        }\r\n\r\n        if (\r\n            node.hasAttribute(ParticleElementAttributes.CLEAR) &&\r\n            StringUtils.parseBoolean(node.getAttribute(ParticleElementAttributes.CLEAR))\r\n        ) {\r\n            this.clear();\r\n        }\r\n    }\r\n\r\n    start(emitOnce: boolean = false): void {\r\n        this._emitOnce = emitOnce;\r\n        this.visible = true;\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                    this.childs[key].start(this._emitOnce, this._startType);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    startSelected(emitOnce: boolean = false, particleKey: string): void {\r\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\r\n            this._emitOnce = emitOnce;\r\n            this.visible = true;\r\n\r\n            if (this.childs != null) {\r\n                for (let key in this.childs) {\r\n                    if (key.indexOf(particleKey) > -1) {\r\n                        if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                            this.childs[key].start(this._emitOnce, this._startType);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    stopping(): void {\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                    this.childs[key].stopping();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    stop(): void {\r\n        this.visible = false;\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                    this.childs[key].stop();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    reset(): void {\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                    this.childs[key].reset();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    resetSelected(particleKey: string): void {\r\n        if (!StringUtils.isNullOrEmpty(particleKey)) {\r\n            if (this.childs != null) {\r\n                for (let key in this.childs) {\r\n                    if (key.indexOf(particleKey) > -1) {\r\n                        if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                            this.childs[key].reset();\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    clear(): void {\r\n        this.visible = false;\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof ParticleElement || ParticleAnimationElement) {\r\n                    this.childs[key].clear();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /*clone(): ParticleGroupElement\r\n    {\r\n        let element: ParticleGroupElement = <ParticleGroupElement>super.clone();\r\n        element._emitOnce = this._emitOnce;\r\n        element._startType = this._startType;\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }*/\r\n\r\n    clone(): ParticleGroupElement {\r\n        let element: ParticleGroupElement = new ParticleGroupElement();\r\n\r\n        element.style = this.style;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n        element.visible = this.visible;\r\n        element.name = this.name;\r\n        element._emitOnce = this._emitOnce;\r\n        element._startType = this._startType;\r\n\r\n        element.childs = {};\r\n        element.removeChildren();\r\n        for (let key in this.childs) {\r\n            element.childs[key] = this.childs[key].clone();\r\n            element.addChild(element.childs[key]);\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ParticleGroupElement.ts\n **/","import { ArrayUtils, StringUtils, Logger, engineComponent, Utils } from \"neo-common\";\r\nimport { ParticleStyle } from \"../Styles/ParticleStyle\";\r\nimport { StyleManager } from \"../../Managers/StyleManager\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { AnimationFrameBaseElement } from \"../../../AnimationFrame/AnimationFrame\";\r\nimport { StageController } from \"../../StageController\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\n\r\nvar protonProto: any = window[\"Proton\"];\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ProtonElement extends AnimationFrameBaseElement {\r\n    static Pool: Object = {};\r\n\r\n    private _animationName: string = \"\";\r\n\r\n    // style is mandatory\r\n    private _style: ParticleStyle;\r\n    private _styleName: string;\r\n    private _proton: Proton.Proton;\r\n    private _renderer: Proton.Renderer;\r\n    private _emitters: Array<Proton.Emitter>;\r\n\r\n    private _tint: number;\r\n    private _blendMode: number;\r\n    private _emitting: boolean;\r\n    private _stopping: boolean;\r\n    private _textures: Array<PIXI.Texture>;\r\n    private _animationSpeed: number;\r\n    private _animationLoop: boolean;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._emitting = false;\r\n        this._stopping = true;\r\n        //this._stopped = true;\r\n        this._animationSpeed = 1;\r\n        this._animationLoop = true;\r\n        this._emitters = [];\r\n        this._proton = new protonProto() as Proton.Proton;\r\n\r\n        this.onProtonUpdate = this.onProtonUpdate.bind(this);\r\n        this.onParticleCreated = this.onParticleCreated.bind(this);\r\n        this.onParticleUpdate = this.onParticleUpdate.bind(this);\r\n        this.onParticleDead = this.onParticleDead.bind(this);\r\n        this.transformSprite = this.transformSprite.bind(this);\r\n        this.alphaDead = this.alphaDead.bind(this);\r\n        this.scaleDead = this.scaleDead.bind(this);\r\n    }\r\n\r\n    protected frame_onFrame(): void {\r\n        this._proton.update();\r\n    }\r\n\r\n    protected get frame_name(): string {\r\n        return this._styleName;\r\n    }\r\n\r\n    public updateByNode(node: Element): void {\r\n        this.create(node);\r\n\r\n        this.super2.runTween(node);\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        this.super2.createByNode(node);\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.TINT)) {\r\n            this._tint = parseInt(node.getAttribute(ProtonElementAttributes.TINT), 16);\r\n        }\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.BLEND_MODE)) {\r\n            this._blendMode = parseInt(node.getAttribute(ProtonElementAttributes.BLEND_MODE));\r\n        }\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.STYLE) || node.hasAttribute(ProtonElementAttributes.STYLE_2)) {\r\n            if (node.hasAttribute(ProtonElementAttributes.STYLE)) {\r\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(ProtonElementAttributes.STYLE)];\r\n                this._styleName = this._style.node.nodeName;\r\n            } else {\r\n                this._style = <ParticleStyle>StyleManager.Styles[node.getAttribute(ProtonElementAttributes.STYLE_2)];\r\n                this._styleName = this._style.node.nodeName;\r\n            }\r\n\r\n            if (this._style != null) {\r\n                var next: Element = this._style.node.firstElementChild;\r\n                while (next != null) {\r\n                    if (next.nodeName === \"Emitter\") {\r\n                        var emitter: Proton.Emitter = new Proton.Emitter();\r\n                        this._emitters.push(emitter);\r\n\r\n                        var emitterNext: Element = next.firstElementChild;\r\n                        while (emitterNext != null) {\r\n                            switch (emitterNext.nodeName) {\r\n                                case \"Rate\":\r\n                                    if (emitterNext.hasAttribute(\"Rate\")) {\r\n                                        let rate: Array<number> = ArrayUtils.numberArray(\r\n                                            emitterNext.getAttribute(\"Rate\"),\r\n                                        );\r\n                                        if (rate.length === 2) {\r\n                                            emitter.rate = new Proton.Rate(rate[0], rate[1]);\r\n                                        } else {\r\n                                            if (DEBUG) {\r\n                                                this.log(\r\n                                                    \"WARNING Rate has different number of parameters. It has to have two parameters.\",\r\n                                                );\r\n                                            }\r\n                                        }\r\n                                    } else if (\r\n                                        emitterNext.hasAttribute(\"RateStart\") &&\r\n                                        emitterNext.hasAttribute(\"RateEnd\")\r\n                                    ) {\r\n                                        /**\r\n                                         * @deprecated Misleading naming of RateStart. Instead this use NumPan.\r\n                                         * @type {Array<number>}\r\n                                         */\r\n                                        let rateStart: Array<number> = ArrayUtils.numberArray(\r\n                                            emitterNext.getAttribute(\"RateStart\"),\r\n                                        );\r\n                                        /**\r\n                                         * @deprecated Misleading naming of RateEnd. Instead this use TimePan.\r\n                                         * @type {Array<number>}\r\n                                         */\r\n                                        let rateEnd: Array<number> = ArrayUtils.numberArray(\r\n                                            emitterNext.getAttribute(\"RateEnd\"),\r\n                                        );\r\n                                        emitter.rate = new Proton.Rate(\r\n                                            new Proton.Span(rateStart[0], rateStart[1]),\r\n                                            new Proton.Span(rateEnd[0], rateEnd[1]),\r\n                                        );\r\n                                    } else if (\r\n                                        emitterNext.hasAttribute(\"NumPan\") &&\r\n                                        emitterNext.hasAttribute(\"TimePan\")\r\n                                    ) {\r\n                                        let numPan: Array<number> = ArrayUtils.numberArray(\r\n                                            emitterNext.getAttribute(\"NumPan\"),\r\n                                        );\r\n                                        let timePan: Array<number> = ArrayUtils.numberArray(\r\n                                            emitterNext.getAttribute(\"TimePan\"),\r\n                                        );\r\n                                        emitter.rate = new Proton.Rate(\r\n                                            new Proton.Span(numPan[0], numPan[1]),\r\n                                            new Proton.Span(timePan[0], timePan[1]),\r\n                                        );\r\n                                    } else {\r\n                                        if (DEBUG) {\r\n                                            this.log(\"WARNING Rate has wrong attributes\");\r\n                                        }\r\n                                    }\r\n                                    break;\r\n                                case \"Initializers\":\r\n                                    this.createInitializers(emitterNext, this._emitters[this._emitters.length - 1]);\r\n                                    break;\r\n                                case \"Behaviours\":\r\n                                    this.createBehaviours(emitterNext, this._emitters[this._emitters.length - 1]);\r\n                                    break;\r\n                                default:\r\n                                    if (DEBUG) {\r\n                                        this.log(\"WARNING unknown type for emitter\");\r\n                                    }\r\n                            }\r\n                            emitterNext = emitterNext.nextElementSibling;\r\n                        }\r\n\r\n                        if (next.hasAttribute(\"Emit\")) {\r\n                            emitter.emit(next.getAttribute(\"Emit\"));\r\n                        } else {\r\n                            emitter.emit();\r\n                        }\r\n\r\n                        if (next.hasAttribute(\"X\")) {\r\n                            emitter[\"p\"].x = parseInt(next.getAttribute(\"X\"));\r\n                        }\r\n\r\n                        if (next.hasAttribute(\"Y\")) {\r\n                            emitter[\"p\"].y = parseInt(next.getAttribute(\"Y\"));\r\n                        }\r\n                    }\r\n                    next = next.nextElementSibling;\r\n                }\r\n\r\n                if (this._emitters != null) {\r\n                    for (var i = 0; i < this._emitters.length; i++) {\r\n                        this._proton.addEmitter(this._emitters[i]);\r\n                    }\r\n\r\n                    this._renderer = new Proton.Renderer(\"other\", this._proton);\r\n                    this._renderer.onProtonUpdate = this.onProtonUpdate;\r\n                    this._renderer.onParticleCreated = this.onParticleCreated;\r\n                    this._renderer.onParticleUpdate = this.onParticleUpdate;\r\n                    this._renderer.onParticleDead = this.onParticleDead;\r\n                    this._emitting = false;\r\n                    this.frame_stop();\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no emitters\");\r\n                    }\r\n                }\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no style with name: \" + node.getAttribute(ProtonElementAttributes.STYLE));\r\n                }\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.START)) {\r\n            if (this.isFrameStopped) {\r\n                if (this._renderer != null) {\r\n                    this._renderer.stop();\r\n                }\r\n\r\n                this.removeChilds();\r\n\r\n                if (this._emitters != null && this._emitters.length > 0) {\r\n                    if (node.hasAttribute(ProtonElementAttributes.EMIT)) {\r\n                        for (var i: number = 0; i < this._emitters.length; i++) {\r\n                            this._emitters[i].emit(node.getAttribute(ProtonElementAttributes.EMIT));\r\n                        }\r\n                    }\r\n                }\r\n                if (this._renderer != null) {\r\n                    this._renderer.start();\r\n                    this._stopping = false;\r\n                    this._emitting = true;\r\n                    this.frame_start();\r\n                }\r\n            } else if (this._stopping) {\r\n                this._emitting = true;\r\n                this._stopping = false;\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.STOPPING)) {\r\n            this._emitting = false;\r\n            this._stopping = true;\r\n        }\r\n\r\n        if (node.hasAttribute(ProtonElementAttributes.STOP)) {\r\n            this.stop();\r\n        }\r\n    }\r\n\r\n    start(emit: string = \"\") {\r\n        if (this.isFrameStopped) {\r\n            /*\r\n            if (this._renderer != null) {\r\n                this._renderer.stop();\r\n            }\r\n            */\r\n\r\n            this.removeChilds();\r\n\r\n            if (this._emitters != null && this._emitters.length > 0) {\r\n                if (emit != \"\") {\r\n                    for (var i: number = 0; i < this._emitters.length; i++) {\r\n                        //this._emitters[i]['age'] = 1;\r\n                        //this._emitters[i].stopEmit();\r\n                        //this._emitters[i].removeAllParticles();\r\n                        this._emitters[i].emit(emit);\r\n                    }\r\n                }\r\n            }\r\n            if (this._renderer != null) {\r\n                this._renderer.start();\r\n                this._stopping = false;\r\n                this._emitting = true;\r\n                this.frame_start();\r\n            }\r\n        }\r\n    }\r\n\r\n    private onProtonUpdate(): void {\r\n        var emmiter0 = this._emitters[0];\r\n\r\n        if (emmiter0[\"emitTotalTimes\"] === \"none\" && emmiter0[\"particles\"].length === 0) {\r\n            this._emitting = false;\r\n            this.frame_stop();\r\n            this._renderer.stop();\r\n\r\n            this.removeChilds();\r\n        }\r\n    }\r\n\r\n    private onParticleCreated(particle: any): void {\r\n        if (this._stopping === false) {\r\n            particle.sprite = null;\r\n            if (particle.sprite != null) {\r\n                if (this._textures != null && this._textures.length > 0) {\r\n                    ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n                    this.super2.removeChild(particle.sprite);\r\n                } else {\r\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n                    this.super2.removeChild(particle.sprite);\r\n                }\r\n            }\r\n            let particleSprite: any;\r\n            if (this._textures != null && this._textures.length > 0) {\r\n                if (ProtonElement.Pool[this._animationName] == null) {\r\n                    ProtonElement.Pool[this._animationName] = [];\r\n                }\r\n\r\n                /*\r\n                particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\r\n                particleSprite.name = this._animationName;\r\n                */\r\n\r\n                if (ProtonElement.Pool[this._animationName].length === 0) {\r\n                    particleSprite = new PIXI.extras.AnimatedSprite(this._textures);\r\n                    particleSprite.name = this._animationName;\r\n                } else {\r\n                    particleSprite = ProtonElement.Pool[this._animationName].shift();\r\n                }\r\n\r\n                particleSprite.loop = this._animationLoop;\r\n                particleSprite.animationSpeed = this._animationSpeed;\r\n                if (!this._animationLoop) {\r\n                    particleSprite.gotoAndStop(0);\r\n                }\r\n                particleSprite.play();\r\n            } else {\r\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]] == null) {\r\n                    ProtonElement.Pool[particle.target.textureCacheIds[0]] = [];\r\n                }\r\n\r\n                if (ProtonElement.Pool[particle.target.textureCacheIds[0]].length === 0) {\r\n                    particleSprite = new PIXI.Sprite(particle.target);\r\n                    particleSprite.name = particle.target.textureCacheIds[0];\r\n                } else {\r\n                    particleSprite = ProtonElement.Pool[particle.target.textureCacheIds[0]].shift();\r\n                }\r\n            }\r\n            if (this._tint != null) {\r\n                particleSprite.tint = this._tint;\r\n            }\r\n\r\n            if (this._blendMode != null) {\r\n                particleSprite.blendMode = CustomUtils.getBlendMode(this._blendMode);\r\n            }\r\n\r\n            particleSprite.visible = true;\r\n            particle.sprite = particleSprite;\r\n            this.super2.addChild(particleSprite);\r\n        }\r\n    }\r\n\r\n    private onParticleUpdate(particle: any): void {\r\n        if (particle != null && particle.sprite != null) {\r\n            this.transformSprite(particle.sprite, particle);\r\n        }\r\n    }\r\n\r\n    private onParticleDead(particle: any) {\r\n        if (particle.sprite != null) {\r\n            particle.sprite.visible = false;\r\n            if (particle.sprite instanceof PIXI.extras.AnimatedSprite) {\r\n                particle.sprite.stop();\r\n            }\r\n            this.super2.removeChild(particle.sprite);\r\n        }\r\n\r\n        particle.sprite = null;\r\n        particle.dead = true;\r\n        particle = null;\r\n    }\r\n\r\n    /**\r\n     * Transform sprite in particle with proton.\r\n     * @method transformSprite\r\n     * @param particleSprite any\r\n     * @param particle any\r\n     * @return void\r\n     */\r\n    private transformSprite(particleSprite: any, particle: any) {\r\n        if (\r\n            particleSprite.transform != null &&\r\n            !Utils.isNullOrUndefined(particleSprite) &&\r\n            !Utils.isNullOrUndefined(particle)\r\n        ) {\r\n            particleSprite.position.x = particle.p.x;\r\n            particleSprite.position.y = particle.p.y;\r\n            particleSprite.scale.x = particle.scale;\r\n            particleSprite.scale.y = particle.scale;\r\n            particleSprite.anchor.x = 0.5;\r\n            particleSprite.anchor.y = 0.5;\r\n            particleSprite.alpha = particle.alpha;\r\n            particleSprite.rotation = (particle.rotation * Math.PI) / 180;\r\n        } else {\r\n            particle.dead = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Stop emitting particles.\r\n     * @method stop\r\n     * @return void\r\n     */\r\n    stop(): void {\r\n        this._emitting = false;\r\n        this._stopping = true;\r\n        this.frame_stop();\r\n\r\n        for (var i: number = 0; i < this._emitters.length; i++) {\r\n            this._emitters[i].resetParticles();\r\n        }\r\n\r\n        if (this._renderer != null) {\r\n            this._renderer.stop();\r\n        }\r\n\r\n        this.removeChilds();\r\n    }\r\n\r\n    removeChilds(): void {\r\n        if (this.super2.children != null) {\r\n            let i: number = 0;\r\n            while (this.super2.children.length !== 0) {\r\n                if (this.super2.children[0] != null) {\r\n                    if (this._textures != null && this._textures.length > 0) {\r\n                        (this.super2.children[0] as PIXI.extras.AnimatedSprite).stop();\r\n                        ProtonElement.Pool[this._animationName].push(this.super2.children[0]);\r\n                    } else {\r\n                        ProtonElement.Pool[this.super2.children[0].name].push(this.super2.children[0]);\r\n                    }\r\n                    this.super2.removeChild(this.super2.children[0]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    internalDestroy(options?: PIXI.DestroyOptions | boolean): void {\r\n        this._emitting = false;\r\n        this._stopping = true;\r\n        this.frame_stop();\r\n        this._textures = null;\r\n\r\n        if (this._emitters != null && this._emitters.length > 0) {\r\n            for (var i = 0; i < this._emitters.length; i++) {\r\n                if (this._emitters[i] != null) {\r\n                    this._proton.removeEmitter(this._emitters[i]);\r\n                    this._emitters[i].destroy();\r\n                    this._emitters[i] = null;\r\n                }\r\n            }\r\n        }\r\n\r\n        // removeEmitter\r\n        // particleSleep\r\n        // destroy\r\n\r\n        if (this._renderer != null) {\r\n            this._renderer.stop();\r\n            this._renderer = null;\r\n        }\r\n\r\n        this._proton.destroy();\r\n        this._proton = null;\r\n\r\n        this.removeChilds();\r\n    }\r\n\r\n    /**\r\n     * Create initializers from xml for emitter instance.\r\n     * Initializers create start values and behaviour for particle instances.\r\n     * @method createInitializers\r\n     * @param node is Element from xml\r\n     * @param emitter Proton.Emitter\r\n     * @return void\r\n     */\r\n    private createInitializers(node: Element, emitter: Proton.Emitter): void {\r\n        var next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case \"ImageTarget\":\r\n                    var imageTarget: Proton.ImageTarget = this.addImageTarget(next);\r\n                    if (imageTarget != null) {\r\n                        emitter.addInitialize(imageTarget);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING ImageTarget is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"AnimationTarget\":\r\n                    this.addAnimationTarget(next);\r\n                    break;\r\n                case \"Radius\":\r\n                    var radius: Proton.Radius = this.addRadius(next);\r\n                    if (radius != null) {\r\n                        emitter.addInitialize(radius);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Radius is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Mass\":\r\n                    var mass: Proton.Mass = this.addMass(next);\r\n                    if (mass != null) {\r\n                        emitter.addInitialize(mass);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Mass is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Life\":\r\n                    var life: Proton.Life = this.addLife(next);\r\n                    if (life != null) {\r\n                        emitter.addInitialize(life);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Life is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Position\":\r\n                    var position: Proton.Position = this.addPosition(next);\r\n                    if (position != null) {\r\n                        emitter.addInitialize(position);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Position is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Velocity\":\r\n                    var velocity: Proton.Velocity = this.addVelocity(next);\r\n                    if (velocity != null) {\r\n                        emitter.addInitialize(velocity);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Velocity is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                default:\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING unknown initializer\");\r\n                    }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add initializer ImageTarget.\r\n     * This initializer add images instead of shapes as particles.\r\n     * Example:\r\n     *   <ImageTarget Image=\"IMAGE_1;IMAGE_2;IMAGE_3;IMAGE_4;IMAGE_5;IMAGE_6\" />\r\n     * @method addImageTarget\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private addImageTarget(node: Element): Proton.Radius {\r\n        if (node.hasAttribute(\"Image\")) {\r\n            var arr: Array<string> = node.getAttribute(\"Image\").split(\";\");\r\n            var arrTextures: Array<PIXI.Texture> = [];\r\n            for (var i: number = 0; i < arr.length; i++) {\r\n                var resourceId = arr[i];\r\n                var texture: PIXI.Texture = StageController.getTextureByResourceId(resourceId);\r\n                if (texture != null) {\r\n                    arrTextures.push(texture);\r\n                }\r\n            }\r\n            if (arrTextures != null && arrTextures.length > 0) {\r\n                return new Proton.ImageTarget(arrTextures);\r\n            } else {\r\n                return null;\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Image target has no attribute Image\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add initializer animation as target for particle.\r\n     * Example:\r\n     *   <AnimationTarget Animation=\"[AnimationId]\" Speed=\"1\" Frames=\"numberOfFrames\" Loop=\"false\"/>\r\n     * @method addAnimationTarget\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    private addAnimationTarget(node: Element): void {\r\n        if (node.hasAttribute(\"Animation\") && node.hasAttribute(\"Frames\")) {\r\n            if (node.hasAttribute(\"Speed\")) {\r\n                this._animationSpeed = parseFloat(node.getAttribute(\"Speed\"));\r\n            }\r\n\r\n            if (node.hasAttribute(\"Loop\")) {\r\n                this._animationLoop = StringUtils.parseBoolean(node.getAttribute(\"Loop\"));\r\n            }\r\n\r\n            this._animationName = node.getAttribute(\"Animation\");\r\n\r\n            this._textures = [];\r\n            for (var i = 0; i < parseInt(node.getAttribute(\"Frames\")); i++) {\r\n                var val = i < 10 ? \"0\" + i : i;\r\n                var texture: PIXI.Texture = PIXI.Texture.fromFrame(node.getAttribute(\"Animation\") + \"00\" + val);\r\n                this._textures.push(texture);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Add initializer Mass.\r\n     * Example:\r\n     *   <Mass Mass=\"1;5\" />\r\n     * @method addMass\r\n     * @param node is Element from xml\r\n     * @return Proton.Mass\r\n     */\r\n    private addMass(node: Element): Proton.Mass {\r\n        if (node.hasAttribute(\"Mass\")) {\r\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Mass\"));\r\n            if (arr.length === 3) {\r\n                return new Proton.Mass(arr[0], arr[1], arr[2]);\r\n            } else if (arr.length === 2) {\r\n                return new Proton.Mass(arr[0], arr[1]);\r\n            } else if (arr.length === 1) {\r\n                return new Proton.Mass(arr[0]);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING Mass attribute doesnt have parameters\");\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no attribute Mass in Mass initializer\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add initializer Radius.\r\n     * Example:\r\n     *   <Radius Radius=\"50;130\" />\r\n     * @method addRadius\r\n     * @param node is Element from xml\r\n     * @return Proton.Radius\r\n     */\r\n    private addRadius(node: Element): Proton.Radius {\r\n        if (node.hasAttribute(\"Radius\")) {\r\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Radius\"));\r\n            if (arr.length === 3) {\r\n                return new Proton.Radius(arr[0], arr[1], arr[2]);\r\n            } else if (arr.length === 2) {\r\n                return new Proton.Radius(arr[0], arr[1]);\r\n            } else if (arr.length === 1) {\r\n                return new Proton.Radius(arr[0]);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING Radius attribute doesnt have parameters\");\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no attribute Radius in Radius initializer\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add initializer Life.\r\n     * Example:\r\n     *   <Life Life=\"20\" />\r\n     * @method addLife\r\n     * @param node is Element from xml\r\n     * @return Proton.Life\r\n     */\r\n    private addLife(node: Element): Proton.Life {\r\n        if (node.hasAttribute(\"Life\")) {\r\n            var arr: Array<number> = ArrayUtils.numberArray(node.getAttribute(\"Life\"));\r\n            if (arr.length === 3) {\r\n                return new Proton.Life(arr[0], arr[1], arr[2]);\r\n            } else if (arr.length === 2) {\r\n                return new Proton.Life(arr[0], arr[1]);\r\n            } else if (arr.length === 1) {\r\n                return new Proton.Life(arr[0]);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING Life attribute doesnt have parameters\");\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no attribute Life in Life initializer\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add initializer Position. Position use zones. See method getZone().\r\n     * Example:\r\n     *   <Position>\r\n     *       <RectZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" />\r\n     *   </Position>\r\n     * @method addPosition\r\n     * @param node is Element from xml\r\n     * @return Proton.Position\r\n     */\r\n    private addPosition(node: Element): Proton.Position {\r\n        var zone: Element = node.firstElementChild;\r\n        if (zone != null) {\r\n            return new Proton.Position(this.getZone(zone));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Position has no zone\");\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add initializer Velocity.\r\n     * Example:\r\n     *   <Velocity RPan=\"0.1;0.3\" ThaPan=\"0;360\" Type=\"polar\" />\r\n     * @method addVelocity\r\n     * @param node is Element from xml\r\n     * @return Proton.Velocity\r\n     */\r\n    private addVelocity(node: Element): Proton.Velocity {\r\n        var rpan: Array<number>;\r\n        var thapan: Array<number>;\r\n        var type: string;\r\n\r\n        if (node.getAttribute(\"RPan\")) {\r\n            rpan = ArrayUtils.numberArray(node.getAttribute(\"RPan\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no attribute RPan in Velocity\");\r\n            }\r\n        }\r\n\r\n        if (node.getAttribute(\"ThaPan\")) {\r\n            thapan = ArrayUtils.numberArray(node.getAttribute(\"ThaPan\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no attribute ThaPan in Velocity\");\r\n            }\r\n        }\r\n\r\n        if (node.getAttribute(\"Type\")) {\r\n            type = node.getAttribute(\"Type\");\r\n        }\r\n\r\n        if (rpan != null && thapan != null) {\r\n            var rpanSpan: any;\r\n            if (rpan.length === 2) {\r\n                rpanSpan = new Proton.Span(rpan[0], rpan[1]);\r\n            } else {\r\n                rpanSpan = rpan[0];\r\n            }\r\n\r\n            var thapanSpan: any;\r\n            if (thapan.length === 2) {\r\n                thapanSpan = new Proton.Span(thapan[0], thapan[1]);\r\n            } else {\r\n                thapanSpan = thapan[0];\r\n            }\r\n            if (type != null) {\r\n                return new Proton.Velocity(rpanSpan, thapanSpan, type);\r\n            } else {\r\n                return new Proton.Velocity(rpanSpan, thapanSpan);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING missing some attribute in Velocity\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Return zone from xml.\r\n     * @method getZone\r\n     * @param node is Element from xml\r\n     * @return any\r\n     */\r\n    private getZone(node: Element): any {\r\n        switch (node.nodeName) {\r\n            case \"RectZone\":\r\n                var rectZoneX: number;\r\n                var rectZoneY: number;\r\n                var rectZoneWidth: number;\r\n                var rectZoneHeight: number;\r\n\r\n                if (node.hasAttribute(\"X\")) {\r\n                    rectZoneX = parseInt(node.getAttribute(\"X\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute X in RectZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Y\")) {\r\n                    rectZoneY = parseInt(node.getAttribute(\"Y\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Y in RectZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Width\")) {\r\n                    rectZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Width in RectZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Height\")) {\r\n                    rectZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Height in RectZone\");\r\n                    }\r\n                }\r\n\r\n                if (rectZoneX != null && rectZoneY != null && rectZoneWidth != null && rectZoneHeight != null) {\r\n                    return new Proton.RectZone(rectZoneX, rectZoneY, rectZoneWidth, rectZoneHeight);\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING missing some attributes in RectZone\");\r\n                    }\r\n                }\r\n                break;\r\n            case \"LineZone\":\r\n                var lineZoneX: number;\r\n                var lineZoneY: number;\r\n                var lineZoneWidth: number;\r\n                var lineZoneHeight: number;\r\n                var lineZoneDirection: string;\r\n\r\n                if (node.hasAttribute(\"X\")) {\r\n                    lineZoneX = parseInt(node.getAttribute(\"X\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute X in LineZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Y\")) {\r\n                    lineZoneY = parseInt(node.getAttribute(\"Y\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Y in LineZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Width\")) {\r\n                    lineZoneWidth = parseInt(node.getAttribute(\"Width\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Width in LineZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Height\")) {\r\n                    lineZoneHeight = parseInt(node.getAttribute(\"Height\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Height in LineZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Direction\")) {\r\n                    lineZoneDirection = node.getAttribute(\"Direction\");\r\n                }\r\n\r\n                if (lineZoneX != null && lineZoneY != null && lineZoneWidth != null && lineZoneHeight != null) {\r\n                    if (lineZoneDirection != null) {\r\n                        return new Proton.LineZone(\r\n                            lineZoneX,\r\n                            lineZoneY,\r\n                            lineZoneWidth,\r\n                            lineZoneHeight,\r\n                            lineZoneDirection,\r\n                        );\r\n                    } else {\r\n                        return new Proton.LineZone(lineZoneX, lineZoneY, lineZoneWidth, lineZoneHeight);\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING missing some attributes in LineZone\");\r\n                    }\r\n                }\r\n\r\n                break;\r\n            case \"CircleZone\":\r\n                var circleZoneX: number;\r\n                var circleZoneY: number;\r\n                var circleZoneRadius: number;\r\n\r\n                if (node.hasAttribute(\"X\")) {\r\n                    circleZoneX = parseInt(node.getAttribute(\"X\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute X in CircleZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Y\")) {\r\n                    circleZoneY = parseInt(node.getAttribute(\"Y\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Y in CircleZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Radius\")) {\r\n                    circleZoneRadius = parseInt(node.getAttribute(\"Radius\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Radius in CircleZone\");\r\n                    }\r\n                }\r\n\r\n                if (circleZoneX != null && circleZoneY != null && circleZoneRadius != null) {\r\n                    return new Proton.CircleZone(circleZoneX, circleZoneY, circleZoneRadius);\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING missing some attributes in CircleZone\");\r\n                    }\r\n                }\r\n                break;\r\n            case \"PointZone\":\r\n                let pointZoneX: number;\r\n                let pointZoneY: number;\r\n\r\n                if (node.hasAttribute(\"X\")) {\r\n                    pointZoneX = parseInt(node.getAttribute(\"X\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute X in PointZone\");\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute(\"Y\")) {\r\n                    pointZoneY = parseInt(node.getAttribute(\"Y\"));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING no attribute Y in PointZone\");\r\n                    }\r\n                }\r\n\r\n                if (pointZoneX != null && pointZoneY != null) {\r\n                    return new Proton.PointZone(pointZoneX, pointZoneY);\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING missing some attributes in PointZone\");\r\n                    }\r\n                }\r\n\r\n                break;\r\n            case \"ImageZone\":\r\n                /*let x: number;\r\n                let y: number;\r\n\r\n                if (node.hasAttribute('X')) {\r\n                    x = parseInt(node.getAttribute('X'));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log('WARNING no attribute X in PointZone');\r\n                    }\r\n                }\r\n\r\n                if (node.hasAttribute('Y')) {\r\n                    y = parseInt(node.getAttribute('Y'));\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log('WARNING no attribute Y in PointZone');\r\n                    }\r\n                }*/\r\n\r\n                if (node.hasAttribute(\"Image\")) {\r\n                    let texture: PIXI.Texture = StageController.getTextureByResourceId(node.getAttribute(\"Image\"));\r\n                    let particleSprite = new PIXI.Sprite(texture);\r\n                    let pixelData: number[] = StageController.Renderer.extract.pixels(particleSprite);\r\n\r\n                    return new Proton.ImageZone(\r\n                        { data: pixelData, width: particleSprite.width, height: particleSprite.height },\r\n                        0,\r\n                        0,\r\n                    );\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING missing some attributes in ImageZone\");\r\n                    }\r\n                }\r\n\r\n                break;\r\n            default:\r\n                if (DEBUG) {\r\n                    this.log(\"WARNING unknown type zone: \" + node.nodeName);\r\n                }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Create behaviours from xml for emitter instance.\r\n     * This bevaiours will define behaviour of particle when particle is alive.\r\n     * @method createBehaviours\r\n     * @param node is Element from xml\r\n     * @param emitter Proton.Emitter\r\n     * @return void\r\n     */\r\n    private createBehaviours(node: Element, emitter: Proton.Emitter): void {\r\n        var next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case \"AlphaDead\":\r\n                    if (next.hasAttribute(\"Age\")) {\r\n                        emitter.addBehaviour(this.alphaDead(parseFloat(next.getAttribute(\"Age\"))));\r\n                    } else {\r\n                        emitter.addBehaviour(this.alphaDead(1));\r\n                    }\r\n                    break;\r\n                case \"ScaleDead\":\r\n                    emitter.addBehaviour(this.scaleDead());\r\n                    break;\r\n                case \"Alpha\":\r\n                    var alpha: Proton.Alpha = this.addAlpha(next);\r\n                    if (alpha != null) {\r\n                        emitter.addBehaviour(alpha);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Alpha is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Scale\":\r\n                    var scale: Proton.Scale = this.addScale(next);\r\n                    if (scale != null) {\r\n                        emitter.addBehaviour(scale);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Scale is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Rotate\":\r\n                    var rotate: Proton.Rotate = this.addRotate(next);\r\n                    if (rotate != null) {\r\n                        emitter.addBehaviour(rotate);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Rotate is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Color\":\r\n                    var color: Proton.Color = this.addColor(next);\r\n                    if (color != null) {\r\n                        emitter.addBehaviour(color);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Color is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"CrossZone\":\r\n                    var crossZone: Proton.CrossZone = this.addCrossZone(next);\r\n                    if (crossZone != null) {\r\n                        emitter.addBehaviour(crossZone);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING CrossZone is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"RandomDrift\":\r\n                    var randomDrift: Proton.RandomDrift = this.addRandomDrift(next);\r\n                    if (randomDrift != null) {\r\n                        emitter.addBehaviour(randomDrift);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING RandomDrift is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                case \"Gravity\":\r\n                    var gravity: Proton.Gravity = this.addGravity(next);\r\n                    if (gravity != null) {\r\n                        emitter.addBehaviour(gravity);\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"WARNING Gravity is null\");\r\n                        }\r\n                    }\r\n                    break;\r\n                default:\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING unknown behaviour\");\r\n                    }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * AlphaDead is custom custom dead behaviour. After particle reach some age particle will fade out to alpha 0.\r\n     * Example:\r\n     *   <AlphaDead Age=\"10\" />\r\n     * @method alphaDead\r\n     * @param age number\r\n     * @return any\r\n     */\r\n    alphaDead(age: number): any {\r\n        var self: any = this;\r\n        return {\r\n            initialize: function (particle: any) {},\r\n            applyBehaviour: function (particle: any) {\r\n                if (particle.age >= age) {\r\n                    particle[\"transform\"][\"alphaA\"] = 1;\r\n                    particle[\"transform\"][\"alphaB\"] = 0;\r\n                }\r\n\r\n                if (particle.age >= particle.life) {\r\n                    if (particle.sprite != null) {\r\n                        if (self._textures != null && self._textures.length > 0) {\r\n                            ProtonElement.Pool[self._animationName].push(particle.sprite);\r\n                        } else {\r\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n                        }\r\n                        self.super2.removeChild(particle.sprite);\r\n                    }\r\n                    particle.sprite = null;\r\n                    particle.dead = true;\r\n                    particle = null;\r\n                }\r\n            },\r\n        };\r\n    }\r\n\r\n    /**\r\n     * ScaleDead is custom custom dead behaviour. After particle reach some energy particle will scale down to zero.\r\n     * Example:\r\n     *   <ScaleDead />\r\n     * @method scaleDead\r\n     * @return any\r\n     */\r\n    scaleDead(): any {\r\n        var self: any = this;\r\n        return {\r\n            initialize: function (particle: any) {\r\n                particle.scale = 0;\r\n            },\r\n            applyBehaviour: function (particle: any) {\r\n                if (particle.energy >= 2 / 3) {\r\n                    particle.scale = particle.scale * (1 - particle.energy) * 3;\r\n                } else if (particle.energy <= 1 / 3) {\r\n                    particle.scale = particle.scale * (particle.energy * 3);\r\n                }\r\n                if (particle.scale < 0) {\r\n                    if (particle.sprite != null) {\r\n                        if (this._textures != null && this._textures.length > 0) {\r\n                            ProtonElement.Pool[this._animationName].push(particle.sprite);\r\n                        } else {\r\n                            ProtonElement.Pool[particle.target.textureCacheIds[0]].push(particle.sprite);\r\n                        }\r\n                        self.super2.removeChild(particle.sprite);\r\n                    }\r\n                    particle.sprite = null;\r\n                    particle.dead = true;\r\n                    particle = null;\r\n                }\r\n            },\r\n        };\r\n    }\r\n\r\n    /**\r\n     * Add behaviour Alpha.\r\n     * Example:\r\n     *   <Alpha Start=\"0\" End=\"1\" Life=\"5\" />\r\n     * @method addAlpha\r\n     * @param node is Element from xml\r\n     * @return Proton.Alpha\r\n     */\r\n    private addAlpha(node: Element): Proton.Alpha {\r\n        var start: number;\r\n        var end: number;\r\n        var life: Proton.Life;\r\n\r\n        if (node.hasAttribute(\"Start\")) {\r\n            start = parseFloat(node.getAttribute(\"Start\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Alpha has no attribute Start\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"End\")) {\r\n            end = parseFloat(node.getAttribute(\"End\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Alpha has no attribute End\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"Life\")) {\r\n            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\r\n        }\r\n\r\n        if (start != null && end != null) {\r\n            if (life != null) {\r\n                return new Proton.Alpha(start, end, life);\r\n            } else {\r\n                return new Proton.Alpha(start, end);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Alpha has no Start or End attribute\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour Scale.\r\n     * Example:\r\n     *   <Scale Start=\"1\" End=\"1.5\" />\r\n     * @method addScale\r\n     * @param node is Element from xml\r\n     * @return Proton.Scale\r\n     */\r\n    private addScale(node: Element): Proton.Scale {\r\n        var start: Array<number>;\r\n        var end: Array<number>;\r\n        var life: Proton.Life;\r\n\r\n        if (node.hasAttribute(\"Start\")) {\r\n            start = ArrayUtils.numberArray(node.getAttribute(\"Start\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Scale has no attribute Start\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"End\")) {\r\n            end = ArrayUtils.numberArray(node.getAttribute(\"End\"));\r\n        }\r\n\r\n        if (node.hasAttribute(\"Life\")) {\r\n            life = new Proton.Life(parseFloat(node.getAttribute(\"Life\")));\r\n        }\r\n\r\n        if (start != null) {\r\n            var startSpan: any;\r\n            if (start.length === 2) {\r\n                startSpan = new Proton.Span(start[0], start[1]);\r\n            } else {\r\n                startSpan = start[0];\r\n            }\r\n\r\n            var endSpan: any;\r\n            if (end != null) {\r\n                if (end.length === 2) {\r\n                    endSpan = new Proton.Span(end[0], end[1]);\r\n                } else {\r\n                    endSpan = end[0];\r\n                }\r\n            }\r\n\r\n            if (startSpan != null && endSpan != null && life != null) {\r\n                return new Proton.Scale(startSpan, endSpan, life);\r\n            } else if (startSpan != null && endSpan != null) {\r\n                return new Proton.Scale(startSpan, endSpan);\r\n            } else {\r\n                return new Proton.Scale(startSpan);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Scale has no Start or End attribute\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour Rotate.\r\n     * Example:\r\n     *   <Rotate Start=\"0;360\" End=\"-0.5;0.5\" Style=\"add\" />\r\n     * @method addRotate\r\n     * @param node is Element from xml\r\n     * @return Proton.Rotate\r\n     */\r\n    private addRotate(node: Element): Proton.Rotate {\r\n        var start: Array<number>;\r\n        var end: Array<number>;\r\n        var style: string;\r\n\r\n        if (node.hasAttribute(\"Start\")) {\r\n            start = ArrayUtils.numberArray(node.getAttribute(\"Start\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Rotate has no attribute Start\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"End\")) {\r\n            end = ArrayUtils.numberArray(node.getAttribute(\"End\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Rotate has no attribute End\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"Style\")) {\r\n            style = node.getAttribute(\"Style\");\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Style has no attribute End\");\r\n            }\r\n        }\r\n\r\n        if (start != null && end != null && style != null) {\r\n            var startSpan: any;\r\n            if (start.length === 2) {\r\n                startSpan = new Proton.Span(start[0], start[1]);\r\n            } else {\r\n                startSpan = start[0];\r\n            }\r\n\r\n            var endSpan: any;\r\n            if (end.length === 2) {\r\n                endSpan = new Proton.Span(end[0], end[1]);\r\n            } else {\r\n                endSpan = start[0];\r\n            }\r\n\r\n            return new Proton.Rotate(startSpan, endSpan, style);\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Rotate has no Start or End attribute\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour RandomDrift.\r\n     * Example:\r\n     *   <RandomDrift DriftX=\"5\" DriftY=\"0\" Delay=\"0.15\"/>\r\n     * @method addRandomDrift\r\n     * @param node is Element from xml\r\n     * @return Proton.RandomDrift\r\n     */\r\n    private addRandomDrift(node: Element): Proton.RandomDrift {\r\n        var driftX: number;\r\n        var driftY: number;\r\n        var delay: number;\r\n\r\n        if (node.hasAttribute(\"DriftX\")) {\r\n            driftX = parseFloat(node.getAttribute(\"DriftX\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING RandomDrift has no attribute DriftX\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"DriftY\")) {\r\n            driftY = parseFloat(node.getAttribute(\"DriftY\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING RandomDrift has no attribute DriftY\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"Delay\")) {\r\n            delay = parseFloat(node.getAttribute(\"Delay\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING RandomDrift has no attribute Delay\");\r\n            }\r\n        }\r\n\r\n        if (driftX != null && driftY != null && delay != null) {\r\n            return new Proton.RandomDrift(driftX, driftY, delay);\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING RandomDrift has no valid attributes\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour Gravity.\r\n     * Example:\r\n     *   <Gravity Gravity=\"5\" />\r\n     * @method addGravity\r\n     * @param node is Element from xml\r\n     * @return Proton.Gravity\r\n     */\r\n    private addGravity(node: Element): Proton.Gravity {\r\n        var gravity: number;\r\n\r\n        if (node.hasAttribute(\"Gravity\")) {\r\n            gravity = parseFloat(node.getAttribute(\"Gravity\"));\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Gravity has no attribute Gravity\");\r\n            }\r\n        }\r\n\r\n        if (gravity != null) {\r\n            return new Proton.Gravity(gravity);\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Gravity has no valid attributes\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour Color.\r\n     * Example:\r\n     *   <Color Color=\"FFFFFF\" EndColor=\"000000\" />\r\n     * @method addColor\r\n     * @param node is Element from xml\r\n     * @return Proton.Color\r\n     */\r\n    private addColor(node: Element): Proton.Color {\r\n        var i: number;\r\n        var arr: Array<string>;\r\n        var endArr: Array<string>;\r\n        var color: Array<string> = [];\r\n        var endColor: Array<string> = [];\r\n\r\n        if (node.hasAttribute(\"Color\")) {\r\n            arr = node.getAttribute(\"Color\").split(\";\");\r\n            for (i = 0; i < arr.length; i++) {\r\n                color.push(StringUtils.hexColor(arr[i]));\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Color has no attribute Color\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"EndColor\")) {\r\n            endArr = node.getAttribute(\"EndColor\").split(\";\");\r\n            for (i = 0; i < endArr.length; i++) {\r\n                endColor.push(StringUtils.hexColor(endArr[i]));\r\n            }\r\n        }\r\n\r\n        if (color.length > 0) {\r\n            if (endColor.length > 0) {\r\n                return new Proton.Color(color, endColor);\r\n            } else {\r\n                return new Proton.Color(color);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING Color has no Color attribute\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Add behaviour CrossZone. CrossZone is used for collisions. Need some zone. See method getZone().\r\n     * Example:\r\n     *   <CrossZone Type=\"bound\">\r\n     *       <LineZone X=\"0\" Y=\"0\" Width=\"1000\" Height=\"1000\" Direction=\"down\" />\r\n     *   </CrossZone>\r\n     * @method addCrossZone\r\n     * @param node is Element from xml\r\n     * @return Proton.CrossZone\r\n     */\r\n    private addCrossZone(node: Element): Proton.CrossZone {\r\n        var zone: any;\r\n        var type: string;\r\n\r\n        if (node.firstElementChild != null) {\r\n            zone = this.getZone(node.firstElementChild);\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no zone in CrossZone\");\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(\"Type\")) {\r\n            type = node.getAttribute(\"Type\");\r\n        }\r\n\r\n        if (zone != null) {\r\n            if (type != null) {\r\n                return new Proton.CrossZone(zone, type);\r\n            } else {\r\n                return new Proton.CrossZone(zone);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"WARNING no zone in CrossZone\");\r\n            }\r\n        }\r\n\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n\r\n    clone(): ProtonElement {\r\n        var element: ProtonElement = new ProtonElement();\r\n\r\n        element.super2.position.x = this.super2.position.x;\r\n        element.super2.position.y = this.super2.position.y;\r\n        element.super2.pivot.x = this.super2.pivot.x;\r\n        element.super2.pivot.y = this.super2.pivot.y;\r\n        element.super2.scale.x = this.super2.scale.x;\r\n        element.super2.scale.y = this.super2.scale.y;\r\n        element.super2.visible = this.super2.visible;\r\n        var node: Element = document.createElement(\"particle\");\r\n        node.setAttribute(ProtonElementAttributes.STYLE_2, this._styleName);\r\n        if (this._blendMode != null) {\r\n            node.setAttribute(ProtonElementAttributes.BLEND_MODE, this._blendMode.toString());\r\n        }\r\n\r\n        element.create(node);\r\n        element.super2._markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nconst ProtonElementAttributes = {\r\n    EMIT: \"Emit\",\r\n    /**\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    /**\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @type number\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    /**\r\n     * Style define animation. You can use one style on more than one place.\r\n     * Style for ParticleElement has to be instance of ParticleStyle.\r\n     * @property Style\r\n     * @type string\r\n     * @default null\r\n     */\r\n    STYLE: \"Style\",\r\n    STYLE_2: \"Style2\",\r\n    START: \"Start\",\r\n    STOPPING: \"Stopping\",\r\n    STOP: \"Stop\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/ProtonElement.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { BaseElement } from \"./BaseElement\";\r\nimport { Vibration } from \"../../../Utils/Vibration\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class VibrationElement extends BaseElement {\r\n    createByNode(node: Element): void {\r\n        //\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        if (node.hasAttribute(VibrationElementAttributes.PATTERN)) {\r\n            const pattern = ArrayUtils.numberArray(node.getAttribute(VibrationElementAttributes.PATTERN));\r\n            Vibration.vibrate(pattern);\r\n        }\r\n    }\r\n\r\n    clone(): VibrationElement {\r\n        const element: VibrationElement = new VibrationElement();\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const VibrationElementAttributes = {\r\n    PATTERN: \"Pattern\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Graphics/VibrationElement.ts\n **/","import { DataManager } from \"../Managers/DataManager\";\r\n\r\nexport class Vibration {\r\n    /**\r\n     * To perform multiple vibration, an array needs to be passed as the parameter.\r\n     * First value represents vibration time (milliseconds), second value represents pause time (milliseconds),\r\n     * third value represents vibration time, and this goes on with each alternate value.\r\n     * Basically it is performed as a series of [VIBRATION] [PAUSE] [VIBRATION] [PAUSE] [VIBRATION] [PAUSE]...\r\n     *\r\n     * Use 0 to force stop vibration\r\n     *\r\n     * @param pattern\r\n     */\r\n    public static vibrate(pattern: number | Array<number> = 0): void {\r\n        if (!DataManager.VibrationEnabled) {\r\n            return;\r\n        }\r\n\r\n        if (navigator.vibrate == null) {\r\n            return;\r\n        }\r\n\r\n        navigator.vibrate(pattern);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Utils/Vibration.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { CustomUtils } from \"../../../Utils/CustomUtils\";\r\n\r\n/**\r\n * The animation style is used for defined behaviour animation from sprite sheet.\r\n * Example:\r\n *   <AnimationStyle Class=\"AnimationStyle\" Animation=\"[libraryID]\" StartFrame=\"0\" EndFrame=\"0\" Loop=\"false\" Stop=\"false\" />\r\n * @class AnimationStyle\r\n * @extends Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class AnimationStyle extends Style {\r\n    // store only name of animation in style\r\n    // element will create new instnce of animation not style\r\n    animation: string;\r\n\r\n    // settings for animation\r\n    startFrame: number;\r\n    endFrame: number;\r\n    speed: number;\r\n    loop: boolean;\r\n    stop: boolean;\r\n    alpha: number;\r\n    tint: number;\r\n    blendMode: number;\r\n    reverse: boolean;\r\n\r\n    // for InsideAnimationElement\r\n    node: Element;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        // set default values\r\n        this.animation = \"\";\r\n        this.startFrame = 0;\r\n        this.speed = 1;\r\n        this.loop = false;\r\n        this.stop = false;\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        /**\r\n         * Store node for InsideAnimationElement\r\n         *\r\n         * todo Toto sa pouziva?\r\n         * @type {Element}\r\n         */\r\n        this.node = node;\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.ANIMATION)) {\r\n            this.animation = node.getAttribute(AnimationStyleAttributes.ANIMATION);\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.START_FRAME)) {\r\n            this.startFrame = parseInt(node.getAttribute(AnimationStyleAttributes.START_FRAME));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.END_FRAME)) {\r\n            this.endFrame = parseInt(node.getAttribute(AnimationStyleAttributes.END_FRAME));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.LOOP)) {\r\n            this.loop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.LOOP));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.STOP)) {\r\n            this.stop = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.STOP));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.SPEED)) {\r\n            this.speed = parseFloat(node.getAttribute(AnimationStyleAttributes.SPEED));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.ALPHA)) {\r\n            this.alpha = parseFloat(node.getAttribute(AnimationStyleAttributes.ALPHA));\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.TINT)) {\r\n            this.tint = parseInt(node.getAttribute(AnimationStyleAttributes.TINT), 16);\r\n        }\r\n\r\n        if (node.hasAttribute(AnimationStyleAttributes.BLEND_MODE)) {\r\n            this.blendMode = CustomUtils.getBlendMode(parseInt(node.getAttribute(AnimationStyleAttributes.BLEND_MODE)));\r\n        }\r\n        if (node.hasAttribute(AnimationStyleAttributes.REVERSE)) {\r\n            this.reverse = StringUtils.parseBoolean(node.getAttribute(AnimationStyleAttributes.REVERSE));\r\n        }\r\n    }\r\n}\r\n\r\nexport const AnimationStyleAttributes = {\r\n    /*\r\n     * Animation is library ID from javascript libs.\r\n     * @property Animation\r\n     * @type string\r\n     * @default null\r\n     */\r\n    ANIMATION: \"Animation\",\r\n    /*\r\n     * Start frame is number of frame when animation start on timeline.\r\n     * @property StartFrame\r\n     * @type number\r\n     * @default 0\r\n     */\r\n    START_FRAME: \"StartFrame\",\r\n    /*\r\n     * End frame is number of frame when animation ends on timeline.\r\n     * Use only if end frame is smaller then last frame on timeline.\r\n     * @property EndFrame\r\n     * @type number\r\n     * @default null\r\n     */\r\n    END_FRAME: \"EndFrame\",\r\n    /*\r\n     * Indicates whenever this MovieClip should loop when it reaches the end of its timeline.\r\n     * @property Loop\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    LOOP: \"Loop\",\r\n    /*\r\n     * Indicates whether this MovieClip shoud play only single frame animation.\r\n     * @property Stop\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    STOP: \"Stop\",\r\n    /*\r\n     * Speed of animation. Less than one will slow down animation. Calc with game FPS.\r\n     * @property Speed\r\n     * @type number\r\n     * @default 1\r\n     */\r\n    SPEED: \"Speed\",\r\n    /*\r\n     * Alpha (transparency) for this display object. 0 is fully transparent, 1 is fully opaque.\r\n     * @property Alpha\r\n     * @type Number\r\n     * @default 1\r\n     */\r\n    ALPHA: \"Alpha\",\r\n    /*\r\n     * Tint of animation. Hex color which colorize movie clip.\r\n     * @property Tint\r\n     * @type string\r\n     * @default null\r\n     */\r\n    TINT: \"Tint\",\r\n    /*\r\n     * Blend mode for animation.\r\n     * Bleding modes:\r\n     *   0 = NORMAL;\r\n     *   1 = ADD;\r\n     *   2 = MULTIPLY;\r\n     *   3 = SCREEN;\r\n     *   4 = OVERLAY;\r\n     *   5 = DARKEN;\r\n     *   6 = LIGHTEN;\r\n     *   7 = COLOR_DODGE;\r\n     *   8 = COLOR_BURN;\r\n     *   9 = HARD_LIGHT;\r\n     *   10 = SOFT_LIGHT;\r\n     *   11 = DIFFERENCE;\r\n     *   12 = EXCLUSION;\r\n     *   13 = HUE;\r\n     *   14 = SATURATION;\r\n     *   15 = COLOR;\r\n     *   16 = LUMINOSITY;\r\n     * @property BlendMode\r\n     * @type number\r\n     * @default null\r\n     */\r\n    BLEND_MODE: \"BlendMode\",\r\n    /*\r\n     * Indicates if animation should animate reverse.\r\n     * @property Reverse\r\n     * @type boolean\r\n     * @default false\r\n     */\r\n    REVERSE: \"Reverse\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/AnimationStyle.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\nimport { BGParticleElementAttributes } from \"../Graphics/BGParticleElement\";\r\nimport { StageController } from \"../../StageController\";\r\n// import {BGParticleElementAttributes} from \"../../../CustomComponents/BGParticleElement\";\r\n//\r\n@engineComponent(ComponentTypes.Style)\r\n// TODO add comments\r\nexport class BGParticleStyle extends Style {\r\n    // value in percentage for creating reserv in display list to pooling particles\r\n    static ElementsReserve: number = 0.5;\r\n\r\n    // names for zones\r\n    static NodeImages: string = \"Images\";\r\n    static NodeBehavior: string = \"Behavior\";\r\n    static NodeName: string = \"Name\";\r\n\r\n    // TODO possible memory leak\r\n    node: Element;\r\n\r\n    private _counts: Array<number>;\r\n    private _count: number;\r\n    private _scale: Array<Array<number>>;\r\n    private _images: Array<string>;\r\n\r\n    private _radius: number;\r\n    private _connected: number;\r\n    private _speedX: Array<Array<number>>;\r\n    private _speedY: Array<Array<number>>;\r\n    private _lineWidth: number;\r\n    private _lineColor: any;\r\n    private _lineAlpha: number;\r\n    /**\r\n     *  In percentage from 100% width and height\r\n     **/\r\n    private _connectionZoneWidth: Array<Array<number>>;\r\n    private _connectionZoneHeight: Array<Array<number>>;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._count = 0;\r\n        this._counts = [];\r\n        this._images = [];\r\n        this._scale = [];\r\n        this._radius = 200;\r\n        this._connected = 0;\r\n        this._speedX = [];\r\n        this._speedY = [];\r\n        this._lineWidth = 1;\r\n        this._lineColor = 0x000000;\r\n        this._lineAlpha = 1;\r\n        this._connectionZoneHeight = [];\r\n        this._connectionZoneWidth = [];\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element) {\r\n        this.node = node;\r\n\r\n        super.create(node);\r\n\r\n        this.parseChildrenNodes(node);\r\n    }\r\n\r\n    private parseChildrenNodes(node: Element): void {\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case BGParticleStyle.NodeImages:\r\n                    this.initializeImages(next);\r\n                    break;\r\n                case BGParticleStyle.NodeBehavior:\r\n                    this.initializeBehavior(next);\r\n                    break;\r\n                default:\r\n                    if (DEBUG) {\r\n                        this.log(\"WARNING unknown node in particle style \" + next.nodeName);\r\n                    }\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n\r\n    get count(): number {\r\n        return this._count;\r\n    }\r\n\r\n    get counts(): Array<number> {\r\n        return this._counts;\r\n    }\r\n\r\n    get images(): Array<string> {\r\n        return this._images;\r\n    }\r\n\r\n    get scale(): Array<Array<number>> {\r\n        return this._scale;\r\n    }\r\n\r\n    get speedX(): Array<Array<number>> {\r\n        return this._speedX;\r\n    }\r\n\r\n    get speedY(): Array<Array<number>> {\r\n        return this._speedY;\r\n    }\r\n\r\n    get lineAlpha(): number {\r\n        return this._lineAlpha;\r\n    }\r\n\r\n    get radius(): number {\r\n        return this._radius;\r\n    }\r\n\r\n    get connected(): number {\r\n        return this._connected;\r\n    }\r\n\r\n    get lineWidth(): number {\r\n        return this._lineWidth;\r\n    }\r\n\r\n    get lineColor(): number {\r\n        return this._lineColor;\r\n    }\r\n\r\n    get connectionZoneWidth(): Array<any> {\r\n        return this._connectionZoneWidth;\r\n    }\r\n\r\n    get connectionZoneHeight(): Array<any> {\r\n        return this._connectionZoneHeight;\r\n    }\r\n\r\n    private initializeImages(node: Element): void {\r\n        if (node.hasAttribute(BGParticleElementAttributes.ATTR_FROM_FRAME)) {\r\n            this._images = node.getAttribute(BGParticleElementAttributes.ATTR_FROM_FRAME).split(\";\");\r\n\r\n            for (let i: number = 0; i < this._images.length; i++) {\r\n                // TODO 0000\r\n                this._images[i] = this._images[i] + \"0000\";\r\n            }\r\n        } else if (node.hasAttribute(BGParticleElementAttributes.ATTR_IMAGES)) {\r\n            this._images = node.getAttribute(BGParticleElementAttributes.ATTR_IMAGES).split(\";\");\r\n            // console.log(this._images)\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.SCALE)) {\r\n            let scales = node.getAttribute(BGParticleElementAttributes.SCALE).split(\"|\");\r\n\r\n            for (let i = 0; i < scales.length; i++) {\r\n                this._scale.push(scales[i].split(\";\").map(Number));\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.ATTR_COUNTS)) {\r\n            let counts = node.getAttribute(BGParticleElementAttributes.ATTR_COUNTS).split(\";\").map(Number);\r\n            for (let i = 0; i < counts.length; i++) {\r\n                if (i == 0) {\r\n                    this._counts.push(counts[i]);\r\n                } else {\r\n                    this._counts.push(counts[i] + this._counts[i - 1]);\r\n                }\r\n            }\r\n            this._count = this._counts[this._counts.length - 1];\r\n        }\r\n    }\r\n\r\n    private initializeBehavior(node: Element): void {\r\n        if (node.hasAttribute(BGParticleElementAttributes.SPEED_X)) {\r\n            let speedX = node.getAttribute(BGParticleElementAttributes.SPEED_X).split(\"|\");\r\n            for (let i = 0; i < speedX.length; i++) {\r\n                this._speedX.push(speedX[i].split(\";\").map(Number));\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.SPEED_Y)) {\r\n            let speedY = node.getAttribute(BGParticleElementAttributes.SPEED_Y).split(\"|\");\r\n            for (let i = 0; i < speedY.length; i++) {\r\n                this._speedY.push(speedY[i].split(\";\").map(Number));\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.RADIUS)) {\r\n            this._radius = parseInt(node.getAttribute(BGParticleElementAttributes.RADIUS));\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTED)) {\r\n            this._connected = parseInt(node.getAttribute(BGParticleElementAttributes.CONNECTED));\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_ALPHA)) {\r\n            this._lineAlpha = parseFloat(node.getAttribute(BGParticleElementAttributes.LINE_ALPHA));\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_WIDTH)) {\r\n            this._lineWidth = parseInt(node.getAttribute(BGParticleElementAttributes.LINE_WIDTH));\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.LINE_COLOR)) {\r\n            this._lineColor = parseInt(node.getAttribute(BGParticleElementAttributes.LINE_COLOR), 16);\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTION_ZONE_WIDTH)) {\r\n            let zoneWidth = node.getAttribute(BGParticleElementAttributes.CONNECTION_ZONE_WIDTH).split(\"|\");\r\n            for (let i = 0; i < zoneWidth.length; i++) {\r\n                let width = zoneWidth[i].split(\";\").map(function (width) {\r\n                    return (parseFloat(width) / 100) * StageController.Width;\r\n                });\r\n                this._connectionZoneWidth.push(width);\r\n            }\r\n        }\r\n\r\n        if (node.hasAttribute(BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT)) {\r\n            let zoneHeight = node.getAttribute(BGParticleElementAttributes.CONNECTION_ZONE_HEIGHT).split(\"|\");\r\n            for (let i = 0; i < zoneHeight.length; i++) {\r\n                let height = zoneHeight[i].split(\";\").map(function (height) {\r\n                    return (parseFloat(height) / 100) * StageController.Height;\r\n                });\r\n                this._connectionZoneHeight.push(height);\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/BGParticleStyle.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * ContainerStyle only holds xml node for container elements.\r\n * Example:\r\n *   <ContainerStyle Class=\"ContainerStyle\">\r\n *       <Child1 />\r\n *       <Child2 />\r\n *       ...\r\n *       <ChildX />\r\n *   </ContainerStyle>\r\n * @class ContainerStyle\r\n * @extends Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class ContainerStyle extends Style {\r\n    node: Element;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        // store node for container elements\r\n        this.node = node;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ContainerStyle.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n@engineComponent(ComponentTypes.Style)\r\nexport class ProtonStyle extends Style {\r\n    node: Element;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element) {\r\n        super.create(node);\r\n\r\n        this.node = node;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ProtonStyle.ts\n **/","import { StringUtils, engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * The animation style is used for defined behaviour animation from sprite sheet.\r\n * Example:\r\n *   <ShapeStyle Class=\"ShapeStyle\" ... />\r\n * @class ShapeStyle\r\n * @extends Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class ShapeStyle extends Style {\r\n    lineWidth: number;\r\n\r\n    // for InsideAnimationElement\r\n    node: Element;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        /**\r\n         * Store node for InsideAnimationElement\r\n         *\r\n         * todo Toto sa pouziva?\r\n         * @type {Element}\r\n         */\r\n        this.node = node;\r\n\r\n        if (node.hasAttribute(ShapeStyleAttributes.LINE_WIDTH)) {\r\n            this.lineWidth = parseInt(node.getAttribute(ShapeStyleAttributes.LINE_WIDTH));\r\n        }\r\n    }\r\n}\r\n\r\nconst ShapeStyleAttributes = {\r\n    LINE_WIDTH: \"LineWidth\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/ShapeStyle.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { Style } from \"./Style\";\r\nimport { ContainerElement } from \"../Graphics/ContainerElement\";\r\nimport { ComponentTypes } from \"../../ComponentTypes\";\r\n\r\n/**\r\n * TimelineStyle create container from child <elements> and holds xml nodes of frames for this element.\r\n * Example:\r\n *   <TimelineStyle Class=\"TimelineStyle\">\r\n *      <Elements>\r\n *           <Child1 />\r\n *           <Child2 X=\"0\" />\r\n *           ...\r\n *      </Elements>\r\n *      <TimeLine>\r\n *          <Frame Frame=\"0\">\r\n *              <Child2 X=\"50\" />\r\n *          </Frame>\r\n *          <Frame Frame=\"CASE2\">\r\n *              <Child1 X=\"200\" />\r\n *          </Frame>\r\n *      </TimeLine>\r\n *      <SoundTimeline>\r\n *          <Frame Frame=\"0\">\r\n *              <Song Song=\"ID\" Play=\"true\" />\r\n *          </Frame>\r\n *          <Frame Frame=\"CASE2\">\r\n *              <Song Song=\"ID\" Play=\"false\" />\r\n *          </Frame>\r\n *      </SoundTimeline>\r\n *   </TimelineStyle>\r\n * @class TimelineStyle\r\n * @extends Style\r\n */\r\n@engineComponent(ComponentTypes.Style)\r\nexport class TimelineStyle extends Style {\r\n    container: ContainerElement;\r\n\r\n    // xml nodes added to object by fframe\r\n    frames: Object;\r\n    framesSounds: Object;\r\n    outro: Element;\r\n    outroSounds: Element;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.frames = {};\r\n        this.framesSounds = {};\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        let next: Element = node.firstElementChild;\r\n        while (next != null) {\r\n            switch (next.nodeName) {\r\n                case \"Elements\":\r\n                    this.container = new ContainerElement();\r\n                    this.container.create(next);\r\n                    break;\r\n                case \"TimeLine\":\r\n                    var nextCase: Element = next.firstElementChild;\r\n                    while (nextCase != null) {\r\n                        if (nextCase.hasAttribute(\"Frame\")) {\r\n                            if (this.frames[nextCase.getAttribute(\"Frame\")] !== null) {\r\n                                this.frames[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n                            } else {\r\n                                if (DEBUG) {\r\n                                    this.log(\r\n                                        \"ERROR frame \" +\r\n                                            nextCase.getAttribute(\"Frame\") +\r\n                                            \" already exist in TimelineStyle \" +\r\n                                            node.nodeName,\r\n                                    );\r\n                                }\r\n                            }\r\n                        }\r\n                        if (nextCase.nodeName === \"Outro\") {\r\n                            this.outro = nextCase;\r\n                        }\r\n                        nextCase = nextCase.nextElementSibling;\r\n                    }\r\n                    break;\r\n                case \"SoundTimeline\":\r\n                    var nextCase: Element = next.firstElementChild;\r\n                    while (nextCase != null) {\r\n                        if (nextCase.hasAttribute(\"Frame\")) {\r\n                            if (this.framesSounds[nextCase.getAttribute(\"Frame\")] !== null) {\r\n                                this.framesSounds[nextCase.getAttribute(\"Frame\")] = nextCase;\r\n                            } else {\r\n                                if (DEBUG) {\r\n                                    this.log(\r\n                                        \"ERROR frame \" +\r\n                                            nextCase.getAttribute(\"Frame\") +\r\n                                            \" already exist in TimelineStyle \" +\r\n                                            node.nodeName,\r\n                                    );\r\n                                }\r\n                            }\r\n                        }\r\n                        if (nextCase.nodeName === \"Outro\") {\r\n                            this.outroSounds = nextCase;\r\n                        }\r\n                        nextCase = nextCase.nextElementSibling;\r\n                    }\r\n                    break;\r\n            }\r\n            next = next.nextElementSibling;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Elements/Styles/TimelineStyle.ts\n **/","import { Logger } from \"neo-common\";\r\nimport { Resource } from \"./Resource\";\r\n\r\n/**\r\n * The SndResource is used for holding songs from preloading. Supported all types of songs.\r\n * @class SndResource\r\n * @extends Resource\r\n */\r\nexport class SndResource extends Resource {\r\n    static Sounds: { [id: string]: AudioBuffer } = {};\r\n\r\n    /**\r\n     * Return song by id.\r\n     * @method getSongById\r\n     * @param id id of song in files.xml\r\n     * @return AudioBuffer\r\n     */\r\n    static getSongById(id: string): AudioBuffer {\r\n        if (this.Sounds != null) {\r\n            return this.Sounds[id];\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no sounds\");\r\n            }\r\n        }\r\n        if (DEBUG) {\r\n            this.log(\"ERROR no song: \" + id);\r\n        }\r\n        return null;\r\n    }\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @return void\r\n     */\r\n    static log(s: string): void {\r\n        if (DEBUG) {\r\n            Logger.debugGroup(\"SndResource\", s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/Components/Resources/SndResource.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../HTMLComponents/Elements/HtmlContainerElement\";\r\nimport { ILoadingElement } from \"../Components/Elements/Interfaces/ILoadingElement\";\r\nimport { PreloaderProvider } from \"../Components/Managers/PreloaderProvider\";\r\nimport { SplashScreen } from \"./SplashScreen\";\r\nimport { Strings } from \"../../Common/Strings\";\r\nimport { Languages } from \"../Utils/Languages\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlSplashScreen extends HtmlContainerElement implements ILoadingElement {\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    public static RequiredLoadGroup: string = \"SPLASH\";\r\n\r\n    public static suspendInit: boolean = false;\r\n\r\n    private static instance: HtmlSplashScreen = null;\r\n\r\n    private _gameProgressBar: HTMLElement;\r\n    private _gameProgressNumber: HTMLElement;\r\n    private _gameContinueButton: HTMLElement;\r\n\r\n    private _callback: () => void;\r\n    private _keyboardEvent: () => void;\r\n\r\n    //******************************************************************************************************************\r\n    //  CREATE & INIT\r\n    //******************************************************************************************************************\r\n\r\n    create(node: Element): void {\r\n        if (!PreloaderProvider.isGroupLoaded(HtmlSplashScreen.RequiredLoadGroup)) {\r\n            return;\r\n        }\r\n\r\n        super.create(node);\r\n\r\n        PreloaderProvider.addLoadingElementFunction(this);\r\n        this._initialize();\r\n        this.instance.offsetWidth;\r\n        this.instance.classList.remove(\"_disabled\");\r\n\r\n        HtmlSplashScreen.suspendInit = true;\r\n        HtmlSplashScreen.instance = this;\r\n\r\n        SplashScreen.createSplashScreen(this);\r\n    }\r\n\r\n    private _initialize(): void {\r\n        this._gameProgressBar = document.getElementById(\"splashProgressBar\");\r\n        this._gameProgressNumber = document.getElementById(\"splashProgressNumber\");\r\n        this._gameContinueButton = document.getElementById(\"splashScreen\"); //used whole splash as a continue button\r\n\r\n        if (this._gameProgressBar != null) {\r\n            let progressBar = document.getElementById(\"progressBar\");\r\n\r\n            if (progressBar != null) {\r\n                this._gameProgressBar.style.width = progressBar.style.width;\r\n            }\r\n        }\r\n\r\n        if (this._gameProgressNumber != null) {\r\n            let progressNumber = document.getElementById(\"progressNumber\");\r\n\r\n            if (progressNumber != null) {\r\n                this._gameProgressNumber.textContent = progressNumber.textContent;\r\n            }\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  LOAD COMPLETED\r\n    //******************************************************************************************************************\r\n\r\n    public showContinueButton(callback: () => void): void {\r\n        this._callback = callback;\r\n\r\n        if (this._callback != null) {\r\n            if (this._gameContinueButton != null) {\r\n                this._gameContinueButton.addEventListener(\"click\", this._callback);\r\n            }\r\n\r\n            this._keyboardEvent = this.onKeyUp.bind(this);\r\n            document.addEventListener(\"keyup\", this._keyboardEvent);\r\n        }\r\n        this.instance.classList.add(\"_loaded\");\r\n    }\r\n\r\n    private onKeyUp(event: KeyboardEvent): void {\r\n        if (event.keyCode == 32) {\r\n            document.removeEventListener(\"keyup\", this._keyboardEvent);\r\n\r\n            if (this._callback != null) {\r\n                this._callback();\r\n            }\r\n        }\r\n    }\r\n\r\n    public hideSplashScreen(): void {\r\n        if (this.instance.parentElement) {\r\n            document.removeEventListener(\"keyup\", this._keyboardEvent);\r\n            this.instance.parentElement.removeChild(this.instance);\r\n        }\r\n    }\r\n\r\n    public showError(): void {\r\n        this.instance.classList.add(\"_error\");\r\n\r\n        let progressNumber = document.getElementById(\"splashProgressBar\");\r\n        progressNumber.innerHTML = Strings.loaded\r\n            ? Languages.getRid(\"ERROR_404\")\r\n            : \"Internal error. Please contact support.\";\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  PRELOADER EVENTS\r\n    //******************************************************************************************************************\r\n\r\n    public onLoadCompleted(success: boolean): void {\r\n        //handle load completed in GameManager initReceived\r\n    }\r\n\r\n    public onProgressUpdate(progress: number): void {\r\n        if (this._gameProgressBar != null) {\r\n            this._gameProgressBar.style.width = progress + \"%\";\r\n        }\r\n\r\n        if (this._gameProgressNumber != null) {\r\n            this._gameProgressNumber.textContent = progress + \"%\";\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/HtmlSplashScreen.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { ILayoutElement } from \"./ILayoutElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { LayoutManager } from \"../Managers/LayoutManager\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { ImageElement, ImageElementAttributes } from \"../Components/Elements/Graphics/ImageElement\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class LayoutImageElement extends ImageElement implements ILayoutElement {\r\n    protected verticalAlign: string;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor(texture?: PIXI.Texture) {\r\n        super(texture);\r\n        this.verticalAlign = LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP;\r\n        LayoutManager.addLayoutElement(this);\r\n    }\r\n\r\n    updateByNode(node: Element): ImageElement {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(LayoutImageElementAttributes.V_ALIGN)) {\r\n            this.verticalAlign = node.getAttribute(LayoutImageElementAttributes.V_ALIGN);\r\n        }\r\n\r\n        this.updatePosition();\r\n        return this;\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean): void {\r\n        this.updatePosition();\r\n    }\r\n\r\n    updatePosition(): void {\r\n        this.updateVerticalPosition();\r\n    }\r\n\r\n    updateVerticalPosition(): void {\r\n        let y = 0;\r\n        let height = this.getBounds().height;\r\n        let screenHeight = StageController.Renderer.screen.height;\r\n\r\n        switch (this.verticalAlign) {\r\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.TOP:\r\n                break;\r\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.CENTER:\r\n                if (screenHeight < height) {\r\n                    y = parseInt(NumberUtils.devide(screenHeight - height, 2));\r\n                }\r\n                break;\r\n            case LayoutImageElementAttributes.V_ALIGN_OPTIONS.BOTTOM:\r\n                y = screenHeight - height;\r\n                break;\r\n        }\r\n\r\n        this.y = y;\r\n    }\r\n\r\n    clone(): LayoutImageElement {\r\n        let element: LayoutImageElement = new LayoutImageElement();\r\n        element.removeChildren();\r\n\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.rotation = this.rotation;\r\n        element.visible = this.visible;\r\n        element.alpha = this.alpha;\r\n        element.anchor = this.anchor;\r\n        element.tint = this.tint;\r\n        element.blendMode = this.blendMode;\r\n        element.name = this.name;\r\n\r\n        element.verticalAlign = this.verticalAlign;\r\n\r\n        if (this.texture != null) {\r\n            element.texture = this.texture;\r\n        }\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n\r\n        return element;\r\n    }\r\n}\r\n\r\nexport const LayoutImageElementAttributes = {\r\n    V_ALIGN: \"VAlign\",\r\n    V_ALIGN_OPTIONS: {\r\n        TOP: \"top\",\r\n        CENTER: \"center\",\r\n        BOTTOM: \"bottom\",\r\n    },\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutImageElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ILayoutElement } from \"./ILayoutElement\";\r\nimport { ShapeElement, ShapeElementAttributes } from \"../Components/Elements/Graphics/ShapeElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { LayoutManager } from \"../Managers/LayoutManager\";\r\nimport { StageController } from \"../Components/StageController\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class LayoutShapeElement extends ShapeElement implements ILayoutElement {\r\n    protected relativeWidth: number;\r\n\r\n    protected relativeHeight: number;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n        this.relativeWidth = -1;\r\n        this.relativeHeight = -1;\r\n        LayoutManager.addLayoutElement(this);\r\n    }\r\n\r\n    updateByNode(node: Element): void {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.WIDTH)) {\r\n            let width = node.getAttribute(ShapeElementAttributes.WIDTH);\r\n            this._width = parseInt(width);\r\n\r\n            this.relativeWidth = width.indexOf(\"%\") > -1 ? parseInt(width) : -1;\r\n            if (this.relativeWidth > -1) {\r\n                this._width = StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\r\n            }\r\n            this.redrawRect();\r\n        }\r\n\r\n        if (node.hasAttribute(ShapeElementAttributes.HEIGHT)) {\r\n            let height = node.getAttribute(ShapeElementAttributes.HEIGHT);\r\n            this._height = parseInt(height);\r\n\r\n            this.relativeHeight = height.indexOf(\"%\") > -1 ? parseInt(height) : -1;\r\n            if (this.relativeHeight > -1) {\r\n                this._height = StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\r\n            }\r\n            this.redrawRect();\r\n        }\r\n    }\r\n\r\n    private redrawRect(): void {\r\n        this.clear();\r\n        this.beginFill(this._color, this._fillAlpha);\r\n        this.lineStyle(this._lineWidth, this._lineColor);\r\n        this.drawRect(0, 0, this._width, this._height);\r\n        this.endFill();\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean): void {\r\n        if (this.relativeWidth > -1) {\r\n            this._width = StageController.Renderer.screen.width * (this.relativeWidth * 0.01);\r\n        }\r\n\r\n        if (this.relativeHeight > -1) {\r\n            this._height = StageController.Renderer.screen.height * (this.relativeHeight * 0.01);\r\n        }\r\n\r\n        this.redrawRect();\r\n    }\r\n\r\n    clone(): LayoutShapeElement {\r\n        let element: LayoutShapeElement = new LayoutShapeElement();\r\n        element.create(this._nodeDefinition);\r\n\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.relativeWidth = this.relativeWidth;\r\n        element.relativeHeight = this.relativeHeight;\r\n\r\n        return element;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutShapeElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { ILayoutElement } from \"./ILayoutElement\";\r\nimport { LayoutManager } from \"../Managers/LayoutManager\";\r\nimport { ShapeElement } from \"../Components/Elements/Graphics/ShapeElement\";\r\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\r\nimport { SwitchStyle } from \"../Components/Elements/Styles/SwitchStyle\";\r\nimport { Tweens } from \"../Components/Effects/Tweens\";\r\nimport { FrameTimerEventEmitter } from \"../Utils/FrameTimer\";\r\nimport { StageController } from \"../Components/StageController\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class LayoutSwitchElement extends SwitchElement implements ILayoutElement {\r\n    private baseStyle: SwitchStyle;\r\n\r\n    private portraitStyle: SwitchStyle;\r\n\r\n    private inPortraitMode: boolean;\r\n\r\n    private tweenProgress: Object;\r\n\r\n    private tempTimer: FrameTimerEventEmitter;\r\n\r\n    private tempNextCase: string;\r\n\r\n    private tempTimerData: string;\r\n\r\n    private size: string;\r\n\r\n    private sizeWidth: number;\r\n\r\n    private sizeHeight: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.inPortraitMode = false;\r\n        LayoutManager.addLayoutElement(this);\r\n    }\r\n\r\n    createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        if (node.hasAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)) {\r\n            this.portraitStyle = <SwitchStyle>(\r\n                StyleManager.Styles[node.getAttribute(LayoutSwitchElementAttributes.PORTRAIT_STYLE)]\r\n            );\r\n        }\r\n\r\n        if (this.style != null) {\r\n            this.baseStyle = this.style;\r\n        }\r\n    }\r\n\r\n    updateByNode(node: Element) {\r\n        super.updateByNode(node);\r\n\r\n        if (node.hasAttribute(\"Width\")) {\r\n            this.sizeWidth = parseInt(node.getAttribute(\"Width\"));\r\n            this.updateSize();\r\n        }\r\n\r\n        if (node.hasAttribute(\"Height\")) {\r\n            this.sizeHeight = parseInt(node.getAttribute(\"Height\"));\r\n            this.updateSize();\r\n        }\r\n\r\n        if (node.hasAttribute(\"Size\")) {\r\n            this.size = node.getAttribute(\"Size\");\r\n            this.updateSize();\r\n        }\r\n    }\r\n\r\n    protected updateSize(): void {\r\n        if (this.size != null) {\r\n            switch (this.size) {\r\n                case \"cover\":\r\n                    this.calculateCoverScale();\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n\r\n    protected calculateCoverScale(): void {\r\n        if (this.sizeWidth > 0 && this.sizeHeight > 0) {\r\n            let screenWidth = StageController.Renderer.screen.width;\r\n            let screenHeight = StageController.Renderer.screen.height;\r\n\r\n            let screenWRatio = screenWidth / this.sizeWidth;\r\n            let screenHRatio = screenHeight / this.sizeHeight;\r\n\r\n            if (screenWRatio > screenHRatio) {\r\n                this.scale.set(screenWRatio);\r\n            } else {\r\n                this.scale.set(screenHRatio);\r\n            }\r\n        }\r\n    }\r\n\r\n    onLayoutChange(isPortrait: boolean): void {\r\n        this.updateSize();\r\n\r\n        //update layout only if orientation was changed\r\n        if (isPortrait == this.inPortraitMode) {\r\n            return;\r\n        }\r\n\r\n        let currentCase = this.clearCaseLayoutPrefix(this.getCurrentCase());\r\n        let style = isPortrait ? this.portraitStyle : this.baseStyle;\r\n\r\n        if (style != null) {\r\n            let caseType = LayoutManager.getSwitchPrefix() + currentCase;\r\n            this.case = \"\";\r\n            this.style = style;\r\n            this.storeData(caseType);\r\n            this.goToCase(caseType);\r\n            this.restoreData(caseType);\r\n\r\n            this.inPortraitMode = isPortrait;\r\n        }\r\n    }\r\n\r\n    private clearCaseLayoutPrefix(caseType: string): string {\r\n        if (!StringUtils.isNullOrEmpty(LayoutManager.getSwitchPrefix())) {\r\n            caseType = caseType.replace(LayoutManager.getPreviousSwitchPrefix(), \"\");\r\n        }\r\n\r\n        return caseType;\r\n    }\r\n\r\n    private storeData(caseType: string): void {\r\n        //store tween progress\r\n\r\n        // TweenMax.pauseAll(); //ToDo needed ?\r\n        this.tweenProgress = {};\r\n\r\n        let node = this.style.cases[caseType];\r\n        if (node != null) {\r\n            let next: Element = node.firstElementChild;\r\n\r\n            while (next != null) {\r\n                let elem = this.elements.childs[next.nodeName];\r\n\r\n                if (elem != null) {\r\n                    let tweensArray = Tweens.getRegisteredTweens(elem.uid);\r\n\r\n                    if (tweensArray != null && tweensArray.length > 0) {\r\n                        this.tweenProgress[elem.uid] = [];\r\n                        for (let i = 0; i < tweensArray.length; i++) {\r\n                            this.tweenProgress[elem.uid].push(tweensArray[\"tweens\"][i].progress());\r\n                        }\r\n                    }\r\n                }\r\n\r\n                next = next.nextElementSibling;\r\n            }\r\n        }\r\n\r\n        //store timer\r\n        this.tempTimer = this.timer;\r\n        this.timer = null;\r\n\r\n        //store nextCase\r\n        if (this.style.cases[caseType].hasAttribute(\"NextCase\")) {\r\n            this.tempNextCase = this.style.cases[caseType].getAttribute(\"NextCase\");\r\n            this.style.cases[caseType].removeAttribute(\"NextCase\");\r\n        }\r\n\r\n        //store timerData\r\n        if (this.style.cases[caseType].hasAttribute(\"Timer\")) {\r\n            this.tempTimerData = this.style.cases[caseType].getAttribute(\"Timer\");\r\n            this.style.cases[caseType].removeAttribute(\"Timer\");\r\n        }\r\n    }\r\n\r\n    private restoreData(caseType: string): void {\r\n        //restore tween progress\r\n\r\n        // TweenMax.pauseAll(); //ToDo needed ?\r\n        if (this.tweenProgress != null) {\r\n            for (let key in this.tweenProgress) {\r\n                let tweensArray = Tweens.getRegisteredTweens(key);\r\n\r\n                if (tweensArray != null && tweensArray.length > 0) {\r\n                    for (let i = 0; i < tweensArray.length; i++) {\r\n                        /*if (tweensArray['tweens'][i] == undefined || this.tweenProgress[key][i] == undefined) {\r\n                            debugger;\r\n                        }*/\r\n\r\n                        if (tweensArray[\"tweens\"][i] != null) {\r\n                            tweensArray[\"tweens\"][i].progress(this.tweenProgress[key][i]);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            this.tweenProgress = null;\r\n        }\r\n\r\n        //restore timer\r\n        this.timer = this.tempTimer;\r\n        this.tempTimer = null;\r\n\r\n        //restore nextCase\r\n        if (this.tempNextCase != null) {\r\n            this.style.cases[caseType].setAttribute(\"NextCase\", this.tempNextCase);\r\n            this.tempNextCase = null;\r\n        }\r\n\r\n        //restore nodeTimer\r\n        if (this.tempTimerData != null) {\r\n            this.style.cases[caseType].setAttribute(\"Timer\", this.tempTimerData);\r\n            this.tempTimerData = null;\r\n        }\r\n    }\r\n\r\n    clone(): LayoutSwitchElement {\r\n        const element: LayoutSwitchElement = new LayoutSwitchElement();\r\n\r\n        element.style = this.style;\r\n        element.position.x = this.position.x;\r\n        element.position.y = this.position.y;\r\n        element.pivot.x = this.pivot.x;\r\n        element.pivot.y = this.pivot.y;\r\n        element.scale.x = this.scale.x;\r\n        element.scale.y = this.scale.y;\r\n        element.visible = this.visible;\r\n        element.name = this.name;\r\n\r\n        element.elements = this.elements.clone();\r\n        element.addChild(element.elements);\r\n\r\n        element.case = this.case;\r\n        element.baseStyle = this.baseStyle;\r\n        element.portraitStyle = this.portraitStyle;\r\n        element.inPortraitMode = this.inPortraitMode;\r\n\r\n        element.size = this.size;\r\n        element.sizeWidth = this.sizeWidth;\r\n        element.sizeHeight = this.sizeHeight;\r\n\r\n        if (this.maskSprite != null) {\r\n            let elementMask = new PIXI.Sprite((<PIXI.Sprite>this.maskSprite).texture);\r\n            elementMask.position.x = this.maskSprite.position.x;\r\n            elementMask.position.y = this.maskSprite.position.y;\r\n\r\n            element.maskSprite = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        } else if (this.maskGraphics != null) {\r\n            let elementMask = <ShapeElement>this.maskGraphics.clone();\r\n            elementMask.position.x = this.maskGraphics.position.x;\r\n            elementMask.position.y = this.maskGraphics.position.y;\r\n\r\n            element.maskGraphics = elementMask;\r\n            element.addChild(elementMask);\r\n            element.mask = elementMask;\r\n        }\r\n\r\n        element.markAsCloned(); // must be called last before return!\r\n        return element;\r\n    }\r\n}\r\n\r\nconst LayoutSwitchElementAttributes = {\r\n    PORTRAIT_STYLE: \"PortraitStyle\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/LayoutSwitchElement.ts\n **/","import { Machine } from \"../GameComponents/Machine\";\r\nimport { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Symbol } from \"../GameComponents/Symbol\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class MachineExtended extends Machine {\r\n    public spinStart(\r\n        longRotation?: boolean,\r\n        useTransform: boolean = false,\r\n        currentSymbols?: Array<Array<Symbol>>,\r\n    ): void {\r\n        if (DEBUG) {\r\n            this.log(\"spinStart\");\r\n        }\r\n\r\n        this.visible = true;\r\n        this._reelsContainer.visible = true;\r\n\r\n        this.actualReelStopped = -1;\r\n        this._stoppedReelIndexes = 0;\r\n\r\n        this._stoppedFromServer = false;\r\n        this._stoppedFromMachine = false;\r\n        this._stoppedFromLegal = false;\r\n\r\n        this._startSpinTime = Date.now();\r\n\r\n        if (this._reels != null) {\r\n            for (let i = 0; i < this._reelCount; i++) {\r\n                if (this._reels[i] != null) {\r\n                    if (this._stoppedSymbolsArray.length > 0) {\r\n                        this._reels[i].visible = true;\r\n                        this._reels[i].setData(this._stoppedSymbolsArray[i]);\r\n\r\n                        //move current symbols from WinAnimator to Reel, not array reference\r\n                        this._reels[i].currentSymbols = [];\r\n                        for (let j = 0; j < this._visibleSymbolCount; j++) {\r\n                            this._reels[i].currentSymbols.push(currentSymbols[i][j]);\r\n                            currentSymbols[i][j] = null;\r\n                        }\r\n\r\n                        this._reels[i].showSymbols(useTransform);\r\n                        this._reels[i].spinStart();\r\n                    } else {\r\n                        if (DEBUG) {\r\n                            this.log(\"ERROR no stopped symbols\");\r\n                        }\r\n                    }\r\n                } else {\r\n                    if (DEBUG) {\r\n                        this.log(\"ERROR no reel with index: \" + i);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (longRotation != null && longRotation) {\r\n                this._stopTimer.start(this._minSpinRotationLong);\r\n            } else {\r\n                this._stopTimer.start(this._minSpinRotation);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no reels\");\r\n            }\r\n        }\r\n\r\n        PlayList.play(\"SND_BaseRotationStart\");\r\n        PlayList.loop(\"SND_BaseRotation\", 0, true);\r\n    }\r\n\r\n    public onReelStopped(reelIndex: number): void {\r\n        super.onReelStopped(reelIndex);\r\n\r\n        if (this._checkSymbolOnReel(reelIndex, [7])) PlayList.play(\"SND_Wild\");\r\n        if (this._checkMaskLanding(reelIndex) && this._canTease) PlayList.play(\"SND_Scatter\" + reelIndex);\r\n        if (this._checkSymbolOnReel(reelIndex, [9, 10, 11, 12, 13])) PlayList.play(\"SND_CollectingSymbol\");\r\n    }\r\n\r\n    private _checkMaskLanding(reelIndex: number): boolean {\r\n        let hasMask = this._checkSymbolOnReel(reelIndex, [8]);\r\n        let hasMaskPrev = reelIndex > 0 ? this._checkSymbolOnReel(reelIndex - 1, [8]) : true;\r\n        return hasMask && hasMaskPrev;\r\n    }\r\n    private _checkSymbolOnReel(reelIndex: number, symbols: number[]): boolean {\r\n        let bool = false;\r\n        for (let i = 0; i < symbols.length; i++) {\r\n            bool = bool || this._stoppedSymbolsArray[reelIndex].symbols.indexOf(symbols[i]) >= 0;\r\n        }\r\n        return bool;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/MachineExtended.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Reel } from \"../GameComponents/Reel\";\r\nimport { Symbol } from \"../GameComponents/Symbol\";\r\nimport { Tweens } from \"../Components/Effects/Tweens\";\r\nimport { CustomUtils } from \"../Utils/CustomUtils\";\r\nimport { CreateFrameTimer, FrameTimerEventEmitter, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport TweenLite = gsap.TweenLite;\r\n\r\n/**\r\n * ReelAvalanche handles:\r\n * - z-order\r\n * - usage of Normal instead of Rotation\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class ReelAvalanche extends Reel {\r\n    public static Tease: boolean = false;\r\n\r\n    //******************************************************************************************************************\r\n    //  VARIABLES\r\n    //******************************************************************************************************************\r\n\r\n    private static readonly SpinRollDuration: number = 1; //in frames\r\n\r\n    private static readonly SingleSymbolDelay: number = 1; //in frames\r\n\r\n    private static readonly SingleSymbolPostrollDelay: number = 3; //in frames\r\n\r\n    private spinRollFinished: boolean;\r\n\r\n    private hasData: boolean;\r\n\r\n    private reelStopped: boolean;\r\n\r\n    private hasReelUpdated: boolean;\r\n\r\n    private isSkipped: boolean;\r\n\r\n    private spinRollTimer: FrameTimerEventEmitter;\r\n\r\n    private spinPostRollSymbols: Array<Symbol>;\r\n\r\n    private inRespin: boolean;\r\n\r\n    //******************************************************************************************************************\r\n    //  CONSTRUCTOR\r\n    //******************************************************************************************************************\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.spinRollTimer = CreateFrameTimer(\"spinRollTimer\");\r\n        this.spinRollTimer.on(FrameTimerEvents.Complete, this.spinRollFinish.bind(this));\r\n\r\n        this.spinPostRollSymbols = [];\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SHOW SYMBOLS, SPIN ROLL\r\n    //******************************************************************************************************************\r\n\r\n    public showSymbols(useTransform: boolean = false): void {\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = false;\r\n        this.teasingSymbols = [];\r\n\r\n        this.x = this.positionX;\r\n        this.y = this.positionY;\r\n\r\n        if (!useTransform) {\r\n            while (this.currentSymbols.length > 0) {\r\n                this.returnSymbol(this.currentSymbols.pop());\r\n            }\r\n        }\r\n\r\n        let bottomSymbols: Array<Symbol> = [];\r\n        let topSymbols: Array<Symbol> = [];\r\n\r\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n            let symbolId: number;\r\n            let symbolCase: string;\r\n\r\n            if (i < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            }\r\n\r\n            if (!useTransform) {\r\n                // when we don't want use symbols from WinAnimator\r\n                this.currentSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n            } else {\r\n                // currentSymbols are used from WinAnimator. We only need to add new top and bottom symbols\r\n                if (i < this.symbolBottomCount) {\r\n                    bottomSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n                } else if (i > this.symbolBottomCount + this.symbolCount - 1) {\r\n                    topSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n                } else if (this.currentSymbols[this.symbolCount - i] == null) {\r\n                    //add symbol below expanded wild\r\n                    this.currentSymbols[this.symbolCount - i] = this.getSymbol(symbolId - 1, symbolCase);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (useTransform) {\r\n            while (bottomSymbols.length > 0) {\r\n                this.currentSymbols.push(bottomSymbols.shift());\r\n            }\r\n\r\n            while (topSymbols.length > 0) {\r\n                this.currentSymbols.unshift(topSymbols.shift());\r\n            }\r\n        }\r\n\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            this.addChild(this.currentSymbols[i]);\r\n\r\n            const symbol = this.currentSymbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  START SPIN\r\n    //******************************************************************************************************************\r\n\r\n    public spinStart(): void {\r\n        this.isStopping = false;\r\n        this.stoppingCounter = 0;\r\n        this.isTeasing = false;\r\n        this.teasingSymbols = [];\r\n        this.rollSpeed = this.speed;\r\n        this.stripIndex = (this.data.index - this.symbolTopCount + this.strip.length) % this.strip.length;\r\n        this.isSkipped = false;\r\n\r\n        this.spinRollFinished = false;\r\n        this.hasData = false;\r\n        this.reelStopped = false;\r\n        this.hasReelUpdated = false;\r\n        this.inRespin = CustomUtils.isRespin();\r\n\r\n        if (this.inRespin) {\r\n            this.respinRoll();\r\n        } else {\r\n            this.spinRoll();\r\n        }\r\n    }\r\n\r\n    public skipSpin(): void {\r\n        this.isSkipped = true;\r\n        this.spinComplete();\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN STOP\r\n    //******************************************************************************************************************\r\n\r\n    public spinStop(force: boolean = false, customDelay: number = 0): void {\r\n        if (this.isSkipped) {\r\n            return;\r\n        }\r\n\r\n        //force ak uz dopadavaju symboly tak im zrusim tween, nasetujem finalnu poziciu a zavolam spin complete\r\n        if (force && this.hasData && this.spinRollFinished) {\r\n            this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n            this.spinComplete();\r\n            return;\r\n        }\r\n\r\n        this.hasData = true;\r\n\r\n        //force ak este nedopadli prve symboly a nezavolalo sa ani updateReel\r\n        if (force && this.hasData && !this.hasReelUpdated) {\r\n            this.updateReel();\r\n            this.updateSymbolsPosition(this.currentSymbols);\r\n            this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n            this.spinComplete();\r\n            return;\r\n        }\r\n\r\n        //klasicke dotocenie\r\n        if (this.spinRollFinished) {\r\n            this.updateReel();\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN ROLL\r\n    //******************************************************************************************************************\r\n\r\n    protected spinRoll(): void {\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            let index = this.currentSymbols.length - i - 1;\r\n            Tweens.removeTweens(this.currentSymbols[index], \"position\");\r\n            Tweens.positionTween(this.currentSymbols[index], {\r\n                tweenX: [this.currentSymbols[index].x, this.currentSymbols[index].x],\r\n                tweenY: [this.currentSymbols[index].y, this.currentSymbols[index].y + this.symbolHeight * 6],\r\n                tweenDelay: i * ReelAvalanche.SingleSymbolDelay + this.startDelay,\r\n                tweenDuration: this.rollSpeed,\r\n                tweenEase: \"power2In\",\r\n            });\r\n        }\r\n\r\n        this.spinRollTimer.stop();\r\n        this.spinRollTimer.start(ReelAvalanche.SpinRollDuration * (this.index + 1));\r\n    }\r\n\r\n    protected respinRoll(): void {\r\n        for (let i = 0; i < this.currentSymbols.length; i++) {\r\n            let index = this.currentSymbols.length - i - 1;\r\n            let symbol = this.currentSymbols[index];\r\n\r\n            if (symbol.getCurrentCase() != Symbol.CaseEmpty) {\r\n                let emptySymbolCount = this.getEmptySymbols(index);\r\n\r\n                Tweens.removeTweens(symbol, \"position\");\r\n                let tween = Tweens.positionTween(symbol, {\r\n                    tweenX: [symbol.x, symbol.x],\r\n                    tweenY: [symbol.y, symbol.y + this.symbolHeight * emptySymbolCount],\r\n                    tweenDelay: i * ReelAvalanche.SingleSymbolDelay + this.startDelay,\r\n                    tweenDuration: this.rollSpeed * 0.5,\r\n                    tweenEase: \"power2In\",\r\n                });\r\n            }\r\n        }\r\n\r\n        this.updateRespinSymbolsPosition();\r\n        this.spinRollTimer.stop();\r\n        this.spinRollTimer.start(ReelAvalanche.SpinRollDuration);\r\n    }\r\n\r\n    private updateRespinSymbolsPosition(): void {\r\n        let counter = this.currentSymbols.length - 1;\r\n        for (let i = this.currentSymbols.length - 1; i >= 0; i--) {\r\n            if (this.currentSymbols[i].getCurrentCase() != Symbol.CaseEmpty) {\r\n                if (i != counter) {\r\n                    let tempSymbol = this.currentSymbols[counter];\r\n                    this.currentSymbols[counter] = this.currentSymbols[i];\r\n                    this.currentSymbols[i] = tempSymbol;\r\n                }\r\n                counter--;\r\n            }\r\n        }\r\n    }\r\n\r\n    private getEmptySymbols(index: number): number {\r\n        let count = 0;\r\n\r\n        for (let i = index; i < this.currentSymbols.length; i++) {\r\n            let symbol = this.currentSymbols[i];\r\n\r\n            if (symbol.getCurrentCase() == Symbol.CaseEmpty) {\r\n                count++;\r\n            }\r\n        }\r\n\r\n        return count;\r\n    }\r\n\r\n    protected spinRollFinish(): void {\r\n        this.spinRollTimer.stop();\r\n        this.spinRollFinished = true;\r\n\r\n        if (this.hasData) {\r\n            this.updateReel();\r\n        }\r\n    }\r\n\r\n    protected updateReel(): void {\r\n        this.spinPostRollSymbols = [];\r\n\r\n        for (let i = 0; i < this.symbolBottomCount + this.symbolCount + this.symbolTopCount; i++) {\r\n            let symbolId: number;\r\n            let symbolCase: string;\r\n\r\n            if (i < this.symbolBottomCount) {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount - 1 ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            } else if (i < this.symbolBottomCount + this.symbolCount) {\r\n                symbolId = this.data.symbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n                symbolCase = Symbol.CaseRotation;\r\n\r\n                if (this.inRespin) {\r\n                    let symbol = this.currentSymbols[this.symbolBottomCount + this.symbolCount - i - 1];\r\n                    if (symbol != null && symbol.getCurrentCase() != Symbol.CaseEmpty) {\r\n                        symbolCase = Symbol.CaseEmpty;\r\n                    }\r\n                }\r\n            } else {\r\n                symbolId =\r\n                    this.strip[\r\n                        (this.data.index + this.symbolBottomCount + this.symbolCount - i - 1 + this.strip.length) %\r\n                            this.strip.length\r\n                    ];\r\n                symbolCase = i === this.symbolBottomCount + this.symbolCount ? Symbol.CaseRotation : Symbol.CaseBlur;\r\n            }\r\n\r\n            this.spinPostRollSymbols.unshift(this.getSymbol(symbolId - 1, symbolCase));\r\n\r\n            this.addChild(this.spinPostRollSymbols[0]);\r\n        }\r\n\r\n        this.updateSymbolsPosition(this.spinPostRollSymbols);\r\n\r\n        if (this.inRespin) {\r\n            this.respinPostRoll();\r\n        } else {\r\n            this.spinPostRoll();\r\n        }\r\n\r\n        this.hasReelUpdated = true;\r\n    }\r\n\r\n    protected updateSymbolsPosition(symbols: Array<Symbol>): void {\r\n        for (let i = 0; i < symbols.length; i++) {\r\n            const symbol = symbols[i];\r\n            symbol.x = -symbol.offsetX;\r\n            symbol.y = this.symbolHeight * (i - this.symbolTopCount) - symbol.offsetY;\r\n        }\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN POST ROLL\r\n    //******************************************************************************************************************\r\n\r\n    protected spinPostRoll(): void {\r\n        for (let i = 0; i < this.spinPostRollSymbols.length; i++) {\r\n            let index = this.spinPostRollSymbols.length - i - 1;\r\n            Tweens.removeTweens(this.spinPostRollSymbols[index], \"position\");\r\n            let tween = Tweens.positionTween(this.spinPostRollSymbols[index], {\r\n                tweenX: [this.spinPostRollSymbols[index].x, this.spinPostRollSymbols[index].x],\r\n                tweenY: [this.spinPostRollSymbols[index].y - this.symbolHeight * 6, this.spinPostRollSymbols[index].y],\r\n                tweenDelay: i * ReelAvalanche.SingleSymbolPostrollDelay + this.stopDelay,\r\n                tweenDuration: this.postRollSpeed,\r\n                tweenEase: \"power2Out\",\r\n            });\r\n\r\n            if (i == this.spinPostRollSymbols.length - 1) {\r\n                tween.eventCallback(\"onComplete\", this.spinComplete, null, this);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected respinPostRoll(): void {\r\n        let tween: TweenLite;\r\n        for (let i = 0; i < this.spinPostRollSymbols.length; i++) {\r\n            let index = this.spinPostRollSymbols.length - i - 1;\r\n            let symbol = this.spinPostRollSymbols[index];\r\n\r\n            if (symbol.getCurrentCase() != Symbol.CaseEmpty) {\r\n                Tweens.removeTweens(symbol, \"position\");\r\n                tween = Tweens.positionTween(symbol, {\r\n                    tweenX: [symbol.x, symbol.x],\r\n                    tweenY: [symbol.y - this.symbolHeight * 6, symbol.y],\r\n                    tweenDelay: i * 3,\r\n                    tweenDuration: this.postRollSpeed * 0.5,\r\n                    tweenEase: \"power2Out\",\r\n                });\r\n            }\r\n        }\r\n\r\n        tween.eventCallback(\"onComplete\", this.spinComplete, null, this);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SPIN COMPLETE\r\n    //******************************************************************************************************************\r\n\r\n    protected spinComplete(): void {\r\n        this.resetSymbolsContainer(this.currentSymbols);\r\n        this.resetSymbolsContainer(this.spinPostRollSymbols);\r\n\r\n        this.reelStopped = true;\r\n        this.emit(Reel.ReelStopped, this.index);\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  SYMBOLS\r\n    //******************************************************************************************************************\r\n\r\n    protected resetSymbolsContainer(symbols: Array<Symbol>): void {\r\n        while (symbols.length > 0) {\r\n            let symbol = symbols.pop();\r\n\r\n            if (symbol != null) {\r\n                Tweens.removeTweens(symbol, \"position\");\r\n                this.returnSymbol(symbol);\r\n            }\r\n        }\r\n    }\r\n\r\n    protected removeSymbolsTween(symbols: Array<Symbol>): void {\r\n        for (let i = 0; i < symbols.length; i++) {\r\n            Tweens.removeTweens(symbols[i], \"position\");\r\n        }\r\n    }\r\n\r\n    protected getSymbol(symbolId: number, symbolCase: string): Symbol {\r\n        if (symbolCase === Symbol.CaseRotation) {\r\n            symbolCase = Symbol.CaseNormal;\r\n        }\r\n\r\n        const symbol = super.getSymbol(symbolId, symbolCase);\r\n        return symbol;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/ReelAvalanche.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { WinAnimator } from \"../GameComponents/WinAnimator\";\r\nimport { PaylinesDefinitions } from \"../GameComponents/PaylinesDefinitions\";\r\nimport { Symbol } from \"../GameComponents/Symbol\";\r\nimport { Communication } from \"neo-games\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { ImageTextElement } from \"../Components/Elements/Texts/ImageTextElement\";\r\nimport { ImageTextCounterElement } from \"../Components/Elements/Texts/ImageTextCounterElement\";\r\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\r\nimport { CreateFrameTimer, FrameTimerEvents } from \"../Utils/FrameTimer\";\r\nimport { AppContext } from \"../../Common/AppContext\";\r\nimport { BetManager } from \"../Managers/BetManager\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\nimport { SpineElement } from \"../Components/Elements/Graphics/SpineElement\";\r\nimport { Scaling } from \"../Utils/Scaling\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class WinAnimatorExtended extends WinAnimator {\r\n    private teasingState = 0;\r\n\r\n    protected getCycleWinsDelay(): number {\r\n        return 90;\r\n    }\r\n\r\n    protected winSymbolsGoToCaseAsPayline(winIndex: number, caseType: string): Array<Symbol> {\r\n        const win = this.currentWins[winIndex];\r\n        const symbols: Symbol[] = [];\r\n\r\n        if (this.paylines != null) {\r\n            const definition = PaylinesDefinitions.getPaylineDefinitionsById(\r\n                win.paylineId,\r\n                this.paylines.paylineDefinition,\r\n            );\r\n\r\n            for (let i = 0; i < definition.length; i++) {\r\n                if (win.mask[i] === 1 && this.allowSymbolGoToCase(i, definition[i], caseType)) {\r\n                    const symbol = this.currentSymbols[i][definition[i]];\r\n                    if (caseType == Symbol.CaseCycle) {\r\n                        symbol.setDynamicTime(12 * i);\r\n                    }\r\n                    symbol.goToCase(caseType);\r\n                    this.symbolsContainer.addChild(symbol);\r\n                    symbols.push(symbol);\r\n                }\r\n            }\r\n        }\r\n\r\n        return symbols;\r\n    }\r\n\r\n    protected getAnimationIndex(): number {\r\n        let hasScatter = false;\r\n        let mysteryIndex = this.animationNames.indexOf(\"MysteryWin\");\r\n\r\n        if (this.currentWins && this.currentWins.length) {\r\n            for (let i = 0; i < this.currentWins.length; i++) {\r\n                hasScatter = hasScatter || this.currentWins[i].trigger == Communication.Game.WinTrigger.Scatter;\r\n            }\r\n        }\r\n        return hasScatter && mysteryIndex >= 0 ? mysteryIndex : super.getAnimationIndex();\r\n    }\r\n\r\n    public isHighWin() {\r\n        let currentAnimName = this.animationNames[this.getAnimationIndex()];\r\n        return [\"BigWin\", \"EpicWin\", \"LegendaryWin\", \"MysteryWin\"].indexOf(currentAnimName) >= 0;\r\n    }\r\n\r\n    protected startAnimation(): void {\r\n        this.currentAnimationIndex = this.getAnimationIndex();\r\n        this.currentAnimationFinished = false;\r\n        const animation = this.animations[this.currentAnimationIndex];\r\n        if (animation.name == \"MysteryWin\") {\r\n            animation.visible = true;\r\n            let mWin: Communication.Game.IWin;\r\n            if (this.currentWins && this.currentWins.length) {\r\n                for (let i = 0; i < this.currentWins.length; i++) {\r\n                    if (this.currentWins[i].trigger == Communication.Game.WinTrigger.Scatter) {\r\n                        mWin = this.currentWins[i];\r\n                    }\r\n                }\r\n            }\r\n            if (AppContext.gameConfiguration.UseCoins && BetManager.CoinSize != null) {\r\n                ImageTextCounterElement.Round = true;\r\n                animation.play(parseInt(NumberUtils.devide(mWin.amount, BetManager.CoinSize).toString()));\r\n            } else {\r\n                ImageTextCounterElement.Round = false;\r\n                animation.play(mWin.amount);\r\n            }\r\n            if (\r\n                animation.name == \"MysteryWin\" &&\r\n                mWin.customData &&\r\n                mWin.customData.possiblePayouts &&\r\n                mWin.customData.winPayout\r\n            ) {\r\n                let xCounter = <ImageTextElement>animation.getChildElementByName(\"XPayoutCounter\");\r\n                let mTimer = CreateFrameTimer(\"mysteryTimer\");\r\n                let possiblePayouts: number[] = mWin.customData.possiblePayouts;\r\n                possiblePayouts = [...possiblePayouts].sort(() => Math.random() - 0.5);\r\n                let targetIndex = possiblePayouts.indexOf(mWin.customData.winPayout);\r\n                const addSteps = 4;\r\n                let timerDur = 3;\r\n                let dif = targetIndex - addSteps;\r\n                let xIndex = dif >= 0 ? dif : dif + possiblePayouts.length;\r\n                let n = 0;\r\n                mTimer.on(FrameTimerEvents.Complete, function () {\r\n                    if (animation.currentKeyframe < 4) {\r\n                        mTimer.start(timerDur);\r\n                        return;\r\n                    }\r\n                    xIndex++;\r\n                    if (xIndex == possiblePayouts.length) xIndex = 0;\r\n                    n++;\r\n                    let num = possiblePayouts[xIndex];\r\n                    xCounter.bitmapText.text = (num < 10 ? \" \" : \"\") + num + \"x\";\r\n                    xCounter.realign();\r\n                    PlayList.play(\"SND_MysteryXCounter\");\r\n                    if (n < possiblePayouts.length * 3 + addSteps) mTimer.start(timerDur);\r\n                    if (n > possiblePayouts.length * 2) timerDur *= 1.2;\r\n                });\r\n                mTimer.start(timerDur);\r\n            }\r\n        } else {\r\n            super.startAnimation();\r\n        }\r\n        if ([\"BigWin\", \"EpicWin\", \"LegendaryWin\", \"MysteryWin\"].indexOf(animation.name) >= 0) {\r\n            for (let i = 0; i < this.currentWins.length; i++) {\r\n                this.winSymbolsGoToCase(i, Symbol.CaseHighWin, false);\r\n            }\r\n        }\r\n        let shadowCnt = <ContainerElement>animation.getChildElementByName(\"CounterShadow\");\r\n        if (shadowCnt) {\r\n            let shadowImg = <ImageElement>shadowCnt.getChildByName(\"AnimCounterShadow\");\r\n            let counterElement = <ImageTextCounterElement>animation.getChildElementByName(\"WinCounter\");\r\n            shadowImg.width = counterElement.width * 1.2;\r\n        }\r\n        if (animation.name == \"LegendaryWin\" && Scaling.isPortrait()) {\r\n            let lwAnimText = <SpineElement>animation.getChildElementByName(\"LegendaryWinText\");\r\n            lwAnimText.scale.set(0.7);\r\n        }\r\n    }\r\n\r\n    public setTeasing(isTease: boolean): void {\r\n        this.teasingState = isTease ? 1 : 2;\r\n    }\r\n    // ####\r\n    public onReelStopped(reelsData: Array<Communication.Game.IReel>, reelIndex: number): void {\r\n        super.onReelStopped(reelsData, reelIndex);\r\n        for (let i = 0; i < this.symbolCount; i++) {\r\n            const symbol = this.currentSymbols[reelIndex][i];\r\n            if (symbol) {\r\n                if ((symbol.id == 6 && this.teasingState != 1) || symbol.id == 7) {\r\n                    symbol.goToCase(Symbol.CaseLanding);\r\n                } else symbol.goToCase(this.teasingState == 1 ? Symbol.CaseNowin : Symbol.CaseNormal);\r\n            }\r\n        }\r\n        if (this.teasingState == 2 && reelIndex > 0) {\r\n            for (let i = 0; i < reelIndex; i++) {\r\n                for (let j = 0; j < this.symbolCount; j++) {\r\n                    const symbol = this.currentSymbols[i][j];\r\n                    if (symbol && symbol.id != 7) {\r\n                        symbol.goToCase(Symbol.CaseNormal);\r\n                    }\r\n                }\r\n            }\r\n            this.teasingState = 0;\r\n        }\r\n    }\r\n\r\n    public reset(showLastSymbols: boolean): boolean {\r\n        this.teasingState = 0;\r\n        return super.reset(showLastSymbols);\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/CustomComponents/WinAnimatorExtended.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\r\nimport { SpineElement } from \"../Components/Elements/Graphics/SpineElement\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { PlayList } from \"../Components/Sounds/PlayList\";\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class CollectFrames extends ContainerElement {\r\n    private _frames: SwitchElement[];\r\n    private _newSymbols: number[];\r\n    private _currentSet: number[];\r\n\r\n    constructor() {\r\n        super();\r\n        this._frames = [];\r\n        this._newSymbols = [];\r\n        this._currentSet = [];\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        this._frames[9] = <SwitchElement>this.childs[\"CollectFrame9\"];\r\n        this._frames[10] = <SwitchElement>this.childs[\"CollectFrame10\"];\r\n        this._frames[11] = <SwitchElement>this.childs[\"CollectFrame11\"];\r\n        this._frames[12] = <SwitchElement>this.childs[\"CollectFrame12\"];\r\n        this._frames[13] = <SwitchElement>this.childs[\"CollectFrame13\"];\r\n    }\r\n\r\n    isNew(symbolId: number): boolean {\r\n        return this._newSymbols.indexOf(symbolId) >= 0;\r\n    }\r\n\r\n    updateCurrentSet(set: number[], isShow = true): void {\r\n        if (!set) return;\r\n        this._newSymbols = set.filter((id) => {\r\n            return this._currentSet.indexOf(id) < 0;\r\n        });\r\n        this._currentSet = set;\r\n    }\r\n\r\n    showCurrentSet(isAnim = false, isChangedBet: boolean = false) {\r\n        for (let id = 9; id < 14; id++) {\r\n            if (this._currentSet.indexOf(id) < 0) {\r\n                this._frames[id].goToCase(\"EMPTY\");\r\n            } else {\r\n                let currentCase = this._frames[id].getCurrentCase();\r\n                if (currentCase == \"EMPTY\" && isAnim) this._frames[id].goToCase(\"LANDING\");\r\n                else if ((currentCase != \"FLYING\" && currentCase != \"LANDING\") || isChangedBet)\r\n                    this._frames[id].goToCase(\"STATIC\");\r\n            }\r\n        }\r\n    }\r\n\r\n    collectSymbol(symbolId: number, sX: number, sY: number): void {\r\n        let image = <ImageElement>this._frames[symbolId].getChildElementByName(\"SymbolFlying\");\r\n        let frameGlobPos = (<PIXI.Container>this._frames[symbolId]).getGlobalPosition();\r\n        let sc = this.scale.x;\r\n        image.position.x = (sX - frameGlobPos.x) / sc + image.pivot.x;\r\n        image.position.y = (sY - frameGlobPos.y) / sc + image.pivot.x;\r\n        this._frames[symbolId].goToCase(\"FLYING\");\r\n        PlayList.play(\"SND_FlyCollectingSymb\");\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/CollectFrames.ts\n **/","import { ArrayUtils, engineComponent } from \"neo-common\";\r\nimport { SwitchElement } from \"../Components/Elements/Graphics/SwitchElement\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { Attributes } from \"../Utils/Attributes\";\r\nimport { Configuration, GeneralConfigurationAttributes } from \"../Components/Configuration\";\r\nimport { GameManager } from \"../Managers/GameManager\";\r\nimport { BaseElement } from \"../Components/Elements/Graphics/BaseElement\";\r\nimport { ImageElement } from \"../Components/Elements/Graphics/ImageElement\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { Cubic, Expo, Linear, TweenLite } from \"gsap\";\r\nimport { StageController } from \"../Components/StageController\";\r\nimport { WinAnimatorExtended } from \"../CustomComponents/WinAnimatorExtended\";\r\n\r\nconst MULTS_NUM = 3;\r\n\r\ntype Multiplier = {\r\n    icon: ImageElement;\r\n    icon_dis: ImageElement;\r\n    glow: ImageElement;\r\n    scale: PIXI.Point | PIXI.ObservablePoint;\r\n};\r\n\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class GameMultipliers extends ContainerElement {\r\n    private _mults: Array<Multiplier>;\r\n    private _multiplierConfig: Array<number>;\r\n    private _winAnimator: WinAnimatorExtended;\r\n    private _flyContainer: ContainerElement;\r\n    private _flyingElem: ImageElement;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._mults = [];\r\n    }\r\n\r\n    public set winAnimator(value: WinAnimatorExtended) {\r\n        this._winAnimator = value;\r\n    }\r\n\r\n    public set flyContainer(value: ContainerElement) {\r\n        this._flyContainer = value;\r\n    }\r\n\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n        if (node.hasAttribute(GameMultipliersAttributes.CONFIGS)) {\r\n            let configs: Array<string> = node.getAttribute(GameMultipliersAttributes.CONFIGS).split(\";\");\r\n            for (let i: number = 0; i < configs.length; i++) {\r\n                let config: Element = Configuration.Configurations[configs[i]];\r\n                if (config != null) {\r\n                    this.configurate(config);\r\n                }\r\n            }\r\n        }\r\n        for (let i = 0; i < MULTS_NUM; i++) {\r\n            let img_dis = <ImageElement>this.childs[\"BaseMultX\" + (i + 1) + \"_disable\"];\r\n            let img = <ImageElement>this.childs[\"BaseMultX\" + (i + 1)];\r\n            this._mults[i] = {\r\n                icon: img,\r\n                icon_dis: img_dis,\r\n                glow: <ImageElement>this.childs[\"GlowMultX\" + (i + 1)],\r\n                scale: new PIXI.Point(img.scale.x, img.scale.y),\r\n            };\r\n        }\r\n    }\r\n\r\n    private configurate(node: Element): void {\r\n        if (node.hasAttribute(GeneralConfigurationAttributes.GAME_MULTIPLIERS)) {\r\n            this._multiplierConfig = ArrayUtils.numberArray(\r\n                node.getAttribute(GeneralConfigurationAttributes.GAME_MULTIPLIERS),\r\n            );\r\n        }\r\n    }\r\n\r\n    hide(): void {\r\n        this._mults.forEach((mult) => {\r\n            TweenLite.killTweensOf(mult.icon);\r\n            TweenLite.killTweensOf(mult.icon_dis);\r\n            TweenLite.killTweensOf(mult.glow);\r\n            if (mult.icon.alpha > 0) {\r\n                TweenLite.to(mult.icon, 0.2, { alpha: 0 });\r\n                TweenLite.to(mult.icon_dis, 0.2, { alpha: 0.5 });\r\n                TweenLite.to(mult.glow, 0.2, { alpha: 0 });\r\n            }\r\n        });\r\n    }\r\n\r\n    show(multiplier: number = null): void {\r\n        for (let i = 0; i < MULTS_NUM; i++) {\r\n            let mIndex = this._multiplierConfig.indexOf(multiplier || GameManager.baseResponse.gameMultiplier);\r\n            if (mIndex == i) {\r\n                let bounceCoef = 1.4;\r\n                let mult = this._mults[i];\r\n                TweenLite.killTweensOf(mult.icon);\r\n                TweenLite.killTweensOf(mult.icon_dis);\r\n                TweenLite.killTweensOf(mult.glow);\r\n                TweenLite.to(mult.icon, 0.2, { alpha: 1 });\r\n                TweenLite.to(mult.icon_dis, 0.2, { alpha: 0 });\r\n                TweenLite.to(mult.glow, 0.2, { alpha: 0.5 });\r\n                TweenLite.to(mult.icon.scale, 0.2, {\r\n                    x: mult.scale.x * bounceCoef,\r\n                    y: mult.scale.y * bounceCoef,\r\n                    delay: 0.2,\r\n                });\r\n                TweenLite.to(mult.icon.scale, 0.2, { x: mult.scale.x, y: mult.scale.y, delay: 0.5 });\r\n            }\r\n        }\r\n    }\r\n\r\n    // fly(): void {\r\n    //     let mIndex = this._multiplierConfig.indexOf(GameManager.baseResponse.gameMultiplier);\r\n    //     if(mIndex < 0) return;\r\n    //     this._flyingElem = this._mults[mIndex].icon.clone();\r\n    //     this._flyContainer.addChild(this._flyingElem);\r\n    //     this._flyingElem.scale.x *= 1.5;\r\n    //     this._flyingElem.scale.y *= 1.5;\r\n    //     let shiftY = this._winAnimator.isHighWin() ? 185 : -160;\r\n    //     let duration = this._winAnimator.isHighWin() ? 1.0 : 0.7;\r\n    //     TweenLite.to(this._flyingElem.position, duration, {\r\n    //         x: StageController.Width / 2 - this.x,\r\n    //         y: StageController.Height / 2 - this.y - this._flyingElem.height / 2 + shiftY,\r\n    //         ease: Linear.ease,\r\n    //         delay: 0.5\r\n    //     });\r\n\r\n    // }\r\n\r\n    // clearFlying() {\r\n    //     this._flyContainer && this._flyContainer.removeChildren();\r\n    //     this._flyingElem = null;\r\n    // }\r\n}\r\n\r\nexport const GameMultipliersAttributes = {\r\n    CONFIGS: \"Configs\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/GameMultipliers.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\r\nimport { Payline } from \"./Payline\";\r\nimport { Configuration } from \"../Components/Configuration\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\n\r\n/**\r\n * Paylines class is holder for all paylines.\r\n * Paylines define behaviour of paylines on screen.\r\n * @class Paylines\r\n * @extends ContainerElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Paylines extends ContainerElement {\r\n    paylineDefinition: string;\r\n\r\n    private _paylineIDs: Array<number>;\r\n    private _paylines: Array<Payline>;\r\n    private _specialContainer: ContainerElement;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._paylines = [];\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        /*\r\n         * Name of config for paylines.\r\n         * @property Configs\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Configs\")) {\r\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\r\n            for (var i: number = 0; i < configs.length; i++) {\r\n                var config: Element = Configuration.Configurations[configs[i]];\r\n                if (config != null) {\r\n                    this.configurate(config);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.childs != null) {\r\n            for (var key in this.childs) {\r\n                if (this.childs[key] instanceof Payline) {\r\n                    this._paylines.push(this.childs[key]);\r\n                }\r\n            }\r\n\r\n            this.children.sort((a: any, b: any) => {\r\n                if (a.hasOwnProperty(\"zIndex\") && b.hasOwnProperty(\"zIndex\")) {\r\n                    a.zIndex = a.zIndex || 0;\r\n                    b.zIndex = b.zIndex || 0;\r\n\r\n                    return a.zIndex - b.zIndex;\r\n                }\r\n\r\n                return 0;\r\n            });\r\n        }\r\n    }\r\n\r\n    setSpecialContainer(container: ContainerElement): void {\r\n        this._specialContainer = container;\r\n    }\r\n\r\n    /**\r\n     * Get attributes from configuration and set up supported properties.\r\n     * @method configurate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    configurate(node: Element): void {\r\n        /*\r\n         * PaylineIDs defines ids of payline used for game.\r\n         * @property PaylineIDs\r\n         * @type Array<number>\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"PaylineIDs\")) {\r\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n        }\r\n\r\n        /*\r\n         * Initialize paylines definitions for game.\r\n         * @property PaylineDefinition\r\n         * @type String\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"PaylineDefinition\")) {\r\n            this.paylineDefinition = node.getAttribute(\"PaylineDefinition\");\r\n            PaylinesDefinitions.initializePaylineDefinitions(node.getAttribute(\"PaylineDefinition\"));\r\n        }\r\n    }\r\n\r\n    showPaylinesLabel(): void {}\r\n\r\n    /**\r\n     * Set winning payline from response to case WIN.\r\n     * @method goToWin\r\n     * @param id number\r\n     * @return void\r\n     */\r\n    goToWin(id: number): void {\r\n        if (this._paylines[id - 1] != null) {\r\n            this.addChild(this._paylines[id - 1]);\r\n            this._paylines[id - 1].goToCase(Payline.CaseWin);\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no payline with id: \" + (id - 1));\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Reset all paylines to case NORMAL.\r\n     * @method reset\r\n     * @return void\r\n     */\r\n    reset(): void {\r\n        for (var i: number = 0; i < this._paylines.length; i++) {\r\n            if (this._specialContainer != null) {\r\n                this._specialContainer.addChild(this._paylines[i]);\r\n            }\r\n            this._paylines[i].goToCase(Payline.CaseNormal);\r\n        }\r\n    }\r\n\r\n    getPaylines(): Array<Payline> {\r\n        return this._paylines;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  NEW USAGE\r\n    //******************************************************************************************************************\r\n\r\n    public goToCase(caseType: string): void;\r\n    public goToCase(caseType: string, id: number): void;\r\n\r\n    public goToCase(caseType: string, id?: number): void {\r\n        if (id) {\r\n            if (this._paylines[id - 1] != null) {\r\n                if (caseType === Payline.CaseWin) {\r\n                    this.addChild(this._paylines[id - 1]);\r\n                } else {\r\n                    if (this._specialContainer != null) {\r\n                        this._specialContainer.addChild(this._paylines[id - 1]);\r\n                    }\r\n                }\r\n\r\n                this._paylines[id - 1].goToCase(caseType);\r\n            } else {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no payline with id: \" + (id - 1));\r\n                }\r\n            }\r\n        } else {\r\n            for (let i = 0; i < this._paylines.length; i++) {\r\n                if (caseType === Payline.CaseWin) {\r\n                    this.addChild(this._paylines[i]);\r\n                } else {\r\n                    if (this._specialContainer != null) {\r\n                        this._specialContainer.addChild(this._paylines[i]);\r\n                    }\r\n                }\r\n                this._paylines[i].goToCase(caseType);\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Paylines.ts\n **/","import { engineComponent, ArrayUtils } from \"neo-common\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { PaylinesDefinitions } from \"./PaylinesDefinitions\";\r\nimport { Payline } from \"./Payline\";\r\nimport { Configuration } from \"../Components/Configuration\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\n\r\n/**\r\n * Paylines class is holder for all paylines.\r\n * Paylines define behaviour of paylines on screen.\r\n * @class Paylines\r\n * @extends ContainerElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class PaylinesSelector extends ContainerElement {\r\n    private _paylineIDs: Array<number>;\r\n    private _paylines: Array<Payline>;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this._paylines = [];\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    createByNode(node: Element) {\r\n        super.createByNode(node);\r\n\r\n        /*\r\n         * Name of config for paylines.\r\n         * @property Configs\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Configs\")) {\r\n            var configs: Array<string> = node.getAttribute(\"Configs\").split(\";\");\r\n            for (var i: number = 0; i < configs.length; i++) {\r\n                var config: Element = Configuration.Configurations[configs[i]];\r\n                if (config != null) {\r\n                    this.configurate(config);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.childs != null) {\r\n            for (var key in this.childs) {\r\n                if (this.childs[key] instanceof Payline) {\r\n                    this._paylines.push(this.childs[key]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get attributes from configuration and set up supported properties.\r\n     * @method configurate\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    configurate(node: Element): void {\r\n        /*\r\n         * PaylineIDs defines ids of payline used for game.\r\n         * @property PaylineIDs\r\n         * @type Array<number>\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"PaylineIDs\")) {\r\n            this._paylineIDs = ArrayUtils.numberArray(node.getAttribute(\"PaylineIDs\"));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Reset all paylines to case NORMAL.\r\n     * @method reset\r\n     * @return void\r\n     */\r\n    reset(): void {\r\n        this.visible = false;\r\n        for (var i: number = 0; i < this._paylines.length; i++) {\r\n            this._paylines[i].goToCase(Payline.CaseNormal);\r\n        }\r\n    }\r\n\r\n    select(id?: number): void {\r\n        this.visible = true;\r\n\r\n        // for (var i: number = 0; i < this._paylines.length; i++) {\r\n        this._paylines[id / 20 - 1].goToCase(Payline.CaseSelect);\r\n        // }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/PaylinesSelector.ts\n **/","import { engineComponent, Logger } from \"neo-common\";\r\nimport { ContainerElement } from \"../Components/Elements/Graphics/ContainerElement\";\r\nimport { Symbol } from \"./Symbol\";\r\nimport { AnimationStyle } from \"../Components/Elements/Styles/AnimationStyle\";\r\nimport { StyleManager } from \"../Components/Managers/StyleManager\";\r\nimport { Configuration } from \"../Components/Configuration\";\r\nimport { ComponentTypes } from \"../Components/ComponentTypes\";\r\nimport { StageController } from \"../Components/StageController\";\r\n\r\n/**\r\n * The symbols class is holder for game symbols. Class holds also textures for rotation.\r\n * @class Symbols\r\n * @extends ContainerElement\r\n */\r\n@engineComponent(ComponentTypes.DisplayObject)\r\nexport class Symbols extends ContainerElement {\r\n    // instances for cloning in game\r\n    public symbols: Array<Symbol>;\r\n    // symbols bitmap data for reel rotation\r\n    public symbolsData: Array<Object>;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        this.symbols = [];\r\n        this.symbolsData = [];\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    createByNode(node: Element): void {\r\n        super.createByNode(node);\r\n\r\n        let configs: Array<string>;\r\n\r\n        if (node.hasAttribute(SymbolsAttributes.CONFIGS)) {\r\n            configs = node.getAttribute(SymbolsAttributes.CONFIGS).split(\";\");\r\n        }\r\n\r\n        if (this.childs != null) {\r\n            for (let key in this.childs) {\r\n                if (this.childs[key] instanceof Symbol) {\r\n                    if (configs != null) {\r\n                        for (let i: number = 0; i < configs.length; i++) {\r\n                            this.childs[key].configurate(Configuration.Configurations[configs[i]]);\r\n                        }\r\n                    }\r\n                    this.symbols.push(this.childs[key]);\r\n                }\r\n            }\r\n        }\r\n\r\n        if (this.symbols != null) {\r\n            // this.createSymbolsData();\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no symbols\");\r\n            }\r\n        }\r\n\r\n        this.removeChildren();\r\n\r\n        this.visible = false;\r\n\r\n        this.createObjectPool();\r\n    }\r\n\r\n    /**\r\n     * Create symbols bitmap data for reel rotation.\r\n     * Store normal case of symbol for static symbols and blur case for rotation.\r\n     * @method createSymbolsData\r\n     * @retutn void\r\n     */\r\n    createSymbolsData(): void {\r\n        if (DEBUG) {\r\n            this.log(\"createSymbolsData\");\r\n        }\r\n\r\n        for (let i: number = 1; i <= this.symbols.length; i++) {\r\n            if (this.symbols[i - 1].hasElements) {\r\n                let caseElement: Element;\r\n                // let rotationBitmap: PIXI.Texture = null;\r\n                // let blurBitmap: PIXI.Texture = null;\r\n\r\n                // create data from rotation but if symbol doesnt have rotation try blur or normal\r\n                if (this.symbols[i - 1].hasCase(Symbol.CaseRotation)) {\r\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseRotation);\r\n                } else {\r\n                    if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\r\n                        caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\r\n                    } else {\r\n                        if (this.symbols[i - 1].hasCase(Symbol.CaseNormal)) {\r\n                            caseElement = this.symbols[i - 1].getCase(Symbol.CaseNormal);\r\n                        } else {\r\n                            if (DEBUG) {\r\n                                this.log(\"ERROR Symbol has no CaseRotation, CaseBlur nor CaseNormal. Symbol ID: \" + i);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // rotationBitmap = this._getBitmapByCaseElement(caseElement);\r\n                // if (rotationBitmap == null) {\r\n                //     if (DEBUG) {\r\n                //         this.log('ERROR no style, animation or image of symbol with ID: ' + i + ' case: ' + Symbol.CaseRotation);\r\n                //     }\r\n                // }\r\n\r\n                if (this.symbols[i - 1].hasCase(Symbol.CaseBlur)) {\r\n                    caseElement = this.symbols[i - 1].getCase(Symbol.CaseBlur);\r\n                }\r\n\r\n                // blurBitmap = this._getBitmapByCaseElement(caseElement);\r\n                // if (blurBitmap == null) {\r\n                //     if (DEBUG) {\r\n                //         this.log('ERROR no style, animation or image of symbol with ID: ' + i + ' case: ' + Symbol.CaseBlur);\r\n                //     }\r\n                // }\r\n\r\n                // let object: Object = {};\r\n                //\r\n                // if (rotationBitmap != null) {\r\n                //     object[Symbol.CaseRotation] = rotationBitmap;\r\n                // }\r\n                //\r\n                // if (blurBitmap != null) {\r\n                //     object[Symbol.CaseBlur] = blurBitmap;\r\n                // } else {\r\n                //     if (rotationBitmap != null) {\r\n                //         object[Symbol.CaseBlur] = rotationBitmap;\r\n                //     }\r\n                // }\r\n                //\r\n                // if (object != null) {\r\n                //     object['zIndex'] = this.symbols[i - 1].zIndex;\r\n                //     this.symbolsData.push(object);\r\n                // }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Gef first child of case element.\r\n     *\r\n     * @param caseElement\r\n     * @returns {PIXI.Texture}\r\n     * @private\r\n     */\r\n    private _getBitmapByCaseElement(caseElement: Element): PIXI.Texture {\r\n        if (caseElement != null) {\r\n            if (caseElement.firstElementChild.hasAttribute(\"Style\")) {\r\n                if (DEBUG) {\r\n                    /* todo Add check for parentNode existence */\r\n                    this.log(\r\n                        \"WARNING Please use Animation attribute! Node: \" +\r\n                            caseElement.parentNode.parentNode.nodeName +\r\n                            \", Case: \" +\r\n                            caseElement.getAttribute(\"Case\"),\r\n                    );\r\n                }\r\n\r\n                if (<AnimationStyle>StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")] != null) {\r\n                    if (\r\n                        <AnimationStyle>(\r\n                            StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\r\n                        ) != null\r\n                    ) {\r\n                        return StageController.getTextureByResourceId(\r\n                            <AnimationStyle>(\r\n                                StyleManager.Styles[caseElement.firstElementChild.getAttribute(\"Style\")].animation\r\n                            ) + \"0000\",\r\n                        );\r\n                    }\r\n                }\r\n            } else if (caseElement.firstElementChild.hasAttribute(\"FromFrame\")) {\r\n                if (caseElement.firstElementChild.getAttribute(\"FromFrame\") != null) {\r\n                    return StageController.getTextureByResourceId(\r\n                        caseElement.firstElementChild.getAttribute(\"FromFrame\"),\r\n                    );\r\n                }\r\n            } else if (caseElement.firstElementChild.hasAttribute(\"Image\")) {\r\n                return StageController.getTextureByResourceId(caseElement.firstElementChild.getAttribute(\"Image\"));\r\n            } else {\r\n                return null;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n\r\n    //******************************************************************************************************************\r\n    //  OBJECT POOL\r\n    //******************************************************************************************************************\r\n\r\n    protected objectPool: Array<Array<Symbol>>;\r\n\r\n    protected objectContainer: ContainerElement;\r\n\r\n    /**\r\n     * Create object pool of symbols length.\r\n     */\r\n    protected createObjectPool(): void {\r\n        this.objectPool = [];\r\n\r\n        for (let i = 0; i < this.symbols.length; i++) {\r\n            this.objectPool.push([]);\r\n        }\r\n\r\n        this.objectContainer = new ContainerElement();\r\n        this.objectContainer.name = \"ObjectContainer\";\r\n    }\r\n\r\n    /**\r\n     * Get symbol from pool or clone new and go to case..\r\n     * @param {number} id\r\n     * @param {string} caseType\r\n     * @returns {Symbol}\r\n     */\r\n    public getSymbol(id: number, caseType: string): Symbol {\r\n        let symbol: Symbol;\r\n\r\n        if (this.objectPool[id].length === 0) {\r\n            symbol = this.symbols[id].clone();\r\n            symbol.name = \"Symbol\" + id;\r\n            symbol.id = id;\r\n        } else {\r\n            symbol = this.objectPool[id].pop();\r\n        }\r\n\r\n        symbol.visible = true;\r\n        symbol.goToCase(caseType);\r\n\r\n        return symbol;\r\n    }\r\n\r\n    /**\r\n     * Return symbol into pool.\r\n     * @param {Symbol} symbol\r\n     */\r\n    public returnSymbol(symbol: Symbol): void {\r\n        symbol.visible = false;\r\n        symbol.goToCase(Symbol.CaseEmpty);\r\n\r\n        this.objectContainer.addChild(symbol);\r\n\r\n        this.objectPool[symbol.id].push(symbol);\r\n    }\r\n}\r\n\r\nconst SymbolsAttributes = {\r\n    /**\r\n     * Name of config for symbol instance.\r\n     * @property Configs\r\n     * @type string\r\n     * @default null\r\n     */\r\n    CONFIGS: \"Configs\",\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/GameComponents/Symbols.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlBetSelectorContainerElement extends HtmlContainerElement {\r\n    private _popup: HTMLDivElement;\r\n    private _values: Array<HTMLDivElement>;\r\n    private _height: string;\r\n\r\n    protected block: boolean;\r\n    protected timeout: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        BetManager.CoinCountContainer = this;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\r\n        this._popup.classList.add(\"display\");\r\n        this._popup.classList.add(\"popupBig\");\r\n\r\n        if (this.instance != null) {\r\n            this.instance.appendChild(this._popup);\r\n        }\r\n\r\n        this.block = true;\r\n        this.createTimeout();\r\n    }\r\n\r\n    addValues(): void {\r\n        if (\r\n            AppContext.gameConfiguration.UseCoins &&\r\n            BetManager.Coins != null &&\r\n            BetManager.CoinSize != null &&\r\n            this._popup != null\r\n        ) {\r\n            this._values = [];\r\n            this._popup.innerHTML = \"\";\r\n            let i: number = 0;\r\n            for (let key in BetManager.Coins) {\r\n                if (BetManager.CoinSize === parseFloat(key)) {\r\n                    for (let j: number = 0; j < BetManager.Coins[key].length; j++) {\r\n                        BetManager.Coins[key].sort(BetManager.sortNumber);\r\n                        BetManager.Coins[key].reverse();\r\n\r\n                        let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                        popupItem.classList.add(\"popupItem\");\r\n                        popupItem.onclick = this.onValueClick.bind(this);\r\n                        popupItem.setAttribute(\"CoinCount\", BetManager.Coins[key][j].toString());\r\n                        if (BetManager.CoinCount != null && BetManager.CoinCount == BetManager.Coins[key][j]) {\r\n                            popupItem.classList.add(\"_active\");\r\n                        }\r\n                        let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                        popupItemValue.classList.add(\"popupValue\");\r\n                        popupItemValue.innerText = BetManager.Coins[key][j].toString();\r\n\r\n                        popupItem.appendChild(popupItemValue);\r\n                        this._values.push(popupItem);\r\n                        this._popup.appendChild(popupItem);\r\n                        i++;\r\n                    }\r\n                }\r\n            }\r\n\r\n            this._height = 60 * i + 48 + \"px\";\r\n        }\r\n    }\r\n\r\n    private onValueClick(e: any): void {\r\n        if (this.block) {\r\n            return;\r\n        }\r\n\r\n        this.setTimeout();\r\n        if (\r\n            e != null &&\r\n            e.currentTarget != null &&\r\n            e.currentTarget.hasAttribute(\"CoinCount\") &&\r\n            BetManager.CoinCount != null\r\n        ) {\r\n            let coinCount: number = parseFloat(e.currentTarget.getAttribute(\"CoinCount\"));\r\n            if (coinCount === BetManager.CoinCount) {\r\n                this.disable();\r\n            } else {\r\n                if (this._values != null) {\r\n                    for (let i: number = 0; i < this._values.length; i++) {\r\n                        if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n                            if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === coinCount) {\r\n                                this._values[i].classList.add(\"_active\");\r\n                            } else {\r\n                                this._values[i].classList.remove(\"_active\");\r\n                            }\r\n                        }\r\n                    }\r\n                    HtmlController.dispatchAction(BaseActions.ActionCoinCountSelectValue + coinCount);\r\n                    this.disable();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    changeValue(): void {\r\n        if (this._values != null) {\r\n            for (let i: number = 0; i < this._values.length; i++) {\r\n                if (this._values[i].hasAttribute(\"CoinCount\")) {\r\n                    if (parseFloat(this._values[i].getAttribute(\"CoinCount\")) === BetManager.CoinCount) {\r\n                        this._values[i].classList.add(\"_active\");\r\n                    } else {\r\n                        this._values[i].classList.remove(\"_active\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    toggle(): void {\r\n        if (this._values != null && this._values.length <= 1) {\r\n            return;\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            if (this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = false;\r\n                this.setTimeout();\r\n                if (this._height != null) {\r\n                    this.instance.style.height = this._height;\r\n                }\r\n                this.instance.classList.remove(\"_disabled\");\r\n            } else {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        if (this.instance != null) {\r\n            if (!this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    protected createTimeout(): void {\r\n        this.timeout = null;\r\n    }\r\n\r\n    protected setTimeout(): void {\r\n        this.clearTimeOut();\r\n\r\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\r\n        if (duration > 0) {\r\n            this.timeout = setTimeout((): void => {\r\n                this.disable();\r\n            }, duration * 1000);\r\n        }\r\n    }\r\n\r\n    protected clearTimeOut(): void {\r\n        if (!Utils.isNullOrUndefined(this.timeout)) {\r\n            clearTimeout(this.timeout);\r\n\r\n            this.timeout = null;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\r\nimport { Languages } from \"../../Utils/Languages\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlBetSelectorContainerElement2 extends HtmlContainerElement {\r\n    private _popup: HTMLDivElement;\r\n    private _values: Array<HTMLDivElement>;\r\n    private _height: string;\r\n\r\n    protected block: boolean;\r\n    protected timeout: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        BetManager.BetContainer = this;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\r\n        this._popup.classList.add(\"display\");\r\n        this._popup.classList.add(\"popupBig\");\r\n\r\n        if (this.instance != null) {\r\n            this.instance.appendChild(this._popup);\r\n        }\r\n\r\n        this.block = true;\r\n        this.createTimeout();\r\n    }\r\n\r\n    addValues(): void {\r\n        if (!AppContext.gameConfiguration.UseCoins && BetManager.TotalBets != null && this._popup != null) {\r\n            this._values = [];\r\n            this._popup.innerHTML = \"\";\r\n            let count: number = 0;\r\n            for (let i: number = BetManager.TotalBets.length - 1; i >= 0; i--) {\r\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItem.classList.add(\"popupItem\");\r\n                popupItem.onclick = this.onValueClick.bind(this);\r\n                popupItem.setAttribute(\"Bet\", BetManager.TotalBets[i].toString());\r\n                if (BetManager.Bet != null && BetManager.Bet == BetManager.TotalBets[i]) {\r\n                    popupItem.classList.add(\"_active\");\r\n                }\r\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItemValue.classList.add(\"popupValue\");\r\n\r\n                popupItemValue.innerText = Languages.formatText(\r\n                    Languages.FormatMoney,\r\n                    BetManager.TotalBets[i].toString(),\r\n                );\r\n\r\n                popupItem.appendChild(popupItemValue);\r\n                this._values.push(popupItem);\r\n                this._popup.appendChild(popupItem);\r\n                count++;\r\n            }\r\n\r\n            this._height = 60 * count + 48 + \"px\";\r\n        }\r\n    }\r\n\r\n    private onValueClick(e: any): void {\r\n        if (this.block) {\r\n            return;\r\n        }\r\n\r\n        this.setTimeout();\r\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Bet\") && BetManager.Bet != null) {\r\n            let bet: number = parseFloat(e.currentTarget.getAttribute(\"Bet\"));\r\n            if (bet === BetManager.Bet) {\r\n                this.disable();\r\n            } else {\r\n                if (this._values != null) {\r\n                    for (let i: number = 0; i < this._values.length; i++) {\r\n                        if (this._values[i].hasAttribute(\"Bet\")) {\r\n                            if (parseFloat(this._values[i].getAttribute(\"Bet\")) === bet) {\r\n                                this._values[i].classList.add(\"_active\");\r\n                            } else {\r\n                                this._values[i].classList.remove(\"_active\");\r\n                            }\r\n                        }\r\n                    }\r\n                    HtmlController.dispatchAction(BaseActions.ActionBetSelectValue + bet);\r\n                    this.disable();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    changeValue(): void {\r\n        if (this._values != null) {\r\n            for (let i: number = 0; i < this._values.length; i++) {\r\n                if (this._values[i].hasAttribute(\"Bet\")) {\r\n                    if (parseFloat(this._values[i].getAttribute(\"Bet\")) === BetManager.Bet) {\r\n                        this._values[i].classList.add(\"_active\");\r\n                    } else {\r\n                        this._values[i].classList.remove(\"_active\");\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    toggle(): void {\r\n        if (this._values != null && this._values.length <= 1) {\r\n            return;\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            if (this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = false;\r\n                this.setTimeout();\r\n                if (this._height != null) {\r\n                    this.instance.style.height = this._height;\r\n                }\r\n                this.instance.classList.remove(\"_disabled\");\r\n            } else {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        if (this.instance != null) {\r\n            if (!this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    protected createTimeout(): void {\r\n        this.timeout = null;\r\n    }\r\n\r\n    protected setTimeout(): void {\r\n        this.clearTimeOut();\r\n\r\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\r\n        if (duration > 0) {\r\n            this.timeout = setTimeout((): void => {\r\n                this.disable();\r\n            }, duration * 1000);\r\n        }\r\n    }\r\n\r\n    protected clearTimeOut(): void {\r\n        if (!Utils.isNullOrUndefined(this.timeout)) {\r\n            clearTimeout(this.timeout);\r\n\r\n            this.timeout = null;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlBetSelectorContainerElement2.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlDenomContainerElement extends HtmlContainerElement {\r\n    private _popup: HTMLDivElement;\r\n    private _values: Array<HTMLDivElement>;\r\n    private _height: string;\r\n\r\n    protected block: boolean;\r\n    protected timeout: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        BetManager.DenomContainer = this;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\r\n        this._popup.classList.add(\"display\");\r\n        this._popup.classList.add(\"popupBig\");\r\n\r\n        if (this.instance != null) {\r\n            this.instance.appendChild(this._popup);\r\n        }\r\n\r\n        this.block = true;\r\n        this.createTimeout();\r\n    }\r\n\r\n    addValues(): void {\r\n        if (\r\n            this._values == null &&\r\n            AppContext.gameConfiguration.UseCoins &&\r\n            BetManager.Coins != null &&\r\n            this._popup != null\r\n        ) {\r\n            this._values = [];\r\n            let i: number = 0;\r\n            let coinSizes: Array<string> = [];\r\n            for (let key in BetManager.Coins) {\r\n                coinSizes.push(key);\r\n            }\r\n            coinSizes.sort(BetManager.sortNumber);\r\n            coinSizes.reverse();\r\n\r\n            for (i = 0; i < coinSizes.length; i++) {\r\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItem.classList.add(\"popupItem\");\r\n                popupItem.onclick = this.onValueClick.bind(this);\r\n                popupItem.setAttribute(\"CoinSize\", coinSizes[i]);\r\n                if (BetManager.CoinSize != null && BetManager.CoinSize == parseFloat(coinSizes[i])) {\r\n                    popupItem.classList.add(\"_active\");\r\n                }\r\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItemValue.classList.add(\"popupValue\");\r\n                popupItemValue.innerText = coinSizes[i];\r\n\r\n                popupItem.appendChild(popupItemValue);\r\n                this._values.push(popupItem);\r\n                this._popup.appendChild(popupItem);\r\n            }\r\n\r\n            this._height = 60 * i + 48 + \"px\";\r\n        }\r\n    }\r\n\r\n    private onValueClick(e: any): void {\r\n        if (this.block) {\r\n            return;\r\n        }\r\n\r\n        this.setTimeout();\r\n        if (\r\n            e != null &&\r\n            e.currentTarget != null &&\r\n            e.currentTarget.hasAttribute(\"CoinSize\") &&\r\n            BetManager.CoinSize != null\r\n        ) {\r\n            let coinSize: number = parseFloat(e.currentTarget.getAttribute(\"CoinSize\"));\r\n            if (coinSize === BetManager.CoinSize) {\r\n                this.disable();\r\n            } else {\r\n                if (this._values != null) {\r\n                    for (let i: number = 0; i < this._values.length; i++) {\r\n                        if (this._values[i].hasAttribute(\"CoinSize\")) {\r\n                            if (parseFloat(this._values[i].getAttribute(\"CoinSize\")) === coinSize) {\r\n                                this._values[i].classList.add(\"_active\");\r\n                            } else {\r\n                                this._values[i].classList.remove(\"_active\");\r\n                            }\r\n                        }\r\n                    }\r\n                    HtmlController.dispatchAction(BaseActions.ActionDenomSelectValue + coinSize);\r\n                    this.disable();\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    toggle(): void {\r\n        if (this._values != null && this._values.length <= 1) {\r\n            return;\r\n        }\r\n        if (this.instance != null) {\r\n            if (this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = false;\r\n                this.setTimeout();\r\n                if (this._height != null) {\r\n                    this.instance.style.height = this._height;\r\n                }\r\n                this.instance.classList.remove(\"_disabled\");\r\n            } else {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        if (this.instance != null) {\r\n            if (!this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    protected createTimeout(): void {\r\n        this.timeout = null;\r\n    }\r\n\r\n    protected setTimeout(): void {\r\n        this.clearTimeOut();\r\n\r\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\r\n        if (duration > 0) {\r\n            this.timeout = setTimeout((): void => {\r\n                this.disable();\r\n            }, duration * 1000);\r\n        }\r\n    }\r\n\r\n    protected clearTimeOut(): void {\r\n        if (!Utils.isNullOrUndefined(this.timeout)) {\r\n            clearTimeout(this.timeout);\r\n\r\n            this.timeout = null;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlDenomContainerElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlHideButtonElement extends HtmlButtonElement {\r\n    static Buttons: { [hideClass: string]: Array<HtmlHideButtonElement> } = {};\r\n\r\n    private _hideClass: string = \"\";\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        HtmlController.HideButtons.push(this);\r\n\r\n        if (node.hasAttribute(\"HideClass\")) {\r\n            this._hideClass = node.getAttribute(\"HideClass\");\r\n            if (HtmlHideButtonElement.Buttons[this._hideClass] == null) {\r\n                HtmlHideButtonElement.Buttons[this._hideClass] = [];\r\n            }\r\n            HtmlHideButtonElement.Buttons[this._hideClass].push(this);\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            if (!AppContext.gameConfiguration.HideAmountsEnabled) {\r\n                this.instance.classList.add(\"_hidden\");\r\n            }\r\n            this.instance.onclick = this.toggle.bind(this);\r\n        }\r\n    }\r\n\r\n    public unHide(credit: boolean = false): void {\r\n        if (\r\n            this.instance != null &&\r\n            this._hideClass != \"\" &&\r\n            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))\r\n        ) {\r\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\r\n            let display: string = \"block\";\r\n\r\n            if (\r\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\r\n            ) {\r\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")) {\r\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\r\n                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (var i: number = 0; i < elements.length; i++) {\r\n                var element: HTMLElement = <HTMLElement>elements[i];\r\n                if (element != null) {\r\n                    element.style.display = display;\r\n                }\r\n            }\r\n\r\n            if (this._hideClass === \"_hideCredit\") {\r\n                if (display === \"block\") {\r\n                    AppContext.current.setHideAmounts(false);\r\n                } else {\r\n                    AppContext.current.setHideAmounts(true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public hide(credit: boolean = false): void {\r\n        if (\r\n            this.instance != null &&\r\n            this._hideClass != \"\" &&\r\n            (this._hideClass === \"_hideBet\" || (credit && this._hideClass === \"_hideCredit\"))\r\n        ) {\r\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\r\n            let display: string = \"none\";\r\n\r\n            if (\r\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\r\n            ) {\r\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\r\n                            if (\r\n                                !HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")\r\n                            ) {\r\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (var i: number = 0; i < elements.length; i++) {\r\n                var element: HTMLElement = <HTMLElement>elements[i];\r\n                if (element != null) {\r\n                    element.style.display = display;\r\n                }\r\n            }\r\n\r\n            if (this._hideClass === \"_hideCredit\") {\r\n                if (display === \"block\") {\r\n                    AppContext.current.setHideAmounts(false);\r\n                } else {\r\n                    AppContext.current.setHideAmounts(true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    public toggle(): void {\r\n        if (this.instance != null && this._hideClass != \"\") {\r\n            PlayList.play(\"SND_Click\");\r\n            let elements: HTMLCollectionOf<Element> = document.getElementsByClassName(this._hideClass);\r\n            let display: string = \"none\";\r\n\r\n            if (\r\n                HtmlHideButtonElement.Buttons[this._hideClass] != null &&\r\n                HtmlHideButtonElement.Buttons[this._hideClass].length > 0\r\n            ) {\r\n                for (var j: number = 0; j < HtmlHideButtonElement.Buttons[this._hideClass].length; j++) {\r\n                    if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance != null) {\r\n                        if (HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_on\");\r\n                            if (\r\n                                !HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_off\")\r\n                            ) {\r\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_off\");\r\n                            }\r\n                        } else {\r\n                            HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.remove(\"_off\");\r\n                            if (!HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.contains(\"_on\")) {\r\n                                HtmlHideButtonElement.Buttons[this._hideClass][j].instance.classList.add(\"_on\");\r\n                                display = \"block\";\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            for (var i: number = 0; i < elements.length; i++) {\r\n                var element: HTMLElement = <HTMLElement>elements[i];\r\n                if (element != null) {\r\n                    element.style.display = display;\r\n                }\r\n            }\r\n\r\n            if (this._hideClass === \"_hideCredit\") {\r\n                if (display === \"block\") {\r\n                    AppContext.current.setHideAmounts(false);\r\n                } else {\r\n                    AppContext.current.setHideAmounts(true);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlHideButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { Scaling } from \"../../Utils/Scaling\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { IButtonElement } from \"../../CustomComponents/IButtonElement\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\n\r\n/**\r\n * HtmlButtonElement id <div /> element with behaviour of button.\r\n * Can have also text inside of div.\r\n * Example:\r\n *   <div Class=\"HtmlButtonElement\">Text</div>\r\n *\r\n * @class HtmlButtonElement\r\n * @extends HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlButtonElement extends HtmlContainerElement implements IButtonElement {\r\n    static Click: string = \"click\";\r\n    static TouchStart: string = \"touchstart\";\r\n    static TouchEnd: string = \"touchend\";\r\n    static MouseOver: string = \"mouseover\";\r\n\r\n    action: string;\r\n    uiaction: Array<string>;\r\n\r\n    private touchLock: boolean;\r\n    private touchLockTimer: number;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        /*\r\n         * UIAction will handle click on this element and run uiaction on controller.\r\n         * @property UIAction\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"UIAction\")) {\r\n            this.uiaction = node.getAttribute(\"UIAction\").split(\";\");\r\n            if (!node.hasAttribute(\"Test\")) {\r\n                this.setTestAttributes(node.getAttribute(\"UIAction\"));\r\n            } else {\r\n                this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n            }\r\n            for (var i: number = 0; i < this.uiaction.length; i++) {\r\n                HtmlController.registerUiActionElement(this.uiaction[i], this);\r\n            }\r\n        }\r\n\r\n        /*\r\n         * Action will handle click on this element and run action on controller.\r\n         * @property Action\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Action\")) {\r\n            this.action = node.getAttribute(\"Action\");\r\n            this.setTestAttributes(node.getAttribute(\"Action\"));\r\n\r\n            HtmlController.registerActionElement(node.getAttribute(\"Action\"), this);\r\n        }\r\n\r\n        /*\r\n         * Test is html data attribute for automated testing support.\r\n         * @property Test\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Test\")) {\r\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n        }\r\n\r\n        if (this.action != null || this.uiaction != null) {\r\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n            if (this.action != null) {\r\n                this.instance.classList.add(HtmlController.DisabledClass);\r\n            }\r\n\r\n            //sticky hover fix\r\n            this.instance.addEventListener(HtmlButtonElement.TouchStart, this.onTouchStart.bind(this));\r\n            this.instance.addEventListener(HtmlButtonElement.TouchEnd, this.onTouchEnd.bind(this));\r\n\r\n            this.instance.addEventListener(\"gesturestart\", Scaling.preventPropagation);\r\n            this.instance.addEventListener(\"gesturechange\", Scaling.preventPropagation);\r\n            this.instance.addEventListener(\"gestureend\", Scaling.preventPropagation);\r\n            this.instance.addEventListener(\"touchmove\", Scaling.preventPropagation);\r\n\r\n            if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n                this.instance.addEventListener(HtmlButtonElement.MouseOver, this.onMouseOver.bind(this));\r\n            }\r\n        }\r\n    }\r\n\r\n    setTestAttributes(action: string): void {\r\n        this.instance.dataset[\"test\"] = this.renameTestAttributeValue(action);\r\n    }\r\n    renameTestAttributeValue(action: string): string {\r\n        let isGamblePortraitButton: boolean =\r\n            action.indexOf(\"GAMBLE_\") != -1 && this.instance.classList.contains(\"btnGamble\");\r\n        action = isGamblePortraitButton ? `${action}_PORTRAIT` : action;\r\n        switch (action) {\r\n            case \"QUICKSPIN_DIALOG_OFF\":\r\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"QUICKSPIN_DIALOG_CLOSE\";\r\n                return \"QUICKSPIN_DIALOG_NO\";\r\n            case \"QUICKSPIN_TOGGLE;QUICKSPIN_DIALOG_OFF\":\r\n                return \"QUICKSPIN_DIALOG_YES\";\r\n            case \"SETTINGS_OFF\":\r\n                if (this.instance.classList.contains(\"smallCloseBtn\")) return \"SETTINGS_CLOSE\";\r\n                if (\r\n                    this.instance.classList.contains(\"dialogBtn\") ||\r\n                    this.instance.classList.contains(\"settingsPageBtn\")\r\n                )\r\n                    return \"SETTINGS_OK\";\r\n                return \"SETTINGS_BACK\";\r\n            case \"QUICKSPIN_TOGGLE\":\r\n                return \"SETTINGS_TOGGLE\";\r\n            case \"EMPTY\":\r\n                return \"SIMILAR_GAMES_EXIT\";\r\n            case \"EXIT2\":\r\n                return \"EXIT_GAME\";\r\n            case \"EXIT\":\r\n                return \"HOME\";\r\n            case \"HELP_OFF\":\r\n                if (this.instance.classList.contains(\"closeBtn\")) return \"HELP_CLOSE\";\r\n                return \"HELP_BACK\";\r\n            case \"PAYTABLE_OFF\":\r\n                if (this.instance.classList.contains(\"closeBtn\")) return \"PAYTABLE_CLOSE\";\r\n                return \"PAYTABLE_BACK\";\r\n            case \"SETTINGS_ON\":\r\n                return \"SETTINGS\";\r\n            case \"HELP_ON\":\r\n                return \"HELP\";\r\n            case \"PAYTABLE_ON\":\r\n                return \"PAYTABLE\";\r\n            default:\r\n                return action;\r\n        }\r\n    }\r\n\r\n    registerEvents(): void {\r\n        if (this.action != null || this.uiaction != null) {\r\n            this.instance.addEventListener(HtmlButtonElement.Click, this.onClick.bind(this));\r\n            if (this.action != null) {\r\n                this.instance.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handler for click event.\r\n     * Dispatch action for HtmlController.\r\n     * @method onClick\r\n     * @return void\r\n     */\r\n    onClick(e?: Event): void {\r\n        if (DEBUG) {\r\n            this.log(\"onClick action: \" + this.action + \" uiaction: \" + this.uiaction);\r\n        }\r\n\r\n        if (this.instance != null && !this.instance.classList.contains(HtmlController.DisabledClass)) {\r\n            if (e && !e.isTrusted && AppContext.gameConfiguration.DisableUntrustedClicks) {\r\n                //due to BUG 2225\r\n                if (AppContext.gameDefinition.ClientHostType !== \"Mobile\") {\r\n                    this.log(`Untrusted action: ${this.action}, ui: ${this.action}`);\r\n                    return;\r\n                }\r\n            }\r\n            if (e && e.isTrusted) {\r\n                DataManager.addTrustedUserAction(this.action);\r\n            }\r\n            if (this.action != null) {\r\n                HtmlController.dispatchAction(this.action);\r\n            }\r\n\r\n            if (this.uiaction != null) {\r\n                for (var i: number = 0; i < this.uiaction.length; i++) {\r\n                    HtmlController.dispatchUiAction(this.uiaction[i]);\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    onTouchStart(): void {\r\n        clearTimeout(this.touchLockTimer);\r\n        this.touchLock = true;\r\n\r\n        if (this.instance != null && !this.instance.classList.contains(\"noHover\")) {\r\n            this.instance.classList.add(\"noHover\");\r\n        }\r\n    }\r\n\r\n    onTouchEnd(): void {\r\n        this.touchLockTimer = setTimeout(() => {\r\n            this.touchLock = false;\r\n        }, 20);\r\n    }\r\n\r\n    onMouseOver(): void {\r\n        if (this.instance != null && this.instance.classList.contains(\"noHover\") && !this.touchLock) {\r\n            this.instance.classList.remove(\"noHover\");\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Enable / disable button.\r\n     * @method changeState\r\n     * @param value boolean\r\n     * @return void\r\n     */\r\n    changeState(value: boolean): void {\r\n        if (this.instance != null) {\r\n            if (value) {\r\n                this.instance.classList.remove(HtmlController.DisabledClass);\r\n            } else {\r\n                this.instance.classList.add(HtmlController.DisabledClass);\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no instance\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlButtonElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { BaseActions } from \"../../Channels/Common/Actions/BaseActions\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlLanuageContainerElement extends HtmlContainerElement {\r\n    private _flags: Object = {};\r\n    private _values: Object = {};\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.addValues();\r\n    }\r\n\r\n    addValues(): void {\r\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\r\n        if (this.instance != null && languages != null) {\r\n            for (let i: number = 0; i < languages.length; i++) {\r\n                let flag: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                flag.classList.add(\"flag\");\r\n                flag.classList.add(languages[i]);\r\n                flag.style.display = \"none\";\r\n                flag.setAttribute(\"Lng\", languages[i]);\r\n                flag.onclick = this.onValueClick.bind(this);\r\n                let value: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                value.classList.add(\"value\");\r\n                value.style.display = \"none\";\r\n                value.setAttribute(\"Lng\", languages[i]);\r\n                //value.innerText = languages[i].toUpperCase();\r\n                value.onclick = this.onValueClick.bind(this);\r\n\r\n                if (\r\n                    AppContext.current.getCurrentLanguage() != null &&\r\n                    languages[i] == AppContext.current.getCurrentLanguage()\r\n                ) {\r\n                    flag.style.display = \"block\";\r\n                    value.style.display = \"block\";\r\n                }\r\n\r\n                this._flags[languages[i]] = flag;\r\n                this._values[languages[i]] = value;\r\n                this.instance.appendChild(flag);\r\n                this.instance.appendChild(value);\r\n            }\r\n        }\r\n    }\r\n\r\n    private onValueClick(e: any): void {\r\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Lng\")) {\r\n            PlayList.play(\"SND_Click\");\r\n            let lang: string = e.currentTarget.getAttribute(\"Lng\");\r\n\r\n            if (this._flags != null) {\r\n                for (let key in this._flags) {\r\n                    this._flags[key].style.display = \"none\";\r\n                }\r\n            }\r\n\r\n            if (this._values != null) {\r\n                for (let key in this._values) {\r\n                    this._values[key].style.display = \"none\";\r\n                }\r\n            }\r\n            HtmlController.dispatchUiAction(\"\");\r\n            this.changeLanguage();\r\n        }\r\n    }\r\n\r\n    changeLanguage(): void {\r\n        let actual: string = AppContext.current.getCurrentLanguage();\r\n        let languages: Array<string> = AppContext.current.getAllowedLanguages();\r\n        let next: string = \"\";\r\n\r\n        if (actual != null && languages != null) {\r\n            let index: number = 0;\r\n            for (let i: number = 0; i < languages.length; i++) {\r\n                if (languages[i] === actual) {\r\n                    index = i;\r\n                }\r\n            }\r\n\r\n            if (languages[index + 1] != null) {\r\n                next = languages[index + 1];\r\n            } else {\r\n                next = languages[0];\r\n            }\r\n        }\r\n\r\n        if (this._flags[next] != null) {\r\n            this._flags[next].style.display = \"block\";\r\n        }\r\n        if (this._values[next] != null) {\r\n            this._values[next].style.display = \"block\";\r\n        }\r\n        AppContext.current.setLanguage(next);\r\n    }\r\n\r\n    disable(): void {\r\n        if (this.instance != null) {\r\n            if (!this.instance.classList.contains(\"_disabled\")) {\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlLanguageContainerElement.ts\n **/","import { engineComponent, StringUtils, Utils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"../Elements/HtmlContainerElement\";\r\nimport { HtmlButtonElement } from \"../Elements/HtmlButtonElement\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlSoundContainerElement extends HtmlContainerElement {\r\n    // private _levels: Array<string> = ['0%', '25%', '50%', '100%'];\r\n    private _levels: Array<string> = [\"\", \"\", \"\", \"\"];\r\n    private _levelsClasses: Array<string> = [\"_off\", \"_on1\", \"_on2\", \"_on3\"];\r\n    private _index: number = 3;\r\n\r\n    private _popup: HTMLDivElement;\r\n    private _backgroundSound: HTMLDivElement;\r\n    private _values: Array<HTMLDivElement>;\r\n    private _soundButton: HTMLDivElement;\r\n\r\n    private _height: string;\r\n\r\n    protected block: boolean;\r\n    protected timeout: number;\r\n\r\n    constructor() {\r\n        super();\r\n\r\n        HtmlController.SoundContainer = this;\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this._soundButton = <HTMLDivElement>document.getElementById(\"soundButton\");\r\n\r\n        this._popup = <HTMLDivElement>document.createElement(\"div\");\r\n        this._popup.classList.add(\"display\");\r\n        this._popup.classList.add(\"popupSmall\");\r\n\r\n        if (AppContext.current.isBackgroundMusicEnabled) {\r\n            this._backgroundSound = <HTMLDivElement>document.createElement(\"div\");\r\n            this._backgroundSound.classList.add(\"popupItem\");\r\n            let backgroundSoundChild: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n            backgroundSoundChild.classList.add(\"popupValue\");\r\n            backgroundSoundChild.classList.add(\"bgSound\");\r\n            if (AppContext.current.getBackgroundMusic()) {\r\n                backgroundSoundChild.classList.add(\"_on\");\r\n            } else {\r\n                backgroundSoundChild.classList.add(\"_off\");\r\n                DataManager.BackSoundsPlayingFromGame = false;\r\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n            }\r\n            backgroundSoundChild.onclick = this.onBackgroundClick.bind(this);\r\n            this._backgroundSound.appendChild(backgroundSoundChild);\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            this.instance.appendChild(this._popup);\r\n            if (this._backgroundSound != null) {\r\n                this._popup.appendChild(this._backgroundSound);\r\n            }\r\n            if (AppContext.current.isBackgroundMusicEnabled) {\r\n                this._popup.parentElement.classList.add(\"bgOn\");\r\n            }\r\n        }\r\n\r\n        this.addValues();\r\n\r\n        this.block = true;\r\n        this.createTimeout();\r\n    }\r\n\r\n    addValues(): void {\r\n        if (this._values == null && this._popup != null) {\r\n            this._values = [];\r\n\r\n            for (let i: number = 0; i < this._levels.length; i++) {\r\n                let popupItem: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItem.classList.add(\"popupItem\");\r\n                popupItem.onclick = this.onValueClick.bind(this);\r\n                popupItem.setAttribute(\"Level\", i.toString());\r\n                let popupItemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                popupItemValue.classList.add(\"popupValue\");\r\n                popupItemValue.innerText = this._levels[i];\r\n                popupItem.appendChild(popupItemValue);\r\n\r\n                if (i == 0 && !AppContext.current.isMuteVolumeAllowed) {\r\n                    popupItem.style.display = \"none\";\r\n                }\r\n\r\n                this._values.push(popupItem);\r\n                this._popup.appendChild(popupItem);\r\n            }\r\n            if (!AppContext.current.isMuteVolumeAllowed) {\r\n                if (AppContext.current.isBackgroundMusicEnabled) {\r\n                    this._height = 60 + ((this._levels.length - 1) * 60 + 48) + \"px\";\r\n                } else {\r\n                    this._height = (this._levels.length - 1) * 60 + 48 + \"px\";\r\n                }\r\n            } else {\r\n                if (AppContext.current.isBackgroundMusicEnabled) {\r\n                    this._height = 60 + (this._levels.length * 60 + 48) + \"px\";\r\n                } else {\r\n                    this._height = this._levels.length * 60 + 48 + \"px\";\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private onValueClick(e: any): void {\r\n        if (this.block) {\r\n            return;\r\n        }\r\n\r\n        this.setTimeout();\r\n        if (e != null && e.currentTarget != null && e.currentTarget.hasAttribute(\"Level\")) {\r\n            PlayList.play(\"SND_Click\");\r\n            let level: number = parseFloat(e.currentTarget.getAttribute(\"Level\"));\r\n            if (level === this._index) {\r\n            } else {\r\n                this._index = level;\r\n                if (this._values != null) {\r\n                    for (let i: number = 0; i < this._values.length; i++) {\r\n                        if (this._values[i].hasAttribute(\"Level\")) {\r\n                            if (parseFloat(this._values[i].getAttribute(\"Level\")) === level) {\r\n                                this._values[i].classList.add(\"_active\");\r\n                            } else {\r\n                                this._values[i].classList.remove(\"_active\");\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                AppContext.current.setVolume(level);\r\n            }\r\n        }\r\n        this.changeSoundButton();\r\n    }\r\n\r\n    private onBackgroundClick(e: any): void {\r\n        if (this.block) {\r\n            return;\r\n        }\r\n\r\n        this.setTimeout();\r\n        if (e != null && e.currentTarget != null) {\r\n            PlayList.play(\"SND_Click\");\r\n            if (e.currentTarget.classList.contains(\"_on\")) {\r\n                e.currentTarget.classList.remove(\"_on\");\r\n                if (!e.currentTarget.classList.contains(\"_off\")) {\r\n                    e.currentTarget.classList.add(\"_off\");\r\n                }\r\n                DataManager.BackSoundsPlayingFromGame = false;\r\n                AppContext.current.setBackgroundMusic(false);\r\n                PlayList.stopAllInGroup(\"BackgroundMusic\");\r\n            } else {\r\n                e.currentTarget.classList.remove(\"_off\");\r\n                if (!e.currentTarget.classList.contains(\"_on\")) {\r\n                    e.currentTarget.classList.add(\"_on\");\r\n                }\r\n                DataManager.BackSoundsPlayingFromGame = true;\r\n                AppContext.current.setBackgroundMusic(true);\r\n                PlayList.stopAllInGroup(\"BackgroundMusic\", true);\r\n            }\r\n        }\r\n    }\r\n\r\n    setLevel(level: number): void {\r\n        this._index = level;\r\n        if (this._values != null) {\r\n            for (let i: number = 0; i < this._values.length; i++) {\r\n                if (i === level) {\r\n                    if (!this._values[i].classList.contains(\"_active\")) {\r\n                        this._values[i].classList.add(\"_active\");\r\n                    }\r\n                } else {\r\n                    this._values[i].classList.remove(\"_active\");\r\n                }\r\n            }\r\n        }\r\n        this.changeSoundButton();\r\n    }\r\n\r\n    changeSoundButton(): void {\r\n        if (this._soundButton != null) {\r\n            if (this._levelsClasses[this._index] != null) {\r\n                for (let i: number = 0; i < this._levelsClasses.length; i++) {\r\n                    this._soundButton.classList.remove(this._levelsClasses[i]);\r\n                }\r\n                this._soundButton.classList.add(this._levelsClasses[this._index]);\r\n            }\r\n        }\r\n    }\r\n\r\n    toggle(): void {\r\n        if (this.instance != null) {\r\n            if (this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = false;\r\n                this.setTimeout();\r\n                if (this._height != null) {\r\n                    this.instance.style.height = this._height;\r\n                }\r\n                this.instance.classList.remove(\"_disabled\");\r\n            } else {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    disable(): void {\r\n        if (this.instance != null) {\r\n            if (!this.instance.classList.contains(\"_disabled\")) {\r\n                this.block = true;\r\n                this.clearTimeOut();\r\n                this.instance.removeAttribute(\"style\");\r\n                this.instance.classList.add(\"_disabled\");\r\n            }\r\n        }\r\n    }\r\n\r\n    protected createTimeout(): void {\r\n        this.timeout = null;\r\n    }\r\n\r\n    protected setTimeout(): void {\r\n        this.clearTimeOut();\r\n\r\n        const duration = AppContext.gameConfiguration.SelectorRolloutDuration;\r\n\r\n        if (duration > 0) {\r\n            this.timeout = setTimeout((): void => {\r\n                this.disable();\r\n            }, duration * 1000);\r\n        }\r\n    }\r\n\r\n    protected clearTimeOut(): void {\r\n        if (!Utils.isNullOrUndefined(this.timeout)) {\r\n            clearTimeout(this.timeout);\r\n\r\n            this.timeout = null;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Custom/HtmlSoundContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { HtmlAutoplayItemButtonElement } from \"./HtmlAutoplayItemButtonElement\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlAutoplayButtonElement extends HtmlButtonElement {\r\n    private _simpleAutoplayCounts: Array<HtmlAutoplayItemButtonElement>;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        if (AppContext.gameConfiguration.AutoplayMode === \"basic\") {\r\n            this.createBasicMode();\r\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"simple\") {\r\n            this.createSimpleMode();\r\n        } else if (AppContext.gameConfiguration.AutoplayMode === \"advanced\") {\r\n            this.createAdvancedMode();\r\n        } else {\r\n            this.createBasicMode();\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            this.instance.parentElement.removeChild(this.instance);\r\n        }\r\n    }\r\n\r\n    private createBasicMode(): void {\r\n        this.removeOtherMode(\"simpleAutoplayButton\");\r\n        this.removeOtherMode(\"advancedAutoplayButton\");\r\n    }\r\n\r\n    private createSimpleMode(): void {\r\n        this.removeOtherMode(\"basicAutoplayButton\");\r\n        this.removeOtherMode(\"advancedAutoplayButton\");\r\n\r\n        this._simpleAutoplayCounts = [];\r\n        let holder: HTMLElement = document.getElementById(\"autoplaySelectorHolder\");\r\n        if (holder != null) {\r\n            if (\r\n                AppContext.gameConfiguration.AutoplayCounts != null &&\r\n                AppContext.gameConfiguration.AutoplayCounts.length > 0\r\n            ) {\r\n                AppContext.gameConfiguration.AutoplayCounts.reverse();\r\n                for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n                    let button: HtmlAutoplayItemButtonElement = new HtmlAutoplayItemButtonElement();\r\n                    let text: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                    button.action = \"AUTOPLAY\";\r\n                    button.registerEvents();\r\n                    text.classList.add(\"autoplayCnt\");\r\n                    if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n                        text.innerText = \"∞\";\r\n                        button.autoplayCount = \"∞\";\r\n                    } else {\r\n                        text.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n                        button.autoplayCount = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n                    }\r\n                    button.instance.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\r\n\r\n                    if (button.instance != null) {\r\n                        button.instance.classList.add(\"autoplayItem\");\r\n                        button.instance.appendChild(text);\r\n                        HtmlController.registerActionElement(\"AUTOPLAY\", button);\r\n                        if (holder != null) {\r\n                            holder.appendChild(button.instance);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        // <div CssClass=\"autoplayItem\" Class=\"HtmlAutoplayItemButtonElement\" Action=\"AUTOPLAY\" AUTOPLAY_COUNT=\"10\">\r\n        //     <span CssClass=\"autoplayCnt\" Class=\"HtmlText\">10</span>\r\n        // </div>\r\n    }\r\n\r\n    private createAdvancedMode(): void {\r\n        this.removeOtherMode(\"basicAutoplayButton\");\r\n        this.removeOtherMode(\"simpleAutoplayButton\");\r\n    }\r\n\r\n    private removeOtherMode(cls: string): void {\r\n        var elements: HTMLCollectionOf<Element> = document.getElementsByClassName(cls);\r\n        for (var i: number = 0; i < elements.length; i++) {\r\n            var element: HTMLElement = <HTMLElement>elements[i];\r\n            if (element != null) {\r\n                element.remove();\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayButtonElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlButtonElement } from \"./HtmlButtonElement\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlAutoplayItemButtonElement extends HtmlButtonElement {\r\n    autoplayCount: string = \"∞\";\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        if (node.hasAttribute(\"AUTOPLAY_COUNT\")) {\r\n            this.autoplayCount = node.getAttribute(\"AUTOPLAY_COUNT\");\r\n        }\r\n    }\r\n\r\n    onClick(): void {\r\n        if (this.autoplayCount != null) {\r\n            DataManager.AutoplayCount = this.autoplayCount;\r\n        }\r\n        PlayList.play(\"SND_Click\");\r\n        super.onClick();\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayItemButtonElement.ts\n **/","import { engineComponent, NumberUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { BetManager } from \"../../Managers/BetManager\";\r\nimport { GameData } from \"../../Channels/Common/Datas/GameData\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\nimport { PlayList } from \"../../Components/Sounds/PlayList\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlAutoplayDialogContainerElement extends HtmlContainerElement {\r\n    private _autoplayDialogCounts: Array<HTMLElement> = [];\r\n    private _autoplayDialogLossLimit: Array<HTMLElement> = [];\r\n    private _autoplayDialogWinLimit: Array<HTMLElement> = [];\r\n\r\n    private _lossValueElement: HTMLElement;\r\n    private _winValueElement: HTMLElement;\r\n\r\n    private _button: HTMLElement;\r\n\r\n    private _count: string = \"∞\";\r\n    private _loss: string = \"∞\";\r\n    private _win: string = \"∞\";\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        this.createCounts();\r\n        this.createLossLimits();\r\n        this.createWinLimits();\r\n\r\n        this._lossValueElement = document.getElementById(\"autoplayDialogLossLimitValue\");\r\n        this._winValueElement = document.getElementById(\"autoplayDialogWinLimitValue\");\r\n        this._button = document.getElementById(\"autoplayDialogButton\");\r\n        this._button.onclick = this.runAutoplay.bind(this);\r\n\r\n        this.reset();\r\n    }\r\n\r\n    private createCounts(): void {\r\n        if (HtmlController.ContainerElementsById[\"autoplayDialogCounts\"] != null) {\r\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogCounts\"];\r\n            if (element != null && element.instance != null) {\r\n                if (\r\n                    AppContext.gameConfiguration.AutoplayCounts != null &&\r\n                    AppContext.gameConfiguration.AutoplayCounts.length > 0\r\n                ) {\r\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayCounts.length; i++) {\r\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\r\n                        item.classList.add(\"settingItem\");\r\n                        itemValue.classList.add(\"settingValue\");\r\n                        if (AppContext.gameConfiguration.AutoplayCounts[i] == -1) {\r\n                            itemValue.innerText = \"∞\";\r\n                            item.setAttribute(\"Val\", \"∞\");\r\n                        } else {\r\n                            itemValue.innerText = AppContext.gameConfiguration.AutoplayCounts[i] + \"\";\r\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayCounts[i] + \"\");\r\n                        }\r\n                        item.dataset[\"test\"] = `AUTOPLAY_CNT_${i + 1}`;\r\n                        item.appendChild(itemValue);\r\n                        item.onclick = this.onCountClick.bind(this);\r\n                        element.instance.appendChild(item);\r\n                        this._autoplayDialogCounts.push(item);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private createLossLimits(): void {\r\n        if (HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"] != null) {\r\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogLossLimit\"];\r\n            if (element != null && element.instance != null) {\r\n                if (\r\n                    AppContext.gameConfiguration.AutoplayLossLimit != null &&\r\n                    AppContext.gameConfiguration.AutoplayLossLimit.length > 0\r\n                ) {\r\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplayLossLimit.length; i++) {\r\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\r\n                        item.classList.add(\"settingItem\");\r\n                        itemValue.classList.add(\"settingValue\");\r\n                        if (AppContext.gameConfiguration.AutoplayLossLimit[i] == -1) {\r\n                            itemValue.innerText = \"∞\";\r\n                            item.setAttribute(\"Val\", \"∞\");\r\n                        } else {\r\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\";\r\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplayLossLimit[i] + \"\");\r\n                        }\r\n                        item.dataset[\"test\"] = `AUTOPLAY_LOSS_CNT_${i + 1}`;\r\n                        item.appendChild(itemValue);\r\n                        item.onclick = this.onLossClick.bind(this);\r\n                        element.instance.appendChild(item);\r\n                        this._autoplayDialogLossLimit.push(item);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private createWinLimits(): void {\r\n        if (HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"] != null) {\r\n            let element: HtmlContainerElement = HtmlController.ContainerElementsById[\"autoplayDialogWinLimit\"];\r\n            if (element != null && element.instance != null) {\r\n                if (\r\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit != null &&\r\n                    AppContext.gameConfiguration.AutoplaySingleWinLimit.length > 0\r\n                ) {\r\n                    for (let i: number = 0; i < AppContext.gameConfiguration.AutoplaySingleWinLimit.length; i++) {\r\n                        let item: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n                        let itemValue: HTMLDivElement = <HTMLDivElement>document.createElement(\"span\");\r\n                        item.classList.add(\"settingItem\");\r\n                        itemValue.classList.add(\"settingValue\");\r\n                        if (AppContext.gameConfiguration.AutoplaySingleWinLimit[i] == -1) {\r\n                            itemValue.innerText = \"∞\";\r\n                            item.setAttribute(\"Val\", \"∞\");\r\n                        } else {\r\n                            itemValue.innerText = \"x\" + AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\";\r\n                            item.setAttribute(\"Val\", AppContext.gameConfiguration.AutoplaySingleWinLimit[i] + \"\");\r\n                        }\r\n                        item.dataset[\"test\"] = `AUTOPLAY_WIN_CNT_${i + 1}`;\r\n                        item.appendChild(itemValue);\r\n                        item.onclick = this.onWinClick.bind(this);\r\n                        element.instance.appendChild(item);\r\n                        this._autoplayDialogWinLimit.push(item);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    reset(): void {\r\n        this.resetCounts();\r\n        this.resetLossLimits();\r\n        this.resetWinLimits();\r\n        this.enableCounts();\r\n        if (this._lossValueElement != null) {\r\n            this._lossValueElement.innerText = \"\";\r\n        }\r\n        if (this._winValueElement != null) {\r\n            this._winValueElement.innerText = \"\";\r\n        }\r\n        if (this._button != null && !this._button.classList.contains(\"_disabled\")) {\r\n            this._button.classList.add(\"_disabled\");\r\n        }\r\n        this._count = \"∞\";\r\n        this._loss = \"∞\";\r\n        this._win = \"∞\";\r\n\r\n        DataManager.AutoplayCount = \"∞\";\r\n        DataManager.AutoplayLossLimit = \"∞\";\r\n        DataManager.AutoplayWinLimit = \"∞\";\r\n    }\r\n\r\n    private resetCounts(): void {\r\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\r\n                if (this._autoplayDialogCounts[i].classList.contains(\"_active\")) {\r\n                    this._autoplayDialogCounts[i].classList.remove(\"_active\");\r\n                }\r\n                if (!this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogCounts[i].classList.add(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private resetLossLimits(): void {\r\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_active\")) {\r\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_active\");\r\n                }\r\n                if (!this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogLossLimit[i].classList.add(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private resetWinLimits(): void {\r\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_active\");\r\n                }\r\n                if (!this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogWinLimit[i].classList.add(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private enableCounts(): void {\r\n        if (this._autoplayDialogCounts != null && this._autoplayDialogCounts.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogCounts.length; i++) {\r\n                if (this._autoplayDialogCounts[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogCounts[i].classList.remove(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private enableLossLimits(): void {\r\n        if (this._autoplayDialogLossLimit != null && this._autoplayDialogLossLimit.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogLossLimit.length; i++) {\r\n                if (this._autoplayDialogLossLimit[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogLossLimit[i].classList.remove(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private enableWinLimits(removeNoLimit: boolean = false): void {\r\n        let enabledNoLimit: boolean = true;\r\n        let noLimit: HTMLElement;\r\n\r\n        if (this._autoplayDialogWinLimit != null && this._autoplayDialogWinLimit.length > 0) {\r\n            for (let i: number = 0; i < this._autoplayDialogWinLimit.length; i++) {\r\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_active\")) {\r\n                    enabledNoLimit = false;\r\n                }\r\n\r\n                if (this._autoplayDialogWinLimit[i].getAttribute(\"Val\") == \"∞\") {\r\n                    noLimit = this._autoplayDialogWinLimit[i];\r\n                }\r\n\r\n                if (this._autoplayDialogWinLimit[i].classList.contains(\"_disabled\")) {\r\n                    this._autoplayDialogWinLimit[i].classList.remove(\"_disabled\");\r\n                }\r\n            }\r\n        }\r\n\r\n        if (enabledNoLimit && !removeNoLimit) {\r\n            if (noLimit != null) {\r\n                if (!noLimit.classList.contains(\"_active\")) {\r\n                    noLimit.classList.add(\"_active\");\r\n                    if (this._winValueElement != null) {\r\n                        this._winValueElement.innerText = \"∞\";\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        if (removeNoLimit) {\r\n            if (noLimit != null) {\r\n                if (noLimit.classList.contains(\"_active\")) {\r\n                    noLimit.classList.remove(\"_active\");\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private onCountClick(e: any): void {\r\n        if (\r\n            e != null &&\r\n            e.currentTarget != null &&\r\n            e.currentTarget.hasAttribute(\"Val\") &&\r\n            !e.currentTarget.classList.contains(\"_disabled\")\r\n        ) {\r\n            PlayList.play(\"SND_Click\");\r\n            let val: string = e.currentTarget.getAttribute(\"Val\");\r\n            this.resetCounts();\r\n            this.enableCounts();\r\n            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n                e.currentTarget.classList.add(\"_active\");\r\n            }\r\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n                e.currentTarget.classList.remove(\"_disabled\");\r\n            }\r\n            this._count = val;\r\n            this.enableLossLimits();\r\n            if (document.getElementById(\"autoplayDialogLossLimitView\") != null) {\r\n                document.getElementById(\"autoplayDialogLossLimitView\").scrollIntoView(true);\r\n\r\n                if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n                    document.getElementById(\"screen\").scrollTop = 0;\r\n                    document.getElementById(\"root\").scrollTop = 0;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private onLossClick(e: any): void {\r\n        if (\r\n            e != null &&\r\n            e.currentTarget != null &&\r\n            e.currentTarget.hasAttribute(\"Val\") &&\r\n            !e.currentTarget.classList.contains(\"_disabled\")\r\n        ) {\r\n            PlayList.play(\"SND_Click\");\r\n            let val: string = e.currentTarget.getAttribute(\"Val\");\r\n            if (this._lossValueElement != null) {\r\n                if (val != \"∞\" && BetManager.Bet != null) {\r\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\r\n                    this._lossValueElement.innerText =\r\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\r\n                } else {\r\n                    this._lossValueElement.innerText = \"∞\";\r\n                }\r\n            }\r\n\r\n            this.resetLossLimits();\r\n            this.enableLossLimits();\r\n            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n                e.currentTarget.classList.add(\"_active\");\r\n            }\r\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n                e.currentTarget.classList.remove(\"_disabled\");\r\n            }\r\n            if (this._button != null && this._button.classList.contains(\"_disabled\")) {\r\n                this._button.classList.remove(\"_disabled\");\r\n            }\r\n            this._loss = val;\r\n            this.enableWinLimits();\r\n            if (document.getElementById(\"autoplayDialogWinLimitView\") != null) {\r\n                document.getElementById(\"autoplayDialogWinLimitView\").scrollIntoView(true);\r\n            }\r\n\r\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n                document.getElementById(\"screen\").scrollTop = 0;\r\n                document.getElementById(\"root\").scrollTop = 0;\r\n            }\r\n        }\r\n    }\r\n\r\n    private onWinClick(e: any): void {\r\n        if (\r\n            e != null &&\r\n            e.currentTarget != null &&\r\n            e.currentTarget.hasAttribute(\"Val\") &&\r\n            !e.currentTarget.classList.contains(\"_disabled\")\r\n        ) {\r\n            PlayList.play(\"SND_Click\");\r\n            let val: string = e.currentTarget.getAttribute(\"Val\");\r\n            if (this._winValueElement != null) {\r\n                if (val != \"∞\" && BetManager.Bet != null) {\r\n                    let calculatedValue: string = NumberUtils.multiply(val, BetManager.Bet);\r\n                    this._winValueElement.innerText =\r\n                        calculatedValue + \" \" + DataManager.getDataById(GameData.DataCurrency);\r\n                } else {\r\n                    this._winValueElement.innerText = \"∞\";\r\n                }\r\n            }\r\n            this.resetWinLimits();\r\n            this.enableWinLimits(true);\r\n            if (!e.currentTarget.classList.contains(\"_active\")) {\r\n                e.currentTarget.classList.add(\"_active\");\r\n            }\r\n            if (e.currentTarget.classList.contains(\"_disabled\")) {\r\n                e.currentTarget.classList.remove(\"_disabled\");\r\n            }\r\n            this._win = val;\r\n\r\n            if (AppContext.gameDefinition.ClientHostType === \"Mobile\") {\r\n                if (document.getElementById(\"autoplayDialogButton\") != null) {\r\n                    document.getElementById(\"autoplayDialogButton\").scrollIntoView(true);\r\n                    document.getElementById(\"screen\").scrollTop = 0;\r\n                    document.getElementById(\"root\").scrollTop = 0;\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private runAutoplay(e: any): void {\r\n        if (e != null && e.currentTarget != null && !e.currentTarget.classList.contains(\"_disabled\")) {\r\n            if (document.getElementById(\"autoPlayDialogTop\") != null) {\r\n                document.getElementById(\"autoPlayDialogTop\").scrollTop = 0;\r\n            }\r\n            if (this._count != null) {\r\n                DataManager.AutoplayCount = this._count;\r\n            }\r\n            if (this._loss != null && BetManager.Bet != null) {\r\n                if (this._loss == \"∞\") {\r\n                    DataManager.AutoplayLossLimit = this._loss;\r\n                } else {\r\n                    DataManager.AutoplayLossLimit = NumberUtils.multiply(this._loss, BetManager.Bet);\r\n                }\r\n            }\r\n            if (this._win != null && BetManager.Bet != null) {\r\n                if (this._win == \"∞\") {\r\n                    DataManager.AutoplayWinLimit = this._win;\r\n                } else {\r\n                    DataManager.AutoplayWinLimit = NumberUtils.multiply(this._win, BetManager.Bet);\r\n                }\r\n            }\r\n            HtmlController.dispatchAction(\"AUTOPLAY\");\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlAutoplayDialogContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlElement } from \"./HtmlElement\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n/**\r\n * HtmlCanvasElement is used for replacing existing canvas to right layer in dom structure.\r\n * Example:\r\n * <HtmlCanvasElement CanvasId=\"canvas\" Class=\"HtmlCanvasElement\" />\r\n *\r\n * @class HtmlCanvasElement\r\n * @extends HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlCanvasElement extends HtmlElement {\r\n    constructor() {\r\n        // dont create instance. Instance will be attach with id from node\r\n        super(\"\");\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        /*\r\n         * CanvasId is id in html document of targeting canvas.\r\n         * @property CanvasId\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"CanvasId\")) {\r\n            this.instance = document.getElementById(node.getAttribute(\"CanvasId\"));\r\n            if (this.instance == null) {\r\n                if (DEBUG) {\r\n                    this.log(\"ERROR no element with id: \" + node.getAttribute(\"CanvasId\"));\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no CanvasId\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCanvasElement.ts\n **/","import { HtmlButtonElement } from \"./HtmlButtonElement\";\r\nimport { engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\r\nimport { HtmlController } from \"../HtmlController\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlCheckboxElement extends HtmlButtonElement {\r\n    private checkbox: HTMLInputElement = null;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n        this.createCheckBox();\r\n    }\r\n\r\n    private createCheckBox(): void {\r\n        this.checkbox = <HTMLInputElement>document.createElement(\"input\");\r\n        this.checkbox.type = \"checkbox\";\r\n        this.checkbox.classList.add(\"checkbox\");\r\n\r\n        if (this.instance != null) {\r\n            this.instance.appendChild(this.checkbox);\r\n        }\r\n\r\n        this.instance.classList.add(\"checkboxButton\");\r\n    }\r\n\r\n    setText(value?: string): void {\r\n        if (value === undefined || value === null) {\r\n            this.checkbox.checked = !this.checkbox.checked;\r\n            return;\r\n        }\r\n        if (value == \"true\") {\r\n            if (this.checkbox.checked) {\r\n                return;\r\n            }\r\n            this.checkbox.checked = true;\r\n        } else {\r\n            if (!this.checkbox.checked) {\r\n                return;\r\n            }\r\n            this.checkbox.checked = false;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCheckboxElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlController } from \"../HtmlController\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlContainerElement } from \"./HtmlContainerElement\";\r\nimport { AppContext } from \"../../../Common/AppContext\";\r\nimport { DataManager } from \"../../Managers/DataManager\";\r\n\r\n/**\r\n *\r\n * @class HtmlCustomContainerElement\r\n * @extends HtmlContainerElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlCustomContainerElement extends HtmlContainerElement {\r\n    private _withGamble: HTMLElement;\r\n    private _withoutGamble: HTMLElement;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @return void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n    }\r\n\r\n    changeState(value: boolean): void {\r\n        if (this._withGamble == null) {\r\n            this._withGamble = document.getElementById(\"withGamble\");\r\n        }\r\n        if (this._withoutGamble == null) {\r\n            this._withoutGamble = document.getElementById(\"withoutGamble\");\r\n        }\r\n\r\n        if (this.instance != null) {\r\n            if (value && DataManager.Autoplay) {\r\n                this.instance.classList.remove(HtmlController.DisabledClass);\r\n                if (AppContext.gameDefinition.Gamble) {\r\n                    if (this._withGamble != null) {\r\n                        this._withGamble.style.display = \"block\";\r\n                    }\r\n                    if (this._withoutGamble != null) {\r\n                        this._withoutGamble.style.display = \"none\";\r\n                    }\r\n                } else {\r\n                    if (this._withGamble != null) {\r\n                        this._withGamble.style.display = \"none\";\r\n                    }\r\n                    if (this._withoutGamble != null) {\r\n                        this._withoutGamble.style.display = \"block\";\r\n                    }\r\n                }\r\n            } else {\r\n                if (!this.instance.classList.contains(HtmlController.DisabledClass)) {\r\n                    this.instance.classList.add(HtmlController.DisabledClass);\r\n                }\r\n            }\r\n        } else {\r\n            if (DEBUG) {\r\n                this.log(\"ERROR no instance\");\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlCustomContainerElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlElement } from \"./HtmlElement\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n/**\r\n * HtmlDataSliderElement is used for data representing in bar or slider.\r\n * @class HtmlDataSliderElement\r\n * @extends HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlDataSliderElement extends HtmlElement {\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n    }\r\n\r\n    /**\r\n     * Set text or data for this element.\r\n     * @method setText\r\n     * @param text string\r\n     * @return void\r\n     */\r\n    setText(value?: string): void {\r\n        if (value != null) {\r\n            var parsedValue: Array<string> = value.split(\"/\");\r\n            if (this.instance != null && parsedValue.length === 2) {\r\n                this.instance.style.width = (parseInt(parsedValue[0]) / parseInt(parsedValue[1])) * 100 + \"%\";\r\n            }\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlDataSliderElement.ts\n **/","import { engineComponent, StringUtils } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\nimport { HtmlElement } from \"./HtmlElement\";\r\nimport { Languages } from \"../../Utils/Languages\";\r\nimport { HtmlController } from \"../HtmlController\";\r\n\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlLabelElement extends HtmlElement {\r\n    for: string;\r\n    text: string;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        if (node.hasAttribute(\"For\")) {\r\n            this.for = node.getAttribute(\"For\");\r\n        }\r\n\r\n        this.createLabel();\r\n\r\n        if (this.instance != null) {\r\n            this.instance.parentElement.removeChild(this.instance);\r\n        }\r\n    }\r\n\r\n    private createLabel(): void {\r\n        let holder = this.instance.parentElement;\r\n        let toggleSwitch: HTMLDivElement = <HTMLDivElement>document.createElement(\"div\");\r\n        let label: HTMLLabelElement = <HTMLLabelElement>document.createElement(\"label\");\r\n        toggleSwitch.classList.add(\"toggleSwitch\");\r\n        label.htmlFor = this.for;\r\n        label.innerHTML = this.instance.innerHTML;\r\n        toggleSwitch.appendChild(label);\r\n\r\n        if (this.instance != null) {\r\n            holder.firstChild.appendChild(toggleSwitch);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlLabelElement.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlElement } from \"./HtmlElement\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n/**\r\n * The html text is used for render text in html.\r\n * Example:\r\n *   <span Class=\"HtmlText\">Text</span>\r\n *\r\n * @class HtmlText\r\n * @extends HtmlElement\r\n */\r\n@engineComponent(ComponentTypes.HtmlElement)\r\nexport class HtmlText extends HtmlElement {\r\n    private _prefix: string;\r\n\r\n    constructor() {\r\n        super(\"\");\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    create(node: Element): void {\r\n        this.instance = document.createElement(node.nodeName);\r\n\r\n        if (node.textContent != null) {\r\n            this.instance.textContent = node.textContent;\r\n        }\r\n\r\n        if (node.hasAttribute(\"Prefix\")) {\r\n            this._prefix = node.getAttribute(\"Prefix\");\r\n        }\r\n\r\n        /*\r\n         * Test is html data attribute for automated testing support.\r\n         * @property Test\r\n         * @type string\r\n         * @default null\r\n         */\r\n        if (node.hasAttribute(\"Test\")) {\r\n            this.instance.dataset[\"test\"] = node.getAttribute(\"Test\");\r\n        }\r\n\r\n        super.create(node);\r\n    }\r\n\r\n    setText(value?: string): void {\r\n        super.setText(value);\r\n\r\n        if (this._prefix != null && this.instance.innerHTML != null && this.instance.innerHTML != \"\") {\r\n            this.instance.innerHTML = \"+\" + this.instance.innerHTML;\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Elements/HtmlText.ts\n **/","import { engineComponent } from \"neo-common\";\r\nimport { HtmlStyle } from \"./HtmlStyle\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n/**\r\n * HtmlContainerStyle only holds xml node for html container elements.\r\n * Example:\r\n *   <HtmlContainerStyle Class=\"HtmlContainerStyle\">\r\n *       <Child1 />\r\n *       <Child1 />\r\n *       ...\r\n *   </HtmlContainerStyle>\r\n * @class HtmlContainerStyle\r\n */\r\n@engineComponent(ComponentTypes.HtmlStyle)\r\nexport class HtmlContainerStyle extends HtmlStyle {\r\n    node: Element;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    create(node: Element): void {\r\n        super.create(node);\r\n\r\n        // store node for container elements\r\n        this.node = node;\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlContainerStyle.ts\n **/","import { Logger, engineComponent } from \"neo-common\";\r\nimport { ComponentTypes } from \"../../Components/ComponentTypes\";\r\n\r\n/**\r\n * HtmlStyle holds basic properties for all kind of html styles.\r\n * @class HtmlStyle\r\n */\r\n@engineComponent(ComponentTypes.HtmlStyle)\r\nexport class HtmlStyle {\r\n    /**\r\n     * Get attributes from xml and set up supported properties.\r\n     * @method create\r\n     * @param node is Element from xml\r\n     * @retutn void\r\n     */\r\n    create(node: Element): void {}\r\n\r\n    /**\r\n     * Trace to browser console.\r\n     * @method log\r\n     * @param s string\r\n     * @retutn void\r\n     */\r\n    protected log(s: string): void {\r\n        if (DEBUG) {\r\n            var compName = (this as any).__componentName__;\r\n            Logger.debugGroup(compName, s);\r\n        }\r\n    }\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/HTMLComponents/Styles/HtmlStyle.ts\n **/","console.log(\"pixiInitialize\");\r\n// TODO device manager\r\nvar ios = !!navigator.platform && /iPad|iPhone|iPod|MacIntel/.test(navigator.platform);\r\nif (ios) {\r\n    PIXI.settings.PRECISION = PIXI.PRECISION.HIGH;\r\n}\r\nPIXI.settings.GC_MODE = PIXI.GC_MODES.AUTO;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./Engine/Game/PixiSettings.ts\n **/"],"sourceRoot":""}