1 line
1.2 MiB
1 line
1.2 MiB
{"version":3,"sources":["../runner/plugins/content/accessibility/focusOnFirstField.js","../runner/plugins/content/accessibility/jumplinks/helpers.js","../runner/plugins/content/accessibility/jumplinks/jumplinks.js","../runner/helpers/map.js","../runner/helpers/isReviewPanelEnabled.js","../runner/plugins/content/accessibility/jumplinks/shortcuts.js","../runner/plugins/content/accessibility/jumplinks/plugin.js","../runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation.js","../runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks.js","../runner/plugins/content/accessibility/keyNavigation/strategies/index.js","../runner/plugins/content/accessibility/keyNavigation/strategiesManager.js","../runner/plugins/content/accessibility/keyNavigation/helpers.js","../runner/plugins/content/accessibility/keyNavigation/modes/defaultMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/linearMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/nativeMode.js","../runner/plugins/content/accessibility/keyNavigation/modes/index.js","../runner/plugins/content/accessibility/keyNavigation/modesManager.js","../runner/plugins/content/accessibility/keyNavigation/keyNavigation.js","css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation","../runner/plugins/content/accessibility/keyNavigation/plugin.js","../runner/plugins/content/accessibility/mainLandmark/header.js","../runner/plugins/content/dialog/dialog.js","../runner/plugins/content/dialog/exitMessages.js","../runner/plugins/content/dialog/itemAlertMessage.js","../runner/helpers/navigation.js","../runner/plugins/content/dialog/itemInlineMessage.js","../runner/plugins/content/feedback/feedback.js","../runner/plugins/content/itemScrolling/itemScrolling.js","../runner/plugins/content/loading/loading.js","../runner/plugins/content/modalFeedback/modalFeedback.js","../runner/plugins/content/overlay/overlay.js","../runner/plugins/content/responsiveness/collapser.js","../runner/plugins/content/rubricBlock/rubricBlock.js","../runner/plugins/controls/connectivity/connectivity.js","../runner/plugins/controls/connectivity/pauseOnError.js","../runner/plugins/controls/duration/duration.js","../runner/plugins/controls/progressbar/progress.js","../runner/plugins/controls/progressbar/renderer/percentage.js","../runner/plugins/controls/progressbar/renderer/position.js","../runner/plugins/controls/progressbar/progressbar.js","../runner/plugins/controls/testState/testState.js","../runner/helpers/getTimerMessage.js","../runner/plugins/controls/timer/component/css/countdown!css","../runner/plugins/controls/timer/component/countdown.js","../runner/plugins/controls/timer/component/css/timerbox!css","../runner/plugins/controls/timer/component/timerbox.js","../runner/plugins/controls/timer/strategy/enforcedStay.js","../runner/plugins/controls/timer/strategy/extraTime.js","../runner/plugins/controls/timer/strategy/guidedNavigation.js","../runner/plugins/controls/timer/strategy/timeout.js","../runner/helpers/currentItem.js","../runner/helpers/stats.js","../runner/helpers/messages.js","../runner/config/states.js","../runner/plugins/controls/timer/strategy/warnSectionLeaving.js","../runner/plugins/controls/timer/strategy/strategyHandler.js","../runner/plugins/controls/timer/timers.js","../runner/plugins/controls/timer/plugin.js","../runner/plugins/controls/title/title.js","../runner/plugins/controls/trace/itemTraceVariables.js","../runner/plugins/navigation/allowSkipping.js","../runner/plugins/navigation/next/nextWarningHelper.js","../runner/plugins/navigation/next.js","../runner/plugins/navigation/next/dialogConfirmNext.js","../runner/plugins/navigation/next/linearNextItemWarning.js","../runner/plugins/navigation/nextSection.js","../runner/plugins/navigation/previous.js","../runner/plugins/navigation/review/navigator.js","../runner/plugins/navigation/review/review.js","../runner/plugins/navigation/skip.js","../runner/plugins/navigation/validateResponses.js","../runner/plugins/navigation/warnBeforeLeaving.js","../runner/plugins/security/disableRightClick.js","../runner/plugins/tools/answerElimination/eliminator.js","../runner/plugins/tools/answerMasking/answerMasking.js","../runner/plugins/tools/answerMasking/plugin.js","../runner/plugins/tools/apipTextToSpeech/textToSpeech.js","../runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider.js","../runner/plugins/tools/apipTextToSpeech/plugin.js","../runner/plugins/tools/areaMasking/mask.js","../runner/plugins/tools/areaMasking/areaMasking.js","../runner/plugins/tools/calculator.js","../runner/plugins/tools/comment/comment.js","../runner/plugins/tools/documentViewer/documentViewer.js","../runner/plugins/tools/highlighter/highlighter.js","../runner/plugins/tools/highlighter/collection.js","../runner/plugins/tools/highlighter/plugin.js","../runner/plugins/tools/itemThemeSwitcher/itemThemeSwitcher.js","../runner/plugins/tools/lineReader/compoundMask.js","../runner/plugins/tools/lineReader/plugin.js","../runner/plugins/tools/magnifier/magnifierPanel.js","../runner/plugins/tools/magnifier/magnifier.js","../runner/plugins/tools/zoom.js","onLayerEnd0.js","module-create.js"],"names":[],"mappings":"uSAAA,MAAA,CAAA,mEAAA,CAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,QAAA,CAAA,CAAA,aA6BA,QAAA,CAAA,WAAA,EAAA,CACA,MAAA,kBAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CACA,CA7BA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAqCA,GAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,mBADA,CAMA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CAOA,WAAA,EARA,EASA,KAAA,aAAA,GAAA,KAAA,CAAA,YAAA,CAAA,UAAA,IACA,CAAA,MAAA,CAAA,IAAA,CAAA,aAAA,GAAA,cAAA,GAAA,IAAA,CAAA,eAAA,EAAA,IAAA,CAAA,yBAAA,EAAA,GAAA,CAAA,8DAAA,EAAA,KAAA,EADA,CAEA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,MAAA,CAFA,CAIA,IAAA,CAAA,MAJA,CAKA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,EAAA,OAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EACA,CAFA,CAEA,GAFA,CALA,CASA,MAAA,CAAA,KAAA,EAEA,CAXA,CAaA,CA5BA,CAAA,CAAA,CA+BA,MAAA,CAAA,iBAEA,CAtEA,C,CCAA,MAAA,CAAA,mEAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,SAAA,OAAA,CAAA,EAAA,CAAA,CAAA,aAEA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,IAkEA,CAAA,aAAA,CAAA,SAAA,IAAA,CAAA,OACA,CAAA,IAAA,CAAA,OADA,CAEA,EAAA,CAAA,oBAAA,CAFA,CAKA,IAAA,CAAA,QALA,CAMA,EAAA,CAAA,UAAA,CANA,CASA,IAAA,CAAA,MATA,CAUA,EAAA,CAAA,cAAA,CAVA,CAaA,EAAA,CAAA,UAAA,CACA,CAhFA,CA6FA,OAAA,CAAA,aAAA,CAAA,aA7FA,CA8FA,OAAA,CAAA,qBAAA,CA5DA,SAAA,MAAA,CAAA,CACA,MAAA,CACA,GAAA,CAAA,SAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,YAAA,EACA,CAHA,CAKA,GAAA,CAAA,QAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,YAAA,GAAA,IAAA,CAAA,kBAAA,EAAA,KAAA,EACA,CAPA,CASA,GAAA,CAAA,UAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,iBAAA,GAAA,IAAA,CAAA,yBAAA,EAAA,KAAA,EACA,CAXA,CAaA,GAAA,CAAA,OAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,cAAA,GAAA,IAAA,CAAA,yBAAA,EAAA,KAAA,EACA,CAfA,CAiBA,GAAA,CAAA,UAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,YAAA,GAAA,IAAA,CAAA,yBAAA,EAAA,KAAA,EACA,CAnBA,CAsBA,CAzDA,CA+FA,OAAA,CAAA,mBAAA,CANA,SAAA,UAAA,CAAA,CACA,MAAA,CAAA,UAAA,CAAA,aAAA,GAAA,YAAA,GAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,CAAA,SAAA,CACA,CA3FA,CAiGA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,KAAA,GAAA,CAAA,CAEA,CAnGA,C,CCAA,MAAA,CAAA,qEAAA,CAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,aAiDA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAgCA,QAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,CAIA,GAAA,CAAA,YAAA,CAAA,SAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CA0BA,CAAA,CAAA,OAAA,CAtBA,CAAA,CACA,QAAA,CAAA,uBADA,CAEA,SAAA,CAAA,MAFA,CAGA,UAAA,CAAA,UAHA,CAAA,CAIA,CACA,QAAA,CAAA,wBADA,CAEA,SAAA,CAAA,MAFA,CAGA,UAAA,CAAA,YAHA,CAJA,CAQA,CACA,QAAA,CAAA,qBADA,CAEA,SAAA,CAAA,MAFA,CAGA,UAAA,CAAA,SAHA,CARA,CAYA,CACA,QAAA,CAAA,wBADA,CAEA,SAAA,CAAA,MAFA,CAGA,UAAA,CAAA,YAHA,CAZA,CAgBA,CACA,QAAA,CAAA,uBADA,CAEA,SAAA,CAAA,WAFA,CAGA,UAAA,CAAA,WAHA,CAhBA,CAsBA,CAAA,SAAA,eAAA,CAAA,IACA,CAAA,KAAA,CAAA,KAAA,CAAA,UAAA,GAAA,IAAA,CAAA,eAAA,CAAA,QAAA,CADA,CAGA,UAAA,CAAA,UAAA,CACA,KAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CADA,CAGA,KAAA,CAAA,UAAA,GAAA,IAAA,CAAA,QAAA,EAAA,IAAA,EACA,CAPA,CASA,KATA,GAUA,KAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CAVA,CAWA,KAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CACA,CAAA,EAAA,CAAA,EAAA,CAEA,CAAA,QAAA,CAAA,KAAA,CAAA,OAAA,CAHA,EAIA,UAAA,EAEA,CANA,CAXA,CAmBA,CAnBA,CAoBA,CA9CA,CAAA,CAqDA,MANA,CAAA,YAAA,CAAA,WAAA,CAAA,YAAA,CAMA,CAJA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,YAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAFA,CAIA,CAAA,YACA,CA5IA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,IAMA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAsCA,MA9BA,CAAA,MAAA,EAAA,8CACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,CAAA,OAAA,CAAA,EADA,CAEA,wHAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EAHA,CAIA,MAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EALA,CAMA,KAwBA,EAvBA,MAAA,CAAA,OAAA,CAAA,cAuBA,EAvBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAuBA,EAtBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,cAsBA,CAtBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAsBA,EArBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,yIADA,CAEA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EAFA,CAGA,MAHA,CAIA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,EAJA,CAKA,sIALA,CAMA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EANA,CAOA,MAPA,CAQA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,EARA,CASA,mEAYA,CAXA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,oBAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAzBA,UAAA,CAGA,MAAA,QACA,CAqBA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAWA,EAVA,MAAA,EAAA,CAAA,GAAA,MAUA,IAVA,MAAA,EAAA,MAUA,EATA,MAAA,EAAA,2EACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EADA,CAEA,MAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,2BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,2BAAA,CAAA,OAAA,CAAA,EAHA,CAIA,wIAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EALA,CAMA,MANA,CAOA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,EAPA,CAQA,mDACA,CAAA,MACA,CA1CA,CANA,CA2EA,QAAA,CAAA,EA3EA,CAgJA,MAAA,CAAA,gBAEA,CAlJA,C,CCAA,MAAA,CAAA,+BAAA,CAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,aAoCA,QAAA,CAAA,aAAA,EAAA,CACA,MAAA,CACA,SAAA,CAAA,CADA,CAEA,QAAA,CAAA,CAFA,CAGA,OAAA,CAAA,CAHA,CAIA,MAAA,CAAA,CAJA,CAKA,KAAA,CAAA,CALA,CAMA,eAAA,CAAA,CANA,CAQA,CA3CA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAgvBA,MA7rBA,CAMA,QAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,KACA,CARA,CAeA,QAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,KACA,CAjBA,CAwBA,WAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,EADA,CAaA,MAVA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAEA,QAHA,EAIA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,OACA,CAFA,CAIA,CARA,CAUA,CAAA,MACA,CAvCA,CA8CA,aAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,EADA,CAqBA,MAlBA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAEA,QAHA,EAIA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,OAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAEA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,IAAA,CAAA,MADA,GAEA,MAAA,CAAA,IAFA,CAIA,CAJA,CAKA,CACA,CAVA,CAYA,CAhBA,CAkBA,CAAA,MACA,CArEA,CA6EA,eAAA,CAAA,SAAA,GAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,WAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,EADA,CAEA,OAAA,GAFA,CAcA,MAVA,CAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,OADA,GAEA,MAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,OAFA,EAKA,OAAA,CAAA,EAAA,GAAA,SALA,GAMA,OAAA,GANA,CAQA,CARA,CAUA,CAAA,MACA,CA7FA,CAqGA,OAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,KAAA,EAAA,KAAA,CAAA,QAAA,CACA,CAxGA,CAgHA,OAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,KAAA,EAAA,KAAA,CAAA,QAAA,CACA,CAnHA,CA2HA,UAAA,CAAA,SAAA,GAAA,CAAA,WAAA,CAAA,IACA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CADA,CAEA,OAAA,CAAA,IAFA,CAaA,MATA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAEA,GAAA,QAAA,EAAA,QAAA,CAAA,WAAA,CAAA,CAEA,MADA,CAAA,OAAA,CAAA,QAAA,CAAA,WAAA,CACA,GAEA,CAPA,CASA,CAAA,OACA,CAzIA,CAiJA,OAAA,CAAA,SAAA,GAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,CAAA,CACA,UAAA,CAAA,cADA,CAAA,CAAA,CAIA,MAAA,MAAA,SAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAAA,CACA,CAvJA,CA+JA,iBAAA,CAAA,SAAA,GAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,cAAA,CAAA,CADA,MAGA,CAAA,IAAA,EAAA,KAAA,CAAA,OAAA,CAAA,IAAA,CAAA,UAAA,CAHA,CAIA,IAAA,CAAA,UAJA,CAOA,EACA,CAvKA,CAiLA,eAAA,CAAA,SAAA,GAAA,CAAA,cAAA,CAAA,QAAA,CAAA,IACA,CAAA,UAAA,IAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CADA,CAEA,SAAA,CAAA,eAFA,CAGA,UAAA,CAAA,KAAA,iBAAA,CAAA,GAAA,CAAA,cAAA,CAHA,CAKA,GAAA,CAAA,QAAA,EAAA,CAAA,QAAA,CAAA,MAAA,CACA,SAGA,GAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAEA,GAAA,UAAA,CACA,SAGA,GAAA,UAAA,CAAA,CAEA,GAAA,CAAA,QAAA,CAAA,UAAA,CAAA,SAAA,CAAA,EAAA,QAAA,CAAA,QAAA,CAAA,GAAA,MAAA,CAAA,SAAA,EAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CACA,SAIA,GAAA,CAAA,SAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,SAAA,CAAA,EAAA,EAAA,OAAA,CAAA,SAAA,CAAA,EAAA,EAAA,WAAA,EACA,CAFA,CAIA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,SAAA,YAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,YAAA,CAAA,GAAA,SAAA,CAAA,QAAA,CACA,CAFA,CAGA,CAEA,QACA,CAjNA,CAwNA,YAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,KACA,CA1NA,CAkOA,YAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,IAAA,EAAA,IAAA,CAAA,KACA,CArOA,CA6OA,eAAA,CAAA,SAAA,GAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,UAAA,CAAA,GAAA,CAAA,WAAA,CAAA,CACA,MAAA,CAAA,OAAA,EAAA,OAAA,CAAA,KACA,CAhPA,CAyPA,aAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAEA,OAAA,KAAA,EACA,IAAA,SAAA,CACA,IAAA,aAAA,CACA,MAAA,MAAA,eAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,OAAA,CAAA,CAEA,IAAA,MAAA,CACA,IAAA,UAAA,CACA,MAAA,MAAA,YAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAAA,CAIA,IAAA,8BAAA,CACA,IACA,CAAA,SAAA,CAAA,KAAA,YAAA,CAAA,GAAA,CADA,CAGA,aAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAHA,CAIA,mBAAA,CAAA,aAAA,CAAA,QAJA,CAKA,mBAAA,CAAA,aAAA,CAAA,QALA,CAOA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,EAAA,MAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CACA,MAAA,CAAA,YAAA,CAAA,mBACA,CAHA,EAGA,IAHA,CAGA,SAAA,CAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,CACA,CALA,CAPA,CAcA,eAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CACA,MAAA,CAAA,QACA,CAHA,CAdA,CAmBA,GAAA,CAAA,CAAA,GAAA,eAAA,CACA,MAAA,CAAA,SAAA,CApBA,GAwBA,CAAA,iBAAA,CAAA,KAAA,CAAA,KAAA,CAAA,eAAA,CAxBA,CAyBA,oCAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,KAAA,CAAA,KAAA,CACA,SAAA,CAAA,WAAA,CAAA,SADA,CAEA,QAAA,CAAA,WAAA,CAAA,QAFA,CAGA,MAAA,CAAA,GAAA,EAAA,SAAA,CAAA,QAAA,CACA,CALA,CAKA,CALA,CAzBA,CA+BA,kCAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,CAAA,OAAA,CACA,MAAA,CAAA,GAAA,CAAA,OACA,CAHA,CAGA,CAHA,CA/BA,CAmCA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CACA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,oCADA,CAEA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,kCAFA,CAAA,CAIA,CAEA,QACA,IAAA,MAAA,CACA,MAAA,MAAA,YAAA,CAAA,GAAA,CAAA,CAvDA,CAyDA,CArTA,CA8TA,WAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAEA,CAAA,QAAA,CAAA,CAAA,CAAA,SAAA,CAAA,GAAA,EAAA,EAAA,CAFA,CAKA,IAAA,CAAA,KAAA,OAAA,CAAA,QAAA,CAAA,QAAA,CALA,CAMA,IAAA,CAAA,KAAA,OAAA,CAAA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CANA,CAOA,OAAA,CAAA,KAAA,UAAA,CAAA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,OAAA,CAPA,CAoCA,MA3BA,CAAA,KAAA,EAAA,MAAA,GAAA,KA2BA,GA1BA,QAAA,CAAA,KAAA,CAAA,EA0BA,CAxBA,IAwBA,GAvBA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,EAAA,IAuBA,GAlBA,IAAA,GAAA,SAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KAAA,CAkBA,GAjBA,IAAA,CAAA,QAAA,CAAA,EAiBA,CAfA,OAeA,GAdA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,EAAA,OAcA,GATA,OASA,GARA,OAAA,CAAA,KAAA,CAAA,KAAA,gBAAA,CAAA,OAAA,CAAA,KAAA,CAQA,EALA,IAKA,GAJA,IAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAIA,EADA,QAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,QAAA,CAAA,KAAA,CACA,CAAA,QACA,CAnWA,CA4WA,sBAAA,CAAA,SAAA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,IAEA,CAAA,QAAA,CAAA,CAAA,CAAA,SAAA,CAAA,GAAA,EAAA,EAAA,CAFA,CAIA,IAJA,CAKA,OALA,CA2CA,MApCA,CAAA,OAAA,EAAA,OAAA,CAAA,UAoCA,GAnCA,IAAA,CAAA,KAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,UAAA,CAmCA,EAhCA,OAAA,EAAA,OAAA,CAAA,SAgCA,GA/BA,OAAA,CAAA,KAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CA+BA,EA3BA,KAAA,EAAA,MAAA,GAAA,KA2BA,GA1BA,QAAA,CAAA,KAAA,CAAA,EA0BA,CAxBA,IAwBA,GAvBA,QAAA,CAAA,KAAA,CAAA,OAAA,CAAA,UAAA,EAAA,IAuBA,GAlBA,IAAA,GAAA,SAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KAAA,CAkBA,GAjBA,IAAA,CAAA,QAAA,CAAA,EAiBA,CAfA,OAeA,GAdA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,EAAA,OAcA,GATA,OASA,GARA,OAAA,CAAA,KAAA,CAAA,KAAA,gBAAA,CAAA,OAAA,CAAA,KAAA,CAQA,EALA,IAKA,GAJA,IAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAIA,EADA,QAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,QAAA,CAAA,KAAA,CACA,CAAA,QACA,CAxZA,CAgaA,WAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CACA,MAAA,MAAA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CACA,CAnaA,CA2aA,cAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,IACA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CADA,CAEA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAFA,CAGA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAHA,CAIA,MAAA,CAAA,QAAA,EAAA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,OAAA,CACA,CAhbA,CAwbA,SAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,IACA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CADA,CAEA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAFA,CAGA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAHA,CAIA,OAAA,CAAA,QAAA,EAAA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,OAAA,CAJA,CAKA,KAAA,CAAA,OAAA,EAAA,OAAA,CAAA,KALA,CAMA,MAAA,CAAA,KAAA,EAAA,KAAA,CAAA,IAAA,EAAA,IAAA,CAAA,UAAA,CACA,CA/bA,CAucA,iBAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAQA,MALA,CAAA,IAKA,CANA,CAAA,CAAA,QAAA,CAAA,QAAA,CAMA,CALA,KAAA,SAAA,CAAA,GAAA,CAAA,QAAA,CAKA,CAHA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CAGA,CAAA,IAAA,EAAA,IAAA,CAAA,EACA,CAjdA,CAydA,IAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CAWA,MAVA,CAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAUA,EATA,CAAA,CAAA,OAAA,CAAA,GAAA,EAAA,GAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,CAAA,CAAA,OAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,CAAA,CAAA,OAAA,CAAA,OAAA,EAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CACA,CAFA,CAGA,CAJA,CAKA,CANA,CASA,CAAA,GACA,CAreA,CA6eA,eAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,IACA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,QAAA,CADA,CAEA,IAAA,CAAA,KAAA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,CAFA,CAGA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAHA,CAIA,OAAA,CAAA,QAAA,EAAA,QAAA,CAAA,IAAA,EAAA,IAAA,CAAA,OAAA,CAJA,CAkBA,MAZA,CAAA,OAYA,GAXA,OAAA,CAAA,KAAA,CAAA,KAAA,gBAAA,CAAA,OAAA,CAAA,KAAA,CAWA,EARA,IAQA,GAPA,IAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAOA,EAJA,GAIA,GAHA,GAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,GAAA,CAAA,KAAA,CAGA,EAAA,GACA,CAhgBA,CAugBA,gBAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CAsBA,MArBA,CAAA,IAAA,CAAA,aAqBA,GApBA,GAAA,CAAA,SAAA,EAoBA,CAlBA,IAAA,CAAA,QAkBA,EAjBA,GAAA,CAAA,QAAA,EAiBA,CAdA,IAAA,CAAA,MAcA,EAbA,GAAA,CAAA,eAAA,EAaA,EATA,IAAA,CAAA,OASA,EARA,GAAA,CAAA,OAAA,EAQA,CALA,IAAA,CAAA,MAKA,EAJA,GAAA,CAAA,MAAA,EAIA,CADA,GAAA,CAAA,KAAA,EACA,CAAA,GACA,CAvBA,CAuBA,aAAA,EAvBA,CAwBA,CAhiBA,CAuiBA,YAAA,CAAA,SAAA,UAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CAOA,MANA,CAAA,GAAA,CAAA,SAAA,EAAA,IAAA,CAAA,KAAA,CAAA,SAMA,CALA,GAAA,CAAA,QAAA,EAAA,IAAA,CAAA,KAAA,CAAA,QAKA,CAJA,GAAA,CAAA,OAAA,EAAA,IAAA,CAAA,KAAA,CAAA,OAIA,CAHA,GAAA,CAAA,MAAA,EAAA,IAAA,CAAA,KAAA,CAAA,MAGA,CAFA,GAAA,CAAA,KAAA,EAAA,IAAA,CAAA,KAAA,CAAA,KAEA,CADA,GAAA,CAAA,eAAA,EAAA,IAAA,CAAA,KAAA,CAAA,eACA,CAAA,GACA,CARA,CAQA,aAAA,EARA,CASA,CAjjBA,CAikBA,KAAA,CAAA,SAAA,UAAA,CAAA,UAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,SAFA,CAIA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,KAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,CAiCA,MA9BA,CAAA,UAAA,EAAA,MAAA,GAAA,UAAA,CAAA,KA8BA,EA3BA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CA2BA,CAzBA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,KAAA,CAAA,SAAA,WAAA,CAAA,YAAA,CAAA,CACA,MAAA,GAAA,UAAA,CAAA,KADA,GAGA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,CAAA,CAAA,SAAA,CAAA,WAAA,CAHA,EAMA,SAAA,GAAA,UAAA,CAAA,KANA,EAOA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,QAAA,CAAA,SAAA,cAAA,CAAA,eAAA,CAAA,CAEA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,QAAA,CAAA,eAAA,EAAA,CAAA,CAAA,SAAA,CAAA,cAAA,CAFA,CAIA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,QAAA,CAAA,eAAA,EAAA,KAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,QAAA,CAAA,eAAA,EAAA,KAAA,CACA,CALA,CAPA,CAgBA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,KAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,KAAA,CAAA,YAAA,EAAA,QAAA,CACA,CAjBA,CAyBA,CALA,SAAA,CAAA,KAAA,CAAA,KAAA,YAAA,CAAA,SAAA,CAAA,KAAA,CAKA,EA7BA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CA6BA,CADA,SAAA,CAAA,KAAA,OAAA,CAAA,SAAA,CACA,CAAA,SACA,CAxmBA,CAknBA,OAAA,CAAA,SAAA,GAAA,CAAA,IACA,CAAA,MAAA,CAAA,CADA,CAEA,UAAA,CAAA,CAFA,CAGA,aAAA,CAAA,CAHA,CAIA,UAJA,CAKA,aALA,CAOA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,GAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,CAsCA,MAlCA,CAAA,GAAA,CAAA,KAAA,CAAA,EAkCA,CAhCA,CAAA,CAAA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,KAAA,CAAA,UAAA,EAAA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,CAAA,CAAA,MAAA,CAAA,IAAA,EAAA,IAAA,CAAA,QAAA,CAAA,UAAA,EAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CACA,CAAA,CAAA,MAAA,CAAA,OAAA,EAAA,OAAA,CAAA,KAAA,CAAA,UAAA,EAAA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,UAAA,GAAA,IAAA,CAAA,EADA,GAEA,UAAA,CAAA,CAFA,CAGA,UAAA,CAAA,IAAA,CAAA,EAHA,CAIA,IAAA,CAAA,QAAA,CAAA,MAJA,EAOA,aAAA,GAAA,OAAA,CAAA,EAPA,GAQA,aAAA,CAAA,CARA,CASA,aAAA,CAAA,OAAA,CAAA,EATA,CAUA,OAAA,CAAA,QAAA,CAAA,MAVA,EAaA,IAAA,CAAA,QAAA,CAAA,MAbA,CAcA,IAAA,CAAA,KAAA,CAAA,aAAA,CAAA,CAdA,CAeA,IAAA,CAAA,cAAA,CAAA,UAfA,CAgBA,IAAA,CAAA,iBAAA,CAAA,aAhBA,CAiBA,GAAA,CAAA,KAAA,CAAA,MAAA,EAAA,CACA,UAAA,CAAA,IAAA,CAAA,EADA,CAEA,OAAA,CAAA,OAAA,CAAA,EAFA,CAGA,IAAA,CAAA,IAAA,CAAA,EAHA,CAIA,QAAA,CAAA,MAJA,CAjBA,CAuBA,MAAA,EAvBA,CAwBA,aAAA,EAxBA,CAyBA,UAAA,EACA,CA1BA,CA2BA,CA5BA,CA6BA,CA9BA,CAgCA,CAAA,GACA,CAjqBA,CA0qBA,eAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,GAAA,CAAA,EAAA,CAAA,GAAA,CAAA,KAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,CAaA,MAVA,CAAA,GAAA,CAAA,KAAA,CAAA,EAUA,CATA,KAAA,IAAA,CAAA,GAAA,CAAA,SAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CACA,GAAA,CAAA,KAAA,CAAA,MAAA,EAAA,CACA,UAAA,CAAA,IAAA,CAAA,EADA,CAEA,OAAA,CAAA,OAAA,CAAA,EAFA,CAGA,IAAA,CAAA,IAAA,CAAA,EAHA,CAIA,QAAA,CAAA,MAJA,CAMA,CARA,CASA,CAAA,GACA,CA1rBA,CA+rBA,CAlvBA,C,CCAA,MAAA,CAAA,gDAAA,CAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,SAAA,CAAA,CAAA,aASA,QAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,IACA,CAAA,aAAA,CAAA,SAAA,CAAA,eAAA,CAAA,MAAA,CAAA,UAAA,EAAA,CAAA,MAAA,CAAA,cAAA,GAAA,cAAA,CAAA,cAAA,IADA,CAEA,iBAAA,CAAA,MAAA,CAAA,UAAA,GAAA,MAAA,CAAA,OAFA,CAGA,MAAA,CAAA,aAAA,EAAA,iBACA,CAEA,MAbA,CAAA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAaA,CAAA,oBAEA,CAjBA,C,CCAA,MAAA,CAAA,qEAAA,CAAA,CAAA,MAAA,CAAA,QAAA,CAAA,cAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,CAAA,SAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,CAAA,aAsDA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAuDA,QAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,IAEA,CAAA,YAAA,CAAA,SAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,QAAA,CAAA,KAAA,UAAA,EAHA,CAIA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,YAAA,CAJA,CAKA,mBAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,6BAAA,CALA,CAMA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAFA,CANA,CAUA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,QAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CADA,EAEA,KAAA,CAAA,OAAA,CAAA,OAAA,CAEA,CAJA,CAVA,CAeA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,KAAA,CAAA,CAAA,OADA,EAEA,KAAA,CAAA,OAAA,CAAA,OAAA,CAEA,CAJA,CAfA,CAoBA,KAAA,SAAA,CAAA,YAAA,CAAA,CACA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,mBAAA,CADA,CAEA,YAAA,GAFA,CAAA,CAAA,CAIA,EAJA,CAIA,KAJA,CAIA,UAAA,CACA,KAAA,WAAA,CAAA,CAAA,CACA,CANA,EAMA,EANA,CAMA,WANA,CAMA,UAAA,CACA,KAAA,WAAA,CAAA,CAAA,CACA,CARA,EASA,EATA,CASA,MATA,CASA,UAAA,CACA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,KAAA,CAAA,SAAA,CAAA,SAAA,EADA,EAEA,KAAA,CAAA,SAAA,CAAA,KAAA,EAEA,CAJA,CAKA,CAfA,EAeA,EAfA,CAeA,UAfA,CAeA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,UAAA,GAAA,KAAA,EACA,CAjBA,CApBA,CAsCA,KAAA,SAAA,CAAA,KAAA,EACA,CAvCA,EAuCA,EAvCA,CAuCA,SAvCA,CAuCA,UAAA,CACA,KAAA,SAAA,CAAA,OAAA,EADA,CAEA,KAAA,UAAA,GAAA,MAAA,EACA,CA1CA,CAFA,CA+CA,MAFA,CAAA,YAAA,CAAA,WAAA,CAAA,YAAA,CAEA,CADA,YAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAAA,YACA,CA9JA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YALA,CAMA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBANA,CAOA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAPA,IASA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CASA,MARA,CAAA,MAAA,EAAA,qGAQA,EAPA,MAAA,CAAA,OAAA,CAAA,KAOA,EAPA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAMA,CANA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAMA,EALA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,0EAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,+CACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAUA,MATA,CAAA,MAAA,EAAA,4IASA,EARA,MAAA,CAAA,OAAA,CAAA,QAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,QAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,0HAKA,EAJA,MAAA,CAAA,OAAA,CAAA,KAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,wEACA,CAAA,MACA,CA9BA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAwCA,MAVA,CAAA,MAAA,EAAA,6TACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,EADA,CAEA,+IAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iFAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iFAAA,CAAA,OAAA,CAAA,EAHA,CAIA,4FAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,kGAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,kGAAA,CAAA,OAAA,CAAA,EALA,CAMA,oOAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,eAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,wBACA,CAAA,MACA,CA5CA,CATA,CAgFA,QAAA,CAAA,CACA,eAAA,CAAA,CAAA,CACA,EAAA,CAAA,sBADA,CAEA,KAAA,CAAA,EAAA,CAAA,sBAAA,CAFA,CAGA,SAAA,CAAA,CAAA,CACA,EAAA,CAAA,MADA,CAEA,QAAA,CAAA,iBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,yBAAA,CAHA,CAAA,CAIA,CACA,EAAA,CAAA,UADA,CAEA,QAAA,CAAA,iBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,6BAAA,CAHA,CAJA,CAQA,CACA,EAAA,CAAA,SADA,CAEA,QAAA,CAAA,iBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,4BAAA,CAHA,CARA,CAYA,CACA,EAAA,CAAA,KADA,CAEA,QAAA,CAAA,iBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,2BAAA,CAHA,CAZA,CAHA,CAAA,CADA,CAhFA,CAkKA,MAAA,CAAA,mBAEA,CApKA,C,CCAA,MAAA,CAAA,kEAAA,CAAA,CAAA,MAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,gDAAA,CAAA,mEAAA,CAAA,qEAAA,CAAA,qEAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,GAAA,CAAA,aAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CAAA,aAmBA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CApBA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBALA,CAMA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBANA,CAOA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAPA,CAQA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QARA,CASA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eATA,CAUA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAVA,IAYA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,8CACA,CANA,CAZA,CA8CA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,WADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,IAAA,CAAA,UAAA,CAAA,cAAA,EAJA,CAKA,MAAA,CAAA,CACA,oBAAA,CAAA,oBAAA,CAAA,UAAA,CADA,CAEA,cAAA,CAAA,OAAA,CAAA,aAAA,CAAA,IAAA,CAFA,CALA,CASA,iBAAA,CAAA,UAAA,CAAA,UAAA,EATA,CAUA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EAVA,CAWA,UAAA,CAAA,KAAA,aAAA,EAXA,CAYA,cAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,UAAA,CAZA,CAaA,eAAA,CAAA,CAAA,CAAA,GAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,KAAA,EAsBA,EAtBA,CAAA,CACA,eAAA,CAAA,CAAA,CACA,EAAA,CAAA,sBADA,CAEA,KAAA,CAAA,EAAA,CAAA,sBAAA,CAFA,CAGA,SAAA,CAAA,CAAA,CACA,EAAA,CAAA,MADA,CAEA,QAAA,CAAA,oBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,yBAAA,CAHA,CAAA,CAIA,CACA,EAAA,CAAA,UADA,CAEA,QAAA,CAAA,oBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,6BAAA,CAHA,CAJA,CAQA,CACA,EAAA,CAAA,SADA,CAEA,QAAA,CAAA,oBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,4BAAA,CAHA,CARA,CAYA,CACA,EAAA,CAAA,KADA,CAEA,QAAA,CAAA,oBAFA,CAGA,KAAA,CAAA,EAAA,CAAA,2BAAA,CAHA,CAZA,CAHA,CAAA,CADA,CAbA,CAqCA,iBAAA,CAAA,cArCA,GAsCA,eAAA,CAAA,OAAA,EAAA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,OAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,YAAA,CAAA,CAAA,KAAA,GAAA,KAAA,EACA,CAFA,CAEA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAFA,CAtCA,CA4CA,eAAA,CAAA,YAAA,EAAA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,YAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,cAAA,CAAA,QAAA,CAAA,KAAA,EACA,CAFA,CAEA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAFA,CA5CA,EAoDA,KAAA,SAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,KAAA,CAAA,SAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,MAAA,CAAA,CACA,QAAA,CAAA,KAAA,EACA,CAHA,CADA,CAMA,KAAA,CAAA,SAAA,CAAA,EAAA,CAAA,WAAA,CAAA,UAAA,CACA,KAAA,CAAA,SADA,GAKA,KAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,eAAA,CALA,CAOA,KAAA,CAAA,SAAA,CAAA,MAAA,CAAA,KAAA,CAAA,aAAA,GAAA,cAAA,EAAA,CAPA,CASA,KAAA,CAAA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,KAAA,CAAA,SAAA,CAAA,OAAA,EADA,CAGA,KAAA,CAAA,SAAA,CAAA,IACA,CAJA,CATA,CAcA,CAdA,CAeA,CArBA,EAqBA,EArBA,CAqBA,QArBA,CAqBA,SAAA,MAAA,CAAA,CACA,KAAA,OAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,oBAAA,CADA,CAEA,KAAA,OAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,cAAA,CACA,CAxBA,EAwBA,EAxBA,CAwBA,mBAxBA,CAwBA,SAAA,OAAA,CAAA,IACA,CAAA,IAAA,CAAA,KAAA,UAAA,EADA,CAEA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA,4BAAA,EAAA,MAAA,EAFA,CAIA,OAJA,CAKA,aAAA,CAAA,WAAA,CAAA,QAAA,CALA,CAOA,aAAA,CAAA,QAAA,CAAA,QAAA,CAEA,CAjCA,EAiCA,EAjCA,CAiCA,uBAjCA,CAiCA,SAAA,cAAA,CAAA,IACA,CAAA,IAAA,CAAA,KAAA,UAAA,EADA,CAEA,IAAA,CAAA,GAAA,MAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,KAAA,EAAA,MAAA,CAAA,cAAA,CAFA,CAGA,IAAA,CAAA,IAAA,CAAA,8BAAA,EAAA,IAAA,CAAA,IAAA,CACA,CArCA,CApDA,CA0FA,UAAA,CAAA,EAAA,CAAA,YAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,aAAA,CAAA,CACA,oBAAA,CAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,EAAA,oBAAA,CAAA,UAAA,CADA,CAEA,cAAA,CAAA,OAAA,CAAA,aAAA,CAAA,WAAA,CAFA,CAFA,CAOA,aAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,QAAA,CAPA,CASA,SAAA,CAAA,GAAA,CAAA,gCAAA,CAAA,CAAA,KAAA,EATA,CAWA,CAAA,GAAA,SAAA,CAAA,MAXA,GAYA,SAAA,CAAA,GAAA,CAAA,0EAAA,CAZA,CAaA,GAAA,CAAA,MAAA,CAAA,CAAA,KAAA,GAAA,MAAA,CAAA,SAAA,CAbA,EAgBA,SAAA,CAAA,IAAA,CAAA,aAAA,CAhBA,CAkBA,KAAA,CAAA,SAAA,CAAA,OAAA,CAAA,QAAA,CAAA,aAAA,CACA,CAnBA,EAmBA,EAnBA,CAmBA,eAnBA,CAmBA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,cAAA,CAAA,OAAA,CAAA,aAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,WAAA,CAAA,CACA,OAAA,CAAA,CAAA,WAAA,CAAA,OADA,CAAA,CAAA,CAFA,CAMA,KAAA,CAAA,SAAA,CAAA,OAAA,CAAA,uBAAA,CAAA,cAAA,CACA,CA1BA,EA0BA,EA1BA,CA0BA,kBA1BA,CA0BA,UAAA,CACA,GAAA,CAAA,SAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,CAEA,KAAA,CAAA,SAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,SAAA,CACA,CA9BA,EA8BA,KA9BA,CA8BA,YA9BA,CA8BA,UAAA,CACA,cAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CAAA,IAAA,EAAA,KAAA,EACA,CAhCA,CAiCA,CAjIA,CAsIA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,YAAA,EAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,CAAA,OAAA,CAAA,kBAAA,CAFA,CAGA,KAAA,SAAA,CAAA,MAAA,CAAA,kBAAA,CACA,CA1IA,CAAA,CA9CA,CA2LA,MAAA,CAAA,MAEA,CA7LA,C,CCAA,MAAA,CAAA,2FAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CAsGA,MApEA,CACA,IAAA,CAAA,QADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAKA,UAAA,CAAA,CAAA,CAAA,QAAA,CALA,CAMA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,WAAA,CANA,CAQA,uBAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAEA,GAAA,QAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,EADA,CAEA,KAAA,CAAA,KAFA,CAGA,QAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAKA,eAAA,CAAA,CALA,CAAA,CAAA,CAOA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CARA,CASA,OAAA,CAAA,uBAAA,CAAA,SAAA,CATA,CAWA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CACA,CAxBA,CAoCA,MAVA,MAAA,aAAA,CAAA,EAUA,CARA,MAAA,CAAA,cAQA,CAPA,eAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,uBAAA,CAAA,GAAA,MAAA,kBAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,CAFA,CAOA,CAHA,uBAAA,kBAAA,UAAA,CAAA,eAAA,CAGA,CAAA,IACA,CA7CA,CAmDA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CArDA,CA2DA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAjEA,CAsEA,CAxGA,C,CCAA,MAAA,CAAA,4FAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAJA,CAKA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBALA,CA2HA,MAxFA,CACA,IAAA,CAAA,SADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAIA,cAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,YAAA,GAAA,IAAA,CAAA,oBAAA,CAJA,CAKA,gBAAA,CAAA,cAAA,CAAA,IAAA,CAAA,sEAAA,CALA,CAOA,MAAA,CAAA,oBAPA,GAQA,gBAAA,CAAA,CAAA,CAAA,gBAAA,CAAA,GAAA,GAAA,OAAA,EAAA,CARA,EAWA,GAAA,CAAA,wBAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAEA,GAAA,QAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,EADA,CAEA,KAAA,CAAA,KAFA,CAGA,QAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAKA,eAAA,CAAA,SAAA,iBAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,CAAA,CAeA,MAZA,CAAA,MAAA,CAAA,SAYA,GAXA,GAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,CAWA,CATA,CAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,SAAA,SAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,UAAA,EAAA,CADA,CAGA,cAAA,GAAA,QAAA,CAAA,IAAA,CAAA,SAAA,GAAA,UAAA,GAAA,QAAA,CAAA,IAAA,CAAA,SAAA,CAHA,IAIA,GAAA,CAAA,CAJA,CAMA,CANA,CASA,EAAA,GACA,CAtBA,CAAA,CAAA,CAwBA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CAzBA,CA0BA,OAAA,CAAA,uBAAA,CAAA,SAAA,CA1BA,CA4BA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CACA,CAjCA,CA6CA,MAVA,MAAA,aAAA,CAAA,EAUA,CARA,MAAA,CAAA,cAQA,CAPA,gBAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,wBAAA,CAAA,GAAA,MAAA,kBAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,CAFA,CAOA,CAHA,wBAAA,kBAAA,cAAA,CAAA,gBAAA,CAGA,CAAA,IACA,CAjEA,CAuEA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAzEA,CA+EA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CArFA,CA0FA,CA7HA,C,CCAA,MAAA,CAAA,+FAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CA8FA,MA5DA,CACA,IAAA,CAAA,aADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAIA,WAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,YAAA,GAAA,IAAA,CAAA,iBAAA,CAJA,CAKA,gBAAA,CAAA,WAAA,CAAA,IAAA,CAAA,gBAAA,CALA,CAOA,2BAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAEA,GAAA,QAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,EADA,CAEA,KAAA,CAAA,KAFA,CAGA,QAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAAA,CAAA,CAMA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CAPA,CAQA,OAAA,CAAA,uBAAA,CAAA,SAAA,CARA,CAUA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CACA,CAtBA,CA4BA,MAJA,MAAA,aAAA,CAAA,EAIA,CAHA,gBAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,2BAAA,CAAA,GAAA,MAAA,eAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,WAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,CAFA,CAGA,CAAA,IACA,CArCA,CA2CA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CA7CA,CAmDA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAzDA,CA8DA,CAhGA,C,CCAA,MAAA,CAAA,8FAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,IA4BA,CAAA,SAAA,CAAA,CACA,OAAA,CAAA,8CADA,CAEA,WAAA,CAAA,2EAFA,CAGA,QAAA,CAAA,8DAHA,CA5BA,CAyOA,MAnMA,CACA,IAAA,CAAA,WADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,MAAA,CAAA,KAAA,SAAA,EADA,CAEA,MAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,YAAA,EAFA,CAGA,UAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAHA,CAOA,kBAAA,GAPA,CAIA,gBAJA,CAKA,cALA,CASA,aATA,CAUA,KAAA,iBAAA,CAAA,EAVA,CAWA,KAAA,aAAA,CAAA,EAXA,CAYA,GAAA,CAAA,oBAAA,CAEA,GAAA,UAAA,CAAA,MAAA,EAAA,CAAA,UAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,IACA,CAAA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CADA,CAEA,gBAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,QAAA,CAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wDAAA,CAHA,CAIA,mBAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,iBAAA,CAJA,CAKA,iBAAA,CAAA,QAAA,CAAA,2BAAA,CALA,CAOA,mBAAA,CAAA,MAPA,GAQA,oBAAA,CAAA,YAAA,CAAA,CACA,SAAA,CAAA,MAAA,CAAA,SADA,CAEA,EAAA,CAAA,uBAFA,CAGA,YAAA,GAHA,CAIA,QAAA,CAAA,mBAJA,CAKA,KAAA,CAAA,iBALA,CAAA,CARA,CAeA,OAAA,CAAA,mBAAA,CAAA,oBAAA,CAAA,CACA,WAAA,CAAA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,WADA,CAEA,WAAA,CAAA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,WAFA,CAAA,CAfA,CAmBA,KAAA,aAAA,CAAA,IAAA,CAAA,oBAAA,CAnBA,CAoBA,KAAA,iBAAA,CAAA,IAAA,CAAA,oBAAA,CApBA,EAuBA,gBAAA,CAAA,MAvBA,GAwBA,gBAAA,CAAA,YAAA,CAAA,CACA,SAAA,CAAA,MAAA,CAAA,SADA,CAEA,EAAA,CAAA,mBAFA,CAGA,YAAA,GAHA,CAIA,QAAA,CAAA,gBAJA,CAKA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wBAAA,CALA,CAAA,CAxBA,CA+BA,OAAA,CAAA,mBAAA,CAAA,gBAAA,CAAA,CACA,WAAA,CAAA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,WADA,CAEA,WAAA,CAAA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,WAFA,CAAA,CA/BA,CAmCA,OAAA,CAAA,uBAAA,CAAA,gBAAA,CAnCA,CAqCA,MAAA,CAAA,SArCA,EAsCA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,MAAA,CAAA,SAAA,CAAA,IACA,CAAA,QAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,EADA,CAEA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAFA,CAGA,QAAA,CAAA,KAAA,EAHA,CAKA,aAAA,GAAA,MALA,GAMA,kBAAA,GANA,EASA,aAAA,CAAA,MACA,CACA,CAZA,CAtCA,CAqDA,MAAA,CAAA,cArDA,EAsDA,gBAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,SAAA,IAAA,CAAA,CACA,OAAA,CAAA,qBAAA,CAAA,IAAA,GAAA,cADA,EAEA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,kBADA,CAEA,cAAA,CAAA,KAAA,EAFA,CAIA,cAAA,CAAA,KAAA,EAEA,CANA,CAQA,CAVA,CAtDA,CAmEA,MAAA,CAAA,cAnEA,EAoEA,gBAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,SAAA,IAAA,CAAA,CACA,OAAA,CAAA,qBAAA,CAAA,IAAA,GAAA,cADA,EAEA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,cAAA,CAAA,IAAA,EACA,CAFA,CAIA,CANA,CApEA,CA6EA,KAAA,aAAA,CAAA,IAAA,CAAA,gBAAA,CA7EA,CA8EA,KAAA,iBAAA,CAAA,IAAA,CAAA,gBAAA,CA9EA,KAiFA,CAAA,cAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAjFA,CAkFA,gBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,EAAA,EAAA,CAAA,oBAAA,CAlFA,CAmFA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,QAAA,CAAA,SAAA,CAAA,WAAA,CAnFA,CAoFA,cAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,MAAA,CApFA,CAqFA,MAAA,CAAA,KAAA,GAAA,QAAA,CAAA,8BAAA,CArFA,CAsFA,MAAA,CAAA,IAAA,GAAA,QAAA,CAAA,gCAAA,CAtFA,CAwFA,cAAA,CAAA,MAxFA,GA0FA,cAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,iBADA,CAEA,QAAA,CAAA,cAFA,CAGA,KAAA,CAAA,cAHA,CAIA,eAAA,CAAA,SAAA,iBAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,CAAA,CAYA,OAVA,MAAA,CAAA,cAAA,EAAA,SAAA,GAAA,aAUA,IATA,GAAA,CAAA,CAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,SAAA,SAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,GAAA,MAAA,CAAA,qBAAA,CAAA,CAEA,GAAA,OAAA,CAAA,QAAA,CAAA,QAAA,GAAA,OAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CACA,QAEA,CANA,CASA,EAAA,GACA,CAlBA,CAAA,CAAA,CAmBA,EAnBA,CAmBA,OAnBA,CAmBA,SAAA,MAAA,CAAA,CACA,kBAAA,GADA,CAEA,MAAA,CAAA,SAAA,CAAA,UAAA,GAAA,MAAA,GAAA,QAAA,CAAA,0BAAA,CACA,CAtBA,EAsBA,EAtBA,CAsBA,MAtBA,CAsBA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,UAAA,GAAA,MAAA,GAAA,WAAA,CAAA,0BAAA,CACA,CAxBA,CA1FA,CAmHA,OAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,CACA,WAAA,CAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,WADA,CAEA,WAAA,CAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,WAFA,CAAA,CAnHA,CAuHA,OAAA,CAAA,uBAAA,CAAA,cAAA,CAvHA,CAyHA,MAAA,CAAA,SAzHA,EA0HA,cAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,UAAA,CACA,gBADA,EAEA,gBAAA,CAAA,KAAA,EAEA,CAJA,CA1HA,CAiIA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,UAjIA,EAkIA,cAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,SAAA,IAAA,CAAA,CACA,OAAA,CAAA,qBAAA,CAAA,IAAA,GAAA,gBADA,EAEA,gBAAA,CAAA,KAAA,GAAA,IAAA,EAEA,CAJA,CAlIA,CAuIA,cAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,SAAA,IAAA,CAAA,CACA,OAAA,CAAA,qBAAA,CAAA,IAAA,GAAA,gBADA,EAEA,gBAAA,CAAA,KAAA,GAAA,QAAA,EAEA,CAJA,CAvIA,EA6IA,KAAA,aAAA,CAAA,IAAA,CAAA,cAAA,CA7IA,CAgJA,KAAA,iBAAA,CAAA,IAAA,CAAA,cAAA,CAhJA,CAkJA,CAEA,MAAA,KACA,CA3KA,CAiLA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAnLA,CAyLA,OAAA,CAAA,UAAA,CAMA,MALA,MAAA,iBAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAKA,CAFA,KAAA,iBAAA,CAAA,EAEA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAhMA,CAqMA,CA3OA,C,CCAA,MAAA,CAAA,yFAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CAmFA,MAjDA,CACA,IAAA,CAAA,MADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAiBA,MAbA,MAAA,aAAA,CAAA,EAaA,CAZA,KAAA,aAAA,GAAA,aAAA,GAAA,YAAA,GAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,IACA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CADA,CAEA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,GAAA,MAAA,wBAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,aAAA,CAAA,MAAA,CADA,CAEA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,QAAA,CAFA,CAGA,KAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAAA,CAFA,CAQA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CARA,CAUA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CAXA,CAYA,CAAA,IACA,CA1BA,CAgCA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAlCA,CAwCA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CA9CA,CAmDA,CArFA,C,CCAA,MAAA,CAAA,4FAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CAmFA,MAjDA,CACA,IAAA,CAAA,SADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAiBA,MAbA,MAAA,aAAA,CAAA,EAaA,CAZA,KAAA,aAAA,GAAA,aAAA,GAAA,YAAA,GAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,IACA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CADA,CAEA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,GAAA,MAAA,mCAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,aAAA,CAAA,MAAA,CADA,CAEA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,QAAA,CAFA,CAGA,KAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAAA,CAFA,CAQA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CARA,CAUA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CAXA,CAYA,CAAA,IACA,CA1BA,CAgCA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAlCA,CAwCA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CA9CA,CAmDA,CArFA,C,CCAA,MAAA,CAAA,yFAAA,CAAA,CAAA,QAAA,CAAA,aAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAJA,CAKA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBALA,IA8BA,CAAA,sBAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,QAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,EADA,CAEA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAFA,CAGA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAHA,CAKA,IALA,EAMA,QAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,GAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAEA,CAtCA,CA8CA,yBAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,EAAA,CACA,QAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,EAAA,CACA,CAjDA,CAyDA,yBAAA,CAAA,SAAA,SAAA,CAAA,CACA,SADA,GAEA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,sBAAA,CAFA,CAGA,SAAA,CAAA,EAAA,CAAA,MAAA,CAAA,yBAAA,CAHA,CAKA,CA9DA,CA2OA,MArKA,CACA,IAAA,CAAA,MADA,CAQA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,KAAA,CAAA,IAAA,CAEA,KAAA,aAAA,CAAA,EAHA,IAIA,CAAA,MAAA,CAAA,KAAA,SAAA,EAJA,CAKA,QAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,cAAA,EALA,CAYA,YAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,UAAA,GAAA,OAAA,CAAA,aAAA,CACA,CAdA,CAyBA,YAAA,CAAA,SAAA,SAAA,CAAA,KAAA,CAAA,IACA,CAAA,IAAA,IAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,SAAA,CAAA,CAAA,CAAA,GAAA,SAAA,CAAA,CAAA,CADA,CAEA,eAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAFA,CAGA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,SAAA,CAHA,CAKA,GAAA,QAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,QAAA,CAAA,QADA,CAEA,KAAA,CAAA,KAFA,CAGA,IAAA,CAAA,IAHA,CAIA,eAAA,CAAA,eAJA,CAKA,YAAA,GALA,CAAA,CAAA,CAUA,MAFA,CAAA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CAEA,CAAA,SACA,CACA,CA3CA,CAsDA,kBAAA,CAAA,SAAA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IACA,CAAA,eAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CADA,CAEA,SAAA,CAAA,YAAA,CAAA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,eAAA,CAFA,CAeA,MAXA,CAAA,SAWA,GAVA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CAUA,CATA,OAAA,CAAA,uBAAA,CAAA,SAAA,CASA,CAPA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAAA,0BAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,CACA,CAFA,EAEA,EAFA,CAEA,MAFA,CAEA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CAAA,WAAA,CAAA,0BAAA,CACA,CAJA,CAOA,EAAA,SACA,CAtEA,CAyEA,gBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,4CAAA,EACA,MADA,CACA,SAAA,CAAA,CAAA,IAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,kBAAA,EAAA,MACA,CAHA,CAzEA,CAqIA,MAvDA,CAAA,QAAA,CAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,CAAA,2BAAA,CAuDA,CArDA,gBAAA,CAAA,IAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,IACA,CAAA,YAAA,CAAA,CAAA,CAAA,WAAA,CADA,CAGA,YAAA,CAAA,YAAA,CAAA,IAAA,CAAA,mBAAA,CAHA,CAIA,UAAA,CAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAJA,CAMA,GAAA,YAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,CAAA,CAEA,YAAA,CAAA,IAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,SAAA,MAAA,CAAA,GAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAEA,IAAA,CAAA,OAAA,CAAA,aAAA,EAAA,MAHA,EAIA,YAAA,CAAA,IAAA,CAAA,IAAA,CAEA,CANA,CAFA,CAUA,YAAA,CAAA,GAAA,CAAA,gBAAA,CAVA,CAYA,GAAA,CAAA,OAAA,CAAA,YAAA,CAAA,EAAA,CAAA,QAAA,EAAA,YAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAEA,GAAA,MAAA,CAAA,cAAA,GAAA,MAAA,CAAA,mBAAA,EAAA,OAAA,GAAA,UAAA,CAAA,CACA,OAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,YAAA,CAAA,CACA,yBAAA,CAAA,SAAA,CACA,CAHA,CADA,KAKA,CACA,GAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,YAAA,IAAA,UAAA,CAEA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAOA,MALA,CAAA,OAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,KAAA,CAAA,CACA,KAAA,CAAA,OADA,GAEA,QAAA,CAAA,KAFA,CAIA,CAJA,CAKA,CAAA,QACA,CAVA,CAAA,CAWA,yBAAA,CAAA,SAAA,CAZA,CAcA,SAAA,EAAA,MAAA,CAAA,YAdA,EAeA,SAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,EAAA,CAEA,QAAA,CAAA,EAAA,CAAA,UAAA,CAHA,EAIA,QAAA,CAAA,KAAA,EAEA,CANA,CAQA,CACA,CA3CA,IA4CA,CAAA,YAAA,CAAA,YAAA,CAAA,YAAA,CAEA,CApDA,CAqDA,CAAA,IACA,CA9IA,CAoJA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAtJA,CA4JA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAlKA,CAuKA,CA7OA,C,CCAA,MAAA,CAAA,+FAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CAyHA,MA5FA,CACA,IAAA,CAAA,YADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAIA,QAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,cAAA,EAJA,CAKA,gBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,4CAAA,EACA,MADA,CACA,SAAA,CAAA,CAAA,IAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,kBAAA,EAAA,MACA,CAHA,CALA,CASA,WAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,aAAA,CATA,CAUA,WAAA,CAAA,IAVA,CAWA,IAAA,CAAA,EAXA,CAaA,kBAAA,CAAA,UAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,QAAA,CAAA,IADA,CAEA,YAAA,GAFA,CAAA,CAAA,CAIA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CALA,CAOA,KAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,SAAA,CACA,CArBA,CAwDA,MA9BA,MAAA,aAAA,CAAA,EA8BA,CA7BA,KAAA,iBAAA,CAAA,EA6BA,CA3BA,QAAA,CAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,CAAA,2BAAA,CA2BA,CA1BA,WAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,IACA,CAAA,YAAA,CAAA,CAAA,CAAA,EAAA,CADA,CAEA,OAAA,CAAA,YAAA,CAAA,MAAA,EAFA,CAGA,eAAA,CAAA,YAAA,CAAA,CACA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,YAAA,CADA,CAEA,KAAA,CAAA,YAFA,CAGA,YAAA,GAHA,CAAA,CAHA,CAQA,OAAA,CAAA,uBAAA,CAAA,eAAA,CARA,CAUA,WAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,WAAA,CAVA,GAWA,kBAAA,EAXA,CAYA,IAAA,CAAA,EAZA,EAeA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,eAAA,CAfA,CAiBA,IAAA,CAAA,IAAA,CAAA,eAAA,CAjBA,CAkBA,WAAA,CAAA,OACA,CAnBA,CA0BA,CALA,IAAA,CAAA,MAKA,GAJA,kBAAA,EAIA,CAHA,IAAA,CAAA,EAGA,EAAA,IACA,CAjEA,CAuEA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAzEA,CA+EA,OAAA,CAAA,UAAA,CASA,MARA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAQA,CALA,KAAA,iBAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAKA,CAFA,KAAA,iBAAA,CAAA,EAEA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAzFA,CA8FA,CA3HA,C,CCAA,MAAA,CAAA,6FAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAJA,CAKA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBALA,CAyGA,MArEA,CACA,IAAA,CAAA,UADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAIA,QAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,cAAA,EAJA,CAKA,KAAA,aAAA,CAAA,EALA,CAOA,GAAA,CAAA,kBAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,SAAA,CAWA,MATA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CACA,GAAA,iBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,UAAA,GAAA,GAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,YACA,CAEA,QACA,CAEA,CAAA,OACA,CAbA,CA8BA,MAfA,CAAA,QAAA,CAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,CAAA,2BAAA,EAAA,IAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,IACA,CAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CADA,CAEA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,QAAA,EAAA,GAAA,CAAA,kBAAA,CAFA,CAIA,QAAA,CAAA,IAAA,CAAA,YAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAJA,CAKA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,GAAA,MAAA,qCAAA,GAAA,EAAA,MAAA,CAAA,CAAA,CADA,CAEA,QAAA,CAAA,QAFA,CAGA,KAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAAA,CAAA,CAMA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CAXA,CAaA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CAdA,CAeA,CAAA,IACA,CA9CA,CAoDA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CAtDA,CA4DA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAlEA,CAuEA,CA3GA,C,CCAA,MAAA,CAAA,oFAAA,CAAA,CAAA,QAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAHA,CAIA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAJA,CA8FA,MA5DA,CACA,IAAA,CAAA,YADA,CAQA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,SAAA,EAHA,CAIA,aAAA,CAAA,CAAA,CAAA,eAAA,CAJA,CAKA,MAAA,CAAA,aAAA,CAAA,IAAA,CAAA,YAAA,CALA,CAMA,KAAA,aAAA,CAAA,EANA,CAQA,GAAA,CAAA,2BAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAEA,GAAA,QAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,EADA,CAEA,KAAA,CAAA,KAFA,CAGA,QAAA,CAAA,QAHA,CAIA,YAAA,GAJA,CAAA,CAAA,CAMA,OAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,MAAA,CAPA,CAQA,OAAA,CAAA,uBAAA,CAAA,SAAA,CARA,CAUA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CACA,CACA,CAfA,CAoBA,MAHA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,2BAAA,CAAA,GAAA,MAAA,cAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,aAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,CAFA,CAGA,CAAA,IACA,CArCA,CA2CA,aAAA,CAAA,UAAA,CACA,MAAA,MAAA,aACA,CA7CA,CAmDA,OAAA,CAAA,UAAA,CAKA,MAJA,MAAA,aAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,EACA,CAFA,CAIA,CADA,KAAA,aAAA,CAAA,EACA,CAAA,IACA,CAzDA,CA8DA,CAhGA,C,CCAA,MAAA,CAAA,gFAAA,CAAA,CAAA,SAAA,CAAA,2FAAA,CAAA,4FAAA,CAAA,+FAAA,CAAA,8FAAA,CAAA,yFAAA,CAAA,4FAAA,CAAA,yFAAA,CAAA,+FAAA,CAAA,6FAAA,CAAA,oFAAA,CAAA,CAAA,SAAA,OAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,oBAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,oBAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,aAEA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAFA,CAGA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAHA,CAIA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAJA,CAKA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBALA,CAMA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cANA,CAOA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAPA,CAQA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cARA,CASA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBATA,CAUA,kBAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAVA,CAWA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAXA,CAeA,OAAA,CAAA,wBAAA,CAAA,gBAfA,CAgBA,OAAA,CAAA,yBAAA,CAAA,iBAhBA,CAiBA,OAAA,CAAA,4BAAA,CAAA,oBAjBA,CAkBA,OAAA,CAAA,2BAAA,CAAA,mBAlBA,CAmBA,OAAA,CAAA,sBAAA,CAAA,cAnBA,CAoBA,OAAA,CAAA,yBAAA,CAAA,iBApBA,CAqBA,OAAA,CAAA,sBAAA,CAAA,cArBA,CAsBA,OAAA,CAAA,4BAAA,CAAA,oBAtBA,CAuBA,OAAA,CAAA,0BAAA,CAAA,kBAvBA,CAwBA,OAAA,CAAA,2BAAA,CAAA,SAxBA,CA0BA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,KAAA,GAAA,CAAA,CAEA,CA5BA,C,CCAA,MAAA,CAAA,iFAAA,CAAA,CAAA,uBAAA,CAAA,gFAAA,CAAA,CAAA,SAAA,gBAAA,CAAA,UAAA,CAAA,CAAA,aA8DA,QAAA,CAAA,eAAA,CAAA,IAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,eAAA,CAAA,WAAA,CAAA,IAAA,CAAA,CAKA,MAAA,CAKA,IAAA,CAAA,UAAA,CAEA,MADA,CAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAAA,IACA,CARA,CAcA,OAAA,CAAA,UAAA,CACA,MAAA,CAAA,IACA,CAhBA,CAsBA,SAAA,CAAA,UAAA,CACA,MAAA,CAAA,MACA,CAxBA,CA8BA,aAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CAhCA,CAsCA,aAAA,CAAA,UAAA,OACA,YAAA,MAAA,CAAA,QAAA,CAAA,aADA,CAEA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAFA,CAKA,EACA,CA5CA,CAkDA,OAAA,CAAA,UAAA,CAKA,MAJA,YAAA,MAAA,CAAA,QAAA,CAAA,OAIA,EAHA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAGA,CAAA,IACA,CAxDA,CA0DA,CAOA,MAnIA,CAAA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAmIA,CALA,gBAAA,CAAA,eAAA,CAKA,CAJA,MAAA,CAAA,MAAA,CAAA,UAAA,EAAA,OAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CACA,CAFA,CAIA,CAAA,eAEA,CAvIA,C,CCAA,MAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,QAAA,CAAA,iFAAA,CAAA,CAAA,SAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,eAAA,CAAA,CAAA,aAqCA,QAAA,CAAA,qBAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,IAAA,CAEA,GAAA,OAAA,EAAA,YAAA,MAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,SAAA,EAAA,CACA,SAAA,CAAA,kBAAA,CAAA,SADA,CAGA,OAAA,CAAA,SACA,CAEA,OAAA,EAAA,YAAA,MAAA,CAAA,OAAA,CAAA,UAVA,GAWA,OAAA,CAAA,OAAA,CAAA,UAAA,EAXA,EAcA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAdA,QAgBA,QAAA,CAAA,QAAA,uBAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,MAAA,qBAAA,EAAA,MAhBA,CAqBA,CAyDA,QAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,GAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,aAAA,EACA,CAFA,CAAA,CAGA,CArHA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAJA,CAyHA,OAAA,CAAA,qBAAA,CAAA,qBAzHA,CA0HA,OAAA,CAAA,aAAA,CAAA,aA1HA,CA2HA,OAAA,CAAA,aAAA,CAnBA,SAAA,cAAA,CAAA,UAAA,CAAA,CACA,MAAA,CAAA,cAAA,CAAA,UAAA,CAAA,GAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,eAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,CAAA,MAAA,CAAA,CAAA,IAAA,EACA,CAFA,CAGA,CA5GA,CA4HA,OAAA,CAAA,uBAAA,CAzCA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,EAAA,CAAA,UAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,EAAA,CAGA,IAAA,CAAA,EAAA,CAAA,WAAA,CAJA,CAKA,IAAA,CAAA,IAAA,CAAA,UAAA,CACA,KAAA,KAAA,EACA,CAFA,CALA,CASA,IAAA,CAAA,KAAA,GAAA,SAAA,EAEA,CAXA,CAYA,CAhGA,CA6HA,OAAA,CAAA,mBAAA,CA3DA,SAAA,SAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,EAAA,CAAA,MAAA,CAAA,WAAA,CAAA,SAAA,IAAA,CAAA,CACA,qBAAA,CAAA,IAAA,CADA,EAEA,KAAA,IAAA,EAEA,CAJA,EAIA,EAJA,CAIA,MAAA,CAAA,WAJA,CAIA,SAAA,IAAA,CAAA,CACA,qBAAA,CAAA,IAAA,CADA,EAEA,KAAA,QAAA,EAEA,CARA,CASA,CA5EA,CA+HA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,KAAA,GAAA,CAAA,CAEA,CAjIA,C,CCAA,MAAA,CAAA,iFAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAsDA,MA/BA,CACA,IAAA,CAAA,SADA,CAQA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,MAAA,CACA,UAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,WAAA,CAAA,MAAA,CADA,CAEA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CACA,SAAA,GADA,CAEA,YAAA,GAFA,CAGA,SAAA,GAHA,CAIA,YAAA,GAJA,CAKA,cAAA,GALA,CAMA,YAAA,CAAA,KANA,CAOA,YAAA,CAAA,WAPA,CAQA,WAAA,CAAA,YARA,CASA,WAAA,CAAA,SATA,CAUA,UAAA,CAAA,OAVA,CAWA,UAAA,CAAA,MAXA,CAYA,cAAA,CAAA,MAZA,CAaA,cAAA,CAAA,IAbA,CAAA,CAcA,MAdA,CAFA,CAkBA,CA5BA,CAiCA,CAxDA,C,CCAA,MAAA,CAAA,gFAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAsDA,MA/BA,CACA,IAAA,CAAA,QADA,CAQA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,MAAA,CACA,UAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,YAAA,CAAA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,WAAA,CAAA,MAAA,CADA,CAEA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CACA,SAAA,GADA,CAEA,YAAA,GAFA,CAGA,SAAA,GAHA,CAIA,YAAA,GAJA,CAKA,cAAA,GALA,CAMA,YAAA,CAAA,KANA,CAOA,YAAA,CAAA,WAPA,CAQA,WAAA,CAAA,YARA,CASA,WAAA,CAAA,SATA,CAUA,UAAA,CAAA,OAVA,CAWA,UAAA,CAAA,MAXA,CAYA,cAAA,CAAA,MAZA,CAaA,cAAA,CAAA,IAbA,CAAA,CAcA,MAdA,CAFA,CAkBA,CA5BA,CAiCA,CAxDA,C,CCAA,MAAA,CAAA,gFAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAuDA,MAhCA,CACA,IAAA,CAAA,QADA,CAQA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,MAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,MAAA,CAEA,UAAA,CAAA,CAAA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,WAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,CAAA,MAAA,CAAA,SAAA,CAFA,CAGA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CACA,SAAA,GADA,CAEA,YAAA,GAFA,CAGA,SAAA,GAHA,CAIA,YAAA,GAJA,CAKA,cAAA,GALA,CAMA,YAAA,CAAA,KANA,CAOA,YAAA,CAAA,WAPA,CAQA,WAAA,CAAA,YARA,CASA,WAAA,CAAA,SATA,CAUA,UAAA,CAAA,EAVA,CAWA,UAAA,CAAA,EAXA,CAYA,cAAA,CAAA,EAZA,CAaA,cAAA,CAAA,EAbA,CAAA,CAcA,MAdA,CAHA,CAmBA,CA7BA,CAkCA,CAzDA,C,CCAA,MAAA,CAAA,2EAAA,CAAA,CAAA,SAAA,CAAA,iFAAA,CAAA,gFAAA,CAAA,gFAAA,CAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,aAEA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAFA,CAGA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,CAQA,OAAA,CAAA,mBAAA,CAAA,WARA,CASA,OAAA,CAAA,kBAAA,CAAA,UATA,CAUA,OAAA,CAAA,kBAAA,CAAA,UAVA,CAYA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,KAAA,GAAA,CAAA,CAEA,CAdA,C,CCAA,MAAA,CAAA,4EAAA,CAAA,CAAA,uBAAA,CAAA,2EAAA,CAAA,CAAA,SAAA,gBAAA,CAAA,KAAA,CAAA,CAAA,aAoCA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IACA,CAAA,MAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EADA,CAEA,QAAA,CAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAFA,CAGA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAOA,MA7CA,CAAA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBA6CA,CALA,gBAAA,CAAA,WAAA,CAKA,CAJA,MAAA,CAAA,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAFA,CAIA,CAAA,WAEA,CAjDA,C,CCAA,MAAA,CAAA,6EAAA,CAAA,CAAA,4BAAA,CAAA,uEAAA,CAAA,4EAAA,CAAA,eAAA,CAAA,CAAA,SAAA,YAAA,CAAA,OAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA,aAEA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAFA,CAGA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CA0IA,MArGA,UAAA,UAAA,CAAA,IACA,CAAA,MAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EADA,CAEA,oBAAA,CAAA,MAAA,CAAA,oBAFA,CAGA,cAAA,CAAA,IAHA,CAIA,UAAA,CAAA,EAJA,CASA,MAAA,CAKA,IAAA,CAAA,UAAA,IACA,CAAA,cAAA,CAAA,WAAA,CAAA,oBAAA,CAAA,MAAA,CADA,CAEA,gBAAA,CAAA,cAAA,CAAA,MAFA,CAGA,UAAA,CAAA,OAAA,CAAA,aAAA,CAAA,cAAA,CAAA,UAAA,CAHA,CAIA,GAAA,CAAA,UAAA,CAAA,OAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAyBA,MAvBA,CAAA,QAAA,CAAA,aAuBA,EAtBA,QAAA,CAAA,aAAA,CAAA,IAAA,EAsBA,CAnBA,cAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,aADA,CAEA,IAAA,GAFA,CAGA,QAAA,CAAA,UAHA,CAIA,YAAA,CAAA,gBAAA,CAAA,YAJA,CAAA,CAmBA,CAbA,OAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,CACA,WAAA,CAAA,gBAAA,CAAA,YADA,CAEA,WAAA,CAAA,gBAAA,CAAA,YAFA,CAAA,CAaA,CATA,QAAA,CAAA,MAAA,mBAAA,GAAA,CAAA,MAAA,MAAA,kBAAA,YAAA,EAAA,MAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,SACA,OAAA,CAAA,qBAAA,CAAA,CAAA,CAAA,MAAA,CADA,OAKA,CAAA,cAAA,CAAA,SAAA,EALA,EAMA,cAAA,CAAA,KAAA,EANA,CAQA,CARA,CASA,CAAA,IACA,CAnCA,CAyCA,aAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CA3CA,CAkDA,OAAA,CAAA,SAAA,OAAA,CAAA,CAEA,MADA,CAAA,oBAAA,CAAA,OACA,CAAA,IACA,CArDA,CA2DA,OAAA,CAAA,UAAA,CACA,MAAA,CAAA,oBACA,CA7DA,CAmEA,QAAA,CAAA,UAAA,CACA,MAAA,KAAA,GAAA,cACA,CArEA,CA2EA,OAAA,CAAA,UAAA,CAYA,MAXA,CAAA,QAAA,CAAA,MAAA,kBAWA,CAVA,UAAA,CAAA,OAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,OAAA,EACA,CAFA,CAUA,CANA,cAMA,EALA,cAAA,CAAA,OAAA,EAKA,CAFA,cAAA,CAAA,IAEA,CADA,UAAA,CAAA,EACA,CAAA,IACA,CAxFA,CA0FA,CAIA,CA5IA,C,CCCA,MAAA,CAAA,wEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCDA,MAAA,CAAA,sEAAA,CAAA,CAAA,QAAA,CAAA,6EAAA,CAAA,wBAAA,CAAA,4EAAA,CAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,IA8BA,CAAA,mBAAA,CAAA,CACA,oBAAA,CAAA,SADA,CA9BA,CAqCA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,eADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAGA,YAAA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,SAAA,EAAA,CAAA,mBAAA,CAHA,CAKA,YAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,YAAA,CALA,CAUA,UAAA,CAAA,KAAA,CAAA,YAAA,CAAA,UAAA,CAGA,YAAA,CAAA,QAAA,EAHA,EAIA,YAAA,CAAA,OAAA,EAJA,CAOA,YAAA,CAAA,IAAA,EACA,CARA,EAQA,EARA,CAQA,YARA,CAQA,UAAA,CACA,YAAA,CAAA,OAAA,EACA,CAVA,EAeA,EAfA,CAeA,mBAfA,CAeA,SAAA,IAAA,CAAA,CACA,YAAA,CAAA,OAAA,CAAA,IAAA,CADA,CAEA,YAAA,CAAA,oBAAA,CAAA,IACA,CAlBA,CAmBA,CAnCA,CAAA,CArCA,CA2EA,MAAA,CAAA,MAEA,CA7EA,C,CCAA,MAAA,CAAA,qEAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,aAOA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAEA,GAAA,MAAA,CAAA,qBAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,CAEA,cAHA,GAIA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,EAAA,UACA,CAFA,CAJA,EASA,IAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CACA,CAEA,MAAA,CAAA,IACA,CAEA,QAAA,CAAA,cAAA,CAAA,MAAA,CAAA,CACA,IAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CACA,MADA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CACA,MADA,CACA,IAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,CADA,CAGA,CAAA,CAAA,CAHA,CAIA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,GAAA,CAAA,CACA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CACA,CAFA,CAJA,CAOA,MAAA,CAAA,yBAPA,CAQA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,MAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,CARA,CAUA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,cAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CACA,CAFA,CAVA,CAgBA,MAAA,CAAA,MACA,CAEA,QAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAYA,MAXA,CAAA,GAAA,GAAA,CAAA,GAWA,CAVA,MAAA,CAAA,cAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CACA,KAAA,CAAA,KADA,CAEA,UAAA,GAFA,CAGA,YAAA,GAHA,CAIA,QAAA,GAJA,CAAA,CAUA,CAHA,GAAA,CAAA,GAAA,CAAA,CAAA,KAGA,CAAA,GACA,CASA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAUA,MARA,CAAA,IAAA,CAAA,OAQA,CAPA,KAAA,CAAA,EAAA,CAAA,SAAA,CAOA,CANA,IAAA,CAAA,QAMA,CALA,KAAA,CAAA,EAAA,CAAA,UAAA,CAKA,CAJA,IAAA,CAAA,MAIA,GAHA,KAAA,CAAA,EAAA,CAAA,QAAA,CAGA,EAAA,KACA,CAlFA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,IA4DA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,0GACA,CANA,CA5DA,CAsFA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,cADA,CAEA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAKA,WAAA,CAAA,SAAA,IAAA,CAAA,CACA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EACA,CAPA,CASA,WAAA,CAAA,SAAA,IAAA,CAAA,CACA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,GAAA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,IAAA,EACA,CAXA,CAaA,UAAA,CAAA,KAAA,CAAA,YAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,WAAA,CAAA,IAAA,CAFA,CAGA,WAAA,CAAA,IAAA,CACA,CAJA,EAIA,EAJA,CAIA,eAJA,CAIA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,IAAA,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,CACA,OAAA,CAAA,CAAA,IAAA,CAAA,OADA,CAAA,CAFA,CAKA,WAAA,CAAA,IAAA,CACA,CAVA,CAWA,CA1BA,CA2BA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,OAAA,CAAA,cAAA,CAAA,CACA,KAAA,QAAA,CAAA,GAAA,CAAA,SAAA,EAAA,CAFA,CAGA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CAHA,CAIA,KAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wCAAA,CAJA,CAKA,KAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wCAAA,CACA,CAjCA,CAAA,CAtFA,CA0HA,MAAA,CAAA,MAEA,CA5HA,C,CCAA,MAAA,CAAA,iDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,iBAAA,CAAA,mBAAA,CAAA,wBAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,WAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,eAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAPA,CAQA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cARA,CASA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eATA,IAuCA,CAAA,YAAA,CAAA,QAAA,MAAA,UAAA,GAAA,CAvCA,CA6CA,cAAA,CAAA,CACA,KAAA,CAAA,CACA,KAAA,CAAA,IADA,CADA,CAIA,OAAA,CAAA,CACA,KAAA,CAAA,IADA,CAJA,CA7CA,CAyDA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,SADA,CAMA,IAAA,CAAA,UAAA,CAiBA,QAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CAEA,MAAA,CAAA,OAAA,CAAA,aAAA,EAAA,IAAA,EACA,CAOA,QAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,IAAA,EACA,CAQA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAEA,MAHA,GAIA,MAAA,CAAA,QAAA,CAAA,QAJA,CAMA,MANA,CAOA,WAAA,CAAA,MAAA,CAAA,MAAA,CAPA,CASA,WAAA,CAAA,MAAA,CAAA,MAAA,CATA,CAYA,CAaA,QAAA,CAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAMA,QAAA,CAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,CAAA,CAAA,UAAA,CAAA,MAAA,CADA,EAEA,MAAA,CAAA,MAAA,CAAA,QAAA,EAAA,MAAA,CAEA,CAEA,QAAA,CAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,CAAA,CAAA,UAAA,CAAA,MAAA,CADA,EAEA,MAAA,CAAA,MAAA,CAAA,QAAA,EAAA,MAAA,CAEA,CAfA,GAAA,CAAA,MAAA,CAAA,CACA,OAAA,CAAA,SADA,CAEA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAFA,CAAA,CAmBA,cAAA,CAAA,OAAA,EApBA,CAqBA,cAAA,CAAA,MAAA,EArBA,CAsBA,KAAA,CAAA,IAAA,CAAA,MAAA,CAtBA,CAuBA,MAAA,CAAA,IAAA,CAAA,MAAA,CAvBA,CAwBA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAxBA,CAyBA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,cAAA,CAAA,UAAA,CACA,YAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CADA,CAEA,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAFA,CAKA,MAAA,CAAA,MALA,GAMA,cAAA,CAAA,MAAA,EANA,CAOA,cAAA,CAAA,OAAA,EAPA,CASA,CATA,CAUA,CAQA,QAAA,CAAA,YAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CACA,MADA,EAEA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,MAAA,EAAA,MAAA,GAAA,MAAA,CAAA,MAAA,CACA,QAEA,CAJA,CAMA,CASA,QAAA,CAAA,YAAA,CAAA,SAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CACA,KADA,CAEA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,GAAA,GAAA,GAAA,SAAA,EAAA,SAAA,GAAA,MAAA,CAAA,OAAA,CADA,GAEA,MAFA,CAGA,WAAA,CAAA,MAAA,CAAA,MAAA,CAHA,CAKA,WAAA,CAAA,MAAA,CAAA,MAAA,CALA,CAQA,CARA,CAFA,EAYA,YAAA,CAAA,SAAA,CAAA,MAAA,CAAA,MAAA,CAZA,CAaA,YAAA,CAAA,SAAA,CAAA,MAAA,CAAA,QAAA,CAbA,CAeA,CAzIA,GACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,WAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,cAAA,CAAA,KAAA,SAAA,EAAA,CAHA,CAIA,eAAA,CAAA,CAAA,WAAA,CAAA,SAAA,EAAA,EAAA,UAAA,EAJA,CAKA,MAAA,CAAA,EALA,CAMA,QAAA,CAAA,EANA,CAOA,MAAA,CAAA,EAPA,CAQA,cAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CACA,SAAA,GADA,CAEA,OAAA,GAFA,CAAA,CARA,CA4IA,cAAA,CAAA,OAAA,GAAA,GAAA,CAAA,eAAA,CA5IA,CA8IA,WAAA,CAAA,cA9IA,EA+IA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,OAAA,CAAA,GAAA,CAAA,CACA,cAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,OAAA,aAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,CAEA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,GAAA,CAAA,QAAA,CACA,CAHA,CAIA,CALA,CA/IA,CAwJA,UAAA,CAAA,MAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CACA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,WAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,YAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CACA,CAFA,EAEA,MAFA,CAEA,WAFA,CAEA,SAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CACA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,EAAA,CAAA,YAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CACA,CAJA,EAIA,MAJA,CAIA,eAJA,CAIA,SAAA,CAAA,CAAA,MAAA,CAAA,CACA,YAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CACA,CANA,EAMA,EANA,CAMA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CANA,CAMA,SAAA,QAAA,CAAA,CACA,SAAA,IAAA,QAAA,CACA,CARA,EAQA,EARA,CAQA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CARA,CAQA,SAAA,QAAA,CAAA,CACA,SAAA,IAAA,QAAA,CACA,CAVA,EAUA,EAVA,CAUA,SAVA,CAUA,UAAA,CACA,YAAA,CAAA,IAAA,CADA,CAEA,cAAA,CAAA,KAAA,EAFA,CAGA,cAAA,CAAA,IACA,CAdA,CAeA,CA7KA,CAAA,CAzDA,CAyOA,MAAA,CAAA,MAEA,CA3OA,C,CCAA,MAAA,CAAA,uDAAA,CAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CA2BA,GAAA,CAAA,YAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,cADA,CAMA,IAAA,CAAA,UAAA,CACA,CAPA,CAYA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CAGA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,CAAA,QAAA,CAAA,IAAA,GAAA,IAAA,CAAA,OAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAGA,OAAA,EAAA,OAAA,CAAA,cAJA,EAKA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,cAAA,CALA,CASA,UAAA,CAAA,OAAA,CAAA,uBAAA,EAAA,OAAA,CAAA,aAAA,CAAA,IAAA,CAAA,OAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,sBAAA,CADA,CAEA,OAAA,EACA,CAHA,CAIA,CAbA,CAeA,CAjBA,CAkBA,CAlCA,CAAA,CAAA,CAqCA,MAAA,CAAA,YAEA,CAlEA,C,CCAA,MAAA,CAAA,2DAAA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CA4BA,GAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,kBADA,CAMA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,KAAA,QAAA,CAAA,CAAA,CAAA,KAAA,UAAA,GAAA,GAAA,CAFA,CAGA,KAAA,QAAA,CACA,EADA,CACA,cADA,CACA,UAAA,CACA,CAAA,CAAA,IAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CACA,CAHA,EAGA,EAHA,CAGA,iBAHA,CAGA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,IADA,CAEA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CACA,CANA,CAOA,CAhBA,CAqBA,MAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,UAAA,CAAA,UAAA,CAAA,UAFA,CAGA,gBAAA,CAAA,KAAA,UAAA,GAAA,UAHA,CAKA,gBALA,GAMA,gBAAA,CAAA,CAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,SAAA,CANA,EASA,gBAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CATA,CAUA,KAAA,QAAA,CAAA,KAAA,CAAA,CACA,WAAA,GADA,CAEA,GAAA,CAAA,GAFA,CAAA,CAIA,CAnCA,CAwCA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,EAAA,KAAA,QAAA,CAAA,MADA,EAEA,KAAA,QAAA,CAAA,KAAA,CAAA,OAAA,CAEA,CA5CA,CAAA,CAAA,CA+CA,MAAA,CAAA,gBAEA,CA7EA,C,CCAA,MAAA,CAAA,sCAAA,CAAA,CAAA,QAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAHA,CA0BA,GAAA,CAAA,gBAAA,CAAA,CAcA,gBAAA,CAAA,SAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IACA,CAAA,OADA,CAEA,YAFA,CAGA,OAHA,CAIA,IAJA,CAMA,GAAA,CAAA,CAAA,aAAA,CAAA,WAAA,GAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAKA,MAJA,CAAA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAIA,CAHA,YAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAGA,CAFA,OAAA,CAAA,YAAA,EAAA,YAAA,CAAA,KAEA,CADA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CACA,CAAA,SAAA,GAAA,KAAA,EAAA,UAAA,GAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,IAAA,CAAA,iBAAA,CAAA,CAAA,GAAA,OAAA,EAAA,UAAA,GAAA,SAAA,EAAA,CAAA,GAAA,IAAA,CAAA,iBAAA,EAAA,MAAA,GAAA,SAAA,EAAA,CAAA,CAAA,QAAA,GAAA,QAAA,CAAA,OAAA,CAAA,QAAA,EAAA,QAAA,EAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAGA,KAAA,IAAA,CAAA,SAAA,CAAA,mCAAA,CACA,CA7BA,CA6CA,iBAAA,CAAA,SAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IACA,CAAA,QADA,CAEA,aAFA,CAGA,OAHA,CAIA,IAJA,CAKA,OALA,CAMA,YANA,CAQA,GAAA,CAAA,CAAA,aAAA,CAAA,WAAA,GAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAWA,MAVA,CAAA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CAUA,CATA,aAAA,CAAA,SAAA,CAAA,YAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CASA,CARA,OAAA,CAAA,aAAA,EAAA,aAAA,CAAA,KAQA,CAPA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAOA,CALA,SAAA,GAAA,KAKA,GAJA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAIA,CAHA,YAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAGA,EAAA,UAAA,GAAA,KAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,GAAA,KAAA,EAAA,IAAA,CAAA,cAAA,CAAA,CAAA,GAAA,OAAA,EAAA,MAAA,GAAA,SAAA,EAAA,SAAA,GAAA,KAAA,EAAA,OAAA,CAAA,QAAA,CAAA,YAAA,CAAA,KAAA,EAAA,OAAA,EAAA,UAAA,GAAA,SAAA,EAAA,MAAA,GAAA,KAAA,EAAA,CAAA,GAAA,IAAA,CAAA,cAAA,EAAA,UAAA,GAAA,SAAA,EAAA,SAAA,GAAA,KAAA,EAAA,OAAA,CAAA,QAAA,GAAA,QAAA,CAAA,QAAA,EAAA,MAAA,GAAA,SAAA,EAAA,CAAA,CAAA,QAAA,GAAA,QAAA,CAAA,QAAA,CAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAGA,KAAA,IAAA,CAAA,SAAA,CAAA,mCAAA,CACA,CApEA,CA4EA,MAAA,CAAA,SAAA,OAAA,CAAA,cAAA,CAAA,CACA,MAAA,MAAA,QAAA,CAAA,OAAA,CAAA,cAAA,CAAA,MAAA,CACA,CA9EA,CAsFA,OAAA,CAAA,SAAA,OAAA,CAAA,cAAA,CAAA,CACA,MAAA,MAAA,SAAA,CAAA,OAAA,CAAA,cAAA,CAAA,MAAA,CACA,CAxFA,CAiGA,QAAA,CAAA,SAAA,OAAA,CAAA,cAAA,CAAA,KAAA,CAAA,IACA,CAAA,IADA,CAEA,KAFA,CAIA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,CAGA,GAAA,CAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,CAOA,GAJA,KAAA,CAAA,KAAA,EAAA,MAIA,CAHA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAGA,CAFA,KAAA,CAAA,SAAA,CAAA,aAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CAEA,CAAA,KAAA,EAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,CACA,GAAA,MAAA,GAAA,KAAA,CACA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,GAAA,KAAA,CAAA,KAAA,CAGA,GAAA,SAAA,GAAA,KAAA,EAAA,mBAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KAAA,CACA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,CAAA,GAAA,KAAA,CAAA,KAAA,CAGA,GAAA,MAAA,GAAA,KAAA,EAAA,UAAA,GAAA,KAAA,CACA,MAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CAAA,GAAA,KAAA,CAAA,KAEA,CAEA,QACA,CAhIA,CAyIA,SAAA,CAAA,SAAA,OAAA,CAAA,cAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAEA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,CAGA,GAAA,CAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,CARA,MAWA,CAAA,KAAA,CAAA,KAAA,EAAA,MAXA,CAYA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAZA,CAcA,MAAA,GAAA,KAdA,CAeA,CAAA,GAAA,IAAA,CAAA,QAfA,CAkBA,SAAA,GAAA,KAAA,EAAA,mBAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KAlBA,CAmBA,CAAA,GAAA,IAAA,CAAA,iBAnBA,EAsBA,MAAA,GAAA,KAAA,EAAA,UAAA,GAAA,KAtBA,GAuBA,CAAA,GAAA,IAAA,CAAA,cAIA,CApKA,CA8KA,eAAA,CAAA,SAAA,OAAA,CAAA,YAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IACA,CAAA,MAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,YAAA,CADA,CAEA,QAAA,CAAA,IAFA,CAGA,QAAA,CAAA,EAHA,CAMA,SAAA,CAAA,CAAA,CAAA,MAAA,CAAA,OAAA,EAAA,OAAA,CAAA,KAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,UAAA,CAYA,MAVA,CAAA,QAUA,GATA,GAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,GASA,EANA,GAAA,CAAA,GAAA,CAAA,CAAA,CACA,UAAA,CAAA,GADA,CAEA,QAAA,CAAA,QAFA,CAGA,IAAA,CAAA,IAHA,CAMA,CADA,QAAA,CAAA,GACA,CAAA,GACA,CAdA,CAcA,EAdA,CANA,CAIA,UAJA,CA4CA,MAtBA,CAAA,IAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,EAAA,QAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,CAsBA,CAjBA,UAiBA,CApBA,SAAA,EAAA,MAAA,GAAA,SAoBA,CAjBA,CAAA,SAAA,CAiBA,CAnBA,CAAA,UAAA,CAAA,MAAA,CAmBA,CAdA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAAA,MAAA,CAEA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,OACA,CAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,SAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CADA,GAGA,EAHA,MAIA,CAAA,QAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAIA,CARA,CASA,CAZA,CAcA,CAAA,QACA,CA3NA,CAmOA,WAAA,CAAA,SAAA,OAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,eAAA,CAAA,OAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CADA,MAGA,CAAA,QAAA,CAAA,MAHA,CAIA,QAAA,CAAA,CAAA,CAJA,CAOA,IACA,CA3OA,CAmPA,eAAA,CAAA,SAAA,OAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,eAAA,CAAA,OAAA,CAAA,YAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CADA,MAGA,CAAA,QAAA,CAAA,MAHA,CAIA,QAAA,CAAA,CAAA,CAJA,CAOA,IACA,CA3PA,CAmQA,kBAAA,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,CAEA,MADA,CAAA,MAAA,CAAA,MAAA,EAAA,EACA,CAAA,SAAA,GAAA,MAAA,EAAA,MAAA,GAAA,MAAA,EAAA,MAAA,GAAA,MAAA,EAAA,MAAA,GAAA,MAAA,CAAA,SAAA,EAAA,MAAA,GAAA,MAAA,CAAA,KACA,CAtQA,CA8QA,sBAAA,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,CAEA,MADA,CAAA,MAAA,CAAA,MAAA,EAAA,EACA,CAAA,MAAA,GAAA,MAAA,EAAA,UAAA,GAAA,MAAA,CAAA,SAAA,EAAA,MAAA,GAAA,MAAA,CAAA,KACA,CAjRA,CAyRA,eAAA,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,CAEA,MADA,CAAA,MAAA,CAAA,MAAA,EAAA,EACA,CAAA,MAAA,GAAA,MAAA,EAAA,MAAA,GAAA,MAAA,CAAA,SAAA,EAAA,MAAA,GAAA,MAAA,CAAA,KACA,CA5RA,CAAA,CA+RA,MAAA,CAAA,gBAEA,CA3TA,C,CCAA,MAAA,CAAA,4DAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,sCAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,CAAA,aAsFA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAvFA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,CAMA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBANA,IAQA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAKA,MAJA,CAAA,MAAA,EAAA,GAIA,EAHA,MAAA,CAAA,OAAA,CAAA,SAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,kBACA,gBAAA,EAAA,MAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EADA,CAEA,KAFA,CAGA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAHA,CAIA,UACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAQA,MAPA,CAAA,MAAA,EAAA,0BAOA,EANA,MAAA,CAAA,OAAA,CAAA,IAMA,EANA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAKA,CALA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAKA,EAJA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAIA,CAHA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,uBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,SACA,CAAA,MACA,CApDA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAyEA,MArBA,CAAA,MAAA,EAAA,0BAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,OAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAiBA,CAhBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,EAAA,CAAA,GAAA,MAeA,IAfA,MAAA,EAAA,MAeA,EAdA,MAAA,EAAA,kBAcA,EAbA,MAAA,CAAA,OAAA,CAAA,KAaA,EAbA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAYA,CAZA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAYA,EAXA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+BAUA,CATA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CASA,EARA,MAAA,EAAA,CAAA,GAAA,MAQA,IARA,MAAA,EAAA,MAQA,EAPA,MAAA,EAAA,qGAOA,CANA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,EAAA,CAAA,GAAA,MAKA,IALA,MAAA,EAAA,MAKA,EAJA,MAAA,EAAA,YAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,qBACA,CAAA,MACA,CA7EA,CARA,CAkHA,UAAA,CAAA,CACA,IAAA,CAAA,CACA,OAAA,CAAA,cADA,CAEA,KAAA,CAAA,EAAA,CAAA,gCAAA,CAFA,CAGA,IAAA,CAAA,SAHA,CAIA,IAAA,CAAA,EAAA,CAAA,IAAA,CAJA,CADA,CAOA,GAAA,CAAA,CACA,OAAA,CAAA,UADA,CAEA,KAAA,CAAA,EAAA,CAAA,sCAAA,CAFA,CAGA,IAAA,CAAA,cAHA,CAIA,IAAA,CAAA,EAAA,CAAA,eAAA,CAJA,CAPA,CAlHA,CAoIA,iBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,mBADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAQA,cAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,QAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,EAAA,KAAA,CAAA,MAHA,CAIA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,CAJA,CAmBA,MAdA,CAAA,IAAA,CAAA,QAAA,CAAA,sBAAA,CAcA,CAZA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,OAAA,EAFA,CAIA,UAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAJA,EAKA,IAAA,CAAA,OAAA,CAAA,KAAA,CALA,CAQA,IAAA,CAAA,MAAA,EARA,CASA,IAAA,CAAA,QAAA,CAAA,MAAA,EATA,CAUA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CACA,CAXA,CAYA,CAAA,IACA,CA5BA,CA8BA,KAAA,OAAA,CAAA,cAAA,EA9BA,CA+BA,KAAA,QAAA,CAAA,GAAA,CAAA,KAAA,UAAA,GAAA,GAAA,CACA,CAtCA,CA2CA,MAAA,CAAA,UAAA,IACA,CAAA,oBAAA,CAAA,KAAA,aAAA,GAAA,iBAAA,EADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,UAAA,CAAA,UAAA,CAAA,UAHA,CAIA,gBAAA,CAAA,KAAA,UAAA,GAAA,UAJA,CAMA,CAAA,gBAAA,EAAA,UAAA,CAAA,KAAA,CAAA,SANA,GAOA,gBAAA,CAAA,GAAA,CAAA,eAAA,CAAA,UAAA,CAAA,KAAA,CAAA,SAAA,CAPA,EAUA,gBAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CAVA,CAYA,GAAA,CAAA,uBAAA,CAAA,oBAAA,CAAA,CAAA,MAZA,EAaA,oBAAA,CAAA,MAAA,CAAA,KAAA,OAAA,CAEA,CA1DA,CA+DA,MAAA,CAAA,UAAA,CACA,KAAA,OAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CAjEA,CAkEA,OAAA,CAAA,UAAA,CACA,KAAA,OAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CApEA,CAyEA,OAAA,CAAA,UAAA,CACA,KAAA,OAAA,CAAA,KAAA,EACA,CA3EA,CAAA,CApIA,CAkNA,MAAA,CAAA,iBAEA,CApNA,C,CCAA,MAAA,CAAA,qDAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,aAAA,CAAA,CAAA,SAAA,EAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,aAMA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,0BAYA,MATA,CAAA,OASA,CAVA,UAAA,QAAA,CAAA,MAAA,EAAA,QAAA,QAAA,CAAA,MAAA,CAAA,QAUA,CATA,SAAA,GAAA,CAAA,CACA,MAAA,OAAA,CAAA,GACA,CAOA,CALA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,EAAA,UAAA,QAAA,CAAA,MAAA,EAAA,GAAA,CAAA,WAAA,GAAA,MAAA,EAAA,GAAA,GAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GACA,CAGA,CAAA,OAAA,CAAA,GAAA,CACA,CAlBA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,CA0BA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,UADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAIA,UAAA,CAAA,KAAA,aAAA,EAJA,CASA,YAAA,CAAA,UAAA,CACA,eADA,EAEA,eAAA,CAAA,KAAA,EAEA,CAbA,CAGA,eAHA,CAeA,KAAA,QAAA,CAAA,SAAA,IAfA,CAiBA,UAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,GAAA,CAAA,IACA,CAAA,OAAA,CAAA,GADA,CAEA,IAAA,CAAA,OAFA,CAIA,IAAA,CAAA,QAAA,CAAA,SAAA,CAJA,GAKA,WAAA,OAAA,CAAA,GAAA,CALA,GAMA,OAAA,CAAA,GAAA,CAAA,OANA,CAOA,IAAA,CAAA,GAAA,CAAA,IAPA,EAUA,OAVA,GAaA,OAbA,CAYA,WAZA,GAWA,IAXA,CAaA,EAAA,CAAA,qCAAA,CAbA,CAgBA,cAhBA,GAWA,IAXA,CAiBA,EAAA,CAAA,iBAAA,CAjBA,CAqBA,EAAA,CAAA,oBAAA,CArBA,EAyBA,eAAA,CAAA,UAAA,GAAA,KAAA,CAAA,OAAA,CAzBA,CA2BA,CA3BA,EA2BA,EA3BA,CA2BA,QA3BA,CA2BA,SAAA,OAAA,CAAA,CACA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,eAAA,CAAA,UAAA,GAAA,MAAA,CAAA,OAAA,CAFA,CAIA,CA/BA,EA+BA,EA/BA,CA+BA,SA/BA,CA+BA,SAAA,OAAA,CAAA,CACA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,eAAA,CAAA,UAAA,GAAA,OAAA,CAAA,OAAA,CAFA,CAIA,CAnCA,EAmCA,EAnCA,CAmCA,MAnCA,CAmCA,SAAA,OAAA,CAAA,CACA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,eAAA,CAAA,UAAA,GAAA,IAAA,CAAA,OAAA,CAFA,CAIA,CAvCA,EAuCA,EAvCA,CAuCA,8BAvCA,CAuCA,YAvCA,EAuCA,EAvCA,CAuCA,uBAvCA,CAuCA,UAAA,CACA,YAAA,EADA,CAEA,IAAA,CAAA,QAAA,CAAA,SAAA,IACA,CA1CA,EA0CA,EA1CA,CA0CA,sBA1CA,CA0CA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,SAAA,IACA,CA5CA,CA6CA,CApEA,CAAA,CAAA,CAuEA,MAAA,CAAA,QAEA,CAnGA,C,CCAA,MAAA,CAAA,+DAAA,CAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CA4BA,GAAA,CAAA,aAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,eADA,CAMA,IAAA,CAAA,UAAA,CAWA,QAAA,CAAA,eAAA,EAAA,IACA,CAAA,cAAA,CAAA,YAAA,CAAA,IAAA,CAAA,2BAAA,CADA,CAEA,aAAA,CAAA,mBAAA,GAAA,qBAAA,EAAA,CAAA,uBAAA,EAAA,MAFA,CAGA,cAAA,CAAA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CADA,CAEA,YAAA,CAAA,UAAA,CAAA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,gBAAA,GAAA,OAAA,CAFA,CAGA,cAAA,CAAA,UAAA,CAAA,KAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,CAAA,EAAA,GAHA,CAIA,eAAA,CAAA,KAAA,CAAA,MAAA,GAAA,OAAA,CAAA,2BAAA,CAJA,CAMA,KAAA,CAAA,MAAA,EAAA,YANA,GAOA,KAAA,CAAA,IAAA,CAAA,YAAA,IAPA,CAQA,KAAA,CAAA,GAAA,CAAA,CACA,aAAA,QADA,CAAA,CARA,CAYA,CAAA,CAAA,eAAA,CAAA,MAZA,CAaA,KAAA,CAAA,GAAA,CAAA,YAAA,CAAA,GAAA,MAAA,CAAA,eAAA,CAAA,MAAA,IAAA,GAAA,CAAA,cAAA,CAAA,CAAA,IAAA,CAAA,CAbA,CAeA,KAAA,CAAA,GAAA,CAAA,YAAA,CAAA,GAAA,MAAA,CAAA,aAAA,EAAA,GAAA,CAAA,cAAA,CAAA,CAAA,IAAA,CAAA,CAfA,CAkBA,CAlBA,CAmBA,CAGA,QAAA,CAAA,mBAAA,EAAA,CACA,GAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,uBAAA,CAAA,CADA,MAGA,CAAA,mBAAA,CAAA,MAHA,CAIA,mBAAA,CAAA,GAAA,CAAA,CAAA,EAAA,qBAAA,GAAA,MAJA,CAQA,CAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EACA,CAGA,QAAA,CAAA,qBAAA,EAAA,CACA,GAAA,CAAA,SAAA,CAAA,CAAA,CAAA,2BAAA,CAAA,CACA,WAAA,CAAA,CADA,CAUA,MARA,CAAA,SAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CACA,cAAA,CAAA,QAAA,CAAA,IAAA,CAAA,2BAAA,CADA,CAGA,cAAA,CAAA,MAJA,GAKA,WAAA,EAAA,QAAA,CAAA,WAAA,IALA,CAOA,CAPA,CAQA,CAAA,WACA,CAGA,QAAA,CAAA,uBAAA,EAAA,CACA,GAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,uBAAA,CAAA,CACA,WAAA,CAAA,CAAA,CAAA,cAAA,CADA,CADA,MAIA,CAAA,mBAAA,CAAA,MAAA,EAAA,WAAA,CAAA,MAJA,CAKA,WAAA,CAAA,GAAA,CAAA,CAAA,EAAA,qBAAA,GAAA,GAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,EAAA,qBAAA,GAAA,GALA,CAQA,CACA,CAxEA,GACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,YAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,EAFA,CAKA,UAAA,CAAA,EAAA,CAAA,YAAA,CAAA,UAAA,CACA,eAAA,EADA,CAEA,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,wBAAA,CAFA,CAGA,CAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,eAAA,CACA,CAJA,CAoEA,CA/EA,CAAA,CAAA,CAkFA,MAAA,CAAA,aAEA,CAhHA,C,CCAA,MAAA,CAAA,mDAAA,CAAA,CAAA,oBAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,UAAA,CAAA,aAAA,CAAA,CAAA,aAEA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CA2BA,GAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,SADA,CAMA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CACA,UAAA,CAAA,EAAA,CAAA,YAAA,CAAA,UAAA,CACA,UAAA,CAAA,KAAA,EACA,CAFA,EAEA,EAFA,CAEA,YAFA,CAEA,UAAA,CACA,UAAA,CAAA,IAAA,EACA,CAJA,CAKA,CAbA,CAAA,CAAA,CAgBA,MAAA,CAAA,OAEA,CA7CA,C,CCAA,MAAA,CAAA,+DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,4DAAA,CAAA,2DAAA,CAAA,eAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,UAAA,CAAA,CAAA,aAwDA,QAAA,CAAA,eAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,OAAA,GAAA,CAEA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,SAAA,cAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,cAAA,GAAA,QAAA,CAMA,MAJA,CAAA,KAIA,GAHA,OAAA,GAGA,EAAA,KACA,CARA,CAHA,CAaA,OAbA,GAcA,QAAA,CAAA,OAAA,EAdA,CAgBA,CAAA,iBAAA,CAAA,MAhBA,EAiBA,QAAA,EAjBA,CAoBA,CAEA,QAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CACA,UAAA,CAAA,MADA,CAEA,aAAA,CAAA,UAAA,CAAA,aAAA,CAAA,YACA,CA/EA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAPA,CAQA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UARA,IAuFA,CAAA,aAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,kBADA,CAMA,IAAA,CAAA,UAAA,CACA,QAAA,CAAA,UAAA,CAAA,CADA,CAGA,UAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,GAAA,mBAAA,CACA,CAVA,CAeA,MAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAIA,cAAA,CAAA,SAAA,cAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CACA,WAAA,GAFA,CAGA,iBAAA,CAAA,EAHA,CAKA,CAAA,CAAA,SAAA,CAAA,MAAA,CALA,EAMA,UAAA,CAAA,MAAA,CANA,CASA,cAAA,CAAA,MATA,EAUA,CAAA,CAAA,OAAA,CAAA,cAAA,CAAA,SAAA,cAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,UAAA,CAAA,UAAA,CAAA,aAAA,EAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,cAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,UADA,CAAA,CADA,CAKA,UAAA,CAAA,UAAA,CAAA,cAAA,CAAA,UAAA,CAAA,IALA,CAAA,CAFA,CASA,QAAA,CAAA,MAAA,EATA,CAUA,iBAAA,CAAA,IAAA,CAAA,QAAA,CACA,CAXA,CAVA,CAwBA,UAAA,EAAA,iBAxBA,EAyBA,UAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,EAAA,CAAA,CAAA,KAAA,EAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,GAAA,OAAA,CAAA,kBAAA,CAAA,CAzBA,EA4BA,QAAA,EA5BA,CAgCA,UAAA,CAAA,WAAA,CACA,CArCA,CAuCA,UAvCA,CAwCA,UAAA,CAAA,GAAA,CAAA,iCAAA,EAAA,EAAA,CAAA,iCAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAFA,CAxCA,CA4CA,UAAA,CAAA,GAAA,CAAA,gCAAA,EAAA,EAAA,CAAA,gCAAA,CAAA,SAAA,QAAA,CAAA,CACA,eAAA,CAAA,QAAA,CACA,CAFA,CA5CA,CAiDA,UAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,SAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CACA,QAAA,CAAA,IADA,CAEA,cAAA,CAAA,cAAA,CAAA,MAAA,CACA,CAHA,CAIA,CApEA,CA0EA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CAEA,GAAA,CAAA,WAAA,CAGA,GAFA,WAAA,GAEA,CAAA,CAAA,iBAAA,CACA,QAAA,EADA,KAKA,KAAA,CAAA,GAFA,CAAA,UAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,CAAA,CAEA,CAAA,UAAA,CACA,eAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAIA,CA1FA,CAAA,CAvFA,CAiCA,UAjCA,CAuCA,aAvCA,CA4CA,iBA5CA,CAiDA,WAjDA,CAsDA,QAtDA,CAoLA,MAAA,CAAA,aAEA,CAtLA,C,CCAA,MAAA,CAAA,mDAAA,CAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CA0BA,GAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,SADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,KAAA,QAAA,CAAA,CAAA,CAAA,SAAA,CAHA,CAIA,KAAA,QAAA,CAAA,EAAA,CAAA,+EAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,wBAAA,EADA,CAEA,CAAA,CAAA,eAAA,EACA,CAHA,CAJA,CAkBA,UAAA,CAAA,EAAA,CAAA,aAAA,CATA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAOA,EAAA,EAAA,CAAA,sCAAA,CALA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAGA,CACA,CAzBA,CA8BA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,YAAA,CAAA,KAAA,aAAA,GAAA,aAAA,GAAA,cAAA,EAAA,CACA,YAAA,CAAA,KAAA,CAAA,KAAA,QAAA,CACA,CAjCA,CAsCA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,MAAA,EACA,CAxCA,CA6CA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,aAAA,CAAA,KAAA,SAAA,EAAA,CACA,KAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAFA,CAIA,aAAA,CAAA,IAJA,EAKA,KAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAEA,CApDA,CAyDA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,WAAA,CAAA,sBAAA,CACA,CA3DA,CAgEA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,EACA,CAlEA,CAuEA,IAAA,CAAA,UAAA,CACA,KAAA,OAAA,EACA,CAzEA,CAAA,CAAA,CA4EA,MAAA,CAAA,OAEA,CAxGA,C,CCAA,MAAA,CAAA,4DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,IA8CA,CAAA,cAAA,CAAA,eA9CA,CAoDA,YAAA,CAAA,WApDA,CA0DA,QAAA,CAAA,CACA,aAAA,GADA,CAGA,kBAAA,GAHA,CAKA,eAAA,GALA,CAOA,KAAA,GAPA,CAwBA,aAAA,CAAA,EAxBA,CA1DA,CAoFA,OAAA,CAAA,CAAA,CAAA,MAAA,CApFA,CA0FA,SAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,WADA,CAMA,IAAA,CAAA,UAAA,CAaA,QAAA,CAAA,qBAAA,EAAA,CAGA,eAHA,CAEA,MAAA,CAAA,eAAA,EAAA,MAAA,CAAA,aAAA,CAAA,MAFA,CAGA,yBAAA,EAHA,CAKA,MAAA,CAAA,eALA,CAMA,4BAAA,EANA,CASA,8BAAA,EAEA,CAOA,QAAA,CAAA,aAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,cAAA,CAMA,MALA,CAAA,QAAA,CAAA,WAAA,CAAA,WAAA,CAKA,CAJA,aAAA,CAAA,QAAA,CAAA,UAAA,IAIA,CAHA,QAAA,CAAA,QAAA,CAAA,WAAA,CAGA,CAFA,cAAA,CAAA,QAAA,CAAA,UAAA,IAEA,CADA,QAAA,CAAA,WAAA,CAAA,WAAA,CACA,CAAA,aAAA,CAAA,cACA,CAMA,QAAA,CAAA,kBAAA,EAAA,CACA,cAAA,CAAA,iBAAA,EADA,CAEA,cAAA,CAAA,sBAAA,CAAA,eAAA,EAAA,CAAA,aAAA,EAFA,CAGA,sBAAA,CAAA,cACA,CAEA,QAAA,CAAA,eAAA,EAAA,KACA,GAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,KAAA,CAAA,eAAA,CAAA,CACA,UAFA,CAIA,cAAA,IAAA,gBAAA,CAAA,MAJA,EAKA,UAAA,CAAA,gBAAA,CAAA,KAAA,EALA,CAMA,UAAA,CAAA,SAAA,CAAA,QAAA,CAAA,WAAA,CAEA,CAEA,QAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,eAAA,GAAA,iBAAA,EACA,CAEA,QAAA,CAAA,aAAA,EAAA,CACA,CAAA,CAAA,YAAA,CAAA,eAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CACA,GAAA,cAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CACA,QAAA,CAAA,SAAA,CAAA,WAAA,CAAA,WAAA,CADA,KAGA,SAGA,CARA,CASA,CAEA,QAAA,CAAA,cAAA,CAAA,UAAA,CAAA,CACA,MAAA,CAAA,eAAA,GAAA,UAAA,CAAA,iBAAA,EACA,CAEA,QAAA,CAAA,iBAAA,EAAA,CAIA,MAAA,CAAA,WAAA,CAAA,KAAA,GAAA,EACA,CAEA,QAAA,CAAA,eAAA,EAAA,CACA,MAAA,CAAA,QAAA,CAAA,UAAA,KAAA,WAAA,CAAA,UAAA,IACA,CAOA,QAAA,CAAA,kBAAA,EAAA,CACA,GAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAWA,MARA,CAAA,MAAA,CAAA,aAQA,GAPA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,QAAA,CAAA,IAAA,uBAAA,GAAA,CAAA,IAAA,MAAA,CAAA,cAAA,CAAA,EAAA,GAAA,CAAA,IAAA,MAAA,CAAA,YAAA,CAAA,CAAA,CAOA,EAJA,MAAA,CAAA,kBAIA,GAHA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,WAAA,CAAA,IAAA,uBAAA,GAAA,CAAA,IAAA,MAAA,CAAA,cAAA,CAAA,EAAA,GAAA,CAAA,IAAA,MAAA,CAAA,YAAA,CAAA,CAAA,CAGA,EAAA,SACA,CAQA,QAAA,CAAA,yBAAA,EAAA,CACA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,aAAA,CAAA,GAAA,CAAA,SAAA,QAAA,CAAA,IAEA,CAAA,SAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,IAAA,MAAA,CAAA,cAAA,CAAA,EAAA,GAAA,CAAA,IAAA,MAAA,CAAA,YAAA,CAAA,CAFA,CAGA,UAAA,CAAA,CAHA,SAKA,SAAA,CAAA,MALA,GAMA,SAAA,CAAA,IAAA,CAAA,UAAA,CACA,UAAA,EAAA,aAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CACA,CAFA,CANA,CASA,CACA,SAAA,CAAA,SADA,CAEA,UAAA,CAAA,UAFA,CATA,CAgBA,CAhBA,CAAA,CAiBA,CASA,QAAA,CAAA,4BAAA,EAAA,CACA,GAAA,CAAA,SAAA,CAAA,kBAAA,EAAA,CACA,gBAAA,CAAA,EADA,CAEA,KAAA,CAAA,EAFA,CA0BA,MArBA,CAAA,SAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,CAAA,OAAA,CAGA,GAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,GAAA,IAHA,CAIA,KAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,EAAA,CAAA,EALA,CAMA,KAAA,CAAA,GAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CACA,CAPA,CAqBA,CAZA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,SAAA,SAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CACA,SAAA,CAAA,IAAA,CAAA,UAAA,CACA,UAAA,EAAA,aAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CACA,CAFA,CAFA,CAMA,gBAAA,CAAA,IAAA,CAAA,CACA,SAAA,CAAA,SADA,CAEA,UAAA,CAAA,UAFA,CAAA,CAIA,CAVA,CAYA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAQA,QAAA,CAAA,8BAAA,EAAA,CACA,GAAA,CAAA,SAAA,CAAA,kBAAA,EAAA,CACA,gBAAA,CAAA,EADA,CAEA,UAAA,CAAA,CAFA,CAYA,MATA,CAAA,SAAA,CAAA,IAAA,CAAA,UAAA,CACA,UAAA,EAAA,aAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CACA,CAFA,CASA,CALA,gBAAA,CAAA,IAAA,CAAA,CACA,SAAA,CAAA,SADA,CAEA,UAAA,CAAA,UAFA,CAAA,CAKA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAnMA,GACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,KAAA,SAAA,EAAA,CAFA,CAGA,WAAA,CAAA,MAAA,CAAA,KAAA,CA3DA,4BA2DA,CAjEA,sBA8DA,CAIA,UAAA,CAAA,UAAA,CAAA,aAAA,EAJA,CAKA,WAAA,CAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CALA,CAMA,QAAA,CAAA,UAAA,CAAA,cAAA,EANA,CAOA,WAAA,CAAA,UAAA,CAAA,iBAAA,EAPA,CAQA,eARA,CAQA,cARA,CAQA,sBARA,CAqMA,OAAA,CAAA,EAAA,CAAA,SAAA,MAAA,cAAA,CAAA,CAAA,CAAA,QAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,eAAA,CACA,CAFA,CAEA,EAFA,CAAA,CArMA,CAwMA,UAAA,CAAA,KAAA,CAAA,qBAAA,CAAA,UAAA,CACA,sBAAA,IADA,CAEA,qBAAA,EAFA,CAGA,UAAA,CAAA,OAAA,CAAA,eAAA,CACA,CAJA,EAIA,EAJA,CAIA,gBAAA,MAAA,cAJA,CAIA,UAAA,CACA,kBAAA,EACA,CANA,CAOA,CArNA,CAsNA,OAAA,CAAA,UAAA,CACA,OAAA,CAAA,GAAA,cACA,CAxNA,CAAA,CA1FA,CAqTA,MAAA,CAAA,SAEA,CAvTA,C,CCAA,MAAA,CAAA,2DAAA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,aAcA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAfA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,IAOA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,kCACA,CANA,CAPA,CAyCA,aAAA,CAAA,SAAA,UAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CAAA,QAAA,CACA,CA3CA,CAiDA,OAAA,CAAA,SAAA,UAAA,CAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CACA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,MADA,CAGA,OAAA,CAAA,CAAA,SAAA,CAAA,CAAA,SAAA,OAAA,CAAA,CACA,OADA,EAEA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAFA,CAGA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,OAAA,CAHA,EAKA,OAAA,EAEA,CAPA,CAOA,OAPA,CAHA,CAYA,OAAA,EAEA,CAdA,CAeA,CAjEA,CAuEA,WAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,aADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,KAAA,QAAA,CAAA,GAAA,CAAA,YAAA,EAAA,CAHA,CAIA,KAAA,IAAA,EAJA,CAMA,UAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CAFA,EAEA,EAFA,CAEA,UAFA,CAEA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAEA,OAAA,CAAA,OAHA,GAIA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAJA,CAKA,aAAA,CAAA,IAAA,CAAA,QAAA,CALA,CAMA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CAEA,UAAA,CAAA,OAAA,CAAA,aAAA,CACA,CAHA,CANA,CAWA,CAbA,EAaA,EAbA,CAaA,YAbA,CAaA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CAfA,EAeA,EAfA,CAeA,YAfA,CAeA,UAAA,CACA,IAAA,CAAA,IAAA,EADA,CAEA,IAAA,CAAA,QAAA,CAAA,KAAA,EACA,CAlBA,CAmBA,CA/BA,CAoCA,MAAA,CAAA,UAAA,CAEA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EAAA,CACA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CACA,CAxCA,CA6CA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,MAAA,EACA,CA/CA,CAoDA,MAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CAtDA,CA2DA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CA7DA,CAkEA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CApEA,CAyEA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CA3EA,CAAA,CAvEA,CAqJA,MAAA,CAAA,WAEA,CAvJA,C,CCAA,MAAA,CAAA,8DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,cAAA,CAAA,gCAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,cAAA,CAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,eAAA,CAAA,CAAA,aA2DA,QAAA,CAAA,eAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA5DA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UARA,CASA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAWA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAIA,MAHA,CAAA,MAAA,EAAA,mCACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EADA,CAEA,SACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAIA,MAHA,CAAA,MAAA,EAAA,wCACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,EADA,CAEA,SACA,CAAA,MACA,CA1BA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CA2CA,MAjBA,CAAA,MAAA,EAAA,gCAiBA,EAhBA,MAAA,CAAA,OAAA,CAAA,KAgBA,EAhBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAeA,CAfA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAeA,EAdA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAcA,CAbA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CA5BA,UAAA,CAGA,MAAA,eACA,CAwBA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,EAAA,CAAA,GAAA,MAYA,IAZA,MAAA,EAAA,MAYA,EAXA,MAAA,EAAA,WAWA,CAVA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAUA,EATA,MAAA,EAAA,CAAA,GAAA,MASA,IATA,MAAA,EAAA,MASA,EARA,MAAA,EAAA,6FACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,EADA,CAEA,kBAMA,CALA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAKA,EAJA,MAAA,EAAA,CAAA,GAAA,MAIA,IAJA,MAAA,EAAA,MAIA,EAHA,MAAA,EAAA,mGACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,EADA,CAEA,sBACA,CAAA,MACA,CA/CA,CAXA,CAyFA,aAAA,CAAA,CACA,aAAA,MADA,CAEA,SAAA,GAFA,CAGA,OAAA,GAHA,CAzFA,CAmGA,YAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,cADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,KAAA,CAAA,UAAA,CAAA,QAAA,EAHA,CAIA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,SAAA,EAAA,CAJA,CAMA,MAAA,EAAA,MAAA,CAAA,SANA,GAQA,KAAA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,CACA,KAAA,CAAA,KAAA,CAAA,QAAA,GAAA,WAAA,CAAA,cADA,CAEA,OAAA,CAAA,MAAA,CAAA,OAFA,CAAA,CAAA,CARA,CAYA,UAAA,CAAA,EAAA,CAAA,YAAA,CAAA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,WAAA,CAAA,WAAA,EAAA,QAAA,CAAA,cAAA,CACA,CAFA,EAEA,EAFA,CAEA,WAFA,CAEA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,WAAA,CAAA,cAAA,EAAA,QAAA,CAAA,WAAA,CACA,CAJA,CAZA,EAoBA,KAAA,OAAA,EAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,aAAA,CApBA,EAqBA,KAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,aAAA,CAEA,CA7BA,CAmCA,OAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,OAAA,GAFA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,KAAA,CAAA,UAAA,CAAA,QAAA,EAJA,CAWA,KAAA,oBAAA,CAAA,UAAA,IACA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EADA,CAEA,MAFA,CAGA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CACA,OADA,GAEA,OAAA,GAFA,CAKA,UAAA,CAAA,MAAA,CAAA,eAAA,CAAA,UAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,YAAA,CAAA,CACA,KAAA,CAAA,GAAA,CAAA,mBAAA,EAAA,KAAA,CAAA,mBAAA,CAAA,YAAA,CACA,CAFA,CAGA,CAJA,CALA,CAWA,MAAA,CAAA,aAAA,CAAA,CACA,OAAA,CAAA,EAAA,CAAA,sDAAA,CAAA,CAAA,OADA,CAEA,WAAA,CAAA,EAAA,CAAA,qDAAA,CAFA,CAGA,cAAA,CAAA,EAAA,CAAA,iDAAA,CAHA,CAAA,CAAA,CAIA,EAJA,CAIA,SAJA,CAIA,UAAA,CACA,OAAA,EACA,CANA,EAMA,EANA,CAMA,QANA,CAMA,UAAA,CACA,KAAA,CAAA,GAAA,CAAA,mBAAA,EAAA,KAAA,CAAA,mBAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,eAAA,CADA,CAEA,OAAA,GAFA,CAGA,MAAA,CAAA,OAAA,EACA,CAJA,CAKA,CAZA,CAXA,CAyBA,CAzBA,CA0BA,CAxCA,CA4CA,KAAA,OAAA,CAAA,cAAA,CAAA,CACA,MAAA,CAAA,UAAA,CACA,UAAA,CAAA,QAAA,GAAA,SAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAHA,CAIA,QAAA,CAAA,aAAA,CAAA,aAJA,CAKA,SAAA,GALA,CAAA,CA5CA,CAoDA,KAAA,CAAA,EAAA,CAAA,YAAA,CAAA,SAAA,MAAA,CAAA,CACA,UAAA,CAAA,QAAA,CAAA,cAAA,CADA,GAEA,UAAA,CAAA,QAAA,CAAA,cAAA,IAFA,CAGA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,MAAA,CAHA,CAIA,IAAA,CAAA,OAAA,CAAA,KAAA,EAJA,CAMA,CANA,EAMA,EANA,CAMA,WANA,CAMA,UAAA,CACA,UAAA,CAAA,QAAA,CAAA,cAAA,CADA,GAEA,UAAA,CAAA,QAAA,CAAA,cAAA,IAFA,CAGA,UAAA,CAAA,OAAA,CAAA,WAAA,CAHA,CAIA,IAAA,CAAA,OAAA,CAAA,IAAA,EAJA,CAMA,CAZA,CApDA,CAqEA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,CACA,GAAA,KAAA,CAAA,SAAA,EAAA,CAMA,MALA,CAAA,IAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAAA,CACA,CAFA,EAEA,KAFA,CAEA,SAAA,UAAA,CAAA,CACA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAJA,CAKA,GAEA,CATA,CArEA,CAgFA,UAAA,CAAA,MAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,QAEA,KAAA,CAAA,mBAAA,CAAA,GAAA,CAFA,GAMA,KAAA,CAAA,SAAA,EANA,EAOA,IAAA,CAAA,oBAAA,GAAA,IAAA,CAAA,UAAA,CACA,KAAA,GAAA,GAAA,CAAA,IADA,EAEA,UAAA,CAAA,QAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAFA,CAKA,QAAA,GAAA,GAAA,CAAA,IALA,EAMA,UAAA,CAAA,MAAA,EANA,CASA,OAAA,GAAA,GAAA,CAAA,IATA,EAUA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,GAAA,CAAA,IAAA,CAAA,OADA,CAEA,OAAA,CAAA,GAAA,CAAA,IAAA,EAAA,GAAA,CAAA,IAAA,CAAA,OAFA,CAAA,CAKA,CAfA,EAeA,KAfA,CAeA,SAAA,UAAA,CAAA,CACA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAjBA,CAPA,YA2BA,CA3BA,CAhFA,CA4GA,UAAA,CAAA,MAAA,CAAA,uBAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAMA,GAJA,IAAA,CAAA,KAAA,EAAA,IAAA,CAAA,KAAA,CAAA,YAIA,GAHA,WAAA,CAAA,YAAA,GAGA,EAAA,KAAA,CAAA,SAAA,IAAA,IAAA,CAAA,KAAA,EAAA,IAAA,CAAA,KAAA,CAAA,0BAAA,CAIA,MAHA,CAAA,IAAA,CAAA,oBAAA,GAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,QAAA,CAAA,OAAA,CACA,CAFA,CAGA,GAEA,CAbA,CA5GA,CA0HA,UAAA,CAAA,MAAA,CAAA,eAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CACA,IAAA,GAAA,CAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,EAAA,CACA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAFA,GAKA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EALA,CAMA,WAAA,CAAA,UAAA,CAAA,cAAA,EANA,CAQA,GAAA,KAAA,CAAA,SAAA,KAAA,WAAA,CAAA,YAAA,EAAA,WAAA,CAAA,YAAA,CAAA,CAOA,MANA,CAAA,UAAA,CAAA,OAAA,CAAA,aAAA,CAMA,CALA,IAAA,CAAA,oBAAA,GAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,mBAAA,CAEA,CAAA,mBAAA,CAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,EAAA,OAAA,CAAA,KAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CACA,CAJA,CAKA,GAEA,CAjBA,CAkBA,CA/KA,CAgLA,OAAA,CAAA,UAAA,CACA,KAAA,aAAA,GAAA,GAAA,CAAA,eAAA,CACA,CAlLA,CAuLA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EAAA,CAEA,KAAA,QAHA,EAIA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CAEA,CA7LA,CAAA,CAnGA,CAmSA,MAAA,CAAA,YAEA,CArSA,C,CCAA,MAAA,CAAA,8DAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,aAsBA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAvBA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,IAMA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,MAAA,CAWA,MARA,CAAA,MAAA,EAAA,KAQA,EAPA,MAAA,CAAA,OAAA,CAAA,KAOA,EAPA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAMA,CANA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAMA,EALA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,gBAIA,EAHA,MAAA,CAAA,OAAA,CAAA,OAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAfA,CANA,CA4CA,IAAA,CAAA,cA5CA,CA6CA,aAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,gCAAA,CADA,CAEA,OAAA,CAAA,EAAA,CAAA,oHAAA,CAFA,CA7CA,CAiDA,YAAA,CAAA,CACA,KAAA,CAAA,QADA,CAEA,OAAA,CAAA,CACA,MAAA,CAAA,CACA,EAAA,CAAA,EAAA,CAAA,gBAAA,CADA,CAEA,MAAA,CAAA,EAAA,CAAA,iBAAA,CAFA,CADA,CAFA,CAjDA,CA0DA,YAAA,CAAA,CACA,OAAA,CAAA,CACA,QAAA,CAAA,WADA,CAEA,WAAA,CAAA,OAFA,CADA,CAKA,eAAA,CAAA,yDALA,CA1DA,CAiEA,YAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,IADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAGA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,YAAA,CACA,CALA,CAOA,UAAA,CAAA,UAAA,CACA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CACA,CATA,CAWA,YAAA,CAAA,SAAA,KAAA,CAAA,CACA,UAAA,CAAA,EAAA,CAAA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,EACA,CAFA,EAEA,OAFA,CAEA,iCAFA,EAEA,OAFA,CAEA,WAAA,MAAA,CAAA,IAAA,CAFA,CAEA,SAAA,CAAA,aAAA,CAFA,CAEA,YAFA,CAEA,UAFA,CAEA,YAFA,CADA,CAKA,GAAA,GAAA,KAAA,CAAA,IALA,GAMA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,IANA,CAOA,MAAA,CAAA,KAAA,CAAA,IAPA,CAQA,UAAA,CAAA,OAAA,CAAA,uBAAA,CARA,CASA,UAAA,CAAA,KAAA,CAAA,oBAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,oBAAA,CADA,CAEA,UAAA,CAAA,OAAA,CAAA,sBAAA,CACA,CAHA,CATA,CAcA,CAzBA,CA2BA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CACA,MAAA,CAAA,YAAA,CAAA,KAAA,CACA,CAFA,CAGA,CApCA,CAAA,CAjEA,CAwGA,MAAA,CAAA,YAEA,CA1GA,C,CCAA,MAAA,CAAA,sDAAA,CAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,IAuBA,CAAA,MAAA,CAAA,aAAA,CAAA,sDAAA,CAvBA,CA4BA,QAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,UADA,CAMA,OAAA,CAAA,UAAA,CAEA,KAAA,aAAA,GAAA,YAAA,GAAA,WAAA,CAAA,KAAA,OAAA,EAAA,CACA,CATA,CAgBA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,oBAAA,CAAA,OAAA,CAAA,OAAA,EAFA,CAIA,cAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,MAAA,GAAA,MAAA,CAAA,OAAA,CAAA,cAAA,CAAA,GAAA,EAAA,MAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAPA,CASA,iBAAA,CAAA,SAAA,KAAA,CAAA,OACA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,KADA,CAEA,CAFA,CAKA,KACA,CAfA,CAkBA,MAAA,CAAA,UAAA,CAAA,cAAA,CAAA,KAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,aAAA,CAAA,IAOA,CAAA,eAAA,CAAA,SAAA,SAAA,CAAA,OACA,gBAAA,IAAA,CAAA,SAAA,CADA,CAKA,aAAA,CAAA,OAAA,CAAA,SAAA,CALA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,KAAA,CAAA,qDAAA,CAAA,CAIA,CAbA,CAsBA,cAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,cAAA,EAAA,CAQA,MAPA,CAAA,oBAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,UAAA,CACA,MAAA,CAAA,eAAA,CAAA,aAAA,CACA,CAFA,EAEA,IAFA,CAEA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,GAAA,CACA,CAJA,EAIA,KAJA,CAIA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,iCAAA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,OAAA,CAAA,CACA,CANA,CAOA,CAAA,oBACA,CAhCA,CA0CA,6BAAA,CAAA,UAAA,CACA,GAAA,CAAA,aAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,UAAA,CACA,MAAA,CAAA,eAAA,CAAA,aAAA,CACA,CAFA,EAEA,IAFA,CAEA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,UAAA,CAAA,QAAA,GAAA,mBAAA,CAAA,CACA,YAAA,CAAA,iBAAA,CAAA,QAAA,CADA,CAAA,CAGA,CANA,EAMA,KANA,CAMA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,mCAAA,MAAA,CAAA,GAAA,EAAA,GAAA,CAAA,OAAA,CAAA,CACA,CARA,CASA,CArDA,CAwDA,UAAA,CAAA,EAAA,CAAA,MAAA,CAAA,cAAA,EAAA,MAAA,CAAA,8BAAA,CAAA,6BAAA,EAMA,EANA,CAMA,qBANA,CAMA,SAAA,SAAA,CAAA,WAAA,CAAA,CACA,CAAA,CAAA,UAAA,CAAA,WAAA,CADA,EAEA,WAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAEA,CAVA,CAWA,CAnEA,CAoEA,CAtGA,CAAA,CA5BA,CAqIA,MAAA,CAAA,QAEA,CAvIA,C,CCAA,MAAA,CAAA,yDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,aAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,aAmNA,QAAA,CAAA,WAAA,CAAA,OAAA,CAAA,WAAA,CAAA,IACA,CAAA,eAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CADA,CAEA,WAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAIA,GAAA,WAAA,CAAA,QAAA,EAAA,eAAA,CAAA,QAAA,CAAA,IACA,CAAA,YAAA,CAAA,CAAA,CAAA,SAAA,CAAA,OAAA,CADA,CAGA,gBAAA,CAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,WAAA,CAAA,YAAA,CAHA,CAKA,MADA,CAAA,gBAAA,CAAA,QAAA,GACA,CAAA,YACA,CAEA,MAAA,CAAA,OACA,CAOA,QAAA,CAAA,aAAA,EAAA,CACA,MAAA,CACA,QAAA,CAAA,CADA,CAEA,OAAA,CAAA,CAFA,CAGA,MAAA,CAAA,CAHA,CAIA,SAAA,CAAA,CAJA,CAKA,KAAA,CAAA,CALA,CAOA,CASA,QAAA,CAAA,WAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,OAAA,CAAA,QAAA,EAAA,QADA,EAEA,KAAA,CAAA,QAAA,EAFA,CAKA,OAAA,CAAA,KAAA,CAAA,MALA,GAMA,KAAA,CAAA,OAAA,EANA,CAQA,OAAA,CAAA,KAAA,CAAA,MAAA,GAAA,OAAA,CAAA,KAAA,CAAA,KARA,EASA,KAAA,CAAA,MAAA,EATA,EAaA,OAAA,CAAA,KAAA,CAAA,QAbA,EAcA,OAAA,CAAA,KAAA,CAAA,QAAA,GAAA,OAAA,CAAA,KAAA,CAAA,SAdA,EAeA,KAAA,CAAA,SAAA,EAfA,CAmBA,KAAA,CAAA,KAAA,EACA,CASA,QAAA,CAAA,eAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,OAAA,CAAA,QAAA,EAAA,QADA,EAEA,KAAA,CAAA,QAAA,EAFA,CAKA,OAAA,CAAA,MALA,GAMA,KAAA,CAAA,OAAA,EANA,CAOA,KAAA,CAAA,MAAA,EAPA,EAUA,OAAA,CAAA,QAVA,EAWA,KAAA,CAAA,SAAA,EAXA,CAcA,KAAA,CAAA,KAAA,EACA,CAQA,QAAA,CAAA,oBAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,UAAA,EAAA,UAAA,CAAA,MAAA,CACA,MAAA,CAAA,SAAA,EAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,CAEA,MADA,CAAA,GAAA,CAAA,QAAA,CAAA,GACA,CAAA,GACA,CAHA,CAGA,EAHA,CAIA,CAaA,QAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IACA,CAAA,QAAA,CAAA,WAAA,CAAA,OAAA,CAAA,WAAA,CADA,CAEA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,QAAA,CAAA,WAAA,CAAA,YAAA,CAAA,KAAA,CAFA,CAIA,KAAA,CAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAJA,CAMA,iBANA,CAOA,SAPA,CA4CA,MAnCA,YAAA,GAAA,MAAA,CAAA,SAmCA,GAlCA,iBAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,UAAA,CAkCA,CAjCA,SAAA,CAAA,MAAA,CAAA,UAAA,EAAA,MAAA,CAAA,UAAA,CAAA,MAiCA,CAhCA,KAAA,CAAA,iBAAA,CAAA,aAAA,EAgCA,EA7BA,KAAA,CAAA,KAAA,CAAA,aAAA,EA6BA,CA5BA,KAAA,CAAA,QAAA,CAAA,aAAA,EA4BA,CA3BA,KAAA,CAAA,eAAA,CAAA,aAAA,EA2BA,CA1BA,KAAA,CAAA,kBAAA,CAAA,aAAA,EA0BA,CAxBA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,WAAA,CAAA,KAAA,CAAA,KAAA,CAAA,IAAA,CAAA,WAAA,CAAA,YAAA,CADA,CAGA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAHA,EAIA,WAAA,CAAA,KAAA,CAAA,eAAA,CAAA,IAAA,CAAA,WAAA,CAAA,YAAA,CAJA,CAOA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CADA,CAGA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAHA,EAIA,WAAA,CAAA,KAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAJA,CAOA,YAAA,GAAA,MAAA,CAAA,SAPA,EAQA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,eAAA,CAAA,IAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,SAAA,CADA,EAEA,eAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,WAAA,CAAA,YAAA,CAEA,CAJA,CAMA,CAdA,CAeA,CAtBA,CAwBA,CAAA,KACA,CAUA,QAAA,CAAA,eAAA,CAAA,UAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,CAAA,CAcA,MAZA,CAAA,kBAYA,EAXA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,kBAAA,CAAA,QAAA,CAAA,GACA,OAAA,EADA,CAGA,OAAA,EAAA,SAHA,EAIA,QAGA,CARA,CAWA,CAAA,OAAA,GAAA,SACA,CASA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,gBAEA,IAAA,CAAA,KAFA,OACA,CAAA,QAAA,EAAA,CAAA,CAAA,KADA,CAEA,WAAA,GAAA,EAAA,QAAA,CAAA,KAAA,CAAA,CAFA,CAKA,CACA,CAaA,QAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IACA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,EAAA,MAAA,CAAA,IADA,CAEA,OAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,KAFA,CAGA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,EAAA,GAAA,CAAA,KAAA,EAAA,GAAA,CACA,CAaA,QAAA,CAAA,sBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CACA,MAAA,CACA,QAAA,CAAA,QAAA,EAAA,CADA,CAEA,KAAA,CAAA,KAAA,EAAA,CAFA,CAGA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAHA,CAIA,KAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAJA,CAMA,CASA,QAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,MAAA,CACA,QAAA,CAAA,QAAA,EAAA,CADA,CAEA,KAAA,CAAA,KAAA,EAAA,CAFA,CAGA,KAAA,CAAA,KAHA,CAIA,KAAA,CAAA,GAAA,MAAA,CAAA,KAAA,CAAA,GAAA,CAJA,CAMA,CAzcA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAJA,CAKA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SALA,IAkEA,CAAA,aAAA,CAAA,CACA,KAAA,CAAA,MADA,CAEA,SAAA,CAAA,YAFA,CAGA,SAAA,GAHA,CAIA,UAAA,CAAA,EAJA,CAlEA,CA6EA,MAAA,CAAA,CACA,IAAA,CAAA,CACA,IAAA,CAAA,EAAA,CAAA,eAAA,CADA,CAEA,KAAA,CAAA,EAAA,CAAA,SAAA,CAFA,CADA,CAKA,OAAA,CAAA,CACA,IAAA,CAAA,EAAA,CAAA,kBAAA,CADA,CAEA,KAAA,CAAA,EAAA,CAAA,YAAA,CAFA,CALA,CA7EA,CA4FA,MAAA,CAAA,CAUA,IAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,IACA,CAAA,KAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,MAAA,CADA,CAEA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAIA,MADA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CACA,CAAA,KACA,CAfA,CA0BA,QAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,IACA,CAAA,KAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,UAAA,CADA,CAEA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAIA,MADA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CACA,CAAA,KACA,CA/BA,CA0CA,WAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,IACA,CAAA,KAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,aAAA,CADA,CAEA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAIA,MADA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,CACA,CAAA,KACA,CA/CA,CA5FA,CAkJA,UAAA,CAAA,CAMA,UAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,mBAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,SAAA,CACA,CARA,CAkBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CACA,CApBA,CA8BA,SAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,eAAA,CAAA,KAAA,CAAA,SAAA,CAAA,MAAA,CAAA,MAAA,CACA,CAhCA,CA0CA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,KAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,SAAA,CAAA,MAAA,CACA,CA5CA,CAsDA,UAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CACA,CAxDA,CAlJA,CAihBA,MApEA,CAOA,mBAAA,CAAA,SAAA,UAAA,CAAA,kBAAA,CAAA,IACA,CAAA,iBAAA,CAAA,oBAAA,CAAA,kBAAA,CADA,CAEA,SAAA,CAAA,kBAAA,EAAA,kBAAA,CAAA,MAFA,CAGA,MAAA,CAAA,eAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,SAAA,CACA,CAXA,CAsBA,YAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,IACA,CAAA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CADA,CAEA,aAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,EAAA,MAAA,CAAA,IAFA,CAGA,KAAA,CAAA,aAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,EAAA,aAAA,CAHA,CAYA,MARA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAQA,CALA,KAAA,CAAA,gBAKA,CANA,QAAA,EAAA,QAAA,CAAA,QAMA,CALA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAKA,CAHA,OAAA,CAAA,KAAA,CAAA,QAGA,CAAA,KACA,CAnCA,CA6CA,gBAAA,CAAA,SAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,UAAA,CAAA,IAAA,CAAA,EAAA,UAAA,CAAA,UAAA,CACA,MAAA,CAAA,iBAAA,CAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,aAAA,CACA,CAhDA,CA4DA,eAAA,CAAA,SAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,YAAA,CAGA,MAFA,CAAA,MAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,EAAA,EAAA,CAAA,aAAA,CAEA,CADA,YAAA,CAAA,KAAA,YAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CACA,CAAA,KAAA,gBAAA,CAAA,YAAA,CAAA,MAAA,CAAA,SAAA,CAAA,MAAA,CACA,CAjEA,CAsEA,CAnhBA,C,CCAA,MAAA,CAAA,oEAAA,CAAA,CAAA,cAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,SAAA,CAAA,UAAA,CAAA,CAAA,aAYA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAkCA,QAAA,CAAA,2BAAA,CAAA,MAAA,CAAA,YAAA,CAAA,CAuBA,MAAA,CAAA,SAAA,CAtBA,CAKA,MAAA,CAAA,SAAA,IAAA,CAAA,CACA,YAAA,CAAA,IADA,CAGA,KAAA,EAAA,CAAA,UAAA,GAAA,KAAA,QAHA,GAIA,KAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,KAAA,CAJA,CAKA,KAAA,QAAA,CAAA,IAAA,CAAA,WAAA,CAAA,OAAA,CAAA,YAAA,CAAA,KAAA,CALA,EAcA,KAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CACA,CApBA,CAsBA,CAAA,QAAA,CAAA,CAAA,WAAA,CAAA,aAAA,EAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CAEA,KAAA,QAAA,CAAA,CACA,MAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,mCAAA,CADA,CAEA,IAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,iCAAA,CAFA,CAFA,CAOA,KAAA,MAAA,CAAA,SAPA,EAQA,KAAA,QAAA,CAAA,MAAA,CAAA,IAAA,EARA,CAYA,KAAA,QAAA,CAAA,IAAA,CAAA,WAAA,EAZA,CAcA,YAdA,EAeA,KAAA,MAAA,CAAA,YAAA,CAfA,CAmBA,KAAA,EAAA,CAAA,QAAA,CAnBA,EAoBA,KAAA,IAAA,EAEA,CAtBA,EAsBA,EAtBA,CAsBA,SAtBA,CAsBA,UAAA,CACA,KAAA,QAAA,CAAA,IACA,CAxBA,EAwBA,IAxBA,CAwBA,MAxBA,CAyBA,CA/FA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAFA,CAGA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAHA,IAKA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,uMACA,CANA,CALA,CAuCA,QAAA,CAAA,CACA,SAAA,GADA,CAvCA,CAmGA,MAAA,CAAA,2BAEA,CArGA,C,CCAA,MAAA,CAAA,kEAAA,CAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,aAaA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAoBA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAkCA,QAAA,CAAA,yBAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IACA,CAAA,KAAA,CAAA,CADA,CAiCA,MAAA,CAAA,SAAA,CA/BA,CAKA,MAAA,CAAA,SAAA,IAAA,CAAA,CACA,YAAA,CAAA,IADA,CAGA,KAAA,EAAA,CAAA,UAAA,GAAA,KAAA,QAHA,GAIA,KAAA,GAAA,YAAA,CAAA,KAJA,GAMA,KAAA,CAAA,YAAA,CAAA,KANA,CAOA,KAAA,QAAA,CAAA,IAAA,CAAA,KAAA,GAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,CAPA,EAUA,KAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,KAAA,CAVA,CAWA,KAAA,QAAA,CAAA,IAAA,CACA,QADA,GACA,WADA,CACA,iBADA,EAEA,KAFA,CAEA,CAFA,CAEA,YAAA,CAAA,QAFA,EAEA,QAFA,CAEA,SAFA,EAGA,KAHA,CAGA,CAAA,CAHA,EAGA,QAHA,CAGA,SAHA,CAXA,EAuBA,KAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CACA,CA7BA,CA+BA,CAAA,QAAA,CAAA,CAAA,WAAA,CAAA,WAAA,EAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CAEA,KAAA,QAAA,CAAA,CACA,MAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,mCAAA,CADA,CAEA,IAAA,CAAA,KAAA,UAAA,GAAA,IAAA,CAAA,qDAAA,CAFA,CAFA,CAOA,KAAA,MAAA,CAAA,SAPA,EAQA,KAAA,QAAA,CAAA,MAAA,CAAA,IAAA,EARA,CAYA,YAZA,EAaA,KAAA,MAAA,CAAA,YAAA,CAbA,CAiBA,KAAA,EAAA,CAAA,QAAA,CAjBA,EAkBA,KAAA,IAAA,EAEA,CApBA,EAoBA,EApBA,CAoBA,SApBA,CAoBA,UAAA,CACA,KAAA,QAAA,CAAA,IACA,CAtBA,EAsBA,IAtBA,CAsBA,MAtBA,CAuBA,CA/HA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,IAMA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,0PACA,CANA,CANA,CAkBA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAIA,MAHA,CAAA,MAAA,EAAA,oDACA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CADA,CAEA,cACA,CAAA,MACA,CAXA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAHA,MAcA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAdA,CAeA,MAAA,EAAA,CAAA,GAAA,MAfA,CAeA,MAfA,CAgBA,EACA,CAjBA,CAlBA,CA+DA,QAAA,CAAA,CACA,SAAA,GADA,CA/DA,CAmIA,MAAA,CAAA,yBAEA,CArIA,C,CCAA,MAAA,CAAA,4DAAA,CAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,yDAAA,CAAA,oEAAA,CAAA,kEAAA,CAAA,CAAA,SAAA,aAAA,CAAA,SAAA,CAAA,cAAA,CAAA,yBAAA,CAAA,uBAAA,CAAA,CAAA,aAEA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAFA,CAGA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAHA,CAIA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAJA,CAKA,yBAAA,CAAA,yBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,CAAA,yBAAA,CAAA,SAAA,CAAA,CAAA,yBALA,CAMA,uBAAA,CAAA,uBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,SAAA,CAAA,CAAA,uBAAA,CAAA,SAAA,CAAA,CAAA,uBANA,IA8BA,CAAA,SAAA,CAAA,CACA,UAAA,CAAA,yBADA,CAEA,QAAA,CAAA,uBAFA,CA9BA,CAsCA,WAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,aADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,gBAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,iBAAA,EAAA,EAAA,CAAA,KAAA,SAAA,EAAA,CAHA,CAIA,IAAA,CAAA,IAJA,CAKA,eAAA,CAAA,SAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,SAAA,CAAA,UALA,CAMA,cAAA,CAAA,CACA,SAAA,CAAA,MAAA,CAAA,IAAA,EAAA,YADA,CAEA,KAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAFA,CAGA,SAAA,CAAA,MAAA,CAAA,SAHA,CAIA,SAAA,CAAA,MAAA,CAAA,SAJA,CAKA,UAAA,CAAA,MAAA,CAAA,UALA,CANA,CAcA,iBAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,IAAA,EAAA,IAAA,CAAA,aAAA,EAAA,WAAA,GAAA,cAAA,CAAA,SACA,CAhBA,CAkBA,kBAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,IAAA,EAAA,YAAA,GAAA,cAAA,CAAA,SAAA,EAAA,CAAA,cAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,CAAA,UAAA,CACA,CApBA,CA0BA,mBAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,EAAA,kBAAA,CAAA,IAAA,CACA,CA5BA,CAkCA,MAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAHA,CAKA,mBAAA,CAAA,IAAA,CALA,CAMA,IAAA,CAAA,QAAA,CAAA,IAAA,EANA,EAQA,IAAA,CAAA,QAAA,CAAA,IAAA,EARA,CASA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,cAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CATA,CAWA,CA7CA,CAgDA,KAAA,QAAA,CAAA,eAAA,CAAA,cAAA,CAhDA,CAkDA,MAAA,EAlDA,CAmDA,UAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,MAAA,CACA,CA1DA,CA+DA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EAAA,CACA,KAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CACA,CAlEA,CAuEA,OAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,OAAA,EAFA,CAKA,KAAA,QAAA,CAAA,IACA,CA7EA,CAkFA,IAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,IAAA,EAEA,CAtFA,CA2FA,IAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,IAAA,EAEA,CA/FA,CAAA,CAtCA,CAwIA,MAAA,CAAA,WAEA,CA1IA,C,CCAA,MAAA,CAAA,wDAAA,CAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CA2BA,GAAA,CAAA,SAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,WADA,CAMA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CAEA,UAAA,CAAA,QAAA,GAAA,GAAA,CAAA,SAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,GAAA,EAAA,GAAA,CAAA,IAAA,CADA,MAGA,CAAA,IAAA,EAAA,IAAA,CAAA,IAAA,EAAA,WAAA,GAAA,IAAA,CAAA,IAAA,EAAA,CAAA,UAAA,CAAA,QAAA,CAAA,mBAAA,CAHA,EAKA,UAAA,CAAA,QAAA,CAAA,mBAAA,IALA,MAOA,UAAA,CAAA,QAAA,CAAA,OAAA,CAPA,EAWA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CACA,OAAA,CAAA,WADA,CAAA,CAXA,GAcA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAAA,CAdA,CAUA,UAAA,CAAA,OAAA,CAAA,SAAA,CAVA,OAsBA,CAAA,IAAA,EACA,CAvBA,CAwBA,CAjCA,CAsCA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,SAAA,GAFA,CAIA,UAAA,CAAA,QAAA,GAAA,OAAA,CAAA,WAAA,CAAA,SAAA,IAAA,CAAA,CACA,SAAA,GAAA,IAAA,EAAA,UAAA,IAAA,CAAA,IAAA,EAAA,UAAA,IAAA,CAAA,IAAA,EAAA,UAAA,CAAA,QAAA,CAAA,mBAAA,CADA,GAEA,SAAA,GAFA,CAIA,UAAA,IAAA,CAAA,IAJA,CAKA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAAA,CALA,EAOA,UAAA,CAAA,QAAA,CAAA,mBAAA,IAPA,CAQA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAAA,CARA,EAWA,CAXA,CAYA,CAtDA,CAAA,CAAA,CAyDA,MAAA,CAAA,SAEA,CAtFA,C,CCAA,MAAA,CAAA,2CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,aASA,QAAA,CAAA,eAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,KAAA,CAAA,IAEA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAFA,CAGA,UAAA,CAAA,EAHA,CACA,YADA,CAIA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,EAAA,OAAA,CAAA,SAAA,IAAA,CAAA,GAAA,CAAA,CACA,CAAA,CAAA,OAAA,CAAA,GAAA,CADA,EAEA,UAAA,CAAA,IAAA,CAAA,GAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAEA,CAJA,CAJA,CASA,GAAA,CAAA,eAAA,CAEA,GAAA,CAAA,mBAAA,EAAA,MAAA,GAAA,KAAA,CACA,eAAA,CAAA,EAAA,CAAA,sBAAA,CADA,KAEA,CACA,GAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,WAAA,CAAA,CAEA,CAAA,GAAA,mBAHA,GAIA,gBAAA,CAAA,EAAA,CAAA,UAAA,CAJA,EAOA,eAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,mBAAA,CAAA,gBAAA,CACA,CAQA,MALA,CAAA,YAKA,CANA,CAAA,GAAA,UAAA,CAAA,MAMA,CALA,EAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,eAAA,CAKA,CAHA,EAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,eAAA,CAGA,CAAA,YACA,CAEA,MAvCA,CAAA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAuCA,CAAA,eAEA,CA3CA,C,CCCA,MAAA,CAAA,sEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCDA,MAAA,CAAA,8DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,YAAA,CAAA,2CAAA,CAAA,YAAA,CAAA,0EAAA,CAAA,QAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,UAAA,CAAA,eAAA,CAAA,OAAA,CAAA,aAAA,CAAA,MAAA,CAAA,CAAA,aA4CA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA4DA,QAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,IAOA,CAAA,SAAA,CAAA,SAAA,CAAA,CASA,MAAA,CAAA,SAAA,aAAA,CAAA,mBAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,WAFA,CAGA,SAHA,CAIA,cAJA,CAMA,GAAA,CAAA,KAAA,EAAA,CAAA,WAAA,CAAA,CAAA,CAOA,GALA,KAAA,aAKA,CANA,CAAA,EAAA,aAMA,CALA,CAKA,CAHA,QAAA,CAAA,aAAA,CAAA,EAAA,CAGA,CAAA,KAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,SAAA,CAAA,CAAA,CAGA,GAFA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,KAAA,aAAA,KAAA,CAEA,CAAA,WAAA,GAAA,KAAA,WAAA,CAAA,CACA,KAAA,WAAA,CAAA,WADA,IAEA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,aAAA,KAAA,CAAA,SAAA,CAFA,CAGA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,OAAA,CAHA,CAIA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAJA,CAKA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CALA,CAMA,KAAA,CAAA,IAAA,CAAA,KAAA,WAAA,CANA,CAOA,iBAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,KAAA,MAAA,CAAA,KAAA,CAAA,CACA,CA4BA,GA1BA,KAAA,QA0BA,GAxBA,SAAA,CAAA,CAAA,CAAA,WAAA,CAAA,KAAA,QAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,OAAA,EAAA,CAAA,OAAA,CAAA,KAAA,EAAA,CAAA,CAAA,OAAA,CAAA,SAAA,EAAA,OAAA,CAAA,SAAA,EAAA,IAAA,CAAA,aACA,CAFA,CAwBA,CApBA,SAoBA,GAnBA,KAAA,QAAA,CAAA,SAAA,EAAA,KAAA,GAmBA,CAhBA,cAgBA,CAjBA,CAAA,CAAA,UAAA,CAAA,KAAA,QAAA,CAAA,SAAA,EAAA,OAAA,CAiBA,CAhBA,KAAA,QAAA,CAAA,SAAA,EAAA,OAAA,CAAA,KAAA,aAAA,CAgBA,CAdA,KAAA,QAAA,CAAA,SAAA,EAAA,OAcA,CAJA,KAAA,OAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,QAAA,CAAA,SAAA,EAAA,KAAA,CAIA,GAAA,KAAA,uBAAA,CAAA,CAEA,GAAA,CAAA,qBAAA,CAAA,CAAA,CAAA,WAAA,CAAA,KAAA,uBAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,OAAA,EAAA,CAAA,OAAA,CAAA,KAAA,EAAA,CAAA,CAAA,OAAA,CAAA,SAAA,EAAA,OAAA,CAAA,SAAA,EAAA,IAAA,CAAA,aACA,CAFA,CAAA,CAIA,qBANA,GAOA,KAAA,uBAAA,CAAA,qBAAA,EAAA,KAAA,GAPA,CAgBA,KAAA,OAAA,CAAA,kBAAA,CAAA,KAAA,uBAAA,CAAA,qBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,aAAA,CAAA,KAAA,uBAAA,CAAA,qBAAA,EAAA,KAAA,CAhBA,CAkBA,CASA,KAAA,OAAA,CAAA,QAAA,CAAA,KAAA,aAAA,CAAA,WAAA,CACA,CAEA,CAAA,QAAA,aA5EA,EA6EA,KAAA,QAAA,EAEA,CAEA,MAAA,KACA,CAjGA,CAwGA,KAAA,CAAA,UAAA,CAYA,MAXA,MAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,SAAA,CAAA,EAAA,KAAA,EAAA,CAAA,WAAA,CAWA,GAVA,KAAA,MAAA,EAUA,CATA,KAAA,QAAA,CAAA,SAAA,IASA,CAHA,KAAA,OAAA,CAAA,OAAA,CAGA,EAAA,IACA,CArHA,CA4HA,IAAA,CAAA,UAAA,CAWA,MAVA,MAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,SAAA,CAUA,GATA,KAAA,QAAA,CAAA,SAAA,IASA,CAHA,KAAA,OAAA,CAAA,MAAA,CAGA,EAAA,IACA,CAxIA,CAmJA,QAAA,CAAA,UAAA,CAaA,MAZA,MAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,KAAA,EAAA,CAAA,WAAA,CAYA,GAXA,KAAA,IAAA,EAWA,CAVA,KAAA,QAAA,CAAA,WAAA,IAUA,CAHA,KAAA,OAAA,CAAA,cAAA,CAGA,EAAA,IACA,CAjKA,CAAA,CAkKA,QAlKA,CAAA,CAkKA,EAlKA,CAkKA,MAlKA,CAkKA,UAAA,CACA,KAAA,aAAA,CAAA,KAAA,MAAA,CAAA,aADA,CAEA,KAAA,mBAAA,CAAA,KAAA,MAAA,CAAA,mBAFA,CAIA,KAAA,MAAA,CAAA,QAJA,GAKA,KAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CAAA,QAAA,CAAA,WAAA,CALA,EAQA,KAAA,MAAA,CAAA,uBARA,GASA,KAAA,uBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CAAA,uBAAA,CAAA,WAAA,CATA,EAaA,KAAA,MAAA,CAAA,UAAA,CACA,CAhLA,EAgLA,EAhLA,CAgLA,QAhLA,CAgLA,UAAA,CACA,KAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,UAAA,EAAA,CADA,CAEA,iBAAA,CAAA,GAAA,CAAA,qBAAA,CAAA,KAAA,UAAA,EAAA,CAFA,CAIA,UAAA,MAAA,CAAA,eAJA,EAKA,KAAA,CAAA,IAAA,CAAA,WAAA,CAAA,MAAA,CAAA,KAAA,aAAA,KAAA,CAAA,CAEA,CAvLA,EAuLA,EAvLA,CAuLA,MAvLA,CAuLA,SAAA,OAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,gBAAA,CACA,KAAA,CAAA,KAAA,EAAA,SAFA,CAIA,KAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAJA,GAKA,KAAA,CAAA,WAAA,CAAA,uDAAA,EAAA,QAAA,CAAA,OAAA,MAAA,CAAA,KAAA,CAAA,CALA,CAOA,UAAA,MAAA,CAAA,cAPA,GAQA,gBAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,UAAA,EAAA,CAAA,OAAA,CAAA,CACA,OAAA,CAAA,QADA,CAEA,KAAA,CAAA,KAFA,CAGA,SAAA,CAAA,QAHA,CAAA,CARA,CAaA,gBAAA,CAAA,IAAA,EAbA,CAcA,UAAA,CAAA,UAAA,CACA,gBAAA,CAAA,IAAA,EADA,CAEA,gBAAA,CAAA,OAAA,EACA,CAHA,CAGA,cAAA,CAAA,KAAA,CAAA,EAAA,GAHA,CAdA,EAoBA,CA3MA,CAPA,CACA,KADA,CAEA,iBAFA,CAyNA,MANA,CAAA,SAAA,CAAA,WAAA,CAAA,YAAA,CAMA,CAJA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,SAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAFA,CAIA,CAAA,SACA,CAnUA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAJA,CAKA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SALA,CAMA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UANA,CAOA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAPA,CAQA,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OARA,CASA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,MAAA,CA4BA,MAzBA,CAAA,MAAA,EAAA,0CAyBA,EAxBA,MAAA,CAAA,OAAA,CAAA,EAwBA,EAxBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAwBA,EAvBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAuBA,CAvBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAuBA,EAtBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,iBAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,IAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,kBAiBA,EAhBA,MAAA,CAAA,OAAA,CAAA,KAgBA,EAhBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAeA,CAfA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAeA,EAdA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,aAaA,EAZA,MAAA,CAAA,OAAA,CAAA,KAYA,EAZA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAYA,EAXA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAWA,CAXA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAWA,EAVA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCASA,EARA,MAAA,CAAA,OAAA,CAAA,KAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,8BAKA,EAJA,MAAA,CAAA,OAAA,CAAA,KAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uIACA,CAAA,MACA,CAhCA,CAXA,CAwEA,QAAA,CAAA,CACA,eAAA,GADA,CAEA,cAAA,GAFA,CAxEA,CAgFA,cAAA,CAAA,CACA,IAAA,CAAA,GADA,CAEA,OAAA,CAAA,GAFA,CAGA,OAAA,CAAA,GAHA,CAIA,MAAA,CAAA,GAJA,CAKA,KAAA,CAAA,GALA,CAhFA,CAuUA,MAAA,CAAA,gBAEA,CAzUA,C,CCCA,MAAA,CAAA,qEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,C,CCDA,MAAA,CAAA,6DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,cAAA,CAAA,UAAA,CAAA,8DAAA,CAAA,YAAA,CAAA,yEAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,KAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,CAAA,aAkCA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAyCA,QAAA,CAAA,eAAA,CAAA,MAAA,CAAA,IAOA,CAAA,QAAA,CAAA,SAAA,CAAA,CAUA,MAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,QAAA,CAAA,EAFA,CAIA,gBAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAJA,CAqBA,MAfA,CAAA,gBAAA,CAAA,MAeA,EAdA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,SAAA,OAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CACA,CAFA,CAcA,CARA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,EAAA,CAAA,CACA,WAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CADA,CAEA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAFA,CAIA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,EAAA,CAAA,KAAA,CAAA,CAEA,CANA,CAQA,CAAA,OAAA,CAAA,GAAA,CAAA,QAAA,EAAA,IAAA,CAAA,SAAA,OAAA,CAAA,CAeA,MAbA,EAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAaA,CAZA,KAAA,CAAA,IAAA,CAAA,eAAA,CAYA,CAVA,KAAA,CAAA,IAAA,CAAA,eAAA,CAUA,CADA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CACA,CAAA,OACA,CAhBA,CAiBA,CAhDA,CAsDA,SAAA,CAAA,UAAA,CACA,MAAA,MAAA,MACA,CAxDA,CAuEA,QAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CADA,MAGA,MAAA,EAAA,CAAA,UAAA,GAAA,WAAA,QAAA,MAAA,MAAA,CAAA,EAAA,CAHA,CAIA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,cADA,CAAA,CAAA,CAAA,CAEA,EAFA,CAEA,QAFA,CAEA,UAAA,CAGA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAHA,CAIA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,SAAA,CAAA,IAJA,CAYA,IAAA,CAAA,OAAA,CAAA,aAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAZA,CAmBA,IAAA,CAAA,OAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAnBA,CAoBA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CACA,CAvBA,EAuBA,EAvBA,CAuBA,OAvBA,CAuBA,UAAA,CAMA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CACA,CA9BA,EA8BA,EA9BA,CA8BA,MA9BA,CA8BA,UAAA,CAMA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CACA,CArCA,EAqCA,EArCA,CAqCA,KArCA,CAqCA,UAAA,CAMA,IAAA,CAAA,OAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CACA,CA5CA,EA4CA,EA5CA,CA4CA,QA5CA,CA4CA,SAAA,KAAA,CAAA,CACA,IAAA,CAAA,MAAA,CAAA,EAAA,CADA,GAEA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,KAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,mBAAA,CAFA,CAKA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,aAAA,CAAA,KALA,CAOA,CAnDA,CAAA,CAoDA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,MAAA,CAAA,kBAAA,CAAA,CACA,CAtDA,CAJA,CA6DA,OAAA,CAAA,OAAA,IACA,CArIA,CAgJA,WAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,OACA,MAAA,EAAA,CAAA,UAAA,GAAA,WAAA,QAAA,MAAA,MAAA,CAAA,EAAA,CADA,EAEA,KAAA,MAAA,CAAA,EAAA,EAAA,aAAA,CAAA,KAAA,CAAA,aAFA,CAGA,KAAA,MAAA,CAAA,EAAA,EAAA,mBAAA,CAAA,KAAA,CAAA,mBAHA,CAIA,KAAA,MAAA,CAAA,EAAA,EAAA,SAAA,CAAA,KAAA,CAAA,SAJA,CAMA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,yBAAA,CANA,GAOA,KAAA,MAAA,CAAA,EAAA,EAAA,yBAAA,CAAA,KAAA,CAAA,yBAPA,EAUA,KAAA,MAAA,CAAA,EAAA,EAAA,SAVA,EAWA,KAAA,MAAA,CAAA,EAAA,EAAA,SAAA,CAAA,MAAA,CAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,mBAAA,CAXA,CAcA,KAAA,OAAA,CAAA,aAAA,CAAA,QAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,CAdA,CAqBA,KAAA,OAAA,CAAA,aAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,CArBA,CAsBA,OAAA,CAAA,OAAA,CAAA,KAAA,MAAA,CAAA,EAAA,CAAA,CAtBA,EAyBA,OAAA,CAAA,OAAA,IACA,CA1KA,CAoLA,WAAA,CAAA,SAAA,EAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CADA,MAGA,MAAA,EAAA,CAAA,UAAA,GAAA,WAAA,QAAA,MAAA,MAAA,CAAA,EAAA,CAHA,CAIA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CAIA,GAAA,CAAA,OAAA,CAAA,UAAA,CAEA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,WAAA,CAAA,CAGA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CALA,CAMA,IAAA,CAAA,OAAA,CAAA,aAAA,CAAA,QAAA,CAAA,OAAA,CANA,CAaA,IAAA,CAAA,OAAA,CAAA,aAAA,CAAA,OAAA,CAbA,CAcA,OAAA,CAAA,OAAA,CACA,CAfA,CAiBA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,SArBA,CAsBA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EAAA,CAAA,SAAA,CAAA,OAAA,EAAA,OAAA,EAtBA,CAwBA,OAAA,EAEA,CA1BA,CAJA,CAiCA,OAAA,CAAA,OAAA,EACA,CAtNA,CA4NA,KAAA,CAAA,UAAA,CAOA,MANA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,SADA,EAEA,KAAA,CAAA,SAAA,CAAA,KAAA,EAEA,CAJA,CAMA,CAAA,IACA,CApOA,CA0OA,IAAA,CAAA,UAAA,CAOA,MANA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,SADA,EAEA,KAAA,CAAA,SAAA,CAAA,IAAA,EAEA,CAJA,CAMA,CAAA,IACA,CAlPA,CAyPA,aAAA,CAAA,UAAA,CAkBA,MAjBA,MAAA,EAAA,CAAA,UAAA,GAAA,KAAA,MAAA,CAAA,OAAA,CAAA,OAiBA,GAhBA,KAAA,EAAA,CAAA,KAAA,CAgBA,EAfA,KAAA,QAAA,CAAA,KAAA,IAeA,CAdA,eAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,aAAA,CAAA,CAcA,GAZA,KAAA,QAAA,CAAA,KAAA,IAYA,CAXA,eAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,aAAA,CAAA,CAWA,EAHA,KAAA,OAAA,CAAA,WAAA,CAAA,KAAA,EAAA,CAAA,KAAA,CAAA,CAGA,EAAA,IACA,CA5QA,CAAA,CA6QA,QA7QA,CAAA,CA6QA,EA7QA,CA6QA,MA7QA,CA6QA,UAAA,CAEA,KAAA,MAAA,CAAA,EACA,CAhRA,EAgRA,EAhRA,CAgRA,QAhRA,CAgRA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,QAAA,CAAA,KAAA,UAAA,EAFA,CAIA,mBAAA,CAAA,GAAA,CAAA,gBAAA,CAAA,QAAA,CAJA,CAMA,KAAA,MAAA,CAAA,OAAA,CAAA,OANA,GAOA,eAAA,CAAA,GAAA,CAAA,gBAAA,CAAA,QAAA,CAPA,CAQA,IAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CARA,CASA,eAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,aAAA,EACA,CAHA,CATA,EAgBA,KAAA,MAAA,CAAA,MAhBA,EAiBA,KAAA,MAAA,CAAA,KAAA,MAAA,CAAA,MAAA,CAEA,CAnSA,CAPA,CACA,eADA,CAEA,mBAFA,CAiTA,MANA,CAAA,QAAA,CAAA,WAAA,CAAA,WAAA,CAMA,CAJA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,QAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAFA,CAIA,CAAA,QACA,CA9XA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SALA,CAMA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KANA,CAOA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAPA,CAQA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UARA,IAUA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAIA,MAHA,CAAA,MAAA,EAAA,8DACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAAA,EADA,CAEA,iEACA,CAAA,MACA,CAXA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAmBA,MARA,CAAA,MAAA,EAAA,iCAQA,CAPA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,EAAA,CAAA,GAAA,MAMA,IANA,MAAA,EAAA,MAMA,EALA,MAAA,EAAA,mDAKA,EAJA,MAAA,CAAA,OAAA,CAAA,UAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,6BACA,CAAA,MACA,CAvBA,CAVA,CA4DA,QAAA,CAAA,CACA,OAAA,CAAA,CACA,OAAA,GADA,CAEA,WAAA,GAFA,CADA,CA5DA,CAkYA,MAAA,CAAA,eAEA,CApYA,C,CCAA,MAAA,CAAA,gEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAyEA,MArCA,UAAA,UAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CADA,SAGA,KAAA,EAAA,KAAA,GAAA,KAAA,CAAA,IAAA,EAAA,MAAA,GAAA,KAAA,CAAA,KAAA,EAAA,QAAA,EAAA,QAAA,CAAA,QAHA,GAIA,CACA,IAAA,CAAA,cADA,CAMA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,EAAA,CAAA,uBAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,YAAA,CACA,CAFA,CADA,CAIA,UAAA,CAAA,OAAA,CAAA,YAAA,CACA,CAXA,CAgBA,QAAA,CAAA,UAAA,CACA,KAAA,QAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,WAAA,CACA,CAnBA,CAwBA,QAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,uBAAA,CACA,CA1BA,CA+BA,CAIA,CA3EA,C,CCAA,MAAA,CAAA,6DAAA,CAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,aAAA,aA6CA,IAAA,CAAA,GA7CA,CAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,IAsBA,CAAA,qBAAA,CAAA,CAtBA,CAwFA,MA1DA,UAAA,UAAA,CAAA,KAAA,CAAA,CAOA,GAAA,CAAA,cAAA,CAAA,UAAA,CACA,CAAA,CAAA,QAAA,CAAA,KAAA,CAAA,SAAA,GAAA,CAAA,CAAA,KAAA,CAAA,SAAA,EAAA,CAAA,KAAA,CAAA,cADA,GAEA,KAAA,CAAA,cAAA,GAFA,CAGA,UAAA,CAAA,MAAA,CAAA,gDAAA,CAAA,UAAA,IACA,CAAA,iBAAA,CAAA,CADA,CAEA,WAAA,CAAA,UAAA,CAAA,cAAA,EAFA,CAIA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,SAJA,GAKA,iBAAA,CAAA,SAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,aAAA,CAAA,CAAA,MALA,CAMA,qBAAA,CAAA,SAAA,iBAAA,CAAA,qBAAA,CAAA,WAAA,CAAA,SAAA,CAAA,QAAA,CANA,CAOA,UAAA,CAAA,QAAA,GAAA,mBAAA,CAAA,CACA,iBAAA,CAAA,qBADA,CAAA,CAPA,CAWA,CAXA,EAWA,KAXA,CAWA,gDAXA,CAWA,UAAA,CACA,qBAAA,CAAA,CACA,CAbA,CAHA,CAkBA,CAlBA,CAPA,SA2BA,KAAA,EAAA,KAAA,GAAA,KAAA,CAAA,IA3BA,GA4BA,CACA,IAAA,CAAA,WADA,CAMA,KAAA,CAAA,UAAA,CACA,cAAA,EACA,CARA,CAaA,KAAA,CAAA,UAAA,CAEA,cAAA,EACA,CAhBA,CAqBA,QAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,gDAAA,CACA,CAvBA,CA4BA,CAIA,CA1FA,C,CCAA,MAAA,CAAA,oEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAoEA,MA9BA,UAAA,UAAA,CAAA,KAAA,CAAA,IACA,CAAA,iBAAA,CAAA,UAAA,CAAA,UAAA,EADA,CAEA,QAAA,CAAA,UAAA,CAAA,cAAA,EAFA,UAIA,KAAA,EAAA,QAAA,GAAA,KAAA,CAAA,IAAA,EAAA,MAAA,GAAA,KAAA,CAAA,KAAA,EAAA,KAAA,iBAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,CAAA,QAJA,GAKA,CACA,IAAA,CAAA,kBADA,CAMA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,SAAA,CACA,CARA,CAaA,QAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,gCAAA,CADA,CAEA,UAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CACA,CAFA,CAEA,GAFA,CAGA,CAlBA,CAuBA,CAIA,CAtEA,C,CCAA,MAAA,CAAA,2DAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAqDA,MAnBA,UAAA,UAAA,CAAA,KAAA,CAAA,UACA,KAAA,EAAA,KAAA,GAAA,KAAA,CAAA,IADA,GAEA,CACA,IAAA,CAAA,SADA,CAMA,QAAA,CAAA,UAAA,CACA,GAAA,KAAA,CAAA,YAAA,EAAA,KAAA,CAAA,MAAA,CACA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAEA,CAVA,CAeA,CAIA,CAvDA,C,CCAA,MAAA,CAAA,uCAAA,CAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,IA0BA,CAAA,qBAAA,CAAA,CACA,MAAA,CAAA,MADA,CAEA,QAAA,CAAA,MAFA,CAGA,OAAA,CAAA,MAHA,CAIA,MAAA,CAAA,QAJA,CA1BA,CAqCA,kCAAA,CAAA,CACA,gBAAA,CAAA,iBADA,CAEA,iBAAA,CAAA,YAFA,CAGA,gBAAA,CAAA,YAHA,CAIA,oBAAA,CAAA,iBAJA,CAKA,kBAAA,CAAA,YALA,CAMA,kBAAA,CAAA,YANA,CAOA,uBAAA,CAAA,YAPA,CAQA,2BAAA,CAAA,iBARA,CASA,sBAAA,CAAA,YATA,CArCA,CAoDA,iBAAA,CAAA,CAMA,eAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,MAAA,CAAA,UAAA,CACA,MAAA,CAAA,UAAA,CAAA,KAAA,EAAA,UAAA,CAAA,KAAA,CAAA,SACA,CATA,CAiBA,sBAAA,CAAA,SAAA,MAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,IAAA,CAWA,MATA,CAAA,CAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,eAAA,CAAA,MAAA,CAAA,CAAA,SAAA,WAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,EAAA,EAAA,CAEA,GAAA,UAAA,CAAA,UAAA,GAAA,UAAA,CAEA,MADA,CAAA,KAAA,CAAA,WACA,GAEA,CAPA,CASA,CAAA,KACA,CA9BA,CAuCA,UAAA,CAAA,SAAA,KAAA,CAAA,QAAA,CAAA,WAAA,CAAA,IACA,CAAA,iBAAA,CAAA,qBAAA,CAAA,WAAA,CADA,CAEA,QAAA,CAAA,EAFA,CAIA,CAAA,CAAA,QAAA,CAAA,KAAA,CAJA,GAKA,KAAA,CAAA,CAAA,KAAA,CALA,EAQA,GAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CACA,MAAA,CAAA,CACA,CAFA,CAmCA,MA/BA,SAAA,GAAA,QA+BA,CA9BA,SAAA,CAAA,SAAA,CAAA,CAAA,CACA,MAAA,KAAA,CAAA,EAAA,MAAA,GAAA,CACA,CA4BA,EA3BA,cAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QA2BA,IA1BA,SAAA,CAAA,SAAA,CAAA,CAAA,OACA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CADA,CAEA,CAAA,CAAA,KAAA,CAAA,GAAA,CAFA,CAKA,CACA,CAoBA,EAjBA,KAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,EAAA,EAAA,CAAA,SAAA,CAiBA,CAfA,iBAeA,GAdA,MAAA,GAAA,iBAcA,CAbA,CAAA,GAAA,KAAA,CAAA,MAaA,CAXA,QAAA,CAAA,IAAA,CAAA,IAWA,EATA,QAAA,CAAA,IAAA,CAAA,EASA,CARA,QAAA,CAAA,IAAA,CAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAQA,GALA,QAAA,CAAA,iBAAA,CAAA,CAAA,EAKA,CAJA,QAAA,CAAA,iBAAA,CAAA,CAAA,QAAA,EAAA,KAIA,GAAA,QACA,CAnFA,CA4FA,cAAA,CAAA,SAAA,KAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,qBAAA,CAAA,WAAA,CAAA,CAUA,MARA,CAAA,CAAA,CAAA,QAAA,CAAA,KAAA,GAAA,IAAA,GAAA,KAAA,CAAA,iBAAA,CAQA,GAPA,KAAA,CAAA,IAOA,EAJA,CAAA,CAAA,QAAA,CAAA,KAAA,GAAA,KAAA,CAAA,iBAAA,CAAA,EAAA,aAAA,MAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,CAAA,QAAA,CAIA,GAHA,KAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,CAAA,QAAA,CAGA,EAAA,OAAA,KAAA,EAAA,WAAA,QAAA,EAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA,QAAA,GAAA,WAAA,EAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CACA,CAxGA,CAmHA,kBAAA,CAAA,SAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,YAAA,CAAA,eAAA,CAAA,IAEA,CAAA,aAAA,GAFA,CACA,QADA,CACA,kBADA,CACA,SADA,CAoBA,MAjBA,CAAA,YAAA,CAAA,YAAA,EAAA,IAiBA,CAhBA,eAAA,CAAA,eAAA,EAAA,CAgBA,CAdA,iBAAA,CAAA,cAAA,CAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAcA,CAbA,QAAA,GAaA,EAXA,QAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,YAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAWA,CATA,CAAA,GAAA,eASA,GARA,kBAAA,CAAA,qBAAA,CAAA,WAAA,CAQA,CAPA,SAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,QAAA,GAAA,EAOA,CANA,aAAA,CAAA,SAAA,EAAA,SAAA,CAAA,MAAA,EAAA,eAMA,EAHA,QAAA,CAAA,QAAA,EAAA,aAGA,EAAA,QACA,CAxIA,CAyIA,gCAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,UAAA,CAAA,MAAA,CAAA,UADA,CAEA,QAAA,CAAA,UAAA,CAAA,KAAA,EAAA,UAAA,CAAA,KAAA,CAAA,GAAA,EAAA,EAFA,CAGA,YAAA,CAAA,QAAA,CAAA,QAAA,EAAA,EAHA,CAIA,gBAAA,CAAA,EAJA,CAiBA,MAXA,CAAA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,EAAA,EADA,CAEA,QAAA,CAAA,WAAA,CAAA,SAAA,CAAA,QAFA,CAGA,kBAHA,CAKA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kCAAA,CAAA,QAAA,CALA,GAMA,kBAAA,CAAA,kCAAA,CAAA,QAAA,CANA,CAOA,gBAAA,CAAA,UAAA,CAAA,kBAAA,CAAA,CAAA,UAAA,CAAA,kBAAA,CAPA,CASA,CATA,CAWA,CAAA,gBACA,CA3JA,CAoKA,UAAA,CAAA,SAAA,MAAA,CAAA,SAAA,CAAA,IACA,CAAA,UAAA,CAAA,MAAA,CAAA,UADA,CAEA,SAAA,CAAA,UAAA,EAAA,UAAA,CAAA,YAAA,EAFA,CAGA,KAAA,CAAA,CAHA,CAIA,KAAA,CAAA,CAJA,CAKA,YALA,CAKA,gBALA,OAOA,CAAA,UAPA,GAQA,YAAA,CAAA,iBAAA,CAAA,eAAA,CAAA,MAAA,CARA,CASA,gBAAA,CAAA,iBAAA,CAAA,gCAAA,CAAA,MAAA,CATA,CAWA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,EAAA,EADA,CAEA,QAAA,CAAA,SAAA,CAAA,UAAA,CAAA,UAAA,CAFA,CAGA,QAAA,CAAA,UAAA,CAAA,QAHA,CAIA,WAAA,CAAA,UAAA,CAAA,WAJA,CAKA,KAAA,EALA,CAOA,iBAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAPA,EAQA,KAAA,EAEA,CAVA,CAXA,EAwBA,KAAA,SAxBA,CAyBA,CAAA,CAAA,KAAA,EAAA,CAAA,GAAA,KAzBA,CA4BA,CAAA,CAAA,KAAA,EAAA,KAAA,CAAA,KACA,CAjMA,CAyMA,eAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,UAAA,CAAA,MAAA,CAAA,UADA,CAEA,QAAA,CAAA,UAAA,CAAA,KAAA,EAAA,UAAA,CAAA,KAAA,CAAA,GAAA,EAAA,EAFA,CAGA,YAAA,CAAA,QAAA,CAAA,QAAA,EAAA,EAHA,CAIA,MAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,MAAA,GAAA,MAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,SAAA,GAAA,OAAA,CAAA,QACA,CAFA,EAEA,KAFA,CAEA,YAFA,EAEA,KAFA,CAEA,MAFA,EAEA,KAFA,EAGA,CAhNA,CAwNA,mBAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,OAAA,CAAA,KAAA,eAAA,CAAA,MAAA,CADA,CAEA,WAFA,OAIA,EAAA,CAAA,OAAA,CAAA,MAJA,EAMA,WAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,YAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,QAAA,CAAA,aAAA,CAAA,4BAAA,MAAA,CAAA,YAAA,CAAA,KAAA,CAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,KAAA,CAAA,QAAA,GAAA,KAAA,CAAA,SACA,CAFA,CAGA,CALA,CANA,CAYA,WAZA,EAeA,EACA,CAxOA,CApDA,CA+RA,MAAA,CAAA,iBAEA,CAjSA,C,CCAA,MAAA,CAAA,iCAAA,CAAA,CAAA,QAAA,CAAA,+BAAA,CAAA,uCAAA,CAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAHA,CAIA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAJA,CAuDA,MAhCA,CAQA,eAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IACA,CAAA,GAAA,CAAA,MAAA,CAAA,UAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,cAAA,EAFA,CAGA,IAAA,CAAA,MAAA,CAAA,cAAA,EAHA,CAIA,QAAA,CAAA,MAAA,CAAA,cAAA,EAJA,CAMA,KAAA,CAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,OAAA,CAAA,YAAA,CAAA,KAAA,CAAA,CANA,CAQA,GAAA,CAAA,IAAA,CAAA,aAAA,CAAA,CACA,GAAA,CAAA,uBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CAEA,CAAA,uBAAA,EAAA,IAAA,CAAA,QAHA,CAIA,KAAA,CAAA,QAAA,EAJA,CAKA,CAAA,uBAAA,EAAA,IAAA,GAAA,CAAA,IAAA,CAAA,QALA,CAMA,KAAA,CAAA,QAAA,EANA,CAOA,IAAA,EAAA,CAAA,uBAAA,EAAA,IAAA,CAAA,QAAA,EAAA,QAAA,CAAA,QAPA,EAQA,KAAA,CAAA,QAAA,EAEA,CAEA,MAAA,CAAA,KACA,CA7BA,CAkCA,CAzDA,C,CCAA,MAAA,CAAA,oCAAA,CAAA,CAAA,MAAA,CAAA,iCAAA,CAAA,YAAA,CAAA,CAAA,SAAA,EAAA,CAAA,WAAA,CAAA,UAAA,CAAA,CAAA,aA0BA,QAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAsDA,QAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,EAAA,CAUA,MARA,SAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KAQA,CAPA,MAAA,CAAA,EAAA,CAAA,sCAAA,CAOA,CANA,MAAA,GAAA,KAAA,EAAA,8BAAA,GAAA,KAMA,CALA,MAAA,CAAA,EAAA,CAAA,mCAAA,CAKA,CAJA,MAAA,GAAA,KAIA,GAHA,MAAA,CAAA,EAAA,CAAA,yCAAA,CAGA,EAAA,gBAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,IAAA,EADA,CAAA,CAGA,CASA,QAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,IACA,CAAA,iBAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CADA,CAEA,GAFA,OAKA,SALA,GAIA,KAJA,EAMA,aANA,GAIA,KAJA,EAOA,MAPA,GAIA,KAJA,EAQA,GAAA,CAAA,EAAA,CAAA,0BAAA,CAAA,iBAAA,CAAA,CAAA,IAAA,EARA,CAUA,GAVA,GAWA,GAAA,EAAA,GAXA,EAcA,GAdA,EAgBA,MAhBA,GAIA,KAJA,EAiBA,8BAjBA,GAIA,KAJA,CAkBA,GAAA,MAAA,CAAA,EAAA,CAAA,wGAAA,CAAA,iBAAA,CAAA,CAlBA,CAqBA,EACA,CASA,QAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,IACA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EADA,CAEA,YAAA,CAAA,KAAA,EAAA,KAAA,CAAA,OAFA,OAIA,CAAA,YAJA,CAQA,OARA,CASA,GAAA,MAAA,CAAA,OAAA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,CAAA,oDAAA,CAAA,YAAA,CAAA,QAAA,EAAA,CAAA,CATA,CAYA,EAAA,CAAA,gDAAA,CAAA,YAAA,CAAA,QAAA,EAAA,CAZA,CAKA,OAQA,CAUA,QAAA,CAAA,yBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IACA,CAAA,KAAA,CAAA,WAAA,CAAA,eAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CADA,CAEA,eAAA,CAAA,KAAA,EAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAFA,CAGA,YAAA,CAAA,KAAA,EAAA,KAAA,CAAA,OAHA,CAIA,iBAAA,CAAA,EAJA,CAmCA,MA7BA,SAAA,GAAA,KAAA,EAAA,aAAA,GAAA,KA6BA,EA5BA,iBAAA,CAAA,EAAA,CAAA,gEAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,EAAA,CAAA,KAAA,CAAA,SAAA,CAAA,QAAA,EAAA,CA4BA,CA1BA,YA0BA,GAzBA,iBAAA,EAAA,KAAA,MAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,QAAA,EAAA,CAAA,CAyBA,GAvBA,MAAA,GAAA,KAAA,EAAA,8BAAA,GAAA,KAuBA,EAtBA,CAAA,CAAA,eAsBA,CArBA,iBAAA,CAAA,EAAA,CAAA,mCAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAqBA,CApBA,CAAA,GAAA,eAoBA,GAnBA,iBAAA,CAAA,EAAA,CAAA,iCAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAmBA,EAhBA,YAgBA,GAfA,iBAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,iBAAA,CAeA,GAbA,MAAA,GAAA,KAaA,GAZA,CAAA,CAAA,eAYA,CAXA,iBAAA,CAAA,EAAA,CAAA,4DAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAWA,CAVA,CAAA,GAAA,eAUA,GATA,iBAAA,CAAA,EAAA,CAAA,0DAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CASA,EANA,YAMA,GALA,iBAAA,CAAA,sBAAA,CAAA,KAAA,CAAA,iBAAA,CAKA,GADA,iBAAA,CAAA,iBAAA,CAAA,IAAA,EACA,CAAA,iBACA,CAlMA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,IAMA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,KAKA,EAJA,MAAA,CAAA,OAAA,CAAA,MAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,cACA,CAAA,MACA,CAbA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAHA,MAgBA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAhBA,CAiBA,MAAA,EAAA,CAAA,GAAA,MAjBA,CAiBA,MAjBA,CAkBA,EACA,CAnBA,CANA,CA0MA,MAJA,CACA,cAAA,CA7IA,SAAA,KAAA,CAAA,MAAA,CAAA,IACA,CAAA,OAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EADA,CAEA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,OAFA,CAGA,iBAAA,CAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,OAHA,CAIA,iBAAA,CAAA,EAJA,CAKA,iBAAA,CAAA,MAAA,CAAA,UAAA,EALA,CAMA,cAAA,CAAA,iBAAA,CAAA,4BANA,CAgBA,MARA,CAAA,cAQA,GAPA,iBAAA,CAAA,yBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,EAOA,CALA,iBAKA,GAJA,iBAAA,EAAA,GAIA,GAAA,GAAA,MAAA,CAAA,SAAA,CAAA,KAAA,CAAA,EAAA,MAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,EAAA,MAAA,CAAA,OAAA,EAAA,IAAA,EACA,CA2HA,CAMA,CA5MA,C,CCAA,MAAA,CAAA,iCAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAwBA,GAAA,CAAA,MAAA,CAAA,CAEA,WAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CACA,OAAA,CAAA,CADA,CAEA,WAAA,CAAA,CAFA,CAGA,aAAA,CAAA,CAHA,CAIA,SAAA,CAAA,CAJA,CAKA,MAAA,CAAA,CALA,CAAA,CAFA,CAUA,WAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CACA,OAAA,CAAA,CADA,CAEA,WAAA,CAAA,CAFA,CAGA,aAAA,CAAA,CAHA,CAIA,SAAA,CAAA,CAJA,CAKA,MAAA,CAAA,CALA,CAMA,QAAA,CAAA,CANA,CAOA,WAAA,CAAA,GAPA,CAAA,CAVA,CAAA,CAqBA,MAAA,CAAA,MAEA,CA/CA,C,CCAA,MAAA,CAAA,sEAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,oCAAA,CAAA,sCAAA,CAAA,iCAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBALA,CAMA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MANA,CAOA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAPA,CA8BA,GAAA,CAAA,WAAA,CAAA,EAAA,CAAA,8EAAA,CAAA,CA+FA,MAtFA,UAAA,UAAA,CAAA,KAAA,CAAA,CAQA,GAAA,CAAA,iBAAA,CAAA,SAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IACA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,GAAA,CAAA,UAAA,CAAA,UAAA,EAFA,SAIA,OAAA,CAAA,SAAA,EAAA,OAAA,CAAA,gBAAA,GAAA,MAAA,CAAA,WAAA,CAAA,MAAA,EAAA,OAAA,CAAA,SAAA,GAAA,KAAA,CAAA,MAJA,GAKA,gBAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAIA,CATA,CARA,SAmBA,KAAA,EAAA,SAAA,GAAA,KAAA,CAAA,KAAA,EAAA,KAAA,GAAA,KAAA,CAAA,IAnBA,GAoBA,CACA,IAAA,CAAA,oBADA,CAMA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,6CAAA,EAAA,MAAA,CAAA,6CAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,WAAA,CAAA,iBAAA,CAAA,KAAA,EAAA,EAJA,CAKA,cAAA,CAAA,WAAA,CAAA,cALA,CAMA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,cAAA,CANA,CAOA,cAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,gBAAA,IAPA,CAQA,yBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,2BAAA,IARA,CASA,WAAA,CAAA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CAEA,GAAA,MAAA,EAAA,cAAA,CACA,OAAA,EADA,KAEA,IAAA,iBAAA,CAAA,IAAA,EAAA,MAAA,CAAA,KAAA,CAAA,QAAA,CAAA,EAAA,CAAA,yBAAA,EAAA,CAAA,WAAA,CAAA,eAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,CAEA,UAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,IAAA,iBAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CACA,OAAA,CAAA,CACA,MAAA,CAAA,CACA,EAAA,CAAA,iBADA,CAEA,MAAA,CAAA,EAAA,CAAA,mBAAA,CAFA,CADA,CADA,CAAA,CAQA,CAXA,IAYA,CAAA,OAAA,EAEA,CAlBA,CATA,CAoCA,MARA,CAAA,WAAA,CAAA,KAAA,CAAA,UAAA,CAIA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,sBAAA,CACA,CAFA,CAGA,CAPA,CAQA,CAAA,WACA,CArCA,CAsCA,CA7CA,CAkDA,QAAA,CAAA,UAAA,CACA,MAAA,MAAA,QAAA,EACA,CApDA,CAyDA,QAAA,CAAA,UAAA,CACA,UAAA,CAAA,GAAA,CAAA,6CAAA,CACA,CA3DA,CAgEA,CAIA,CA/HA,C,CCAA,MAAA,CAAA,mEAAA,CAAA,CAAA,QAAA,CAAA,gEAAA,CAAA,6DAAA,CAAA,oEAAA,CAAA,2DAAA,CAAA,sEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,oBAAA,CAAA,wBAAA,CAAA,eAAA,CAAA,0BAAA,CAAA,CAAA,aAuCA,QAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAMA,CAAA,OAAA,CAAA,EANA,CAaA,iBAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,eAAA,CAAA,CAEA,GAAA,CAAA,CAAA,OAAA,CAAA,OAAA,GAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,CAAA,QAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,yCAAA,CAAA,CAJA,MAOA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAPA,CAWA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,EAEA,CAJA,CAAA,CAXA,CAQA,OAAA,CAAA,OAAA,EAQA,CA7BA,CACA,eADA,CAiCA,GAAA,CAAA,UAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,cAAA,CAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,iDAAA,CAAA,CA6EA,MAtEA,CAAA,eAAA,CAAA,CAMA,KAAA,CAAA,SAAA,KAAA,CAAA,CAUA,MATA,CAAA,CAAA,CAAA,OAAA,CAjBA,UAAA,EAAA,0BAiBA,CAAA,SAAA,iBAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAEA,KAAA,QAHA,GAIA,OAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,EAJA,CAKA,OAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CALA,CAOA,CAPA,CASA,CAAA,iBAAA,CAAA,KAAA,CAAA,EAAA,CAAA,OAAA,CACA,CAjBA,CAuBA,UAAA,CAAA,SAAA,KAAA,CAAA,OACA,CAAA,KAAA,EAAA,KAAA,CAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CADA,CAEA,OAAA,CAAA,KAAA,CAAA,EAAA,CAFA,CAKA,EACA,CA7BA,CAoCA,KAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,EAAA,CAAA,OAAA,CACA,CAtCA,CA6CA,IAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,EAAA,CAAA,MAAA,CACA,CA/CA,CAsDA,QAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,EAAA,CAAA,UAAA,CACA,CAxDA,CAgEA,QAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,iBAAA,CAAA,KAAA,CAAA,EAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CACA,OAAA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA,CACA,CAFA,CAGA,CApEA,CAsEA,CAAA,eACA,CArJA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAHA,CAIA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAJA,CAKA,wBAAA,CAAA,wBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,wBAAA,CAAA,SAAA,CAAA,CAAA,wBAAA,CAAA,SAAA,CAAA,CAAA,wBALA,CAMA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eANA,CAOA,0BAAA,CAAA,0BAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,0BAAA,CAAA,SAAA,CAAA,CAAA,0BAAA,CAAA,SAAA,CAAA,CAAA,0BAPA,CA+BA,GAAA,CAAA,0BAAA,CAAA,CAAA,iBAAA,CAAA,oBAAA,CAAA,wBAAA,CAAA,eAAA,CAAA,0BAAA,CAAA,CA0HA,MAAA,CAAA,kBAEA,CA3JA,C,CCAA,MAAA,CAAA,iDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CAAA,aA8FA,QAAA,CAAA,SAAA,CAAA,eAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IACA,CAAA,MAAA,CAAA,EADA,CAMA,mBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAYA,MAXA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,KAAA,CAAA,GAAA,CAAA,CACA,MAAA,CACA,SAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,EAAA,CADA,CAEA,OAAA,CAAA,SAAA,aAAA,CAAA,CACA,GAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,QAAA,CAAA,aAAA,KAAA,CAAA,SAAA,EAAA,QAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CAAA,gBAAA,CACA,CALA,CAMA,KAAA,CAAA,KANA,CAOA,KAAA,GAPA,CASA,CAVA,CAWA,CAAA,GACA,CAdA,CAcA,EAdA,CANA,CA0BA,kCAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,uBAAA,CAAA,SAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAYA,MAXA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CACA,SAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CAAA,EAAA,CADA,CAEA,OAAA,CAAA,SAAA,aAAA,CAAA,mBAAA,CAAA,CACA,GAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,QAAA,CAAA,aAAA,KAAA,CAAA,SAAA,EAAA,QAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,8BAAA,CAAA,KAAA,CAAA,CAAA,gBAAA,CAAA,mBAAA,CACA,CALA,CAMA,KAAA,CAAA,KANA,CAOA,KAAA,GAPA,CASA,CAVA,CAWA,CAAA,GACA,CAdA,CAcA,EAdA,CA1BA,CAiDA,UAAA,CAAA,SAAA,IAAA,CAAA,cAAA,CAAA,CAeA,GAAA,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,QAAA,CAAA,WAAA,CAAA,cAAA,CAAA,CAAA,CAEA,KAAA,CAAA,IAAA,CAAA,IAjBA,CAkBA,KAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,mBAlBA,CAoBA,KAAA,GAAA,IApBA,EAqBA,KAAA,CAAA,EAAA,CAAA,GAAA,MAAA,CAAA,IAAA,CAAA,GAAA,EAAA,MAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,EAAA,MAAA,CAAA,cAAA,CAAA,MAAA,CArBA,CAsBA,KAAA,CAAA,YAAA,CAAA,KAAA,cAAA,CAAA,OAtBA,CAuBA,KAAA,CAAA,aAAA,CAAA,KAAA,cAAA,CAAA,gBAvBA,GAyBA,KAAA,CAAA,EAAA,CAAA,cAAA,CAAA,MAzBA,CA0BA,KAAA,CAAA,YAAA,CAAA,KAAA,cAAA,CAAA,OA1BA,CA2BA,KAAA,CAAA,aAAA,CAAA,KAAA,cAAA,CAAA,gBA3BA,EA8BA,KAAA,CAAA,yBAAA,CAAA,KAAA,CAAA,aA9BA,CAgCA,KAAA,CAAA,SAhCA,GAiCA,KAAA,CAAA,SAAA,CAAA,QAjCA,OAkCA,KAAA,CAAA,SAAA,CAAA,SAlCA,OAmCA,KAAA,CAAA,SAAA,CAAA,KAnCA,OAoCA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,SAAA,CAAA,KApCA,CAqCA,KAAA,CAAA,aAAA,EAAA,KAAA,CAAA,SAAA,CAAA,SArCA,EAyCA,KAAA,GAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAzCA,GA0CA,KAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,KAAA,CAAA,KAAA,CA1CA,EA6CA,CAAA,CAAA,OAAA,CAAA,kCAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CA7CA,GA8CA,KAAA,CAAA,uBAAA,CAAA,kCAAA,CAAA,KAAA,CAAA,KAAA,CA9CA,EAiDA,GAAA,CAAA,KAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAEA,MADA,CAAA,KAAA,CAAA,mBAAA,CAAA,KAAA,EAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QACA,CAAA,KACA,CArGA,CAoIA,MA7BA,CAAA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,cAAA,CAAA,IACA,CAAA,cAAA,CAAA,CAAA,CAAA,KAAA,CAAA,cAAA,CADA,CAGA,QAHA,CAIA,cAAA,CAAA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,KAAA,EAAA,cAAA,CAAA,YAAA,CAJA,CAMA,cAAA,CAAA,KANA,CAQA,KAAA,cAAA,CAAA,OAAA,EAAA,KAAA,cAAA,CAAA,OARA,CASA,MAAA,CAAA,IAAA,CAAA,gDAAA,CATA,CAUA,MAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,cAAA,CAAA,OAAA,EAAA,cAAA,CAAA,OAAA,EAAA,cAAA,CAAA,OAAA,GAAA,cAAA,CAAA,OAAA,EAAA,CAAA,CAAA,cAAA,CAAA,OAVA,EAWA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,cAAA,CAXA,CAYA,MAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,QAZA,GAeA,QAAA,EAAA,cAAA,CAAA,OAAA,EAAA,CAAA,CAAA,cAAA,CAAA,OAfA,GAgBA,QAAA,CAAA,UAAA,CAAA,KAAA,CAAA,cAAA,CAhBA,CAiBA,MAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,QAjBA,EAqBA,cAAA,CAAA,OAAA,EAAA,CAAA,CAAA,cAAA,CAAA,OArBA,GAsBA,QAAA,CAAA,UAAA,CAAA,KAAA,CAAA,cAAA,CAtBA,CAuBA,MAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,QAvBA,GAOA,MAAA,CAAA,IAAA,CAAA,uEAAA,CAmBA,CA1BA,CA6BA,CADA,MAAA,CAAA,KAAA,CAAA,mCAAA,CAAA,MAAA,CACA,CAAA,MACA,CAjOA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAJA,CAKA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,IAyBA,CAAA,MAAA,CAAA,aAAA,CAAA,iDAAA,CAzBA,CAmCA,MAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,CAAA,MAAA,CAnCA,CAwCA,YAAA,CAAA,CACA,cAAA,CAAA,MADA,CAEA,iBAAA,CAAA,SAFA,CAGA,iBAAA,CAAA,MAHA,CAxCA,CAmDA,QAAA,CAAA,SAAA,KAAA,CAAA,OACA,CAAA,YAAA,CAAA,KAAA,CADA,CAEA,YAAA,CAAA,KAAA,CAFA,CAKA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,KAAA,CALA,CAMA,KANA,CASA,IACA,CA7DA,CAoEA,eAAA,CAAA,CACA,IAAA,CAAA,EAAA,CAAA,6DAAA,CADA,CAEA,OAAA,CAAA,EAAA,CAAA,gEAAA,CAFA,CAGA,QAAA,CAAA,EAAA,CAAA,kEAAA,CAHA,CAIA,IAAA,CAAA,EAAA,CAAA,6DAAA,CAJA,CApEA,CA8EA,8BAAA,CAAA,CACA,IAAA,CAAA,EAAA,CAAA,qDAAA,CADA,CAEA,OAAA,CAAA,EAAA,CAAA,oDAAA,CAFA,CAGA,QAAA,CAAA,EAAA,CAAA,oDAAA,CAHA,CAIA,IAAA,CAAA,EAAA,CAAA,oDAAA,CAJA,CA9EA,CAqOA,MAAA,CAAA,SAEA,CAvOA,C,CCAA,MAAA,CAAA,iDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,mEAAA,CAAA,6DAAA,CAAA,iDAAA,CAAA,gDAAA,CAAA,iCAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,kBAAA,CAAA,eAAA,CAAA,aAAA,CAAA,oBAAA,CAAA,WAAA,CAAA,UAAA,CAAA,CAAA,aAYA,QAAA,CAAA,eAAA,CAAA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAYA,MAXA,CAAA,GAAA,GAAA,CAAA,GAWA,CAVA,MAAA,CAAA,cAAA,CAAA,GAAA,CAAA,GAAA,CAAA,CACA,KAAA,CAAA,KADA,CAEA,UAAA,GAFA,CAGA,YAAA,GAHA,CAIA,QAAA,GAJA,CAAA,CAUA,CAHA,GAAA,CAAA,GAAA,CAAA,CAAA,KAGA,CAAA,GACA,CASA,QAAA,CAAA,2BAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAnCA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,kBAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBALA,CAMA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBARA,CASA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WATA,CAUA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAVA,IA2BA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,6DACA,CANA,CA3BA,CA4CA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,OADA,CAMA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CAQA,KAAA,UAAA,CAAA,SAAA,SAAA,CAAA,MAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,QAAA,CAAA,UAAA,CAAA,cAAA,EAFA,CAGA,QAAA,CAAA,QAAA,EAAA,QAAA,CAAA,QAHA,CAIA,eAAA,CAAA,WAAA,CAAA,eAJA,CAKA,MAAA,CAAA,aAAA,CAAA,eAAA,CAAA,QAAA,CAAA,MAAA,CALA,CAMA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,YAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,EAAA,IAAA,CAAA,SAAA,iBAAA,CAAA,CACA,CAAA,CAAA,QAAA,CAAA,iBAAA,GAAA,CAAA,EAAA,iBAAA,EAAA,MAAA,CAAA,sBADA,GAEA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,iBAFA,CAIA,CAJA,CAKA,CANA,CAAA,EAMA,IANA,CAMA,UAAA,CACA,MAAA,CAAA,MACA,CARA,CASA,CAxBA,CAiCA,KAAA,UAAA,CAAA,SAAA,SAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,YAAA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,KAAA,CAAA,aAAA,CACA,CAFA,CAAA,CAGA,CArCA,CAwCA,UAAA,CAAA,YAAA,GAAA,WAAA,CAAA,KAAA,OAAA,EAAA,CACA,CA/CA,CAsDA,IAAA,CAAA,UAAA,CA0DA,QAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAEA,GAAA,IAAA,CAAA,QAAA,EAAA,WAAA,CAAA,eAAA,CACA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,MAAA,EAAA,IAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,MAAA,CACA,CAFA,EAEA,KAFA,CAEA,WAFA,CAIA,CAlEA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAKA,KAAA,CAAA,EALA,CAIA,gCAJA,CAMA,CAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,MAAA,EAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,eAAA,CAAA,EAAA,CAAA,KAAA,CAAA,WAAA,CAAA,eAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,CACA,CAFA,CANA,IAaA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAIA,kBAAA,GAJA,CASA,QAAA,CAAA,iBAAA,CAAA,YAAA,EAAA,EATA,CAcA,uBAAA,CAAA,iBAAA,CAAA,2BAAA,EAAA,EAdA,CAmBA,gBAAA,CAAA,iBAAA,CAAA,gBAnBA,CAwBA,sBAAA,CAAA,iBAAA,CAAA,KAAA,EAAA,iBAAA,CAAA,KAAA,CAAA,sBAxBA,CA6BA,cAAA,CAAA,KA7BA,CAAA,CA8BA,KAAA,SAAA,EA9BA,CAbA,CAgDA,eAAA,CAAA,kBAAA,CAAA,UAAA,CAhDA,CAsDA,WAAA,CAAA,SAAA,GAAA,CAAA,CACA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CACA,CAxDA,CAoEA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,CAEA,MAAA,CAAA,UAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,SAAA,CAAA,CACA,UAAA,CAAA,MAAA,CAAA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,eAAA,CAAA,SAAA,CACA,CAFA,EAEA,MAFA,CAEA,YAFA,CAEA,UAAA,CACA,GAAA,MAAA,CAAA,sBAAA,CACA,MAAA,CAAA,eAAA,CAAA,SAAA,CAEA,CANA,EAMA,EANA,CAMA,MANA,CAMA,SAAA,OAAA,CAAA,CACA,GAAA,IAAA,CAAA,QAAA,CAAA,IACA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,EADA,CAEA,aAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,GAAA,CAAA,SAAA,CAAA,IACA,CAAA,UAAA,CAAA,WAAA,CAAA,eAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,UAAA,CADA,CAEA,mBAAA,CAAA,UAAA,EAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAFA,CAOA,MAJA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,CACA,aAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,OADA,CAEA,mBAAA,CAAA,mBAFA,CAAA,CAIA,CAAA,GACA,CARA,CAQA,EARA,CAFA,CAWA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,aAAA,EAAA,KAAA,CAAA,WAAA,CACA,CACA,CApBA,EAoBA,KApBA,CAoBA,YApBA,CAoBA,UAAA,CACA,IAAA,CAAA,QADA,GAEA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,UAAA,EAAA,CAAA,CAAA,IAAA,CAAA,gBAAA,EAAA,IAAA,CAAA,aAAA,CAAA,oBAAA,CAAA,UAAA,CAAA,CAFA,CAGA,IAAA,CAAA,QAAA,CAAA,KAAA,EAHA,EAMA,IAAA,CAAA,6BAAA,CAAA,IAAA,CAAA,EAAA,CACA,CA3BA,EA2BA,KA3BA,CA2BA,YA3BA,CA2BA,UAAA,CACA,IAAA,CAAA,QAAA,EAAA,MAAA,CAAA,sBADA,EAGA,IAAA,CAAA,QAAA,CAAA,KAAA,EAEA,CAhCA,EAgCA,EAhCA,CAgCA,WAhCA,CAgCA,UAAA,CACA,IAAA,CAAA,QADA,EAGA,IAAA,CAAA,QAAA,CAAA,IAAA,EAEA,CArCA,EAqCA,EArCA,CAqCA,aArCA,CAqCA,UAAA,CACA,IAAA,CAAA,QAAA,EAAA,MAAA,CAAA,sBADA,EAGA,IAAA,CAAA,QAAA,CAAA,IAAA,EAEA,CA1CA,CADA,CA4CA,SAAA,CAAA,OAAA,CAAA,UAAA,EAAA,IAAA,CAAA,SAAA,QAAA,CAAA,CAEA,IAAA,CAAA,QAAA,CAAA,eAAA,CAAA,CACA,UAAA,CAAA,oBAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,CACA,OAAA,GADA,CAEA,WAAA,CAAA,CAAA,CAAA,QAFA,CAFA,CAMA,cAAA,CAAA,MAAA,CAAA,kBANA,CAAA,CAAA,CAOA,EAPA,CAOA,QAPA,CAOA,CAAA,CAAA,QAAA,CAAA,UAAA,CAEA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,KAAA,SAAA,EAAA,CACA,CAHA,CAGA,GAHA,CAPA,EAUA,EAVA,CAUA,UAVA,CAUA,SAAA,KAAA,CAAA,CACA,eAAA,CAAA,KAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CACA,CAZA,EAYA,EAZA,CAYA,aAZA,CAYA,SAAA,KAAA,CAAA,CACA,eAAA,CAAA,QAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CACA,CAdA,EAcA,EAdA,CAcA,YAdA,CAcA,SAAA,KAAA,CAAA,CACA,eAAA,CAAA,KAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CACA,CAhBA,EAgBA,EAhBA,CAgBA,WAhBA,CAgBA,SAAA,KAAA,CAAA,CACA,eAAA,CAAA,IAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CACA,CAlBA,EAkBA,EAlBA,CAkBA,UAlBA,CAkBA,SAAA,KAAA,CAAA,CACA,eAAA,CAAA,QAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CACA,CApBA,EAoBA,EApBA,CAoBA,aApBA,CAoBA,SAAA,MAAA,CAAA,KAAA,CAAA,CAEA,IAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,KAAA,CAAA,YAAA,CAAA,KAAA,CACA,CAvBA,EAuBA,EAvBA,CAuBA,WAvBA,CAuBA,SAAA,KAAA,CAAA,CACA,SAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CAAA,CAAA,KAAA,CACA,CAzBA,EAyBA,EAzBA,CAyBA,MAzBA,CAyBA,OAzBA,EAyBA,EAzBA,CAyBA,OAzBA,CAyBA,WAzBA,CAFA,CA6BA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA,CA7BA,CA+BA,MAAA,CAAA,kBA/BA,GAgCA,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,OAAA,CAAA,KAAA,CAAA,CACA,KAAA,EAAA,OADA,EAEA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAEA,CAJA,CAhCA,CAsCA,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,aAAA,CAAA,KAAA,CAAA,IACA,CAAA,UAAA,CAAA,WAAA,CAAA,eAAA,CAAA,KAAA,CAAA,UAAA,CADA,CAEA,mBAAA,CAAA,UAAA,EAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAFA,CAIA,gCAJA,EAKA,YAAA,CAAA,gCAAA,CALA,CAQA,IAAA,CAAA,6BAAA,CAAA,IAAA,CAAA,OAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,CARA,CASA,gCAAA,CAAA,UAAA,CAAA,UAAA,CACA,MAAA,CAAA,IAAA,CAAA,6BAAA,CAAA,IAAA,CAAA,EAAA,CACA,CAFA,CA5NA,GA4NA,CAGA,CAZA,CAYA,GAZA,CAYA,CACA,UADA,CAEA,WAFA,CAZA,CAAA,CAtCA,CAuDA,CAvDA,EAuDA,KAvDA,CAuDA,WAvDA,CAwDA,CApGA,CAqGA,CAvGA,CAwGA,CAlOA,CAuOA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EAAA,CACA,KAAA,6BAAA,CAAA,GAAA,CAAA,2BAAA,EAAA,CAFA,CAGA,KAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAHA,CAIA,UAAA,CAAA,MAAA,CAAA,KAAA,6BAAA,CACA,CA5OA,CAiPA,OAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,IAAA,GAAA,OAAA,EAEA,CArPA,CA0PA,IAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,IAAA,EAEA,CA9PA,CAmQA,IAAA,CAAA,UAAA,CACA,KAAA,QADA,EAEA,KAAA,QAAA,CAAA,IAAA,EAEA,CAvQA,CAAA,CA5CA,CAsTA,MAAA,CAAA,MAEA,CAxTA,C,CCAA,MAAA,CAAA,gDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,+BAAA,CAAA,2CAAA,CAAA,QAAA,CAAA,iCAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,aAAA,CAAA,UAAA,CAAA,SAAA,CAAA,eAAA,CAAA,MAAA,CAAA,WAAA,CAAA,CAAA,aAyCA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA1CA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,CAMA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SANA,CAOA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAPA,CAQA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MARA,CASA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAcA,MAbA,CAAA,MAAA,EAAA,iCAaA,EAZA,MAAA,CAAA,OAAA,CAAA,SAYA,EAZA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAYA,EAXA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAWA,CAXA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAWA,EAVA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,0BASA,EARA,MAAA,CAAA,OAAA,CAAA,SAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,0CAKA,EAJA,MAAA,CAAA,OAAA,CAAA,SAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,gDACA,CAAA,MACA,CArBA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAyBA,MAJA,CAAA,MAAA,EAAA,4EAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CA7BA,CAXA,CAgEA,KAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,OADA,CAEA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,OAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAMA,YAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,WAAA,CAAA,SAAA,CAAA,WAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAGA,WAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAHA,CAiBA,GAZA,OAAA,CAAA,KAYA,EAXA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,EAAA,IAAA,EAWA,CAPA,WAAA,EAAA,WAAA,CAAA,KAOA,EANA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,MAAA,CAAA,WAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAMA,CAAA,WAAA,CAAA,uBAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,SAAA,CAAA,cAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAEA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,MAAA,CAAA,OAAA,CAAA,KAAA,EAAA,WAAA,CAAA,YAAA,CAAA,EAAA,IAAA,EACA,CAGA,WAAA,CAAA,KAxBA,EAyBA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,MAAA,CAAA,WAAA,CAAA,KAAA,CAAA,EAAA,IAAA,EAEA,CAjCA,CAmCA,UAAA,CAAA,KAAA,CAAA,YAAA,CAAA,UAAA,CACA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAAA,OAAA,CAAA,KAAA,CAAA,CACA,KAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CADA,CAGA,KAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,IAAA,CAAA,EAAA,CAHA,CAKA,MAAA,GAAA,KALA,GAMA,KAAA,CAAA,MAAA,CAAA,KAAA,EAAA,KAAA,CAAA,WAAA,CAAA,eAAA,CAAA,KAAA,CAAA,UAAA,CANA,CAQA,CARA,CADA,CAWA,YAAA,EACA,CAZA,EAYA,EAZA,CAYA,WAZA,CAYA,SAAA,aAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAEA,GAAA,KAAA,KAIA,CAAA,kBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,CAJA,CAKA,MAAA,CAAA,kBAAA,CAAA,MALA,CAMA,KAAA,CAAA,kBAAA,CAAA,KANA,CAOA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,aAAA,CA5DA,GA4DA,CAAA,SAAA,CAPA,CAQA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,OAAA,CARA,CASA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CATA,CAUA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAVA,CAWA,mBAAA,CAAA,KAAA,EAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAXA,CAaA,MAbA,EAcA,MAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,CAAA,OAAA,CAAA,OAAA,CAAA,mBAAA,CAAA,CAdA,CAgBA,CA/BA,EA+BA,EA/BA,CA+BA,YA/BA,CA+BA,UAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,IAAA,EACA,CAjCA,CAkCA,CAvEA,CAwEA,MAAA,CAAA,UAAA,IACA,CAAA,MAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EAHA,CAIA,KAAA,MAAA,CAAA,CACA,IAAA,CAAA,CACA,SAAA,CAAA,gBADA,CAEA,SAAA,CAAA,EAFA,CADA,CAKA,QAAA,CAAA,CACA,SAAA,CAAA,qBADA,CAEA,SAAA,CAAA,gBAFA,CALA,CASA,OAAA,CAAA,CACA,SAAA,CAAA,mBADA,CAEA,SAAA,CAAA,EAFA,CATA,CAaA,IAAA,CAAA,CACA,SAAA,CAAA,qBADA,CAEA,SAAA,CAAA,gBAFA,CAbA,CAJA,CAsBA,KAAA,QAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CADA,CAAA,CAAA,CAtBA,CA0BA,GAAA,CAAA,eAAA,CAAA,KAAA,QAAA,CAAA,CAAA,IAAA,EA1BA,CA2BA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CA3BA,CA6BA,CAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CAAA,SAAA,IAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,IAAA,CAAA,SAAA,CACA,MAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,mBAAA,MAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CAFA,CAGA,MAAA,CAAA,MAAA,CAAA,KAAA,EAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,mBAAA,MAAA,CAAA,SAAA,CAAA,WAAA,CAAA,CACA,CAJA,CAKA,CA1GA,CAAA,CAhEA,CA6KA,MAAA,CAAA,KAEA,CA/KA,C,CCAA,MAAA,CAAA,6DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CAAA,aAkCA,QAAA,CAAA,SAAA,EAAA,CACA,MAAA,CAAA,IAAA,CAAA,GAAA,OACA,CAlCA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,IA0CA,CAAA,kBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,oBADA,CAMA,OAAA,CAAA,UAAA,CAIA,KAAA,aAAA,GAAA,YAAA,GAAA,WAAA,CAAA,OAAA,CACA,CAXA,CAgBA,IAAA,CAAA,UAAA,CAIA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CACA,CANA,GACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,SAAA,CAAA,EAFA,CAQA,MAAA,CAAA,UAAA,CAAA,cAAA,CAAA,OAAA,EAAA,IAAA,CAAA,SAAA,WAAA,CAAA,CACA,UAAA,CAAA,KAAA,CAAA,uBAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,SAAA,CAAA,CACA,sBAAA,CAAA,SAAA,EADA,CAFA,CAKA,WAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,EAAA,IAAA,CAAA,SAAA,IAAA,CAAA,CAKA,MAJA,CAAA,IAIA,EAHA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,IAAA,CAGA,CAAA,WAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,SAAA,CACA,CANA,EAMA,KANA,CAMA,OANA,CAOA,CAZA,EAYA,MAZA,CAYA,wBAZA,CAYA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAGA,MAFA,CAAA,SAAA,CAAA,oBAAA,CAAA,SAAA,EAEA,CADA,SAAA,CAAA,aAAA,CAAA,MAAA,GAAA,SAAA,CAAA,MAAA,GAAA,SAAA,EAAA,EAAA,MAAA,CAAA,GAAA,CACA,CAAA,WAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,SAAA,EAAA,KAAA,CAAA,OAAA,CACA,CAjBA,EAiBA,MAjBA,CAiBA,YAjBA,CAiBA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,UAAA,CAAA,QAAA,GAAA,cAAA,CAAA,OAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,CACA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CADA,CAAA,IAGA,CAtBA,CAuBA,CAxBA,CAyBA,CAjDA,CAAA,CA1CA,CA8FA,MAAA,CAAA,kBAEA,CAhGA,C,CCAA,MAAA,CAAA,oDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,uCAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBALA,IA6BA,CAAA,QAAA,CAAA,CACA,YAAA,GADA,CA7BA,CAsCA,aAAA,CAAA,aAAA,CAAA,CAKA,IAAA,CAAA,eALA,CAWA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,KAAA,SAAA,EAAA,CAHA,CAIA,UAAA,CAAA,MAAA,CAAA,eAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,aAAA,CAAA,CAAA,UAAA,CAAA,YAAA,CAAA,WAAA,CAAA,cAAA,CAAA,UAAA,CAFA,CAGA,OAAA,CAAA,YAAA,CAAA,YAAA,CAAA,EAAA,CAAA,sCAAA,CAAA,CAAA,EAAA,CAAA,wDAAA,CAHA,CAKA,GAAA,aAAA,EAAA,iBAAA,CAAA,mBAAA,CAAA,IACA,CAAA,UAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAGA,aAAA,CAAA,SAAA,QAAA,CAAA,UAAA,CAAA,aAAA,CAAA,UAAA,CAAA,aAAA,CAAA,WAAA,CAAA,aAHA,CAKA,GAAA,CAAA,aAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,OACA,EAAA,GAAA,CAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CADA,CAEA,OAAA,EAFA,CAKA,iBAAA,CAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CAAA,YAAA,CALA,CAMA,OAAA,EANA,MASA,CAAA,UAAA,CAAA,QAAA,CAAA,oBAAA,CATA,GAWA,UAAA,CAAA,QAAA,CAAA,oBAAA,IAXA,CAYA,UAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,YAAA,CADA,CAEA,MAAA,EAFA,CAGA,UAAA,CAAA,QAAA,CAAA,oBAAA,IACA,CAJA,CAZA,EAkBA,CAlBA,CAoBA,CACA,CAhCA,CAiCA,CAhDA,CAAA,CAtCA,CAyFA,MAAA,CAAA,aAEA,CA3FA,C,CCAA,MAAA,CAAA,6DAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAAA,GAiCA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,YAAA,CAAA,OACA,WAAA,QAAA,CAAA,KADA,CAEA,YAFA,CAIA,KAAA,KAAA,EAAA,MAAA,GAAA,KAEA,CAvCA,CAmLA,MA3HA,UAAA,OAAA,CAAA,CA4BA,QAAA,CAAA,oBAAA,EAAA,CACA,MAAA,KAAA,MAAA,EACA,KAAA,QADA,EAEA,CAAA,CAAA,GAAA,iBAFA,EAGA,CAAA,sBAAA,EAEA,CAMA,QAAA,CAAA,sBAAA,EAAA,CACA,MAAA,CAAA,QAAA,EAAA,WAAA,QAAA,CAAA,QAAA,CAAA,QAAA,EAAA,YAAA,EAAA,EAAA,KAAA,QAAA,CAAA,QACA,CAuBA,QAAA,CAAA,mBAAA,EAAA,CACA,MAAA,CAAA,MAAA,GAAA,cAAA,EACA,cADA,CAAA,EAEA,4BAAA,EACA,CAQA,QAAA,CAAA,4BAAA,EAAA,CACA,GAAA,CAAA,aAAA,CAAA,KAAA,EAAA,CAAA,EAAA,KAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CACA,UAAA,CAAA,KAAA,EAAA,CAAA,GAAA,KAAA,CAAA,OADA,CADA,OAIA,cAJA,EAKA,aAAA,EAAA,UAIA,CAOA,QAAA,CAAA,sBAAA,EAAA,CACA,MAAA,CAAA,eAAA,EAAA,YAAA,EAAA,EAAA,4BAAA,EACA,CAOA,QAAA,CAAA,YAAA,EAAA,CACA,MAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,UAAA,GAAA,QAAA,CAAA,EACA,CAvGA,GAAA,CAAA,cAAA,CAAA,SAAA,CAAA,OAAA,CAAA,cAAA,IAAA,CACA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,MAAA,IADA,CAEA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,QAAA,IAFA,CAGA,eAAA,CAAA,SAAA,CAAA,OAAA,CAAA,eAAA,IAHA,CAIA,eAAA,CAAA,SAAA,CAAA,OAAA,CAAA,eAAA,IAJA,CAKA,KAAA,CAAA,OAAA,CAAA,KALA,CAMA,QAAA,CAAA,OAAA,CAAA,QAAA,EAAA,EANA,CAOA,iBAAA,CAAA,WAAA,QAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,iBAPA,CAQA,UAAA,CAAA,OAAA,CAAA,UAAA,EAAA,EARA,CASA,cAAA,CAAA,SAAA,CAAA,OAAA,CAAA,cAAA,IATA,CAUA,cAAA,CASA,UAAA,CACA,MAAA,CAAA,eAAA,EAAA,CAAA,oBAAA,EACA,CAXA,EAVA,CAWA,aAAA,CAoCA,UAAA,CACA,MAAA,CAAA,mBAAA,EACA,CAtCA,EAXA,CAYA,iBAAA,CA2CA,UAAA,CACA,MAAA,CAAA,sBAAA,EACA,CA7CA,EAZA,CA6GA,MAAA,CACA,uBAAA,CAAA,UAAA,CACA,MAAA,CAAA,iBACA,CAHA,CAIA,mBAAA,CAAA,UAAA,CACA,MAAA,CAAA,aACA,CANA,CAOA,oBAAA,CAAA,UAAA,CACA,MAAA,CAAA,cACA,CATA,CAWA,CAIA,CArLA,C,CCAA,MAAA,CAAA,2CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,6DAAA,CAAA,oCAAA,CAAA,+BAAA,CAAA,sCAAA,CAAA,iCAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,QAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CAAA,aA6FA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA9FA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SARA,CASA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBATA,CAUA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAVA,CAWA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAXA,CAYA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAZA,CAaA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAbA,IAeA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAKA,MAJA,CAAA,MAAA,EAAA,GAIA,EAHA,MAAA,CAAA,OAAA,CAAA,SAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,kBACA,gBAAA,EAAA,MAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EADA,CAEA,KAFA,CAGA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAHA,CAIA,UACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAQA,MAPA,CAAA,MAAA,EAAA,0BAOA,EANA,MAAA,CAAA,OAAA,CAAA,IAMA,EANA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAKA,CALA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAKA,EAJA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAIA,CAHA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,uBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,SACA,CAAA,MACA,CApDA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAyEA,MArBA,CAAA,MAAA,EAAA,0BAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,OAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAiBA,CAhBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,EAAA,CAAA,GAAA,MAeA,IAfA,MAAA,EAAA,MAeA,EAdA,MAAA,EAAA,kBAcA,EAbA,MAAA,CAAA,OAAA,CAAA,KAaA,EAbA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAYA,CAZA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAYA,EAXA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+BAUA,CATA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CASA,EARA,MAAA,EAAA,CAAA,GAAA,MAQA,IARA,MAAA,EAAA,MAQA,EAPA,MAAA,EAAA,qGAOA,CANA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,EAAA,CAAA,GAAA,MAKA,IALA,MAAA,EAAA,MAKA,EAJA,MAAA,EAAA,YAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,qBACA,CAAA,MACA,CA7EA,CAfA,CAuHA,UAAA,CAAA,CACA,IAAA,CAAA,CACA,OAAA,CAAA,cADA,CAEA,KAAA,CAAA,EAAA,CAAA,gCAAA,CAFA,CAGA,aAAA,CAAA,EAAA,CAAA,8BAAA,CAHA,CAIA,IAAA,CAAA,SAJA,CAKA,IAAA,CAAA,EAAA,CAAA,MAAA,CALA,CADA,CAQA,GAAA,CAAA,CACA,OAAA,CAAA,UADA,CAEA,KAAA,CAAA,EAAA,CAAA,sCAAA,CAFA,CAGA,IAAA,CAAA,cAHA,CAIA,IAAA,CAAA,EAAA,CAAA,UAAA,CAJA,CARA,CAvHA,CA4IA,aAAA,CAAA,UAAA,IACA,CAAA,MAAA,IAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CADA,CAEA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAFA,CAGA,MAAA,CAAA,GAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,CACA,CAhJA,CAwJA,aAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CA1JA,CAkKA,cAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CApKA,CA6KA,aAAA,CAAA,SAAA,QAAA,CAAA,UAAA,CAAA,IACA,CAAA,MAAA,IAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CADA,CAEA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAFA,CAGA,WAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAKA,GAAA,MAAA,GAAA,QAAA,EAAA,CAAA,WAAA,CAAA,UAAA,EAAA,CAAA,WAAA,CAAA,aAAA,CAAA,IACA,CAAA,OAAA,CAAA,UAAA,CAAA,UAAA,EADA,CAEA,QAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAFA,CAGA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,UAAA,CAAA,IAAA,CAAA,aAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,CAJA,IAKA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,KAAA,CALA,CAQA,QAAA,CAAA,IAAA,CAAA,cAAA,IAAA,UAAA,CAAA,QAAA,CAAA,CAAA,OAbA,GAcA,QAAA,CAAA,IAAA,CAAA,cAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,OAAA,EAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAdA,CAgBA,MAAA,GAAA,QAhBA,CAiBA,QAAA,CAAA,IAAA,CAAA,SAAA,MAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAAA,CAAA,EAAA,WAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAAA,CAAA,EAAA,QAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAjBA,CAmBA,QAAA,CAAA,IAAA,CAAA,SAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,WAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,QAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAnBA,CAsBA,CAnMA,CAyMA,IAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,MADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EALA,CAWA,UAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,cAAA,CAAA,WAAA,CAAA,cAHA,CAIA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,cAAA,CACA,CAhBA,CAwBA,MAAA,CAAA,SAAA,eAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,QAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,gBAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAJA,CAKA,cAAA,CAAA,WAAA,CAAA,cALA,CAOA,iBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,mBAAA,IAPA,CASA,eAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,iBAAA,MAAA,iBATA,CAUA,cAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,gBAAA,IAVA,CAcA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,MAdA,CAgBA,SAAA,CAAA,UAAA,CACA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,WAAA,CACA,CAlBA,CAoBA,iBAAA,CAAA,UAAA,CACA,UAAA,EADA,EAEA,KAAA,CAAA,OAAA,CAAA,KAAA,CAFA,CAKA,UAAA,CAAA,IAAA,EACA,CA1BA,CA8BA,GAFA,UAAA,CAAA,OAAA,CAAA,YAAA,CAEA,CAAA,KAAA,KAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,CACA,cAAA,CAAA,cADA,CAEA,MAAA,CAAA,UAAA,EAFA,CAGA,QAAA,CAAA,QAAA,CAAA,QAHA,CAIA,eAAA,CAAA,eAJA,CAKA,eAAA,CAAA,eALA,CAMA,QAAA,CAAA,SAAA,CAAA,WAAA,CAAA,OAAA,CAAA,gBAAA,CANA,CAOA,iBAAA,CAAA,WAAA,CAAA,iBAPA,CAQA,UAAA,CAAA,WAAA,CAAA,UARA,CASA,iBAAA,CAAA,iBATA,CAUA,KAAA,CAAA,WAAA,CAAA,eAAA,CAAA,YAAA,CAAA,UAAA,CAVA,CAWA,cAAA,CA7BA,CAAA,cAAA,EAAA,iBAkBA,CAAA,CAAA,CAcA,GAAA,aAAA,CAAA,uBAAA,EAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,CAEA,UAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,UAAA,CAAA,EAAA,IAAA,iBAAA,CAAA,CAAA,iBAAA,CACA,SADA,CAEA,CACA,OAAA,CAAA,CACA,MAAA,CAAA,CACA,EAAA,CAAA,iBADA,CAEA,MAAA,CAAA,EAAA,CAAA,QAAA,CAFA,CADA,CADA,CAFA,CAUA,CAbA,IAaA,IAAA,aAAA,CAAA,mBAAA,EAAA,CAAA,CACA,GAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,CAEA,UAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,UAAA,CAAA,EAAA,IAAA,kBAAA,CAAA,CAAA,iBAAA,CACA,SADA,CAEA,CACA,OAAA,CAAA,CACA,MAAA,CAAA,CACA,EAAA,CAAA,kBADA,CAEA,MAAA,CAAA,EAAA,CAAA,QAAA,CAFA,CADA,CADA,CAFA,CAUA,CAbA,IAaA,CAAA,aAAA,CAAA,oBAAA,EAbA,CAcA,UAAA,CAAA,OAAA,CAAA,cAAA,CAAA,EAAA,CAAA,qFAAA,CAAA,CAAA,iBAAA,CACA,SADA,CAdA,CAkBA,iBAAA,EAEA,CACA,CAvGA,CA0GA,KAAA,QAAA,CAAA,aAAA,CAAA,UAAA,EAAA,CA1GA,CA4GA,KAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,cAAA,CAAA,KAAA,CAAA,QAAA,CAFA,CAGA,UAAA,CAAA,OAAA,CAAA,UAAA,CACA,CAJA,CA5GA,CAkHA,GAAA,CAAA,gBAAA,CAAA,SAAA,WAAA,CAAA,CACA,iBAAA,CAAA,cAAA,EAAA,WADA,EAEA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,WAAA,CAAA,KAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,KAAA,KAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,UAAA,CAAA,OAAA,CAAA,UAAA,IAEA,CAJA,CAIA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAJA,CASA,CAXA,CAaA,gBAAA,CAAA,eAAA,CAAA,OAAA,CA/HA,CAiIA,KAAA,OAAA,EAjIA,CAmIA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,aAAA,CAAA,KAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CACA,CAFA,EAEA,EAFA,CAEA,WAFA,CAEA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,MAAA,EACA,CAJA,EAIA,EAJA,CAIA,YAJA,CAIA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,OAAA,EACA,CANA,EAMA,EANA,CAMA,SANA,CAMA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,IAAA,EACA,CARA,EAQA,EARA,CAQA,SARA,CAQA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,IAAA,EACA,CAVA,EAUA,EAVA,CAUA,UAVA,CAUA,SAAA,eAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,eAAA,CACA,CAZA,EAYA,EAZA,CAYA,yBAZA,CAYA,UAAA,CACA,GAAA,CAAA,WAAA,CAAA,eAAA,CAAA,oBAAA,CAEA,WAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,oBAAA,CAHA,GAIA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,CAAA,OAAA,EAAA,CAAA,CAJA,CAKA,gBAAA,CAAA,WAAA,CALA,CAOA,KAAA,CAAA,QAAA,CAAA,oBAAA,CAPA,CASA,CArBA,CAsBA,CA/JA,CAoKA,MAAA,CAAA,UAAA,CAEA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,iBAAA,EAAA,CACA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CACA,CAxKA,CA6KA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAEA,KAAA,QAAA,CAAA,MAAA,EACA,CAhLA,CAqLA,MAAA,CAAA,UAAA,CACA,aAAA,CAAA,KAAA,QAAA,CACA,CAvLA,CA4LA,OAAA,CAAA,UAAA,CACA,cAAA,CAAA,KAAA,QAAA,CACA,CA9LA,CAmMA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CArMA,CA0MA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CA5MA,CAAA,CAzMA,CAwZA,MAAA,CAAA,IAEA,CA1ZA,C,CCAA,MAAA,CAAA,6DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,aAyCA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAiCA,QAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,cAAA,CAAA,aAAA,CAAA,IACA,CAAA,QAAA,GADA,CAGA,OAAA,CAAA,IAHA,CAEA,GAFA,CA4DA,MAvDA,CAAA,cAAA,EAAA,KAAA,cAAA,CAAA,OAuDA,GAtDA,OAAA,CAAA,WAAA,CAAA,CACA,OAAA,GADA,CAEA,IAAA,CAAA,iCAFA,CAGA,EAAA,CAAA,iBAHA,CAAA,CAsDA,EA/CA,aAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CACA,OAAA,CAAA,OADA,CAEA,OAAA,CAAA,OAFA,CAGA,OAAA,CAAA,OAHA,CAIA,UAAA,GAJA,CAKA,WAAA,GALA,CAMA,OAAA,CAAA,CAAA,CACA,EAAA,CAAA,QADA,CAEA,IAAA,CAAA,SAFA,CAGA,KAAA,CAAA,EAAA,CAAA,QAAA,CAHA,CAIA,KAAA,GAJA,CAAA,CAKA,CACA,EAAA,CAAA,IADA,CAEA,IAAA,CAAA,MAFA,CAGA,KAAA,CAAA,EAAA,CAAA,iBAAA,CAHA,CAIA,KAAA,GAJA,CALA,CANA,CAiBA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,SAAA,CACA,QAAA,GAFA,CAIA,CAAA,CAAA,UAAA,CAAA,MAAA,CAJA,GAKA,MAAA,CAAA,IAAA,CAAA,IAAA,CALA,CAOA,cAPA,GASA,SAAA,CAAA,GAAA,CAAA,iCAAA,CAAA,IAAA,CATA,CAWA,SAAA,CAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,UAAA,CAAA,cAAA,CAAA,aAAA,CAXA,CAYA,cAAA,CAAA,aAAA,EAZA,CAaA,CAAA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,cAAA,CAAA,eAAA,CAbA,EAcA,cAAA,CAAA,eAAA,EAdA,EAkBA,CAnCA,CAAA,CAoCA,aApCA,CA+CA,CAVA,GAAA,CAAA,MAAA,CAAA,aAAA,CAUA,CARA,CAAA,CAAA,UAAA,CAAA,MAAA,CAQA,EAPA,GAAA,CAAA,EAAA,CAAA,cAAA,CAAA,UAAA,CACA,QADA,EAEA,MAAA,CAAA,IAAA,CAAA,IAAA,CAEA,CAJA,CAOA,CAAA,GACA,CAxIA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MALA,CAMA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UANA,CAQA,GAAA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CA4BA,MApBA,CAAA,MAAA,EAAA,eAoBA,EAnBA,MAAA,CAAA,OAAA,CAAA,EAmBA,EAnBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAmBA,EAlBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAkBA,CAlBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAkBA,EAjBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,yCAgBA,EAfA,MAAA,CAAA,OAAA,CAAA,EAeA,EAfA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAeA,EAdA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAcA,CAdA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAcA,EAbA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,YAYA,EAXA,MAAA,CAAA,OAAA,CAAA,EAWA,EAXA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAWA,EAVA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAUA,CAVA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAUA,EATA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,KAQA,CAPA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAnBA,UAAA,CAGA,MAAA,SACA,CAeA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,EAAA,CAAA,GAAA,MAMA,IANA,MAAA,EAAA,MAMA,EALA,MAAA,EAAA,sDAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,YACA,CAAA,MACA,CAhCA,CAAA,CAoIA,MAAA,CAAA,iBAEA,CA9IA,C,CCAA,MAAA,CAAA,iEAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,uCAAA,CAAA,6DAAA,CAAA,sCAAA,CAAA,CAAA,SAAA,EAAA,CAAA,aAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,CAAA,aAEA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBALA,CAMA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBANA,CAOA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAPA,CA8BA,GAAA,CAAA,qBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,uBADA,CAMA,IAAA,CAAA,UAAA,CAYA,QAAA,CAAA,qBAAA,EAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CACA,eAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,iBAAA,IADA,CAEA,kBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,oBAAA,IAFA,CAIA,CAQA,QAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,IAEA,CAAA,qBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,UAAA,IAFA,CACA,iBADA,CAeA,MARA,CAAA,iBAQA,CAXA,qBAWA,CATA,MAAA,GAAA,MASA,CARA,EAAA,CAAA,uGAAA,CAQA,CAPA,MAAA,GAAA,MAOA,CANA,EAAA,CAAA,4HAAA,CAMA,CAHA,EAAA,CAAA,gFAAA,CAGA,CAVA,EAAA,CAAA,sGAAA,CAUA,CAAA,iBACA,CAUA,QAAA,CAAA,aAAA,CAAA,MAAA,CAAA,CAGA,MAFA,CAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CAEA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,KAAA,CAAA,CACA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,+BAAA,EAAA,IAAA,CAAA,SAAA,aAAA,CAAA,CACA,GAAA,CAAA,cAAA,CAAA,IAAA,CAEA,GAAA,KAAA,aAAA,CAcA,MAZA,CAAA,iBAAA,CAAA,mCAYA,GAXA,cAAA,CAAA,CACA,OAAA,CAAA,aADA,CAEA,aAAA,CAAA,UAAA,CACA,KAAA,CAAA,OAAA,CAAA,+BAAA,IACA,CAJA,CAKA,eAAA,CAAA,UAAA,CACA,KAAA,CAAA,OAAA,CAAA,+BAAA,IACA,CAPA,CAWA,EAAA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CAEA,iBAAA,CAAA,EAAA,CAAA,sBAAA,CAAA,CAAA,oBAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CACA,UAAA,CAEA,MAAA,CAAA,CACA,MAAA,GADA,CAAA,CAGA,CANA,CAMA,cANA,CAOA,CATA,CAWA,CA5BA,CA6BA,CA9BA,EA8BA,KA9BA,CA8BA,SAAA,GAAA,CAAA,CAEA,GAAA,GAAA,EAAA,GAAA,WAAA,CAAA,KAAA,CACA,KAAA,CAAA,GAAA,CAHA,MAMA,CAAA,GAAA,EAAA,KAAA,GAAA,CAAA,MANA,EAOA,UAAA,CAAA,OAAA,CAAA,WAAA,CAPA,CAQA,OAAA,CAAA,MAAA,EARA,QAUA,CAxCA,CAyCA,CAjGA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,SAAA,CAAA,UAAA,CAAA,YAAA,EAJA,CAMA,SAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,EAAA,CANA,CAoGA,UAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CAEA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,OAAA,CAAA,+BAAA,CAAA,IAAA,CACA,CAFA,CAGA,CALA,EAKA,MALA,CAKA,WALA,CAKA,SAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IACA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,GAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,IAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,WAAA,CAAA,UAAA,CAAA,cAAA,EAJA,CAKA,UAAA,CAAA,qBAAA,EALA,CAMA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,cAAA,CANA,CAQA,GAAA,WAAA,EAAA,WAAA,CAAA,QAAA,CAAA,CAEA,GAAA,SAAA,GAAA,KAAA,EAAA,UAAA,CAAA,kBAAA,CACA,OACA,GAAA,UAAA,CAAA,eAAA,CACA,OACA,GAAA,IAAA,CAAA,aAAA,CACA,OACA,GAAA,MAAA,GAAA,IAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,gCAAA,CACA,MAAA,CAAA,aAAA,CAAA,MAAA,CAAA,CACA,GAAA,MAAA,GAAA,CAAA,CAAA,IAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,gCAAA,CACA,MAAA,CAAA,aAAA,CAAA,MAAA,CAEA,CACA,CA3BA,CA4BA,CAtIA,CAAA,CAAA,CAyIA,MAAA,CAAA,qBAEA,CAzKA,C,CCAA,MAAA,CAAA,kDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,oCAAA,CAAA,YAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAAA,CAAA,QAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,aAyFA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA1FA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UARA,CASA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAKA,MAJA,CAAA,MAAA,EAAA,GAIA,EAHA,MAAA,CAAA,OAAA,CAAA,SAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,kBACA,gBAAA,EAAA,MAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EADA,CAEA,KAFA,CAGA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAHA,CAIA,UACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAQA,MAPA,CAAA,MAAA,EAAA,0BAOA,EANA,MAAA,CAAA,OAAA,CAAA,IAMA,EANA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAKA,CALA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAKA,EAJA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAIA,CAHA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,uBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,SACA,CAAA,MACA,CApDA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAyEA,MArBA,CAAA,MAAA,EAAA,0BAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,OAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAiBA,CAhBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,EAAA,CAAA,GAAA,MAeA,IAfA,MAAA,EAAA,MAeA,EAdA,MAAA,EAAA,kBAcA,EAbA,MAAA,CAAA,OAAA,CAAA,KAaA,EAbA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAYA,CAZA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAYA,EAXA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+BAUA,CATA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CASA,EARA,MAAA,EAAA,CAAA,GAAA,MAQA,IARA,MAAA,EAAA,MAQA,EAPA,MAAA,EAAA,qGAOA,CANA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,EAAA,CAAA,GAAA,MAKA,IALA,MAAA,EAAA,MAKA,EAJA,MAAA,EAAA,YAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,qBACA,CAAA,MACA,CA7EA,CAXA,CA+GA,WAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,aADA,CAEA,IAAA,CAAA,UAAA,CASA,QAAA,CAAA,wBAAA,EAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CACA,WAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,aAAA,IADA,CAEA,kBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,oBAAA,IAFA,CAGA,yBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,2BAAA,IAHA,CAKA,CAEA,QAAA,CAAA,MAAA,EAAA,CACA,GAAA,CAAA,UAAA,CAAA,wBAAA,EAAA,CAEA,iBAAA,CAAA,WAAA,GAAA,UAAA,CAAA,WAAA,EAAA,UAAA,CAAA,kBAAA,CAHA,CAIA,IAAA,CAAA,IAAA,EAJA,CAMA,IAAA,CAAA,IAAA,EAEA,CAEA,QAAA,CAAA,WAAA,EAAA,CACA,UAAA,CAAA,IAAA,CAAA,SAAA,CACA,CA/BA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAsCA,0BAAA,CAAA,UAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,wBAAA,EAFA,CAGA,eAAA,CAAA,WAAA,CAAA,eAAA,EAAA,EAHA,CAIA,MAAA,CAAA,eAAA,CAAA,IAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CACA,MAAA,CAAA,MAAA,GAAA,WAAA,CAAA,SACA,CAHA,GAGA,CAAA,UAAA,CAAA,yBAHA,EAGA,CAAA,CAAA,iBAAA,CAAA,KAAA,EAAA,EAAA,EAAA,eACA,CA9CA,CAgDA,KAAA,QAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CACA,OAAA,CAAA,cADA,CAEA,KAAA,CAAA,EAAA,CAAA,0BAAA,CAFA,CAGA,IAAA,CAAA,cAHA,CAIA,IAAA,CAAA,EAAA,CAAA,cAAA,CAJA,CAAA,CAAA,CAhDA,CAsDA,KAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAAA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CADA,CAGA,UAAA,CAAA,wBAAA,EAHA,CAMA,GAFA,CAAA,CAAA,cAAA,EAEA,CAAA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAGA,GAFA,IAAA,CAAA,OAAA,EAEA,CAAA,UAAA,CAAA,kBAAA,EAAA,CAAA,0BAAA,EAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,8BAAA,CAAA,CAEA,UAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,SAAA,CAAA,UAAA,CAAA,EAAA,IAAA,iBAAA,CAAA,CAAA,WAAA,CACA,MADA,CAEA,CACA,OAAA,CAAA,CACA,MAAA,CAAA,CACA,EAAA,CAAA,iBADA,CAEA,MAAA,CAAA,EAAA,CAAA,QAAA,CAFA,CADA,CADA,CAFA,CAUA,CAbA,IAcA,CAAA,WAAA,EAGA,CA1BA,CAtDA,CAiFA,KAAA,OAAA,EAjFA,CAkFA,MAAA,EAlFA,CAmFA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,EAAA,CAAA,WAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,YAFA,CAEA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,SAJA,CAIA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CANA,EAMA,EANA,CAMA,SANA,CAMA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CARA,CASA,CA9FA,CAmGA,MAAA,CAAA,UAAA,CAEA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,iBAAA,EAAA,CACA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CACA,CAvGA,CA4GA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,MAAA,EACA,CA9GA,CAmHA,MAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CArHA,CA0HA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CA5HA,CAiIA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CAnIA,CAwIA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CA1IA,CAAA,CA/GA,CA4PA,MAAA,CAAA,WAEA,CA9PA,C,CCAA,MAAA,CAAA,+CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,sCAAA,CAAA,+BAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAAA,CAAA,QAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,aA2FA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA5FA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eARA,CASA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBATA,CAUA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAVA,CAWA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAXA,IAaA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAKA,MAJA,CAAA,MAAA,EAAA,GAIA,EAHA,MAAA,CAAA,OAAA,CAAA,SAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,kBACA,gBAAA,EAAA,MAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EADA,CAEA,KAFA,CAGA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAHA,CAIA,UACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAQA,MAPA,CAAA,MAAA,EAAA,0BAOA,EANA,MAAA,CAAA,OAAA,CAAA,IAMA,EANA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAKA,CALA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAKA,EAJA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAIA,CAHA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,uBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,SACA,CAAA,MACA,CApDA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAyEA,MArBA,CAAA,MAAA,EAAA,0BAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,OAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAiBA,CAhBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,EAAA,CAAA,GAAA,MAeA,IAfA,MAAA,EAAA,MAeA,EAdA,MAAA,EAAA,kBAcA,EAbA,MAAA,CAAA,OAAA,CAAA,KAaA,EAbA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAYA,CAZA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAYA,EAXA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+BAUA,CATA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CASA,EARA,MAAA,EAAA,CAAA,GAAA,MAQA,IARA,MAAA,EAAA,MAQA,EAPA,MAAA,EAAA,qGAOA,CANA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,EAAA,CAAA,GAAA,MAKA,IALA,MAAA,EAAA,MAKA,EAJA,MAAA,EAAA,YAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,qBACA,CAAA,MACA,CA7EA,CAbA,CAqHA,QAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,UADA,CAMA,IAAA,CAAA,UAAA,CA6EA,QAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,CAOA,QAAA,CAAA,aAAA,EAAA,CACA,UAAA,CAAA,QAAA,EACA,CARA,GAAA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAUA,UAAA,CAAA,OAAA,CAAA,YAAA,CAXA,CAaA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAbA,GAcA,mBAAA,EAAA,CAAA,CAAA,GAAA,OAAA,CAAA,iBAdA,CAeA,UAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,6FAAA,CAAA,CAAA,aAAA,CAZA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,WAAA,CACA,CAUA,CAfA,CAmBA,aAAA,EAnBA,CAsBA,CAnGA,GACA,CAAA,KAAA,CAAA,IADA,CAGA,IAAA,CAAA,IAHA,CAIA,UAAA,CAAA,KAAA,aAAA,EAJA,CAKA,iBAAA,CAAA,UAAA,CAAA,UAAA,EALA,CAMA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EANA,CAWA,aAAA,CAAA,UAAA,IACA,CAAA,OAAA,CAAA,UAAA,CAAA,UAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,cAAA,EAFA,CAGA,cAAA,CAAA,UAAA,CAAA,iBAAA,EAHA,CAIA,yBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,2BAAA,IAJA,CAKA,WAAA,CAAA,UAAA,CAAA,cAAA,EALA,CAMA,eANA,CAOA,YAPA,CASA,GAAA,CAAA,CAAA,aAAA,CAAA,OAAA,GAAA,CAAA,GAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,SAIA,GAAA,gBAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CACA,SAIA,GAAA,gBAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,CAGA,GAAA,cAAA,CAAA,aAAA,CACA,SAMA,GAFA,eAAA,CAAA,SAAA,CAAA,cAAA,CAAA,OAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,CAEA,CAAA,eAAA,CAAA,aAAA,EAAA,eAAA,CAAA,cAAA,EAAA,CAAA,yBAAA,CACA,QAEA,CAhCA,QAkCA,gBAAA,CAAA,SAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,MAAA,CAlCA,GAoCA,YAAA,CAAA,SAAA,CAAA,WAAA,CAAA,OAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,CApCA,CAsCA,YAAA,CAAA,QAtCA,IA2CA,KAAA,WAAA,CAAA,QAAA,EAAA,KAAA,OAAA,CAAA,eACA,CAvDA,CA6DA,MAAA,CAAA,UAAA,CACA,aAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAnEA,CAsEA,KAAA,QAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CACA,OAAA,CAAA,eADA,CAEA,KAAA,CAAA,EAAA,CAAA,oCAAA,CAFA,CAGA,IAAA,CAAA,UAHA,CAIA,IAAA,CAAA,EAAA,CAAA,UAAA,CAJA,CAAA,CAAA,CAtEA,CAqGA,KAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,cAAA,CACA,CAHA,CArGA,CA0GA,GAAA,CAAA,gBAAA,CAAA,SAAA,WAAA,CAAA,CACA,iBAAA,CAAA,cAAA,EAAA,WADA,EAEA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,WAAA,CAAA,KAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,aAAA,IAAA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,UAAA,CAAA,OAAA,CAAA,cAAA,CAAA,IAAA,CAEA,CAJA,CAIA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAJA,CASA,CAXA,CAaA,gBAAA,CAAA,eAAA,CAAA,OAAA,CAvHA,CAyHA,MAAA,EAzHA,CA0HA,IAAA,CAAA,OAAA,EA1HA,CA4HA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,EAAA,EAAA,CAAA,WAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,YAFA,CAEA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,SAJA,CAIA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CANA,EAMA,EANA,CAMA,SANA,CAMA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CARA,EAQA,EARA,CAQA,cARA,CAQA,SAAA,mBAAA,CAAA,CACA,UAAA,CAAA,mBAAA,CACA,CAVA,EAUA,EAVA,CAUA,yBAVA,CAUA,UAAA,CACA,GAAA,CAAA,WAAA,CAAA,eAAA,CAAA,oBAAA,CAEA,WAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,oBAAA,CAHA,GAIA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,CAAA,OAAA,EAAA,CAAA,CAJA,CAKA,gBAAA,CAAA,WAAA,CALA,CAOA,KAAA,CAAA,QAAA,CAAA,oBAAA,CAPA,CASA,CAnBA,CAoBA,CAtJA,CA2JA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,iBAAA,EAAA,CACA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CACA,CA9JA,CAmKA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAEA,KAAA,QAAA,CAAA,MAAA,EACA,CAtKA,CA2KA,MAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CA7KA,CAkLA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CApLA,CAyLA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CA3LA,CAgMA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CAlMA,CAAA,CArHA,CA0TA,MAAA,CAAA,QAEA,CA5TA,C,CCAA,MAAA,CAAA,uDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,eAAA,CAAA,+BAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,aAuHA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAqLA,QAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAoeA,QAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAOA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IACA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,OAAA,CAFA,CAIA,SAAA,CAAA,WAAA,CAAA,QAAA,CAAA,OAAA,CAJA,CAYA,SAAA,CAAA,OAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CACA,CAQA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAOA,SAAA,CAAA,OAAA,CAAA,MAAA,CAAA,QAAA,CACA,CApCA,GAAA,CAAA,SAAA,CAwKA,MAlIA,CAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,YAAA,EACA,EADA,CACA,SADA,CACA,UAAA,CACA,KAAA,QAAA,CAAA,IACA,CAHA,EAIA,EAJA,CAIA,MAJA,CAIA,UAAA,CACA,KAAA,UAAA,EACA,CANA,EAOA,EAPA,CAOA,QAPA,CAOA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,UAAA,EAHA,CAIA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAJA,CAKA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CALA,CAMA,KAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CANA,CAQA,KAAA,QAAA,CAAA,CAEA,aAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,YAAA,CAFA,CAGA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAHA,CAIA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAJA,CAKA,eAAA,CAAA,KAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,iBAAA,CALA,CAMA,YAAA,CAAA,KAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,WAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,cAAA,CANA,CAQA,UAAA,CAAA,UARA,CASA,QAAA,CAAA,QATA,CAWA,KAAA,CAAA,KAXA,CAaA,YAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAAA,CAAA,WAAA,CAbA,CARA,CAwBA,KAAA,YAAA,EAxBA,CA0BA,UAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,cAAA,CAAA,UAAA,CACA,IAAA,CAAA,EAAA,CAAA,UAAA,CADA,GAEA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CAFA,CAIA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAJA,EAKA,IAAA,CAAA,YAAA,EALA,CAQA,CARA,CA1BA,CAoCA,UAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,eAAA,CAAA,UAAA,CACA,IAAA,CAAA,EAAA,CAAA,UAAA,CADA,EAEA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAEA,CAJA,CApCA,CA0CA,KAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CACA,GAAA,CAAA,MAAA,CAEA,IAAA,CAAA,EAAA,CAAA,UAAA,CAHA,GAIA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,KAAA,CAJA,CAMA,IAAA,CAAA,WAAA,CAAA,MAAA,CAAA,UAAA,CAAA,KAAA,CANA,GAOA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAPA,CAQA,IAAA,CAAA,YAAA,EARA,CAUA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,QAAA,EAAA,KAAA,EAAA,CAAA,MAAA,CAVA,EAcA,CAdA,CA1CA,CA0DA,KAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,aAAA,CAAA,UAAA,CACA,IAAA,CAAA,EAAA,CAAA,UAAA,CADA,EAEA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAEA,CAJA,CA1DA,CAgEA,KAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,OAAA,CAEA,IAAA,CAAA,EAAA,CAAA,UAAA,CAHA,GAIA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,KAAA,CAJA,CAMA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CANA,GAOA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,MAAA,CAPA,CASA,IAAA,CAAA,MAAA,CAAA,OAAA,EAAA,OAAA,CAAA,EAAA,CAAA,UAAA,CAAA,KAAA,CAAA,EAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CATA,CAWA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAXA,EAYA,QAAA,CAAA,KAAA,CAZA,CAcA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAdA,GAgBA,IAAA,CAAA,MAAA,CAAA,KAAA,CAhBA,CAiBA,IAAA,CAAA,KAAA,CAjBA,GAqBA,CArBA,CAhEA,CAuFA,KAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAEA,IAAA,CAAA,EAAA,CAAA,UAAA,CAHA,GAIA,IAAA,CAAA,GAAA,CAAA,IAAA,CAJA,CAMA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CANA,GAOA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAPA,CAQA,IAAA,CAAA,IAAA,CARA,EAWA,CAXA,CAvFA,CAoGA,UAAA,CAAA,EAAA,CAAA,QAAA,MAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CAEA,IAAA,CAAA,EAAA,CAAA,UAAA,CAHA,GAIA,IAAA,CAAA,GAAA,CAAA,IAAA,CAJA,CAKA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CALA,CAOA,QAAA,CAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAPA,CAQA,QAAA,CAAA,IAAA,CAAA,eAAA,IARA,CASA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CATA,CAUA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAVA,CAWA,IAAA,CAAA,IAAA,CAAA,eAAA,IAXA,CAaA,IAAA,CAAA,MAAA,CAAA,IAAA,CAbA,CAeA,IAAA,CAAA,UAAA,EAfA,CAiBA,CAjBA,CApGA,CAsHA,KAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CACA,CA9HA,CAkIA,CAFA,SAAA,CAAA,aAAA,CAAA,KAEA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CACA,CA97BA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,CAMA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SANA,CAOA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAPA,IASA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAWA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAoBA,MAnBA,CAAA,MAAA,EAAA,sKACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,aAAA,CAAA,OAAA,CAAA,EADA,CAEA,uPAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAAA,EAHA,CAIA,wNAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EALA,CAMA,sMANA,CAOA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAPA,CAQA,0NARA,CASA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EATA,CAUA,wMAVA,CAWA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,EAXA,CAYA,4NAZA,CAaA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,EAbA,CAcA,qMAdA,CAeA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,+BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,+BAAA,CAAA,OAAA,CAAA,EAfA,CAgBA,yNAhBA,CAiBA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,EAjBA,CAkBA,4KACA,CAAA,MACA,CAcA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAGA,MAFA,CAAA,MAAA,EAAA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,EAAA,CACA,mDACA,CAAA,MACA,CAQA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,OAAA,CAGA,MAFA,CAAA,MAAA,EAAA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,EAAA,CACA,mDACA,CAAA,MACA,CAnEA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAyGA,MAtCA,CAAA,MAAA,EAAA,sCAsCA,CArCA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAlEA,UAAA,CAGA,MAAA,SACA,CA8DA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAqCA,EApCA,MAAA,EAAA,CAAA,GAAA,MAoCA,IApCA,MAAA,EAAA,MAoCA,EAnCA,MAAA,EAAA,6HACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,2BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,2BAAA,CAAA,OAAA,CAAA,EADA,CAEA,mFAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,yBAAA,CAAA,OAAA,CAAA,EAHA,CAIA,8BA+BA,CA9BA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CA8BA,EA7BA,MAAA,EAAA,CAAA,GAAA,MA6BA,IA7BA,MAAA,EAAA,MA6BA,EA5BA,MAAA,EAAA,wPACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,eAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,eAAA,CAAA,OAAA,CAAA,EADA,CAEA,iCAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,EAHA,CAIA,wBAwBA,CAvBA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAjDA,UAAA,CAGA,MAAA,kDACA,CA6CA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAuBA,EAtBA,MAAA,EAAA,CAAA,GAAA,MAsBA,IAtBA,MAAA,EAAA,MAsBA,EArBA,MAAA,EAAA,uKAqBA,CApBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CA9CA,UAAA,CAGA,MAAA,kBACA,CA0CA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,EAAA,CAAA,GAAA,MAmBA,IAnBA,MAAA,EAAA,MAmBA,EAlBA,MAAA,EAAA,+BACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,mCAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,mCAAA,CAAA,OAAA,CAAA,EADA,CAEA,2BAgBA,CAfA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAeA,EAdA,MAAA,EAAA,CAAA,GAAA,MAcA,IAdA,MAAA,EAAA,MAcA,EAbA,MAAA,EAAA,oKAaA,CAZA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAxCA,UAAA,CAGA,MAAA,eACA,CAoCA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAYA,EAXA,MAAA,EAAA,CAAA,GAAA,MAWA,IAXA,MAAA,EAAA,MAWA,EAVA,MAAA,EAAA,+BACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,0CAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0CAAA,CAAA,OAAA,CAAA,EADA,CAEA,2BAQA,CAPA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,UAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,EAAA,CAAA,GAAA,MAMA,IANA,MAAA,EAAA,MAMA,EALA,MAAA,EAAA,mPACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,EADA,CAEA,uEAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,EAHA,CAIA,sCACA,CAAA,MACA,CA7GA,CATA,CA4HA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAoBA,MAnBA,CAAA,MAAA,EAAA,mDAmBA,CAlBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAkBA,EAjBA,MAAA,EAAA,CAAA,GAAA,MAiBA,IAjBA,MAAA,EAAA,MAiBA,EAhBA,MAAA,EAAA,eAgBA,EAfA,MAAA,CAAA,OAAA,CAAA,EAeA,EAfA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAeA,EAdA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAcA,CAdA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAcA,EAbA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,2DAYA,EAXA,MAAA,CAAA,OAAA,CAAA,KAWA,EAXA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAWA,EAVA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAUA,CAVA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAUA,EATA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,sDAQA,EAPA,MAAA,CAAA,OAAA,CAAA,KAOA,EAPA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAMA,CANA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAMA,EALA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,gIAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,mBACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,QACA,CAEA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAcA,MAbA,CAAA,MAAA,EAAA,6HACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,EADA,CAEA,+EAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,qDAAA,CAAA,OAAA,CAAA,EAHA,CAIA,wIASA,EARA,MAAA,CAAA,OAAA,CAAA,QAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,QAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,aADA,CAEA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAFA,CAGA,8DAHA,CAIA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAJA,CAKA,yIACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CASA,MARA,CAAA,MAAA,EAAA,6BAQA,EAPA,MAAA,CAAA,OAAA,CAAA,KAOA,EAPA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAMA,CANA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAMA,EALA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,4EAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,2BACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CA4BA,MA3BA,CAAA,MAAA,EAAA,8DA2BA,CA1BA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CA0BA,EAzBA,MAAA,EAAA,CAAA,GAAA,MAyBA,IAzBA,MAAA,EAAA,MAyBA,EAxBA,MAAA,EAAA,eAwBA,EAvBA,MAAA,CAAA,OAAA,CAAA,EAuBA,EAvBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAuBA,EAtBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAsBA,CAtBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAsBA,EArBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,mEAoBA,EAnBA,MAAA,CAAA,OAAA,CAAA,KAmBA,EAnBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAmBA,EAlBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAkBA,CAlBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAkBA,EAjBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,8DAgBA,EAfA,MAAA,CAAA,OAAA,CAAA,KAeA,EAfA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAeA,EAdA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAcA,CAdA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAcA,EAbA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,qEADA,CAEA,gBAAA,EAAA,MAAA,EAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EAFA,CAGA,GAHA,CAIA,gBAAA,EAAA,MAAA,EAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EAJA,CAKA,qEAQA,EAPA,MAAA,CAAA,OAAA,CAAA,KAOA,EAPA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAOA,EANA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAMA,CANA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAMA,EALA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,iFAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,0DACA,CAAA,MACA,CACA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CA8CA,MA7CA,CAAA,MAAA,EAAA,uDA6CA,EA5CA,MAAA,CAAA,OAAA,CAAA,GA4CA,EA5CA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CA4CA,EA3CA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,GA2CA,CA3CA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MA2CA,EA1CA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,eAyCA,EAxCA,MAAA,CAAA,OAAA,CAAA,EAwCA,EAxCA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAwCA,EAvCA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAuCA,CAvCA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAuCA,EAtCA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,qBAqCA,EApCA,MAAA,CAAA,OAAA,CAAA,QAoCA,EApCA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoCA,EAnCA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,QAmCA,CAnCA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmCA,EAlCA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,oFAiCA,EAhCA,MAAA,CAAA,OAAA,CAAA,KAgCA,EAhCA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgCA,EA/BA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KA+BA,CA/BA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MA+BA,EA9BA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,kEA6BA,CA5BA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CA4BA,EA3BA,MAAA,EAAA,CAAA,GAAA,MA2BA,IA3BA,MAAA,EAAA,MA2BA,EA1BA,MAAA,EAAA,oCA0BA,CAzBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAyBA,EAxBA,MAAA,EAAA,CAAA,GAAA,MAwBA,IAxBA,MAAA,EAAA,MAwBA,EAvBA,MAAA,EAAA,+CAuBA,EAtBA,MAAA,CAAA,OAAA,CAAA,KAsBA,EAtBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAsBA,EArBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAqBA,CArBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAqBA,EApBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,MADA,CAEA,gBAAA,EAAA,MAAA,EAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,IAAA,EAAA,MAAA,EAAA,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EAFA,CAGA,GAiBA,EAhBA,MAAA,CAAA,OAAA,CAAA,IAgBA,EAhBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAeA,CAfA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAeA,EAdA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,yEAaA,EAZA,MAAA,CAAA,OAAA,CAAA,IAYA,EAZA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAYA,EAXA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAWA,CAXA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAWA,EAVA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+EASA,EARA,MAAA,CAAA,OAAA,CAAA,KAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAKA,EAJA,MAAA,CAAA,OAAA,CAAA,KAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,oFACA,CAAA,MACA,CACA,QAAA,CAAA,SAAA,EAAA,CAGA,MAAA,OACA,CAEA,QAAA,CAAA,SAAA,EAAA,CAGA,MAAA,MACA,CAEA,QAAA,CAAA,SAAA,EAAA,CAGA,MAAA,uBACA,CA1KA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CA8KA,MAJA,CAAA,MAAA,EAAA,gDAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,WACA,CAAA,MACA,CAlLA,CA5HA,CA2UA,SAAA,CAAA,CACA,KAAA,CAAA,MADA,CAEA,WAAA,GAFA,CAGA,cAAA,GAHA,CAIA,MAAA,GAJA,CA3UA,CAuVA,OAAA,CAAA,CACA,MAAA,CAAA,QADA,CAEA,SAAA,CAAA,WAFA,CAGA,WAAA,CAAA,aAHA,CAIA,MAAA,CAAA,QAJA,CAKA,QAAA,CAAA,UALA,CAMA,OAAA,CAAA,SANA,CAOA,QAAA,CAAA,UAPA,CAQA,MAAA,CAAA,QARA,CASA,MAAA,CAAA,QATA,CAUA,IAAA,CAAA,MAVA,CAWA,IAAA,CAAA,oBAXA,CAYA,KAAA,CAAA,CACA,IAAA,CAAA,YADA,CAEA,QAAA,CAAA,iBAFA,CAGA,WAAA,CAAA,oBAHA,CAZA,CAvVA,CA+WA,QAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CA/WA,CAsXA,UAAA,CAAA,CACA,SAAA,CAAA,gBADA,CAEA,SAAA,CAAA,wBAFA,CAGA,MAAA,CAAA,uBAHA,CAIA,IAAA,CAAA,qBAJA,CAKA,cAAA,CAAA,4BALA,CAMA,WAAA,CAAA,uBANA,CAOA,YAAA,CAAA,gDAPA,CAQA,UAAA,CAAA,8CARA,CASA,cAAA,CAAA,kDATA,CAUA,WAAA,CAAA,+CAVA,CAWA,SAAA,CAAA,qBAXA,CAYA,eAAA,CAAA,4CAZA,CAaA,UAAA,CAAA,4CAbA,CAcA,iBAAA,CAAA,mDAdA,CAeA,cAAA,CAAA,gDAfA,CAgBA,KAAA,CAAA,qBAhBA,CAiBA,UAAA,CAAA,4CAjBA,CAkBA,QAAA,CAAA,wBAlBA,CAmBA,aAAA,CAAA,+CAnBA,CAoBA,KAAA,CAAA,qBApBA,CAqBA,UAAA,CAAA,4CArBA,CAsBA,SAAA,CAAA,2CAtBA,CAuBA,UAAA,CAAA,4BAvBA,CAwBA,KAAA,CAAA,qBAxBA,CAyBA,WAAA,CAAA,mCAzBA,CA0BA,QAAA,CAAA,wBA1BA,CA2BA,OAAA,CAAA,SA3BA,CA4BA,WAAA,CAAA,cA5BA,CA6BA,iBAAA,CAAA,oBA7BA,CA8BA,MAAA,CAAA,SA9BA,CA+BA,QAAA,CAAA,WA/BA,CAgCA,OAAA,CAAA,UAhCA,CAiCA,UAAA,CAAA,gBAjCA,CAkCA,WAAA,CAAA,iBAlCA,CAmCA,gBAAA,CAAA,aAnCA,CAoCA,aAAA,CAAA,OApCA,CAqCA,MAAA,CAAA,SArCA,CAsCA,QAAA,CAAA,WAtCA,CAtXA,CAqaA,UAAA,CAAA,CACA,GAAA,CAAA,EADA,CAEA,UAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,UAAA,CAAA,aAAA,EAAA,IAAA,CAAA,GAAA,CAFA,CAGA,OAAA,CAAA,UAAA,CAAA,UAHA,CAIA,QAAA,CAAA,UAAA,CAAA,WAJA,CAKA,QAAA,CAAA,UAAA,CAAA,MALA,CAraA,CAibA,YAAA,CAAA,CAMA,WAAA,CAAA,SAAA,QAAA,CAAA,IAAA,CAAA,IACA,CAAA,GAAA,CAAA,KAAA,GADA,CAEA,IAFA,CAIA,GAJA,GAKA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,QAAA,CALA,CAOA,IAPA,GAQA,IAAA,CAAA,OAAA,CAAA,IARA,CASA,SAAA,CAAA,eAAA,CAAA,GAAA,CAAA,QAAA,CATA,EAYA,CAlBA,CA0BA,mBAAA,CAAA,SAAA,WAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAQA,MALA,CAAA,KAKA,CANA,cAAA,MAMA,CALA,WAAA,CAAA,SAKA,CAHA,WAAA,CAAA,KAGA,CAAA,KACA,CApCA,CA2CA,WAAA,CAAA,SAAA,QAAA,CAAA,IAAA,CAAA,IACA,CAAA,KAAA,CAAA,QAAA,EAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,kBAAA,MAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CADA,CAEA,WAAA,CAAA,KAAA,WAFA,CAGA,IAHA,CAKA,KAAA,WAAA,CAAA,QAAA,CAAA,IAAA,CALA,CAOA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAAA,CAPA,CASA,IAAA,CAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,OAAA,CAAA,MATA,CAUA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,EAAA,IAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAVA,CAYA,WAAA,CAAA,OAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,EAAA,MAZA,CAaA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,YAAA,CAAA,WAAA,CAAA,OAAA,CAAA,KAAA,mBAAA,CAAA,WAAA,CAAA,WAAA,CAAA,CAbA,CAeA,KAAA,MAAA,CAAA,KAAA,aAAA,CACA,CA3DA,CAiEA,MAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAGA,MAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,EAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAHA,CAKA,QAAA,CAAA,UAAA,CAAA,QAAA,CALA,CAOA,QAPA,EAQA,MAAA,CAAA,MAAA,CAAA,QAAA,EAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CARA,CAYA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,QAAA,EAAA,IAAA,CAAA,UAAA,IACA,CAAA,QAAA,CAAA,GAAA,CAAA,IAAA,CADA,CAEA,WAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,EAAA,GAAA,CAAA,UAAA,CAAA,MAAA,CAFA,CAGA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,UAAA,CAAA,QAAA,CAHA,CAIA,IAAA,CAAA,UAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,WAAA,CAAA,MAAA,CACA,CALA,CAZA,CAkBA,KAAA,aAAA,CAAA,QACA,CApFA,CA2FA,YAAA,CAAA,SAAA,MAAA,CAAA,IACA,CAAA,UAAA,CAAA,KAAA,UAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,MAAA,CAAA,KAAA,EAAA,SAAA,CAAA,KAAA,CAFA,CAWA,MAPA,CAAA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,MAAA,CAAA,MAAA,EAAA,EAAA,CAOA,CALA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,WAAA,CAAA,MAAA,CAAA,WAAA,CAKA,CAHA,UAAA,CAAA,WAAA,CAAA,UAAA,CAGA,CAFA,UAAA,CAAA,OAAA,CAAA,KAAA,CAAA,KAAA,MAAA,CAAA,KAAA,EAAA,SAAA,CAAA,KAAA,CAEA,CADA,UAAA,CAAA,QAAA,CAAA,UAAA,CACA,CAAA,IACA,CAvGA,CA4GA,UAAA,CAAA,UAAA,CACA,UAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,KAAA,QAAA,CAAA,KAAA,CACA,CA9GA,CAuHA,MAAA,CAAA,SAAA,GAAA,CAAA,OAAA,CAAA,IACA,CAAA,SAAA,CAAA,KAAA,YAAA,CAAA,GAAA,CAAA,OAAA,CADA,CAEA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,UAAA,CAFA,CAGA,WAAA,CAAA,SAAA,CAAA,KAAA,EAAA,CACA,SAAA,CAAA,CADA,CAEA,QAAA,CAAA,CAFA,CAGA,OAAA,CAAA,CAHA,CAIA,MAAA,CAAA,CAJA,CAKA,KAAA,CAAA,CALA,CAHA,CAUA,cAAA,CAAA,KAAA,mBAAA,CAAA,WAAA,CAAA,WAAA,CAVA,CAoBA,GATA,KAAA,GAAA,CAAA,GASA,CARA,KAAA,WAAA,CAAA,WAQA,CANA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,aAAA,CAAA,WAAA,CAAA,QAAA,CAAA,cAAA,CAMA,CALA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,eAAA,CAAA,cAAA,CAAA,WAAA,CAAA,QAAA,CAAA,cAAA,CAKA,CAJA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,KAAA,mBAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CAIA,CAHA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,YAAA,CAAA,WAAA,CAAA,OAAA,CAAA,cAAA,CAGA,CAFA,KAAA,UAAA,CAAA,KAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAEA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,IAAA,EADA,CAEA,KAAA,QAAA,CAAA,YAAA,CAAA,IAAA,EAFA,CAGA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAHA,CAIA,KAAA,UAAA,EAJA,CAKA,GAAA,CAAA,UAAA,CAAA,SAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CACA,KAAA,QAAA,CAAA,iBAAA,CAAA,KAAA,MAAA,CAAA,cAAA,CANA,CAOA,GAAA,CAAA,kBAAA,CAAA,UAAA,EAAA,UAAA,CAAA,UAAA,EAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,+BAAA,CAAA,CACA,KAAA,QAAA,CAAA,mBAAA,CAAA,kBAAA,CARA,CAUA,KAAA,MAAA,CAAA,cAAA,EAAA,CAAA,kBAVA,EAYA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,MAAA,EAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAEA,CAdA,IAeA,MAAA,QAAA,CAAA,UAAA,CAAA,IAAA,EAfA,CAgBA,KAAA,QAAA,CAAA,YAAA,CAAA,IAAA,EAhBA,CAiBA,KAAA,QAAA,CAAA,KAAA,CAAA,KAAA,EAjBA,CA2BA,MANA,MAAA,MAAA,CAAA,KAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,EAAA,IAAA,CAAA,MAAA,CAAA,CAMA,CADA,KAAA,OAAA,CAAA,QAAA,CACA,CAAA,IACA,CAvKA,CA+KA,YAAA,CAAA,SAAA,GAAA,CAAA,OAAA,CAAA,IACA,CAAA,SAAA,CAAA,SAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,MAAA,CAAA,KAAA,CADA,CAEA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,UAAA,GAAA,EAFA,CAGA,OAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SAAA,CAAA,OAAA,CAAA,SAAA,GAAA,EAHA,CAIA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,cAAA,GAAA,EAJA,CAUA,MAJA,CAAA,QAAA,CAAA,MAAA,GAIA,CAHA,OAAA,CAAA,MAAA,GAGA,CAFA,IAAA,CAAA,MAAA,GAEA,CAAA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,GAAA,CAAA,IACA,CAAA,GAAA,CAAA,EADA,CAEA,IAAA,CAAA,EAFA,CAIA,GAAA,CAAA,MAJA,EAKA,GAAA,CAAA,IAAA,CAAA,QAAA,CALA,CAQA,GAAA,CAAA,aARA,GASA,GAAA,CAAA,IAAA,CAAA,MAAA,CATA,CAUA,IAAA,CAAA,IAAA,EAAA,MAVA,EAaA,GAAA,CAAA,OAbA,GAcA,GAAA,CAAA,IAAA,CAAA,SAAA,CAdA,CAeA,IAAA,CAAA,IAAA,EAAA,SAfA,EAkBA,GAAA,CAAA,QAlBA,GAmBA,GAAA,CAAA,IAAA,CAAA,UAAA,CAnBA,CAoBA,IAAA,CAAA,IAAA,EAAA,UApBA,EAuBA,GAAA,CAAA,MAvBA,EAwBA,GAAA,CAAA,IAAA,CAAA,QAAA,CAxBA,CAyBA,IAAA,CAAA,IAAA,EAAA,QAzBA,GA2BA,GAAA,CAAA,IAAA,CAAA,QAAA,CA3BA,CA4BA,IAAA,CAAA,IAAA,EAAA,QA5BA,EA+BA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CA/BA,CAgCA,GAAA,CAAA,IAAA,CAAA,IACA,CAjCA,CAkCA,CA3NA,CAoOA,UAAA,CAAA,SAAA,MAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,CAAA,CAEA,MAAA,CAAA,MAAA,GAAA,QAAA,CAAA,mBAAA,CAHA,CAIA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,KAAA,CAAA,CAAA,CAJA,CAKA,CAAA,CAAA,KALA,GAMA,OAAA,CAAA,GAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA,CANA,EASA,MAAA,CAAA,IAAA,CAAA,OAAA,CACA,CA9OA,CAsPA,MAAA,CAAA,SAAA,QAAA,CAAA,IAAA,CAAA,IAEA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,KAFA,CAGA,QAAA,CAAA,QAAA,EAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,kBAAA,MAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAHA,CAIA,SAAA,CAAA,QAAA,CAAA,YAAA,CAAA,KAAA,CAJA,CAKA,gBAAA,CAAA,CALA,CAMA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CANA,CA8BA,MAtBA,CAAA,SAAA,CAAA,MAsBA,GArBA,gBAAA,CAAA,SAAA,CAAA,IAAA,CAAA,UAAA,CAqBA,EAjBA,IAiBA,EAhBA,KAAA,QAAA,CAAA,SAAA,CAgBA,CAZA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,EAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAYA,CAXA,SAAA,CAAA,GAAA,CAAA,QAAA,EAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAWA,CAVA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CAUA,CADA,KAAA,OAAA,CAAA,UAAA,CAAA,QAAA,CAAA,gBAAA,CACA,CAAA,QACA,CArRA,CA2RA,YAAA,CAAA,UAAA,IAEA,CAAA,KAAA,CAAA,KAAA,QAAA,CAAA,KAFA,CAGA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAHA,CAIA,SAAA,CAAA,QAAA,CAAA,YAAA,CAAA,KAAA,CAJA,CAOA,MADA,MAAA,QAAA,CAAA,SAAA,CACA,CAAA,QACA,CAnSA,CA0SA,QAAA,CAAA,SAAA,MAAA,CAAA,IAAA,CAAA,CACA,CAAA,IAAA,EAAA,KAAA,QAAA,CAAA,KAAA,EAAA,IAAA,CAAA,UAAA,CAAA,WAAA,EAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CADA,CAEA,MAAA,CAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CACA,CA7SA,CAqTA,WAAA,CAAA,SAAA,KAAA,CAAA,gBAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAYA,MAVA,CAAA,gBAUA,EATA,KAAA,QAAA,CAAA,KAAA,CAAA,IAAA,CAAA,gBAAA,EAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CASA,CANA,SAMA,CALA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CAKA,CAHA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAGA,CAAA,SACA,CAnUA,CA0UA,MAAA,CAAA,SAAA,IAAA,CAAA,CAWA,MAVA,WAAA,QAAA,CAAA,IAUA,GATA,IAAA,CAAA,KAAA,EAAA,CAAA,QAAA,CASA,EANA,IAMA,CALA,KAAA,IAAA,EAKA,CAHA,KAAA,IAAA,EAGA,CAAA,IACA,CAtVA,CAjbA,CAk8BA,MAAA,CAAA,gBAEA,CAp8BA,C,CCAA,MAAA,CAAA,oDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,uDAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,aAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,CAAA,aA+DA,QAAA,CAAA,qBAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CACA,MAAA,CAAA,UAAA,CAAA,QAAA,CACA,CASA,QAAA,CAAA,aAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,CAAA,IAAA,CAAA,OACA,CAQA,QAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,EAAA,CAAA,QAAA,EAAA,YAAA,CAAA,YAAA,CACA,MAAA,CAAA,UAAA,CAAA,QAAA,CACA,CAQA,QAAA,CAAA,YAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,UAAA,EAAA,CAEA,MAAA,CAAA,EAAA,CAAA,UAAA,CAHA,EAIA,OAAA,CAAA,IAAA,CAAA,SAAA,IAAA,IAAA,CAAA,OAJA,GAKA,OAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CALA,CAMA,OAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,OAAA,CAAA,aAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CANA,CAOA,OAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAPA,CASA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CATA,GAUA,MAAA,CAAA,EAAA,CAAA,QAAA,CAVA,CAWA,MAAA,CAAA,OAAA,EAXA,CAaA,MAAA,CAAA,MAAA,EAbA,EAkBA,CAQA,QAAA,CAAA,OAAA,CAAA,UAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,IAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,QAAA,CAAA,UAAA,CAAA,cAAA,EAJA,CAKA,kBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,YAAA,IALA,CAMA,MAAA,EAAA,QAAA,CAAA,QAAA,GAAA,kBAAA,EAAA,IAAA,EAAA,IAAA,CAAA,aAAA,CACA,CAhIA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAPA,CAQA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBARA,IA+BA,CAAA,UAAA,CAAA,CACA,OAAA,CAAA,CACA,OAAA,CAAA,eADA,CAEA,KAAA,CAAA,EAAA,CAAA,wCAAA,CAFA,CAGA,IAAA,CAAA,QAHA,CAIA,IAAA,CAAA,EAAA,CAAA,iBAAA,CAJA,CADA,CAOA,SAAA,CAAA,CACA,OAAA,CAAA,iBADA,CAEA,KAAA,CAAA,EAAA,CAAA,+CAAA,CAFA,CAGA,IAAA,CAAA,QAHA,CAIA,IAAA,CAAA,EAAA,CAAA,mBAAA,CAJA,CAPA,CAaA,UAAA,CAAA,CACA,OAAA,CAAA,aADA,CAEA,KAAA,CAAA,EAAA,CAAA,wBAAA,CAFA,CAGA,IAAA,CAAA,OAHA,CAIA,IAAA,CAAA,EAAA,CAAA,aAAA,CAJA,CAbA,CAmBA,UAAA,CAAA,CACA,OAAA,CAAA,aADA,CAEA,KAAA,CAAA,EAAA,CAAA,wBAAA,CAFA,CAGA,IAAA,CAAA,MAHA,CAIA,IAAA,CAAA,EAAA,CAAA,aAAA,CAJA,CAnBA,CA/BA,CAwIA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,QADA,CAMA,IAAA,CAAA,UAAA,CAgBA,QAAA,CAAA,mBAAA,EAAA,IACA,CAAA,cAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CACA,YAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,cAAA,CAAA,cAAA,CAAA,cAAA,IADA,CAEA,UAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,cAAA,CAAA,cAAA,CAAA,YAAA,IAFA,CAIA,CAOA,QAAA,CAAA,eAAA,EAAA,CACA,GAAA,CAAA,UAAA,CAAA,mBAAA,EAAA,CACA,MAAA,CAAA,eAAA,CAAA,OAAA,EAAA,UAAA,CAAA,YACA,CASA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAEA,MADA,CAAA,IAAA,CAAA,OAAA,EACA,CAAA,UAAA,CAAA,QAAA,GAAA,cAAA,CAAA,UAAA,CAAA,CACA,QAAA,CAAA,QADA,CAEA,IAAA,CAAA,IAFA,CAAA,EAGA,IAHA,CAGA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,QAAA,CAAA,CAEA,IAAA,CAAA,OAAA,CAAA,IAHA,CAKA,YAAA,CAAA,IAAA,CAAA,cAAA,CAAA,qBAAA,CAAA,IAAA,CAAA,CALA,CAOA,IAAA,CAAA,SAAA,CAAA,WAAA,CAAA,QAAA,CAAA,IAAA,CAPA,CAQA,IAAA,CAAA,MAAA,EACA,CAZA,EAYA,KAZA,CAYA,UAAA,CAEA,IAAA,CAAA,SAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA,IAAA,CAFA,CAGA,IAAA,CAAA,MAAA,EACA,CAhBA,CAiBA,CAMA,QAAA,CAAA,eAAA,EAAA,CACA,GAAA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAAA,YAAA,CAAA,UAAA,CAAA,cAAA,GAAA,YADA,CAEA,UAAA,CAAA,aAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,YAAA,CAFA,CAGA,QAAA,CAAA,YAAA,CAAA,CAAA,UAAA,CACA,CACA,CAQA,QAAA,CAAA,WAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,WAAA,CAAA,WAAA,EAAA,IAAA,CAAA,SAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAAA,WAAA,CAEA,QAHA,EAIA,IAAA,CAAA,gBAAA,GAJA,CAKA,IAAA,CAAA,SAAA,CAAA,IAAA,EALA,GAOA,IAAA,CAAA,gBAAA,GAPA,CAQA,IAAA,CAAA,SAAA,CAAA,IAAA,EARA,EAWA,YAAA,CAAA,IAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CACA,CA7FA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,WAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,OAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,iBAAA,CAAA,UAAA,CAAA,UAAA,EALA,CAMA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EANA,CAOA,eAAA,CAAA,iBAAA,CAAA,MAAA,EAAA,CACA,WAAA,GADA,CAPA,CAUA,oBAVA,CA+FA,KAAA,SAAA,CAAA,gBAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,CAAA,EAAA,CAAA,UAAA,CAAA,SAAA,QAAA,CAAA,gBAAA,CAAA,CACA,oBAAA,CAAA,gBACA,CAFA,EAEA,EAFA,CAEA,MAFA,CAEA,SAAA,QAAA,CAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,IAAA,CAAA,OAAA,EAFA,CAGA,UAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAAA,CAHA,CAKA,CAPA,EAOA,EAPA,CAOA,MAPA,CAOA,SAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,QAAA,CAAA,QAAA,CAAA,IAAA,CAEA,CAXA,EAWA,MAXA,EA/FA,CA4GA,UAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,UAAA,CACA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,oBAAA,CACA,CAFA,CA5GA,CA+GA,KAAA,gBAAA,GA/GA,CAiHA,KAAA,YAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,mBAAA,CAAA,KAAA,SAAA,CAAA,CAjHA,CAkHA,KAAA,YAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,kBAAA,CACA,CAHA,CAlHA,CAsHA,KAAA,cAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,qBAAA,CAAA,aAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CAAA,CAAA,CAtHA,CAuHA,KAAA,cAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,eAAA,CACA,CAHA,CAvHA,CA4HA,iBAAA,CAAA,cA5HA,GA6HA,eAAA,CAAA,IA7HA,EA8HA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,IAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,eAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CA9HA,CAqIA,eAAA,CAAA,MArIA,EAsIA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,kBAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CAtIA,EA8IA,eAAA,EA9IA,EA+IA,KAAA,IAAA,EA/IA,CAmJA,KAAA,OAAA,EAnJA,CAoJA,WAAA,CAAA,eAAA,CAAA,WAAA,CApJA,CAsJA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,eAAA,EADA,EAEA,IAAA,CAAA,IAAA,EAFA,CAGA,YAAA,CAAA,IAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAHA,EAKA,IAAA,CAAA,IAAA,EAEA,CAPA,EAOA,EAPA,CAOA,UAPA,CAOA,UAAA,IACA,CAAA,OAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,GAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,QAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,UAAA,CAAA,mBAAA,EAJA,CAMA,eAAA,EANA,EAOA,YAAA,CAAA,IAAA,CAAA,cAAA,CAAA,qBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,OAAA,CAAA,YAAA,CAAA,CAAA,CAPA,CAQA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,EAAA,YAAA,CAAA,CACA,OAAA,CAAA,CAAA,QAAA,CAAA,QAAA,EAAA,UAAA,CAAA,UADA,CAAA,CARA,CAWA,IAAA,CAAA,IAAA,EAXA,CAYA,YAAA,CAAA,IAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAZA,EAcA,IAAA,CAAA,IAAA,EAEA,CAvBA,EAuBA,EAvBA,CAuBA,uBAvBA,CAuBA,UAAA,CACA,eAAA,EADA,EAEA,IAAA,CAAA,MAAA,EAEA,CA3BA,EA2BA,EA3BA,CA2BA,yBA3BA,CA2BA,UAAA,CACA,eAAA,EADA,EAEA,IAAA,CAAA,OAAA,EAEA,CA/BA,EA+BA,EA/BA,CA+BA,SA/BA,CA+BA,UAAA,CACA,IAAA,CAAA,IAAA,EACA,CAjCA,EAiCA,EAjCA,CAiCA,SAjCA,CAiCA,UAAA,CACA,eAAA,EADA,EAEA,IAAA,CAAA,IAAA,EAEA,CArCA,EAqCA,EArCA,CAqCA,eArCA,CAqCA,UAAA,CACA,eAAA,IAAA,OAAA,CAAA,UAAA,CADA,EAEA,eAAA,EAEA,CAzCA,EAyCA,EAzCA,CAyCA,kBAzCA,CAyCA,UAAA,CACA,eAAA,IAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,WAAA,EAEA,CA7CA,CA8CA,CA1MA,CA+MA,MAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,eAAA,CAAA,UAAA,CAAA,YAAA,EAFA,CAGA,eAAA,CAAA,MAAA,CAAA,KAAA,SAAA,CAAA,UAAA,EAAA,CACA,CAnNA,CAwNA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAEA,KAAA,SAAA,CAAA,OAAA,EACA,CA3NA,CAgOA,MAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,WAAA,CAAA,UAAA,CAAA,cAAA,EAFA,CAGA,OAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,KAAA,cAAA,CAAA,MAAA,EAJA,CAKA,KAAA,YAAA,CAAA,MAAA,EALA,CAMA,KAAA,SAAA,CAAA,MAAA,EANA,CAQA,aAAA,CAAA,OAAA,CAAA,WAAA,CAAA,YAAA,CARA,CASA,KAAA,cAAA,CAAA,MAAA,EATA,CAWA,KAAA,cAAA,CAAA,OAAA,EAEA,CA7OA,CAkPA,OAAA,CAAA,UAAA,CACA,KAAA,cAAA,CAAA,OAAA,EADA,CAEA,KAAA,cAAA,CAAA,OAAA,EAFA,CAGA,KAAA,YAAA,CAAA,OAAA,EAHA,CAIA,KAAA,SAAA,CAAA,OAAA,EACA,CAvPA,CA4PA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CAEA,OAAA,CAAA,UAAA,CAHA,CAIA,KAAA,cAAA,CAAA,IAAA,EAJA,CAMA,KAAA,cAAA,CAAA,IAAA,EANA,CASA,KAAA,YAAA,CAAA,IAAA,EATA,CAWA,KAAA,gBAXA,CAcA,KAAA,SAAA,CAAA,IAAA,EAdA,CAYA,KAAA,SAAA,CAAA,IAAA,EAIA,CA5QA,CAiRA,IAAA,CAAA,UAAA,CACA,KAAA,cAAA,CAAA,IAAA,EADA,CAEA,KAAA,YAAA,CAAA,IAAA,EAFA,CAGA,KAAA,SAAA,CAAA,IAAA,EACA,CArRA,CAAA,CAxIA,CAgaA,MAAA,CAAA,MAEA,CAlaA,C,CCAA,MAAA,CAAA,2CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,oCAAA,CAAA,YAAA,CAAA,sCAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,KAAA,CAAA,aAAA,CAAA,QAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,aAyFA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA1FA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QANA,CAOA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAPA,CAQA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBARA,CASA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAKA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAKA,MAJA,CAAA,MAAA,EAAA,GAIA,EAHA,MAAA,CAAA,OAAA,CAAA,SAGA,EAHA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAEA,CAFA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAEA,EADA,MAAA,EAAA,gBAAA,CAAA,MAAA,CACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,kBACA,gBAAA,EAAA,MAAA,CAAA,IAAA,EAAA,IAAA,EAAA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EADA,CAEA,KAFA,CAGA,gBAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,MAAA,CAHA,CAIA,UACA,CAAA,MACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAQA,MAPA,CAAA,MAAA,EAAA,0BAOA,EANA,MAAA,CAAA,OAAA,CAAA,IAMA,EANA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAKA,CALA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAKA,EAJA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAIA,CAHA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,YACA,CAAA,MACA,CACA,QAAA,CAAA,QAAA,EAAA,CAGA,MAAA,WACA,CAEA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAEA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAAA,CAAA,MAAA,CAMA,MALA,CAAA,MAAA,EAAA,uBAKA,EAJA,MAAA,CAAA,OAAA,CAAA,IAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,EAFA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,SACA,CAAA,MACA,CApDA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAyEA,MArBA,CAAA,MAAA,EAAA,0BAqBA,EApBA,MAAA,CAAA,OAAA,CAAA,OAoBA,EApBA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAoBA,EAnBA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAmBA,CAnBA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAmBA,EAlBA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,uCAiBA,CAhBA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAgBA,EAfA,MAAA,EAAA,CAAA,GAAA,MAeA,IAfA,MAAA,EAAA,MAeA,EAdA,MAAA,EAAA,kBAcA,EAbA,MAAA,CAAA,OAAA,CAAA,KAaA,EAbA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAaA,EAZA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAYA,CAZA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAYA,EAXA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,+BAUA,CATA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CASA,EARA,MAAA,EAAA,CAAA,GAAA,MAQA,IARA,MAAA,EAAA,MAQA,EAPA,MAAA,EAAA,qGAOA,CANA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAMA,EALA,MAAA,EAAA,CAAA,GAAA,MAKA,IALA,MAAA,EAAA,MAKA,EAJA,MAAA,EAAA,YAIA,CAHA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAGA,EAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,qBACA,CAAA,MACA,CA7EA,CAXA,CAmHA,UAAA,CAAA,CACA,IAAA,CAAA,CACA,OAAA,CAAA,MADA,CAEA,KAAA,CAAA,EAAA,CAAA,8BAAA,CAFA,CAGA,IAAA,CAAA,UAHA,CAIA,IAAA,CAAA,EAAA,CAAA,MAAA,CAJA,CADA,CAOA,GAAA,CAAA,CACA,OAAA,CAAA,UADA,CAEA,KAAA,CAAA,EAAA,CAAA,oCAAA,CAFA,CAGA,IAAA,CAAA,UAHA,CAIA,IAAA,CAAA,EAAA,CAAA,mBAAA,CAJA,CAPA,CAnHA,CAuIA,aAAA,CAAA,SAAA,UAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAHA,CAIA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAJA,CAKA,MAAA,CAAA,GAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,CACA,CA7IA,CAqJA,aAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,MAAA,IAAA,CAAA,CAAA,SAAA,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,CAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CADA,CAEA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAFA,CAGA,MAAA,CAAA,UAAA,CAAA,QAAA,CAHA,CAKA,MAAA,EAAA,QAAA,CAAA,IAAA,CAAA,cAAA,IAAA,MAAA,CAAA,OALA,EAMA,QAAA,CAAA,IAAA,CAAA,cAAA,CAAA,MAAA,CAAA,OAAA,EAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CAAA,KAAA,EAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAEA,CA7JA,CAmKA,IAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,MADA,CAMA,IAAA,CAAA,UAAA,CAmBA,QAAA,CAAA,MAAA,EAAA,CACA,UAAA,CAAA,IAAA,EACA,CArBA,GACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAKA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CADA,MAGA,KAAA,WAAA,CAAA,aAHA,EAIA,KAAA,CAAA,IAAA,EAJA,MASA,KAAA,CAAA,IAAA,EATA,IAYA,CAjBA,CAuBA,KAAA,QAAA,CAAA,aAAA,CAAA,UAAA,CAvBA,CAwBA,KAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CADA,CAGA,WAAA,CAAA,UAAA,CAAA,cAAA,EAHA,CAIA,OAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CALA,CAMA,cAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAAA,gBAAA,IANA,CAOA,CAAA,CAAA,cAAA,EAPA,CASA,KAAA,KAAA,CAAA,QAAA,CAAA,SAAA,CATA,GAUA,KAAA,CAAA,OAAA,EAVA,CAYA,cAAA,EAAA,MAZA,CAaA,UAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,MAAA,CACA,MADA,CAbA,CAiBA,MAAA,EAjBA,CAoBA,CApBA,CAxBA,CA6CA,MAAA,EA7CA,CA8CA,KAAA,OAAA,EA9CA,CA+CA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,GAAA,MAAA,EAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,MAAA,CAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CAAA,cAAA,CAHA,CAIA,aAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CACA,CACA,CAPA,EAOA,EAPA,CAOA,WAPA,CAOA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,MAAA,EACA,CATA,EASA,EATA,CASA,YATA,CASA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,OAAA,EACA,CAXA,EAWA,EAXA,CAWA,SAXA,CAWA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,IAAA,EACA,CAbA,EAaA,EAbA,CAaA,SAbA,CAaA,UAAA,CACA,MAAA,CAAA,KAAA,CAAA,IAAA,EACA,CAfA,CAgBA,CArEA,CA0EA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,GAAA,iBAAA,EAAA,CACA,UAAA,CAAA,MAAA,CAAA,KAAA,QAAA,CACA,CA7EA,CAkFA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,MAAA,EACA,CApFA,CAyFA,MAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,WAAA,CAAA,UAAA,CACA,CA3FA,CAgGA,OAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,IAAA,CAAA,UAAA,KAAA,QAAA,CAAA,UAAA,CACA,CAlGA,CAuGA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CAzGA,CA8GA,IAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CACA,CAhHA,CAAA,CAnKA,CAsRA,MAAA,CAAA,IAEA,CAxRA,C,CCAA,MAAA,CAAA,wDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,uCAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,iBAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBALA,IA8BA,CAAA,iBAAA,CAAA,aAAA,CAAA,CAKA,IAAA,oBALA,CAWA,IAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,KAAA,aAAA,EADA,CAEA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAFA,CAGA,YAAA,CAAA,KAAA,SAAA,EAHA,CAwCA,MApCA,CAAA,UAAA,CAAA,MAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,aAAA,CAAA,CAAA,UAAA,CAAA,YAAA,CAAA,WAAA,CAAA,cAAA,CAAA,UAAA,CAFA,CAIA,GAAA,CAAA,YAAA,CAAA,sBAAA,EAAA,UAAA,GAAA,SAAA,CACA,MAAA,CAAA,OAAA,CAAA,OAAA,EAAA,CAGA,GAAA,aAAA,EAAA,iBAAA,CAAA,uBAAA,CAAA,IACA,CAAA,UAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAGA,iBAAA,CAAA,SAAA,QAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,WAAA,CAAA,iBAHA,CAKA,GAAA,iBAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,OACA,EAAA,GAAA,CAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CADA,CAEA,OAAA,EAFA,CAKA,iBAAA,CAAA,UAAA,CAAA,UAAA,IALA,CAMA,OAAA,EANA,MASA,CAAA,UAAA,CAAA,QAAA,CAAA,oBAAA,CATA,GAWA,UAAA,CAAA,QAAA,CAAA,oBAAA,IAXA,CAYA,UAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,4CAAA,CAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,YAAA,CADA,CAEA,MAAA,EAFA,CAGA,UAAA,CAAA,QAAA,CAAA,oBAAA,IACA,CAJA,CAZA,EAkBA,CAlBA,CAoBA,CACA,CAnCA,CAoCA,CAAA,IACA,CApDA,CAAA,CA9BA,CAqFA,MAAA,CAAA,iBAEA,CAvFA,C,CCAA,MAAA,CAAA,wDAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,EAAA,CAAA,aAAA,CAAA,CAAA,aAEA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,IA4BA,CAAA,WAAA,CAAA,EAAA,CAAA,4CAAA,CA5BA,CAoCA,YAAA,CAAA,SAAA,CAAA,CAAA,CAEA,MADA,CAAA,CAAA,CAAA,WAAA,CAAA,WACA,CAAA,WACA,CAvCA,CA8CA,iBAAA,CAAA,aAAA,CAAA,CAKA,IAAA,CAAA,mBALA,CAUA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,EACA,CAZA,CAiBA,OAAA,CAAA,UAAA,CACA,KAAA,OAAA,EACA,CAnBA,CAwBA,MAAA,CAAA,UAAA,CACA,MAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,YAAA,CACA,CA1BA,CA+BA,OAAA,CAAA,UAAA,CACA,MAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,YAAA,CACA,CAjCA,CAAA,CA9CA,CAkFA,MAAA,CAAA,iBAEA,CApFA,C,CCAA,MAAA,CAAA,sDAAA,CAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,aAAA,CAAA,CAAA,aAEA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAFA,CAqBA,GAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,mBADA,CAMA,IAAA,CAAA,UAAA,CACA,CAAA,aAAA,CAAA,WAAA,CAAA,SAAA,CACA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,CACA,CAAA,GAAA,KAAA,CAAA,MADA,EAEA,KAAA,CAAA,cAAA,EAEA,CAJA,CAKA,CANA,CAOA,CAfA,CAAA,CAAA,CAkBA,MAAA,CAAA,iBAEA,CAzCA,C,CCAA,MAAA,CAAA,8DAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,+BAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,SAAA,CAAA,aAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eALA,CAMA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,IAqCA,CAAA,YAAA,CAAA,QAAA,MAAA,cAAA,GAAA,CArCA,CA2CA,aAAA,CAAA,CAEA,yBAAA,GAFA,CAIA,yBAAA,GAJA,CA3CA,CAqDA,UAAA,CAAA,aAAA,CAAA,CACA,IAAA,aADA,CAMA,IAAA,CAAA,UAAA,CAmBA,QAAA,CAAA,eAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,YAAA,IACA,CAcA,QAAA,CAAA,YAAA,EAAA,CACA,IAAA,CAAA,mBADA,GAKA,IAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,YAAA,CALA,CAOA,YAAA,EAPA,CAQA,gBAAA,EARA,CAUA,iBAAA,EAVA,CAYA,CAEA,QAAA,CAAA,YAAA,EAAA,OACA,CAAA,IAAA,CAAA,mBADA,CAKA,IAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,YAAA,CALA,OAMA,CAEA,QAAA,CAAA,gBAAA,EAAA,CACA,GAAA,CAAA,QAAA,CAEA,IAAA,CAAA,mBAHA,GAOA,QAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,aAAA,CAPA,CAQA,IAAA,CAAA,MAAA,CAAA,MAAA,EARA,CASA,IAAA,CAAA,OAAA,CAAA,OAAA,CATA,CAWA,MAAA,CAAA,yBAXA,EAYA,QAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,aAAA,CAAA,mBAAA,CAAA,CAEA,KAAA,OAAA,CAAA,aAHA,GAIA,KAAA,OAAA,CAAA,aAAA,CAAA,IAJA,CAKA,KAAA,SAAA,CAAA,GAAA,CAAA,YAAA,CALA,CAMA,KAAA,CAAA,YAAA,CAAA,UAAA,CAAA,UAAA,CANA,CAOA,KAAA,CAAA,OAAA,GAPA,CASA,CATA,CAZA,CAuBA,CAEA,QAAA,CAAA,iBAAA,EAAA,CACA,GAAA,CAAA,QAAA,CAEA,IAAA,CAAA,mBAHA,GAOA,QAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,aAAA,CAPA,CAQA,IAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,YAAA,CARA,CASA,IAAA,CAAA,MAAA,CAAA,OAAA,EATA,CAUA,IAAA,CAAA,OAAA,CAAA,KAAA,CAVA,CAWA,QAAA,CAAA,IAAA,CAAA,UAAA,CACA,KAAA,SAAA,CAAA,QAAA,CAAA,YAAA,CADA,GAEA,KAAA,OAAA,CAAA,aAAA,GAFA,CAGA,KAAA,SAAA,CAAA,MAAA,CAAA,YAAA,CAHA,CAIA,KAAA,aAAA,CAAA,mBAAA,EAAA,eAAA,CAAA,UAAA,CAJA,CAMA,CANA,CAXA,CAkBA,CArGA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,GAAA,MAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,cAAA,EALA,CAMA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,SAAA,EAAA,CANA,CAQA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,YADA,CAEA,KAAA,CAAA,EAAA,CAAA,mBAAA,CAFA,CAGA,IAAA,CAAA,WAHA,CAIA,IAAA,CAAA,EAAA,CAAA,mBAAA,CAJA,CAAA,CARA,CAwGA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CAxGA,CA6GA,iBAAA,CAAA,cA7GA,EA8GA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,OAAA,CAAA,GAAA,CAAA,CACA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,OAAA,iBAAA,CAAA,UAAA,CAEA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,GAAA,CACA,CAHA,CAGA,CACA,UAAA,GADA,CAHA,CAMA,CAPA,CA9GA,CAyHA,KAAA,OAAA,EAzHA,CA2HA,UAAA,CAAA,EAAA,CAAA,UAAA,CA/FA,UAAA,CACA,eAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAyFA,EAAA,EAAA,CAAA,YAAA,CAAA,UAAA,OAEA,CAAA,IAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wBAAA,CAFA,CAIA,IAAA,CAAA,mBAAA,CAAA,MAJA,MASA,eAAA,EATA,EAUA,IAAA,CAAA,IAAA,EAVA,MAKA,CAAA,IAAA,CAAA,IAAA,EAOA,CAZA,EAYA,EAZA,CAYA,wBAZA,CAYA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAdA,EAcA,EAdA,CAcA,yBAdA,CAcA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAEA,iBAAA,EACA,CAjBA,EAkBA,EAlBA,CAkBA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAlBA,CAkBA,UAAA,CACA,eAAA,EADA,EAEA,YAAA,EAEA,CAtBA,EAuBA,EAvBA,CAuBA,4BAvBA,CAuBA,UAAA,CACA,YAAA,EADA,EAEA,iBAAA,EAEA,CA3BA,CA4BA,CA7JA,CAkKA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,cAAA,CACA,CApKA,CAyKA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CA3KA,CAgLA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CAlLA,CAuLA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAzLA,CA8LA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAhMA,CAAA,CArDA,CAwPA,MAAA,CAAA,UAEA,CA1PA,C,CCAA,MAAA,CAAA,6DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,CAAA,aAeA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAwBA,QAAA,CAAA,oBAAA,CAAA,YAAA,CAAA,CA8CA,QAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CACA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,CAAA,WAAA,CAAA,OAAA,EAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,UAAA,CAAA,KAAA,UAAA,EADA,CAEA,UAAA,CAAA,EAAA,CAAA,QAAA,MAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,eAAA,EADA,CAEA,CAAA,CAAA,cAAA,EAFA,CAGA,IAAA,CAAA,MAAA,EACA,CAJA,CAKA,CARA,EAQA,EARA,CAQA,SARA,CAQA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,UAAA,EAAA,CACA,UAAA,CAAA,GAAA,kBACA,CAXA,EAWA,IAXA,GAWA,MAXA,CAWA,UAXA,EAWA,IAXA,EAYA,CA1DA,GACA,CAAA,QAAA,CAAA,EADA,CAEA,OAAA,CAAA,CAKA,MAAA,CAAA,UAAA,OACA,MAAA,EAAA,CAAA,QAAA,CADA,CAEA,KAAA,MAAA,EAFA,CAIA,KAAA,IAAA,EAEA,CAXA,CAiBA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,YAAA,EAAA,CAIA,MAHA,CAAA,UAAA,CAAA,WAAA,CAAA,QAAA,CAGA,CAFA,UAAA,CAAA,IAAA,CAAA,OAAA,EAAA,UAAA,CAAA,UAAA,CAEA,CADA,KAAA,QAAA,CAAA,QAAA,IACA,CAAA,IACA,CAvBA,CA6BA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,YAAA,EAAA,CAIA,MAHA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CAGA,CAFA,UAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAEA,CADA,KAAA,QAAA,CAAA,QAAA,IACA,CAAA,IACA,CAnCA,CAFA,CAAA,aAAA,CA0HA,MA1DA,CAAA,aAAA,CAAA,CAIA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,IAAA,CAAA,wBAAA,CAAA,CACA,WAAA,CAAA,YAAA,CAAA,IAAA,CAAA,aAAA,CADA,CAEA,QAAA,CAAA,EAHA,CAIA,mBAAA,CAAA,QAAA,CAAA,UAAA,CAJA,CAKA,WAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CACA,CAHA,CALA,CASA,KAAA,QAAA,CAAA,SAAA,IACA,CAdA,CAmBA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,IAAA,CAAA,wBAAA,CAAA,CACA,mBAAA,CAAA,WAAA,CAAA,UAAA,CAFA,CAGA,QAAA,CAAA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,IAAA,CAAA,MAAA,EADA,CAGA,IAAA,CAAA,OAAA,EACA,CAJA,CAHA,CAQA,QAAA,CAAA,EARA,CASA,KAAA,QAAA,CAAA,SAAA,IACA,CA7BA,CAmCA,aAAA,CAAA,UAAA,CACA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,GAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CACA,CAFA,CAAA,CAGA,MAAA,CAAA,KACA,CAxCA,CA8CA,aAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,KAAA,EAAA,EADA,CAEA,KAAA,CAAA,OAAA,CAAA,SAAA,MAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAEA,CAAA,CAAA,QAAA,CAAA,IAAA,GAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,MAHA,EAIA,IAAA,CAAA,MAAA,EAEA,CANA,CAOA,CAvDA,CA0DA,CADA,SAAA,CAAA,aAAA,CACA,CAAA,aACA,CApKA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBALA,CAMA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UANA,IAQA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAKA,MAJA,MAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAIA,CAHA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAGA,CAAA,qFACA,CANA,CARA,CAwKA,MAAA,CAAA,oBAEA,CA1KA,C,CCAA,MAAA,CAAA,sDAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,+BAAA,CAAA,6DAAA,CAAA,CAAA,SAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,SAAA,CAAA,oBAAA,CAAA,CAAA,aAEA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAFA,CAGA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eALA,CAMA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SANA,CAOA,oBAAA,CAAA,oBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,CAAA,oBAPA,IAsCA,CAAA,YAAA,CAAA,QAAA,MAAA,kBAAA,GAAA,CAtCA,CA4CA,UAAA,CAAA,EA5CA,CAiDA,aAAA,CAAA,CACA,oBAAA,GADA,CAEA,kBAAA,GAFA,CAjDA,CAyDA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,iBADA,CAMA,IAAA,CAAA,UAAA,CASA,QAAA,CAAA,eAAA,EAAA,CAEA,GAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,eAAA,IAAA,CACA,MAAA,CAAA,qBAAA,EAAA,6BAAA,EACA,CAEA,QAAA,CAAA,6BAAA,EAAA,CACA,GAAA,CAAA,UAAA,CAAA,IAAA,CAAA,aAAA,GAAA,cAAA,GAAA,MAAA,EAAA,CACA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,wBAAA,EAAA,MACA,CAEA,QAAA,CAAA,kBAAA,EAAA,CACA,eAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAEA,QAAA,CAAA,YAAA,EAAA,CACA,aAAA,CAAA,QAAA,CAAA,SAAA,CADA,CAIA,cAAA,EAJA,CAEA,aAAA,EAIA,CAEA,QAAA,CAAA,aAAA,EAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,WAAA,CAAA,cADA,CAEA,aAAA,CAAA,MAAA,EAHA,CAKA,YAAA,CAAA,oBALA,EAMA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CANA,CASA,IAAA,CAAA,MAAA,CAAA,MAAA,EATA,CAUA,IAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAEA,QAAA,CAAA,cAAA,EAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,WAAA,CAAA,cADA,CAGA,aAAA,CAAA,QAAA,CAAA,SAAA,CAJA,GAKA,UAAA,CAAA,MAAA,CAAA,CAAA,aAAA,CAAA,aAAA,EALA,EAQA,aAAA,CAAA,OAAA,EARA,CASA,IAAA,CAAA,MAAA,CAAA,OAAA,EATA,CAUA,IAAA,CAAA,OAAA,CAAA,KAAA,CACA,CA5DA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,SAAA,EAAA,CAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,qBAAA,EALA,CAMA,YAAA,CAAA,KAAA,aAAA,GAAA,cAAA,EANA,CAOA,aAAA,CAAA,oBAAA,CAAA,YAAA,CAPA,CA+DA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,gBAAA,CADA,CAEA,IAAA,CAAA,YAFA,CAGA,OAAA,CAAA,gBAHA,CAIA,IAAA,CAAA,EAAA,CAAA,gBAAA,CAJA,CAAA,CA/DA,CAsEA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CAtEA,CA2EA,iBAAA,CAAA,cA3EA,EA4EA,eAAA,CAAA,MA5EA,EA6EA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAFA,CA7EA,CAuFA,KAAA,OAAA,EAvFA,CAyFA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CACA,MAAA,CAAA,WAAA,CAAA,cADA,CAGA,YAAA,CAAA,kBAJA,GAKA,UAAA,CAAA,MAAA,CAAA,CAAA,EALA,EAQA,kBAAA,EACA,CATA,EASA,EATA,CASA,wBATA,CASA,UAAA,CACA,kBAAA,EADA,CAGA,IAAA,CAAA,MAAA,EACA,CAbA,EAaA,EAbA,CAaA,kBAbA,CAaA,UAAA,CACA,cAAA,EACA,CAfA,EAeA,EAfA,CAeA,yBAfA,CAeA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAEA,cAAA,EACA,CAlBA,EAkBA,EAlBA,CAkBA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAlBA,CAkBA,UAAA,CACA,eAAA,EADA,EAEA,YAAA,EAEA,CAtBA,EAuBA,EAvBA,CAuBA,wBAvBA,CAuBA,UAAA,CACA,cAAA,EACA,CAzBA,CA0BA,CAzHA,CA8HA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CAhIA,CAqIA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CAvIA,CA4IA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CA9IA,CAmJA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CArJA,CA0JA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CA5JA,CAAA,CAzDA,CAwNA,MAAA,CAAA,MAEA,CA1NA,C,CCAA,MAAA,CAAA,+DAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,YAAA,CAAA,cAAA,CAAA,UAAA,CAAA,wBAAA,CAAA,wBAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,UAAA,CAAA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,CAAA,aAWA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,CAAA,GAAA,CAAA,EAAA,2BAAA,CAAA,GAAA,CAAA,EAAA,kBAAA,EACA,CAEA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,GAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,GAAA,CACA,CAEA,QAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,CACA,GAAA,WAAA,QAAA,CAAA,MAAA,EAAA,IAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA,IAAA,CAAA,YAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,2BAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,EACA,GAAA,QAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAFA,MAGA,QAAA,GAAA,CAAA,EAAA,CAAA,CAAA,WAHA,GAGA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IAHA,EAIA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,CAJA,CAIA,KAAA,CAAA,IAAA,CAAA,CAAA,CAJA,CAKA,WAAA,GAAA,CAAA,EAAA,2CAAA,IAAA,CAAA,CAAA,CALA,CAKA,iBAAA,CAAA,CAAA,CAAA,MAAA,CALA,QAMA,CAEA,QAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EACA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAAA,CAAA,MADA,IACA,GAAA,CAAA,GAAA,CAAA,MADA,EAGA,IAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAEA,MAAA,CAAA,IACA,CAEA,QAAA,CAAA,kBAAA,EAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,sIAAA,CACA,CAyBA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA6BA,QAAA,CAAA,uBAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IACA,CAAA,KAAA,CAAA,GAAA,CAAA,KADA,CAEA,eAAA,CAAA,EAFA,CAIA,gBAAA,CAAA,EAJA,CAOA,SAAA,CAAA,MAAA,CAAA,YAAA,EAAA,MAAA,CAAA,YAAA,EAPA,CAoQA,YAAA,CAAA,SAAA,CA3PA,CAIA,iBAAA,CAAA,UAAA,IACA,CAAA,YAAA,CAAA,KAAA,MAAA,CAAA,YADA,CAEA,aAAA,CAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CACA,MAAA,CAAA,QACA,CAHA,EAGA,IAHA,CAGA,IAHA,CAAA,CAGA,SAHA,CAFA,CAMA,aAAA,CAAA,WAAA,CAAA,YAAA,CANA,CAOA,aAAA,CAAA,GAAA,CAAA,OAAA,CAAA,KAAA,sBAAA,CACA,CAZA,CAmBA,KAAA,CAAA,UAAA,CACA,KAAA,sBAAA,CAAA,SAAA,IADA,CAEA,KAAA,sBAAA,CAAA,SAAA,IAFA,CAGA,KAAA,QAAA,CAAA,UAAA,IAHA,CAIA,KAAA,IAAA,EAJA,CAKA,KAAA,OAAA,CAAA,OAAA,CACA,CAzBA,CAgCA,cAAA,CAAA,UAAA,CACA,MAAA,CAAA,WACA,CAlCA,CAyCA,sBAAA,CAAA,SAAA,CAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAEA,KAAA,OAAA,CAAA,QAAA,CAAA,eAAA,GAAA,OAAA,CAAA,QAAA,CAAA,YAAA,CAAA,EAAA,OAAA,CAAA,EAAA,CAAA,OAAA,CAAA,IAKA,CAAA,CAAA,eAAA,EALA,CAMA,CAAA,CAAA,cAAA,EANA,EAQA,CAAA,KAAA,EAAA,CAAA,SAAA,CARA,MAYA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,CAAA,aAAA,CAZA,CAcA,iBAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CACA,MAAA,CAAA,cAAA,CAAA,EAAA,CAAA,QAAA,CACA,CAHA,CAdA,CAkBA,eAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,iBAAA,CAlBA,CAmBA,KAAA,IAAA,EAnBA,CAoBA,KAAA,YAAA,EApBA,CAqBA,KAAA,cAAA,EArBA,CAsBA,CAlEA,CAuEA,mBAAA,CAAA,UAAA,CACA,KAAA,yBAAA,EADA,CAGA,WAHA,EAIA,KAAA,uBAAA,EAEA,CA7EA,CAkFA,yBAAA,CAAA,UAAA,CAEA,GAAA,MAAA,EAAA,CAAA,SAAA,GAAA,SAAA,EAAA,SAAA,CAAA,QAAA,EAAA,KAKA,CAAA,gBAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,CALA,CAMA,uBAAA,CAAA,gBAAA,CAAA,uBANA,CAOA,YAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,SAAA,KAAA,CAAA,IACA,CAAA,QAAA,CAAA,KAAA,CAAA,QADA,CAEA,KAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CAFA,CAGA,MAAA,CAAA,KAAA,CAAA,EAAA,CAAA,uBAAA,GAAA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,uBAAA,CACA,CAJA,CAPA,CAaA,YAAA,EAAA,YAAA,GAAA,WAbA,GAcA,eAAA,CAAA,CAAA,YAAA,CAdA,CAeA,KAAA,YAAA,EAfA,EAiBA,CArGA,CA8GA,YAAA,CAAA,UAAA,CACA,GAAA,CAAA,kBAAA,CAAA,KAAA,MAAA,CAAA,kBAAA,CAIA,GAHA,WAAA,EAAA,GAAA,CAAA,WAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,kBAAA,CAGA,CAFA,WAAA,CAAA,eAAA,CAAA,KAAA,EAEA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,YAAA,CAAA,WAAA,CACA,QAAA,CAAA,YAAA,CAAA,QADA,CAEA,GAAA,CAAA,YAAA,CAAA,GAFA,CAaA,MAVA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,kBAAA,CAUA,CATA,KAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CASA,CARA,KAAA,CAAA,IAAA,EAQA,CAPA,KAAA,CAAA,YAAA,CAAA,YAOA,CALA,KAAA,EAAA,CAAA,SAAA,CAKA,EAJA,KAAA,CAAA,IAAA,EAIA,KADA,MAAA,OAAA,CAAA,MAAA,CAEA,CAEA,KAAA,OAAA,CAAA,QAAA,CAtBA,CAuBA,KAAA,IAAA,EACA,CAtIA,CA2IA,uBAAA,CAAA,UAAA,CACA,eAAA,CAAA,kBAAA,CAAA,gBAAA,CADA,CAEA,KAAA,YAAA,EACA,CA9IA,CAqJA,mBAAA,CAAA,SAAA,IAAA,CAAA,CACA,KAAA,iBAAA,EADA,CAEA,GAAA,CAAA,YAAA,CAAA,KAAA,MAAA,CAAA,YAAA,CACA,gBAAA,CAAA,IAHA,CAIA,GAAA,CAAA,aAAA,CAAA,GAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CACA,MAAA,CAAA,QACA,CAHA,EAGA,IAHA,CAGA,IAHA,CAAA,CAGA,SAHA,CAAA,CAIA,aAAA,CAAA,QAAA,CAAA,YAAA,CARA,CASA,aAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,sBAAA,CATA,CAUA,KAAA,IAAA,EACA,CAhKA,CAwKA,eAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CACA,YAAA,CAAA,KADA,CAEA,KAAA,CAAA,YAAA,CAAA,KACA,CA3KA,CAmLA,sBAAA,CAAA,SAAA,IAAA,CAAA,KAAA,CAAA,CACA,KAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CADA,CAEA,GAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,OAAA,MAAA,CAAA,IAAA,CAAA,CAAA,KAAA,CACA,CAtLA,CA2LA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,kBAAA,CAAA,KAAA,MAAA,CAAA,kBAAA,CACA,KAAA,CAAA,KAAA,EAFA,CAGA,KAAA,CAAA,WAAA,CAAA,CAHA,CAIA,WAAA,EAAA,GAAA,CAAA,WAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,kBAAA,CAJA,CAKA,WAAA,CAAA,IALA,CAMA,KAAA,sBAAA,CAAA,SAAA,IACA,CAlMA,CAyMA,cAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,EAAA,CAAA,CAAA,cAAA,EADA,CAEA,GAAA,CAAA,SAAA,CAAA,KAAA,EAAA,CAAA,SAAA,CAAA,CACA,KAAA,mBAAA,EAHA,CAKA,CAAA,SAAA,EAAA,WALA,EAMA,KAAA,CAAA,IAAA,EANA,CAOA,KAAA,sBAAA,CAAA,SAAA,IAPA,GASA,KAAA,CAAA,KAAA,EATA,CAUA,KAAA,sBAAA,CAAA,SAAA,IAVA,CAYA,CArNA,CA0NA,aAAA,CAAA,UAAA,CACA,GAAA,CAAA,SAAA,CAAA,KAAA,EAAA,CAAA,SAAA,CAAA,CACA,KAAA,sBAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAFA,CAGA,KAAA,IAAA,EACA,CA9NA,CAmOA,cAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,EAAA,CAAA,UAAA,CAAA,CACA,KAAA,QAAA,CAAA,UAAA,CAAA,CAAA,UAAA,CAFA,CAIA,UAJA,EAKA,KAAA,YAAA,EAEA,CA1OA,CA+OA,YAAA,CAAA,UAAA,IAIA,CAAA,iBAAA,CAAA,KAAA,WAAA,EAJA,CAKA,CAAA,CAAA,iBAAA,CAAA,CALA,CAMA,CAAA,CAAA,iBAAA,CAAA,CANA,CAQA,YAAA,CAAA,MAAA,CAAA,UAAA,CAAA,KAAA,UAAA,GAAA,KAAA,EAAA,GARA,CASA,KAAA,MAAA,CAAA,CAAA,CAAA,YAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAzPA,CA2PA,CAAA,aAAA,CApQA,CAGA,WAHA,CAKA,YALA,CAoWA,MA/FA,CAAA,aAAA,CAAA,YAAA,CA+FA,CA9FA,aAAA,CAAA,YAAA,CAAA,eAAA,CA8FA,CA7FA,YAAA,CAAA,WAAA,CAAA,WAAA,EAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CACA,GAAA,SAAA,CAAA,QAAA,CAAA,yBAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,yDAAA,CAAA,CAGA,SAAA,CAAA,QAAA,CAAA,yBAAA,CALA,CAMA,KAAA,MAAA,CAAA,SAAA,CACA,CAPA,EAOA,EAPA,CAOA,QAPA,CAOA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,eAAA,CAAA,KAAA,SAAA,EAHA,CAIA,IAAA,CAAA,eAAA,CAAA,IAJA,CAKA,eAAA,CAAA,eAAA,CAAA,eALA,CAMA,eAAA,CAAA,eAAA,CAAA,eANA,CAOA,mBAAA,CAAA,eAAA,CAAA,YAPA,CAQA,GAAA,CAAA,eAAA,CAAA,GARA,CAUA,CAAA,CAAA,IAVA,GAWA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,KAAA,UAAA,GAAA,KAAA,EAAA,CAAA,IAXA,KAcA,CAAA,QAAA,CAAA,KAAA,UAAA,EAdA,CAeA,aAAA,CAAA,GAAA,CAAA,oBAAA,CAAA,QAAA,CAfA,CAgBA,YAAA,CAAA,GAAA,CAAA,mBAAA,CAAA,QAAA,CAhBA,CAiBA,gBAAA,CAAA,GAAA,CAAA,uBAAA,CAAA,QAAA,CAjBA,CAkBA,eAAA,CAAA,GAAA,CAAA,mBAAA,CAAA,QAAA,CAlBA,CAmBA,cAAA,CAAA,GAAA,CAAA,aAAA,CAAA,QAAA,CAnBA,CAoBA,gBAAA,CAAA,GAAA,CAAA,uBAAA,CAAA,QAAA,CApBA,CAqBA,YAAA,CAAA,mBArBA,CAsBA,QAAA,CAAA,GAAA,CAAA,cAAA,CAAA,MAAA,CAtBA,CAwBA,GAAA,CAAA,eAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CACA,UAAA,GADA,CAEA,WAAA,GAFA,CAGA,QAAA,CAAA,CACA,WAAA,CAAA,SAAA,CAAA,CAAA,CADA,CAEA,WAAA,CAAA,CACA,IAAA,CAAA,CADA,CAEA,KAAA,CAAA,CAFA,CAGA,GAAA,CAAA,CAHA,CAIA,MAAA,CAAA,CAJA,CAFA,CAHA,CAYA,MAAA,CAAA,SAAA,KAAA,CAAA,gBACA,IAAA,CAAA,KADA,CACA,OAAA,CAAA,WAAA,KAAA,CAAA,EAAA,CADA,CAEA,OAAA,CAAA,WAAA,KAAA,CAAA,EAAA,CAFA,CAIA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAjBA,CAAA,CAAA,CAmBA,QAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,KAAA,CAAA,WAAA,CACA,WAAA,CAAA,KAAA,CAAA,CACA,IAAA,CAAA,MADA,CAAA,CAEA,eAFA,CAEA,QAAA,CAAA,CAAA,CAFA,CAGA,CALA,CA3CA,CAkDA,cAAA,CAAA,UAAA,CAAA,CACA,OAAA,GADA,CAEA,SAAA,GAFA,CAGA,KAAA,CAAA,CACA,GAAA,CAAA,eADA,CAEA,GAAA,CAAA,eAFA,CAHA,CAOA,KAAA,CAAA,mBAPA,CAQA,IAAA,CAAA,EARA,CAAA,EASA,EATA,CASA,QATA,CASA,KAAA,eATA,CAlDA,CA6DA,aAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,KAAA,CA7DA,CA+DA,gBAAA,CAAA,EAAA,CAAA,sBAAA,CAAA,KAAA,cAAA,CA/DA,CAgEA,eAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,aAAA,CAhEA,CAiEA,gBAAA,CAAA,EAAA,CAAA,OAAA,CAAA,KAAA,cAAA,CAjEA,CAkEA,KAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,KAAA,YAAA,CAlEA,CAmEA,KAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,UAAA,CACA,QAAA,GAAA,KAAA,CAAA,EAAA,CAAA,8BAAA,CAAA,CADA,CAGA,KAAA,CAAA,YAAA,EACA,CAJA,CAnEA,CAwEA,MAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,KAAA,YAAA,CAxEA,CA0EA,KAAA,MAAA,CAAA,IAAA,CAAA,GAAA,CACA,CAlFA,EAkFA,EAlFA,CAkFA,MAlFA,CAkFA,UAAA,CACA,KAAA,sBAAA,CAAA,SAAA,IACA,CApFA,EAoFA,EApFA,CAoFA,MApFA,CAoFA,UAAA,CACA,KAAA,sBAAA,CAAA,SAAA,IACA,CAtFA,EAsFA,EAtFA,CAsFA,SAtFA,CAsFA,UAAA,CACA,SAAA,CAAA,WAAA,CAAA,yBAAA,CADA,CAEA,KAAA,iBAAA,EAFA,CAGA,KAAA,IAAA,EAHA,CAIA,MAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,KAAA,YAAA,CACA,CA3FA,CA6FA,CADA,YAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAAA,YACA,CAtcA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,CAKA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SALA,CAMA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aARA,CASA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QATA,IA4CA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAkBA,MAfA,CAAA,MAAA,EAAA,kLACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EADA,CAEA,wNAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,EAHA,CAIA,2IAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,EALA,CAMA,gLANA,CAOA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EAPA,CAQA,+QARA,CASA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,6BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,6BAAA,CAAA,OAAA,CAAA,EATA,CAUA,gOAVA,CAWA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,EAXA,CAYA,oKAZA,CAaA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EAbA,CAcA,4FACA,CAAA,MACA,CAtBA,CA5CA,CAwEA,aAAA,CAAA,CACA,kBAAA,CAAA,yBADA,CAEA,YAAA,CAAA,kBAFA,CAGA,IAAA,CAAA,CAAA,EAHA,CAIA,eAAA,CAAA,CAJA,CAKA,eAAA,CAAA,EALA,CAMA,YAAA,CAAA,CANA,CAOA,GAAA,CAAA,EAPA,CAxEA,CAiFA,eAAA,CAAA,CACA,aAAA,CAAA,aADA,CAjFA,CA0cA,MAAA,CAAA,uBAEA,CA5cA,C,CCAA,MAAA,CAAA,sEAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAAA,GA4BA,CAAA,cAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,UAAA,CAAA,WAAA,CAAA,aAAA,CAAA,CAAA,UADA,CAEA,qBAAA,CAAA,WAAA,CAAA,eAFA,CAGA,eAAA,CAAA,IAAA,EAAA,GAAA,qBAAA,CAAA,CACA,cAAA,EADA,CAAA,CAEA,qBALA,CAMA,qBAAA,CAAA,WAAA,CAAA,kBANA,CAOA,qBAAA,CAAA,IAAA,EAAA,GAAA,qBAAA,CAAA,EAAA,CAAA,qBAPA,CAQA,GAAA,CAAA,sBAAA,CAAA,qBAAA,CAAA,MAAA,CACA,sBAAA,CAAA,IAAA,EAAA,GAAA,sBAAA,CAAA,EAAA,CAAA,sBATA,IAUA,CAAA,sBAAA,CAAA,sBAAA,CAAA,aAVA,CAWA,aAAA,CAAA,IAAA,EAAA,GAAA,sBAAA,CAAA,EAAA,CAAA,sBAXA,CAaA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,SAAA,CAAA,CACA,MAAA,YAAA,GAAA,SAAA,CAAA,aAAA,CAAA,CAAA,QACA,CAFA,GAEA,EAfA,CAgBA,aAAA,CAAA,IAAA,CAAA,QAhBA,CAiBA,QAAA,CAAA,IAAA,EAAA,GAAA,aAAA,CAAA,EAAA,CAAA,aAjBA,CAmBA,SAAA,CAAA,eAAA,CAAA,aAAA,CAAA,CAAA,oBAnBA,CAoBA,MAAA,CACA,UAAA,CAAA,UADA,CAEA,QAAA,CAAA,SAAA,EAAA,IAAA,MAAA,CAAA,SAAA,CAFA,CAGA,GAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,EAAA,CAHA,CAKA,CArDA,CA+DA,eAAA,CAAA,SAAA,UAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,YAAA,CAAA,IAAA,CAAA,SAAA,gBAAA,CAAA,CACA,MAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,CAAA,aAAA,GAAA,UACA,CAFA,GAEA,EAFA,CAGA,KAAA,CAAA,KAAA,CAAA,KAHA,CAKA,MAAA,CAAA,QAAA,CAAA,KAAA,CAAA,EAAA,MAAA,CAAA,iBACA,CAtEA,CAiGA,MAnBA,SAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,iBAAA,CACA,qBAAA,CAAA,IAAA,EAAA,GAAA,qBAAA,CAAA,EAAA,CAAA,qBAFA,CAGA,GAAA,CAAA,sBAAA,CAAA,qBAAA,CAAA,aAAA,CACA,aAAA,CAAA,IAAA,EAAA,GAAA,sBAAA,CAAA,EAAA,CAAA,sBADA,CAEA,qBAAA,CAAA,QAAA,CAAA,cAFA,CAGA,qBAAA,CAAA,IAAA,EAAA,GAAA,qBAAA,CAAA,EAAA,CAAA,qBANA,CAOA,GAAA,CAAA,sBAAA,CAAA,qBAAA,CAAA,wBAAA,CACA,sBAAA,CAAA,IAAA,EAAA,GAAA,sBAAA,CAAA,EAAA,CAAA,sBARA,CASA,GAAA,CAAA,sBAAA,CAAA,sBAAA,CAAA,YAAA,CACA,YAAA,CAAA,IAAA,EAAA,GAAA,sBAAA,CAAA,EAAA,CAAA,sBADA,CAEA,MAAA,CAAA,aAAA,CAAA,GAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,CAAA,GAAA,CACA,MAAA,CAAA,CAAA,GACA,CAHA,EAGA,IAHA,CAGA,SAAA,CAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,eAAA,CAAA,CAAA,CAAA,UAAA,CAAA,YAAA,CAAA,CAAA,eAAA,CAAA,CAAA,CAAA,UAAA,CAAA,YAAA,CACA,CALA,CAMA,CAIA,CAnGA,C,CCAA,MAAA,CAAA,yDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,4BAAA,CAAA,sCAAA,CAAA,+DAAA,CAAA,sEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,aAAA,CAAA,SAAA,CAAA,YAAA,CAAA,mBAAA,CAAA,mBAAA,CAAA,mBAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAPA,CAQA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YARA,CASA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBATA,CAUA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAVA,CAWA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAXA,IAiCA,CAAA,YAAA,CAAA,QAAA,MAAA,WAAA,GAAA,CAjCA,CAsCA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,UADA,CAMA,IAAA,CAAA,UAAA,IACA,CAAA,KAAA,CAAA,IADA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EALA,CASA,qBAAA,CAAA,UAAA,IACA,CAAA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,YAAA,EADA,CAGA,uBAAA,CAAA,KAAA,CAAA,MAAA,CAAA,UAAA,EAHA,CAKA,iBAAA,CAAA,GAAA,MAAA,WAAA,mBAAA,CALA,CAMA,mBAAA,CAAA,UAAA,CAAA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CACA,MAAA,CAAA,QACA,CAHA,EAGA,IAHA,CAGA,IAHA,CAAA,CANA,CAUA,KAAA,CAAA,eAAA,CAAA,YAAA,CAAA,CACA,EAAA,CAAA,iBADA,CAEA,KAAA,CAAA,uBAFA,CAGA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,uBAAA,CAAA,CAHA,CAIA,YAAA,GAJA,CAKA,IAAA,GALA,CAMA,SAAA,GANA,CAAA,CAAA,CAOA,EAPA,CAOA,KAPA,CAOA,UAAA,CACA,YAAA,CAAA,EAAA,CAAA,SAAA,CADA,GAEA,KAAA,CAAA,eAAA,CAAA,IAAA,EAFA,CAIA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CAJA,CAMA,CAbA,EAaA,EAbA,CAaA,WAbA,CAaA,UAAA,CACA,YAAA,CAAA,EAAA,CAAA,SAAA,CADA,GAEA,KAAA,CAAA,eAAA,CAAA,QAAA,EAFA,CAIA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,UAAA,CAAA,CAJA,CAMA,CAnBA,EAmBA,EAnBA,CAmBA,UAnBA,CAmBA,UAAA,CACA,YAAA,CAAA,EAAA,CAAA,SAAA,CADA,EAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAEA,CAvBA,EAuBA,EAvBA,CAuBA,MAvBA,CAuBA,UAAA,CACA,UAAA,CAAA,UAAA,CACA,KAAA,CAAA,eAAA,CAAA,SAAA,EADA,EAEA,KAAA,CAAA,eAAA,CAAA,KAAA,EAEA,CAJA,CAIA,CAJA,CAKA,CA7BA,EA6BA,WA7BA,CA6BA,mBAAA,CAAA,MA7BA,CAVA,CAwCA,YAAA,CAAA,EAAA,CAAA,aAAA,CAAA,UAAA,CACA,GAAA,YAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAAA,eAAA,CAAA,KAAA,CAAA,eAAA,CAAA,SAAA,GAAA,SAAA,CAAA,UAAA,EADA,CAGA,KAAA,CAAA,YAAA,CAAA,cAAA,IAAA,EAHA,CAIA,QAAA,CAAA,KAAA,CAAA,QAJA,CAMA,QAAA,EAAA,eAAA,CAAA,EAAA,CAAA,QAAA,CANA,EAOA,KAAA,CAAA,eAAA,CAAA,IAAA,EAEA,CACA,CAXA,CAYA,CA7DA,CAoEA,eAAA,CAAA,UAAA,CACA,GAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,YAAA,EAAA,CACA,YAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,KAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CAEA,CAJA,EAIA,IAJA,EAKA,CAEA,MAAA,CAAA,YACA,CA/EA,CAwFA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,SAAA,IACA,CA1FA,CAgGA,YAAA,CAAA,UAAA,CACA,YAAA,EADA,CAEA,KAAA,CAAA,IAAA,EAFA,CAIA,KAAA,CAAA,IAAA,EAEA,CAtGA,CA8GA,YAAA,CAAA,UAAA,CACA,qBAAA,EADA,CAGA,KAAA,CAAA,MAAA,CAAA,MAAA,EAHA,CAKA,KAAA,CAAA,QAAA,CAAA,QAAA,IALA,CAOA,KAAA,CAAA,OAAA,CAAA,MAAA,CAPA,CASA,YAAA,CAAA,EAAA,CAAA,QAAA,CATA,EAUA,YAAA,CAAA,IAAA,EAEA,CA1HA,CAkIA,aAAA,CAAA,UAAA,CACA,KAAA,CAAA,QAAA,CAAA,QAAA,CADA,GAEA,KAAA,CAAA,eAAA,CAAA,IAAA,EAFA,CAIA,KAAA,CAAA,eAAA,CAAA,OAAA,EAJA,CAMA,KAAA,CAAA,QAAA,CAAA,QAAA,IANA,CAQA,KAAA,CAAA,MAAA,CAAA,OAAA,EARA,CAUA,KAAA,CAAA,OAAA,CAAA,OAAA,CAVA,CAYA,YAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,QAAA,CAZA,GAaA,YAAA,CAAA,KAAA,EAbA,CAcA,YAAA,CAAA,IAAA,EAdA,EAiBA,CAnJA,CAyJA,UAAA,CAAA,UAAA,CACA,KAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,KAAA,CAAA,QAAA,CAAA,QAAA,CAFA,EAGA,aAAA,EAHA,CAKA,KAAA,CAAA,QAAA,CAAA,OAAA,IALA,GAOA,YAAA,EAPA,CASA,KAAA,CAAA,QAAA,CAAA,OAAA,IATA,EAYA,CArKA,CAMA,YANA,CAOA,WAPA,CAwKA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,SAAA,CAAA,GAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,SAAA,CADA,CAEA,OAAA,CAAA,KAAA,OAAA,EAFA,CAGA,IAAA,CAAA,YAHA,CAIA,IAAA,CAAA,EAAA,CAAA,gBAAA,CAJA,CAKA,KAAA,CAAA,EAAA,CAAA,uBAAA,CALA,CAAA,CAxKA,CAgLA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CAhLA,CAqLA,iBAAA,CAAA,cArLA,EAsLA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,OAAA,CAAA,GAAA,CAAA,CACA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,OAAA,cAAA,CAAA,UAAA,CACA,KAAA,qBAAA,GAAA,GAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,SAAA,CAAA,GAIA,GAAA,CAAA,QAAA,CAAA,GAAA,CAAA,QAAA,CAAA,gBAAA,EAAA,gBAAA,CAAA,GAAA,CACA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,QAAA,CALA,CAMA,CAPA,CAOA,CACA,UAAA,GADA,CAPA,CAUA,CAXA,CAtLA,CAqMA,YAAA,EArMA,CAsMA,KAAA,OAAA,EAtMA,CAuMA,KAAA,IAAA,EAvMA,CAyMA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,YAAA,EADA,CAGA,KAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,wBAJA,CAIA,UAAA,CACA,KAAA,CAAA,MAAA,EACA,CANA,EAMA,EANA,CAMA,yBANA,CAMA,UAAA,CACA,aAAA,EADA,CAGA,KAAA,CAAA,OAAA,EACA,CAVA,EAUA,EAVA,CAUA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAVA,CAUA,UAAA,CACA,YAAA,EADA,EAEA,UAAA,EAEA,CAdA,EAcA,EAdA,CAcA,GAAA,MAAA,CAAA,YAAA,CAAA,gBAAA,CAdA,CAcA,UAAA,CACA,GAAA,KAAA,CAAA,QAAA,CAAA,SAAA,CAAA,EACA,KAAA,CAAA,QAAA,CAAA,QAAA,CADA,CACA,CACA,GAAA,YAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAAA,eAAA,CAAA,KAAA,CAAA,eAAA,CAAA,SAAA,GAAA,SAAA,CAAA,UAAA,EADA,CAGA,KAAA,CAAA,YAAA,CAAA,cAAA,IAAA,EAHA,CAIA,QAAA,CAAA,KAAA,CAAA,QAJA,CAMA,GAAA,CAAA,eAAA,CAAA,EAAA,CAAA,QAAA,CAAA,CAKA,YAJA,KAAA,CAAA,MAAA,CAAA,UAAA,GAAA,CAAA,IAAA,eAAA,CAAA,CAAA,CAIA,EAHA,eAAA,CAAA,OAAA,CAAA,OAAA,CAGA,CAEA,CAEA,YAAA,CAAA,cAAA,EACA,CAEA,CAnCA,EAmCA,EAnCA,CAmCA,YAnCA,CAmCA,UAAA,CACA,GAAA,YAAA,EAAA,OAIA,CAAA,WAAA,CAAA,mBAAA,CAAA,UAAA,CAAA,UAAA,CAAA,OAAA,GAAA,iBAAA,EAAA,EAAA,CAAA,CAAA,GAAA,CAAA,SAAA,YAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CAAA,OAAA,CAAA,YAAA,CAAA,GAAA,CADA,CAAA,CAGA,CAJA,CAJA,CAUA,WAAA,CAAA,MAVA,MAkBA,eAAA,GAAA,mBAAA,CAAA,WAAA,CAlBA,CAoBA,KAAA,CAAA,IAAA,EApBA,CAsBA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAtBA,GAuBA,KAAA,CAAA,QAAA,CAAA,SAAA,IAvBA,CAyBA,UAAA,EAzBA,IAWA,aAAA,EAXA,KAaA,CAAA,KAAA,CAAA,IAAA,EAbA,CA2BA,CA/DA,CAgEA,CA/QA,CAoRA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CAtRA,CA2RA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CA7RA,CAkSA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CApSA,CAySA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CA3SA,CAgTA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAlTA,CAAA,CAtCA,CA2VA,MAAA,CAAA,MAEA,CA7VA,C,CCAA,MAAA,CAAA,kDAAA,CAAA,CAAA,QAAA,CAAA,YAAA,CAAA,qBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,CAAA,aAmBA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAsCA,QAAA,CAAA,uBAAA,EAAA,CACA,GAAA,CAAA,wBAAA,CAwCA,MAnCA,CAAA,wBAAA,CAAA,gBAAA,CAAA,CAOA,OAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,KAAA,CAAA,KAAA,MAAA,CAAA,YAAA,EAAA,GAFA,CAaA,MATA,MAAA,EAAA,CAAA,UAAA,GAAA,KAAA,EAAA,CAAA,UAAA,CAAA,EAAA,KAAA,EAAA,CAAA,YAAA,CASA,GARA,KAAA,QAAA,CAAA,YAAA,IAQA,CAPA,KAAA,OAAA,CAAA,SAAA,CAOA,CALA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,YAAA,IACA,CAFA,CAEA,KAFA,CAKA,EAAA,IACA,CArBA,CAAA,CAsBA,aAtBA,CAAA,CAsBA,EAtBA,CAsBA,eAtBA,CAsBA,SAAA,QAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,QAAA,CAAA,KAAA,UAAA,EAFA,CAGA,QAAA,CAAA,MAAA,CAAA,cAAA,CAAA,EAAA,CAAA,CAHA,CAIA,QAAA,CAAA,QAAA,CAAA,gBAAA,CAJA,CAKA,QAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,OAAA,EACA,CAHA,EAGA,EAHA,CAGA,gBAHA,CAGA,QAHA,CAGA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,OAAA,EACA,CANA,CAOA,CAlCA,EAkCA,IAlCA,EAmCA,CAAA,wBACA,CApGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAHA,CAIA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAJA,IAMA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAQA,MALA,CAAA,MAAA,EAAA,oIACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0BAAA,CAAA,OAAA,CAAA,EADA,CAEA,6FAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,EAHA,CAIA,qEACA,CAAA,MACA,CAZA,CANA,CAyCA,aAAA,CAAA,CACA,SAAA,GADA,CAEA,SAAA,GAFA,CAGA,mBAAA,GAHA,CAIA,KAAA,CAAA,GAJA,CAKA,QAAA,CAAA,GALA,CAMA,QAAA,CAAA,GANA,CAOA,SAAA,CAAA,EAPA,CAQA,MAAA,CAAA,GARA,CASA,aAAA,CAAA,aATA,CAUA,GAAA,CAAA,EAVA,CAWA,IAAA,CAAA,EAXA,CAYA,YAAA,CAAA,GAZA,CAzCA,CAwGA,MAAA,CAAA,uBAEA,CA1GA,C,CCAA,MAAA,CAAA,yDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,wBAAA,CAAA,kDAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAJA,CAKA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SARA,IAsCA,CAAA,YAAA,CAAA,QAAA,MAAA,gBAAA,GAAA,CAtCA,CA4CA,aAAA,CAAA,CACA,GAAA,CAAA,CADA,CAEA,GAAA,GAFA,CA5CA,CAoDA,WAAA,CAAA,aAAA,CAAA,CACA,IAAA,eADA,CAMA,IAAA,CAAA,UAAA,CAQA,QAAA,CAAA,OAAA,EAAA,CACA,aAAA,GAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CADA,CAEA,IAAA,CAAA,MAAA,CAAA,MAAA,EAFA,CAOA,IAAA,CAAA,OAAA,CAAA,SAAA,CACA,CARA,EAQA,EARA,CAQA,SARA,CAQA,UAAA,CACA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CADA,CAGA,IAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAHA,EAIA,IAAA,CAAA,MAAA,EAJA,CAOA,CAAA,GAAA,IAAA,CAAA,KAAA,CAAA,MAPA,GAQA,IAAA,CAAA,MAAA,CAAA,OAAA,EARA,CASA,IAAA,CAAA,OAAA,CAAA,OAAA,CATA,EAgBA,IAAA,CAAA,OAAA,CAAA,WAAA,CACA,CAzBA,EAyBA,IAzBA,CAyBA,CACA,QAAA,CAAA,UADA,CAEA,kBAAA,CAAA,UAFA,CAzBA,CA6BA,CAmCA,QAAA,CAAA,SAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,aAAA,IACA,CA5EA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,GAAA,MAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,SAAA,EAAA,CALA,CAMA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,mBAAA,EANA,CAyCA,KAAA,KAAA,CAAA,EAzCA,CA2CA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,cADA,CAEA,IAAA,CAAA,EAAA,CAAA,SAAA,CAFA,CAGA,KAAA,CAAA,EAAA,CAAA,0BAAA,CAHA,CAIA,IAAA,CAAA,WAJA,CAAA,CA3CA,CAkDA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CAlDA,CAuDA,iBAAA,CAAA,cAvDA,EAwDA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,OAAA,CAAA,GAAA,CAAA,CACA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,OAAA,mBAAA,CAAA,UAAA,CAEA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,GAAA,CACA,CAHA,CAGA,CACA,UAAA,GADA,CAHA,CAMA,CAPA,CAxDA,CAmEA,KAAA,OAAA,EAnEA,CA2FA,UAAA,CAAA,EAAA,CAAA,UAAA,CATA,UAAA,CACA,SAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAGA,EAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,yBAFA,CAEA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAGA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CACA,CANA,EAOA,EAPA,CAOA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAPA,CAOA,UAAA,CACA,SAAA,EADA,GAEA,CAAA,GAAA,IAAA,CAAA,KAAA,CAAA,MAFA,EAGA,IAAA,CAAA,OAAA,CAAA,MAAA,CAHA,CAMA,IAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GANA,CAOA,OAAA,EAPA,CAQA,CAAA,GAAA,MAAA,CAAA,GARA,EASA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CATA,CAYA,CAnBA,CAoBA,CArHA,CA0HA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,gBAAA,CACA,CA5HA,CAiIA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CAnIA,CAwIA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CA1IA,CA+IA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAjJA,CAsJA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAxJA,CAAA,CApDA,CA+MA,MAAA,CAAA,WAEA,CAjNA,C,CCAA,MAAA,CAAA,4CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,eAAA,CAAA,qCAAA,CAAA,0CAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,iBAAA,CAAA,sBAAA,CAAA,2BAAA,CAAA,QAAA,CAAA,eAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,iBAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,CAAA,iBALA,CAMA,sBAAA,CAAA,sBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,sBAAA,CAAA,SAAA,CAAA,CAAA,sBAAA,CAAA,SAAA,CAAA,CAAA,sBANA,CAOA,2BAAA,CAAA,2BAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,2BAAA,CAAA,SAAA,CAAA,CAAA,2BAAA,CAAA,SAAA,CAAA,CAAA,2BAPA,CAQA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QARA,CASA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eATA,CAUA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAVA,CAWA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAXA,IAmCA,CAAA,iBAAA,CAAA,CACA,MAAA,CAAA,GADA,CAEA,KAAA,CAAA,GAFA,CAGA,GAAA,CAAA,EAHA,CAIA,IAAA,CAAA,EAJA,CAKA,aAAA,CAAA,aALA,CAMA,kBAAA,GANA,CAnCA,CAgDA,gBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,GADA,CAEA,KAAA,CAAA,GAFA,CAAA,CAGA,iBAHA,CAhDA,CA0DA,oBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CACA,KAAA,CAAA,GADA,CAEA,MAAA,CAAA,GAFA,CAGA,UAAA,CAAA,CACA,KAAA,CAAA,CACA,MAAA,GADA,CADA,CAHA,CAAA,CAQA,iBARA,CA1DA,CAwEA,UAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,YADA,CAMA,IAAA,CAAA,UAAA,CAYA,QAAA,CAAA,uBAAA,EAAA,IACA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EADA,CAEA,cAAA,CAAA,WAAA,CAAA,cAFA,CAGA,OAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,MAAA,CACA,UAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,YAAA,IADA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,mBAAA,IAFA,CAGA,UAAA,CAAA,SAAA,CAAA,eAAA,CAAA,OAAA,CAAA,cAAA,CAAA,uBAAA,IAHA,CAKA,CAOA,QAAA,CAAA,SAAA,EAAA,CAKA,GAAA,CAAA,UAAA,CAAA,uBAAA,EAAA,CACA,MAAA,CAAA,UAAA,CAAA,UAAA,EAAA,UAAA,CAAA,MAAA,EAAA,UAAA,CAAA,UACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,SAAA,EADA,CAGA,IAAA,CAAA,IAAA,EAHA,CAKA,IAAA,CAAA,IAAA,EAEA,CAQA,QAAA,CAAA,eAAA,CAAA,OAAA,CAAA,IACA,CAAA,UAAA,CAAA,uBAAA,EADA,CAEA,OAFA,CAEA,UAFA,CAIA,UAAA,CAAA,UAJA,EAKA,OAAA,CAAA,2BALA,CAMA,UAAA,CAAA,oBANA,CAOA,UAAA,CAAA,UAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAAA,WAAA,CAAA,MAAA,CAAA,MAAA,EAAA,oBAAA,CAAA,UAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAPA,EAQA,UAAA,CAAA,MARA,EASA,OAAA,CAAA,sBATA,CAUA,UAAA,CAAA,gBAVA,GAYA,OAAA,CAAA,iBAZA,CAaA,UAAA,CAAA,iBAbA,EAgBA,IAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,oBADA,CAEA,OAAA,GAFA,CAGA,kBAAA,CAAA,UAAA,CAAA,YAAA,EAHA,CAIA,mBAAA,CAAA,OAAA,EAAA,IAJA,CAAA,CAKA,UALA,CAAA,CAAA,CAKA,EALA,CAKA,MALA,CAKA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,MAAA,CADA,CAEA,IAAA,CAAA,MAAA,CAAA,MAAA,EACA,CARA,EAQA,EARA,CAQA,MARA,CAQA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,OAAA,CADA,CAEA,IAAA,CAAA,MAAA,CAAA,OAAA,EACA,CAXA,EAWA,KAXA,CAWA,QAXA,CAWA,UAAA,CACA,KAAA,IAAA,EACA,CAbA,CAcA,CAMA,QAAA,CAAA,gBAAA,EAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,IAAA,CAAA,UAFA,CAIA,IAAA,CAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CAJA,CAKA,IAAA,CAAA,UAAA,CAAA,IAAA,EALA,CAOA,IAAA,CAAA,UAAA,CAAA,IAAA,EAPA,CAWA,MAAA,CAAA,QAXA,CAYA,OAAA,CAAA,CAAA,OAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,SAAA,OAAA,CAAA,CACA,eAAA,CAAA,OAAA,CACA,CAFA,CAEA,UAAA,CAEA,eAAA,EACA,CALA,CAZA,CAmBA,eAAA,EAnBA,CAuBA,CAnHA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,MAAA,CAAA,KAAA,SAAA,EALA,CAMA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EANA,CAsHA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,YADA,CAEA,KAAA,CAAA,EAAA,CAAA,iBAAA,CAFA,CAGA,IAAA,CAAA,OAHA,CAIA,IAAA,CAAA,EAAA,CAAA,YAAA,CAJA,CAAA,CAtHA,CA4HA,KAAA,oBAAA,CAAA,CAAA,CAAA,mCAAA,CA5HA,CA8HA,KAAA,UAAA,CAAA,IA9HA,CAgIA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,oBAAA,EAAA,MAFA,GAMA,CAAA,CAAA,cAAA,EANA,CAOA,UAAA,CAAA,OAAA,CAAA,iBAAA,CAPA,CAQA,CARA,CAhIA,CA0IA,iBAAA,CAAA,cA1IA,EA2IA,eAAA,CAAA,MA3IA,EA4IA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,iBAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAEA,OAAA,CAAA,oBAFA,CAFA,CA5IA,CAsJA,YAAA,EAtJA,CAuJA,KAAA,OAAA,EAvJA,CAyJA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,yBAFA,CAEA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAGA,IAAA,CAAA,UAHA,GAKA,IAAA,CAAA,UAAA,CAAA,OAAA,EALA,CAMA,IAAA,CAAA,UAAA,CAAA,IANA,CAQA,CAVA,EAUA,EAVA,CAUA,iBAVA,CAUA,UAAA,CACA,SAAA,EADA,EAEA,gBAAA,EAEA,CAdA,CAeA,CA9KA,CAmLA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CACA,UAAA,CAAA,YAAA,GAAA,MAAA,CAAA,KAAA,oBAAA,CACA,CAtLA,CA2LA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAEA,KAAA,oBAAA,CAAA,MAAA,EAFA,CAIA,KAAA,UAJA,EAKA,KAAA,UAAA,CAAA,OAAA,EAEA,CAlMA,CAuMA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CAzMA,CA8MA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EADA,CAGA,KAAA,UAHA,EAIA,KAAA,UAAA,CAAA,IAAA,EAEA,CApNA,CAyNA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CA3NA,CAgOA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EADA,CAGA,KAAA,UAHA,EAIA,KAAA,UAAA,CAAA,IAAA,EAEA,CAtOA,CAAA,CAxEA,CAiTA,MAAA,CAAA,UAEA,CAnTA,C,CCAA,MAAA,CAAA,iDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,YAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,cAAA,CAAA,QAAA,CAAA,eAAA,CAAA,UAAA,CAAA,CAAA,aA0BA,QAAA,CAAA,UAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA3BA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KALA,CAMA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eARA,CASA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UATA,IAWA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,OAAA,CAUA,MAPA,CAAA,MAAA,EAAA,sHACA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,EADA,CAEA,kGAFA,CAGA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAHA,CAIA,oFAJA,CAKA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,EALA,CAMA,qBACA,CAAA,MACA,CAdA,CAXA,CAoDA,OAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,SADA,CAMA,IAAA,CAAA,UAAA,CAWA,QAAA,CAAA,SAAA,EAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EAAA,CAEA,GAAA,SAAA,QAAA,CAAA,WAAA,CAAA,YAAA,CACA,MAAA,CAAA,WAAA,CAAA,YAAA,CAJA,GAQA,CAAA,WAAA,CAAA,UAAA,CAAA,cAAA,EARA,CASA,cAAA,CAAA,WAAA,CAAA,OAAA,EAAA,EATA,CAUA,MAAA,CAAA,CAAA,cAAA,CAAA,YACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,SAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAMA,QAAA,CAAA,aAAA,EAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAGA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAHA,CAKA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,KAAA,CALA,CAWA,IAAA,CAAA,MAAA,CAAA,OAAA,EAXA,EAOA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,EAAA,EAAA,KAAA,EAPA,CAQA,IAAA,CAAA,MAAA,CAAA,MAAA,EARA,CASA,OAAA,CAAA,YAAA,CAAA,IAAA,CAAA,KAAA,CATA,EAcA,CAtDA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EAJA,CAKA,OAAA,CAAA,cAAA,CAAA,aAAA,CALA,CAyDA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,SADA,CAEA,KAAA,CAAA,EAAA,CAAA,iBAAA,CAFA,CAGA,IAAA,CAAA,KAHA,CAIA,IAAA,CAAA,EAAA,CAAA,SAAA,CAJA,CAAA,CAzDA,CAgEA,KAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,UAAA,EADA,CAEA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,UAAA,EAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAFA,CAGA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,qCAAA,CAHA,CAIA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,uCAAA,CAJA,CAKA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,qCAAA,CALA,CAMA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,KAAA,CANA,CAQA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CADA,CAEA,IAAA,CAAA,MAAA,CAAA,OAAA,EACA,CAHA,CARA,CAaA,IAAA,CAAA,OAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAEA,OAHA,GAIA,IAAA,CAAA,OAAA,EAJA,CAKA,IAAA,CAAA,MAAA,CAAA,OAAA,EALA,CAMA,UAAA,CAAA,QAAA,GAAA,cAAA,CAAA,SAAA,CAAA,CACA,OAAA,CAAA,OADA,CAAA,EAEA,IAFA,CAEA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CADA,CAEA,IAAA,CAAA,MAAA,EACA,CALA,EAKA,KALA,CAKA,UAAA,CACA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CADA,CAEA,IAAA,CAAA,MAAA,EACA,CARA,CANA,CAgBA,CAhBA,CAiBA,CA9BA,CAhEA,CAgGA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CAEA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,gCAAA,EAAA,MAFA,GAMA,CAAA,CAAA,cAAA,EANA,CAOA,UAAA,CAAA,OAAA,CAAA,cAAA,CAPA,CAQA,CARA,CAhGA,CA0GA,iBAAA,CAAA,cA1GA,EA2GA,eAAA,CAAA,MA3GA,EA4GA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,cAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CA5GA,CAqHA,YAAA,EArHA,CAsHA,KAAA,OAAA,EAtHA,CAwHA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,yBAFA,CAEA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,cAJA,CAIA,UAAA,CACA,SAAA,EADA,EAEA,aAAA,EAEA,CARA,CASA,CAvIA,CA4IA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CA9IA,CAmJA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CArJA,CA0JA,OAAA,CAAA,UAAA,CACA,KAAA,KADA,EAEA,KAAA,CAAA,IAAA,CAAA,KAAA,KAAA,CAFA,CAKA,KAAA,MAAA,CAAA,OAAA,EALA,CAMA,KAAA,MAAA,CAAA,OAAA,EACA,CAjKA,CAsKA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAxKA,CA6KA,IAAA,CAAA,UAAA,CACA,KAAA,KADA,EAEA,KAAA,CAAA,IAAA,CAAA,KAAA,KAAA,CAFA,CAKA,KAAA,MAAA,CAAA,IAAA,EACA,CAnLA,CAAA,CApDA,CA0OA,MAAA,CAAA,OAEA,CA5OA,C,CCAA,MAAA,CAAA,+DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,uCAAA,CAAA,wBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,SAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,aA2BA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CA+BA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CACA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CADA,CAEA,MAAA,CAAA,OAAA,CAAA,WAAA,CAFA,CAGA,GAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,UAAA,MAAA,CAAA,MAAA,CAAA,OAAA,EAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CACA,CAQA,QAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CACA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CADA,CAEA,MAAA,CAAA,OAAA,CAAA,WAAA,CAFA,CAGA,GAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,UAAA,MAAA,CAAA,MAAA,CAAA,OAAA,EAAA,CAAA,CACA,CASA,QAAA,CAAA,aAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,IAAA,CAMA,MAJA,CAAA,SAIA,EAHA,SAAA,CAAA,MAAA,CAGA,CAAA,SACA,CAQA,QAAA,CAAA,eAAA,CAAA,MAAA,CAAA,CAMA,QAAA,CAAA,eAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,wBAAA,EADA,CAEA,CAAA,CAAA,eAAA,EACA,CATA,GACA,CAAA,SAAA,CAAA,IAAA,MAAA,CAAA,MAAA,CAAA,OAAA,EAAA,CADA,CAEA,UAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAAA,YAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,MAAA,EAAA,IAAA,CAAA,GAAA,MAAA,CAAA,SAAA,CAAA,GAAA,CAAA,EAAA,SAFA,CAIA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,MAAA,CAJA,CAWA,MAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,SAAA,EAAA,EAAA,CAAA,QAAA,MAAA,CAAA,SAAA,CAAA,CAAA,UAAA,EAAA,EAAA,CAAA,UAAA,CAAA,eAAA,CAXA,CAYA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,SAAA,EAAA,EAAA,CAAA,QAAA,MAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAA,CAAA,UAAA,CAAA,eAAA,CACA,CAOA,QAAA,CAAA,YAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,QAAA,CACA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,KAAA,EAAA,CAAA,QAAA,CAAA,MAAA,EAAA,CACA,CA3HA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UARA,IAUA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,MAAA,CAAA,MAAA,CAYA,MATA,CAAA,MAAA,EAAA,6MASA,EARA,MAAA,CAAA,OAAA,CAAA,KAQA,EARA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAQA,EAPA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAOA,CAPA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAOA,EANA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,sHAKA,EAJA,MAAA,CAAA,OAAA,CAAA,OAIA,EAJA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAIA,EAHA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,OAGA,CAHA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MAGA,GAFA,MAAA,EAAA,CAAA,GAAA,MAEA,IAFA,MAAA,EAAA,MAEA,EADA,MAAA,EAAA,2EACA,CAAA,MACA,CAhBA,CAVA,CAgIA,aAAA,CAAA,gBAAA,CAAA,KAAA,CAAA,SAAA,CAhIA,CAqIA,GAAA,CAAA,cAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAhFA,gBA+EA,CAMA,IAAA,CAAA,UAAA,CAUA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,SAAA,CAAA,IAAA,CAFA,CAGA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,CAHA,CAIA,YAAA,CAAA,IAAA,CAJA,CAKA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA,KAAA,CALA,CAOA,CAjBA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,MAAA,CAAA,GAAA,CAAA,QAAA,EAAA,CAHA,CAmBA,KAAA,QAAA,CAAA,CACA,MAAA,CAAA,MADA,CAEA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAFA,CAGA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,eAAA,CAHA,CAIA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAJA,CAnBA,CAyBA,KAAA,MAAA,CAAA,aAAA,CAAA,CACA,QAAA,CAAA,KAAA,QAAA,CAAA,QADA,CAEA,OAAA,GAFA,CAGA,UAAA,GAHA,CAIA,WAAA,GAJA,CAAA,CAzBA,CAgCA,UAAA,CAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAFA,EAEA,EAFA,CAEA,YAFA,CAEA,UAAA,CACA,IAAA,CAAA,aAAA,GAAA,cAAA,GAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAAA,EAAA,GAAA,CAAA,IAAA,MAAA,CAAA,IAAA,CAAA,OAAA,EAAA,CAAA,EAAA,EAAA,CAAA,gBAAA,MAAA,CAAA,IAAA,CAAA,OAAA,EAAA,CAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,aAAA,CAAA,MAAA,CACA,aAAA,CAAA,IAAA,CACA,CAHA,CADA,CAKA,eAAA,CAAA,IAAA,CACA,CARA,EAQA,EARA,CAQA,MARA,CAQA,UAAA,CACA,aAAA,CAAA,IAAA,CACA,CAVA,EAUA,EAVA,CAUA,MAVA,CAUA,UAAA,CACA,aAAA,CAAA,IAAA,CACA,CAZA,EAYA,EAZA,CAYA,yBAZA,CAYA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAdA,EAcA,EAdA,CAcA,qBAdA,CAcA,SAAA,IAAA,CAAA,CACA,aAAA,CAAA,IAAA,CACA,CAhBA,CAiBA,CAvDA,CA4DA,MAAA,CAAA,UAAA,CAAA,CA5DA,CAiEA,OAAA,CAAA,UAAA,CACA,KAAA,aAAA,GAAA,cAAA,GAAA,GAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAGA,KAAA,MAHA,EAIA,KAAA,MAAA,CAAA,OAAA,EAJA,CAOA,KAAA,QAAA,CAAA,MAPA,EAQA,KAAA,QAAA,CAAA,MAAA,CAAA,MAAA,EARA,CAWA,KAAA,MAAA,CAAA,IAXA,CAYA,KAAA,QAAA,CAAA,EACA,CA9EA,CAmFA,MAAA,CAAA,UAAA,CAAA,CAnFA,CAwFA,OAAA,CAAA,UAAA,CACA,aAAA,CAAA,IAAA,CACA,CA1FA,CA+FA,IAAA,CAAA,UAAA,CAAA,CA/FA,CAoGA,IAAA,CAAA,UAAA,CACA,aAAA,CAAA,IAAA,CACA,CAtGA,CAAA,CAAA,CAyGA,MAAA,CAAA,cAEA,CAhPA,C,CCAA,MAAA,CAAA,yDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,iBAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,kBAAA,CAAA,CAAA,aAoCA,QAAA,CAAA,YAAA,EAAA,CACA,GACA,CAAA,SAAA,CAAA,EADA,CAAA,CAAA,CAGA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CACA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,CAAA,CAAA,EAGA,MAAA,CAAA,SACA,CAMA,QAAA,CAAA,gBAAA,EAAA,CAEA,UAAA,CAAA,UAAA,CACA,SAAA,CAAA,eAAA,EACA,CAFA,CAEA,GAFA,CAGA,CAYA,QAAA,CAAA,sBAAA,CAAA,OAAA,CAAA,IAKA,CAAA,OAAA,GALA,CAYA,cAAA,GAZA,CAiBA,eAAA,CAAA,kBAAA,CAAA,CACA,SAAA,CAAA,OAAA,CAAA,SAAA,EAAA,oBADA,CAEA,iBAAA,CAAA,OAAA,CAAA,iBAAA,EAAA,eAFA,CAGA,mBAAA,CAAA,OAAA,CAAA,mBAAA,EAAA,EAHA,CAIA,YAAA,GAJA,CAAA,CAjBA,CAoDA,MA5BA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,qBAAA,CAAA,UAAA,CACA,cAAA,EAAA,CAAA,SAAA,CAAA,WADA,GAEA,eAAA,CAAA,eAAA,CAAA,YAAA,EAAA,CAFA,CAGA,gBAAA,EAHA,CAKA,CALA,CA4BA,CApBA,CAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,sBAAA,CAAA,UAAA,CACA,cAAA,EAAA,CAAA,SAAA,CAAA,WADA,EAEA,eAAA,CAAA,eAAA,CAAA,YAAA,EAAA,CAEA,CAJA,CAoBA,CAZA,mBAAA,IAAA,CAAA,SAAA,CAAA,SAAA,GAAA,CAAA,MAAA,CAAA,QAYA,EAXA,CAAA,CAAA,QAAA,CAAA,CAAA,EAAA,CAAA,iBAAA,CAAA,UAAA,CACA,cADA,GAEA,aAAA,CAAA,CAAA,CAAA,KAAA,CAAA,YAAA,EAAA,IAFA,CAIA,CAJA,CAWA,CAAA,UAAA,CAAA,CAIA,MAAA,CAAA,UAAA,CACA,OAAA,GACA,CANA,CAWA,OAAA,CAAA,UAAA,CACA,OAAA,GACA,CAbA,CAmBA,SAAA,CAAA,UAAA,CACA,MAAA,CAAA,OACA,CArBA,CA2BA,kBAAA,CAAA,SAAA,IAAA,CAAA,CAWA,MAVA,CAAA,cAAA,CAAA,IAUA,CARA,cAQA,EAPA,KAAA,OAAA,CAAA,OAAA,CAOA,CANA,CAAA,CAAA,eAAA,CAAA,CAAA,WAAA,CAAA,oBAAA,IAMA,GAJA,KAAA,OAAA,CAAA,KAAA,CAIA,CAHA,CAAA,CAAA,eAAA,CAAA,CAAA,WAAA,CAAA,oBAAA,IAGA,EAAA,IACA,CAvCA,CA4CA,SAAA,CAAA,UAAA,CACA,cADA,CAgBA,KAAA,kBAAA,IAhBA,CAEA,SAAA,CAAA,WAFA,CAOA,aAAA,CAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,SAPA,EAQA,KAAA,kBAAA,IARA,CASA,eAAA,CAAA,eAAA,CAAA,aAAA,CATA,CAUA,KAAA,kBAAA,IAVA,CAWA,gBAAA,EAXA,EAaA,KAAA,kBAAA,IAbA,EAGA,KAAA,kBAAA,IAHA,CAIA,eAAA,CAAA,eAAA,CAAA,YAAA,EAAA,CAJA,CAKA,KAAA,kBAAA,IALA,CAMA,gBAAA,EANA,CAkBA,CA9DA,CAoEA,YAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,EAAA,CAAA,CAAA,KAAA,CAAA,MADA,EAEA,eAAA,CAAA,kBAAA,CAAA,KAAA,CAEA,CAxEA,CA8EA,QAAA,CAAA,UAAA,CACA,MAAA,CAAA,eAAA,CAAA,iBAAA,EACA,CAhFA,CAqFA,eAAA,CAAA,UAAA,CACA,eAAA,CAAA,eAAA,EADA,CAEA,SAAA,CAAA,eAAA,EACA,CAxFA,CA8FA,KAAA,CAAA,UAAA,CACA,MAAA,CAAA,OAAA,CAAA,EACA,CAhGA,CAAA,CAkGA,CAxNA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAJA,CAKA,kBAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBALA,IAwBA,CAAA,aAAA,CAAA,EAxBA,CAyBA,SAzBA,CA0BA,GAAA,CAAA,MAAA,CAAA,YAAA,CAAA,KAAA,IAAA,CAAA,KAAA,CAAA,yCAAA,CAAA,CAkMA,MAjMA,CAAA,SAAA,CAAA,MAAA,CAAA,YAAA,EAiMA,CAAA,sBAEA,CA9NA,C,CCAA,MAAA,CAAA,wDAAA,CAAA,CAAA,yDAAA,CAAA,CAAA,SAAA,kBAAA,CAAA,CAAA,aAEA,kBAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAFA,IA4BA,CAAA,YAAA,CAAA,EA5BA,CAyGA,MAvEA,WAAA,CACA,MAAA,CAUA,cAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,CAEA,MADA,CAAA,YAAA,CAAA,IAAA,CAAA,EAAA,CACA,CAAA,EACA,CAdA,CAqBA,kBAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,SAAA,EAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,KAAA,KAAA,EACA,CAFA,CAGA,CAzBA,CA+BA,kBAAA,CAAA,UAAA,CACA,MAAA,CAAA,YACA,CAjCA,CAuCA,kBAAA,CAAA,UAAA,CACA,MAAA,CAAA,YAAA,CAAA,CAAA,CACA,CAzCA,CA+CA,sBAAA,CAAA,UAAA,CACA,MAAA,CAAA,YAAA,CAAA,KAAA,CAAA,CAAA,CACA,CAjDA,CAuDA,SAAA,CAAA,UAAA,CACA,MAAA,CAAA,YAAA,CAAA,MACA,CAzDA,CA+DA,KAAA,CAAA,UAAA,CAEA,MADA,CAAA,YAAA,CAAA,EACA,CAAA,IACA,CAlEA,CAoEA,CAIA,CA3GA,C,CCAA,MAAA,CAAA,oDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,aAAA,CAAA,wBAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,uCAAA,CAAA,wDAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,eAAA,CAAA,UAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eARA,CASA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UATA,CAUA,qBAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBAVA,CAWA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAXA,CAkCA,GAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,aADA,CAOA,OAAA,CAAA,UAAA,CACA,GAAA,CAAA,UAAA,CAAA,KAAA,aAAA,EAAA,CAEA,UAAA,CAAA,YAAA,GAAA,WAAA,CAAA,KAAA,OAAA,EAAA,CACA,CAXA,CAiBA,IAAA,CAAA,UAAA,CA2FA,QAAA,CAAA,eAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,aAAA,IACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,eAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CA1GA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EAJA,CAKA,aAAA,GALA,CAMA,MAAA,CAAA,aAAA,CAAA,mBAAA,CANA,CAYA,YAAA,CAAA,qBAAA,EAZA,CA0HA,MA5GA,CAAA,YAAA,CAAA,cAAA,CAAA,CACA,SAAA,CAAA,oBADA,CAEA,iBAAA,CAAA,eAFA,CAGA,mBAAA,CAAA,CAAA,cAAA,CAHA,CAIA,EAAA,CAAA,kBAJA,CAAA,CA4GA,CArGA,KAAA,UAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,gBAAA,CADA,CAEA,IAAA,CAAA,aAFA,CAGA,OAAA,CAAA,mBAHA,CAIA,IAAA,CAAA,CACA,OAAA,CAAA,OADA,CAEA,KAAA,CAAA,EAAA,CAAA,yBAAA,CAFA,CAJA,CAQA,IAAA,CAAA,EAAA,CAAA,WAAA,CARA,CAAA,CAqGA,CA3FA,KAAA,YAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,6BAAA,CADA,CAEA,IAAA,CAAA,YAFA,CAGA,OAAA,CAAA,iBAHA,CAIA,IAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,sCAAA,CADA,CAJA,CAOA,IAAA,CAAA,EAAA,CAAA,kBAAA,CAPA,CAAA,CA2FA,CAjFA,KAAA,UAAA,CAAA,EAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,CAEA,CAAA,CAAA,cAAA,EAFA,CAIA,eAAA,EAJA,EAKA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,SAAA,EADA,EAEA,QAAA,CAAA,SAAA,EAEA,CAJA,CAMA,CAXA,CAiFA,CArEA,KAAA,YAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAGA,eAAA,EAHA,GAIA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,SAAA,EADA,EAEA,QAAA,CAAA,eAAA,EAEA,CAJA,CAJA,CAUA,UAAA,CAAA,OAAA,CAAA,OAAA,CAVA,CAYA,CAZA,CAqEA,CAvDA,iBAAA,CAAA,cAuDA,EAtDA,eAAA,CAAA,MAsDA,EArDA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,eAAA,EADA,EAEA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,SAAA,EADA,EAEA,QAAA,CAAA,SAAA,EAEA,CAJA,CAMA,CARA,CAQA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CARA,CAqDA,CArCA,KAAA,OAAA,EAqCA,CARA,UAAA,CACA,MAAA,CAAA,UAAA,CAAA,YAAA,GAAA,QAAA,CAAA,IAAA,CAAA,OAAA,EAAA,CACA,CAMA,GAAA,IAAA,CAAA,SAAA,gBAAA,CAAA,CAQA,QAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,IACA,CAAA,QADA,CAEA,eAFA,QAIA,MAJA,EAOA,GAAA,CAAA,MAPA,CAQA,QAAA,CAAA,YAAA,CAAA,kBAAA,EARA,EAKA,QAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,GAAA,CALA,CAWA,CAAA,QAXA,EAWA,OAAA,CAAA,OAAA,IAXA,EAYA,eAAA,CAAA,QAAA,CAAA,QAAA,EAZA,IAcA,eAAA,IAAA,aAAA,EAAA,GAdA,IAeA,MAAA,CAAA,KAAA,CAAA,UAAA,MAAA,CAAA,eAAA,CAAA,MAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,GAAA,CAAA,CAfA,CAgBA,gBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,eAAA,CAhBA,EAoBA,CAQA,QAAA,CAAA,OAAA,EAAA,CACA,GAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,sBAAA,EAAA,CACA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,mBAAA,CAAA,CAAA,MAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,CAAA,SAAA,EACA,CAFA,EAEA,GAFA,CAEA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,QAAA,CAAA,KAAA,EAAA,CACA,MAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CACA,CALA,EAKA,KALA,EAAA,EAKA,IALA,CAKA,SAAA,OAAA,CAAA,CAGA,GAAA,CAAA,MAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CACA,MAAA,CAAA,aAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CACA,CAVA,CAWA,CAUA,QAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CACA,GAAA,CAAA,QAAA,CADA,MAGA,CAAA,MAHA,EAMA,GAAA,CAAA,MANA,CAOA,QAAA,CAAA,YAAA,CAAA,kBAAA,EAPA,EAIA,QAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,GAAA,CAJA,CAUA,QAVA,CAWA,gBAAA,CAAA,OAAA,CAAA,GAAA,EAAA,IAAA,CAAA,SAAA,KAAA,CAAA,CACA,KADA,GAEA,MAAA,CAAA,KAAA,CAAA,WAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,sBAAA,EAAA,MAAA,CAAA,GAAA,CAAA,CAFA,CAGA,aAAA,GAHA,CAIA,QAAA,CAAA,YAAA,CAAA,KAAA,CAJA,CAMA,CANA,EAMA,IANA,CAMA,UAAA,CAGA,QAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,MAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CACA,CAFA,CAGA,CAZA,CAXA,CAUA,OAAA,CAAA,OAAA,IAcA,CAGA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,YAAA,EAAA,EAAA,CAAA,wBAAA,CAAA,UAAA,CACA,IAAA,CAAA,MAAA,EADA,CAGA,eAAA,EAHA,EAIA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,SAAA,EADA,EAEA,QAAA,CAAA,EAAA,CAAA,OAAA,EAAA,kBAAA,KAAA,MAAA,EAEA,CAJA,CAMA,CAVA,EAUA,EAVA,CAUA,YAVA,CAUA,UAAA,IAEA,CAAA,MAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAFA,CACA,WADA,CAIA,MAAA,EAAA,eAAA,EAJA,GAKA,aAAA,GALA,CAMA,YAAA,CAAA,kBAAA,GAAA,MAAA,EANA,CAQA,aAAA,CAAA,MAAA,CARA,CAUA,WAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,UAAA,CAVA,CAYA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,gBAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,gBAAA,CAAA,CAEA,eAHA,GAIA,eAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CACA,SAAA,CAAA,oBADA,CAEA,iBAAA,CAAA,4BAAA,MAAA,CAAA,gBAAA,CAAA,KAAA,CAFA,CAGA,EAAA,CAAA,gBAHA,CAAA,CAJA,EAWA,eAAA,CAAA,MAAA,EAXA,CAaA,aAAA,CAAA,IAAA,CAAA,gBAAA,CACA,CAdA,CAZA,CA4BA,CAtCA,EAsCA,KAtCA,CAsCA,YAtCA,CAsCA,UAAA,CAEA,GAAA,CAAA,QAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAEA,QAAA,CAAA,SAAA,EAJA,EAKA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,IAAA,CAAA,UAAA,CAAA,MAAA,EADA,CAEA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,cAAA,CAAA,MAAA,CAFA,CAGA,IAAA,CAAA,OAAA,CAAA,OAAA,CAHA,CAIA,aAAA,GACA,CALA,EAKA,EALA,CAKA,KALA,CAKA,UAAA,CACA,IAAA,CAAA,UAAA,CAAA,OAAA,EADA,CAEA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAFA,CAGA,IAAA,CAAA,OAAA,CAAA,KAAA,CACA,CATA,CAWA,CAtDA,EAsDA,KAtDA,CAsDA,mBAtDA,CAsDA,UAAA,CACA,OAAA,EACA,CAxDA,EAwDA,MAxDA,CAwDA,mBAxDA,CAwDA,UAAA,CACA,MAAA,CAAA,OAAA,EACA,CA1DA,EA0DA,EA1DA,CA0DA,yBA1DA,CA0DA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAGA,eAAA,EAHA,EAIA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,kBAAA,EAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,SAAA,EADA,EAEA,QAAA,CAAA,GAAA,CAAA,oBAAA,EAAA,kBAAA,KAAA,OAAA,EAEA,CAJA,CAMA,CApEA,CAqEA,CA3JA,CA4JA,CAvSA,CA4SA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CADA,CAEA,CAAA,CAAA,QAAA,CAAA,CAAA,GAAA,CAAA,cAAA,CACA,CA/SA,CAoTA,MAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,MAAA,EADA,CAEA,KAAA,YAAA,CAAA,MAAA,EACA,CAvTA,CA4TA,OAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,OAAA,EADA,CAEA,KAAA,YAAA,CAAA,OAAA,EACA,CA/TA,CAoUA,IAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,IAAA,EADA,CAEA,KAAA,YAAA,CAAA,IAAA,EACA,CAvUA,CA4UA,IAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,IAAA,EADA,CAEA,KAAA,YAAA,CAAA,IAAA,EACA,CA/UA,CAAA,CAAA,CAkVA,MAAA,CAAA,MAEA,CAtXA,C,CCAA,MAAA,CAAA,qEAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,WAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,YAAA,CAAA,QAAA,CAAA,eAAA,CAAA,WAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAJA,CAKA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aALA,CAMA,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YANA,CAOA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAPA,CAQA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eARA,CASA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WATA,CAgCA,GAAA,CAAA,iBAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,mBADA,CAMA,OAAA,CAAA,UAAA,CAEA,KAAA,aAAA,GAAA,YAAA,GAAA,WAAA,CAAA,KAAA,OAAA,EAAA,CACA,CATA,CAcA,IAAA,CAAA,UAAA,CA8BA,QAAA,CAAA,eAAA,EAAA,CACA,MAAA,CAAA,YAAA,EAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,GAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CACA,WAAA,CAAA,WAAA,CAAA,CAAA,IAAA,EAFA,CAIA,KAAA,CAAA,aAJA,CAKA,WAAA,CAAA,KAAA,CAAA,aAAA,CALA,CAOA,WAAA,CAAA,WAAA,CAAA,OAAA,CAEA,CAOA,QAAA,CAAA,WAAA,CAAA,OAAA,CAAA,IACA,CAAA,QAAA,CAAA,CAAA,CAAA,WAAA,CADA,CAEA,aAAA,CAAA,KAAA,CAAA,aAFA,CAGA,KAAA,CAAA,aAAA,CAAA,OAHA,CAKA,QALA,EAMA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,QAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,CACA,CAFA,CANA,CAWA,IAAA,CAAA,OAXA,EAYA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,aAAA,CAAA,OAAA,CAZA,CAeA,aAAA,GAAA,KAAA,CAAA,aAfA,EAgBA,UAAA,CAAA,OAAA,CAAA,aAAA,CAAA,KAAA,CAAA,aAAA,CAAA,aAAA,CAhBA,CAmBA,cAAA,CAAA,OAAA,CAAA,SAAA,SAAA,CAAA,CACA,SAAA,CAAA,KAAA,KAAA,OADA,CAEA,SAAA,CAAA,MAAA,EAFA,CAIA,SAAA,CAAA,OAAA,EAEA,CANA,CAOA,CAhFA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,OAAA,EAFA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAIA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EALA,CAMA,YAAA,CAAA,KAAA,SAAA,EANA,CAOA,YAAA,CAAA,YAAA,CAAA,kBAAA,EAPA,CAQA,KAAA,CAAA,CACA,eAAA,CAAA,EADA,CAEA,YAAA,CAAA,EAFA,CAGA,aAAA,CAAA,EAHA,CARA,CAaA,cAAA,CAAA,EAbA,CAeA,YAAA,CAAA,eAfA,EAgBA,YAAA,CAAA,kBAAA,CAAA,YAAA,CAAA,eAAA,CAhBA,CAmBA,GAAA,CAAA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,OAAA,GAAA,EAAA,CAmKA,MAjKA,CAAA,YAAA,CAAA,eAAA,GAAA,YAAA,EAAA,CAAA,CAAA,OAAA,CAAA,YAAA,CAiKA,EAhKA,YAAA,EAgKA,CAnGA,YAmGA,GAlGA,YAAA,CAAA,OAkGA,GAjGA,KAAA,CAAA,YAAA,CAAA,YAAA,CAAA,OAiGA,CAhGA,KAAA,CAAA,aAAA,CAAA,YAAA,CAAA,OAgGA,CA/FA,WAAA,CAAA,YAAA,CAAA,OAAA,CA+FA,EA5FA,YAAA,CAAA,SA4FA,EA3FA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,eAAA,CAAA,IAAA,CAAA,CACA,EAAA,CAAA,KAAA,CAAA,EADA,CAEA,KAAA,CAAA,EAAA,CAAA,KAAA,CAAA,IAAA,CAFA,CAAA,CAIA,CALA,CA2FA,EAjFA,KAAA,UAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,UAAA,CAAA,CACA,OAAA,CAAA,gBADA,CAEA,KAAA,CAAA,EAAA,CAAA,iCAAA,CAFA,CAGA,IAAA,CAAA,UAHA,CAIA,IAAA,CAAA,EAAA,CAAA,UAAA,CAJA,CAAA,EAKA,KALA,CAKA,QALA,CAKA,UAAA,CACA,eAAA,EADA,EAEA,IAAA,CAAA,IAAA,EAEA,CATA,EASA,EATA,CASA,OATA,CASA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,2BAAA,CACA,CAZA,EAYA,EAZA,CAYA,UAZA,CAYA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,eAAA,MAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CACA,CAdA,EAcA,EAdA,CAcA,WAdA,CAcA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,gBAAA,MAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CACA,CAhBA,CAiFA,CA/DA,KAAA,CAAA,eAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,IAAA,CAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,IAAA,CAAA,QADA,CAEA,OAAA,CAAA,KAAA,CAAA,EAFA,CAGA,KAAA,CAAA,KAAA,CAAA,KAHA,CAIA,IAAA,CAAA,SAJA,CAKA,IAAA,CAAA,EAAA,CAAA,KAAA,CAAA,KAAA,CALA,CAAA,CAAA,CAOA,UAAA,CAAA,SAAA,CAAA,gBAAA,CARA,CASA,UAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,MAAA,CAAA,OAAA,CACA,CAAA,CAAA,cAAA,EAFA,CAGA,IAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,KAAA,MAAA,EAJA,CAKA,WAAA,CAAA,OAAA,CACA,CANA,CATA,CAiBA,KAAA,CAAA,YAAA,GAAA,KAAA,CAAA,EAjBA,EAkBA,UAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,KAAA,MAAA,EACA,CAFA,CAlBA,CAuBA,cAAA,CAAA,IAAA,CAAA,UAAA,CACA,CAxBA,CA+DA,CArCA,iBAAA,CAAA,cAqCA,EApCA,eAAA,CAAA,MAoCA,EAnCA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,2BAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CAmCA,CA3BA,eAAA,EA2BA,EA1BA,KAAA,IAAA,EA0BA,CAtBA,KAAA,OAAA,EAsBA,CApBA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,eAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CANA,EAMA,EANA,CAMA,YANA,CAMA,UAAA,CACA,IAAA,CAAA,MAAA,EADA,CAEA,WAAA,CAAA,KAAA,CAAA,aAAA,CACA,CATA,EASA,EATA,CASA,aATA,CASA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAXA,EAWA,EAXA,CAWA,yBAXA,CAWA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAbA,EAaA,EAbA,CAaA,2BAbA,CAaA,UAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,IAAA,CAAA,UAAA,CAAA,UAAA,EAEA,CAjBA,EAiBA,EAjBA,CAiBA,+BAjBA,CAiBA,SAAA,IAAA,CAAA,CACA,IAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,IAAA,CACA,CAnBA,CAoBA,CAAA,UAAA,CAAA,cAAA,CAAA,KAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,eAAA,CAAA,CACA,IAAA,CAAA,OAAA,CAAA,eADA,CAEA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,aAAA,EAAA,IAAA,CAAA,SAAA,WAAA,CAAA,CACA,WAAA,EAAA,KAAA,CAAA,aAAA,GAAA,WADA,EAEA,WAAA,CAAA,WAAA,CAEA,CAJA,CAKA,CAPA,CAQA,CA5MA,CAiNA,OAAA,CAAA,UAAA,CAEA,MADA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CAAA,KAAA,aAAA,GAAA,cAAA,CAAA,KAAA,OAAA,EAAA,EAAA,IAAA,CAAA,SAAA,eAAA,CAAA,CACA,MAAA,CAAA,eAAA,CAAA,UAAA,CAAA,aAAA,CACA,CAFA,CAGA,CAtNA,CA2NA,MAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,MAAA,EACA,CA7NA,CAkOA,OAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,OAAA,EACA,CApOA,CAyOA,IAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,IAAA,EACA,CA3OA,CAgPA,IAAA,CAAA,UAAA,CACA,KAAA,UAAA,CAAA,IAAA,EACA,CAlPA,CAAA,CAAA,CAqPA,MAAA,CAAA,iBAEA,CAvRA,C,CCAA,MAAA,CAAA,yDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,wBAAA,CAAA,wBAAA,CAAA,wBAAA,CAAA,wBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,aAAA,CAAA,CAAA,aAYA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,CAAA,GAAA,CAAA,EAAA,2BAAA,CAAA,GAAA,CAAA,EAAA,kBAAA,EACA,CAEA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,GAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,GAAA,CACA,CAEA,QAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,CACA,GAAA,WAAA,QAAA,CAAA,MAAA,EAAA,IAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA,IAAA,CAAA,YAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,2BAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,EACA,GAAA,QAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAFA,MAGA,QAAA,GAAA,CAAA,EAAA,CAAA,CAAA,WAHA,GAGA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IAHA,EAIA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,CAJA,CAIA,KAAA,CAAA,IAAA,CAAA,CAAA,CAJA,CAKA,WAAA,GAAA,CAAA,EAAA,2CAAA,IAAA,CAAA,CAAA,CALA,CAKA,iBAAA,CAAA,CAAA,CAAA,MAAA,CALA,QAMA,CAEA,QAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EACA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAAA,CAAA,MADA,IACA,GAAA,CAAA,GAAA,CAAA,MADA,EAGA,IAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAEA,MAAA,CAAA,IACA,CAEA,QAAA,CAAA,kBAAA,EAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,sIAAA,CACA,CA0CA,QAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAyBA,QAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CACA,GACA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,UAAA,CAAA,KADA,CAEA,YAAA,CAAA,UAAA,CAAA,YAFA,CAGA,mBAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CAEA,CAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CAAA,YAAA,CAAA,SAAA,WAAA,CAAA,MAAA,CAAA,CACA,WADA,EAEA,QAAA,CAAA,QAAA,CAAA,UAAA,MAAA,CAAA,MAAA,CAAA,CAEA,CAJA,CAKA,CAXA,CAYA,iBAAA,CAAA,UAAA,IACA,CAAA,QAAA,CAAA,KAAA,UAAA,EADA,CAEA,eAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,gBADA,CAAA,CAFA,CAKA,QAAA,CAAA,MAAA,CAAA,eAAA,CACA,CAlBA,CADA,CAAA,IAAA,CAwBA,MAHA,CAAA,IAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,UAAA,CAGA,CAFA,aAAA,CAAA,IAAA,CAEA,CADA,aAAA,CAAA,IAAA,CAAA,eAAA,CACA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CACA,KAAA,mBAAA,EAFA,CAIA,KAAA,MAAA,CAAA,cAJA,EAKA,KAAA,iBAAA,EALA,CAQA,QAAA,CAAA,QAAA,CAAA,oBAAA,MAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,sBAAA,CAAA,UAAA,CACA,eAAA,EACA,CAFA,CAIA,CAZA,EAYA,EAZA,CAYA,aAZA,CAYA,UAAA,CACA,SAAA,CAAA,IAAA,EADA,CAEA,MAAA,CAAA,IAAA,EAFA,CAGA,gBAAA,CAAA,MAAA,CAHA,CAIA,aAAA,CAAA,UAAA,CAAA,CAAA,UAAA,IAAA,CAJA,CAKA,KAAA,QAAA,CAAA,SAAA,IACA,CAlBA,EAkBA,EAlBA,CAkBA,cAlBA,CAkBA,UAAA,CAAA,YAAA,EAAA,CAAA,CAAA,IAlBA,EAkBA,EAlBA,CAkBA,QAlBA,CAkBA,UAAA,CAAA,QAAA,EAAA,CAAA,CAAA,IAlBA,EAkBA,EAlBA,CAkBA,WAlBA,CAkBA,UAAA,CACA,yBAAA,EADA,CAEA,0BAAA,EAFA,CAGA,uBAAA,EAHA,CAIA,aAAA,CAAA,UAAA,CAAA,CAAA,UAAA,IAAA,CAJA,CAKA,gBAAA,CAAA,MAAA,CALA,CAMA,SAAA,CAAA,IAAA,EANA,CAOA,MAAA,CAAA,IAAA,EAPA,CAQA,KAAA,QAAA,CAAA,SAAA,IACA,CA3BA,EA2BA,IA3BA,EA4BA,CAWA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAmDA,MAHA,CAAA,OAAA,CAAA,gBAAA,CA/CA,CACA,gBAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CACA,KAAA,WAAA,CAAA,KAAA,OAAA,EAFA,CAGA,KAAA,UAAA,CAAA,KAAA,WAAA,EAHA,CAIA,KAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,WAAA,EAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAJA,CAKA,QAAA,CAAA,QAAA,CAAA,QAAA,CALA,CAMA,KAAA,QAAA,CAAA,aAAA,IACA,CARA,CASA,cAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CAEA,KAAA,EAAA,CAAA,aAAA,CAHA,GAIA,KAAA,OAAA,CAAA,KAAA,WAAA,CAAA,KAAA,CAAA,KAAA,WAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KAAA,UAAA,CAAA,CAAA,CAAA,KAAA,UAAA,CAAA,CAAA,CAJA,CAKA,QAAA,CAAA,WAAA,CAAA,QAAA,CALA,CAMA,KAAA,WAAA,CAAA,IANA,CAOA,KAAA,UAAA,CAAA,IAPA,CAQA,KAAA,QAAA,CAAA,aAAA,IARA,CAUA,CAnBA,CAoBA,kBAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CAIA,QAAA,CAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CALA,CAMA,QAAA,CAAA,MAAA,CAAA,YAAA,CAAA,YAAA,CANA,CAOA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,KAAA,CAAA,UAAA,CAAA,UAAA,EADA,CAEA,MAAA,CAAA,UAAA,CAAA,WAAA,EAFA,CAGA,mBAAA,UAAA,CAAA,SAAA,EAHA,CAIA,qBAAA,UAAA,CAAA,UAAA,EAJA,CAKA,sBAAA,UAAA,CAAA,YAAA,EALA,CAMA,oBAAA,UAAA,CAAA,SAAA,EANA,CAAA,CAPA,CAeA,YAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CACA,KAAA,CAAA,UAAA,CAAA,UADA,CAEA,MAAA,CAAA,UAAA,CAAA,WAFA,CAGA,IAAA,CAAA,UAAA,CAAA,SAAA,EAHA,CAIA,GAAA,CAAA,UAAA,CAAA,SAAA,EAJA,CAAA,CAMA,CAzCA,CA0CA,kBAAA,CAAA,UAAA,CACA,YAAA,CAAA,OAAA,CAAA,MAAA,EADA,CAEA,YAAA,CAAA,YAAA,CAAA,MAAA,EACA,CA7CA,CA+CA,CAAA,aAAA,CAGA,CAFA,aAAA,CAAA,OAAA,CAEA,CADA,aAAA,CAAA,OAAA,CAAA,eAAA,CACA,CAAA,OAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,QAAA,CAAA,KAAA,UAAA,EADA,CAIA,mBAAA,CAAA,MAAA,CAAA,YAAA,CAAA,SAAA,CAAA,OAJA,CAKA,SAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,uBADA,CAAA,CALA,CAQA,QAAA,CAAA,QAAA,CAAA,uBAAA,MAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA,GAAA,MAAA,CAAA,mBAAA,CAAA,MAAA,EAAA,aAAA,CAAA,UAAA,CACA,eAAA,EADA,CAEA,IAAA,CAAA,gBAAA,EACA,CAHA,EAGA,EAHA,CAGA,GAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,EAAA,WAHA,CAGA,UAAA,CACA,IAAA,CAAA,cAAA,EACA,CALA,EAKA,OALA,CAKA,SALA,CAMA,CAfA,EAeA,EAfA,CAeA,WAfA,CAeA,UAAA,CACA,SAAA,CAAA,IAAA,EADA,CAEA,MAAA,CAAA,IAAA,EAFA,CAGA,aAAA,CAAA,MAAA,CAHA,CAIA,KAAA,kBAAA,EACA,CApBA,EAoBA,EApBA,CAoBA,UApBA,CAoBA,SAAA,eAAA,CAAA,eAAA,CAAA,CAEA,QAAA,CAAA,MAAA,EAAA,eAFA,CAGA,QAAA,CAAA,MAAA,EAAA,eAHA,CAIA,QAAA,CAAA,MAAA,EAAA,eAJA,CAKA,QAAA,CAAA,MAAA,EAAA,eACA,CA1BA,EA0BA,EA1BA,CA0BA,SA1BA,CA0BA,UAAA,CACA,KAAA,kBAAA,EADA,CAIA,WAAA,CAAA,MAAA,CAJA,CAKA,SAAA,CAAA,IAAA,EALA,CAMA,MAAA,CAAA,IAAA,EANA,CAQA,eAAA,EACA,CAnCA,EAmCA,IAnCA,EAoCA,CAYA,QAAA,CAAA,qBAAA,EAAA,CAGA,SAAA,CAAA,gBAAA,EAHA,CAIA,aAAA,CAAA,SAAA,CAAA,eAAA,CAJA,CAKA,aAAA,CAAA,SAAA,CAAA,CACA,eAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,QAAA,CAAA,EAAA,CAAA,IAAA,CAAA,UAAA,GAAA,MAAA,EAAA,CACA,IADA,CAWA,MATA,CAAA,IAAA,CAAA,CACA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,UAAA,CAAA,QADA,CAEA,CAAA,CAAA,OAAA,CAAA,GAAA,EAAA,UAAA,CAAA,YAAA,CAAA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,gBAAA,CAFA,CAGA,KAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,CAAA,UAAA,CAAA,QAHA,CAIA,MAAA,CAAA,UAAA,CAAA,WAAA,EAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,YAAA,CAAA,UAAA,CAAA,eAAA,CAAA,OAAA,CAAA,eAAA,CAJA,CASA,CAAA,IACA,CAdA,CAAA,CAAA,CAeA,EAfA,CAeA,QAfA,CAeA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,UAAA,EAAA,CACA,SAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,gBADA,CAAA,CADA,CAIA,QAAA,CAAA,GAAA,CAAA,cAAA,CAAA,MAAA,CALA,CAMA,QAAA,CAAA,QAAA,CAAA,wBAAA,CANA,CAOA,QAAA,CAAA,GAAA,CAAA,CACA,UAAA,CAAA,MADA,CAAA,CAPA,CAUA,QAAA,CAAA,MAAA,CAAA,SAAA,CACA,CA1BA,EA0BA,EA1BA,CA0BA,WA1BA,CA0BA,UAAA,CACA,MAAA,CAAA,IAAA,EADA,CAEA,eAAA,EAFA,CAGA,aAAA,CAAA,UAAA,CAAA,CAAA,UAAA,IAAA,CACA,CA9BA,EA8BA,EA9BA,CA8BA,UA9BA,CA8BA,SAAA,eAAA,CAAA,eAAA,CAAA,CACA,QAAA,CAAA,MAAA,EAAA,eADA,CAEA,QAAA,CAAA,MAAA,EAAA,eAFA,CAGA,UAAA,CAAA,SAAA,EAAA,eAHA,CAIA,UAAA,CAAA,SAAA,EAAA,eAJA,CAKA,UAAA,CAAA,UAAA,EAAA,eALA,CAMA,UAAA,CAAA,YAAA,EAAA,eANA,CAOA,sBAAA,EACA,CAtCA,EAsCA,EAtCA,CAsCA,SAtCA,CAsCA,UAAA,CACA,SAAA,CAAA,YAAA,EADA,CAEA,MAAA,CAAA,IAAA,EAFA,CAGA,aAAA,CAAA,UAAA,CAAA,CAAA,UAAA,IAAA,CAHA,CAIA,yBAAA,EACA,CA3CA,EA2CA,IA3CA,EA4CA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,MAAA,CAAA,gBAAA,EADA,CAEA,aAAA,CAAA,MAAA,CAAA,eAAA,CAFA,CAGA,aAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,QAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,QAAA,CAAA,KAAA,UAAA,EADA,CAEA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,sBADA,CAAA,CAFA,CAKA,QAAA,CAAA,MAAA,CAAA,UAAA,CANA,CAOA,QAAA,CAAA,QAAA,CAAA,oBAAA,CAPA,CAQA,QAAA,CAAA,EAAA,CAAA,sBAAA,CAAA,UAAA,CACA,eAAA,EACA,CAFA,CARA,CAWA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,eAAA,EADA,CAEA,IAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAHA,CAIA,CAfA,EAeA,IAfA,EAgBA,CAQA,QAAA,CAAA,eAAA,EAAA,CACA,WAAA,CAAA,cAAA,CADA,CAEA,SAAA,CAAA,YAAA,EAFA,CAGA,MAAA,CAAA,YAAA,EACA,CAEA,QAAA,CAAA,WAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CACA,aAAA,CAAA,EAAA,CAAA,IAAA,CADA,CAEA,gBAAA,CAAA,EAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,aAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CACA,QAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CACA,QAAA,CAAA,SAAA,CAAA,EAAA,CAAA,IAAA,CACA,CASA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CACA,CAAA,CAAA,MAAA,CAAA,QAAA,CAAA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,YAAA,CAEA,CAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,KAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,IAAA,EAAA,EAAA,CAAA,CACA,CACA,CANA,CAOA,CAQA,QAAA,CAAA,eAAA,EAAA,CACA,sBAAA,EADA,CAEA,yBAAA,EAFA,CAGA,0BAAA,EAHA,CAIA,uBAAA,EACA,CAEA,QAAA,CAAA,sBAAA,EAAA,CACA,aAAA,CAAA,OAAA,CACA,CAEA,QAAA,CAAA,yBAAA,EAAA,CACA,CAAA,CAAA,MAAA,CAAA,QAAA,CAAA,SAAA,IAAA,CAAA,CACA,IAAA,CAAA,OADA,EAEA,IAAA,CAAA,IAAA,CAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAEA,CAJA,CAKA,CAEA,QAAA,CAAA,0BAAA,EAAA,CACA,SADA,EAEA,SAAA,CAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,EAAA,CAAA,OAAA,CAAA,eAAA,EAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,EAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA,CAAA,OAAA,CAAA,gBAAA,CAEA,CAEA,QAAA,CAAA,uBAAA,EAAA,CACA,MADA,EAEA,MAAA,CAAA,OAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,UAAA,CAAA,SAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAAA,CACA,QAAA,CAAA,MAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,CADA,CAGA,CAOA,QAAA,CAAA,iBAAA,EAAA,CACA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,YADA,GAEA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,YAFA,CAGA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,YAHA,EAMA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SANA,GAOA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAPA,EAUA,UAAA,CAAA,YAAA,CAAA,UAAA,CAAA,eAVA,GAWA,UAAA,CAAA,YAAA,CAAA,UAAA,CAAA,eAXA,EAcA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,YAdA,CAgBA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAhBA,GAiBA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,QAjBA,CAkBA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,QAlBA,EAqBA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QArBA,GAsBA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAtBA,EAyBA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAzBA,GA0BA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QA1BA,EA6BA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UACA,CASA,QAAA,CAAA,YAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,UAAA,CAAA,SAAA,CAAA,SADA,CAGA,OAHA,EAIA,UAAA,CAAA,WAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,YAJA,CAKA,QAAA,CAAA,MAAA,CAAA,IALA,GAOA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,WAAA,CAAA,SAAA,CAAA,UAAA,CAAA,YAPA,CAQA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,SARA,CAUA,CASA,QAAA,CAAA,aAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CACA,UAAA,CAAA,UAAA,CAAA,QADA,CAGA,QAHA,CAIA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAJA,CAMA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAEA,CASA,QAAA,CAAA,eAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,UAAA,CAAA,YAAA,CAAA,SADA,CAGA,OAHA,EAIA,UAAA,CAAA,WAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAJA,CAKA,UAAA,CAAA,YAAA,CAAA,SALA,EAOA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CAAA,SAEA,CASA,QAAA,CAAA,YAAA,CAAA,QAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CACA,UAAA,CAAA,SAAA,CAAA,QADA,CAGA,QAHA,EAIA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAJA,CAKA,QAAA,CAAA,MAAA,CAAA,IALA,GAOA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAPA,CAQA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QARA,CAUA,CAkBA,QAAA,CAAA,kBAAA,EAAA,CAEA,UAAA,CAAA,CACA,EAAA,CAAA,GADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,UAAA,GAdA,CAeA,SAAA,CAAA,UAAA,CAAA,YAfA,CAiBA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CACA,CAnBA,CAqBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,MAAA,CACA,CAzBA,CA4BA,YAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CACA,KAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,EAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,CACA,CA9BA,CAgCA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,YAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CADA,CAEA,sBAAA,EACA,CAnCA,CAAA,CAFA,CAwCA,UAAA,CAAA,CACA,EAAA,CAAA,IADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,SAAA,CAAA,UAAA,CAAA,YAdA,CAeA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CACA,CAjBA,CAkBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAtBA,CAuBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,YAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CADA,CAEA,aAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CAFA,CAGA,sBAAA,EACA,CA3BA,CAAA,CAxCA,CAsEA,UAAA,CAAA,CACA,EAAA,CAAA,IADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,CAAA,iBAFA,CAGA,MAAA,CAAA,iBAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,SAAA,CAAA,UAAA,CAAA,eAdA,CAeA,cAAA,GAfA,CAgBA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CACA,CAlBA,CAmBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAvBA,CAwBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,aAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CADA,CAEA,eAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAFA,CAGA,sBAAA,EACA,CA5BA,CAAA,CAtEA,CAqGA,UAAA,CAAA,CACA,EAAA,CAAA,GADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,SAAA,CAAA,UAAA,CAAA,eAdA,CAeA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,YAAA,CACA,CAjBA,CAkBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAtBA,CAuBA,YAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CACA,KAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,UAAA,CAAA,YAAA,EAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,IACA,CAzBA,CA0BA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,eAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CADA,CAEA,sBAAA,EACA,CA7BA,CAAA,CArGA,CAqIA,UAAA,CAAA,CACA,EAAA,CAAA,GADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,CAAA,iBAHA,CAIA,IAAA,CAAA,iBAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,cAAA,GAdA,CAeA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,WAAA,CACA,CAjBA,CAkBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAtBA,CAuBA,YAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAAA,EAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CADA,CAEA,KAAA,MAAA,CAAA,QAAA,CAAA,UAAA,CAAA,QAFA,CAGA,KAAA,MAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,eACA,CA3BA,CA4BA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CACA,aAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CADA,CAEA,cAAA,CAAA,MAAA,CAFA,CAGA,sBAAA,EACA,CAhCA,CAAA,CArIA,CAwKA,UAAA,CAAA,CACA,EAAA,CAAA,IADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,SAAA,CAAA,UAAA,CAAA,eAdA,CAeA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,WAAA,EAAA,OAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,YAAA,CACA,CAjBA,CAkBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAtBA,CAuBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,eAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CADA,CAEA,YAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CAFA,CAGA,sBAAA,EACA,CA3BA,CAAA,CAxKA,CAsMA,UAAA,CAAA,CACA,EAAA,CAAA,GADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,WAAA,CACA,CAhBA,CAiBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CArBA,CAsBA,YAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,EAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CACA,CAxBA,CAyBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CACA,YAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CADA,CAEA,sBAAA,EACA,CA5BA,CAAA,CAtMA,CAqOA,UAAA,CAAA,CACA,EAAA,CAAA,IADA,CAEA,KAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CAFA,CAQA,YAAA,CAAA,CACA,GAAA,GADA,CAEA,KAAA,GAFA,CAGA,MAAA,GAHA,CAIA,IAAA,GAJA,CARA,CAcA,SAAA,CAAA,UAAA,CAAA,YAdA,CAeA,KAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,UAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SAAA,CACA,CAjBA,CAkBA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,KAAA,WAAA,EAAA,CACA,IAAA,CAAA,KAAA,OAAA,EADA,CAEA,OAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,EAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAtBA,CAuBA,QAAA,CAAA,SAAA,KAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,YAAA,CAAA,MAAA,CAAA,CAAA,CAAA,OAAA,CADA,CAEA,YAAA,CAAA,KAAA,CAAA,CAAA,CAAA,QAAA,CAFA,CAGA,sBAAA,EACA,CA3BA,CAAA,CA6BA,CAEA,QAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CACA,QAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CACA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CADA,CAEA,OAAA,CAAA,UAAA,CAAA,UAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CAAA,IAFA,CAIA,CAEA,QAAA,CAAA,kBAAA,EAAA,CACA,YAAA,CAAA,OAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,SADA,CAAA,CADA,CAIA,YAAA,CAAA,YAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,KAAA,CAAA,cADA,CAAA,CAGA,CAzuBA,GAEA,CAAA,QAAA,CAAA,EAFA,CAKA,YAAA,CAAA,EALA,CA4cA,cAAA,CAAA,SAAA,SAAA,CAAA,CACA,UAAA,CAAA,WAAA,CAAA,SADA,CAEA,UAAA,CAAA,YAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SACA,CA/cA,CACA,YADA,CAGA,SAHA,CAIA,MAJA,CA00BA,MAzFA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,UAAA,EAAA,EAAA,CAAA,iBAAA,CAyFA,CAxFA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,EAAA,EAAA,CAAA,eAAA,CAwFA,CAvFA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,cAAA,CAuFA,CAtFA,UAAA,CAAA,CACA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,YADA,CAEA,SAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,aAFA,CAGA,eAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,eAHA,CAIA,YAAA,CAAA,CAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,EAJA,CAsFA,CA/EA,YAAA,CAAA,CACA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CAUA,MATA,MAAA,aAAA,CAAA,UAAA,CAAA,QAAA,CASA,CARA,kBAAA,EAQA,CAPA,kBAAA,EAOA,CANA,qBAAA,EAMA,CALA,YAAA,EAKA,CAJA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,IAAA,CAAA,IAAA,EADA,CAEA,IAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAHA,CAIA,CAAA,IACA,CAbA,CAcA,MAAA,CAAA,SAAA,UAAA,CAAA,CAKA,MAJA,CAAA,WAAA,CAAA,QAAA,CAAA,CAAA,UAAA,CAAA,CAIA,CAHA,SAAA,CAAA,MAAA,CAAA,UAAA,CAGA,CAFA,MAAA,CAAA,MAAA,CAAA,UAAA,CAEA,CADA,eAAA,EACA,CAAA,IACA,CApBA,CAqBA,OAAA,CAAA,UAAA,CAKA,MAJA,CAAA,WAAA,CAAA,SAAA,CAIA,CAHA,YAAA,CAAA,IAGA,CAFA,SAAA,CAAA,IAEA,CADA,MAAA,CAAA,IACA,CAAA,IACA,CA3BA,CA4BA,IAAA,CAAA,UAAA,CAKA,MAJA,CAAA,WAAA,CAAA,MAAA,CAIA,CAHA,SAAA,CAAA,IAAA,EAGA,CAFA,MAAA,CAAA,IAAA,EAEA,CADA,KAAA,QAAA,CAAA,QAAA,IACA,CAAA,IACA,CAlCA,CAmCA,IAAA,CAAA,UAAA,CAKA,MAJA,CAAA,WAAA,CAAA,MAAA,CAIA,CAHA,SAAA,CAAA,IAAA,EAGA,CAFA,MAAA,CAAA,IAAA,EAEA,CADA,KAAA,QAAA,CAAA,QAAA,IACA,CAAA,IACA,CAzCA,CAwDA,aAAA,CAAA,SAAA,GAAA,CAAA,GAAA,CAAA,CACA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,GAAA,EAAA,EAAA,CAAA,UAAA,CADA,CAEA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,GAAA,EAAA,EAAA,CAAA,QAAA,CAFA,CAIA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAJA,CAKA,UAAA,CAAA,UAAA,CAAA,GAAA,CAAA,UAAA,EAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,EAAA,GAAA,CAAA,UALA,CAMA,UAAA,CAAA,YAAA,CAAA,GAAA,CAAA,WAAA,EAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAAA,EAAA,GAAA,CAAA,WANA,CAOA,UAAA,CAAA,SAAA,CAAA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,MAPA,CAQA,iBAAA,EARA,CASA,eAAA,EACA,CAlEA,CAmEA,aAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CArEA,CAsEA,WAAA,CAAA,UAAA,CACA,MAAA,CAAA,QACA,CAxEA,CAyEA,QAAA,CAAA,UAAA,CACA,MAAA,CAAA,QACA,CA3EA,CA+EA,CAFA,SAAA,CAAA,YAAA,CAEA,CADA,UAAA,CAAA,YAAA,CACA,CAAA,YACA,CA95BA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,CAMA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aARA,CASA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aATA,CAUA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAVA,IA6CA,CAAA,iBAAA,CAAA,CACA,UAAA,CAAA,GADA,CAEA,WAAA,CAAA,GAFA,CAGA,UAAA,CAAA,GAHA,CAIA,WAAA,CAAA,EAJA,CA7CA,CAmDA,eAAA,CAAA,CACA,MAAA,CAAA,CADA,CAEA,MAAA,CAAA,CAFA,CAGA,MAAA,CAAA,EAHA,CAIA,MAAA,CAAA,EAJA,CAnDA,CAyDA,cAAA,CAAA,CACA,YAAA,CAAA,EADA,CAEA,aAAA,CAAA,EAFA,CAGA,gBAAA,CAAA,EAHA,CAIA,eAAA,CAAA,EAJA,CAzDA,CA+DA,eAAA,CAAA,CACA,aAAA,CAAA,aADA,CA/DA,CAkEA,UAlEA,CAk6BA,MAAA,CAAA,mBAEA,CAp6BA,C,CCAA,MAAA,CAAA,mDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,+BAAA,CAAA,yDAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,CAAA,aA6DA,QAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CACA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,WAAA,CADA,CAEA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,WAAA,CAAA,GAAA,CAAA,aAAA,CAAA,CAAA,GAAA,EAFA,CAIA,MAAA,CACA,UAAA,CAAA,QAAA,CAAA,KAAA,GAAA,CAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,WAAA,CAAA,YADA,CAEA,WAAA,CAAA,GAFA,CAIA,UAAA,CAAA,QAAA,CAAA,KAAA,EAJA,CAKA,WAAA,CAAA,UALA,CAOA,CAEA,QAAA,CAAA,WAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CACA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,WAAA,CADA,CAEA,YAAA,CAAA,QAAA,CAAA,QAAA,IAAA,EAFA,CAGA,WAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,cAAA,CAAA,CAAA,EAAA,CAHA,CAIA,UAAA,CAAA,QAAA,CAAA,QAAA,CAAA,GAAA,CAAA,aAAA,CAAA,CAAA,EAAA,CAJA,CAOA,MAAA,CAAA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA,WAAA,EAPA,CAQA,MAAA,CAAA,QAAA,CAAA,YAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,UAAA,EARA,CASA,MAAA,CACA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,YADA,CAEA,MAAA,CAAA,CAFA,CAGA,MAAA,CAAA,MAHA,CAIA,MAAA,CAAA,MAJA,CAMA,CAEA,QAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CACA,MAAA,CAAA,aAAA,CAAA,UAAA,GAAA,UAAA,CAAA,UACA,CA9FA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QALA,CAMA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eANA,CAOA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAPA,CAQA,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBARA,IAsCA,CAAA,YAAA,CAAA,QAAA,MAAA,eAAA,GAAA,CAtCA,CA4CA,WAAA,CAAA,CACA,YAAA,CAAA,EADA,CAEA,aAAA,CAAA,CAFA,CAGA,gBAAA,CAAA,CAHA,CAIA,eAAA,CAAA,EAJA,CA5CA,CAsGA,MAAA,CAAA,aAAA,CAAA,CACA,IAAA,cADA,CAMA,IAAA,CAAA,UAAA,CAcA,QAAA,CAAA,SAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,YAAA,IACA,CAUA,QAAA,CAAA,UAAA,EAAA,CACA,IAAA,CAAA,YAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,wBAAA,CAAA,UAAA,CAFA,EAGA,aAAA,CAAA,UAAA,CAHA,CAMA,QAAA,EANA,EAQA,SAAA,EAEA,CAEA,QAAA,CAAA,QAAA,EAAA,CACA,IAAA,CAAA,YAAA,CAAA,IAAA,EADA,CAEA,IAAA,CAAA,OAAA,CAAA,OAAA,CAFA,CAGA,IAAA,CAAA,MAAA,CAAA,MAAA,EACA,CAEA,QAAA,CAAA,SAAA,EAAA,CACA,IAAA,CAAA,YAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,IAAA,CAAA,YAAA,CAAA,IAAA,EAFA,CAKA,IAAA,CAAA,OAAA,CAAA,KAAA,CALA,CAMA,IAAA,CAAA,MAAA,CAAA,OAAA,EACA,CAEA,QAAA,CAAA,aAAA,CAAA,cAAA,CAAA,CACA,UAAA,CAAA,aAAA,CAAA,cAAA,CADA,CAEA,QAAA,CAAA,WAAA,CAAA,cAAA,CAFA,CAGA,IAAA,CAAA,YAAA,CAAA,aAAA,CAAA,CAAA,CAAA,KAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CACA,CA1DA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,kBAAA,EAJA,CAKA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,cAAA,GAAA,MAAA,EALA,CAMA,KAAA,YAAA,CAAA,mBAAA,CAAA,WAAA,CAAA,CAAA,IAAA,GAAA,MAAA,CAAA,UAAA,EAAA,EAAA,CAAA,OAAA,CAAA,UAAA,CACA,SAAA,EACA,CAFA,EAEA,IAFA,EANA,CA6DA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,aAAA,CADA,CAEA,IAAA,CAAA,wBAFA,CAGA,OAAA,CAAA,aAHA,CAIA,IAAA,CAAA,EAAA,CAAA,aAAA,CAJA,CAAA,CA7DA,CAoEA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CApEA,CAyEA,iBAAA,CAAA,cAzEA,EA0EA,eAAA,CAAA,MA1EA,EA2EA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,MAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAEA,OAAA,GAFA,CAFA,CA3EA,CAqFA,KAAA,OAAA,EArFA,CAuFA,UAAA,CAAA,EAAA,CAAA,UAAA,CApEA,UAAA,CACA,SAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CA8DA,EAAA,EAAA,CAAA,YAAA,CAAA,UAAA,CACA,aAAA,CAAA,UAAA,CACA,CAFA,EAEA,EAFA,CAEA,wBAFA,CAEA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAJA,EAIA,EAJA,CAIA,yBAJA,CAIA,UAAA,CACA,IAAA,CAAA,OAAA,EADA,CAEA,SAAA,EACA,CAPA,EAOA,EAPA,CAOA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAPA,CAOA,UAAA,CACA,SAAA,EADA,EAEA,UAAA,EAEA,CAXA,CAYA,CAzGA,CA8GA,OAAA,CAAA,UAAA,CACA,KAAA,YAAA,CAAA,OAAA,EADA,CAEA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CAjHA,CAsHA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CAxHA,CA6HA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CA/HA,CAoIA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAtIA,CA2IA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CA7IA,CAAA,CAtGA,CAkDA,UAlDA,CAkDA,QAlDA,CAsPA,MAAA,CAAA,MAEA,CAxPA,C,CCAA,MAAA,CAAA,0DAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,qBAAA,CAAA,CAAA,SAAA,GAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,CAAA,aAAA,aAsdA,IAAA,CAAA,GAtdA,WAsdA,IAAA,CAAA,GAtdA,CAQA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,EAAA,gBAAA,CAAA,GAAA,CAAA,EAAA,2BAAA,CAAA,GAAA,CAAA,EAAA,kBAAA,EACA,CAEA,QAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CACA,GAAA,KAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,GAAA,CACA,CAEA,QAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,CACA,GAAA,WAAA,QAAA,CAAA,MAAA,EAAA,IAAA,EAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,EAAA,IAAA,EAAA,IAAA,CAAA,YAAA,CAAA,CAAA,MAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAEA,QAAA,CAAA,2BAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,EACA,GAAA,QAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAFA,MAGA,QAAA,GAAA,CAAA,EAAA,CAAA,CAAA,WAHA,GAGA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IAHA,EAIA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,CAJA,CAIA,KAAA,CAAA,IAAA,CAAA,CAAA,CAJA,CAKA,WAAA,GAAA,CAAA,EAAA,2CAAA,IAAA,CAAA,CAAA,CALA,CAKA,iBAAA,CAAA,CAAA,CAAA,MAAA,CALA,QAMA,CAEA,QAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EACA,IAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAAA,CAAA,MADA,IACA,GAAA,CAAA,GAAA,CAAA,MADA,EAGA,IAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAEA,MAAA,CAAA,IACA,CAEA,QAAA,CAAA,kBAAA,EAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,sIAAA,CACA,CAqBA,QAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,IAAA,CACA,CAkFA,QAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,CAoOA,QAAA,CAAA,aAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAEA,QAAA,EAAA,QAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAHA,GAIA,aAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,0BAAA,MAAA,CAAA,UAAA,CAAA,EAAA,CAAA,GAAA,CAAA,CAJA,CAMA,aAAA,CAAA,MANA,GAOA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,SAAA,CAPA,GAQA,aAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SARA,EAWA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,UAAA,CAXA,GAYA,aAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAZA,GAgBA,CAMA,QAAA,CAAA,qBAAA,EAAA,CACA,GAAA,QAAA,EAAA,QAAA,CAAA,OAAA,SAIA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAJA,CAKA,oBAAA,GALA,CAOA,QAAA,CAAA,MAPA,EAOA,IACA,CAAA,eAAA,CAAA,GAAA,CAAA,QAAA,CAAA,KAAA,EAAA,CADA,CAEA,UAAA,CAAA,eAAA,CAAA,UAAA,EAFA,CAGA,SAAA,CAAA,eAAA,CAAA,SAAA,EAHA,CAIA,QAAA,CAAA,eAAA,CAAA,IAAA,CAAA,kBAAA,CAJA,CAOA,GAFA,QAAA,CAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,KAAA,CAAA,IAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,UAAA,EAAA,CAAA,CAAA,SAAA,EAAA,QAAA,CAGA,GAFA,oBAAA,GAEA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CACA,EAAA,CAAA,QADA,CAAA,CAAA,CAIA,UAAA,CAAA,SAAA,CAAA,SALA,CAMA,UAAA,CAAA,UAAA,CAAA,UACA,CAPA,IAQA,CAAA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,YAAA,CARA,CASA,eAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,QAAA,CATA,CAUA,SAAA,CAAA,IAAA,CAAA,CACA,EAAA,CAAA,QADA,CAEA,SAAA,CAAA,SAFA,CAGA,UAAA,CAAA,UAHA,CAAA,CAOA,CAGA,oBArCA,EAsCA,cAAA,CAAA,MAAA,EAtCA,CAwCA,CAMA,QAAA,CAAA,oBAAA,EAAA,CACA,qBAAA,EADA,CAEA,MAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,yBAAA,IACA,CAMA,QAAA,CAAA,uBAAA,EAAA,CACA,MAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,yBAAA,IACA,CAMA,QAAA,CAAA,cAAA,EAAA,CACA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,aAAA,CACA,CAQA,QAAA,CAAA,eAAA,CAAA,KAAA,CAAA,CACA,MAAA,WAAA,YAAA,CAAA,SAAA,UAAA,CAAA,KAAA,CAAA,CAAA,YAAA,CAAA,CACA,CAMA,QAAA,CAAA,cAAA,EAAA,CACA,QADA,EAEA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CACA,SAAA,CAAA,SAAA,MAAA,CAAA,SAAA,CAAA,GAAA,CADA,CAAA,CAIA,CAMA,QAAA,CAAA,aAAA,EAAA,CACA,GAAA,CAAA,aAAA,CAEA,QAHA,GAIA,aAAA,CAAA,QAAA,CAAA,UAAA,CAAA,KAAA,KAAA,IAAA,CAAA,SAAA,CAJA,CAKA,QAAA,CAAA,UAAA,CAAA,MAAA,CAAA,aAAA,EAAA,MAAA,EALA,CAMA,QAAA,CAAA,UAAA,CAAA,aANA,CAQA,CAMA,QAAA,CAAA,aAAA,EAAA,CACA,GAAA,wBAAA,EAIA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,CACA,wBAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,KAAA,GAAA,QALA,CAMA,wBAAA,CAAA,MAAA,CAAA,SAAA,CAAA,OAAA,CAAA,MAAA,GAAA,QANA,CAOA,CAMA,QAAA,CAAA,SAAA,EAAA,CACA,QAAA,EAAA,QAAA,CAAA,MADA,GAEA,WAAA,CAAA,QAAA,CAAA,OAAA,CAAA,KAAA,EAFA,CAGA,YAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,EAHA,CAIA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,WAAA,EAAA,MAAA,CAAA,YAAA,CAJA,CAMA,CAMA,QAAA,CAAA,UAAA,EAAA,CACA,GAAA,CAAA,QAAA,CAEA,QAAA,EAAA,QAAA,CAAA,OAHA,GAIA,QAAA,CAAA,wBAAA,CAAA,QAJA,CAKA,QAAA,CAAA,CAAA,EAAA,EAAA,CAAA,QAAA,CAAA,OAAA,CAAA,UAAA,EALA,CAMA,QAAA,CAAA,CAAA,EAAA,EAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,EANA,CAOA,cAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAPA,CASA,CAMA,QAAA,CAAA,cAAA,EAAA,CACA,QAAA,CAAA,GAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,eAAA,CACA,CAMA,QAAA,CAAA,aAAA,EAAA,CACA,QAAA,EAAA,QAAA,CAAA,OADA,EAEA,QAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CACA,SAAA,GADA,CAGA,UAAA,GAHA,CAKA,aAAA,GALA,CAOA,OAAA,GAPA,CAAA,CAFA,CAcA,oBAAA,EACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,QAAA,CAAA,UAAA,EADA,CAEA,uBAAA,EACA,CAUA,QAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,UAAA,CAAA,aAAA,CAAA,IACA,CAAA,KAAA,CAAA,CADA,CAEA,KAAA,CAAA,SAFA,CASA,MALA,CAAA,UAKA,GAJA,KAAA,CAAA,UAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAIA,CAHA,KAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,aAAA,GAAA,UAAA,CAAA,aAAA,CAGA,EAAA,UAAA,CAAA,KAAA,CAAA,KACA,CASA,QAAA,CAAA,mBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAeA,MAbA,CAAA,CAAA,CAAA,CAAA,EAAA,CAaA,CAZA,CAAA,CAAA,CAAA,EAAA,CAYA,CAVA,QAUA,EATA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CASA,CANA,EAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,CAAA,CAAA,CAAA,CAMA,CAJA,QAIA,EAHA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,QAAA,CAGA,CAAA,EACA,CAUA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IACA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CADA,CAEA,KAAA,CAAA,GAAA,CAAA,IAAA,CAFA,CAGA,OAAA,CAAA,GAAA,CAAA,MAAA,CAHA,CAIA,OAAA,CAAA,CAAA,KAAA,CAAA,KAAA,EAAA,CAJA,CAiCA,MA3BA,CAAA,KAAA,CAAA,OAAA,GAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CADA,OAGA,KAAA,CAAA,EAAA,CAAA,KAAA,CAHA,MAIA,CAAA,OAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,EAAA,CAIA,CARA,CA2BA,CAjBA,OAAA,CAAA,GAAA,EAiBA,CAfA,OAAA,CAAA,MAeA,EAdA,KAAA,CAAA,OAcA,CAZA,CAAA,CAAA,YAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CAGA,GAFA,KAAA,CAAA,KAAA,CAAA,QAAA,GAAA,EAAA,CAAA,KAAA,CAEA,CAAA,CAAA,KAAA,CAAA,MAAA,CACA,QAEA,CANA,CAYA,EAHA,KAAA,CAAA,GAAA,EAGA,CAAA,KACA,CAzgBA,GACA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,EAAA,EAAA,CAAA,aAAA,CADA,CAGA,YAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAHA,CAIA,YAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAJA,CAKA,aAAA,CAAA,UAAA,CAAA,UAAA,CAAA,SAAA,CALA,CAMA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,KAAA,CANA,CAOA,QAAA,CAAA,UAAA,CAAA,UAAA,CAAA,QAAA,CAPA,CAQA,WAAA,CAAA,IARA,CASA,QAAA,CAAA,IATA,CAUA,QAAA,CAAA,IAVA,CAYA,SAAA,CAAA,EAZA,CAeA,sBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,MAAA,CAAA,SAAA,EAAA,EAAA,CAAA,EAAA,CAAA,6BAAA,CAfA,CAqBA,cAAA,CAAA,SAAA,CAAA,CAKA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,SACA,CAPA,CAaA,SAAA,CAAA,UAAA,CACA,MAAA,CAAA,QAAA,EAAA,QAAA,CAAA,OACA,CAfA,CAwBA,SAAA,CAAA,SAAA,UAAA,CAAA,CAgBA,MAfA,CAAA,QAeA,EAdA,QAAA,CAAA,OAAA,CAAA,UAcA,CAbA,QAAA,CAAA,WAAA,CAAA,IAaA,CAZA,oBAAA,EAYA,CANA,KAAA,OAAA,CAAA,cAAA,CAAA,QAAA,CAAA,OAAA,CAMA,CALA,KAAA,MAAA,EAKA,EAHA,WAAA,CAAA,UAGA,CAAA,IACA,CAzCA,CAiDA,MAAA,CAAA,SAAA,KAAA,CAAA,CAeA,MAdA,CAAA,KAAA,EAAA,CAAA,CAAA,QAAA,CAAA,KAAA,CAcA,GAbA,SAAA,CAAA,eAAA,CAAA,KAAA,CAaA,EAVA,cAAA,EAUA,CATA,aAAA,EASA,CARA,aAAA,EAQA,CAPA,UAAA,EAOA,CADA,KAAA,OAAA,CAAA,MAAA,CAAA,SAAA,CACA,CAAA,IACA,CAjEA,CAyEA,MAAA,CAAA,SAAA,IAAA,CAAA,CAKA,MAJA,CAAA,IAAA,EAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAIA,EAHA,KAAA,MAAA,CAAA,SAAA,CAAA,UAAA,CAAA,IAAA,CAAA,CAGA,CAAA,IACA,CA/EA,CAsFA,MAAA,CAAA,UAAA,CACA,MAAA,MAAA,MAAA,CAAA,aAAA,CACA,CAxFA,CA+FA,OAAA,CAAA,UAAA,CACA,MAAA,MAAA,MAAA,CAAA,CAAA,aAAA,CACA,CAjGA,CAyGA,MAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAEA,QAHA,GAIA,QAAA,CAAA,KAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAJA,CAKA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CACA,GAAA,CAAA,CAAA,QAAA,CAAA,GADA,CAEA,IAAA,CAAA,CAAA,QAAA,CAAA,IAFA,CAAA,CALA,CAUA,CAnHA,CA2HA,SAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CACA,MAAA,CACA,GAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,YAAA,CAAA,wBAAA,CAAA,QAAA,CAAA,MAAA,CADA,CAEA,IAAA,CAAA,kBAAA,CAAA,CAAA,CAAA,WAAA,CAAA,wBAAA,CAAA,QAAA,CAAA,KAAA,CAFA,CAIA,CAhIA,CAuIA,MAAA,CAAA,UAAA,CAmBA,MAlBA,CAAA,QAAA,EAAA,QAAA,CAAA,OAkBA,GAjBA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,KAAA,GAAA,UAAA,CAAA,IAAA,CAiBA,CAhBA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,QAAA,EAAA,MAAA,EAgBA,CAfA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,2BAAA,EAAA,UAAA,CAAA,qBAAA,CAeA,CAdA,QAAA,CAAA,MAAA,CAAA,KAAA,GAAA,MAAA,CAAA,QAAA,CAAA,MAAA,CAcA,CAbA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,EAAA,IAAA,CAAA,OAAA,IAaA,CAZA,SAAA,EAYA,CAXA,cAAA,EAWA,CAVA,UAAA,EAUA,CATA,aAAA,EASA,CARA,cAAA,EAQA,CAHA,KAAA,OAAA,CAAA,QAAA,CAGA,EAAA,IACA,CA3JA,CAAA,CA4JA,aA5JA,CArBA,CAuLA,eAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,IAAA,CAAA,cAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAvLA,CA8LA,yBAAA,CAAA,CAAA,CAAA,QAAA,CAAA,SAAA,KAAA,CAAA,IACA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,MAAA,CADA,CAEA,YAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAFA,CAGA,UAAA,CAAA,KAAA,CAAA,MAAA,CAAA,UAHA,CAIA,QAJA,CAIA,UAJA,CAMA,QAAA,EAAA,QAAA,CAAA,MAAA,EAAA,OAAA,CAAA,IAAA,CAAA,kBAAA,CANA,EAOA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,kBAAA,CAPA,CAQA,UAAA,CAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CACA,EAAA,CAAA,QADA,CAAA,CARA,CAWA,UAAA,CAAA,SAAA,CAAA,YAXA,CAYA,UAAA,CAAA,UAAA,CAAA,UAZA,CAcA,aAAA,CAAA,UAAA,CAdA,GAiBA,QAAA,CAAA,CAAA,CAAA,QAAA,CAAA,YAAA,CAjBA,CAkBA,OAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,QAAA,CAlBA,CAmBA,SAAA,CAAA,IAAA,CAAA,CACA,EAAA,CAAA,QADA,CAEA,SAAA,CAAA,YAFA,CAGA,UAAA,CAAA,UAHA,CAAA,CAnBA,CAyBA,cAAA,CAAA,MAAA,EAzBA,CA2BA,CA3BA,IA9LA,CAWA,WAXA,CAWA,YAXA,CAWA,EAXA,CAWA,EAXA,CAaA,wBAbA,CAukBA,MA5DA,CAAA,wBAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,eAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,uBAAA,CAAA,IADA,CAEA,QAAA,CAAA,KAAA,UAAA,EAFA,CAGA,QAAA,CAAA,QAAA,CAAA,qBAAA,CAHA,CAIA,cAAA,CAAA,WAAA,CAAA,iBAAA,EAAA,EAAA,CAAA,QAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,UAAA,EAFA,CAGA,KAAA,QAAA,CAAA,QAAA,IAHA,CAKA,EAAA,CAAA,CAAA,UAAA,CAAA,UAAA,GAAA,UAAA,CAAA,KAAA,EAAA,EAAA,CALA,CAMA,EAAA,CAAA,CAAA,UAAA,CAAA,WAAA,GAAA,UAAA,CAAA,MAAA,EAAA,EAAA,CANA,CAOA,QAAA,CAAA,CACA,OAAA,CAAA,WADA,CAEA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,UAAA,CAFA,CAGA,UAAA,CAAA,GAAA,CAAA,QAAA,CAAA,UAAA,CAHA,CAIA,QAAA,CAAA,GAAA,CAAA,UAAA,CAAA,UAAA,CAJA,CAPA,CAaA,WAAA,CAAA,IAbA,CAeA,UAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,oCAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,OAAA,EACA,CAHA,CAfA,CAoBA,UAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,mCAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,MAAA,EACA,CAHA,CApBA,CAyBA,UAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,iBAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,cAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAGA,IAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAJA,CAzBA,CA+BA,UAAA,CAAA,EAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,SAAA,KAAA,CAAA,CACA,cAAA,CAAA,mBAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,KAAA,GAAA,KAAA,EACA,CAFA,CA/BA,CAkCA,cAAA,EAlCA,CAmCA,aAAA,EAnCA,CAoCA,cAAA,EACA,CArCA,EAqCA,EArCA,CAqCA,MArCA,CAqCA,UAAA,CACA,eAAA,EADA,CAEA,aAAA,EAFA,CAGA,uBAAA,CAAA,IAAA,EACA,CAzCA,EAyCA,EAzCA,CAyCA,MAzCA,CAyCA,UAAA,CACA,YAAA,EADA,CAEA,uBAAA,CAAA,IAAA,EACA,CA5CA,EA4CA,EA5CA,CA4CA,SA5CA,CA4CA,UAAA,CACA,YAAA,EADA,CAEA,WAAA,CAAA,IAFA,CAGA,QAAA,CAAA,IAHA,CAIA,QAAA,CAAA,IAJA,CAKA,uBAAA,CAAA,OAAA,EACA,CAlDA,EAkDA,IAlDA,CAkDA,UAlDA,EAkDA,MAlDA,CAkDA,QAlDA,CAmDA,CAvDA,EAuDA,EAvDA,CAuDA,kBAvDA,CAuDA,UAAA,CACA,UAAA,EACA,CAzDA,EAyDA,EAzDA,CAyDA,QAzDA,CAyDA,UAAA,CACA,aAAA,EACA,CA3DA,EA2DA,IA3DA,CA2DA,sBA3DA,CA4DA,CAAA,cACA,CAvtBA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAFA,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAIA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAJA,CAKA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UALA,CAMA,gBAAA,CAAA,gBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,gBANA,IAyCA,CAAA,QAAA,CAAA,UAAA,CAAA,QAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,KAAA,YAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CADA,CAEA,OAAA,CAAA,KAAA,KAAA,CAAA,OAAA,CAAA,UAAA,CAAA,OAAA,CAFA,CAEA,IAAA,CAAA,IAAA,EAAA,EAFA,CAGA,GAAA,CAAA,MAAA,CAAA,EAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAcA,MAXA,CAAA,MAAA,EAAA,sDAWA,EAVA,MAAA,CAAA,OAAA,CAAA,KAUA,EAVA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAUA,EATA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,KASA,CATA,MAAA,CAAA,sBAAA,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,MASA,EARA,MAAA,EAAA,gBAAA,CAAA,MAAA,CAAA,CACA,0LADA,CAEA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAAA,EAFA,CAGA,qHAHA,CAIA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,cAAA,CAAA,OAAA,CAAA,EAJA,CAKA,qIALA,CAMA,gBAAA,EAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,EANA,CAOA,sEACA,CAAA,MACA,CAlBA,CAzCA,CAsEA,WAAA,CAAA,MAAA,CAAA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAtEA,CAyFA,eAAA,CAAA,GAzFA,CA+FA,eAAA,CAAA,CA/FA,CA2GA,YAAA,CAAA,eA3GA,CAiHA,aAAA,CAAA,CACA,KAAA,CAAA,YADA,CAEA,QAAA,CAAA,eAFA,CAGA,QAAA,CAfA,CAYA,CAIA,SAAA,CAAA,EAJA,CAKA,QAAA,CAAA,eALA,CAMA,QAAA,CAAA,EANA,CAjHA,CAyHA,6BAAA,CAAA,CACA,SAAA,GADA,CAEA,SAAA,GAFA,CAGA,mBAAA,GAHA,CAIA,KAAA,CAAA,eAAA,CAAA,YAJA,CAKA,MAAA,CAAA,eAAA,CAAA,YAAA,CAAA,WALA,CAMA,QAAA,CAAA,eAAA,CAAA,eANA,CAOA,SAAA,CAAA,eAAA,CAAA,eAAA,CAAA,WAPA,CAQA,aAAA,CAAA,aARA,CASA,GAAA,CAAA,EATA,CAUA,IAAA,CAAA,EAVA,CAzHA,CA2tBA,MAAA,CAAA,qBAEA,CA7tBA,C,CCAA,MAAA,CAAA,qDAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,UAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,0DAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,CAAA,eAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,aAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAJA,CAKA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QALA,CAMA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eANA,CAOA,qBAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBAPA,CAQA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SARA,IAsCA,CAAA,YAAA,CAAA,QAAA,MAAA,aAAA,GAAA,CAtCA,CA4CA,cAAA,CAAA,CACA,OAAA,CAAA,CADA,CAGA,OAAA,CAAA,CAHA,CAKA,QAAA,CAAA,EALA,CA5CA,CAwDA,SAAA,CAAA,aAAA,CAAA,CACA,IAAA,YADA,CAMA,IAAA,CAAA,UAAA,CAaA,QAAA,CAAA,iBAAA,EAAA,CACA,GAAA,CAAA,UAAA,CAsCA,MApCA,CAAA,cAoCA,GAnCA,UAAA,CAAA,UAAA,CAAA,aAAA,GAAA,YAAA,EAmCA,CAlCA,cAAA,CAAA,qBAAA,CAAA,CACA,QAAA,CAAA,YAAA,CAAA,OADA,CAEA,QAAA,CAAA,YAAA,CAAA,OAFA,CAGA,SAAA,CAAA,YAAA,CAAA,QAHA,CAIA,SAAA,CAAA,CACA,QAAA,CAAA,UAAA,CAAA,MAAA,EADA,CAEA,kBAAA,CAAA,UAAA,CAAA,MAAA,EAFA,CAJA,CAAA,CAAA,CAQA,EARA,CAQA,MARA,CAQA,UAAA,CAIA,IAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAbA,EAaA,EAbA,CAaA,MAbA,CAaA,UAAA,CAIA,IAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAlBA,EAkBA,EAlBA,CAkBA,MAlBA,CAkBA,SAAA,KAAA,CAAA,CAKA,IAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,KAAA,CACA,CAxBA,EAwBA,EAxBA,CAwBA,OAxBA,CAwBA,UAAA,CACA,aAAA,EACA,CA1BA,EA0BA,SA1BA,CA0BA,UA1BA,CAkCA,CAHA,IAAA,CAAA,OAAA,CAAA,kBAAA,CAGA,EAAA,cACA,CAOA,QAAA,CAAA,SAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,WAAA,IACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,SAAA,EADA,CAEA,IAAA,CAAA,IAAA,EAFA,CAIA,IAAA,CAAA,IAAA,EAEA,CAMA,QAAA,CAAA,eAAA,EAAA,CACA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,GAEA,IAAA,CAAA,QAAA,CAAA,QAAA,CAFA,CAGA,aAAA,EAHA,CAKA,aAAA,EALA,CAQA,CAOA,QAAA,CAAA,aAAA,EAAA,CACA,iBAAA,EADA,CAGA,cAAA,CAAA,EAAA,CAAA,QAAA,CAHA,EAIA,cAAA,CAAA,IAAA,EAJA,CAOA,IAAA,CAAA,MAAA,CAAA,MAAA,EAPA,CAQA,UAAA,CAAA,OAAA,CAAA,eAAA,MAAA,aAAA,CARA,CASA,IAAA,CAAA,QAAA,CAAA,QAAA,IACA,CAOA,QAAA,CAAA,aAAA,EAAA,CACA,IAAA,CAAA,QAAA,CAAA,QAAA,IADA,CAEA,IAAA,CAAA,MAAA,CAAA,OAAA,EAFA,CAGA,UAAA,CAAA,OAAA,CAAA,gBAAA,MAAA,aAAA,CAHA,CAKA,cAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,QAAA,CALA,EAMA,cAAA,CAAA,IAAA,EAEA,CAzHA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,CAAA,cAAA,CAAA,KAAA,SAAA,EAAA,CAJA,CAKA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,aAAA,EALA,CAMA,cAAA,CAAA,IANA,CA4HA,KAAA,MAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,SADA,CAEA,KAAA,CAAA,EAAA,CAAA,mCAAA,CAFA,CAGA,IAAA,CAAA,EAAA,CAAA,kBAAA,CAHA,CAIA,IAAA,CAAA,MAJA,CAAA,CA5HA,CAmIA,KAAA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CACA,KAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CACA,CAHA,CAnIA,CAwIA,iBAAA,CAAA,cAxIA,EAyIA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,OAAA,CAAA,GAAA,CAAA,CACA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,OAAA,gBAAA,CAAA,UAAA,CAEA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,GAAA,CACA,CAHA,CAGA,CACA,UAAA,GADA,CAHA,CAMA,CAPA,CAzIA,CAoJA,YAAA,EApJA,CAqJA,KAAA,OAAA,EArJA,CAuJA,UAAA,CACA,EADA,CACA,UADA,CACA,UAAA,CACA,YAAA,EADA,CAEA,IAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,YAJA,CAIA,UAAA,CACA,cADA,EAEA,cAAA,CAAA,MAAA,GAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAEA,CARA,EAQA,EARA,CAQA,wBARA,CAQA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAVA,EAUA,EAVA,CAUA,yBAVA,CAUA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,aAAA,EAFA,CAKA,IAAA,CAAA,OAAA,EACA,CAhBA,EAgBA,EAhBA,CAgBA,SAhBA,CAgBA,UAAA,CACA,cADA,EAEA,cAAA,CAAA,OAAA,EAFA,CAKA,cAAA,CAAA,IACA,CAtBA,EAuBA,EAvBA,CAuBA,GAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAvBA,CAuBA,UAAA,CACA,SAAA,EADA,EAEA,eAAA,EAEA,CA3BA,EA2BA,EA3BA,CA2BA,GAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CA3BA,CA2BA,UAAA,CACA,SAAA,IAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,EAAA,IAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,iBAAA,GAAA,MAAA,EAEA,CA/BA,EA+BA,EA/BA,CA+BA,GAAA,MAAA,CAAA,YAAA,CAAA,KAAA,CA/BA,CA+BA,UAAA,CACA,SAAA,IAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,EAAA,IAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,iBAAA,GAAA,OAAA,EAEA,CAnCA,EAmCA,EAnCA,CAmCA,GAAA,MAAA,CAAA,YAAA,CAAA,OAAA,CAnCA,CAmCA,UAAA,CACA,IAAA,CAAA,QAAA,CAAA,QAAA,CADA,EAEA,aAAA,EAEA,CAvCA,CAwCA,CArMA,CA0MA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,aAAA,CACA,CA5MA,CAiNA,MAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,MAAA,EACA,CAnNA,CAwNA,OAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,OAAA,EACA,CA1NA,CA+NA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAjOA,CAsOA,IAAA,CAAA,UAAA,CACA,KAAA,MAAA,CAAA,IAAA,EACA,CAxOA,CAAA,CAxDA,CAmSA,MAAA,CAAA,SAEA,CArSA,C,CCAA,MAAA,CAAA,sCAAA,CAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,eAAA,CAAA,gBAAA,CAAA,wBAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,KAAA,CAAA,WAAA,CAAA,QAAA,CAAA,eAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,cAkJA,IAAA,CAAA,GAlJA,CAEA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAFA,CAGA,EAAA,CAAA,EAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAAA,CAAA,SAAA,CAAA,CAAA,EAHA,CAIA,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAJA,CAKA,QAAA,CAAA,QAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,CAAA,QALA,CAMA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eANA,CAOA,aAAA,CAAA,aAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,aAPA,CAQA,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SARA,IA+CA,CAAA,SAAA,CAAA,CACA,KAAA,CAAA,EADA,CAEA,KAAA,CAAA,GAFA,CA/CA,CAyDA,aAAA,CAAA,SAAA,OAAA,CAAA,KAAA,CAAA,IACA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,EADA,CAEA,QAAA,CAAA,KAAA,IAFA,CAGA,UAAA,CAAA,OAAA,CAAA,UAAA,KAAA,OAAA,CAAA,KAAA,GAAA,QAHA,CAKA,UALA,EAMA,WAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,KAAA,CANA,CAOA,OAAA,CAAA,GAAA,CAAA,aAAA,CAAA,GAAA,CAPA,GASA,WAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,OAAA,CATA,CAUA,OAAA,CAAA,GAAA,CAAA,aAAA,CAAA,EAAA,CAVA,EAaA,WAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CACA,CAvEA,CA8EA,UAAA,CAAA,SAAA,OAAA,CAAA,CACA,WAAA,CAAA,KAAA,CAAA,OAAA,CACA,CAhFA,CAwFA,YAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAEA,GAHA,GAIA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,MAJA,CAKA,GAAA,CAAA,YALA,CAOA,GAAA,CAAA,KAAA,CAAA,OAAA,CAAA,EAPA,CASA,CAjGA,CAuGA,IAAA,CAAA,aAAA,CAAA,CACA,IAAA,CAAA,MADA,CAMA,IAAA,CAAA,UAAA,CAUA,QAAA,CAAA,YAAA,EAAA,CAEA,MAAA,CAAA,SAAA,CAAA,eAAA,CAAA,UAAA,CAAA,UAAA,EAAA,CAAA,UAAA,CAAA,cAAA,GAAA,cAAA,CAAA,MAAA,IACA,CAMA,QAAA,CAAA,YAAA,EAAA,CACA,YAAA,EADA,CAGA,IAAA,CAAA,IAAA,EAHA,CAKA,IAAA,CAAA,IAAA,EAEA,CAEA,QAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAEA,CAAA,EAFA,CAEA,EAFA,CAEA,EAFA,CAEA,MAFA,CAEA,KAFA,CAIA,IAAA,CAAA,WAJA,GAKA,EAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA,CALA,CAMA,MAAA,CAAA,EAAA,CAAA,qBAAA,EANA,CAOA,EAAA,CAAA,IAAA,CAAA,UAAA,CAAA,UAAA,EAPA,CAQA,EAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,EARA,CASA,IAAA,CAAA,IAAA,CAAA,UAAA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAzGA,EAiGA,CAAA,GAQA,CAAA,CATA,CAWA,IAAA,CAAA,IAAA,MAXA,CAYA,UAAA,CAAA,IAAA,CAAA,WAAA,CAZA,CAcA,aAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAdA,CAkBA,YAAA,CAAA,IAAA,CAAA,WAAA,CAlBA,CAmBA,KAAA,CAAA,EAAA,CAAA,qBAAA,EAnBA,CAoBA,EAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,KAAA,EAAA,CAAA,CApBA,CAqBA,EAAA,CAAA,UAAA,CAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,EAAA,CAAA,CArBA,CAsBA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,EAAA,EAAA,SAAA,CAAA,EAAA,CAtBA,CAwBA,CApDA,GACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,aAAA,EAFA,CAGA,iBAAA,CAAA,UAAA,CAAA,UAAA,EAHA,CAIA,eAAA,CAAA,CAAA,iBAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,OAAA,EAAA,GAAA,EAJA,CAmEA,KAAA,aAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,SADA,CAEA,KAAA,CAAA,EAAA,CAAA,UAAA,CAFA,CAGA,IAAA,CAAA,QAHA,CAAA,CAnEA,CAwEA,KAAA,YAAA,CAAA,KAAA,aAAA,GAAA,UAAA,GAAA,WAAA,CAAA,CACA,OAAA,CAAA,QADA,CAEA,KAAA,CAAA,EAAA,CAAA,SAAA,CAFA,CAGA,IAAA,CAAA,KAHA,CAAA,CAxEA,CA8EA,KAAA,YAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,aAAA,CACA,CAHA,CA9EA,CAmFA,KAAA,aAAA,CAAA,EAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,CAAA,CAAA,cAAA,EADA,CAEA,UAAA,CAAA,OAAA,CAAA,cAAA,CACA,CAHA,CAnFA,CAwFA,iBAAA,CAAA,cAxFA,GAyFA,eAAA,CAAA,EAzFA,EA0FA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,EAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,aAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CA1FA,CAiGA,eAAA,CAAA,GAjGA,EAkGA,QAAA,CAAA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAAA,GAAA,CAAA,KAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,UAAA,CAAA,OAAA,CAAA,cAAA,CACA,CAFA,CAEA,CACA,UAAA,GADA,CAFA,CAlGA,EA2GA,YAAA,EA3GA,CA4GA,KAAA,OAAA,EA5GA,CA8GA,UAAA,CAAA,EAAA,CAAA,UAAA,CAAA,UAAA,CACA,IAAA,CAAA,IAAA,IADA,CAEA,YAAA,EAFA,CAGA,IAAA,CAAA,OAAA,EACA,CAJA,EAIA,EAJA,CAIA,YAJA,CAIA,UAAA,CACA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,cAAA,CADA,CAEA,IAAA,CAAA,WAAA,CAAA,CAAA,CAAA,WAAA,CAFA,CAGA,IAAA,CAAA,MAAA,EACA,CARA,EAQA,EARA,CAQA,aARA,CAQA,UAAA,CACA,IAAA,CAAA,MAAA,EACA,CAVA,EAUA,EAVA,CAUA,yBAVA,CAUA,UAAA,CACA,IAAA,CAAA,OAAA,EACA,CAZA,EAYA,EAZA,CAYA,aAZA,CAxDA,UAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,UAAA,CAAA,CAAA,CAEA,CAoDA,EAYA,EAZA,CAYA,cAZA,CAlDA,UAAA,CACA,KAAA,IAAA,CAAA,QAAA,CAAA,SAAA,CADA,EAEA,UAAA,CAAA,CAAA,CAAA,CAEA,CA8CA,CAaA,CAjIA,CAsIA,OAAA,CAAA,UAAA,CACA,QAAA,CAAA,MAAA,CAAA,IAAA,MAAA,CAAA,KAAA,OAAA,EAAA,CAAA,CACA,CAxIA,CA6IA,MAAA,CAAA,UAAA,CACA,KAAA,YAAA,CAAA,MAAA,EADA,CAEA,KAAA,aAAA,CAAA,MAAA,EACA,CAhJA,CAqJA,OAAA,CAAA,UAAA,CACA,KAAA,YAAA,CAAA,OAAA,EADA,CAEA,KAAA,aAAA,CAAA,OAAA,EACA,CAxJA,CA6JA,IAAA,CAAA,UAAA,CACA,KAAA,YAAA,CAAA,IAAA,EADA,CAEA,KAAA,aAAA,CAAA,IAAA,EACA,CAhKA,CAqKA,IAAA,CAAA,UAAA,CACA,KAAA,YAAA,CAAA,IAAA,EADA,CAEA,KAAA,aAAA,CAAA,IAAA,EACA,CAxKA,CAAA,CAvGA,CAkRA,MAAA,CAAA,IAEA,CApRA,C,CCCA,SAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA,CAAA,oBAAA,CAAA,MAAA,EAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,0iOADA,C,CCAA,MAAA,CAAA,sCAAA,CAAA,UAAA,CAAA,CAAA,C","sourcesContent":["define('taoQtiTest/runner/plugins/content/accessibility/focusOnFirstField',['lodash', 'taoTests/runner/plugin', 'ckeditor'], function (_, pluginFactory, ckEditor) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n ckEditor = ckEditor && Object.prototype.hasOwnProperty.call(ckEditor, 'default') ? ckEditor['default'] : ckEditor;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA;\n */\n /**\n * Check if client uses the iOS device.\n *\n * @returns {*|boolean}\n */\n\n function isIOSDevice() {\n return /(iPhone|iPad)/i.test(navigator.userAgent);\n }\n /**\n * Returns the configured plugin\n */\n\n\n var focusOnFirstField = pluginFactory({\n name: 'focusOnFirstField',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n /**\n * When an Item is loaded - if we set the focus on any input then the ipad sets the focus on the\n * keyboard, so the windows lose focus\n * and we get an error message for the test in fullscreen mode\n */\n\n if (!isIOSDevice()) {\n this.getTestRunner().after('renderitem', function () {\n var $input = self.getAreaBroker().getContentArea().find('.qti-itemBody').find('input, textarea, select').not(':input[type=button], :input[type=submit], :input[type=reset]').first();\n var $cke = $input.closest('.qti-interaction').find('.cke');\n\n if ($cke.length) {\n _.delay(function () {\n ckEditor.instances[$cke.attr('id').replace(/^cke_/, '')].focus();\n }, 100);\n } else {\n $input.focus();\n }\n });\n }\n }\n });\n\n return focusOnFirstField;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/helpers',['exports', 'i18n'], function (exports, __) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns factory-like object.\n *\n * @param {AreaBroker} broker\n *\n * @returns {Object} - when you access properties it returns the corresponding element and move the focus on it.\n * List of availiable properties\n * - question\n * - navigation\n * - toolbox\n * - teststatus\n */\n\n var getJumpElementFactory = function getJumpElementFactory(broker) {\n return {\n get container() {\n return broker.getContainer();\n },\n\n get question() {\n return broker.getContainer().find('.content-wrapper').first();\n },\n\n get navigation() {\n return broker.getNavigationArea().find(':not(.hidden)[tabindex]').first();\n },\n\n get toolbox() {\n return broker.getToolboxArea().find(':not(.hidden)[tabindex]').first();\n },\n\n get teststatus() {\n return broker.getPanelArea().find(':not(.hidden)[tabindex]').first();\n }\n\n };\n };\n /**\n * Returns testrunner item status.\n *\n * @param {Object} item - testrunner item\n *\n * @returns {String} - localized string.\n */\n\n var getItemStatus = function getItemStatus(item) {\n if (item.flagged) {\n return __('Flagged for review');\n }\n\n if (item.answered) {\n return __('Answered');\n }\n\n if (item.viewed) {\n return __('Not answered');\n }\n\n return __('Not seen');\n };\n /**\n * Detects if review panel hidden or not.\n *\n * @param {TestRunner} testRunner\n *\n * @returns {Boolean}\n */\n\n var isReviewPanelHidden = function isReviewPanelHidden(testRunner) {\n return testRunner.getAreaBroker().getPanelArea().find('.qti-navigator').is('.hidden');\n };\n\n exports.getItemStatus = getItemStatus;\n exports.getJumpElementFactory = getJumpElementFactory;\n exports.isReviewPanelHidden = isReviewPanelHidden;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/jumplinks',['lodash', 'ui/component', 'handlebars'], function (_, component, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n \n return \"hidden\";\n }\n\n buffer += \"<nav class=\\\"jump-links-box\\\" aria-label=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump Menu\", options) : helperMissing.call(depth0, \"__\", \"Jump Menu\", options)))\n + \"\\\">\\n <ul>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"question\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Question\", options) : helperMissing.call(depth0, \"__\", \"Question\", options)))\n + \" - \";\n if (helper = helpers.questionStatus) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.questionStatus); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"navigation\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Navigation\", options) : helperMissing.call(depth0, \"__\", \"Navigation\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"toolbox\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toolbox\", options) : helperMissing.call(depth0, \"__\", \"Toolbox\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.isReviewPanelEnabled), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" >\\n <button data-jump=\\\"teststatus\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Test Status and Structure\", options) : helperMissing.call(depth0, \"__\", \"Test Status and Structure\", options)))\n + \"</b></button>\\n </li>\\n <li class=\\\"jump-link-item\\\">\\n <button data-jump=\\\"shortcuts\\\" class=\\\"jump-link\\\" >\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Jump to:\", options) : helperMissing.call(depth0, \"__\", \"Jump to:\", options)))\n + \" <b>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Open Keyboard Shortcuts\", options) : helperMissing.call(depth0, \"__\", \"Open Keyboard Shortcuts\", options)))\n + \"</b></button>\\n </li>\\n </ul>\\n</nav>\\n\";\n return buffer;\n });\n function jumplinksTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {};\n /**\n * Creates and initialize the jumplinks component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @returns {jumplinks} the component, initialized and rendered\n */\n\n function jumplinksFactory(config) {\n /**\n * @typedef {Object} jumplinksBox\n */\n var jumplinksBox = component({}, defaults).on('render', function () {\n var _this = this;\n\n // handle related Jump Links\n var behavior = [{\n selector: '[data-jump=question] ',\n eventName: 'jump',\n eventParam: 'question'\n }, {\n selector: '[data-jump=navigation]',\n eventName: 'jump',\n eventParam: 'navigation'\n }, {\n selector: '[data-jump=toolbox]',\n eventName: 'jump',\n eventParam: 'toolbox'\n }, {\n selector: '[data-jump=teststatus]',\n eventName: 'jump',\n eventParam: 'teststatus'\n }, {\n selector: '[data-jump=shortcuts]',\n eventName: 'shortcuts',\n eventParam: 'shortcuts'\n }];\n\n _.forEach(behavior, function (linkDescription) {\n var $link = _this.getElement().find(linkDescription.selector);\n\n var handleLink = function handleLink() {\n _this.trigger(linkDescription.eventName, linkDescription.eventParam);\n\n _this.getElement().find(':focus').blur();\n };\n\n if ($link) {\n $link.on('click', handleLink);\n $link.on('keyup', function (event) {\n var activationKeys = [32, 13]; // link can be activated by click or enter/space keys\n\n if (activationKeys.includes(event.keyCode)) {\n handleLink();\n }\n });\n }\n });\n });\n jumplinksBox.setTemplate(jumplinksTpl);\n\n _.defer(function () {\n jumplinksBox.init(config);\n });\n\n return jumplinksBox;\n }\n\n return jumplinksFactory;\n\n});\n\n","define('taoQtiTest/runner/helpers/map',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} itemStats\n * @property {Number} questions - the number of questions items\n * @property {Number} answered - the number of answered questions\n * @property {Number} flagged - the number of items flagged for review\n * @property {Number} viewed - the number of viewed items\n * @property {Number} total - the total number of items\n * @property {Number} questionsViewed - the number of viewed questions\n */\n\n /**\n * Gets an empty stats record\n * @returns {itemStats}\n */\n\n function getEmptyStats() {\n return {\n questions: 0,\n answered: 0,\n flagged: 0,\n viewed: 0,\n total: 0,\n questionsViewed: 0\n };\n }\n /**\n * Defines a helper that provides extractors for an assessment test map\n */\n\n\n var map = {\n /**\n * Gets the jumps table\n * @param {Object} map - The assessment test map\n * @returns {Object}\n */\n getJumps: function getJumps(map) {\n return map && map.jumps;\n },\n\n /**\n * Gets the parts table\n * @param {Object} map - The assessment test map\n * @returns {Object}\n */\n getParts: function getParts(map) {\n return map && map.parts;\n },\n\n /**\n * Get sections table\n * @param {Object} map - The assessment test map\n * @returns {Object} the sections\n */\n getSections: function getSections(map) {\n var parts = this.getParts(map),\n result = {};\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections) {\n _.forEach(sections, function (section) {\n result[section.id] = section;\n });\n }\n });\n\n return result;\n },\n\n /**\n * Get active item from the test map\n * @param {Object} map - The assessment test map\n * @returns {Object} the active item\n */\n getActiveItem: function getActiveItem(map) {\n var parts = this.getParts(map),\n result = {};\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections) {\n _.forEach(sections, function (section) {\n if (section.active) {\n var items = section.items;\n\n _.forEach(items, function (item) {\n if (item.active) {\n result = item;\n }\n });\n }\n });\n }\n });\n\n return result;\n },\n\n /**\n * Return the list of remaining sections.\n * @param {Object} map - The assessment test map\n * @param {String} sectionId - The next sections will be gathered once this sectionId has been reached\n * @returns {Object} the next sections\n */\n getNextSections: function getNextSections(map, sectionId) {\n var sections = this.getSections(map),\n result = {},\n canList = false;\n\n _.forEach(sections, function (section) {\n if (canList) {\n result[section.id] = section;\n }\n\n if (section.id === sectionId) {\n canList = true;\n }\n });\n\n return result;\n },\n\n /**\n * Gets the jump at a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getJump: function getJump(map, position) {\n var jumps = this.getJumps(map);\n return jumps && jumps[position];\n },\n\n /**\n * Gets a test part by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} partName - The identifier of the test part\n * @returns {Object}\n */\n getPart: function getPart(map, partName) {\n var parts = this.getParts(map);\n return parts && parts[partName];\n },\n\n /**\n * Gets a test section by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} sectionName - The identifier of the test section\n * @returns {Object}\n */\n getSection: function getSection(map, sectionName) {\n var parts = this.getParts(map);\n var section = null;\n\n _.forEach(parts, function (part) {\n var sections = part.sections;\n\n if (sections && sections[sectionName]) {\n section = sections[sectionName];\n return false;\n }\n });\n\n return section;\n },\n\n /**\n * Gets a test item by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @returns {Object}\n */\n getItem: function getItem(map, itemIdentifier) {\n var jump = _.find(this.getJumps(map), {\n identifier: itemIdentifier\n });\n\n return this.getItemAt(map, jump && jump.position);\n },\n\n /**\n * Gets a test item by its identifier\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @returns {String[]} the raw list of categories\n */\n getItemCategories: function getItemCategories(map, itemIdentifier) {\n var item = this.getItem(map, itemIdentifier);\n\n if (item && Array.isArray(item.categories)) {\n return item.categories;\n }\n\n return [];\n },\n\n /**\n * Check if an item has a category\n * @param {Object} map - The assessment test map\n * @param {String} itemIdentifier - The identifier of the test item\n * @param {String} category - the category to check\n * @param {Boolean} [fuzzyMatch=false] - if true the prefix or the case doesn't matter\n * @returns {String[]} the raw list of categories\n */\n hasItemCategory: function hasItemCategory(map, itemIdentifier, category) {\n var fuzzyMatch = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var taoPrefix = 'x-tao-option-';\n var categories = this.getItemCategories(map, itemIdentifier);\n\n if (!category || !category.length) {\n return false;\n }\n\n var exactMatch = categories.includes(category);\n\n if (exactMatch) {\n return true;\n }\n\n if (fuzzyMatch) {\n //check by adding the prefix first\n if (!category.startsWith(taoPrefix) && category.includes(\"\".concat(taoPrefix).concat(category))) {\n return true;\n } //compare without the prefix and any case system\n\n\n var normalize = function normalize(elt) {\n return elt.replace(taoPrefix, '').replace(/[-_\\s]/g, '').toLowerCase();\n };\n\n return categories.some(function (itemCategory) {\n return normalize(itemCategory) === normalize(category);\n });\n }\n\n return false;\n },\n\n /**\n * Gets the global stats of the assessment test\n * @param {Object} map - The assessment test map\n * @returns {itemStats}\n */\n getTestStats: function getTestStats(map) {\n return map && map.stats;\n },\n\n /**\n * Gets the stats of the test part containing a particular position\n * @param {Object} map - The assessment test map\n * @param {String} partName - The identifier of the test part\n * @returns {itemStats}\n */\n getPartStats: function getPartStats(map, partName) {\n var part = this.getPart(map, partName);\n return part && part.stats;\n },\n\n /**\n * Gets the stats of the test section containing a particular position\n * @param {Object} map - The assessment test map\n * @param {String} sectionName - The identifier of the test section\n * @returns {itemStats}\n */\n getSectionStats: function getSectionStats(map, sectionName) {\n var section = this.getSection(map, sectionName);\n return section && section.stats;\n },\n\n /**\n * Gets the stats related to a particular scope\n * @param {Object} map - The assessment test map\n * @param {Number} position - The current position\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {itemStats}\n */\n getScopeStats: function getScopeStats(map, position, scope) {\n var jump = this.getJump(map, position);\n\n switch (scope) {\n case 'section':\n case 'testSection':\n return this.getSectionStats(map, jump && jump.section);\n\n case 'part':\n case 'testPart':\n return this.getPartStats(map, jump && jump.part);\n // During calculation stats for this case,\n // we are considiring all unanswered inaccessible items as answered\n\n case 'testWithoutInaccessibleItems':\n {\n var testStats = this.getTestStats(map);\n\n var _this$getPart = this.getPart(map, jump && jump.part),\n currentPartPosition = _this$getPart.position,\n isCurrentPartLinear = _this$getPart.isLinear;\n\n var parts = Object.values(this.getParts(map)).filter(function (_ref) {\n var partPosition = _ref.position;\n return partPosition < currentPartPosition;\n }).sort(function (a, b) {\n return b - a;\n }); // Find the neirest part to which test taker can not navigate\n\n var linearPartIndex = isCurrentPartLinear ? 0 : parts.findIndex(function (_ref2) {\n var isLinear = _ref2.isLinear;\n return isLinear;\n });\n\n if (linearPartIndex === -1) {\n return testStats;\n } // Calculate all unanswered and flagged questions in inaccessible parts\n\n\n var inaccessibleParts = parts.slice(linearPartIndex);\n var countOfInaccessibleUnasweredQestions = inaccessibleParts.reduce(function (acc, _ref3) {\n var _ref3$stats = _ref3.stats,\n questions = _ref3$stats.questions,\n answered = _ref3$stats.answered;\n return acc + (questions - answered);\n }, 0);\n var countOfInaccessibleFlaggedQestions = inaccessibleParts.reduce(function (acc, _ref4) {\n var flagged = _ref4.stats.flagged;\n return acc + flagged;\n }, 0);\n return Object.assign({}, testStats, {\n answered: testStats.answered + countOfInaccessibleUnasweredQestions,\n flagged: testStats.flagged - countOfInaccessibleFlaggedQestions\n });\n }\n\n default:\n case 'test':\n return this.getTestStats(map);\n }\n },\n\n /**\n * Gets the map of a particular scope from a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The current position\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {object} The scoped map\n */\n getScopeMap: function getScopeMap(map, position, scope) {\n // need a clone of the map as we will change some properties\n var scopeMap = _.cloneDeep(map || {}); // gets the current part and section\n\n\n var jump = this.getJump(scopeMap, position);\n var part = this.getPart(scopeMap, jump && jump.part);\n var section = this.getSection(scopeMap, jump && jump.section); // reduce the map to the scope part\n\n if (scope && scope !== 'test') {\n scopeMap.parts = {};\n\n if (part) {\n scopeMap.parts[jump.part] = part;\n }\n } // reduce the map to the scope section\n\n\n if (part && (scope === 'section' || scope === 'testSection')) {\n part.sections = {};\n\n if (section) {\n part.sections[jump.section] = section;\n }\n } // update the stats to reflect the scope\n\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n scopeMap.stats = this.computeStats(scopeMap.parts);\n return scopeMap;\n },\n\n /**\n * Gets the map of a particular scope from a current context\n * @param {Object} map - The assessment test map\n * @param {Object} context - The current session context\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {object} The scoped map\n */\n getScopeMapFromContext: function getScopeMapFromContext(map, context, scope) {\n // need a clone of the map as we will change some properties\n var scopeMap = _.cloneDeep(map || {});\n\n var part;\n var section; // gets the current part and section\n\n if (context && context.testPartId) {\n part = this.getPart(scopeMap, context.testPartId);\n }\n\n if (context && context.sectionId) {\n section = this.getSection(scopeMap, context.sectionId);\n } // reduce the map to the scope part\n\n\n if (scope && scope !== 'test') {\n scopeMap.parts = {};\n\n if (part) {\n scopeMap.parts[context.testPartId] = part;\n }\n } // reduce the map to the scope section\n\n\n if (part && (scope === 'section' || scope === 'testSection')) {\n part.sections = {};\n\n if (section) {\n part.sections[context.sectionId] = section;\n }\n } // update the stats to reflect the scope\n\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n scopeMap.stats = this.computeStats(scopeMap.parts);\n return scopeMap;\n },\n\n /**\n * Gets the test part containing a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemPart: function getItemPart(map, position) {\n var jump = this.getJump(map, position);\n return this.getPart(map, jump && jump.part);\n },\n\n /**\n * Gets the test section containing a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemSection: function getItemSection(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n return sections && sections[jump && jump.section];\n },\n\n /**\n * Gets the item located at a particular position\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n getItemAt: function getItemAt(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n var section = sections && sections[jump && jump.section];\n var items = section && section.items;\n return items && items[jump && jump.identifier];\n },\n\n /**\n * Gets the identifier of an existing item\n * @param {Object} map - The assessment test map\n * @param {Number|String} position - The position of the item, can already be the identifier\n * @returns {String}\n */\n getItemIdentifier: function getItemIdentifier(map, position) {\n var item;\n\n if (_.isFinite(position)) {\n item = this.getItemAt(map, position);\n } else {\n item = this.getItem(map, position);\n }\n\n return item && item.id;\n },\n\n /**\n * Applies a callback on each item of the provided map\n * @param {Object} map - The assessment test map\n * @param {Function} callback(item, section, part, map) - A callback to apply on each item\n * @returns {Object}\n */\n each: function each(map, callback) {\n if (_.isFunction(callback)) {\n _.forEach(map && map.parts, function (part) {\n _.forEach(part && part.sections, function (section) {\n _.forEach(section && section.items, function (item) {\n callback(item, section, part, map);\n });\n });\n });\n }\n\n return map;\n },\n\n /**\n * Update the map stats from a particular item\n * @param {Object} map - The assessment test map\n * @param {Number} position - The position of the item\n * @returns {Object}\n */\n updateItemStats: function updateItemStats(map, position) {\n var jump = this.getJump(map, position);\n var part = this.getPart(map, jump && jump.part);\n var sections = part && part.sections;\n var section = sections && sections[jump && jump.section];\n\n if (section) {\n section.stats = this.computeItemStats(section.items);\n }\n\n if (part) {\n part.stats = this.computeStats(part.sections);\n }\n\n if (map) {\n map.stats = this.computeStats(map.parts);\n }\n\n return map;\n },\n\n /**\n * Computes the stats for a list of items\n * @param {Object} items\n * @returns {itemStats}\n */\n computeItemStats: function computeItemStats(items) {\n return _.reduce(items, function accStats(acc, item) {\n if (!item.informational) {\n acc.questions++;\n\n if (item.answered) {\n acc.answered++;\n }\n\n if (item.viewed) {\n acc.questionsViewed++;\n }\n }\n\n if (item.flagged) {\n acc.flagged++;\n }\n\n if (item.viewed) {\n acc.viewed++;\n }\n\n acc.total++;\n return acc;\n }, getEmptyStats());\n },\n\n /**\n * Computes the global stats of a collection of stats\n * @param {Object} collection\n * @returns {itemStats}\n */\n computeStats: function computeStats(collection) {\n return _.reduce(collection, function accStats(acc, item) {\n acc.questions += item.stats.questions;\n acc.answered += item.stats.answered;\n acc.flagged += item.stats.flagged;\n acc.viewed += item.stats.viewed;\n acc.total += item.stats.total;\n acc.questionsViewed += item.stats.questionsViewed;\n return acc;\n }, getEmptyStats());\n },\n\n /**\n * Patch a testMap with a partial testMap.\n *\n * If the currentMap is null or the scope is test,\n * we just use the partialMap as it is.\n *\n * Indexes, position and stats will be (re)built.\n *\n * @param {Object} currentMap - the map to patch\n * @param {Object} partialMap - the patch\n * @param {String} partialMap.scope - indicate the scope of the patch (test, part or section)\n * @returns {Object} the patched testMap\n * @throws {TypeError} if the partialMap is no a map\n */\n patch: function patch(currentMap, partialMap) {\n var self = this;\n var targetMap;\n\n if (!_.isPlainObject(partialMap) || !partialMap.parts) {\n throw new TypeError('Invalid test map format');\n }\n\n if (!currentMap || partialMap.scope === 'test') {\n targetMap = _.cloneDeep(partialMap);\n } else {\n targetMap = _.cloneDeep(currentMap);\n\n _.forEach(partialMap.parts, function (partialPart, targetPartId) {\n if (partialMap.scope === 'part') {\n //replace the target part\n targetMap.parts[targetPartId] = _.cloneDeep(partialPart);\n }\n\n if (partialMap.scope === 'section') {\n _.forEach(partialPart.sections, function (partialSection, targetSectionId) {\n //replace the target section\n targetMap.parts[targetPartId].sections[targetSectionId] = _.cloneDeep(partialSection); //compte new section stats\n\n targetMap.parts[targetPartId].sections[targetSectionId].stats = self.computeItemStats(targetMap.parts[targetPartId].sections[targetSectionId].items);\n });\n } //compte new/updated part stats\n\n\n targetMap.parts[targetPartId].stats = self.computeStats(targetMap.parts[targetPartId].sections);\n }); //compte updated test stats\n\n\n targetMap.stats = this.computeStats(targetMap.parts);\n } //the updated map can have a different size than the original\n\n\n targetMap = this.reindex(targetMap);\n return targetMap;\n },\n\n /**\n * Rebuild the indexes, positions of all map parts.\n * Then recreate the jump table.\n *\n * @param {Object} map - the map to reindex\n * @returns {Object} the brand new map\n * @throws {TypeError} if the map is no a map\n */\n reindex: function reindex(map) {\n var offset = 0;\n var offsetPart = 0;\n var offsetSection = 0;\n var lastPartId;\n var lastSectionId;\n\n if (!_.isPlainObject(map) || !map.parts) {\n throw new TypeError('Invalid test map format');\n } //remove the jump table\n\n\n map.jumps = []; //browse the test map, by position\n\n _.sortBy(map && map.parts, 'position').forEach(function (part) {\n _.sortBy(part && part.sections, 'position').forEach(function (section) {\n _.sortBy(section && section.items, 'position').forEach(function (item) {\n if (lastPartId !== part.id) {\n offsetPart = 0;\n lastPartId = part.id;\n part.position = offset;\n }\n\n if (lastSectionId !== section.id) {\n offsetSection = 0;\n lastSectionId = section.id;\n section.position = offset;\n }\n\n item.position = offset;\n item.index = offsetSection + 1;\n item.positionInPart = offsetPart;\n item.positionInSection = offsetSection;\n map.jumps[offset] = {\n identifier: item.id,\n section: section.id,\n part: part.id,\n position: offset\n };\n offset++;\n offsetSection++;\n offsetPart++;\n });\n });\n });\n\n return map;\n },\n\n /**\n * Create the jump table for a test map\n *\n * @param {Object} map - the map\n * @returns {Object} the brand new map with a jump table\n * @throws {TypeError} if the map is no a map\n */\n createJumpTable: function createJumpTable(map) {\n if (!_.isPlainObject(map) || !map.parts) {\n throw new TypeError('Invalid test map format');\n }\n\n map.jumps = [];\n this.each(map, function (item, section, part) {\n var offset = item.position;\n map.jumps[offset] = {\n identifier: item.id,\n section: section.id,\n part: part.id,\n position: offset\n };\n });\n return map;\n }\n };\n\n return map;\n\n});\n\n","define('taoQtiTest/runner/helpers/isReviewPanelEnabled',['taoQtiTest/runner/helpers/map'], function (mapHelper) { 'use strict';\n\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * Tells if the review panel is enabled\n * @returns {Boolean}\n */\n\n function isReviewPanelEnabled(runner) {\n var reviewEnabled = mapHelper.hasItemCategory(runner.getTestMap(), runner.getTestContext().itemIdentifier, 'reviewScreen', true);\n var itemReviewEnabled = runner.getOptions().review.enabled;\n return reviewEnabled && itemReviewEnabled;\n }\n\n return isReviewPanelEnabled;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/shortcuts',['i18n', 'lodash', 'ui/component', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'handlebars'], function (__, _, component, keyNavigator, navigableDomElement, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, self=this, helperMissing=helpers.helperMissing;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <div class=\\\"shortcuts-group-wrapper\\\">\\n <h3 class=\\\"shortcuts-group-title\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</h3>\\n <ul class=\\\"shortcuts-group-list\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.shortcuts), {hash:{},inverse:self.noop,fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n </div>\\n \";\n return buffer;\n }\n function program2(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"shortcut-item\\\">\\n <span class=\\\"shortcut-item-shortcut\\\">\\n <kbd>\";\n if (helper = helpers.shortcut) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.shortcut); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</kbd>\\n </span>\\n <span class=\\\"shortcut-item-action\\\">\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n </span>\\n </li>\\n \";\n return buffer;\n }\n\n buffer += \"<div class=\\\"shortcuts-list-wrapper\\\">\\n <div class=\\\"shortcuts-list\\\" role=\\\"dialog\\\" aria-modal=\\\"true\\\" aria-labelledby=\\\"jumplinks/shortcuts-heading\\\"\\n aria-describedby=\\\"jumplinks/shortcuts-description\\\">\\n <h2 class=\\\"shortcuts-list-title\\\" id=\\\"jumplinks/shortcuts-heading\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Keyboard Navigation\", options) : helperMissing.call(depth0, \"__\", \"Keyboard Navigation\", options)))\n + \"\\n </h2>\\n <div id=\\\"jumplinks/shortcuts-description\\\">\\n <p class=\\\"shortcuts-list-description\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Keyboard shortcuts for the Accessibility Tools are available to the Test-taker.\", options) : helperMissing.call(depth0, \"__\", \"Keyboard shortcuts for the Accessibility Tools are available to the Test-taker.\", options)))\n + \"\\n </p>\\n <p class=\\\"shortcuts-list-description\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"You can magnify the content by up to 200%. Check your browser settings to find out how to do it.\", options) : helperMissing.call(depth0, \"__\", \"You can magnify the content by up to 200%. Check your browser settings to find out how to do it.\", options)))\n + \"\\n </p>\\n </div>\\n <button aria-label=\\\"Close dialog\\\" class=\\\"btn-close small\\\" data-control=\\\"close-btn\\\" type=\\\"button\\\">\\n <span class=\\\"icon-close\\\"></span>\\n </button>\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.shortcutsGroups), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function shortcutsTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n shortcutsGroups: [{\n id: 'navigation-shortcuts',\n label: __('Navigation shortcuts'),\n shortcuts: [{\n id: 'next',\n shortcut: 'ALT + Shift + N',\n label: __('Go to the next question')\n }, {\n id: 'previous',\n shortcut: 'ALT + Shift + P',\n label: __('Go to the previous question')\n }, {\n id: 'current',\n shortcut: 'ALT + Shift + Q',\n label: __('Go to the current question')\n }, {\n id: 'top',\n shortcut: 'ALT + Shift + T',\n label: __('Go to the top of the page')\n }]\n }]\n };\n /**\n * Creates and initialize the shortcuts component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @param {Object} config\n * @returns {shortcutsBox} the component, initialized and rendered\n */\n\n function shortcutsBoxFactory(config) {\n var ESK_KEY_CODE = 27;\n var shortcutsBox = component({}, defaults).on('render', function () {\n var _this = this;\n\n var $element = this.getElement();\n var $closeBtn = $element.find('.btn-close');\n var $keyNavigationItems = this.getElement().find('.shortcuts-list, .btn-close');\n $closeBtn.on('click', function () {\n return _this.trigger('close');\n }); // handle overlay click\n\n $element.on('click', function (e) {\n if ($element.is(e.target)) {\n _this.trigger('close');\n }\n });\n $element.on('keyup', function (e) {\n if (e.keyCode === ESK_KEY_CODE) {\n _this.trigger('close');\n }\n });\n this.navigator = keyNavigator({\n elements: navigableDomElement.createFromDoms($keyNavigationItems),\n propagateTab: false\n }) // keep cursor at close button\n .on('tab', function () {\n this.setCursorAt(1);\n }).on('shift+tab', function () {\n this.setCursorAt(1);\n }) // prevent focus move from shortcuts modal\n .on('blur', function () {\n _.defer(function () {\n if (!_this.navigator.isFocused()) {\n _this.navigator.focus();\n }\n });\n }).on('activate', function (cursor) {\n cursor.navigable.getElement().click();\n });\n this.navigator.first();\n }).on('destroy', function () {\n this.navigator.destroy();\n this.getElement().remove();\n });\n shortcutsBox.setTemplate(shortcutsTpl);\n shortcutsBox.init(config);\n return shortcutsBox;\n }\n\n return shortcutsBoxFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/jumplinks/plugin',['i18n', 'jquery', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/isReviewPanelEnabled', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/helpers', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/jumplinks', 'taoQtiTest/runner/plugins/content/accessibility/jumplinks/shortcuts', 'util/shortcut', 'util/namespace', 'handlebars'], function (__, $$1, pluginFactory, isReviewPanelEnabled, helpers, jumplinksFactory, shortcutsFactory, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n isReviewPanelEnabled = isReviewPanelEnabled && Object.prototype.hasOwnProperty.call(isReviewPanelEnabled, 'default') ? isReviewPanelEnabled['default'] : isReviewPanelEnabled;\n jumplinksFactory = jumplinksFactory && Object.prototype.hasOwnProperty.call(jumplinksFactory, 'default') ? jumplinksFactory['default'] : jumplinksFactory;\n shortcutsFactory = shortcutsFactory && Object.prototype.hasOwnProperty.call(shortcutsFactory, 'default') ? shortcutsFactory['default'] : shortcutsFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"jump-links-container\\\"></div>\\n\";\n });\n function containerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the JumpLinks plugin.\n * adding jumplinks accessibility feature for quick navigation\n */\n\n var plugin = pluginFactory({\n name: 'jumplinks',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var item = testRunner.getCurrentItem();\n var config = {\n isReviewPanelEnabled: isReviewPanelEnabled(testRunner),\n questionStatus: helpers.getItemStatus(item)\n };\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var areaBroker = this.getAreaBroker();\n var getJumpElement = helpers.getJumpElementFactory(areaBroker);\n var shortcutsConfig = navigator.appVersion.indexOf(\"Mac\") !== -1 ? {\n shortcutsGroups: [{\n id: 'navigation-shortcuts',\n label: __('Navigation shortcuts'),\n shortcuts: [{\n id: 'next',\n shortcut: 'OPTION + Shift + N',\n label: __('Go to the next question')\n }, {\n id: 'previous',\n shortcut: 'OPTION + Shift + P',\n label: __('Go to the previous question')\n }, {\n id: 'current',\n shortcut: 'OPTION + Shift + Q',\n label: __('Go to the current question')\n }, {\n id: 'top',\n shortcut: 'OPTION + Shift + T',\n label: __('Go to the top of the page')\n }]\n }]\n } : {};\n\n if (testRunnerOptions.allowShortcuts) {\n pluginShortcuts.goToTop && shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.goToTop, this.getName(), true), function () {\n $$1('[tabindex]').first().focus();\n }, {\n avoidInput: true,\n prevent: true\n });\n pluginShortcuts.goToQuestion && shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.goToQuestion, this.getName(), true), function () {\n getJumpElement.question.focus();\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n\n this.jumplinks = jumplinksFactory(config).on('render', function () {\n _this.jumplinks.on('jump', function (jumpTo) {\n var $element = getJumpElement[jumpTo];\n $element.focus();\n });\n\n _this.jumplinks.on('shortcuts', function () {\n if (_this.shortcuts) {\n return;\n }\n\n _this.shortcuts = shortcutsFactory(shortcutsConfig);\n\n _this.shortcuts.render(_this.getAreaBroker().getControlArea());\n\n _this.shortcuts.on('close', function () {\n _this.shortcuts.destroy();\n\n _this.shortcuts = null;\n });\n });\n }).on('update', function update(params) {\n this.trigger('changeReviewPanel', params.isReviewPanelEnabled);\n this.trigger('changeQuesitionStatus', params.questionStatus);\n }).on('changeReviewPanel', function changeReviewPanel(enabled) {\n var elem = this.getElement();\n var panelJumplink = elem.find('[data-jump=\"teststatus\"]').parent();\n\n if (enabled) {\n panelJumplink.removeClass('hidden');\n } else {\n panelJumplink.addClass('hidden');\n }\n }).on('changeQuesitionStatus', function changeQuesitionStatus(questionStatus) {\n var elem = this.getElement();\n var text = \"\".concat(__('Question'), \" - \").concat(questionStatus);\n elem.find('[data-jump=\"question\"] > b').text(text);\n });\n testRunner.on('renderitem', function () {\n var currentItem = testRunner.getCurrentItem();\n var updatedConfig = {\n isReviewPanelEnabled: !helpers.isReviewPanelHidden(testRunner) && isReviewPanelEnabled(testRunner),\n questionStatus: helpers.getItemStatus(currentItem)\n };\n\n var announcedText = __('Item %s loaded', currentItem.position);\n\n var $announce = $$1('[aria-live=polite][role=alert]').first();\n\n if ($announce.length !== 1) {\n $announce = $$1('<div aria-live=\"polite\" role=\"alert\" class=\"visible-hidden\"></div>');\n $$1('main').first().append($announce);\n }\n\n $announce.text(announcedText);\n\n _this.jumplinks.trigger('update', updatedConfig);\n }).on('tool-flagitem', function () {\n var currentItem = testRunner.getCurrentItem();\n var questionStatus = helpers.getItemStatus(Object.assign({}, currentItem, {\n flagged: !currentItem.flagged\n }));\n\n _this.jumplinks.trigger('changeQuesitionStatus', questionStatus);\n }).on('tool-reviewpanel', function () {\n var wasHidden = helpers.isReviewPanelHidden(testRunner);\n\n _this.jumplinks.trigger('changeReviewPanel', wasHidden);\n }).after('renderitem', function () {\n getJumpElement.question.attr('tabindex', '-1').focus();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var jumplinksContainer = $$1(containerTpl());\n $$1('.content-wrap').prepend(jumplinksContainer);\n this.jumplinks.render(jumplinksContainer);\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'header-toolbar';\n /**\n * Key navigator strategy applying onto the header bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var headerNavigation = {\n name: 'header',\n\n /**\n * Builds the header navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig(); // we need a global selector as there is currently no way to access the delivery frame from the test runner\n\n var $headerBar = $('header');\n var $headerElements = $headerBar.find('a:visible');\n\n var registerHeaderNavigator = function registerHeaderNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false,\n defaultPosition: 0\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n\n if (config.flatNavigation) {\n $headerElements.each(function (index, element) {\n return registerHeaderNavigator(\"\".concat(groupId, \"-\").concat(index), $headerBar, $(element));\n });\n } else {\n registerHeaderNavigator(groupId, $headerBar, $headerElements);\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return headerNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation',['lodash', 'jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function (_, $, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'bottom-toolbar';\n /**\n * Key navigator strategy applying onto the tools bar\n * @type {Object} keyNavigationStrategy\n */\n\n var toolbarNavigation = {\n name: 'toolbar',\n\n /**\n * Builds the toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $navigationBar = this.getTestRunner().getAreaBroker().getContainer().find('.bottom-action-bar');\n var $toolbarElements = $navigationBar.find('.action:not(.btn-group):visible, .action.btn-group .li-inner:visible');\n\n if (config.reverseBottomToolbar) {\n $toolbarElements = $($toolbarElements.get().reverse());\n }\n\n var registerToolbarNavigator = function registerToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false,\n defaultPosition: function defaultPosition(navigableElements) {\n var pos = 0; // search for the position of the \"Next\" button if any,\n // otherwise take the position of the last element\n\n if (config.autoFocus) {\n pos = navigableElements.length - 1;\n\n _.forEach(navigableElements, function (navigable, i) {\n var $element = navigable.getElement();\n\n if ($element.data('control') === 'move-forward' || $element.data('control') === 'move-end') {\n pos = i;\n }\n });\n }\n\n return pos;\n }\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n\n if (config.flatNavigation) {\n $toolbarElements.each(function (index, element) {\n return registerToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $navigationBar, $(element));\n });\n } else {\n registerToolbarNavigator(groupId, $navigationBar, $toolbarElements);\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return toolbarNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'top-toolbar';\n /**\n * Key navigator strategy applying onto the top toolbar' bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var topToolbarNavigation = {\n name: 'top-toolbar',\n\n /**\n * Builds the top toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $topToolbar = this.getTestRunner().getAreaBroker().getContainer().find('.top-action-bar');\n var $toolbarElements = $topToolbar.find('.timer-toggler');\n\n var registerTopToolbarNavigator = function registerTopToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n this.keyNavigators = [];\n $toolbarElements.each(function (index, element) {\n return registerTopToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $topToolbar, $(element));\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return topToolbarNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation',['lodash', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function (_, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * List of CSS selectors for the navigables\n * @type {Object}\n */\n\n var selectors = {\n filters: '.qti-navigator-filters .qti-navigator-filter',\n unseenItems: '.qti-navigator-tree .qti-navigator-item:not(.unseen) .qti-navigator-label',\n allItems: '.qti-navigator-tree .qti-navigator-item .qti-navigator-label'\n };\n /**\n * Key navigator strategy applying onto the navigation panel.\n * @type {Object} keyNavigationStrategy\n */\n\n var navigatorNavigation = {\n name: 'navigator',\n\n /**\n * Builds the navigator navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var config = this.getConfig();\n var $panel = this.getTestRunner().getAreaBroker().getPanelArea();\n var $navigator = $panel.find('.qti-navigator');\n var filtersNavigator;\n var itemsNavigator; //the tag to identify if the item listing has been browsed, to only \"smart jump\" to active item only on the first visit\n\n var itemListingVisited = false; //the position of the filter in memory, to only \"smart jump\" to active item only on the first visit\n\n var currentFilter;\n this.managedNavigators = [];\n this.keyNavigators = [];\n var testStatusNavigation;\n\n if ($navigator.length && !$navigator.hasClass('disabled')) {\n var $filters = $navigator.find(selectors.filters);\n var navigableFilters = navigableDomElement.createFromDoms($filters);\n var $testStatusHeader = $navigator.find('.qti-navigator-info.collapsible > .qti-navigator-label');\n var navigableTestStatus = navigableDomElement.createFromDoms($testStatusHeader);\n $testStatusHeader.addClass('key-navigation-actionable');\n\n if (navigableTestStatus.length) {\n testStatusNavigation = keyNavigator({\n keepState: config.keepState,\n id: 'navigator-test-status',\n propagateTab: false,\n elements: navigableTestStatus,\n group: $testStatusHeader\n });\n helpers.setupItemsNavigator(testStatusNavigation, {\n keyNextItem: config.keyNextTab || config.keyNextItem,\n keyPrevItem: config.keyPrevTab || config.keyPrevItem\n });\n this.keyNavigators.push(testStatusNavigation);\n this.managedNavigators.push(testStatusNavigation);\n }\n\n if (navigableFilters.length) {\n filtersNavigator = keyNavigator({\n keepState: config.keepState,\n id: 'navigator-filters',\n propagateTab: false,\n elements: navigableFilters,\n group: $navigator.find('.qti-navigator-filters')\n });\n helpers.setupItemsNavigator(filtersNavigator, {\n keyNextItem: config.keyNextTab || config.keyNextItem,\n keyPrevItem: config.keyPrevTab || config.keyPrevItem\n });\n helpers.setupClickableNavigator(filtersNavigator);\n\n if (config.keepState) {\n filtersNavigator.on('focus', function (cursor) {\n if (config.keepState) {\n var $element = cursor.navigable.getElement();\n var filter = $element.data('mode');\n $element.click();\n\n if (currentFilter !== filter) {\n itemListingVisited = false;\n }\n\n currentFilter = filter;\n }\n });\n }\n\n if (config.keyNextContent) {\n filtersNavigator.on(config.keyNextContent, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && itemsNavigator) {\n _.defer(function () {\n if (itemListingVisited) {\n itemsNavigator.first();\n } else {\n itemsNavigator.focus();\n }\n });\n }\n });\n }\n\n if (config.keyPrevContent) {\n filtersNavigator.on(config.keyPrevContent, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && itemsNavigator) {\n _.defer(function () {\n itemsNavigator.last();\n });\n }\n });\n }\n\n this.keyNavigators.push(filtersNavigator);\n this.managedNavigators.push(filtersNavigator);\n }\n\n var $navigatorTree = $panel.find('.qti-navigator-tree');\n var skipAheadEnabled = $panel.find('.qti-navigator').is('.skipahead-enabled');\n var $trees = $navigator.find(skipAheadEnabled ? selectors.allItems : selectors.unseenItems);\n var navigableTrees = navigableDomElement.createFromDoms($trees);\n $trees.first().addClass('key-navigation-scrollable-up');\n $trees.last().addClass('key-navigation-scrollable-down');\n\n if (navigableTrees.length) {\n //instantiate a key navigator but do not add it to the returned list of navigators as this is not supposed to be reached with tab key\n itemsNavigator = keyNavigator({\n id: 'navigator-items',\n elements: navigableTrees,\n group: $navigatorTree,\n defaultPosition: function defaultPosition(navigableElements) {\n var pos = 0;\n\n if (config.flatNavigation || currentFilter !== 'flagged') {\n pos = _.findIndex(navigableElements, function (navigable) {\n var $parent = navigable.getElement().parent('.qti-navigator-item');\n\n if ($parent.hasClass('active') && $parent.is(':visible')) {\n return true;\n }\n });\n }\n\n return pos;\n }\n }).on('focus', function (cursor) {\n itemListingVisited = true;\n cursor.navigable.getElement().parent().addClass('key-navigation-highlight');\n }).on('blur', function (cursor) {\n cursor.navigable.getElement().parent().removeClass('key-navigation-highlight');\n });\n helpers.setupItemsNavigator(itemsNavigator, {\n keyNextItem: config.keyNextContent || config.keyNextItem,\n keyPrevItem: config.keyPrevContent || config.keyPrevItem\n });\n helpers.setupClickableNavigator(itemsNavigator);\n\n if (config.keepState) {\n itemsNavigator.on('lowerbound upperbound', function () {\n if (filtersNavigator) {\n filtersNavigator.focus();\n }\n });\n }\n\n if (config.keyNextTab && config.keyPrevTab) {\n itemsNavigator.on(config.keyNextTab, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && filtersNavigator) {\n filtersNavigator.focus().next();\n }\n });\n itemsNavigator.on(config.keyPrevTab, function (elem) {\n if (helpers.allowedToNavigateFrom(elem) && filtersNavigator) {\n filtersNavigator.focus().previous();\n }\n });\n } else {\n this.keyNavigators.push(itemsNavigator);\n }\n\n this.managedNavigators.push(itemsNavigator);\n }\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.managedNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.managedNavigators = [];\n this.keyNavigators = [];\n return this;\n }\n };\n\n return navigatorNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'item-content-wrapper';\n /**\n * Key navigator strategy applying onto the page.\n * @type {Object} keyNavigationStrategy\n */\n\n var pageNavigation = {\n name: 'page',\n\n /**\n * Builds the page navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n this.keyNavigators = [];\n this.getTestRunner().getAreaBroker().getContainer().find('.content-wrapper').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(_this.keyNavigators.length),\n elements: navigableDomElement.createFromDoms($element),\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return pageNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'rubric-element-navigation-group';\n /**\n * Key navigator strategy applying onto the rubric blocks.\n * @type {Object} keyNavigationStrategy\n */\n\n var rubricsNavigation = {\n name: 'rubrics',\n\n /**\n * Builds the rubric blocks navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n this.keyNavigators = [];\n this.getTestRunner().getAreaBroker().getContainer().find('.qti-rubricBlock').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(_this.keyNavigators.length),\n elements: navigableDomElement.createFromDoms($element),\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return rubricsNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation',['jquery', 'ui/scroller', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, scrollHelper, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n scrollHelper = scrollHelper && Object.prototype.hasOwnProperty.call(scrollHelper, 'default') ? scrollHelper['default'] : scrollHelper;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Add aria-labelledby attribute to choice interaction\n *\n * @param {Navigator} cursor\n */\n\n var addLabelledByAttribute = function addLabelledByAttribute(cursor) {\n var $element = cursor.navigable.getElement();\n var value = $element.attr('value');\n var name = $element.attr('name');\n\n if (name) {\n $element.attr('aria-labelledby', \"\".concat(name.replace('response-', 'choice-'), \"-\").concat(value));\n }\n };\n /**\n * Add aria-labelledby attribute from choice interaction\n *\n * @param {Navigator} cursor\n */\n\n\n var removeLabelledByAttribute = function removeLabelledByAttribute(cursor) {\n var $element = cursor.navigable.getElement();\n $element.removeAttr('aria-labelledby', '');\n };\n /**\n * Adds attributes on navigation focus and blur\n *\n * @param {Navigator} navigator\n */\n\n\n var manageLabelledByAttribute = function manageLabelledByAttribute(navigator) {\n if (navigator) {\n navigator.on('focus', addLabelledByAttribute);\n navigator.on('blur', removeLabelledByAttribute); // applies WCAG behavior for the radio buttons\n }\n };\n /**\n * Key navigator strategy applying inside the item.\n * Navigable item content are interaction choices and body element with the special class \"key-navigation-focusable\".\n * @type {Object} keyNavigationStrategy\n */\n\n\n var itemNavigation = {\n name: 'item',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n this.keyNavigators = [];\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n /**\n * Gets the QTI choice element from the current position in the keyNavigation\n * @param {Object} cursor - The cursor definition supplied by the keyNavigator\n * @returns {jQuery} - The selected choice element\n */\n\n var getQtiChoice = function getQtiChoice(cursor) {\n return cursor && cursor.navigable.getElement().closest('.qti-choice');\n };\n /**\n * Creates and registers a keyNavigator for the supplied list of elements\n * @param {jQuery} $elements - The list of navigable elements\n * @param {jQuery} group - The group container\n * @param {Boolean} [loop=false] - Allow cycling the list when a boundary is reached\n * @param {Number|Function} [defaultPosition=0] - The default position the group should set the focus on\n * @returns {keyNavigator} - the created navigator, if the list of element is not empty\n */\n\n\n var addNavigator = function addNavigator($elements, group) {\n var loop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var defaultPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n elements: elements,\n group: group,\n loop: loop,\n defaultPosition: defaultPosition,\n propagateTab: false\n });\n\n _this.keyNavigators.push(navigator);\n\n return navigator;\n }\n };\n /**\n * Creates and setups a keyNavigator for the interaction inputs.\n * @param {jQuery} $elements - The list of navigable elements\n * @param {jQuery} group - The group container\n * @param {Boolean} [loop=false] - Allow cycling the list when a boundary is reached\n * @param {Number|Function} [defaultPosition=0] - The default position the group should set the focus on\n * @returns {keyNavigator} - The supplied keyNavigator\n */\n\n\n var addInputsNavigator = function addInputsNavigator($elements, group, loop) {\n var defaultPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var navigator = addNavigator($elements, group, loop, defaultPosition);\n\n if (navigator) {\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator); // each choice is represented by more than the input, the style must be spread to the actual element\n\n navigator.on('focus', function (cursor) {\n return scrollHelper.scrollTo(getQtiChoice(cursor).addClass('key-navigation-highlight'), $content.closest('.content-wrapper'));\n }).on('blur', function (cursor) {\n return getQtiChoice(cursor).removeClass('key-navigation-highlight');\n });\n }\n\n return navigator;\n }; // list the navigable areas inside the item. This could be either the interactions choices or the prompts\n\n\n var $qtiInteractions = $content.find('.key-navigation-focusable,.qti-interaction') //filter out interaction as it will be managed separately\n .filter(function (i, node) {\n return !$(node).parents('.qti-interaction').length;\n }); // the item focusable body elements are considered scrollable\n\n $content.find('.key-navigation-focusable').addClass('key-navigation-scrollable'); // each navigable area will get its own keyNavigator\n\n $qtiInteractions.each(function (itemPos, itemElement) {\n var $itemElement = $(itemElement); // detect the type of choices: checkbox or radio\n\n var $choiceInput = $itemElement.find('.qti-choice input');\n var choiceType = $choiceInput.attr('type');\n\n if ($itemElement.hasClass('qti-interaction')) {\n //add navigable elements from prompt\n $itemElement.find('.key-navigation-focusable').each(function (navPos, nav) {\n var $nav = $(nav);\n\n if (!$nav.closest('.qti-choice').length) {\n addNavigator($nav, $nav);\n }\n }); //reset interaction custom key navigation to override the behaviour with the new one\n\n $itemElement.off('.keyNavigation'); //search for inputs that represent the interaction focusable choices\n\n var $inputs = $itemElement.is(':input') ? $itemElement : $itemElement.find(':input');\n\n if (config.flatNavigation && (config.flatRadioNavigation || choiceType !== 'radio')) {\n $inputs.each(function (i, input) {\n var navigator = addInputsNavigator($(input), $itemElement);\n manageLabelledByAttribute(navigator);\n });\n } else {\n var navigator = addInputsNavigator($inputs, $itemElement, true, function () {\n // keep default positioning for now\n var position = -1; // autofocus the selected radio button if any\n\n $inputs.each(function (index, input) {\n if (input.checked) {\n position = index;\n }\n });\n return position;\n });\n manageLabelledByAttribute(navigator); // applies WCAG behavior for the radio buttons\n\n if (navigator && config.wcagBehavior) {\n navigator.on('focus', function (cursor) {\n var $element = cursor.navigable.getElement();\n\n if (!$element.is(':checked')) {\n $element.click();\n }\n });\n }\n }\n } else {\n addNavigator($itemElement, $itemElement);\n }\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return itemNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Key navigator strategy applying inside the item.\n * Navigable item content are interaction choices with the special class \"key-navigation-focusable\".\n * @type {Object} keyNavigationStrategy\n */\n\n var linearItemNavigation = {\n name: 'linearItem',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n var $qtiInteractions = $content.find('.key-navigation-focusable,.qti-interaction') //filter out interaction as it will be managed separately\n .filter(function (i, node) {\n return !$(node).parents('.qti-interaction').length;\n });\n var $qtiChoices = $qtiInteractions.find('.qti-choice');\n var $lastParent = null;\n var list = [];\n\n var setupListNavigator = function setupListNavigator() {\n var navigator = keyNavigator({\n elements: list,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.choicesNavigators.push(navigator);\n }; // this strategy manages 2 navigators:\n // - keyNavigators lists all elements separately, allowing to navigate among them as identified groups\n // - choicesNavigators lists elements with the same parent, allowing to navigate \"horizontally\" among them\n\n\n this.keyNavigators = [];\n this.choicesNavigators = []; // the item focusable body elements are considered scrollable\n\n $content.find('.key-navigation-focusable').addClass('key-navigation-scrollable');\n $qtiChoices.each(function (i, el) {\n var $itemElement = $(el);\n var $parent = $itemElement.parent();\n var choiceNavigator = keyNavigator({\n elements: navigableDomElement.createFromDoms($itemElement),\n group: $itemElement,\n propagateTab: false\n });\n helpers.setupClickableNavigator(choiceNavigator);\n\n if ($lastParent && !$parent.is($lastParent)) {\n setupListNavigator();\n list = [];\n }\n\n _this.keyNavigators.push(choiceNavigator);\n\n list.push(choiceNavigator);\n $lastParent = $parent;\n });\n\n if (list.length) {\n setupListNavigator();\n list = [];\n }\n\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.choicesNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.choicesNavigators = [];\n this.keyNavigators = [];\n return this;\n }\n };\n\n return linearItemNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation',['jquery', 'i18n', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, __, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'stimulus-element-navigation-group';\n /**\n * Key navigator strategy applying on stimulus items with scrollbar.\n * Navigable item content are body elements with the special class \"stimulus-container\".\n * @type {Object} keyNavigationStrategy\n */\n\n var stimulusNavigation = {\n name: 'stimulus',\n\n /**\n * Builds the item navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $content = this.getTestRunner().getAreaBroker().getContentArea();\n this.keyNavigators = []; // decorate isEnabled navigableDomElement method to check for dom node height\n\n var isEnabledDecorator = function isEnabledDecorator(element) {\n var originalIsEnabled = element.isEnabled;\n\n element.isEnabled = function isEnabled() {\n if (originalIsEnabled.call(this)) {\n var node = this.getElement().get(0);\n return node.scrollHeight > node.clientHeight;\n }\n\n return false;\n };\n\n return element;\n };\n\n $content.find('.stimulus-container').addClass('key-navigation-scrollable').each(function (i, el) {\n var $element = $(el);\n var elements = navigableDomElement.createFromDoms($element).map(isEnabledDecorator); // assign aria attributes\n\n $element.attr('aria-label', __('Passage'));\n var navigator = keyNavigator({\n id: \"\".concat(groupId, \"-\").concat(i),\n elements: elements,\n group: $element,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n\n _this.keyNavigators.push(navigator);\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return stimulusNavigation;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks',['jquery', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers'], function ($, keyNavigator, navigableDomElement, helpers) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * The identifier the keyNavigator group\n * @type {String}\n */\n\n var groupId = 'jump-links';\n /**\n * Key navigator strategy applying onto the top toolbar' bar.\n * @type {Object} keyNavigationStrategy\n */\n\n var jumpLinks = {\n name: 'jump-links',\n\n /**\n * Builds the top toolbar navigation strategy.\n *\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n var _this = this;\n\n var config = this.getConfig();\n var $jumpLinksBox = $('.content-wrap');\n var $links = $jumpLinksBox.find('.jump-link');\n this.keyNavigators = [];\n\n var registerTopToolbarNavigator = function registerTopToolbarNavigator(id, group, $elements) {\n var elements = navigableDomElement.createFromDoms($elements);\n\n if (elements.length) {\n var navigator = keyNavigator({\n id: id,\n group: group,\n elements: elements,\n propagateTab: false\n });\n helpers.setupItemsNavigator(navigator, config);\n helpers.setupClickableNavigator(navigator);\n\n _this.keyNavigators.push(navigator);\n }\n };\n\n $links.each(function (index, element) {\n return registerTopToolbarNavigator(\"\".concat(groupId, \"-\").concat(index), $jumpLinksBox, $(element));\n });\n return this;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n return this.keyNavigators;\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n this.keyNavigators.forEach(function (navigator) {\n return navigator.destroy();\n });\n this.keyNavigators = [];\n return this;\n }\n };\n\n return jumpLinks;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/index',['exports', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/headerNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/toolbarNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/topToolbarNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/navigatorNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/pageNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/rubricsNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/itemNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/linearItemNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/stimulusNavigation', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/jumpLinks'], function (exports, headerNavigation, toolbarNavigation, topToolbarNavigation, navigatorNavigation, pageNavigation, rubricsNavigation, itemNavigation, linearItemNavigation, stimulusNavigation, jumpLinks) { 'use strict';\n\n\theaderNavigation = headerNavigation && Object.prototype.hasOwnProperty.call(headerNavigation, 'default') ? headerNavigation['default'] : headerNavigation;\n\ttoolbarNavigation = toolbarNavigation && Object.prototype.hasOwnProperty.call(toolbarNavigation, 'default') ? toolbarNavigation['default'] : toolbarNavigation;\n\ttopToolbarNavigation = topToolbarNavigation && Object.prototype.hasOwnProperty.call(topToolbarNavigation, 'default') ? topToolbarNavigation['default'] : topToolbarNavigation;\n\tnavigatorNavigation = navigatorNavigation && Object.prototype.hasOwnProperty.call(navigatorNavigation, 'default') ? navigatorNavigation['default'] : navigatorNavigation;\n\tpageNavigation = pageNavigation && Object.prototype.hasOwnProperty.call(pageNavigation, 'default') ? pageNavigation['default'] : pageNavigation;\n\trubricsNavigation = rubricsNavigation && Object.prototype.hasOwnProperty.call(rubricsNavigation, 'default') ? rubricsNavigation['default'] : rubricsNavigation;\n\titemNavigation = itemNavigation && Object.prototype.hasOwnProperty.call(itemNavigation, 'default') ? itemNavigation['default'] : itemNavigation;\n\tlinearItemNavigation = linearItemNavigation && Object.prototype.hasOwnProperty.call(linearItemNavigation, 'default') ? linearItemNavigation['default'] : linearItemNavigation;\n\tstimulusNavigation = stimulusNavigation && Object.prototype.hasOwnProperty.call(stimulusNavigation, 'default') ? stimulusNavigation['default'] : stimulusNavigation;\n\tjumpLinks = jumpLinks && Object.prototype.hasOwnProperty.call(jumpLinks, 'default') ? jumpLinks['default'] : jumpLinks;\n\n\n\n\texports.headerNavigationStrategy = headerNavigation;\n\texports.toolbarNavigationStrategy = toolbarNavigation;\n\texports.topToolbarNavigationStrategy = topToolbarNavigation;\n\texports.navigatorNavigationStrategy = navigatorNavigation;\n\texports.pageNavigationStrategy = pageNavigation;\n\texports.rubricsNavigationStrategy = rubricsNavigation;\n\texports.itemNavigationStrategy = itemNavigation;\n\texports.linearItemNavigationStrategy = linearItemNavigation;\n\texports.stimulusNavigationStrategy = stimulusNavigation;\n\texports.jumpLinksNavigationStrategy = jumpLinks;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategiesManager',['core/providerRegistry', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategies/index'], function (providerRegistry, strategies) { 'use strict';\n\n providerRegistry = providerRegistry && Object.prototype.hasOwnProperty.call(providerRegistry, 'default') ? providerRegistry['default'] : providerRegistry;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Defines the strategies API\n * @typedef {Object} keyNavigationStrategy\n * @property {Function} init\n * @property {Function} destroy\n * @property {Function} getNavigators\n * @property {Function} getName\n * @property {Function} getConfig\n * @property {Function} getTestRunner\n */\n\n /**\n * Defines the config structure for the navigation strategies\n * @typedef {Object} keyNavigationStrategyConfig\n * @property {Boolean} autoFocus - auto select the main action when available in a group\n * @property {Boolean} wcagBehavior - apply WCAG recommended behavior for radio buttons and similar elements\n * @property {Boolean} keepState - for strategies able to keep the state, allow to keep the position of the focused\n * element when moving away from the group and restore it when the group retrieves the focus\n * @property {Boolean} propagateTab - propagate the Tab key to the upper level\n * @property {Boolean} flatNavigation - flatten the navigation between groups, allowing to forward the focus to the\n * following group when a group boundary is reached. If disabled, the only way to move between groups is to use the\n * related key combination\n * @property {String} keyNextItem - the keyboard shortcut to move to the next item (inside the scope)\n * @property {String} keyPrevItem - the keyboard shortcut to move to the previous item (inside the scope)\n * @property {String} keyNextGroup - the keyboard shortcut to move to the next group (outside the scope)\n * @property {String} keyPrevGroup - the keyboard shortcut to move to the previous group (outside the scope)\n * @property {String} keyNextTab - the keyboard shortcut to move to the next tab of the bar\n * @property {String} keyPrevTab - the keyboard shortcut to move to the previous tab of the bar\n * @property {String} keyNextContent - the keyboard shortcut to move to the next content element\n * @property {String} keyPrevContent - the keyboard shortcut to move to the previous content element\n */\n\n /**\n * Builds a key navigator strategies manager.\n *\n * @param {String} name - the name of the strategy to build\n * @param {testRunner} testRunner - the test runner instance to control\n * @param {keyNavigationStrategyConfig} config - the config to apply\n * @returns {keyNavigationStrategy}\n */\n\n function strategyFactory(name, testRunner, config) {\n var strategy = strategyFactory.getProvider(name);\n /**\n * @type {Object} keyNavigationStrategy\n */\n\n return {\n /**\n * Setup the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n init: function init() {\n strategy.init.call(this);\n return this;\n },\n\n /**\n * Gets the name of the applied strategy\n * @returns {String}\n */\n getName: function getName() {\n return name;\n },\n\n /**\n * Gets the config of the strategy\n * @returns {keyNavigationStrategyConfig}\n */\n getConfig: function getConfig() {\n return config;\n },\n\n /**\n * Gets the test runner\n * @returns {testRunner}\n */\n getTestRunner: function getTestRunner() {\n return testRunner;\n },\n\n /**\n * Gets the list of applied navigators\n * @returns {keyNavigator[]}\n */\n getNavigators: function getNavigators() {\n if ('function' === typeof strategy.getNavigators) {\n return strategy.getNavigators.call(this);\n }\n\n return [];\n },\n\n /**\n * Tears down the keyNavigator strategy\n * @returns {keyNavigationStrategy}\n */\n destroy: function destroy() {\n if ('function' === typeof strategy.destroy) {\n strategy.destroy.call(this);\n }\n\n return this;\n }\n };\n } // bootstrap the manager and register the strategies\n\n providerRegistry(strategyFactory);\n Object.values(strategies).forEach(function (strategy) {\n return strategyFactory.registerProvider(strategy.name, strategy);\n });\n\n return strategyFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers',['exports', 'jquery', 'lodash', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/strategiesManager'], function (exports, $, _, strategyFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n strategyFactory = strategyFactory && Object.prototype.hasOwnProperty.call(strategyFactory, 'default') ? strategyFactory['default'] : strategyFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * When either an element or its parents have this class - navigation from it would be disabled.\n *\n * @type {String}\n */\n\n var ignoredClass = 'no-key-navigation';\n /**\n * Checks whether element is navigable from\n *\n * @param {HTMLElement|keyNavigator} from\n * @returns {boolean}\n */\n\n function allowedToNavigateFrom(from) {\n var element = from;\n\n if (element && 'function' === typeof element.getCursor) {\n var _element$getCursor = element.getCursor(),\n navigable = _element$getCursor.navigable;\n\n element = navigable;\n }\n\n if (element && 'function' === typeof element.getElement) {\n element = element.getElement();\n }\n\n var $element = $(element);\n\n if ($element.hasClass(ignoredClass) || $element.parents(\".\".concat(ignoredClass)).length > 0) {\n return false;\n }\n\n return true;\n }\n /**\n * Applies an items' navigation scheme on a keyNavigator.\n * @param {keyNavigator} navigator\n * @param {keyNavigationStrategyConfig} config - the config to apply\n * @returns {keyNavigator}\n */\n\n function setupItemsNavigator(navigator, config) {\n return navigator.on(config.keyNextItem, function navigateToNextItem(elem) {\n if (allowedToNavigateFrom(elem)) {\n this.next();\n }\n }).on(config.keyPrevItem, function navigateToPrevItem(elem) {\n if (allowedToNavigateFrom(elem)) {\n this.previous();\n }\n });\n }\n /**\n * Applies an items' navigation scheme on a keyNavigator.\n * @param {keyNavigator} navigator\n * @returns {keyNavigator}\n */\n\n function setupClickableNavigator(navigator) {\n return navigator.on('activate', function activateItem(cursor) {\n var $elt = cursor.navigable.getElement(); // jQuery <= 1.9.0\n // the checkbox values are set after the click event if triggered with jQuery\n\n if ($elt.is(':checkbox')) {\n $elt.each(function () {\n this.click();\n });\n } else {\n $elt.click().mousedown();\n }\n });\n }\n /**\n * Build the strategies related to a key navigation mode\n * @param {keyNavigationMode} navigationMode\n * @param {testRunner} testRunner\n * @returns {keyNavigationStrategy[]}\n */\n\n function getStrategies(navigationMode, testRunner) {\n return navigationMode.strategies.map(function (area) {\n return strategyFactory(area, testRunner, navigationMode.config).init();\n });\n }\n /**\n * Gets the key navigators from the provided strategies\n * @param {keyNavigationStrategy[]} strategies\n * @returns {keyNavigator[]}\n */\n\n function getNavigators(strategies) {\n return _.flatten(strategies.map(function (strategy) {\n return strategy.getNavigators();\n }));\n }\n\n exports.allowedToNavigateFrom = allowedToNavigateFrom;\n exports.getNavigators = getNavigators;\n exports.getStrategies = getStrategies;\n exports.setupClickableNavigator = setupClickableNavigator;\n exports.setupItemsNavigator = setupItemsNavigator;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/defaultMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Default key navigation mode\n */\n var defaultMode = {\n name: 'default',\n\n /**\n * Builds the key navigation config for the \"default\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n strategies: ['rubrics', 'stimulus', 'item', 'toolbar', 'header', 'top-toolbar', 'navigator', 'page'],\n config: Object.assign({\n autoFocus: true,\n wcagBehavior: false,\n keepState: true,\n propagateTab: false,\n flatNavigation: false,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: 'right',\n keyPrevTab: 'left',\n keyNextContent: 'down',\n keyPrevContent: 'up'\n }, config)\n };\n }\n };\n\n return defaultMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/linearMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Linear key navigation mode\n */\n var linearMode = {\n name: 'linear',\n\n /**\n * Builds the key navigation config for the \"linear\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n strategies: ['rubrics', 'stimulus', 'linearItem', 'toolbar', 'header', 'top-toolbar', 'navigator', 'page'],\n config: Object.assign({\n autoFocus: true,\n wcagBehavior: false,\n keepState: true,\n propagateTab: false,\n flatNavigation: false,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: 'right',\n keyPrevTab: 'left',\n keyNextContent: 'down',\n keyPrevContent: 'up'\n }, config)\n };\n }\n };\n\n return linearMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/nativeMode',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n\n /**\n * Native key navigation mode\n */\n var nativeMode = {\n name: 'native',\n\n /**\n * Builds the key navigation config for the \"native\" mode\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n init: function init() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n // todo: add access to the page and the rubric blocks\n strategies: ['jump-links', 'header', 'top-toolbar', 'navigator', 'page', 'rubrics', 'stimulus', 'item', 'toolbar'],\n config: Object.assign({\n autoFocus: false,\n wcagBehavior: false,\n keepState: false,\n propagateTab: true,\n flatNavigation: true,\n keyNextGroup: 'tab',\n keyPrevGroup: 'shift+tab',\n keyNextItem: 'right down',\n keyPrevItem: 'left up',\n keyNextTab: '',\n keyPrevTab: '',\n keyNextContent: '',\n keyPrevContent: ''\n }, config)\n };\n }\n };\n\n return nativeMode;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/index',['exports', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/defaultMode', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/linearMode', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/nativeMode'], function (exports, defaultMode, linearMode, nativeMode) { 'use strict';\n\n\tdefaultMode = defaultMode && Object.prototype.hasOwnProperty.call(defaultMode, 'default') ? defaultMode['default'] : defaultMode;\n\tlinearMode = linearMode && Object.prototype.hasOwnProperty.call(linearMode, 'default') ? linearMode['default'] : linearMode;\n\tnativeMode = nativeMode && Object.prototype.hasOwnProperty.call(nativeMode, 'default') ? nativeMode['default'] : nativeMode;\n\n\n\n\texports.defaultModeProvider = defaultMode;\n\texports.linearModeProvider = linearMode;\n\texports.nativeModeProvider = nativeMode;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modesManager',['core/providerRegistry', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modes/index'], function (providerRegistry, modes) { 'use strict';\n\n providerRegistry = providerRegistry && Object.prototype.hasOwnProperty.call(providerRegistry, 'default') ? providerRegistry['default'] : providerRegistry;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 Open Assessment Technologies SA ;\n */\n /**\n * Defines the mode config\n * @typedef {Object} keyNavigationMode\n * @property {String[]} strategies\n * @property {keyNavigationStrategyConfig} config\n */\n\n /**\n * Builds a key navigator modes manager.\n *\n * @param {String} mode - the name of the mode to get\n * @param {keyNavigationStrategyConfig} config - additional config to set\n * @returns {keyNavigationMode}\n */\n\n function modeFactory(mode) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var instance = modeFactory.getProvider(mode);\n return instance.init(config);\n } // bootstrap the manager and register the strategies\n\n providerRegistry(modeFactory);\n Object.values(modes).forEach(function (mode) {\n return modeFactory.registerProvider(mode.name, mode);\n });\n\n return modeFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/keyNavigation',['ui/keyNavigation/navigator', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/helpers', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/modesManager', 'util/shortcut'], function (keyNavigator, helpers, modeFactory, shortcut) { 'use strict';\n\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n modeFactory = modeFactory && Object.prototype.hasOwnProperty.call(modeFactory, 'default') ? modeFactory['default'] : modeFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The event namespace used to register removable listeners\n * @type {String}\n */\n\n var eventNS = '.keyNavigation';\n /**\n * Builds a key navigator that can apply onto a test runner\n * @param {testRunner} testRunner - the test runner instance to control\n * @param {Object} config - the config to apply\n * @param {String} config.contentNavigatorType - the keyboard navigation mode\n * @returns {testRunnerKeyNavigator}\n */\n\n function keyNavigationFactory(testRunner) {\n var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var contentNavigatorType = config.contentNavigatorType;\n var groupNavigator = null;\n var strategies = [];\n /**\n * @typedef {Object} testRunnerKeyNavigator\n */\n\n return {\n /**\n * Setup the keyNavigator\n * @returns {testRunnerKeyNavigator}\n */\n init: function init() {\n var navigationMode = modeFactory(contentNavigatorType, config);\n var navigationConfig = navigationMode.config;\n strategies = helpers.getStrategies(navigationMode, testRunner);\n var navigators = helpers.getNavigators(strategies); //blur current focused element, to reinitialize keyboard navigation\n\n if (document.activeElement) {\n document.activeElement.blur();\n }\n\n groupNavigator = keyNavigator({\n id: 'test-runner',\n loop: true,\n elements: navigators,\n propagateTab: navigationConfig.propagateTab\n });\n helpers.setupItemsNavigator(groupNavigator, {\n keyNextItem: navigationConfig.keyNextGroup,\n keyPrevItem: navigationConfig.keyPrevGroup\n });\n shortcut.remove(eventNS).add(\"tab\".concat(eventNS, \" shift+tab\").concat(eventNS), function (e) {\n if (!helpers.allowedToNavigateFrom(e.target)) {\n return false;\n }\n\n if (!groupNavigator.isFocused()) {\n groupNavigator.focus();\n }\n });\n return this;\n },\n\n /**\n * Gets the attached testRunner\n * @returns {testRunner}\n */\n getTestRunner: function getTestRunner() {\n return testRunner;\n },\n\n /**\n * Switches the navigation mode\n * @param {String} newMode\n * @returns {testRunnerKeyNavigator}\n */\n setMode: function setMode(newMode) {\n contentNavigatorType = newMode;\n return this;\n },\n\n /**\n * Gets the active navigation mode\n * @returns {String}\n */\n getMode: function getMode() {\n return contentNavigatorType;\n },\n\n /**\n * Returns keyNavigation active state\n * @returns {Boolean}\n */\n isActive: function isActive() {\n return groupNavigator !== null;\n },\n\n /**\n * Tears down the keyNavigator\n * @returns {testRunnerKeyNavigator}\n */\n destroy: function destroy() {\n shortcut.remove(eventNS);\n strategies.forEach(function (strategy) {\n return strategy.destroy();\n });\n\n if (groupNavigator) {\n groupNavigator.destroy();\n }\n\n groupNavigator = null;\n strategies = [];\n return this;\n }\n };\n }\n\n return keyNavigationFactory;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation',[],function(){});\n","define('taoQtiTest/runner/plugins/content/accessibility/keyNavigation/plugin',['lodash', 'taoQtiTest/runner/plugins/content/accessibility/keyNavigation/keyNavigation', 'taoTests/runner/plugin', 'css!taoQtiTest/runner/plugins/content/accessibility/css/key-navigation.css'], function (_, keyNavigatorFactory, pluginFactory, keyNavigation_css) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n keyNavigatorFactory = keyNavigatorFactory && Object.prototype.hasOwnProperty.call(keyNavigatorFactory, 'default') ? keyNavigatorFactory['default'] : keyNavigatorFactory;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2020 (original work) Open Assessment Technologies SA ;\n */\n /**\n * If we have now config from backend side - we set this default dataset\n *\n * @typedef {object}\n * @properties {string} contentNavigatorType - ('default' | 'linear') - type of content navigation\n */\n\n var defaultPluginConfig = {\n contentNavigatorType: 'default'\n };\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: 'keyNavigation',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n\n var pluginConfig = _.defaults(this.getConfig(), defaultPluginConfig);\n\n var keyNavigator = keyNavigatorFactory(testRunner, pluginConfig);\n /**\n * Update plugin state based on changes\n */\n\n testRunner.after('renderitem', function () {\n // make sure that keyNavigator is destroyed\n // to preevent multiple instances to be active at the same time\n if (keyNavigator.isActive()) {\n keyNavigator.destroy();\n }\n\n keyNavigator.init();\n }).on('unloaditem', function () {\n keyNavigator.destroy();\n })\n /**\n * @param {string} type - type of content tab navigation,\n * can be: 'default', 'linear', 'native'\n */\n .on('setcontenttabtype', function (type) {\n keyNavigator.setMode(type);\n pluginConfig.contentNavigatorType = type;\n });\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/accessibility/mainLandmark/header',['jquery', 'i18n', 'taoTests/runner/plugin', 'handlebars'], function ($$1, __, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n }\n\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n }\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<span data-control=\\\"qti-test-item-title\\\"></span>\\n<span data-control=\\\"qti-test-item-state\\\"></span>\\n\";\n });\n function headerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n function getState(item) {\n var state = __('Unseen');\n\n if (item.flagged) {\n state = __('Flagged');\n } else if (item.answered) {\n state = __('Answered');\n } else if (item.viewed) {\n state = __('Viewed');\n }\n\n return state;\n }\n\n var header = pluginFactory({\n name: 'mainLandmark',\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n\n var updateTitle = function updateTitle(item) {\n _this.$title.text(\"\".concat(item.label)).show();\n };\n\n var updateState = function updateState(item) {\n _this.$state.text(\"\".concat(getState(item))).show();\n };\n\n testRunner.after('renderitem', function () {\n var item = testRunner.getCurrentItem();\n updateTitle(item);\n updateState(item);\n }).on('tool-flagitem', function () {\n var item = testRunner.getCurrentItem();\n item = _objectSpread2(_objectSpread2({}, item), {}, {\n flagged: !item.flagged\n });\n updateState(item);\n });\n },\n render: function render() {\n var $container = this.getAreaBroker().getArea('mainLandmark');\n this.$element = $$1(headerTpl());\n $container.append(this.$element);\n this.$title = $container.find(\"[data-control=\\\"qti-test-item-title\\\"]\");\n this.$state = $container.find(\"[data-control=\\\"qti-test-item-state\\\"]\");\n }\n });\n\n return header;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/dialog',['jquery', 'lodash', 'taoTests/runner/plugin', 'ui/dialog/alert', 'ui/dialog/confirm', 'util/shortcut/registry', 'util/shortcut', 'util/namespace'], function ($, _, pluginFactory, dialogAlert, dialogConfirm, shortcutRegistry, globalShortcut, namespaceHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n dialogAlert = dialogAlert && Object.prototype.hasOwnProperty.call(dialogAlert, 'default') ? dialogAlert['default'] : dialogAlert;\n dialogConfirm = dialogConfirm && Object.prototype.hasOwnProperty.call(dialogConfirm, 'default') ? dialogConfirm['default'] : dialogConfirm;\n shortcutRegistry = shortcutRegistry && Object.prototype.hasOwnProperty.call(shortcutRegistry, 'default') ? shortcutRegistry['default'] : shortcutRegistry;\n globalShortcut = globalShortcut && Object.prototype.hasOwnProperty.call(globalShortcut, 'default') ? globalShortcut['default'] : globalShortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'dialog';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultOptions = {\n alert: {\n focus: 'ok'\n },\n confirm: {\n focus: 'ok'\n }\n };\n /**\n * Returns the configured plugin\n */\n\n var dialog = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultOptions, this.getConfig());\n var pluginShortcuts = (testOptions.shortcuts || {})[pluginName] || {};\n var alerts = [];\n var confirms = [];\n var opened = [];\n var dialogShortcut = shortcutRegistry($('body'), {\n propagate: false,\n prevent: true\n });\n /**\n * Closes a dialog with accept\n * @param {dialog} dialog - The instance of the dialog\n */\n\n function closeAccept(dialog) {\n // TODO: improve the dialog implementation in order to provide a better API\n dialog.trigger('okbtn.modal').hide();\n }\n /**\n * Closes a dialog with rejection\n * @param {dialog} dialog - The instance of the dialog\n */\n\n\n function closeReject(dialog) {\n dialog.hide();\n }\n /**\n * Closes the last opened dialog\n * @param {Boolean} accept Whether the dialog should be accepted or not\n * @param {String} [shortcut] The shortcut that caused the action\n */\n\n\n function closeLast(accept, shortcut) {\n var handle = opened.length && opened[opened.length - 1];\n\n if (handle) {\n handle.shortcut = shortcut;\n\n if (accept) {\n closeAccept(handle.dialog);\n } else {\n closeReject(handle.dialog);\n }\n }\n }\n /**\n * Add dialog on top of the provided stack\n * @param {String} namespace - The event namespace that scope the dialog\n * @param {Array} stack - The dialogs stack on which push the new instance\n * @param {Function} dialog - The constructor of the dialog\n * @param {String} message - The message to display\n * @param {Function} accept - The callback for accept\n * @param {Function} reject - The callback for reject\n * @param {Object} options - Dialog options\n */\n\n\n function addHandle(namespace, stack, dialog, message, accept, reject, options) {\n var handle = {\n context: namespace,\n dialog: dialog(message, doAccept, doReject, options)\n };\n\n function doAccept(e, reason) {\n if (_.isFunction(accept)) {\n accept(handle.shortcut || reason);\n }\n }\n\n function doReject(e, reason) {\n if (_.isFunction(reject)) {\n reject(handle.shortcut || reason);\n }\n } // prevents all registered shortcuts to be triggered\n // and brings back the dialog shortcuts\n\n\n globalShortcut.disable();\n dialogShortcut.enable();\n stack.push(handle);\n opened.push(handle);\n handle.dialog.focus(options.focus);\n handle.dialog.on('closed.modal', function () {\n removeHandle(stack, handle.dialog);\n removeHandle(opened, handle.dialog); // if all dialogs have been closed allows all registered shortcuts to be triggered\n // also disables the dialog shortcuts\n\n if (!opened.length) {\n globalShortcut.enable();\n dialogShortcut.disable();\n }\n });\n }\n /**\n * Remove a dialog from the provided stack\n * @param {Array} stack - The dialogs stack from which remove the dialog instance\n * @param {dialog} dialog - The instance of the dialog\n */\n\n\n function removeHandle(stack, dialog) {\n if (dialog) {\n _.remove(stack, function (handle) {\n if (handle && dialog === handle.dialog) {\n return true;\n }\n });\n }\n }\n /**\n * Closes all dialogs within the provided stack\n * @param {String} namespace - The event namespace that scope the dialogs to close\n * @param {Boolean} accept - Whether (`true`) or not (`false`) to close the dialogs with accept\n * @param {Array} stack - The dialogs stack in which close the dialogs\n */\n\n\n function closeDialogs(namespace, accept, stack) {\n if (stack) {\n _.forEach(stack, function (handle) {\n if (handle && (namespace === '@' || namespace === handle.context)) {\n if (accept) {\n closeAccept(handle.dialog);\n } else {\n closeReject(handle.dialog);\n }\n }\n });\n } else {\n closeDialogs(namespace, accept, alerts);\n closeDialogs(namespace, accept, confirms);\n }\n } // starts with shortcuts disabled, prevents the TAB key to be used to move outside the dialog box\n\n\n dialogShortcut.disable().set('Tab Shift+Tab'); // handle the plugin's shortcuts\n\n if (testOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n dialogShortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function (e, shortcut) {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key, shortcut);\n });\n });\n } //change plugin state\n\n\n testRunner.before('alert.*', function (e, msg, accept, options) {\n addHandle(e.namespace, alerts, dialogAlert, msg, accept, accept, _.merge({}, pluginConfig.alert, options));\n }).before('confirm.*', function (e, msg, accept, reject, options) {\n addHandle(e.namespace, confirms, dialogConfirm, msg, accept, reject, _.merge({}, pluginConfig.confirm, options));\n }).before('closedialog.*', function (e, accept) {\n closeDialogs(e.namespace, accept);\n }).on(\"\".concat(actionPrefix, \"accept\"), function (shortcut) {\n closeLast(true, shortcut);\n }).on(\"\".concat(actionPrefix, \"reject\"), function (shortcut) {\n closeLast(false, shortcut);\n }).on('destroy', function () {\n closeDialogs('.@');\n dialogShortcut.clear();\n dialogShortcut = null;\n });\n }\n });\n\n return dialog;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/exitMessages',['lodash', 'taoTests/runner/plugin'], function (_, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the testState plugin.\n * Displays exit message, then leaves the runner once the user has acknowledged\n */\n\n var exitMessages = pluginFactory({\n name: 'exitMessages',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {// this function is mandatory\n },\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n install: function install() {\n var testRunner = this.getTestRunner(); // intercepts the `leave` event,\n // then if a message needs to be displayed displays it and waits the user acknowledges it\n\n testRunner.before('leave', function leave(e, data) {\n if (_.isObject(data) && data.message) {\n return new Promise(function (resolve) {\n var context = testRunner.getTestContext(); // the leave can occurs when the runner is in inconsistent state (i.e. error)\n // prevent side error with item disabling\n\n if (context && context.itemIdentifier) {\n testRunner.disableItem(context.itemIdentifier);\n } // wait for the message acknowledge before leaving the runner\n\n\n testRunner.trigger('disablefeedbackalerts').trigger('alert.leave', data.message, function () {\n testRunner.trigger('enablefeedbackalerts');\n resolve();\n });\n });\n }\n });\n }\n });\n\n return exitMessages;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/itemAlertMessage',['jquery', 'ui/hider', 'taoTests/runner/plugin'], function ($, hider, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * Returns the configured plugin\n */\n\n var itemAlertMessage = pluginFactory({\n name: 'itemAlertMessage',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n this.$element = $(this.getContent().dom);\n this.$element // for GUI actions\n .on('closed.modal', function () {\n $(this).modal('destroy');\n }).on('destroyed.modal', function () {\n self.$element = null;\n self.trigger('resume', self);\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var testRunner = this.getTestRunner();\n var itemRunner = testRunner.itemRunner;\n var $modalsContainer = this.getContent().$container;\n\n if (!$modalsContainer) {\n $modalsContainer = $('#modalFeedbacks', itemRunner._item.container);\n }\n\n $modalsContainer.append(this.$element);\n this.$element.modal({\n startClosed: false,\n top: 200\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n if (this.$element && this.$element.length) {\n this.$element.modal('close');\n }\n }\n });\n\n return itemAlertMessage;\n\n});\n\n","define('taoQtiTest/runner/helpers/navigation',['lodash', 'taoQtiTest/runner/helpers/map'], function (_, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} navigationHelper\n */\n\n var navigationHelper = {\n /**\n * Check whether the test taker is leaving a section\n *\n * @param {Object} testContext - the actual test context\n * @param {String} testContext.itemIdentifier - the id of the current item\n * @param {String} testContext.sectionId - the id of the current section\n * @param {Object} testMap - the actual test map\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean} true if the action leads to a section leave\n * @throws {TypeError} if the context or the map are incorrect\n */\n isLeavingSection: function isLeavingSection(testContext, testMap, direction, scope, position) {\n var section;\n var sectionStats;\n var nbItems;\n var item;\n\n if (_.isPlainObject(testContext) && _.isPlainObject(testMap) && !_.isEmpty(testContext.sectionId) && !_.isEmpty(testContext.itemIdentifier)) {\n section = mapHelper.getSection(testMap, testContext.sectionId);\n sectionStats = mapHelper.getSectionStats(testMap, testContext.sectionId);\n nbItems = sectionStats && sectionStats.total;\n item = mapHelper.getItem(testMap, testContext.itemIdentifier);\n return scope === 'section' || scope === 'testPart' || direction === 'next' && item.positionInSection + 1 === nbItems || direction === 'previous' && item.positionInSection === 0 || direction === 'jump' && position > 0 && (position < section.position || position >= section.position + nbItems);\n }\n\n throw new TypeError('Invalid test context and test map');\n },\n\n /**\n * Check whether the test taker is leaving a test part\n *\n * @param {Object} testContext - the actual test context\n * @param {String} testContext.itemIdentifier - the id of the current item\n * @param {String} testContext.sectionId - the id of the current section\n * @param {String} testContext.testPartId - the id of the current testPart\n * @param {Object} testMap - the actual test map\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean} true if the action leads to a section leave\n * @throws {TypeError} if the context or the map are incorrect\n */\n isLeavingTestPart: function isLeavingTestPart(testContext, testMap, direction, scope, position) {\n var testPart;\n var testPartStats;\n var nbItems;\n var item;\n var section;\n var sectionStats;\n\n if (_.isPlainObject(testContext) && _.isPlainObject(testMap) && !_.isEmpty(testContext.testPartId) && !_.isEmpty(testContext.sectionId) && !_.isEmpty(testContext.itemIdentifier)) {\n testPart = mapHelper.getPart(testMap, testContext.testPartId);\n testPartStats = mapHelper.getPartStats(testMap, testContext.testPartId);\n nbItems = testPartStats && testPartStats.total;\n item = mapHelper.getItem(testMap, testContext.itemIdentifier);\n\n if (scope === 'section') {\n section = mapHelper.getSection(testMap, testContext.sectionId);\n sectionStats = mapHelper.getSectionStats(testMap, testContext.sectionId);\n }\n\n return scope === 'testPart' || direction === 'next' && scope === 'item' && item.positionInPart + 1 === nbItems || direction === 'next' && scope === 'section' && section.position + sectionStats.total >= nbItems || direction === 'previous' && scope === 'item' && item.positionInPart === 0 || direction === 'previous' && scope === 'section' && section.position === testPart.position || direction === 'jump' && position > 0 && (position < testPart.position || position >= testPart.position + nbItems);\n }\n\n throw new TypeError('Invalid test context and test map');\n },\n\n /**\n * Check if the given item is the last of the test\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @returns {Boolean} true if the item is the last one\n */\n isLast: function isLast(testMap, itemIdentifier) {\n return this.isLastOf(testMap, itemIdentifier, 'test');\n },\n\n /**\n * Check if the given item is the first of a test\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @returns {Boolean} true if the item is the first one\n */\n isFirst: function isFirst(testMap, itemIdentifier) {\n return this.isFirstOf(testMap, itemIdentifier, 'test');\n },\n\n /**\n * Check if the given item is the last of a the given scope\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @param {String} [scope = 'test'] - the target scope\n * @returns {Boolean} true if the item is the last one\n */\n isLastOf: function isLastOf(testMap, itemIdentifier, scope) {\n var item;\n var stats;\n\n if (!_.isPlainObject(testMap)) {\n throw new TypeError('Invalid test map');\n }\n\n if (_.isEmpty(itemIdentifier)) {\n throw new TypeError('Invalid item identifier');\n }\n\n scope = scope || 'test';\n item = mapHelper.getItem(testMap, itemIdentifier);\n stats = mapHelper.getScopeStats(testMap, item.position, scope);\n\n if (stats && _.isNumber(stats.total)) {\n if (scope === 'test') {\n return item.position + 1 === stats.total;\n }\n\n if (scope === 'section' || scope === 'assessmentSection' || scope === 'testSection') {\n return item.positionInSection + 1 === stats.total;\n }\n\n if (scope === 'part' || scope === 'testPart') {\n return item.positionInPart + 1 === stats.total;\n }\n }\n\n return false;\n },\n\n /**\n * Check if the given item is the first of a the given scope\n * @param {Object} testMap - the test map\n * @param {String} itemIdentifier - the identifier of the item\n * @param {String} [scope = 'test'] - the target scope\n * @returns {Boolean} true if the item is the first one\n */\n isFirstOf: function isFirstOf(testMap, itemIdentifier, scope) {\n var item;\n\n if (!_.isPlainObject(testMap)) {\n throw new TypeError('Invalid test map');\n }\n\n if (_.isEmpty(itemIdentifier)) {\n throw new TypeError('Invalid item identifier');\n }\n\n scope = scope || 'test';\n item = mapHelper.getItem(testMap, itemIdentifier);\n\n if (scope === 'test') {\n return item.position === 0;\n }\n\n if (scope === 'section' || scope === 'assessmentSection' || scope === 'testSection') {\n return item.positionInSection === 0;\n }\n\n if (scope === 'part' || scope === 'testPart') {\n return item.positionInPart === 0;\n }\n\n return false;\n },\n\n /**\n * Gets the map descriptors of the sibling items\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @param {String} [direction='both'] - previous/next/both\n * @param {Number} [size=3] - will be 2xsize if direction is both\n * @returns {Object[]} the collections of items\n */\n getSiblingItems: function getSiblingItems(testMap, itemPosition, direction, size) {\n var itemId = mapHelper.getItemIdentifier(testMap, itemPosition);\n var previous = null;\n var siblings = [];\n var directions;\n\n var itemChain = _.reduce(testMap && testMap.jumps, function (map, jump) {\n var ref = jump.identifier;\n\n if (previous) {\n map[previous].next = ref;\n }\n\n map[ref] = {\n identifier: ref,\n previous: previous,\n next: null\n };\n previous = ref;\n return map;\n }, {});\n\n size = _.isFinite(size) ? parseInt(size, 10) : 3;\n\n if (!direction || direction === 'both') {\n directions = ['previous', 'next'];\n } else {\n directions = [direction];\n }\n\n _.forEach(directions, function walkDirection(link) {\n var id = itemId;\n\n _.times(size, function getNeighbor() {\n id = itemChain[id] && itemChain[id][link];\n\n if (id) {\n siblings.push(mapHelper.getItem(testMap, id));\n } else {\n return false;\n }\n });\n });\n\n return siblings;\n },\n\n /**\n * Gets the map descriptor of the next item\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @returns {Object}\n */\n getNextItem: function getNextItem(testMap, itemPosition) {\n var siblings = navigationHelper.getSiblingItems(testMap, itemPosition, 'next', 1);\n\n if (siblings.length) {\n return siblings[0];\n }\n\n return null;\n },\n\n /**\n * Gets the map descriptor of the previous item\n * @param {Object} testMap\n * @param {Number|String} itemPosition - (could be also the item id)\n * @returns {Object}\n */\n getPreviousItem: function getPreviousItem(testMap, itemPosition) {\n var siblings = navigationHelper.getSiblingItems(testMap, itemPosition, 'previous', 1);\n\n if (siblings.length) {\n return siblings[0];\n }\n\n return null;\n },\n\n /**\n * Checks if an action will move forward.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isMovingToNextItem: function isMovingToNextItem(action, params) {\n params = params || {};\n return action === 'timeout' || action === 'skip' || action === 'move' && params.direction === 'next' && params.scope === 'item';\n },\n\n /**\n * Checks if an action will move backward.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isMovingToPreviousItem: function isMovingToPreviousItem(action, params) {\n params = params || {};\n return action === 'move' && params.direction === 'previous' && params.scope === 'item';\n },\n\n /**\n * Checks if an action will jump on another item.\n * @param {String} action - the name of the action that will be performed\n * @param {Object} [params] - some optional parameters that apply to the action\n * @returns {Boolean}\n */\n isJumpingToItem: function isJumpingToItem(action, params) {\n params = params || {};\n return action === 'move' && params.direction === 'jump' && params.scope === 'item';\n }\n };\n\n return navigationHelper;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/dialog/itemInlineMessage',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'handlebars', 'taoQtiTest/runner/helpers/navigation'], function ($$1, __, hider, pluginFactory, Handlebars, navigationHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * The display of the next button\n */\n\n var buttonData = {\n next: {\n control: 'move-forward',\n title: __('Submit and go to the next item'),\n icon: 'forward',\n text: __('OK')\n },\n end: {\n control: 'move-end',\n title: __('Submit and go to the end of the test'),\n icon: 'fast-forward',\n text: __('OK & End test')\n }\n };\n /**\n * Returns the configured plugin\n */\n\n var itemInlineMessage = pluginFactory({\n name: 'itemInlineMessage',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n /**\n * Create the button based on the current context\n * @returns {*|jQuery|HTMLElement} the button\n */\n\n var createOkButton = function createElement() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var dataType = navigationHelper.isLast(testMap, testContext.itemIdentifier) ? 'end' : 'next';\n var $btn = $$1(buttonTpl(buttonData[dataType]));\n $btn.addClass('modalFeedback-button'); //plugin behavior\n\n $btn.on('click', function (e) {\n e.preventDefault();\n self.disable();\n\n if ($$1(this).data('control') === 'move-end') {\n self.trigger('end');\n }\n\n $btn.remove();\n self.$element.remove();\n self.trigger('resume', self);\n });\n return $btn;\n };\n\n this.$button = createOkButton();\n this.$element = $$1(this.getContent().dom);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $navigationContainer = this.getAreaBroker().getNavigationArea();\n var testRunner = this.getTestRunner();\n var itemRunner = testRunner.itemRunner;\n var $inlineContainer = this.getContent().$container;\n\n if (!$inlineContainer && itemRunner._item.container) {\n $inlineContainer = $$1('.qti-itemBody', itemRunner._item.container);\n }\n\n $inlineContainer.append(this.$element); // hide all navigation buttons, create new instead of\n\n if (!$$1('.modalFeedback-button', $navigationContainer).length) {\n $navigationContainer.append(this.$button);\n }\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$button.removeProp('disabled').removeClass('disabled');\n },\n disable: function disable() {\n this.$button.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$button.click();\n }\n });\n\n return itemInlineMessage;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/feedback/feedback',['i18n', 'taoTests/runner/plugin', 'ui/feedback'], function (__, pluginFactory, feedback$1) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n feedback$1 = feedback$1 && Object.prototype.hasOwnProperty.call(feedback$1, 'default') ? feedback$1['default'] : feedback$1;\n\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n }\n\n /**\n * Returns the configured plugin\n */\n\n var feedback = pluginFactory({\n name: 'feedback',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this; //keep a ref of the feedbacks\n\n var currentFeedback;\n var testRunner = this.getTestRunner();\n /**\n * Close the current feedback\n */\n\n var closeCurrent = function closeCurrent() {\n if (currentFeedback) {\n currentFeedback.close();\n }\n };\n\n this.setState('enabled', true); //change plugin state\n\n testRunner.on('error', function (err) {\n var message = err;\n var type = 'error';\n\n if (self.getState('enabled')) {\n if ('object' === _typeof(err)) {\n message = err.message;\n type = err.type;\n }\n\n if (!message) {\n switch (type) {\n case 'TestState':\n message = __('The test has been closed/suspended!');\n break;\n\n case 'FileNotFound':\n message = __('File not found!');\n break;\n\n default:\n message = __('An error occurred!');\n }\n }\n\n currentFeedback = feedback$1().error(message);\n }\n }).on('danger', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().danger(message);\n }\n }).on('warning', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().warning(message);\n }\n }).on('info', function (message) {\n if (self.getState('enabled')) {\n currentFeedback = feedback$1().info(message);\n }\n }).on('alert.* confirm.* unloaditem', closeCurrent).on('disablefeedbackalerts', function () {\n closeCurrent();\n self.setState('enabled', false);\n }).on('enablefeedbackalerts', function () {\n self.setState('enabled', true);\n });\n }\n });\n\n return feedback;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/itemScrolling/itemScrolling',['jquery', 'util/typeCaster', 'taoTests/runner/plugin'], function ($, typeCaster, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n typeCaster = typeCaster && Object.prototype.hasOwnProperty.call(typeCaster, 'default') ? typeCaster['default'] : typeCaster;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA;\n */\n /**\n * Creates the loading bar plugin.\n * Displays a loading bar when a blocking task is running\n */\n\n var itemScrolling = pluginFactory({\n name: 'itemScrolling',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var $contentArea = testRunner.getAreaBroker().getContentArea();\n var gridRowBottomMargin = 12,\n qtiItemPadding = 30 * 2;\n testRunner.on('renderitem', function () {\n adaptItemHeight();\n $(window).off('resize.adaptItemHeight');\n $(window).on('resize.adaptItemHeight', adaptItemHeight);\n });\n\n function adaptItemHeight() {\n var $itemContainer = $contentArea.find('[data-scrolling=\"true\"]');\n var contentHeight = getItemRunnerHeight() - getExtraGridRowHeight() - getSpaceAboveQtiContent() - gridRowBottomMargin - qtiItemPadding;\n $itemContainer.each(function () {\n var $item = $(this);\n var isScrollable = typeCaster.strToBool($item.attr('data-scrolling') || 'false');\n var selectedHeight = parseFloat($item.attr('data-scrolling-height')) || 100;\n var containerParent = $item.parent().closest('[data-scrolling=\"true\"]');\n\n if ($item.length && isScrollable) {\n $item.data('scrollable', true);\n $item.css({\n 'overflow-y': 'scroll'\n });\n\n if (containerParent.length > 0) {\n $item.css('max-height', \"\".concat(containerParent.height() * (selectedHeight * 0.01), \"px\"));\n } else {\n $item.css('max-height', \"\".concat(contentHeight * (selectedHeight * 0.01), \"px\"));\n }\n }\n });\n } // depending on the context (item preview, new/old test runner...) available height is computed differently\n\n\n function getItemRunnerHeight() {\n var $testRunnerSections = $('.test-runner-sections'); // exists only in the new test runner\n\n if ($testRunnerSections.length) {\n return $testRunnerSections.get(0).getBoundingClientRect().height;\n } // otherwise, we assume that we are in an iframe with all space available (= item preview, old test runner)\n\n\n return $(window).height();\n } // extra grid row are there in case of a vertical layout (item on top/bottom of the question)\n\n\n function getExtraGridRowHeight() {\n var $gridRows = $('.qti-itemBody > .grid-row'),\n extraHeight = 0;\n $gridRows.each(function () {\n var $gridRow = $(this),\n $itemContainer = $gridRow.find('[data-scrolling=\"true\"]');\n\n if (!$itemContainer.length) {\n extraHeight += $gridRow.outerHeight(true);\n }\n });\n return extraHeight;\n } // most of the time this will be rubrick's block height in the new test runner\n\n\n function getSpaceAboveQtiContent() {\n var $testRunnerSections = $('.test-runner-sections'),\n $qtiContent = $('#qti-content');\n\n if ($testRunnerSections.length && $qtiContent.length) {\n return $qtiContent.get(0).getBoundingClientRect().top - $testRunnerSections.get(0).getBoundingClientRect().top;\n }\n\n return 0;\n }\n }\n });\n\n return itemScrolling;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/loading/loading',['layout/loading-bar', 'taoTests/runner/plugin'], function (loadingBar, pluginFactory) { 'use strict';\n\n loadingBar = loadingBar && Object.prototype.hasOwnProperty.call(loadingBar, 'default') ? loadingBar['default'] : loadingBar;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the loading bar plugin.\n * Displays a loading bar when a blocking task is running\n */\n\n var loading = pluginFactory({\n name: 'loading',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n testRunner.on('unloaditem', function () {\n loadingBar.start();\n }).on('renderitem', function () {\n loadingBar.stop();\n });\n }\n });\n\n return loading;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/modalFeedback/modalFeedback',['jquery', 'lodash', 'module', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/content/dialog/itemInlineMessage', 'taoQtiTest/runner/plugins/content/dialog/itemAlertMessage', 'ui/autoscroll'], function ($, _, module, pluginFactory, inlineMessage, alertMessage, autoscroll) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n inlineMessage = inlineMessage && Object.prototype.hasOwnProperty.call(inlineMessage, 'default') ? inlineMessage['default'] : inlineMessage;\n alertMessage = alertMessage && Object.prototype.hasOwnProperty.call(alertMessage, 'default') ? alertMessage['default'] : alertMessage;\n autoscroll = autoscroll && Object.prototype.hasOwnProperty.call(autoscroll, 'default') ? autoscroll['default'] : autoscroll;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n *\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * Modal or inline type of the messages\n */\n\n var inlineMode;\n /**\n * Form of the feedback\n * by default dialog (modal) form\n */\n\n var messagePlugin;\n /**\n * All feedback messages\n */\n\n var renderedFeedbacks;\n /**\n * modalFeedback was resolved and all components were destroyed\n */\n\n var isDestroyed;\n /**\n * Method which should be halted after modalFeedbacks confirmation action\n */\n\n var nextStep;\n\n function destroyFeedback(feedback) {\n var removed = false;\n\n _.remove(renderedFeedbacks, function (storedFeedback) {\n var found = storedFeedback === feedback;\n\n if (found) {\n removed = true;\n }\n\n return found;\n });\n\n if (removed) {\n feedback.destroy();\n\n if (!renderedFeedbacks.length) {\n nextStep();\n }\n }\n }\n\n function defineMode(inline) {\n inlineMode = inline;\n messagePlugin = inlineMode ? inlineMessage : alertMessage;\n }\n /**\n * Returns the configured plugin\n */\n\n\n var modalFeedback = pluginFactory({\n name: 'QtiModalFeedback',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n nextStep = function nextStep() {};\n\n defineMode(!!module.config().inlineModalFeedback);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var self = this;\n var testRunner = this.getTestRunner();\n\n var createMessages = function createMessages(renderingQueue, inline) {\n var bInlineMode = inlineMode;\n isDestroyed = false;\n renderedFeedbacks = [];\n\n if (_.isBoolean(inline)) {\n defineMode(inline);\n }\n\n if (renderingQueue.length) {\n _.forEach(renderingQueue, function (renderingToken) {\n var feedback = messagePlugin(testRunner, testRunner.getAreaBroker());\n feedback.init({\n dom: renderingToken.feedback.render({\n inline: inlineMode\n }),\n // for alerts will be used #modalMessages container\n $container: inlineMode ? renderingToken.$container : null\n });\n feedback.render();\n renderedFeedbacks.push(feedback);\n }); // auto scroll to the first feedback, only for the \"inline\" mode\n\n\n if (inlineMode && renderedFeedbacks) {\n autoscroll($('.qti-modalFeedback', testRunner.getAreaBroker().getContentArea()).first(), testRunner.getAreaBroker().getContentArea().parents('.content-wrapper'));\n }\n } else {\n nextStep();\n } // restore global feedback mode\n\n\n defineMode(bInlineMode);\n };\n\n if (inlineMode) {\n testRunner.off('plugin-resume.itemInlineMessage').on('plugin-resume.itemInlineMessage', function () {\n self.destroy();\n });\n } else {\n testRunner.off('plugin-resume.itemAlertMessage').on('plugin-resume.itemAlertMessage', function (feedback) {\n destroyFeedback(feedback);\n });\n }\n\n testRunner.on('modalFeedbacks', function (renderingQueue, done, inline) {\n nextStep = done;\n createMessages(renderingQueue, inline);\n });\n },\n\n /**\n * Called during the runner's destroy phase\n * allow to run that function only once\n */\n destroy: function destroy() {\n var tFeedbacks, i;\n\n if (!isDestroyed) {\n isDestroyed = true;\n\n if (!renderedFeedbacks) {\n nextStep();\n } else {\n tFeedbacks = renderedFeedbacks.slice(0);\n\n for (i in tFeedbacks) {\n destroyFeedback(tFeedbacks[i]);\n }\n }\n }\n }\n });\n\n return modalFeedback;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/overlay/overlay',['jquery', 'taoTests/runner/plugin'], function ($, pluginFactory) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var overlay = pluginFactory({\n name: 'overlay',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n this.$element = $('<div />');\n this.$element.on('click mousedown mouseup touchstart touchend keyup keydow keypress scroll drop', function (e) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n });\n\n var shield = function shield() {\n self.enable();\n };\n\n var unshield = function unshield() {\n self.disable();\n }; //change plugin state\n\n\n testRunner.on('disableitem', shield).on('enableitem unloaditem modalFeedbacks', unshield);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $contentArea = this.getTestRunner().getAreaBroker().getContentArea();\n $contentArea.after(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the overlay\n */\n enable: function enable() {\n var overlayConfig = this.getConfig();\n this.$element.addClass('overlay');\n\n if (overlayConfig.full) {\n this.$element.addClass('overlay-full');\n }\n },\n\n /**\n * Disable the overlay\n */\n disable: function disable() {\n this.$element.removeClass('overlay overlay-full');\n },\n\n /**\n * Show the overlay\n */\n show: function show() {\n this.enable();\n },\n\n /**\n * Hide the overlay\n */\n hide: function hide() {\n this.disable();\n }\n });\n\n return overlay;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/responsiveness/collapser',['lodash', 'jquery', 'taoTests/runner/plugin'], function (_, $, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Event namespace\n * @type {String}\n */\n\n var ns = '.collapser';\n /**\n * Name of the CSS class used to collapse the buttons\n * @type {String}\n */\n\n var noLabelCls = 'tool-label-collapsed';\n /**\n * Name of the CSS class used to collapse the buttons and allow to expand on mouse over\n * @type {String}\n */\n\n var noLabelHoverCls = 'tool-label-collapsed-hover';\n /**\n * Name of the CSS class used to hide the label of the button independently of responsiveness\n * @type {string}\n */\n\n var labelHiddenCls = 'no-tool-label';\n /**\n * Name of the CSS class for separators\n * @type {string}\n */\n\n var separatorCls = 'separator';\n /**\n * Default plugin options\n * @type {Object}\n */\n\n var defaults = {\n collapseTools: true,\n // collapse the tools buttons\n collapseNavigation: false,\n // collapse the navigation buttons\n collapseInOrder: false,\n // collapse any button in the given order\n hover: false,\n // expand when the mouse is over a button,\n\n /**\n * Allow to set manually which buttons should collapse and in which order.\n * This can be set by triggering the \"collapser-set-order\" event on the testRunner.\n * Given as an array of jQuery selectors: first index will be the first to be collapsed, and so on.\n * If no selector is given for a button, then this one will never collapse.\n * ex:\n * var collapseOrder = [\n * '[data-control=\"highlight-clear\"],[data-control=\"highlight-trigger\"]', // those will collapse first...\n * '[data-control=\"hide-review\"]', // this one second...\n * '[data-control=\"set-item-flag\"]', // third...\n * ... // ...\n * ];\n * @type {String[]}\n */\n collapseOrder: []\n };\n var $window = $(window);\n /**\n * Creates the responsiveness collapser plugin.\n * Reduce the size of the action bar tools when the available space is below the needed one.\n */\n\n var collapser = pluginFactory({\n name: 'collapser',\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var config = Object.assign({}, defaults, this.getConfig());\n var collapseCls = config.hover ? noLabelHoverCls : noLabelCls;\n var areaBroker = testRunner.getAreaBroker();\n var $actionsBar = areaBroker.getArea('actionsBar'),\n $toolbox = areaBroker.getToolboxArea(),\n $navigation = areaBroker.getNavigationArea();\n var allCollapsibles, availableWidth, previousAvailableWidth;\n /**\n * Get a reference of all collapsibles\n */\n\n function buildCollapsiblesList() {\n // use the given order to build the collapsibles list or generate on in natural order\n if (config.collapseInOrder && config.collapseOrder.length) {\n allCollapsibles = getCollapsiblesFromConfig();\n } // get values from DOM, grouped by prefix\n else if (config.collapseInOrder) {\n allCollapsibles = getSortedCollapsiblesFromDom();\n } // get all in one chunk\n else {\n allCollapsibles = getUnsortedCollapsiblesFromDom();\n }\n }\n /**\n * @param {jQuery} $element\n * @returns {number} Size difference, in pixels, between collapsed and expanded state of $element\n */\n\n\n function getExtraWidth($element) {\n var expandedWidth, collapsedWidth;\n $element.removeClass(collapseCls);\n expandedWidth = $element.outerWidth(true);\n $element.addClass(collapseCls);\n collapsedWidth = $element.outerWidth(true);\n $element.removeClass(collapseCls);\n return expandedWidth - collapsedWidth;\n }\n /**\n * Expand or collapse elements\n */\n\n\n function toggleCollapsibles() {\n availableWidth = getAvailableWidth();\n availableWidth < previousAvailableWidth ? collapseInOrder() : expandInOrder();\n previousAvailableWidth = availableWidth;\n }\n\n function collapseInOrder() {\n var collapsiblesCopy = _.clone(allCollapsibles),\n toCollapse;\n\n while (collapseNeeded() && collapsiblesCopy.length) {\n toCollapse = collapsiblesCopy.shift();\n toCollapse.$elements.addClass(collapseCls);\n }\n }\n\n function collapseNeeded() {\n return getToolbarWidth() > getAvailableWidth();\n }\n\n function expandInOrder() {\n _.forEachRight(allCollapsibles, function (toExpand) {\n if (toExpand.$elements.hasClass(collapseCls)) {\n if (expandPossible(toExpand.extraWidth)) {\n toExpand.$elements.removeClass(collapseCls);\n } else {\n return false;\n }\n }\n });\n }\n\n function expandPossible(extraWidth) {\n return getToolbarWidth() + extraWidth < getAvailableWidth();\n }\n\n function getAvailableWidth() {\n // Scrollbars are commonly between ~12px and ~18px in width. Subtracting 20px from the available width\n // makes sure that scrollbars are always taken in account. The worst case scenario is that the buttons\n // start to collapse, although they would still have had 20px available.\n return $actionsBar.width() - 20;\n }\n\n function getToolbarWidth() {\n return $toolbox.outerWidth(true) + $navigation.outerWidth(true);\n }\n /**\n * Parse DOM for controls that can be collapsed\n * @returns {*|jQuery|HTMLElement}\n */\n\n\n function getControlsFromDom() {\n var $controls = $(),\n selector = '>ul>[data-control]';\n\n if (config.collapseTools) {\n $controls = $controls.add($toolbox.find(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls)));\n }\n\n if (config.collapseNavigation) {\n $controls = $controls.add($navigation.find(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls)));\n }\n\n return $controls;\n }\n /**\n * Get allCollapsibles based on configuration\n *\n * @returns {Array}\n */\n\n\n function getCollapsiblesFromConfig() {\n return _.compact(config.collapseOrder.map(function (selector) {\n // some buttons are collapsed by configuration, some other are only separators: we should leave them alone\n var $elements = $(selector).not(\".\".concat(labelHiddenCls)).not(\".\".concat(separatorCls));\n var extraWidth = 0;\n\n if ($elements.length) {\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n return {\n $elements: $elements,\n extraWidth: extraWidth\n };\n }\n\n return false;\n }));\n }\n /**\n * Get allCollapsibles based on DOM\n * Build the collapse order from the left to the right, related elements are grouped.\n *\n * @returns {Array}\n */\n\n\n function getSortedCollapsiblesFromDom() {\n var $elements = getControlsFromDom(),\n _allCollapsibles = [],\n order = {}; // group items by prefix\n // eg. zoomIn and zoomOut -> zoom\n\n $elements.each(function () {\n var ctrl = this.dataset.control,\n // re makes group `foo` from `foo-bar`, `fooBar` and `foo_bar`\n // if we do not have a prefix use the control name as key to ensure uniqueness\n key = ctrl.substring(0, ctrl.search(/[A-Z-_]/)) || ctrl;\n order[key] = order[key] || $();\n order[key] = order[key].add($(this));\n }); // move items to allCollapsibles\n\n _.forOwn(order, function ($elements) {\n var extraWidth = 0;\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n\n _allCollapsibles.push({\n $elements: $elements,\n extraWidth: extraWidth\n });\n });\n\n return _.compact(_allCollapsibles);\n }\n /**\n * Get allCollapsibles based on DOM, all buttons will be collapsed at once\n *\n * @returns {Array}\n */\n\n\n function getUnsortedCollapsiblesFromDom() {\n var $elements = getControlsFromDom(),\n _allCollapsibles = [],\n extraWidth = 0;\n $elements.each(function () {\n extraWidth += getExtraWidth($(this));\n });\n\n _allCollapsibles.push({\n $elements: $elements,\n extraWidth: extraWidth\n });\n\n return _.compact(_allCollapsibles);\n }\n\n $window.on(\"resize\".concat(ns), _.throttle(function () {\n testRunner.trigger('collapseTools');\n }, 40));\n testRunner.after('renderitem loaditem', function () {\n previousAvailableWidth = Infinity;\n buildCollapsiblesList();\n testRunner.trigger('collapseTools');\n }).on(\"collapseTools\".concat(ns), function () {\n toggleCollapsibles();\n });\n },\n destroy: function destroy() {\n $window.off(ns);\n }\n });\n\n return collapser;\n\n});\n\n","define('taoQtiTest/runner/plugins/content/rubricBlock/rubricBlock',['jquery', 'ui/hider', 'taoTests/runner/plugin', 'handlebars'], function ($$1, hider, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div id=\\\"qti-rubrics\\\"></div>\\n\";\n });\n function containerTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Ensure the <a> links opens to blank pages\n * @param {jQueryElement} $container - lookup scope\n */\n\n var blankifyLinks = function blankifyLinks($container) {\n $$1('a', $container).attr('target', '_blank');\n };\n /**\n * Apply mathjax\n */\n\n\n var mathify = function mathify($container) {\n return new Promise(function (resolve) {\n if ($$1('math', $container).length > 0) {\n //load mathjax only if necessary\n require(['mathJax'], function (MathJax) {\n if (MathJax) {\n MathJax.Hub.Queue(['Typeset', MathJax.Hub], $container[0]);\n MathJax.Hub.Queue(resolve);\n } else {\n resolve();\n }\n }, resolve);\n } else {\n resolve();\n }\n });\n };\n /**\n * Returns the configured plugin\n */\n\n\n var rubricBlock = pluginFactory({\n name: 'rubricBlock',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n this.$element = $$1(containerTpl());\n this.hide(); //change plugin state\n\n testRunner.on('ready', function () {\n self.hide();\n }).on('loaditem', function () {\n var context = testRunner.getTestContext();\n\n if (context.rubrics) {\n self.$element.html(context.rubrics);\n blankifyLinks(self.$element);\n mathify(self.$element).then(function () {\n // notify that the rubric blocks are loaded\n testRunner.trigger('rubricblock');\n });\n }\n }).on('renderitem', function () {\n self.show();\n }).on('unloaditem', function () {\n self.hide();\n self.$element.empty();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element before the content area\n var $container = this.getAreaBroker().getContentArea();\n $container.before(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the container\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the container\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the container\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the container\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return rubricBlock;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/connectivity/connectivity',['jquery', 'lodash', 'i18n', 'core/polling', 'ui/waitingDialog/waitingDialog', 'taoTests/runner/plugin', 'handlebars', 'util/namespace'], function ($$1, _, __, pollingFactory, waitingDialog, pluginFactory, Handlebars, namespaceHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pollingFactory = pollingFactory && Object.prototype.hasOwnProperty.call(pollingFactory, 'default') ? pollingFactory['default'] : pollingFactory;\n waitingDialog = waitingDialog && Object.prototype.hasOwnProperty.call(waitingDialog, 'default') ? waitingDialog['default'] : waitingDialog;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n \n return \" with-message\";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"<span class=\\\"message-connect\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Online\", options) : helperMissing.call(depth0, \"__\", \"Online\", options)))\n + \"</span>\";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"<span class=\\\"message-disconnected\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Offline\", options) : helperMissing.call(depth0, \"__\", \"Offline\", options)))\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"connectivity-box \";\n if (helper = helpers.state) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.state); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"<span data-control=\\\"connectivity-connected\\\" class=\\\"qti-controls icon-connect\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Connected to server\", options) : helperMissing.call(depth0, \"__\", \"Connected to server\", options)))\n + \"\\\"></span>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.message), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"<span data-control=\\\"connectivity-disconnected\\\" class=\\\"qti-controls icon-disconnect\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Disconnected from server\", options) : helperMissing.call(depth0, \"__\", \"Disconnected from server\", options)))\n + \"\\\"></span>\\n</div>\\n\";\n return buffer;\n });\n function connectivityTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2021 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The plugin default configuration\n * @type {Object}\n * @property {Number} checkInterval - when offline, interval to check if we're back online\n * @property {Boolean} indicator - do we display the indicator in the test UI\n * @property {Boolean} message - do we display the message in the test UI\n */\n\n var defaultConfig = {\n checkInterval: 30 * 1000,\n indicator: true,\n message: false\n };\n /**\n * Creates the connectivity plugin.\n * Detects connectivity issues\n */\n\n var connectivity = pluginFactory({\n name: 'connectivity',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var proxy = testRunner.getProxy();\n var config = Object.assign({}, defaultConfig, this.getConfig()); //Displays a connectivity indicator\n\n if (config && config.indicator) {\n //create the indicator\n this.$element = $$1(connectivityTpl({\n state: proxy.isOnline() ? 'connected' : 'disconnected',\n message: config.message\n }));\n testRunner.on('disconnect', function () {\n self.$element.removeClass('connected').addClass('disconnected');\n }).on('reconnect', function () {\n self.$element.removeClass('disconnected').addClass('connected');\n });\n } //update the interval, with the new value\n\n\n if (this.polling && _.isNumber(config.checkInterval)) {\n this.polling.setInterval(config.checkInterval);\n }\n },\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n * We do it before init to catch even offline during the init sequence\n */\n install: function install() {\n var self = this;\n var waiting = false;\n var testRunner = this.getTestRunner();\n var proxy = testRunner.getProxy();\n /**\n * Display the waiting dialog, while waiting the connection to be back\n * @param {String} [messsage] - additional message for the dialog\n * @returns {Promise} resolves once the wait is over and the user click on 'proceed'\n */\n\n this.displayWaitingDialog = function displayWaitingDialog() {\n var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var dialog;\n return new Promise(function (resolve) {\n if (!waiting) {\n waiting = true; //if a pause event occurs while waiting,\n //we also wait the connection to be back\n\n testRunner.before('pause.waiting', function () {\n return new Promise(function (pauseResolve) {\n proxy.off('reconnect.pausing').after('reconnect.pausing', pauseResolve);\n });\n }); //creates the waiting modal dialog\n\n dialog = waitingDialog({\n message: __('You are encountering a prolonged connectivity loss. ') + message,\n waitContent: __('Please wait while we try to restore the connection.'),\n proceedContent: __('The connection seems to be back, please proceed')\n }).on('proceed', function () {\n resolve();\n }).on('render', function () {\n proxy.off('reconnect.waiting').after('reconnect.waiting', function () {\n testRunner.off('pause.waiting');\n waiting = false;\n dialog.endWait();\n });\n });\n }\n });\n }; //Last chance to check the connection,\n //by regular polling on the \"up\" signal\n\n\n this.polling = pollingFactory({\n action: function action() {\n testRunner.getProxy().telemetry(testRunner.getTestContext().itemIdentifier, 'up').catch(_.noop);\n },\n interval: defaultConfig.checkInterval,\n autoStart: false\n }); //the Proxy is the only one to know something about connectivity\n\n proxy.on('disconnect', function disconnect(source) {\n if (!testRunner.getState('disconnected')) {\n testRunner.setState('disconnected', true);\n testRunner.trigger('disconnect', source);\n self.polling.start();\n }\n }).on('reconnect', function reconnect() {\n if (testRunner.getState('disconnected')) {\n testRunner.setState('disconnected', false);\n testRunner.trigger('reconnect');\n self.polling.stop();\n }\n }); //intercept tries to leave while offline\n //this could be caused by pauses for example.\n //If caused by an action like exitTest it will be handled\n //by navigation errors (see below)\n\n testRunner.before('leave', function (e, data) {\n if (proxy.isOffline()) {\n self.displayWaitingDialog(data.message).then(function () {\n testRunner.trigger('leave', data);\n }).catch(function (generalErr) {\n testRunner.trigger('error', generalErr);\n });\n return false;\n }\n }); //intercept offline navigation errors\n\n testRunner.before('error.connectivity', function (e, err) {\n // detect and prevent connectivity errors\n if (proxy.isConnectivityError(err)) {\n return false;\n }\n\n if (proxy.isOffline()) {\n self.displayWaitingDialog().then(function () {\n if (err.type === 'nav') {\n testRunner.loadItem(testRunner.getTestContext().itemIdentifier);\n }\n\n if (err.type === 'finish') {\n testRunner.finish();\n }\n\n if (err.type === 'pause') {\n testRunner.trigger('pause', {\n reasons: err.data && err.data.reasons,\n message: err.data && err.data.comment\n });\n }\n }).catch(function (generalErr) {\n testRunner.trigger('error', generalErr);\n });\n return false;\n }\n });\n testRunner.before('loaditem.connectivity', function (e, itemRef, item) {\n var testContext = testRunner.getTestContext();\n\n if (item.flags && item.flags.hasFeedbacks) {\n testContext.hasFeedbacks = true;\n }\n\n if (proxy.isOffline() && item.flags && item.flags.containsNonPreloadedAssets) {\n self.displayWaitingDialog().then(function () {\n testRunner.loadItem(itemRef);\n });\n return false;\n }\n });\n testRunner.before(namespaceHelper.namespaceAll('move skip timeout', 'connectivity'), function (e) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var testContext = testRunner.getTestContext();\n var currentItem = testRunner.getCurrentItem();\n\n if (proxy.isOffline() && (currentItem.hasFeedbacks || testContext.hasFeedbacks)) {\n testRunner.trigger('disableitem');\n self.displayWaitingDialog().then(function () {\n var _testRunner$trigger;\n\n (_testRunner$trigger = testRunner.trigger('enableitem')).trigger.apply(_testRunner$trigger, [e.name].concat(args));\n });\n return false;\n }\n });\n },\n destroy: function destroy() {\n this.getTestRunner().off('.connectivity');\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n\n if (this.$element) {\n $container.append(this.$element);\n }\n }\n });\n\n return connectivity;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/connectivity/pauseOnError',['i18n', 'taoTests/runner/plugin', 'handlebars'], function (__, pluginFactory, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<b>\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b><br><br>\\n\";\n if (helper = helpers.message) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.message); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n });\n function dialogTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n var name = 'pauseOnError';\n var dialogMessage = {\n title: __('Something unexpected happened.'),\n message: __('Please try reloading the page or pause the test. If you pause, you will be able to resume the test from this page.')\n };\n var dialogConfig = {\n focus: 'cancel',\n buttons: {\n labels: {\n ok: __('Pause the test'),\n cancel: __('Reload the page')\n }\n }\n };\n var pauseContext = {\n reasons: {\n category: 'technical',\n subCategory: 'error'\n },\n originalMessage: 'Due to an unexpected issue the test has been suspended.'\n };\n var pauseOnError = pluginFactory({\n name: name,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n\n var returnToHome = function returnToHome() {\n return testRunner.trigger('pause', pauseContext);\n };\n\n var reloadPage = function reloadPage() {\n return testRunner.trigger('reloadpage');\n };\n\n var processError = function processError(error) {\n testRunner.on('reloadpage', function () {\n return window.location.reload();\n }).trigger('disablenav disabletools hidenav').trigger(\"confirm.\".concat(name), dialogTpl(dialogMessage), returnToHome, reloadPage, dialogConfig);\n\n if (error.code === 500) {\n error.originalCode = error.code;\n delete error.code;\n testRunner.trigger(\"disablefeedbackalerts\");\n testRunner.after('error.pauseOnError', function () {\n testRunner.off('error.pauseOnError');\n testRunner.trigger(\"enablefeedbackalerts\");\n });\n }\n };\n\n testRunner.before('error', function (e, error) {\n return processError(error);\n });\n }\n });\n\n return pauseOnError;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/duration/duration',['lodash', 'taoTests/runner/plugin', 'core/logger'], function (_, pluginFactory, loggerFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2020 (original work) Open Assessment Technologies SA ;\n */\n var logger = loggerFactory('taoQtiTest/runner/plugins/controls/duration/duration');\n /**\n * Creates the timer plugin\n */\n\n var duration = pluginFactory({\n name: 'duration',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n // define the \"duration\" store as \"volatile\" (removed on browser change).\n this.getTestRunner().getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n *\n * @returns {Promise}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var currentUpdatePromise = Promise.resolve();\n\n var getItemAttempt = function getItemAttempt() {\n var context = testRunner.getTestContext();\n return \"\".concat(context.itemIdentifier, \"#\").concat(context.attempt);\n };\n\n var getPositiveNumber = function getPositiveNumber(value) {\n if (!_.isNumber(value) || value < 0) {\n return 0;\n }\n\n return value;\n }; //where the duration of attempts are stored\n\n\n return testRunner.getPluginStore(this.getName()).then(function (durationStore) {\n /**\n * Gets the duration of a particular item from the store\n *\n * @param {String} attemptId - the attempt id to get the duration for\n * @returns {Promise}\n */\n var getItemDuration = function getItemDuration(attemptId) {\n if (!/^(.*)+#+\\d+$/.test(attemptId)) {\n return Promise.reject(new Error('Is it really an attempt id, like \"itemid#attempt\"'));\n }\n\n return durationStore.getItem(attemptId);\n };\n /**\n * Updates the duration of a particular item\n *\n * @param {Number} elapsed - time elapsed since previous tick\n * @returns {Promise}\n */\n\n\n var updateDuration = function updateDuration(elapsed) {\n var itemAttemptId = getItemAttempt();\n currentUpdatePromise = currentUpdatePromise.then(function () {\n return getItemDuration(itemAttemptId);\n }).then(function (duration) {\n return durationStore.setItem(itemAttemptId, getPositiveNumber(duration) + getPositiveNumber(elapsed) / 1000);\n }).catch(function (err) {\n logger.warn(\"Error updating item duration! \".concat(err && err.message));\n });\n return currentUpdatePromise;\n };\n /**\n * Adds the current duration to the next action request.\n * The duration will be sent to the server with the next request,\n * usually submitItem() or callItemAction()\n *\n * @returns {Promise}\n */\n\n\n var addDurationToCallActionParams = function addDurationToCallActionParams() {\n var itemAttemptId = getItemAttempt();\n return currentUpdatePromise.then(function () {\n return getItemDuration(itemAttemptId);\n }).then(function (duration) {\n return testRunner.getProxy().addCallActionParams({\n itemDuration: getPositiveNumber(duration)\n });\n }).catch(function (err) {\n logger.warn(\"Error retrieving item duration! \".concat(err && err.message));\n });\n }; //change plugin state\n\n\n testRunner.on('tick', updateDuration).before('move skip exit timeout pause', addDurationToCallActionParams)\n /**\n * @event duration.get\n * @param {String} attemptId - the attempt id to get the duration for\n * @param {getDuration} getDuration - a receiver callback\n */\n .on('plugin-get.duration', function (attemptId, getDuration) {\n if (_.isFunction(getDuration)) {\n getDuration(getItemDuration(attemptId));\n }\n });\n });\n }\n });\n\n return duration;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/progress',['lodash', 'i18n', 'core/format', 'taoQtiTest/runner/helpers/map'], function (_, __, format, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @typedef {Object} progressDetails\n * @property {Number} position - the position in the current element\n * @property {Number} reached - the number of reached elements (at least one item viewed)\n * @property {Number} viewed - the number of viewed elements (all items viewed)\n * @property {Number} completed - the number of completed elements (all questions answered)\n * @property {Number} total - the total number of elements\n */\n\n /**\n * @typedef {itemStats} progressData\n * @property {Number} position - the position in the scope\n * @property {Number} overallCompleted - the number of completed items in the test\n * @property {Number} overall - the total number of items in the test\n * @property {progressDetails} sections - the details of testSections in the scope\n * @property {progressDetails} parts - the details of testParts in the scope\n * @property {progressDetails} answerableSections - the details of testSections that contain questions in the scope\n * @property {progressDetails} answerableParts - the details of testParts that contain questions in the scope\n * @property {progressDetails} matchedCategories - the details of items that match the expected categories in the scope\n */\n\n /**\n * @typedef {Object} progressIndicator\n * @property {Number} position - the position in the scope\n * @property {Number} total - the length of the scope\n * @property {Number} ratio - the progress ratio of the indicator\n * @property {String} label - the text to display for the indicator\n */\n\n /**\n * @typedef {Object} progressConfig\n * @property {String} scope - the scope of the progression\n * @property {String} indicator - the type of progression\n * @property {Bool} showTotal - display 'item x of y' (true) | 'item x'\n * @property {Array} categories - categories to count by them\n */\n\n /**\n * Default progress config\n * @type {Object}\n */\n\n var defaultConfig = {\n scope: 'test',\n indicator: 'percentage',\n showTotal: true,\n categories: []\n };\n /**\n * List of labels by types\n * @type {Object}\n */\n\n var labels = {\n item: {\n long: __('Item %d of %d'),\n short: __('Item %d')\n },\n section: {\n long: __('Section %d of %d'),\n short: __('Section %d')\n }\n };\n /**\n * Simple map of progress stats computers\n * @type {Object}\n */\n\n var scopes = {\n /**\n * Gets stats for the whole test\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n test: function test(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'test');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.position + 1;\n return stats;\n },\n\n /**\n * Gets stats for the current test part\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n testPart: function testPart(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'testPart');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.positionInPart + 1;\n return stats;\n },\n\n /**\n * Gets stats for the current test section\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n testSection: function testSection(testMap, testContext, config) {\n var stats = getProgressStats(testMap, testContext, config, 'testSection');\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n stats.position = item.positionInSection + 1;\n return stats;\n }\n };\n /**\n * Simple map of progress indicator computers\n * @type {Object}\n */\n\n var indicators = {\n /**\n * Indicator that shows the percentage of completed items\n * @param {progressData} stats\n * @returns {progressIndicator}\n */\n percentage: function percentage(stats) {\n return getRatioProgression(stats.answered, stats.questions);\n },\n\n /**\n * Indicator that shows the position of current item\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n position: function position(stats, config) {\n return getPositionProgression(stats.position, stats.total, 'item', config);\n },\n\n /**\n * Indicator that shows the number of viewed questions\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n questions: function questions(stats, config) {\n return getPositionProgression(stats.questionsViewed, stats.questions, 'item', config);\n },\n\n /**\n * Indicator that shows the number of reached answerable sections\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n sections: function sections(stats, config) {\n return getPositionProgression(stats.answerableSections.reached, stats.answerableSections.total, 'section', config);\n },\n\n /**\n * Indicator that shows the number of viewed items which have categories from the configuration\n * (show all if categories are not set)\n * @param {progressData} stats\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n */\n categories: function categories(stats, config) {\n return getPositionProgression(stats.matchedCategories.position, stats.matchedCategories.total, 'item', config);\n }\n };\n /**\n * Fix the test map if the current test part is linear, as the current item should not be answered.\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @returns {Object} The fixed test map\n */\n\n function getFixedMap(testMap, testContext) {\n var currentTestPart = mapHelper.getPart(testMap, testContext.testPartId);\n var currentItem = mapHelper.getItemAt(testMap, testContext.itemPosition);\n\n if (currentItem.answered && currentTestPart.isLinear) {\n var fixedTestMap = _.cloneDeep(testMap);\n\n var fixedCurrentItem = mapHelper.getItemAt(fixedTestMap, testContext.itemPosition);\n fixedCurrentItem.answered = false;\n return fixedTestMap;\n }\n\n return testMap;\n }\n /**\n * Gets an empty stats record\n * @returns {progressDetails}\n */\n\n\n function getEmptyStats() {\n return {\n position: 0,\n reached: 0,\n viewed: 0,\n completed: 0,\n total: 0\n };\n }\n /**\n * Updates the progress stats from the given element\n * @param {progressDetails} stats - The stats details to update\n * @param {Object} element - The element from which take the details\n * @param {Number} position - The current item position\n */\n\n\n function updateStats(stats, element, position) {\n if (element.position <= position) {\n stats.position++;\n }\n\n if (element.stats.viewed) {\n stats.reached++;\n\n if (element.stats.viewed === element.stats.total) {\n stats.viewed++;\n }\n }\n\n if (element.stats.answered) {\n if (element.stats.answered === element.stats.questions) {\n stats.completed++;\n }\n }\n\n stats.total++;\n }\n /**\n * Updates the progress stats from the given element\n * @param {progressDetails} stats - The stats details to update\n * @param {Object} element - The element from which take the details\n * @param {Number} position - The current item position\n */\n\n\n function updateItemStats(stats, element, position) {\n if (element.position <= position) {\n stats.position++;\n }\n\n if (element.viewed) {\n stats.reached++;\n stats.viewed++;\n }\n\n if (element.answered) {\n stats.completed++;\n }\n\n stats.total++;\n }\n /**\n * Convert list of the categories to the hashtable to improve performance\n * @param categories\n * @returns {*}\n */\n\n\n function getCategoriesToMatch(categories) {\n var matchSize = categories && categories.length;\n return matchSize && _.reduce(categories, function (map, category) {\n map[category] = true;\n return map;\n }, {});\n }\n /**\n * Completes the progression stats\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @param {String} [scope] - The name of the scope. Can be: test, part, section (default: test)\n * @returns {progressData}\n */\n\n\n function getProgressStats(testMap, testContext, config, scope) {\n var fixedMap = getFixedMap(testMap, testContext);\n var scopedMap = mapHelper.getScopeMap(fixedMap, testContext.itemPosition, scope);\n\n var stats = _.clone(scopedMap.stats);\n\n var categoriesToMatch;\n var matchSize;\n\n if (config.indicator === 'categories') {\n categoriesToMatch = getCategoriesToMatch(config.categories);\n matchSize = config.categories && config.categories.length;\n stats.matchedCategories = getEmptyStats();\n }\n\n stats.parts = getEmptyStats();\n stats.sections = getEmptyStats();\n stats.answerableParts = getEmptyStats();\n stats.answerableSections = getEmptyStats();\n\n _.forEach(scopedMap.parts, function (part) {\n updateStats(stats.parts, part, testContext.itemPosition);\n\n if (part.stats.questions > 0) {\n updateStats(stats.answerableParts, part, testContext.itemPosition);\n }\n\n _.forEach(part.sections, function (section) {\n updateStats(stats.sections, section, testContext.itemPosition);\n\n if (section.stats.questions > 0) {\n updateStats(stats.answerableSections, section, testContext.itemPosition);\n }\n\n if (config.indicator === 'categories') {\n _.forEach(section.items, function (item) {\n if (matchCategories(item.categories, categoriesToMatch, matchSize)) {\n updateItemStats(stats.matchedCategories, item, testContext.itemPosition);\n }\n });\n }\n });\n });\n\n return stats;\n }\n /**\n *\n * @param {Array} categories - List of categories to check\n * @param {Object} expectedCategories - Hashtable of expected categories\n * @param {Number} minWanted - Minimal number of expected categories that should match\n * @returns {Boolean}\n */\n\n\n function matchCategories(categories, expectedCategories, minWanted) {\n var matched = 0;\n\n if (expectedCategories) {\n _.forEach(categories, function (category) {\n if (expectedCategories[category]) {\n matched++;\n\n if (matched >= minWanted) {\n return false;\n }\n }\n });\n }\n\n return matched === minWanted;\n }\n /**\n * Gets the progression ratio\n * @param {Number} position\n * @param {Number} total\n * @returns {Number}\n */\n\n\n function getRatio(position, total) {\n if (position && total > 0) {\n return Math.floor(position / total * 100);\n }\n\n return 0;\n }\n /**\n * Gets the label of the progress bar for an item\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @param {String} type - the type of element that is represented\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {String}\n */\n\n\n function getProgressionLabel(position, total, type, config) {\n var patterns = labels[type] || labels.item;\n var pattern = config.showTotal ? patterns.long : patterns.short;\n return format(pattern, position || '0', total || '0');\n }\n /**\n * Gets the progression based on position\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @param {String} type - the type of element that is represented\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressIndicator}\n */\n\n\n function getPositionProgression(position, total, type, config) {\n return {\n position: position || 0,\n total: total || 0,\n ratio: getRatio(position, total),\n label: getProgressionLabel(position, total, type, config)\n };\n }\n /**\n * Gets the progression based on a ratio\n * @param {Number} position - the current position\n * @param {Number} total - the total number of items\n * @returns {progressIndicator}\n */\n\n\n function getRatioProgression(position, total) {\n var ratio = getRatio(position, total);\n return {\n position: position || 0,\n total: total || 0,\n ratio: ratio,\n label: \"\".concat(ratio, \"%\")\n };\n }\n\n var progress = {\n /**\n * Checks that categories matched\n * @param categories\n * @param expectedCategories\n * @returns {Boolean}\n */\n isMatchedCategories: function validCategories(categories, expectedCategories) {\n var categoriesToMatch = getCategoriesToMatch(expectedCategories);\n var matchSize = expectedCategories && expectedCategories.length;\n return matchCategories(categories, categoriesToMatch, matchSize);\n },\n\n /**\n * Computes the progress stats for the specified scope\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @returns {progressData}\n */\n computeStats: function computeStats(testMap, testContext, config) {\n var testPart = mapHelper.getPart(testMap, testContext.testPartId);\n var statsComputer = config.scope && scopes[config.scope] || scopes.test;\n var stats = statsComputer(testMap, testContext, config || defaultConfig);\n stats.overall = testMap.stats.total;\n\n if (testPart && testPart.isLinear) {\n stats.overallCompleted = testMap.stats.answered - 1;\n } else {\n stats.overallCompleted = testMap.stats.answered;\n }\n\n return stats;\n },\n\n /**\n * Computes the specified progress indicator\n * @param {progressData} stats - the progress stats\n * @param {String} type - the [type=\"percentage\"] of indicator to compute (could be: percentage, position, questions, sections)\n * @param {progressConfig} [config] - a config object\n * @param {Boolean} [config.showTotal] - display 'item x of y' (true) | 'item x'\n * @returns {progressIndicator}\n */\n computeIndicator: function computeIndicator(stats, type, config) {\n var indicatorComputer = type && indicators[type] || indicators.percentage;\n return indicatorComputer(stats || {}, config || defaultConfig);\n },\n\n /**\n *\n * @param {Object} testMap - the actual test map\n * @param {Object} testContext - the actual test context\n * @param {progressConfig} config - a config object\n * @param {String} config.indicator - the type of progression\n * @param {String} config.scope - the scope of the progression\n * @param {Array} config.categories - categories to count by them\n * @param {Boolean} [config.showTotal=true] - display 'item x of y' (true) | 'item x'\n */\n computeProgress: function computeProgress(testMap, testContext, config) {\n var progressData;\n config = _.defaults(config || {}, defaultConfig);\n progressData = this.computeStats(testMap, testContext, config);\n return this.computeIndicator(progressData, config.indicator, config);\n }\n };\n\n return progress;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/renderer/percentage',['ui/component', 'handlebars', 'ui/progressbar'], function (component, Handlebars, progressbar) { 'use strict';\n\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"progress-box\\\">\\n <div data-control=\\\"progress-bar\\\" class=\\\"qti-controls progressbar info\\\"></div>\\n <div data-control=\\\"progress-label\\\" class=\\\"qti-controls\\\"></div>\\n</div>\\n\";\n });\n function percentageTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values\n * @type {Object}\n */\n\n var defaults = {\n showLabel: true\n };\n /**\n * Builds percentage indicator renderer\n * @param {Object} [config] - a config object\n * @param {Boolean} [config.showLabel=true] - show/hide the progress label\n * @param {Object} [progressData] - the initial dataset\n */\n\n function percentageIndicatorRenderer(config, progressData) {\n var rendererApi = {\n /**\n * Update the progress bar according to the provided indicator data\n * @param {progressIndicator} data\n */\n update: function update(data) {\n progressData = data;\n\n if (this.is('rendered') && this.controls) {\n this.controls.$label.text(progressData.label);\n this.controls.$bar.progressbar('value', progressData.ratio);\n }\n /**\n * Executes extra tasks on update\n * @event percentageIndicatorRenderer#update\n * @param {progressIndicator} data\n */\n\n\n this.trigger('update', data);\n }\n };\n return component(rendererApi, defaults).setTemplate(percentageTpl).on('render', function () {\n // get access to the controls\n this.controls = {\n $label: this.getElement().find('[data-control=\"progress-label\"]'),\n $bar: this.getElement().find('[data-control=\"progress-bar\"]')\n }; // apply option\n\n if (!this.config.showLabel) {\n this.controls.$label.hide();\n } // and initialize the progress bar component\n\n\n this.controls.$bar.progressbar(); // set the right progression according to init data\n\n if (progressData) {\n this.update(progressData);\n } // forward the hidden state if it has been set before render\n\n\n if (this.is('hidden')) {\n this.hide();\n }\n }).on('destroy', function () {\n this.controls = null;\n }).init(config);\n }\n\n return percentageIndicatorRenderer;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/renderer/position',['lodash', 'ui/component', 'handlebars'], function (_, component, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"progress-box\\\">\\n <div data-control=\\\"progress-bar\\\" class=\\\"qti-controls progressbar\\\">\\n <div class=\\\"progressbar-points\\\"></div>\\n </div>\\n <div data-control=\\\"progress-label\\\" class=\\\"qti-controls\\\"></div>\\n</div>\\n\";\n });\n function positionTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\";\n buffer += \"\\n<span class=\\\"progressbar-point\\\" data-index=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"></span>\\n\";\n return buffer;\n }\n\n stack1 = helpers.each.call(depth0, depth0, {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function pointTpl(data, options, asString) {\n var html = Template$1(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values\n * @type {Object}\n */\n\n var defaults = {\n showLabel: true\n };\n /**\n * Builds percentage indicator renderer\n * @param {Object} [config] - a config object\n * @param {Boolean} [config.showLabel=true] - show/hide the progress label\n * @param {Object} [progressData] - the initial dataset\n */\n\n function positionIndicatorRenderer(config, progressData) {\n var count = 0;\n var rendererApi = {\n /**\n * Update the progress bar according to the provided indicator data\n * @param {progressIndicator} data\n */\n update: function update(data) {\n progressData = data;\n\n if (this.is('rendered') && this.controls) {\n if (count !== progressData.total) {\n // the number of points have changed, regenerate the full bar\n count = progressData.total;\n this.controls.$bar.empty().append(pointTpl(_.range(count)));\n }\n\n this.controls.$label.text(progressData.label);\n this.controls.$bar // remove progression from all points\n .children().removeClass('reached current') // set progression to each reached point\n .slice(0, progressData.position).addClass('reached') // set current position\n .slice(-1).addClass('current');\n }\n /**\n * Executes extra tasks on update\n * @event positionIndicatorRenderer#update\n * @param {progressIndicator} data\n */\n\n\n this.trigger('update', data);\n }\n };\n return component(rendererApi, defaults).setTemplate(positionTpl).on('render', function () {\n // get access to the controls\n this.controls = {\n $label: this.getElement().find('[data-control=\"progress-label\"]'),\n $bar: this.getElement().find('[data-control=\"progress-bar\"] .progressbar-points')\n }; // apply option\n\n if (!this.config.showLabel) {\n this.controls.$label.hide();\n } // set the right progression according to init data\n\n\n if (progressData) {\n this.update(progressData);\n } // forward the hidden state if it has been set before render\n\n\n if (this.is('hidden')) {\n this.hide();\n }\n }).on('destroy', function () {\n this.controls = null;\n }).init(config);\n }\n\n return positionIndicatorRenderer;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/progressbar/progressbar',['taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/controls/progressbar/progress', 'taoQtiTest/runner/plugins/controls/progressbar/renderer/percentage', 'taoQtiTest/runner/plugins/controls/progressbar/renderer/position'], function (pluginFactory, mapHelper, progressHelper, percentageRendererFactory, positionRendererFactory) { 'use strict';\n\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n progressHelper = progressHelper && Object.prototype.hasOwnProperty.call(progressHelper, 'default') ? progressHelper['default'] : progressHelper;\n percentageRendererFactory = percentageRendererFactory && Object.prototype.hasOwnProperty.call(percentageRendererFactory, 'default') ? percentageRendererFactory['default'] : percentageRendererFactory;\n positionRendererFactory = positionRendererFactory && Object.prototype.hasOwnProperty.call(positionRendererFactory, 'default') ? positionRendererFactory['default'] : positionRendererFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * List of available progress indicator renderers\n * @type {Object}\n */\n\n var renderers = {\n percentage: percentageRendererFactory,\n position: positionRendererFactory\n };\n /**\n * Returns the configured plugin\n */\n\n var progressbar = pluginFactory({\n name: 'progressBar',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerConfig = testRunner.getOptions();\n var config = Object.assign({}, testRunnerConfig.progressIndicator || {}, this.getConfig());\n var self = this;\n var rendererFactory = renderers[config.renderer] || renderers.percentage;\n var progressConfig = {\n indicator: config.type || 'percentage',\n scope: config.scope || 'test',\n showLabel: config.showLabel,\n showTotal: config.showTotal,\n categories: config.categories\n };\n\n var hiddenByQuestions = function hiddenByQuestions(item) {\n return item && item.informational && progressConfig.indicator === 'questions';\n };\n\n var hiddenByCategories = function hiddenByCategories(item) {\n return item && progressConfig.indicator === 'categories' && !progressHelper.isMatchedCategories(item.categories, progressConfig.categories);\n };\n /**\n * Check if progress bar should be hidden\n */\n\n\n var isProgressbarHidden = function isProgressbarHidden(item) {\n return hiddenByQuestions(item) || hiddenByCategories(item);\n };\n /**\n * Update the progress bar\n */\n\n\n var update = function update() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var item = mapHelper.getItemAt(testMap, testContext.itemPosition);\n\n if (isProgressbarHidden(item)) {\n self.renderer.hide();\n } else {\n self.renderer.show();\n self.renderer.update(progressHelper.computeProgress(testMap, testContext, progressConfig));\n }\n }; //create the progressbar\n\n\n this.renderer = rendererFactory(progressConfig); //let update the progression\n\n update();\n testRunner.on('ready loaditem', update);\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n this.renderer.render($container);\n },\n\n /**\n * Called during the runner's render phase\n */\n destroy: function destroy() {\n if (this.renderer) {\n this.renderer.destroy();\n }\n\n this.renderer = null;\n },\n\n /**\n * Show the progress bar\n */\n show: function show() {\n if (this.renderer) {\n this.renderer.show();\n }\n },\n\n /**\n * Hide the progress bar\n */\n hide: function hide() {\n if (this.renderer) {\n this.renderer.hide();\n }\n }\n });\n\n return progressbar;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/testState/testState',['lodash', 'taoTests/runner/plugin'], function (_, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Creates the testState plugin.\n * Handle particular states of the assessment test\n */\n\n var testState = pluginFactory({\n name: 'testState',\n\n /**\n * Installs the plugin (called when the runner bind the plugin)\n */\n install: function install() {\n var testRunner = this.getTestRunner(); // middleware invoked on every requests\n\n testRunner.getProxy().use(function qtiFilter(req, res, next) {\n var data = res && res.data; // test has been closed/suspended => redirect to the index page after message acknowledge\n\n if (data && data.type && data.type === 'TestState' && !testRunner.getState('closedOrSuspended')) {\n // spread the world about the reason of the leave\n testRunner.setState('closedOrSuspended', true);\n\n if (!testRunner.getState('ready')) {\n // if we open an inconsistent test just leave\n // should happen if we refresh an auto paused test\n testRunner.trigger('destroy');\n } else if (_.isEmpty(data.messages) || !_.find(data.messages, {\n channel: 'teststate'\n })) {\n testRunner.trigger('leave', data);\n } // break the chain to avoid uncaught exception in promise...\n // this will lead to unresolved promise, but the browser will be redirected soon!\n\n\n return;\n }\n\n next();\n });\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var isLeaving = false; // immediate handling of proctor's actions\n\n testRunner.getProxy().channel('teststate', function (data) {\n if (!isLeaving && data && ('close' === data.type || 'pause' === data.type) && !testRunner.getState('closedOrSuspended')) {\n isLeaving = true;\n\n if ('pause' === data.type) {\n testRunner.trigger('pause', data);\n } else {\n testRunner.setState('closedOrSuspended', true);\n testRunner.trigger('leave', data);\n }\n }\n });\n }\n });\n\n return testState;\n\n});\n\n","define('taoQtiTest/runner/helpers/getTimerMessage',['i18n'], function (__) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n\n /**\n * Returns timer information string\n * @returns {Boolean}\n */\n\n function getTimerMessage(hours, minutes, seconds, unansweredQuestions, scope) {\n var timerMessage;\n var timeArr = [hours, minutes, seconds];\n var timeArgArr = [];\n [__('hours'), __('minutes'), __('seconds')].forEach(function (unit, idx) {\n if (timeArr[idx] > 0) {\n timeArgArr.push(\"\".concat(timeArr[idx], \" \").concat(unit));\n }\n });\n var answeredMessage;\n\n if (!unansweredQuestions || scope === 'item') {\n answeredMessage = __('the current question');\n } else {\n var questionsMessage = __('questions');\n\n if (unansweredQuestions === 1) {\n questionsMessage = __('question');\n }\n\n answeredMessage = __('remaining %s %s', unansweredQuestions, questionsMessage);\n }\n\n if (timeArgArr.length === 0) {\n timerMessage = __('%s to answer %s', 'no time left', answeredMessage);\n } else {\n timerMessage = __('%s to answer %s', timeArgArr.join(', '), answeredMessage);\n }\n\n return timerMessage;\n }\n\n return getTimerMessage;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/controls/timer/component/css/countdown',[],function(){});\n","define('taoQtiTest/runner/plugins/controls/timer/component/countdown',['jquery', 'lodash', 'core/encoder/time', 'ui/component', 'handlebars', 'taoQtiTest/runner/helpers/getTimerMessage', 'ui/tooltip', 'css!taoQtiTest/runner/plugins/controls/timer/component/css/countdown.css', 'moment'], function ($$1, _, timeEncoder, component, Handlebars, getTimerMessage, tooltip, countdown_css, moment) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n timeEncoder = timeEncoder && Object.prototype.hasOwnProperty.call(timeEncoder, 'default') ? timeEncoder['default'] : timeEncoder;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n getTimerMessage = getTimerMessage && Object.prototype.hasOwnProperty.call(getTimerMessage, 'default') ? getTimerMessage['default'] : getTimerMessage;\n tooltip = tooltip && Object.prototype.hasOwnProperty.call(tooltip, 'default') ? tooltip['default'] : tooltip;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"countdown\\\" data-control=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-type=\\\"\";\n if (helper = helpers.type) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.type); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-scope=\\\"\";\n if (helper = helpers.scope) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.scope); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" disabled>\\n <span aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"label truncate\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"time\\\" aria-hidden=\\\"true\\\"></span>\\n <div class=\\\"time--screenreader visible-hidden\\\"></div>\\n</div>\\n\";\n return buffer;\n });\n function countdownTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n\n var precision = 1000;\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n showBeforeStart: true,\n displayWarning: true\n };\n /**\n * time to display warnings\n */\n\n var warningTimeout = {\n info: 2000,\n success: 2000,\n warning: 4000,\n danger: 4000,\n error: 8000\n };\n /**\n * Creates, initialize and render a countdown component.\n *\n * @param {jQueryElement|HTMLElement} $container - where to append the countdown\n * @param {Object} config\n * @param {String} config.id - the timer unique identifier\n * @param {String} config.label - the text to display above the timer\n * @param {String} config.type - the type of countdown (to categorize them)\n * @param {String} [config.scope] - scope of a timer\n * @param {Number} [config.unansweredQuestions] - number of unanswered options\n * @param {Number} [config.remainingTime] - the current value of the countdown, in milliseconds\n * @param {Boolean} [config.showBeforeStart = true] - do we show the time before starting\n * @param {Boolean} [config.displayWarning = true] - do we display the warnings or trigger only the event\n * @param {Object[]} [config.warnings] - define warnings thresholds\n * @param {Number} [config.warnings.threshold] - when the warning is shown, in milliseconds\n * @param {String} [config.warnings.message] - the warning message\n * @param {String} [config.warnings.level = warn] - the feedback level in (success, info, warn, danger and error)\n * @returns {countdown} the component, initialized and rendered\n */\n\n function countdownFactory($container, config) {\n var $time;\n var $timeScreenreader;\n /**\n * @typedef {Object} countdown\n */\n\n var countdown = component({\n /**\n * Update the countdown\n * @param {Number} remainingTime - the time remaining (milliseconds)\n * @param {Number} unansweredQuestions\n * @returns {countdown} chains\n * @fires countdown#change - when the value has changed\n * @fires countdown#warn - when a threshold is reached\n */\n update: function udpate(remainingTime, unansweredQuestions) {\n var self = this;\n var encodedTime;\n var warningId;\n var warningMessage;\n\n if (!this.is('completed')) {\n if (remainingTime <= 0) {\n this.remainingTime = 0;\n } else {\n this.remainingTime = parseInt(remainingTime, 10);\n }\n\n if (this.is('rendered') && this.is('running')) {\n encodedTime = timeEncoder.encode(this.remainingTime / precision);\n\n if (encodedTime !== this.encodedTime) {\n this.encodedTime = encodedTime;\n var time = moment.duration(this.remainingTime / precision, 'seconds');\n var hours = time.get('hours');\n var minutes = time.get('minutes');\n var seconds = time.get('seconds');\n $time.text(this.encodedTime);\n $timeScreenreader.text(getTimerMessage(hours, minutes, seconds, unansweredQuestions, this.config.scope));\n }\n\n if (this.warnings) {\n //the warnings have already be sorted\n warningId = _.findLastKey(this.warnings, function (warning) {\n return warning && !warning.shown && warning.threshold > 0 && warning.threshold >= self.remainingTime;\n });\n\n if (warningId) {\n this.warnings[warningId].shown = true;\n\n if (_.isFunction(this.warnings[warningId].message)) {\n warningMessage = this.warnings[warningId].message(this.remainingTime);\n } else {\n warningMessage = this.warnings[warningId].message;\n }\n /**\n * Warn user the timer reach a threshold\n * @event countdown#warn\n * @param {String} message\n * @param {String} level\n */\n\n\n this.trigger('warn', warningMessage, this.warnings[warningId].level);\n }\n }\n\n if (this.warningsForScreenreader) {\n //the warnings have already be sorted\n var screenreaderWarningId = _.findLastKey(this.warningsForScreenreader, function (warning) {\n return warning && !warning.shown && warning.threshold > 0 && warning.threshold >= self.remainingTime;\n });\n\n if (screenreaderWarningId) {\n this.warningsForScreenreader[screenreaderWarningId].shown = true;\n /**\n * Warn user the timer reach a threshold\n * @event countdown#warnscreenreader\n * @param {Function} message\n * @param {Number} remainingTime\n * @param {String} scope\n */\n\n this.trigger('warnscreenreader', this.warningsForScreenreader[screenreaderWarningId].message, self.remainingTime, this.warningsForScreenreader[screenreaderWarningId].scope);\n }\n }\n /**\n * The current value has changed\n * @event countdown#change\n * @param {Number} remainingTime - the updated time\n * @param {String} displayed - the displayed value\n */\n\n\n this.trigger('change', this.remainingTime, encodedTime);\n }\n\n if (this.remainingTime === 0) {\n this.complete();\n }\n }\n\n return this;\n },\n\n /**\n * Starts the countdown\n * @returns {countdown} chains\n * @fires countdown#start\n */\n start: function start() {\n if (this.is('rendered') && !this.is('running') && !this.is('completed')) {\n this.enable();\n this.setState('running', true);\n /**\n * The count has started\n * @event countdown#start\n */\n\n this.trigger('start');\n }\n\n return this;\n },\n\n /**\n * Stops the countdown (can be restarted then)\n * @returns {countdown} chains\n * @fires countdown#stop\n */\n stop: function stop() {\n if (this.is('rendered') && this.is('running')) {\n this.setState('running', false);\n /**\n * The count is stopped\n * @event countdown#stop\n */\n\n this.trigger('stop');\n }\n\n return this;\n },\n\n /**\n * Calls to complete the countdown,\n * it can't be resumed after.\n *\n * @returns {countdown} chains\n *\n * @fires countdown#complete\n * @fires countdown#end\n */\n complete: function complete() {\n if (this.is('rendered') && this.is('running') && !this.is('completed')) {\n this.stop();\n this.setState('completed', true);\n /**\n * The countdown has ended, is completed\n * @event countdown#complete\n * @event countdown#end (alias)\n */\n\n this.trigger('complete end');\n }\n\n return this;\n }\n }, defaults).on('init', function () {\n this.remainingTime = this.config.remainingTime;\n this.unansweredQuestions = this.config.unansweredQuestions;\n\n if (this.config.warnings) {\n this.warnings = _.sortBy(this.config.warnings, 'threshold');\n }\n\n if (this.config.warningsForScreenreader) {\n this.warningsForScreenreader = _.sortBy(this.config.warningsForScreenreader, 'threshold');\n } //auto renders\n\n\n this.render($container);\n }).on('render', function () {\n $time = $$1('.time', this.getElement());\n $timeScreenreader = $$1('.time--screenreader', this.getElement());\n\n if (this.config.showBeforeStart === true) {\n $time.text(timeEncoder.encode(this.remainingTime / precision));\n }\n }).on('warn', function (message, level) {\n var countdownTooltip;\n level = level || 'warning';\n\n if (this.is('rendered') && this.is('running') && _.isString(message) && !_.isEmpty(message)) {\n $time.removeClass('txt-success txt-info txt-warning txt-danger txt-error').addClass(\"txt-\".concat(level));\n\n if (this.config.displayWarning === true) {\n countdownTooltip = tooltip.create(this.getElement(), message, {\n trigger: 'manual',\n theme: level,\n placement: 'bottom'\n });\n countdownTooltip.show();\n setTimeout(function () {\n countdownTooltip.hide();\n countdownTooltip.dispose();\n }, warningTimeout[level] || 2000);\n }\n }\n });\n countdown.setTemplate(countdownTpl);\n\n _.defer(function () {\n countdown.init(config);\n });\n\n return countdown;\n }\n\n return countdownFactory;\n\n});\n\n","\ndefine('css!taoQtiTest/runner/plugins/controls/timer/component/css/timerbox',[],function(){});\n","define('taoQtiTest/runner/plugins/controls/timer/component/timerbox',['jquery', 'lodash', 'i18n', 'ui/component', 'ui/hider', 'taoQtiTest/runner/plugins/controls/timer/component/countdown', 'handlebars', 'css!taoQtiTest/runner/plugins/controls/timer/component/css/timerbox.css'], function ($$1, _, __, component, hider, countdownFactory, Handlebars, timerbox_css) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n countdownFactory = countdownFactory && Object.prototype.hasOwnProperty.call(countdownFactory, 'default') ? countdownFactory['default'] : countdownFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this, functionType=\"function\";\n\n function program1(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"\\n <a href=\\\"#\\\" class=\\\"timer-toggler hidden\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Hide timers\", options) : helperMissing.call(depth0, \"__\", \"Hide timers\", options)))\n + \"\\\" role=\\\"button\\\"><span class=\\\"icon-clock\\\"></span></a>\\n \";\n return buffer;\n }\n\n buffer += \"<div class=\\\"timer-box\\\">\\n \";\n stack1 = helpers['if'].call(depth0, ((stack1 = (depth0 && depth0.zenMode)),stack1 == null || stack1 === false ? stack1 : stack1.enabled), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n <div class=\\\"timer-wrapper\\\" aria-hidden=\\\"\";\n if (helper = helpers.ariaHidden) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.ariaHidden); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function timerboxTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config values, see below.\n */\n\n var defaults = {\n zenMode: {\n enabled: true,\n startHidden: false\n }\n };\n /**\n * Creates and initialize the timerbox component.\n * Please not the component IS NOT rendered.\n * You'll have to render it by yourself.\n *\n * @param {Object} config\n * @param {Boolean} [config.zenMode = true] - zen mode adds a button to hide the countdowns to stay zen\n * @param {Object[]} [config.timers] - the timers to start with\n * @param {Boolean} [config.displayWarning = true] - let the countdown display their warning (contextual)\n * @returns {timerbox} the component, initialized and rendered\n */\n\n function timerboxFactory(config) {\n var $zenModeToggler;\n var $countdownContainer;\n /**\n * @typedef {Object} timerbox\n */\n\n var timerbox = component({\n /***\n * Update the displayed timers.\n * Compare the current and the given, it will add,remove and update timers.\n *\n * @param {Object[]} timers - the new timers\n * @returns {Promise<Array>} resolves when all timers are up to date (with the result of all the update operations)\n *\n * @fires timerbox#update the update is done\n */\n update: function update(timers) {\n var self = this;\n var updating = []; //remove timers\n\n var timerIdsToRemove = _.difference(_.keys(this.timers), _.keys(timers));\n\n if (timerIdsToRemove.length) {\n _.forEach(timerIdsToRemove, function (timerId) {\n updating.push(self.removeTimer(timerId));\n });\n } //add/update\n\n\n _.forEach(timers, function (timer, id) {\n if (typeof self.timers[id] === 'undefined') {\n updating.push(self.addTimer(id, timer));\n } else {\n updating.push(self.updateTimer(id, timer));\n }\n });\n\n return Promise.all(updating).then(function (results) {\n //show the toggler only if there's timers\n if (_.size(self.timers) > 0) {\n hider.show($zenModeToggler);\n } else {\n hider.hide($zenModeToggler);\n }\n /**\n * The timer box update is done\n * @event timerbox#update\n * @param {Object[]} timers - ALL update results (includes removals)\n */\n\n\n self.trigger('update', results);\n return results;\n });\n },\n\n /**\n * Get the current timers\n * @return {Object[]} the timers\n */\n getTimers: function getTimers() {\n return this.timers;\n },\n\n /**\n * Adds a new timer to the box\n * @param {String} id - the timer unique identifier\n * @param {Object} timer - the new timer\n * @return {Promise<Object|Boolean>} resolves with the timer once added or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timeradd a new timer is in the box\n * @fires timerbox#timerstart a timer get started\n * @fires timerbox#timerstop a timer get stopped\n * @fires timerbox#timerend a timer get completed\n * @fires timerbox#change spread from the countdown\n */\n addTimer: function addTimer(id, timer) {\n var self = this;\n\n if (this.is('rendered') && typeof this.timers[id] === 'undefined') {\n return new Promise(function (resolve) {\n var countdown = countdownFactory($countdownContainer, _.defaults(timer, {\n displayWarning: self.config.displayWarning\n })).on('render', function () {\n //keep track of the new timer\n //and the countdown component\n self.timers[id] = _.clone(timer);\n self.timers[id].countdown = this;\n /**\n * The timers have changed (add, update, remove)\n * @event timerbox#timerchange\n * @param {String} action - add, update, remove\n * @param {Object} timer\n */\n\n self.trigger('timerchange', 'add', self.timers[id]);\n /**\n * A new timer is added\n * @event timerbox#timeradd\n * @param {Object} timer\n */\n\n self.trigger('timeradd', self.timers[id]);\n resolve(self.timers[id]);\n }).on('start', function () {\n /**\n * A timer starts\n * @event timerbox#timerstart\n * @param {Object} timer\n */\n self.trigger('timerstart', self.timers[id]);\n }).on('stop', function () {\n /**\n * A timer stops\n * @event timerbox#timerstop\n * @param {Object} timer\n */\n self.trigger('timerstop', self.timers[id]);\n }).on('end', function () {\n /**\n * A timer ends\n * @event timerbox#timerend\n * @param {Object} timer\n */\n self.trigger('timerend', self.timers[id]);\n }).on('change', function (value) {\n if (self.timers[id]) {\n self.trigger('timertick', this.remainingTime, self.timers[id].scope, self.timers[id].unansweredQuestions); // propogate current timer data\n //keep the current timer data in sync\n\n self.timers[id].remainingTime = value;\n }\n });\n countdown.spread(self, ['error', 'change', 'warn', 'warnscreenreader']);\n });\n }\n\n return Promise.resolve(false);\n },\n\n /**\n * Updates an existing timer\n * @param {String} id - the timer unique identifier\n * @param {Object} timer - the new timer\n * @return {Promise<Object|Boolean>} resolves with the timer once updated or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timerupdate an existing timer is updated\n */\n updateTimer: function updateTimer(id, timer) {\n if (this.is('rendered') && typeof this.timers[id] !== 'undefined') {\n this.timers[id].remainingTime = timer.remainingTime;\n this.timers[id].unansweredQuestions = timer.unansweredQuestions;\n this.timers[id].extraTime = timer.extraTime;\n\n if (_.isNumber(timer.remainingWithoutExtraTime)) {\n this.timers[id].remainingWithoutExtraTime = timer.remainingWithoutExtraTime;\n }\n\n if (this.timers[id].countdown) {\n this.timers[id].countdown.update(timer.remainingTime, timer.unansweredQuestions);\n }\n\n this.trigger('timerchange', 'update', this.timers[id]);\n /**\n * A timer has been updated with external values\n * @event timerbox#timerupdate\n * @param {Object} timer\n */\n\n this.trigger('timerupdate', this.timers[id]);\n return Promise.resolve(this.timers[id]);\n }\n\n return Promise.resolve(false);\n },\n\n /**\n * Remove a timer\n * @param {String} id - the timer unique identifier\n * @return {Promise<Object|Boolean>} resolves with the timer once removed or false\n *\n * @fires timerbox#timerchange something changes in a timer\n * @fires timerbox#timerremove a timer is removed\n */\n removeTimer: function removeTimer(id) {\n var self = this;\n\n if (this.is('rendered') && typeof this.timers[id] !== 'undefined') {\n return new Promise(function (resolve) {\n /**\n * Artifact function, remove the timer from the component index\n */\n var deindex = function deindex() {\n //keep a clone, without the component, for the event\n var removed = _.omit(self.timers[id], 'countdown'); //remove the timer from the list\n\n\n self.timers = _.omit(self.timers, id);\n self.trigger('timerchange', 'remove', removed);\n /**\n * A timer has been updated with external values\n * @event timerbox#timerupdate\n * @param {Object} timer\n */\n\n self.trigger('timerremove', removed);\n resolve(removed);\n };\n\n if (self.timers[id].countdown) {\n self.timers[id].countdown.on('destroy', deindex).destroy();\n } else {\n deindex();\n }\n });\n }\n\n return Promise.resolve();\n },\n\n /**\n * Starts all the timers contained in the box\n * @returns {timerbox} chains\n */\n start: function start() {\n _.forEach(this.timers, function (timer) {\n if (timer.countdown) {\n timer.countdown.start();\n }\n });\n\n return this;\n },\n\n /**\n * Stops all the timers contained in the box\n * @returns {timerbox} chains\n */\n stop: function stop() {\n _.forEach(this.timers, function (timer) {\n if (timer.countdown) {\n timer.countdown.stop();\n }\n });\n\n return this;\n },\n\n /**\n * Show/hide the timers aka \"zen mode\"\n * @returns {timerbox} chains\n * @fires timerbox#zenchange\n */\n toggleZenMode: function toggleZenMode() {\n if (this.is('rendered') && this.config.zenMode.enabled) {\n if (this.is('zen')) {\n this.setState('zen', false);\n $zenModeToggler.attr('title', __('Hide timers'));\n } else {\n this.setState('zen', true);\n $zenModeToggler.attr('title', __('Show timers'));\n }\n /**\n * @event timerbox#zenchange\n * @param {Boolean} isZen\n */\n\n\n this.trigger('zenchange', this.is('zen'));\n }\n\n return this;\n }\n }, defaults).on('init', function () {\n //index the current timers\n this.timers = {};\n }).on('render', function () {\n var self = this;\n var $element = this.getElement(); //where we append the countdowns components\n\n $countdownContainer = $$1('.timer-wrapper', $element); //set up the zen mode toggler\n\n if (this.config.zenMode.enabled) {\n $zenModeToggler = $$1('.timer-toggler', $element);\n self.setState('zen', !!self.config.zenMode.startHidden);\n $zenModeToggler.on('click', function (e) {\n e.preventDefault();\n self.toggleZenMode();\n });\n } //if timers are provided with the config, we perform the 1st update\n\n\n if (this.config.timers) {\n this.update(this.config.timers);\n }\n });\n timerbox.setTemplate(timerboxTpl);\n\n _.defer(function () {\n timerbox.init(config);\n });\n\n return timerbox;\n }\n\n return timerboxFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/enforcedStay',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timer strategy that enforce the test taker to stay in\n * front of the item until the timer completes,\n * by disabling the navigation elements.\n *\n * Applies on item scope, min timers if the testPart is linear\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function enforcedStayStrategy(testRunner, timer) {\n var testPart = testRunner.getCurrentPart();\n\n if (timer && timer.type === 'min' && timer.scope === 'item' && testPart && testPart.isLinear) {\n return {\n name: 'enforcedStay',\n\n /**\n * setUp entry point : disable the navigation\n */\n setUp: function setUp() {\n testRunner.on('enablenav.enforcestay', function () {\n testRunner.trigger('disablenav');\n });\n testRunner.trigger('disablenav');\n },\n\n /**\n * complete entry point : enables back the navigation\n */\n complete: function complete() {\n this.tearDown();\n testRunner.trigger('enablenav');\n },\n\n /**\n * tearDown entry point : remove the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('enablenav.enforcestay');\n }\n };\n }\n\n return false;\n }\n\n return enforcedStayStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/extraTime',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n var precision = 1000;\n var lastConsumedExtraTime = 0;\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n\n function extraTimeStrategy(testRunner, timer) {\n /**\n * Apply the extra time to the timer 'once' and\n * listen for test movment to add the consumed extrat time as parameter\n * Since the extra time is global, if multiple timers use the extra time part,\n * we take the biggest consumed extra time.\n */\n var applyExtraTime = function applyExtraTime() {\n if (_.isNumber(timer.extraTime) && timer.extraTime > 0 && !timer.extraTimeSetup) {\n timer.extraTimeSetup = true;\n testRunner.before('move.extra skip.extra exit.extra timeout.extra', function () {\n var consumedExtraTime = 0;\n var testContext = testRunner.getTestContext();\n\n if (timer.remainingTime < timer.extraTime) {\n consumedExtraTime = Math.max(timer.extraTime - timer.remainingTime, 0) / precision;\n lastConsumedExtraTime = Math.max(consumedExtraTime, lastConsumedExtraTime, testContext.extraTime.consumed);\n testRunner.getProxy().addCallActionParams({\n consumedExtraTime: lastConsumedExtraTime\n });\n }\n }).after('move.extra skip.extra exit.extra timeout.extra', function () {\n lastConsumedExtraTime = 0;\n });\n }\n };\n\n if (timer && timer.type === 'max') {\n return {\n name: 'extraTime',\n\n /**\n * setUp entry point : adds the extratime to the timer\n */\n setUp: function setUp() {\n applyExtraTime();\n },\n\n /**\n * setUp entry point : adds the extratime to the timer\n */\n start: function start() {\n //apply at start also in case the extra time is added in between\n applyExtraTime();\n },\n\n /**\n * tearDown entry point : remove the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('move.extra skip.extra exit.extra timeout.extra');\n }\n };\n }\n\n return false;\n }\n\n return extraTimeStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/guidedNavigation',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timer strategy that enforce the test taker to stay in\n * front of the item until the timer completes,\n * by hidding the navigation elements.\n * Once the timer completes, the test moves to the next item.\n *\n * Applies on item scope, locked timers only, linear test part and\n * the test configuration \"guidedNavigation\"\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function guidedNavigationStrategy(testRunner, timer) {\n var testRunnerOptions = testRunner.getOptions();\n var testPart = testRunner.getCurrentPart();\n\n if (timer && timer.type === 'locked' && timer.scope === 'item' && testRunnerOptions.guidedNavigation === true && testPart && testPart.isLinear) {\n return {\n name: 'guidedNavigation',\n\n /**\n * setUp entry point : hides the navigation\n */\n setUp: function setUp() {\n testRunner.trigger('hidenav');\n },\n\n /**\n * complete entry point : enables back the navigation\n */\n complete: function complete() {\n testRunner.trigger('disableitem disablenav shownav');\n setTimeout(function () {\n testRunner.trigger('move', 'next', 'item');\n }, 500);\n }\n };\n }\n\n return false;\n }\n\n return guidedNavigationStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/timeout',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * Timeout strategy, the given scope is timedout when the timer completes.\n *\n * Applies on all max timers\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n function timeoutStrategy(testRunner, timer) {\n if (timer && timer.type === 'max') {\n return {\n name: 'timeout',\n\n /**\n * complete entry point : timeout\n */\n complete: function complete() {\n if (timer.qtiClassName && timer.source) {\n return testRunner.timeout(timer.qtiClassName, timer.source, timer);\n }\n }\n };\n }\n\n return false;\n }\n\n return timeoutStrategy;\n\n});\n\n","define('taoQtiTest/runner/helpers/currentItem',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * List of QTI model cardinalities\n * @type {Object}\n */\n\n var responseCardinalities = {\n single: 'base',\n multiple: 'list',\n ordered: 'list',\n record: 'record'\n };\n /**\n * List of QTI interaction minConstraint properties\n * @type {Object}\n */\n\n var interactionMinConstraintProperties = {\n matchInteraction: 'minAssociations',\n choiceInteraction: 'minChoices',\n orderInteraction: 'minChoices',\n associateInteraction: 'minAssociations',\n hottextInteraction: 'minChoices',\n hotspotInteraction: 'minChoices',\n graphicOrderInteraction: 'minChoices',\n graphicAssociateInteraction: 'minAssociations',\n selectPointInteraction: 'minChoices'\n };\n /**\n * @typedef {currentItemHelper}\n */\n\n var currentItemHelper = {\n /**\n * Gets the responses declarations of the current item.\n * @param {Object} runner - testRunner instance\n * @returns {Object}\n */\n getDeclarations: function getDeclarations(runner) {\n var itemRunner = runner.itemRunner;\n return itemRunner._item && itemRunner._item.responses;\n },\n\n /**\n * Gets a response declaration by the identifier of the response\n * @param {Object} runner - testRunner instance\n * @param {String} identifier - The identifier of the response\n * @returns {Object|null}\n */\n getResponseDeclaration: function getResponseDeclaration(runner, identifier) {\n var found = null;\n\n _.forEach(currentItemHelper.getDeclarations(runner), function (declaration) {\n var attributes = declaration.attributes || {};\n\n if (attributes.identifier === identifier) {\n found = declaration;\n return false;\n }\n });\n\n return found;\n },\n\n /**\n * Convert a value to a response object\n * @param {Array|String} value\n * @param {String} baseType\n * @param {String} cardinality\n * @returns {Object}\n */\n toResponse: function toResponse(value, baseType, cardinality) {\n var mappedCardinality = responseCardinalities[cardinality];\n var response = {};\n\n if (_.isString(value)) {\n value = [value];\n }\n\n var transform = function transform(v) {\n return v;\n };\n\n if (baseType === 'boolean') {\n transform = function transform(v) {\n return v === true || v === 'true';\n };\n } else if (baseType === 'directedPair' || baseType === 'pair') {\n transform = function transform(v) {\n if (_.isString(v)) {\n return v.split(' ');\n }\n\n return v;\n };\n }\n\n value = _.map(value || [], transform);\n\n if (mappedCardinality) {\n if (mappedCardinality === 'base') {\n if (value.length === 0) {\n //return empty response:\n response.base = null;\n } else {\n response.base = {};\n response.base[baseType] = value[0];\n }\n } else {\n response[mappedCardinality] = {};\n response[mappedCardinality][baseType] = value;\n }\n }\n\n return response;\n },\n\n /**\n * Checks if the provided value can be considered as null\n * @param {Object} value\n * @param {String} baseType\n * @param {String} cardinality\n * @returns {boolean}\n */\n isQtiValueNull: function isQtiValueNull(value, baseType, cardinality) {\n var mappedCardinality = responseCardinalities[cardinality];\n\n if (_.isObject(value) && value[mappedCardinality] === null) {\n value = null;\n }\n\n if (_.isObject(value) && value[mappedCardinality] && 'undefined' !== typeof value[mappedCardinality][baseType]) {\n value = value[mappedCardinality][baseType];\n }\n\n return null === value || 'string' === baseType && _.isEmpty(value) || cardinality !== 'single' && _.isEmpty(value);\n },\n\n /**\n * Tells if an item question has been answered or not\n * @param {Object} response\n * @param {String} baseType\n * @param {String} cardinality\n * @param {Object} [defaultValue]\n * @param {Object} constraintValue\n * @returns {*}\n */\n isQuestionAnswered: function isQuestionAnswered(response, baseType, cardinality, defaultValue, constraintValue) {\n var answered, currentCardinality, responses;\n var fullyAnswered = true;\n defaultValue = defaultValue || null;\n constraintValue = constraintValue || 0;\n\n if (currentItemHelper.isQtiValueNull(response, baseType, cardinality)) {\n answered = false;\n } else {\n answered = !_.isEqual(response, currentItemHelper.toResponse(defaultValue, baseType, cardinality));\n\n if (constraintValue !== 0) {\n currentCardinality = responseCardinalities[cardinality];\n responses = response[currentCardinality][baseType] || [];\n fullyAnswered = responses && responses.length >= constraintValue;\n }\n\n answered = answered && fullyAnswered;\n }\n\n return answered;\n },\n guessInteractionConstraintValues: function guessInteractionConstraintValues(runner) {\n var itemRunner = runner.itemRunner;\n var itemBody = itemRunner._item && itemRunner._item.bdy || {};\n var interactions = itemBody.elements || {};\n var constraintValues = {};\n\n _.forEach(interactions, function (interaction) {\n var attributes = interaction.attributes || {};\n var qtiClass = interaction.__proto__.qtiClass;\n var constraintProperty;\n\n if (Object.prototype.hasOwnProperty.call(interactionMinConstraintProperties, qtiClass)) {\n constraintProperty = interactionMinConstraintProperties[qtiClass];\n constraintValues[attributes.responseIdentifier] = attributes[constraintProperty];\n }\n });\n\n return constraintValues;\n },\n\n /**\n * Tells is the current item has been answered or not\n * The item is considered answered when at least one response has been set to not empty {base : null}\n * @param {Object} runner - testRunner instance\n * @param {Boolean} [partially=true] - if false all questions must have been answered\n * @returns {Boolean}\n */\n isAnswered: function isAnswered(runner, partially) {\n var itemRunner = runner.itemRunner;\n var responses = itemRunner && itemRunner.getResponses();\n var count = 0;\n var empty = 0;\n var declarations, constraintValues;\n\n if (itemRunner) {\n declarations = currentItemHelper.getDeclarations(runner);\n constraintValues = currentItemHelper.guessInteractionConstraintValues(runner);\n\n _.forEach(declarations, function (declaration) {\n var attributes = declaration.attributes || {};\n var response = responses[attributes.identifier];\n var baseType = attributes.baseType;\n var cardinality = attributes.cardinality;\n count++;\n\n if (!currentItemHelper.isQuestionAnswered(response, baseType, cardinality, declaration.defaultValue, constraintValues[attributes.identifier])) {\n empty++;\n }\n });\n }\n\n if (partially === false) {\n return count > 0 && empty === 0;\n }\n\n return count > 0 && empty < count;\n },\n\n /**\n * Gets list of shared stimuli hrefs in the current item\n *\n * @param {Object} runner - testRunner instance\n * @returns {Array}\n */\n getStimuliHrefs: function getStimuliHrefs(runner) {\n var itemRunner = runner.itemRunner;\n var itemBody = itemRunner._item && itemRunner._item.bdy || {};\n var interactions = itemBody.elements || {};\n return _(interactions).values().filter(function (element) {\n return element.qtiClass === 'include';\n }).pluck('attributes').pluck('href').value();\n },\n\n /**\n * Find the list of text stimulus ids in the current item\n * Depends on the DOM already being loaded\n * @param {Object} runner - testRunner instance\n * @returns {Array}\n */\n getTextStimuliHrefs: function getTextStimuliHrefs(runner) {\n var stimuli = this.getStimuliHrefs(runner);\n var textStimuli;\n\n if (stimuli.length > 0) {\n // Filter the ones containing text:\n textStimuli = stimuli.filter(function (stimulusHref) {\n var domNode = document.querySelector(\".qti-include[data-href=\\\"\".concat(stimulusHref, \"\\\"]\"));\n return _(domNode.childNodes).some(function (child) {\n return child.nodeType === child.TEXT_NODE;\n });\n });\n return textStimuli;\n }\n\n return [];\n }\n };\n\n return currentItemHelper;\n\n});\n\n","define('taoQtiTest/runner/helpers/stats',['lodash', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/currentItem'], function (_, mapHelper, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n var stats = {\n /**\n * Return scope stats that takes into account any test taker interaction made since the item has been loaded\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox. Default false\n * @returns {Object} the stats\n */\n getInstantStats: function getInstantStats(scope, runner, sync) {\n var map = runner.getTestMap();\n var context = runner.getTestContext();\n var item = runner.getCurrentItem();\n var testPart = runner.getCurrentPart();\n\n var stats = _.clone(mapHelper.getScopeStats(map, context.itemPosition, scope));\n\n if (!item.informational) {\n var isItemCurrentlyAnswered = currentItemHelper.isAnswered(runner);\n\n if (!isItemCurrentlyAnswered && item.answered) {\n stats.answered--;\n } else if ((isItemCurrentlyAnswered || sync) && !item.answered) {\n stats.answered++;\n } else if (sync && !isItemCurrentlyAnswered && item.answered && testPart.isLinear) {\n stats.answered++;\n }\n }\n\n return stats;\n }\n };\n\n return stats;\n\n});\n\n","define('taoQtiTest/runner/helpers/messages',['i18n', 'taoQtiTest/runner/helpers/stats', 'handlebars'], function (__, statsHelper, Handlebars) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<b>\";\n if (helper = helpers.header) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.header); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</b><br><br>\";\n return buffer;\n }\n\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.header), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { return stack1; }\n else { return ''; }\n });\n function messageHeaderTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2021 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Completes an exit message\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {String} message - custom message that will be appended to the unanswered stats count\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox\n * @param {String|undefined} submitButtonLabel - point the user to the submit button\n * @returns {String} Returns the message text\n */\n\n function getExitMessage(scope, runner) {\n var message = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var sync = arguments.length > 3 ? arguments[3] : undefined;\n var submitButtonLabel = arguments.length > 4 ? arguments[4] : undefined;\n var itemsCountMessage = '';\n var testRunnerOptions = runner.getOptions();\n var messageEnabled = testRunnerOptions.enableUnansweredItemsWarning;\n\n if (messageEnabled) {\n itemsCountMessage = getUnansweredItemsWarning(scope, runner, sync).trim();\n\n if (itemsCountMessage) {\n itemsCountMessage += '.';\n }\n }\n\n return \"\".concat(getHeader(scope)).concat(itemsCountMessage, \" \").concat(getActionMessage(scope, submitButtonLabel)).concat(message).trim();\n }\n /**\n * Build message if not all items have answers\n * @param {String} scope - scope to consider for calculating the stats\n * @returns {String} Returns the message text\n */\n\n\n function getHeader(scope) {\n var header = '';\n\n if (scope === 'section' || scope === 'testSection') {\n header = __('You are about to leave this section.');\n } else if (scope === 'test' || scope === 'testWithoutInaccessibleItems') {\n header = __('You are about to submit the test.');\n } else if (scope === 'part') {\n header = __('You are about to submit this test part.');\n }\n\n return messageHeaderTpl({\n header: header.trim()\n });\n }\n /**\n * Generates the message to help users perform the action\n * @param {String} scope - scope to consider for calculating the stats\n * @param {String} [submitButtonLabel] - Pointed user perform click on given button\n * @returns {String} Returns the message text\n */\n\n\n function getActionMessage(scope) {\n var submitButtonLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : __('OK');\n var msg;\n\n switch (scope) {\n case 'section':\n case 'testSection':\n case 'part':\n msg = __('Click \"%s\" to continue', submitButtonLabel).trim();\n\n if (msg) {\n msg += '.';\n }\n\n return msg;\n\n case 'test':\n case 'testWithoutInaccessibleItems':\n return \"\".concat(__('You will not be able to access this test once submitted. Click \"%s\" to continue and submit the test.', submitButtonLabel));\n }\n\n return '';\n }\n /**\n * Build message for the flagged items if any.\n * @param {Object} stats - The stats for the current context\n * @param {String} [message] - The existing message to complete\n * @returns {string|*}\n */\n\n\n function getFlaggedItemsWarning(stats) {\n var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var flaggedCount = stats && stats.flagged;\n\n if (!flaggedCount) {\n return message;\n }\n\n if (message) {\n return \"\".concat(message, \" \").concat(__('and you flagged %s item(s) that you can review now', flaggedCount.toString()));\n }\n\n return __('You flagged %s item(s) that you can review now', flaggedCount.toString());\n }\n /**\n * Build message if not all items have answers\n * @param {String} scope - scope to consider for calculating the stats\n * @param {Object} runner - testRunner instance\n * @param {Boolean} sync - flag for sync the unanswered stats in exit message and the unanswered stats in the toolbox. Default false\n * @returns {String} Returns the message text\n */\n\n\n function getUnansweredItemsWarning(scope, runner, sync) {\n var stats = statsHelper.getInstantStats(scope, runner, sync);\n var unansweredCount = stats && stats.questions - stats.answered;\n var flaggedCount = stats && stats.flagged;\n var itemsCountMessage = '';\n\n if (scope === 'section' || scope === 'testSection') {\n itemsCountMessage = __('You answered %s of %s question(s) for this section of the test', stats.answered.toString(), stats.questions.toString());\n\n if (flaggedCount) {\n itemsCountMessage += \", \".concat(__('and flagged %s of them', flaggedCount.toString()));\n }\n } else if (scope === 'test' || scope === 'testWithoutInaccessibleItems') {\n if (unansweredCount > 1) {\n itemsCountMessage = __('There are %s unanswered questions', unansweredCount.toString());\n } else if (unansweredCount === 1) {\n itemsCountMessage = __('There is %s unanswered question', unansweredCount.toString());\n }\n\n if (flaggedCount) {\n itemsCountMessage = getFlaggedItemsWarning(stats, itemsCountMessage);\n }\n } else if (scope === 'part') {\n if (unansweredCount > 1) {\n itemsCountMessage = __('There are %s unanswered questions in this part of the test', unansweredCount.toString());\n } else if (unansweredCount === 1) {\n itemsCountMessage = __('There is %s unanswered question in this part of the test', unansweredCount.toString());\n }\n\n if (flaggedCount) {\n itemsCountMessage = getFlaggedItemsWarning(stats, itemsCountMessage);\n }\n }\n\n itemsCountMessage = itemsCountMessage.trim();\n return itemsCountMessage;\n }\n\n var messages = {\n getExitMessage: getExitMessage\n };\n\n return messages;\n\n});\n\n","define('taoQtiTest/runner/config/states',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * The possible states\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n var states = {\n //the test session states\n testSession: Object.freeze({\n initial: 0,\n interacting: 1,\n modalFeedback: 2,\n suspended: 3,\n closed: 4\n }),\n //the item session states\n itemSession: Object.freeze({\n initial: 0,\n interacting: 1,\n modalFeedback: 2,\n suspended: 3,\n closed: 4,\n solution: 5,\n notSelected: 255\n })\n };\n\n return states;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/warnSectionLeaving',['lodash', 'i18n', 'taoQtiTest/runner/helpers/messages', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/config/states', 'taoQtiTest/runner/helpers/map'], function (_, __, messages, navigationHelper, states, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n states = states && Object.prototype.hasOwnProperty.call(states, 'default') ? states['default'] : states;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The message to display when exiting\n */\n\n var exitMessage = __('Once you close this section, you cannot return to it or change your answers.');\n /**\n * Creates the strategy if it applies to the given timer\n * @param {runner} testRunner\n * @param {Object} timer\n * @returns {strategy|Boolean} the strategy if applies or false\n */\n\n\n function warnSectionLeavingStrategy(testRunner, timer) {\n /**\n * Check if the movment leads to leaving an active timed section\n * @param {String} direction - the move direction (next, previous or jump)\n * @param {String} scope - the move scope (item, section, testPart)\n * @param {Number} [position] - the position in case of jump\n * @returns {Boolean}\n */\n var leaveTimedSection = function leaveTimedSection(direction, scope, position) {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n\n if (!context.isTimeout && context.itemSessionState !== states.itemSession.closed && context.sectionId === timer.source) {\n return navigationHelper.isLeavingSection(context, map, direction, scope, position);\n }\n\n return false;\n };\n\n if (timer && timer.scope === 'section' && timer.type === 'max') {\n return {\n name: 'warnSectionLeaving',\n\n /**\n * setUp entry point : blocks the move to display a message if needed\n */\n setUp: function setUp() {\n testRunner.off('move.warntimedsection skip.warntimedsection').before('move.warntimedsection skip.warntimedsection', function (e, type, scope, position) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testRunnerOptions = testRunner.getOptions();\n var timerConfig = testRunnerOptions.timer || {};\n var itemIdentifier = testContext.itemIdentifier;\n var isLast = navigationHelper.isLast(testMap, itemIdentifier);\n var endTestWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'endTestWarning', true);\n var noExitTimedSectionWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'noExitTimedSectionWarning', true);\n var movePromise = new Promise(function (resolve, reject) {\n // endTestWarning has already been displayed, so we don't repeat the warning\n if (isLast && endTestWarning) {\n resolve(); // display a message if we exit a timed section\n } else if (leaveTimedSection(type || 'next', scope, position) && !noExitTimedSectionWarning && !timerConfig.keepUpToTimeout) {\n var submitButtonLabel = __('Close this Section');\n\n testRunner.trigger('confirm.exittimed', messages.getExitMessage('section', testRunner, exitMessage, false, submitButtonLabel), resolve, reject, {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('Review my Answers')\n }\n }\n });\n } else {\n resolve();\n }\n });\n movePromise.catch(function cancelMove() {\n // Use `defer` to be sure the timer resume will occur after the move event is\n // finished to be handled. Otherwise, the duration plugin will be frozen and\n // the additional time will not be taken into account!\n _.defer(function () {\n testRunner.trigger('enableitem enablenav');\n });\n });\n return movePromise;\n });\n },\n\n /**\n * complete entry point : removes the listeners\n */\n complete: function complete() {\n return this.tearDown();\n },\n\n /**\n * tearDown entry point : removes the listeners\n */\n tearDown: function tearDown() {\n testRunner.off('move.warntimedsection skip.warntimedsection');\n }\n };\n }\n\n return false;\n }\n\n return warnSectionLeavingStrategy;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/strategy/strategyHandler',['lodash', 'taoQtiTest/runner/plugins/controls/timer/strategy/enforcedStay', 'taoQtiTest/runner/plugins/controls/timer/strategy/extraTime', 'taoQtiTest/runner/plugins/controls/timer/strategy/guidedNavigation', 'taoQtiTest/runner/plugins/controls/timer/strategy/timeout', 'taoQtiTest/runner/plugins/controls/timer/strategy/warnSectionLeaving'], function (_, extraTimeStrategy, enforcedStayStrategy, guidedNavigationStrategy, timeoutStrategy, warnSectionLeavingStrategy) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n extraTimeStrategy = extraTimeStrategy && Object.prototype.hasOwnProperty.call(extraTimeStrategy, 'default') ? extraTimeStrategy['default'] : extraTimeStrategy;\n enforcedStayStrategy = enforcedStayStrategy && Object.prototype.hasOwnProperty.call(enforcedStayStrategy, 'default') ? enforcedStayStrategy['default'] : enforcedStayStrategy;\n guidedNavigationStrategy = guidedNavigationStrategy && Object.prototype.hasOwnProperty.call(guidedNavigationStrategy, 'default') ? guidedNavigationStrategy['default'] : guidedNavigationStrategy;\n timeoutStrategy = timeoutStrategy && Object.prototype.hasOwnProperty.call(timeoutStrategy, 'default') ? timeoutStrategy['default'] : timeoutStrategy;\n warnSectionLeavingStrategy = warnSectionLeavingStrategy && Object.prototype.hasOwnProperty.call(warnSectionLeavingStrategy, 'default') ? warnSectionLeavingStrategy['default'] : warnSectionLeavingStrategy;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The list of available strategies\n * TODO this list could come from the configuration\n */\n\n var defaultAvailableStrategies = [extraTimeStrategy, enforcedStayStrategy, guidedNavigationStrategy, timeoutStrategy, warnSectionLeavingStrategy];\n /**\n * Get a strategyHandler object for a testRunner instance\n * @param {runner} testRunner - the test runner instance\n * @param {strategy[]} strategies - the list of available strategies, to override the defaults\n * @returns {strategyHandler} the handler\n */\n\n function getStrategyHandler(testRunner, strategies) {\n var strategyHandler;\n /**\n * To keep track of the active strategies, per timer\n */\n\n var actives = {};\n /**\n * Artifact function to apply an action to a list of strategy\n * @param {String} timerId - the id of the timer to run the actions against\n * @param {String} action -\n */\n\n var applyToStrategies = function applyToStrategies(timerId, action) {\n var api = _.keys(strategyHandler);\n\n if (_.isEmpty(timerId) || _.isEmpty(action) || !_.contains(api, action)) {\n throw new TypeError('Invalid timer id or unauthorized action');\n }\n\n if (!_.isArray(actives[timerId])) {\n return Promise.resolve();\n }\n\n return Promise.all(_.map(actives[timerId], function (strategy) {\n if (_.isFunction(strategy[action])) {\n return strategy[action]();\n }\n }));\n };\n\n var availableStrategies = strategies || defaultAvailableStrategies; //quick validation of the test runner\n\n if (!testRunner || !_.isFunction(testRunner.on) || !_.isFunction(testRunner.getTestContext)) {\n throw new TypeError('The strategy handler needs a valid test runner.');\n }\n /**\n * @typedef {Object} strategyHandler\n */\n\n\n strategyHandler = {\n /**\n * Try to set up strategies for the given timer\n * @param {Object} timer\n * @returns {Promise} resolves once the set up is done\n */\n setUp: function setUp(timer) {\n _.forEach(availableStrategies, function (availableStrategy) {\n var strategy = availableStrategy(testRunner, timer);\n\n if (strategy !== false) {\n actives[timer.id] = actives[timer.id] || [];\n actives[timer.id].push(strategy);\n }\n });\n\n return applyToStrategies(timer.id, 'setUp');\n },\n\n /**\n * Get the actives strategies for the given timer\n * @returns {strategy[]} the actives strategies\n */\n getActives: function getActives(timer) {\n if (timer && timer.id && _.isArray(actives[timer.id])) {\n return actives[timer.id];\n }\n\n return [];\n },\n\n /**\n * Call the timer's strategies \"start\"\n * @param {Object} timer\n * @returns {Promise}\n */\n start: function start(timer) {\n return applyToStrategies(timer.id, 'start');\n },\n\n /**\n * Call the timer's strategies \"stop\"\n * @param {Object} timer\n * @returns {Promise}\n */\n stop: function stop(timer) {\n return applyToStrategies(timer.id, 'stop');\n },\n\n /**\n * Call the timer's strategies \"complete\"\n * @param {Object} timer\n * @returns {Promise}\n */\n complete: function complete(timer) {\n return applyToStrategies(timer.id, 'complete');\n },\n\n /**\n * Call the timer's strategies \"tearDown\"\n * will also un-reference the strategies\n * @param {Object} timer\n * @returns {Promise}\n */\n tearDown: function tearDown(timer) {\n return applyToStrategies(timer.id, 'tearDown').then(function () {\n actives = _.omit(actives, timer.id);\n });\n }\n };\n return strategyHandler;\n }\n\n return getStrategyHandler;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/timers',['lodash', 'i18n', 'moment', 'core/format', 'core/logger'], function (_, __, moment, format, loggerFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n format = format && Object.prototype.hasOwnProperty.call(format, 'default') ? format['default'] : format;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2018 (original work) Open Assessment Technologies SA ;\n */\n var logger = loggerFactory('taoQtiTest/runner/plugins/controls/timer/timers');\n /**\n * We receive values in seconds, so we convert them to milliseconds\n */\n\n var precision = 1000;\n /**\n * The timer's scope\n */\n\n var scopes = ['item', 'section', 'testPart', 'test'];\n /**\n * Map qti class names to scopes\n */\n\n var scopeMapping = {\n assessmentTest: 'test',\n assessmentSection: 'section',\n assessmentItemRef: 'item'\n };\n /**\n * helps you get the scope from a scope or qti class name\n * @param {String} value - scope or qti class name\n * @returns {String?} the scope\n */\n\n var getScope = function getScope(value) {\n if (scopeMapping[value]) {\n return scopeMapping[value];\n }\n\n if (_.contains(scopes, value)) {\n return value;\n }\n\n return null;\n };\n /**\n * The text of warning messages\n * TODO add warning messages for other timers types\n */\n\n\n var warningMessages = {\n item: __('Warning – You have %s remaining to complete this item.'),\n section: __('Warning – You have %s remaining to complete this section.'),\n testPart: __('Warning – You have %s remaining to complete this test part.'),\n test: __('Warning – You have %s remaining to complete this test.')\n };\n /**\n * The text of warning messages for screenreader\n */\n\n var warningMessagesForScreenraeder = {\n item: __('You have %s remaining to complete the current item.'),\n section: __('You have %s left to answer remaining %s questions.'),\n testPart: __('You have %s left to answer remaining %s questions.'),\n test: __('You have %s left to answer remaining %s questions.')\n };\n /**\n * Get the timers objects from the time constraints andt the given config\n * @param {Object[]} timeConstraints - as defined in the testContext\n * @param {Boolean} isLinear - is the current navigation mode linear\n * @param {Object} [config] - timers config\n * @param {Object[]} [config.warnings] - the warnings to apply to the timers (max only for now)\n * @param {Object[]} [config.warnings] - the warnings to apply to the timers (max only for now)\n * @returns {timer[]} the timers\n */\n\n function getTimers(timeConstraints, isLinear, config) {\n var timers = {};\n /**\n * The warnings comes in a weird format (ie. {scope:{threshold:level}}) , so we reformat them\n */\n\n var constraintsWarnings = _.reduce(config.warnings, function (acc, warnings, qtiScope) {\n var scope = getScope(qtiScope);\n acc[scope] = _.map(warnings, function (value, key) {\n return {\n threshold: parseInt(key, 10) * precision,\n message: function applyMessage(remainingTime) {\n var displayRemaining = moment.duration(remainingTime / precision, 'seconds').humanize();\n return format(warningMessages[scope], displayRemaining);\n },\n level: value,\n shown: false\n };\n });\n return acc;\n }, {});\n /**\n * The warnings comes in a weird format (ie. {scope:[threshold, ...]}) , so we reformat them\n */\n\n\n var constraintsWarningsForScreenreader = _.reduce(config.warningsForScreenreader, function (acc, warnings, qtiScope) {\n var scope = getScope(qtiScope);\n acc[scope] = _.map(warnings, function (value) {\n return {\n threshold: parseInt(value, 10) * precision,\n message: function applyMessage(remainingTime, unansweredQuestions) {\n var displayRemaining = moment.duration(remainingTime / precision, 'seconds').humanize();\n return format(warningMessagesForScreenraeder[scope], displayRemaining, unansweredQuestions);\n },\n scope: scope,\n shown: false\n };\n });\n return acc;\n }, {});\n /**\n * Build a timer of a given type from a time constraints\n * @param {String} type - min, max, locked\n * @param {Object} constraintData\n * @returns {timer} timer\n */\n\n\n var buildTimer = function buildTimer(type, constraintData) {\n /**\n * @typedef {Object} timer\n * @property {String} id - identify the timer (for max, it's the source for backward compat)\n * @property {String} type - min, max or locked\n * @property {String} label - the title to display\n * @property {String} scope - the timer's scope (item, section, etc.)\n * @property {String} qtiClassName - the QTI class of the timers applies to\n * @property {String} source - the ID of the element the timers belongs to\n * @property {Number} extraTime - additional time data, object\n * @property {Number} originalTime - the starting value of the timer, never changes, in ms.\n * @property {Number} remainingTime - current value, in ms.\n * @property {Number} remainingWithoutExtraTime - remaining time without extra time, in ms.\n * @property {Number} total - total time (original time + extra time), in ms.\n */\n var timer = _.pick(constraintData, ['label', 'scope', 'source', 'extraTime', 'qtiClassName']);\n\n timer.type = type;\n timer.allowLateSubmission = constraintData.allowLateSubmission;\n\n if (type === 'min') {\n timer.id = \"\".concat(type, \"-\").concat(constraintData.scope, \"-\").concat(constraintData.source);\n timer.originalTime = constraintData.minTime * precision;\n timer.remainingTime = constraintData.minTimeRemaining * precision;\n } else {\n timer.id = constraintData.source;\n timer.originalTime = constraintData.maxTime * precision;\n timer.remainingTime = constraintData.maxTimeRemaining * precision;\n }\n\n timer.remainingWithoutExtraTime = timer.remainingTime;\n\n if (timer.extraTime) {\n timer.extraTime.consumed = timer.extraTime.consumed * precision;\n timer.extraTime.remaining = timer.extraTime.remaining * precision;\n timer.extraTime.total = timer.extraTime.total * precision;\n timer.total = timer.originalTime + timer.extraTime.total;\n timer.remainingTime += timer.extraTime.remaining;\n } //TODO supports warnings for other types\n\n\n if (type === 'max' && _.isArray(constraintsWarnings[timer.scope])) {\n timer.warnings = constraintsWarnings[timer.scope];\n }\n\n if (_.isArray(constraintsWarningsForScreenreader[timer.scope])) {\n timer.warningsForScreenreader = constraintsWarningsForScreenreader[timer.scope];\n }\n\n var stats = config.questionsStats[timer.scope];\n timer.unansweredQuestions = stats && stats.questions - stats.answered;\n return timer;\n };\n\n _.forEach(timeConstraints, function (timeConstraint) {\n var constraintData = _.clone(timeConstraint);\n\n var newTimer;\n constraintData.scope = getScope(timeConstraint.scope || timeConstraint.qtiClassName);\n\n if (!constraintData.scope) {\n logger.warn('Wrong data, a time constraint should apply to a valid scope, skipping');\n } else if (constraintData.minTime === false && constraintData.maxTime === false) {\n logger.warn('Time constraint defined with no time, skipping'); // minTime = maxTime -> one locked timer\n } else if (config.guidedNavigation && isLinear && constraintData.maxTime && constraintData.minTime && constraintData.minTime === constraintData.maxTime && constraintData.maxTime > 0) {\n newTimer = buildTimer('locked', constraintData);\n timers[newTimer.id] = newTimer;\n } else {\n //minTime -> min timer\n if (isLinear && constraintData.minTime && constraintData.minTime > 0) {\n newTimer = buildTimer('min', constraintData);\n timers[newTimer.id] = newTimer;\n } //maxTime -> max timer\n\n\n if (constraintData.maxTime && constraintData.maxTime > 0) {\n newTimer = buildTimer('max', constraintData);\n timers[newTimer.id] = newTimer;\n }\n }\n });\n\n logger.debug('Timers built from timeConstraints', timers);\n return timers;\n }\n\n return getTimers;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/timer/plugin',['jquery', 'lodash', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/controls/timer/strategy/strategyHandler', 'taoQtiTest/runner/plugins/controls/timer/component/timerbox', 'taoQtiTest/runner/plugins/controls/timer/timers', 'taoQtiTest/runner/helpers/isReviewPanelEnabled', 'taoQtiTest/runner/helpers/stats', 'handlebars'], function ($$1, _, pluginFactory, getStrategyHandler, timerboxFactory, timersFactory, isReviewPanelEnabled, statsHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n getStrategyHandler = getStrategyHandler && Object.prototype.hasOwnProperty.call(getStrategyHandler, 'default') ? getStrategyHandler['default'] : getStrategyHandler;\n timerboxFactory = timerboxFactory && Object.prototype.hasOwnProperty.call(timerboxFactory, 'default') ? timerboxFactory['default'] : timerboxFactory;\n timersFactory = timersFactory && Object.prototype.hasOwnProperty.call(timersFactory, 'default') ? timersFactory['default'] : timersFactory;\n isReviewPanelEnabled = isReviewPanelEnabled && Object.prototype.hasOwnProperty.call(isReviewPanelEnabled, 'default') ? isReviewPanelEnabled['default'] : isReviewPanelEnabled;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div aria-live=\\\"polite\\\" class=\\\"visible-hidden\\\"></div>\\n\";\n });\n function screenreaderNotificationTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var screenreaderNotificationTimeout = 20000;\n /**\n * Creates the plugin\n */\n\n var plugin = pluginFactory({\n name: 'timer',\n\n /**\n * Install step, add behavior before the lifecycle\n */\n install: function install() {\n var testRunner = this.getTestRunner();\n /**\n * Load the timers, from the given timeConstraints and reading the current value in the store\n * @param {store} timeStore - where the values are read\n * @param {Object} config - the current config, especially for the warnings\n * @returns {Promise<Object[]>} the list of timers for the current context\n */\n\n this.loadTimers = function loadTimers(timeStore, config) {\n var testContext = testRunner.getTestContext();\n var testPart = testRunner.getCurrentPart();\n var isLinear = testPart && testPart.isLinear;\n var timeConstraints = testContext.timeConstraints;\n var timers = timersFactory(timeConstraints, isLinear, config);\n return Promise.all(_.map(timers, function (timer) {\n return timeStore.getItem(\"consumed_\".concat(timer.id)).then(function (savedConsumedTime) {\n if (_.isNumber(savedConsumedTime) && savedConsumedTime >= 0 && config.restoreTimerFromClient) {\n timer.remainingTime = timer.originalTime + timer.extraTime.total - savedConsumedTime;\n }\n });\n })).then(function () {\n return timers;\n });\n };\n /**\n * Save consumed time values into the store\n * @param {store} timeStore - where the values are saved\n * @param {Object[]} timers - the timers to save\n * @returns {Promise} resolves once saved\n */\n\n\n this.saveTimers = function saveTimers(timeStore, timers) {\n return Promise.all(_.map(timers, function (timer) {\n return timeStore.setItem(\"consumed_\".concat(timer.id), timer.originalTime + timer.extraTime.total - timer.remainingTime);\n }));\n }; //define the \"timer\" store as \"volatile\" (removed on browser change).\n\n\n testRunner.getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n *\n * @returns {Promise}\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var screenreaderNotifcationTimeoutId;\n var stats = {};\n ['test', 'testPart', 'section', 'item'].forEach(function (scope) {\n return Object.assign(stats, _defineProperty({}, scope, statsHelper.getInstantStats(scope, testRunner)));\n });\n /**\n * Plugin config,\n */\n\n var config = Object.assign({\n /**\n * An option to control is the warnings are contextual or global\n */\n contextualWarnings: false,\n\n /**\n * The list of configured warnings\n */\n warnings: testRunnerOptions.timerWarning || {},\n\n /**\n * The list of configured warnings for screenreaders\n */\n warningsForScreenreader: testRunnerOptions.timerWarningForScreenreader || {},\n\n /**\n * The guided navigation option\n */\n guidedNavigation: testRunnerOptions.guidedNavigation,\n\n /**\n * Restore timer from client.\n */\n restoreTimerFromClient: testRunnerOptions.timer && testRunnerOptions.timer.restoreTimerFromClient,\n\n /**\n * Questions stats\n */\n questionsStats: stats\n }, this.getConfig());\n /**\n * Set up the strategy handler\n */\n\n var strategyHandler = getStrategyHandler(testRunner);\n /**\n * dispatch errors to the test runner\n * @param {Error} err - to dispatch\n */\n\n var handleError = function handleError(err) {\n testRunner.trigger('error', err);\n };\n\n function loadSavedTimers(timeStore) {\n var testContext = testRunner.getTestContext(); //update the timers before each item\n\n if (self.timerbox && testContext.timeConstraints) {\n return self.loadTimers(timeStore, config).then(function (timers) {\n return self.timerbox.update(timers);\n }).catch(handleError);\n }\n }\n\n return new Promise(function (resolve) {\n //load the plugin store\n return testRunner.getPluginStore(self.getName()).then(function (timeStore) {\n testRunner.before('renderitem', function () {\n return loadSavedTimers(timeStore);\n }).before('enableitem', function () {\n if (config.restoreTimerFromClient) {\n return loadSavedTimers(timeStore);\n }\n }).on('tick', function (elapsed) {\n if (self.timerbox) {\n var timers = self.timerbox.getTimers();\n var updatedTimers = Object.keys(timers).reduce(function (acc, timerName) {\n var statsScope = statsHelper.getInstantStats(timers[timerName].scope, testRunner);\n var unansweredQuestions = statsScope && statsScope.questions - statsScope.answered;\n acc[timerName] = Object.assign({}, timers[timerName], {\n remainingTime: timers[timerName].remainingTime - elapsed,\n unansweredQuestions: unansweredQuestions\n });\n return acc;\n }, {});\n self.timerbox.update(updatedTimers).catch(handleError);\n }\n }).after('renderitem', function () {\n if (self.timerbox) {\n $$1(self.timerbox.getElement()).find('.timer-wrapper').attr('aria-hidden', isReviewPanelEnabled(testRunner));\n self.timerbox.start();\n }\n\n self.$screenreaderWarningContainer.text('');\n }).after('enableitem', function () {\n if (self.timerbox && config.restoreTimerFromClient) {\n //this will \"resume\" the countdowns if timers have client mode\n self.timerbox.start();\n }\n }).on('move skip', function () {\n if (self.timerbox) {\n //this will \"pause\" the countdowns\n self.timerbox.stop();\n }\n }).on('disableitem', function () {\n if (self.timerbox && config.restoreTimerFromClient) {\n //this will \"pause\" the countdowns if timers have client mode\n self.timerbox.stop();\n }\n });\n timeStore.getItem('zen-mode').then(function (startZen) {\n //set up the timerbox\n self.timerbox = timerboxFactory({\n ariaHidden: isReviewPanelEnabled(testRunner),\n zenMode: {\n enabled: true,\n startHidden: !!startZen\n },\n displayWarning: config.contextualWarnings\n }).on('change', _.throttle(function () {\n //update the store with the current timer values\n self.saveTimers(timeStore, this.getTimers());\n }, 1000)).on('timeradd', function (timer) {\n strategyHandler.setUp(timer).catch(handleError);\n }).on('timerremove', function (timer) {\n strategyHandler.tearDown(timer).catch(handleError);\n }).on('timerstart', function (timer) {\n strategyHandler.start(timer).catch(handleError);\n }).on('timerstop', function (timer) {\n strategyHandler.stop(timer).catch(handleError);\n }).on('timerend', function (timer) {\n strategyHandler.complete(timer).catch(handleError);\n }).on('timerchange', function (action, timer) {\n //backward compatible events\n self.trigger(\"\".concat(action, \"timer\"), timer.qtiClassName, timer);\n }).on('zenchange', function (isZen) {\n timeStore.setItem('zen-mode', !!isZen);\n }).on('init', resolve).on('error', handleError); // share this timer values to use in other components\n\n self.timerbox.spread(testRunner, 'timertick');\n\n if (!config.contextualWarnings) {\n self.timerbox.on('warn', function (message, level) {\n if (level && message) {\n testRunner.trigger(level, message);\n }\n }); // debounce used to prevent multiple invoking at the same time\n\n self.timerbox.on('warnscreenreader', _.debounce(function (message, remainingTime, scope) {\n var statsScope = statsHelper.getInstantStats(scope, testRunner);\n var unansweredQuestions = statsScope && statsScope.questions - statsScope.answered;\n\n if (screenreaderNotifcationTimeoutId) {\n clearTimeout(screenreaderNotifcationTimeoutId);\n }\n\n self.$screenreaderWarningContainer.text(message(remainingTime, unansweredQuestions));\n screenreaderNotifcationTimeoutId = setTimeout(function () {\n return self.$screenreaderWarningContainer.text('');\n }, screenreaderNotificationTimeout);\n }, 1000, {\n 'leading': true,\n 'trailing': false\n }));\n }\n }).catch(handleError);\n });\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getControlArea();\n this.$screenreaderWarningContainer = $$1(screenreaderNotificationTpl());\n this.timerbox.render($container);\n $container.append(this.$screenreaderWarningContainer);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n if (this.timerbox) {\n this.timerbox.stop().destroy();\n }\n },\n\n /**\n * Shows the timers\n */\n show: function show() {\n if (this.timerbox) {\n this.timerbox.show();\n }\n },\n\n /**\n * Hides the timers\n */\n hide: function hide() {\n if (this.timerbox) {\n this.timerbox.hide();\n }\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/title/title',['jquery', 'lodash', 'taoTests/runner/plugin', 'handlebars', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/getTimerMessage', 'moment', 'taoQtiTest/runner/helpers/stats'], function ($$1, _, pluginFactory, Handlebars, mapHelper, getTimerMessage, moment, statsHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n getTimerMessage = getTimerMessage && Object.prototype.hasOwnProperty.call(getTimerMessage, 'default') ? getTimerMessage['default'] : getTimerMessage;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <span data-control=\\\"\";\n if (helper = helpers.attribute) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.attribute); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-controls \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"></span>\\n <div data-control=\\\"\";\n if (helper = helpers.attribute) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.attribute); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"-timer\\\" class=\\\"visible-hidden\\\"></div>\\n \";\n return buffer;\n }\n\n buffer += \"<div role=\\\"heading\\\" aria-level=\\\"1\\\" class=\\\"title-box truncate\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.titles), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</div>\\n\";\n return buffer;\n });\n function titleTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n var precision = 1000;\n var title = pluginFactory({\n name: 'title',\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testMap = testRunner.getTestMap();\n\n var updateTitles = function updateTitles() {\n var testContext = testRunner.getTestContext();\n var currentPart = mapHelper.getItemPart(testMap, testContext.itemPosition);\n var currentItem = mapHelper.getItem(testMap, testContext.itemIdentifier); // update test title\n\n if (testMap.title) {\n _this.titles.test.$title.text(testMap.title).show();\n } // update part title\n\n\n if (currentPart && currentPart.label) {\n _this.titles.testPart.$title.text(\" - \".concat(currentPart.label)).show();\n } // update section title\n //@deprecated the following block seems to\n //be very specific and need to be reworked\n\n\n if (testContext.isDeepestSectionVisible) {\n var section = mapHelper.getItemSection(testMap, testContext.itemPosition); //testContext.sectionTitle is kept only for backward compat\n\n _this.titles.section.$title.text(\" - \".concat(section.label || testContext.sectionTitle)).show();\n } // update item title\n\n\n if (currentItem.label) {\n _this.titles.item.$title.text(\" - \".concat(currentItem.label)).show();\n }\n };\n\n testRunner.after('renderitem', function () {\n _.forOwn(_this.titles, function (options, scope) {\n _this.titles[scope].$title.text('');\n\n _this.titles[scope].$timer.text('');\n\n if (scope !== 'item') {\n _this.titles[scope].stats = statsHelper.getInstantStats(scope, testRunner);\n }\n });\n\n updateTitles();\n }).on('timertick', function (remainingTime, scope) {\n var title = _this.titles[scope];\n\n if (!title) {\n return;\n }\n\n var _this$titles$scope = _this.titles[scope],\n $timer = _this$titles$scope.$timer,\n stats = _this$titles$scope.stats;\n var time = moment.duration(remainingTime / precision, 'seconds');\n var hours = time.get('hours');\n var minutes = time.get('minutes');\n var seconds = time.get('seconds');\n var unansweredQuestions = stats && stats.questions - stats.answered; // check if notification should be updated\n\n if ($timer) {\n $timer.text(getTimerMessage(hours, minutes, seconds, unansweredQuestions));\n }\n }).on('unloaditem', function () {\n $$1('.qti-controls', _this.$element).hide();\n });\n },\n render: function render() {\n var _this2 = this;\n\n var $container = this.getAreaBroker().getControlArea();\n this.titles = {\n test: {\n attribute: 'qti-test-title',\n className: ''\n },\n testPart: {\n attribute: 'qti-test-part-title',\n className: 'visible-hidden'\n },\n section: {\n attribute: 'qti-test-position',\n className: ''\n },\n item: {\n attribute: 'qti-test-item-title',\n className: 'visible-hidden'\n }\n };\n this.$element = $$1(titleTpl({\n titles: _.values(this.titles)\n })); // hide titles by default\n\n $$1('.qti-controls', this.$element).hide();\n $container.append(this.$element);\n\n _.forOwn(this.titles, function (_ref, scope) {\n var attribute = _ref.attribute;\n _this2.titles[scope].$title = $container.find(\"[data-control=\\\"\".concat(attribute, \"\\\"]\"));\n _this2.titles[scope].$timer = $container.find(\"[data-control=\\\"\".concat(attribute, \"-timer\\\"]\"));\n });\n }\n });\n\n return title;\n\n});\n\n","define('taoQtiTest/runner/plugins/controls/trace/itemTraceVariables',['lodash', 'moment', 'taoTests/runner/plugin'], function (_, moment, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n moment = moment && Object.prototype.hasOwnProperty.call(moment, 'default') ? moment['default'] : moment;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Duration of a second in the timer's base unit\n * @type {Number}\n */\n\n var precision = 1000;\n /**\n * Gets the current timestamp\n * @returns {Number}\n */\n\n function timestamp() {\n return Date.now() / precision;\n }\n /**\n * Creates the timer plugin\n */\n\n\n var itemTraceVariables = pluginFactory({\n name: 'itemTraceVariables',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n //define the \"trace\" store as \"volatile\" (removed on browser change).\n // the store name is \"trace\" for backward compatibility,\n // best practice is to use the plugin name\n this.getTestRunner().getTestStore().setVolatile('trace');\n },\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var variables = {};\n\n function onError(err) {\n testRunner.trigger('error', err);\n }\n\n return testRunner.getPluginStore('trace').then(function (tracesStore) {\n testRunner.after('renderitem enableitem', function () {\n var context = testRunner.getTestContext();\n variables = {\n ITEM_START_TIME_CLIENT: timestamp()\n };\n tracesStore.getItem(context.itemIdentifier).then(function (data) {\n if (data) {\n _.merge(variables, data);\n }\n\n return tracesStore.setItem(context.itemIdentifier, variables);\n }).catch(onError);\n }).before('move skip exit timeout', function () {\n var context = testRunner.getTestContext();\n variables.ITEM_END_TIME_CLIENT = timestamp();\n variables.ITEM_TIMEZONE = moment().utcOffset(moment().utcOffset()).format('Z');\n return tracesStore.setItem(context.itemIdentifier, variables).catch(onError);\n }).before('unloaditem', function () {\n var context = testRunner.getTestContext();\n return testRunner.getProxy().callItemAction(context.itemIdentifier, 'storeTraceData', {\n traceData: JSON.stringify(variables)\n }, true);\n });\n });\n }\n });\n\n return itemTraceVariables;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/allowSkipping',['lodash', 'i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/currentItem'], function (_, __, pluginFactory, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default plugin options\n * @type {Object}\n */\n\n var defaults = {\n allowPartial: true // whether all interactions must be answered to count an item as answered\n\n };\n /**\n * Plugin factory\n * @returns {Object}\n */\n\n var allowSkipping = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: 'allowSkipping',\n\n /**\n * Initialize plugin (called during runner's initialization)\n * @returns {this}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaults, this.getConfig());\n testRunner.before('nav-next move', function () {\n var testContext = testRunner.getTestContext();\n var isInteracting = !testRunner.getItemState(testContext.itemIdentifier, 'disabled');\n var warning = pluginConfig.allowPartial ? __('A response to this item is required.') : __('A response to every question in this item is required.');\n\n if (isInteracting && testRunnerOptions.enableAllowSkipping) {\n var currenItem = testRunner.getCurrentItem(); //@deprecated use allowSkipping from testMap instead of the testContext\n\n var allowSkipping = typeof currenItem.allowSkipping === 'boolean' ? currenItem.allowSkipping : testContext.allowSkipping;\n\n if (!allowSkipping) {\n return new Promise(function (resolve, reject) {\n if (_.size(currentItemHelper.getDeclarations(testRunner)) === 0) {\n return resolve();\n }\n\n if (currentItemHelper.isAnswered(testRunner, pluginConfig.allowPartial)) {\n return resolve();\n }\n\n if (!testRunner.getState('alerted.notallowed')) {\n // Only show one alert for itemSessionControl\n testRunner.setState('alerted.notallowed', true);\n testRunner.trigger('alert.notallowed', warning, function () {\n testRunner.trigger('resumeitem');\n reject();\n testRunner.setState('alerted.notallowed', false);\n });\n }\n });\n }\n }\n });\n }\n });\n\n return allowSkipping;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/nextWarningHelper',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n\n /**\n * This is a helper for navigation plugins. It decides if a warning should be displayed\n * before actually moving to the next item\n *\n * @author Christophe Noël <christophe@taotesting.com>\n */\n\n /**\n * Convert a value to a boolean\n * @param {*} value\n * @param {Boolean} defaultValue\n * @returns {Boolean}\n */\n var toBoolean = function toBoolean(value, defaultValue) {\n if (typeof value === 'undefined') {\n return defaultValue;\n } else {\n return value === true || value === 'true';\n }\n };\n /**\n * @param {Object} options\n * @param {Boolean} options.endTestWarning - enables the end test warning, when applicable\n * @param {Boolean} options.isLast - if the item is the last of the test\n * @param {Boolean} options.isLinear - if the current part is linear\n * @param {Boolean} options.nextItemWarning - enables the next item warning, when applicable\n * @param {Boolean} options.nextPartWarning - enables the next item warning on part change\n * @param {Boolean} options.stats - current state of the test\n * @param {Object} options.nextPart - description of the next part of the test\n * @param {Number} options.remainingAttempts - remaining attempts for the current item\n * @param {String} options.testPartId - current test part identifier\n * @param {Boolean} options.unansweredOnly - warn only if there are unanswered/flagged items\n * @returns {Object}\n */\n\n\n var nextWarningHelper = function nextWarningHelper(options) {\n var endTestWarning = toBoolean(options.endTestWarning, false),\n isLast = toBoolean(options.isLast, false),\n isLinear = toBoolean(options.isLinear, false),\n nextItemWarning = toBoolean(options.nextItemWarning, false),\n nextPartWarning = toBoolean(options.nextPartWarning, false),\n stats = options.stats,\n nextPart = options.nextPart || {},\n remainingAttempts = typeof options.remainingAttempts === 'undefined' ? -1 : options.remainingAttempts,\n testPartId = options.testPartId || '',\n unansweredOnly = toBoolean(options.unansweredOnly, false),\n warnBeforeNext = shouldWarnBeforeNext(),\n warnBeforeEnd = shouldWarnBeforeEnd(),\n warnBeforeEndPart = shouldWarnBeforeEndPart();\n /**\n * Decide if we should display a warning before moving to the next item.\n * This is useful to prevent accidental navigation (for example by pressing a shortcut) that would occur\n * before the test taker actually gets a chance to answer an item\n */\n\n function shouldWarnBeforeNext() {\n return nextItemWarning && !itemCanBeTriedAtWill(); //&& !exitTimedSectionWarning(); //todo: this should be implemented to prevent a double warning!\n }\n /**\n * We try to decide if the test taker has the freedom to come back to this item as many times as he wants\n */\n\n\n function itemCanBeTriedAtWill() {\n return isLast === false && // the test is not over\n isLinear === false && // the context is not linear\n remainingAttempts === -1 && // the item doesn't have a configured max attempts number\n !isNextItemInLinearPart() // the next item is not in a linear part\n ;\n }\n /**\n * Check if the next item is in a linear part, as this would prevent the test taker to come back to the current item\n */\n\n\n function isNextItemInLinearPart() {\n return nextPart && typeof nextPart.isLinear !== 'undefined' && isLastOfPart() && nextPart.isLinear === true;\n }\n /**\n * Decide if we should display a warning before ending the test\n */\n\n\n function shouldWarnBeforeEnd() {\n return shouldWarnOnTestEnd();\n }\n /**\n * Decide if we should display a warning before ending the test part\n */\n\n\n function shouldWarnBeforeEndPart() {\n return shouldWarnOnPartChange();\n }\n /**\n * Are we on the last test item?\n * @returns {Boolean}\n */\n\n\n function shouldWarnOnTestEnd() {\n return isLast && (endTestWarning || // warning is explicitly required by endTestWarning category\n warnBeforeNext) && // warning is implicitly triggered by the next item warning being true (prevent double warning)\n shouldWarnForUnansweredItems();\n }\n /**\n * Provide the opportunity to cancel the display of the warning if there are no unanswered/flagged item\n * for this to work, the unansweredOnly option has to be set\n * @returns {Boolean}\n */\n\n\n function shouldWarnForUnansweredItems() {\n var hasUnanswered = stats && stats.questions - stats.answered !== 0,\n hasFlagged = stats && stats.flagged !== 0;\n\n if (unansweredOnly) {\n return hasUnanswered || hasFlagged;\n } else {\n return true;\n }\n }\n /**\n * Are we on the last part item?\n * @returns {Boolean}\n */\n\n\n function shouldWarnOnPartChange() {\n return nextPartWarning && isLastOfPart() && shouldWarnForUnansweredItems();\n }\n /**\n * Check if the next item belong to a different part\n * @returns {Boolean}\n */\n\n\n function isLastOfPart() {\n return nextPart && nextPart.id && testPartId !== nextPart.id;\n }\n /**\n * The helper object\n */\n\n\n return {\n shouldWarnBeforeEndPart: function shouldWarnBeforeEndPart() {\n return warnBeforeEndPart;\n },\n shouldWarnBeforeEnd: function shouldWarnBeforeEnd() {\n return warnBeforeEnd;\n },\n shouldWarnBeforeNext: function shouldWarnBeforeNext() {\n return warnBeforeNext;\n }\n };\n };\n\n return nextWarningHelper;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/navigation/next/nextWarningHelper', 'taoQtiTest/runner/helpers/messages', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/stats', 'util/shortcut', 'util/namespace', 'handlebars'], function ($$1, __, hider, pluginFactory, nextWarningHelper, messages, mapHelper, navigationHelper, statsHelper, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n nextWarningHelper = nextWarningHelper && Object.prototype.hasOwnProperty.call(nextWarningHelper, 'default') ? nextWarningHelper['default'] : nextWarningHelper;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n statsHelper = statsHelper && Object.prototype.hasOwnProperty.call(statsHelper, 'default') ? statsHelper['default'] : statsHelper;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display of the next button\n */\n\n var buttonData = {\n next: {\n control: 'move-forward',\n title: __('Submit and go to the next item'),\n specificTitle: __('Submit and go to the item %s'),\n icon: 'forward',\n text: __('Next')\n },\n end: {\n control: 'move-end',\n title: __('Submit and go to the end of the test'),\n icon: 'fast-forward',\n text: __('End test')\n }\n };\n /**\n * Create the button based on the current context\n * @param {Boolean} [isLast=false] - is the current item the last\n * @returns {jQueryElement} the button\n */\n\n var createElement = function createElement() {\n var isLast = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var dataType = isLast ? 'end' : 'next';\n return $$1(buttonTpl(buttonData[dataType]));\n };\n /**\n * Makes an element enabled\n * @param {jQuery} $element\n * @returns {jQuery}\n */\n\n\n var enableElement = function enableElement($element) {\n return $element.removeProp('disabled').removeClass('disabled');\n };\n /**\n * Makes an element disabled\n * @param {jQuery} $element\n * @returns {jQuery}\n */\n\n\n var disableElement = function disableElement($element) {\n return $element.prop('disabled', true).addClass('disabled');\n };\n /**\n * Update the button based on the context\n * @param {jQueryElement} $element - the element to update\n * @param {TestRunner} [testRunner] - the test runner instance\n * @param {Boolean} [isLast=false] - is the current item the last\n */\n\n\n var updateElement = function updateElement($element, testRunner) {\n var isLast = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var dataType = isLast ? 'end' : 'next';\n var testContext = testRunner.getTestContext();\n\n if (dataType === 'next' && !testContext.isAdaptive && !testContext.isCatAdaptive) {\n var testMap = testRunner.getTestMap();\n var nextItem = navigationHelper.getNextItem(testMap, testContext.itemPosition);\n $element.attr('title', __(buttonData.next.specificTitle, nextItem.label));\n } else {\n $element.attr('title', buttonData[dataType].title);\n }\n\n if ($element.attr('data-control') !== buttonData[dataType].control) {\n $element.attr('data-control', buttonData[dataType].control).find('.text').text(buttonData[dataType].text);\n\n if (dataType === 'next') {\n $element.find(\".icon-\".concat(buttonData.end.icon)).removeClass(\"icon-\".concat(buttonData.end.icon)).addClass(\"icon-\".concat(buttonData.next.icon));\n } else {\n $element.find(\".icon-\".concat(buttonData.next.icon)).removeClass(\"icon-\".concat(buttonData.next.icon)).addClass(\"icon-\".concat(buttonData.end.icon));\n }\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var next = pluginFactory({\n name: 'next',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Check if the current item is the last item\n * @returns {Boolean} true if the last\n */\n\n var isLastItem = function isLastItem() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var itemIdentifier = testContext.itemIdentifier;\n return navigationHelper.isLast(testMap, itemIdentifier);\n }; //plugin behavior\n\n /**\n * @param {Boolean} nextItemWarning - enable the display of a warning when going to the next item.\n * Note: the actual display of the warning depends on other conditions (see nextWarningHelper)\n */\n\n\n var doNext = function doNext(nextItemWarning) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testPart = testRunner.getCurrentPart();\n var nextItemPosition = testContext.itemPosition + 1;\n var itemIdentifier = testContext.itemIdentifier; // x-tao-option-unansweredWarning is a deprecated option whose behavior now matches the one of\n\n var unansweredWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'unansweredWarning', true); // x-tao-option-nextPartWarning with the unansweredOnly option\n\n var nextPartWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'nextPartWarning', true) || unansweredWarning;\n var endTestWarning = mapHelper.hasItemCategory(testMap, itemIdentifier, 'endTestWarning', true); // this check to avoid an edge case where having both endTestWarning\n // and unansweredWarning options would prevent endTestWarning to behave normally\n\n var unansweredOnly = !endTestWarning && unansweredWarning;\n var warningScope = nextPartWarning ? 'part' : 'test';\n\n var enableNav = function enableNav() {\n return testRunner.trigger('enablenav');\n };\n\n var triggerNextAction = function triggerNextAction() {\n if (isLastItem()) {\n _this.trigger('end');\n }\n\n testRunner.next();\n };\n\n testRunner.trigger('disablenav');\n\n if (_this.getState('enabled') !== false) {\n var warningHelper = nextWarningHelper({\n endTestWarning: endTestWarning,\n isLast: isLastItem(),\n isLinear: testPart.isLinear,\n nextItemWarning: nextItemWarning,\n nextPartWarning: nextPartWarning,\n nextPart: mapHelper.getItemPart(testMap, nextItemPosition),\n remainingAttempts: testContext.remainingAttempts,\n testPartId: testContext.testPartId,\n unansweredWarning: unansweredWarning,\n stats: statsHelper.getInstantStats(warningScope, testRunner),\n unansweredOnly: unansweredOnly\n });\n\n if (warningHelper.shouldWarnBeforeEndPart()) {\n var submitButtonLabel = __('SUBMIT THIS PART');\n\n testRunner.trigger('confirm.endTestPart', messages.getExitMessage(warningScope, testRunner, '', false, submitButtonLabel), triggerNextAction, // if the test taker accept\n enableNav, // if he refuse\n {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else if (warningHelper.shouldWarnBeforeEnd()) {\n var _submitButtonLabel = __('SUBMIT THE TEST');\n\n testRunner.trigger('confirm.endTest', messages.getExitMessage(warningScope, testRunner, '', false, _submitButtonLabel), triggerNextAction, // if the test taker accept\n enableNav, // if he refuse\n {\n buttons: {\n labels: {\n ok: _submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else if (warningHelper.shouldWarnBeforeNext()) {\n testRunner.trigger('confirm.next', __('You are about to go to the next item. Click OK to continue and go to the next item.'), triggerNextAction, // if the test taker accept\n enableNav // if he refuse\n );\n } else {\n triggerNextAction();\n }\n }\n }; //create the button (detached)\n\n\n this.$element = createElement(isLastItem()); //attach behavior\n\n this.$element.on('click', function (e) {\n e.preventDefault();\n disableElement(_this.$element);\n testRunner.trigger('nav-next');\n });\n\n var registerShortcut = function registerShortcut(kbdShortcut) {\n if (testRunnerOptions.allowShortcuts && kbdShortcut) {\n shortcut.add(namespaceHelper.namespaceAll(kbdShortcut, _this.getName(), true), function () {\n if (_this.getState('enabled') === true) {\n testRunner.trigger('nav-next', true);\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n };\n\n registerShortcut(pluginShortcuts.trigger); //disabled by default\n\n this.disable(); //change plugin state\n\n testRunner.on('loaditem', function () {\n updateElement(_this.$element, testRunner, isLastItem());\n }).on('enablenav', function () {\n return _this.enable();\n }).on('disablenav', function () {\n return _this.disable();\n }).on('hidenav', function () {\n return _this.hide();\n }).on('shownav', function () {\n return _this.show();\n }).on('nav-next', function (nextItemWarning) {\n return doNext(nextItemWarning);\n }).on('enableaccessibilitymode', function () {\n var kbdShortcut = pluginShortcuts.triggerAccessibility;\n\n if (kbdShortcut && !_this.getState('eaccessibilitymode')) {\n shortcut.remove(\".\".concat(_this.getName()));\n registerShortcut(kbdShortcut);\n\n _this.setState('eaccessibilitymode');\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element to the navigation area\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n enableElement(this.$element);\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n disableElement(this.$element);\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return next;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/dialogConfirmNext',['jquery', 'lodash', 'i18n', 'ui/dialog', 'handlebars'], function ($$1, _, __, dialog, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n dialog = dialog && Object.prototype.hasOwnProperty.call(dialog, 'default') ? dialog['default'] : dialog;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n return \"checked\";\n }\n\n buffer += \"<label for=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <input type=\\\"checkbox\\\" id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" name=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.checked), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \" />\\n <span class=\\\"icon-checkbox\\\"></span>\\n \";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n</label>\";\n return buffer;\n });\n function checkboxTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Displays a confirmation dialog with a checkbox in it\n *\n * @param {String} heading - Above the main message\n * @param {String} message - The displayed message\n * @param {Function} accept - An action called when the dialog is accepted\n * @param {Function} refuse - An action called when the dialog is refused\n * @param {Object} checkboxParams - Checkbox options\n * @param {Boolean} [checkboxParams.checked] - True to render it checked\n * @param {Function} [checkboxParams.submitChecked] - Action called when dialog accepted with checkbox checked\n * @param {Function} [checkboxParams.submitUnchecked] - Action called when dialog accepted with checkbox unchecked\n * @returns {dialog} - Returns the dialog instance\n */\n\n function dialogConfirmNext(heading, message, accept, refuse, checkboxParams, dialogOptions) {\n var accepted = false;\n var dlg;\n var content = null;\n\n if (checkboxParams && checkboxParams.checked !== true) {\n content = checkboxTpl({\n checked: false,\n text: \"Don't show this again next time\",\n id: 'dont-show-again'\n });\n }\n\n dialogOptions = _.defaults({\n heading: heading,\n message: message,\n content: content,\n autoRender: true,\n autoDestroy: true,\n buttons: [{\n id: 'cancel',\n type: 'regular',\n label: __('Cancel'),\n close: true\n }, {\n id: 'ok',\n type: 'info',\n label: __('Go to next item'),\n close: true\n }],\n onOkBtn: function onOkBtn() {\n var $checkbox;\n accepted = true;\n\n if (_.isFunction(accept)) {\n accept.call(this);\n\n if (checkboxParams) {\n // handle checkbox callbacks:\n $checkbox = $$1('input[name=\"dont-show-again\"]', this);\n\n if ($checkbox.prop('checked') && _.isFunction(checkboxParams.submitChecked)) {\n checkboxParams.submitChecked();\n } else if (!$checkbox.prop('checked') && _.isFunction(checkboxParams.submitUnchecked)) {\n checkboxParams.submitUnchecked();\n }\n }\n }\n }\n }, dialogOptions);\n dlg = dialog(dialogOptions);\n\n if (_.isFunction(refuse)) {\n dlg.on('closed.modal', function () {\n if (!accepted) {\n refuse.call(this);\n }\n });\n }\n\n return dlg;\n }\n\n return dialogConfirmNext;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/next/linearNextItemWarning',['i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/helpers/currentItem', 'taoQtiTest/runner/plugins/navigation/next/dialogConfirmNext', 'taoQtiTest/runner/helpers/navigation'], function (__, pluginFactory, mapHelper, currentItemHelper, dialogConfirmNext, navigationHelper) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n dialogConfirmNext = dialogConfirmNext && Object.prototype.hasOwnProperty.call(dialogConfirmNext, 'default') ? dialogConfirmNext['default'] : dialogConfirmNext;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var linearNextItemWarning = pluginFactory({\n name: 'linearNextItemWarning',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var testStore = testRunner.getTestStore(); // we'll store user's checkbox choice in here\n\n testStore.setVolatile(self.getName());\n /**\n * Retrieve the required categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getNextItemCategories() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n return {\n nextPartWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextPartWarning', true),\n nextSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSectionWarning', true)\n };\n }\n /**\n * Provides different variants of message text\n * @param {String} action - 'next' or 'skip'\n * @returns {String}\n */\n\n\n function getCustomNextMessage(action) {\n var customNextMessage;\n var itemPartiallyAnswered = currentItemHelper.isAnswered(testRunner, true);\n\n if (!itemPartiallyAnswered) {\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back and provide an answer.');\n } else if (action === 'next') {\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back and change your answer.');\n } else if (action === 'skip') {\n customNextMessage = __('Are you sure you want to clear your answer and go to the next item? You will not be able to go back and provide an answer.');\n } else {\n // more generic message for default case:\n customNextMessage = __('Are you sure you want to go to the next item? You will not be able to go back.');\n }\n\n return customNextMessage;\n } //plugin behavior\n\n /**\n * Checks configuration, shows a dialog asking to confirm the nav action\n *\n * @param {String} action - 'next' or 'skip'\n * @returns {Promise} - resolves if dialog accepted or not shown, rejects if dialog cancelled\n */\n\n\n function doNextWarning(action) {\n testRunner.trigger('disablenav'); // Load testStore checkbox value (async)\n\n return testStore.getStore(self.getName()).then(function (store) {\n return store.getItem('dontShowLinearNextItemWarning').then(function (checkboxValue) {\n var checkboxParams = null; // Show the warning unless user has turned it off:\n\n if (checkboxValue !== true) {\n // Define checkbox only if enabled by config:\n if (testRunnerOptions.enableLinearNextItemWarningCheckbox) {\n checkboxParams = {\n checked: checkboxValue,\n submitChecked: function submitChecked() {\n store.setItem('dontShowLinearNextItemWarning', true);\n },\n submitUnchecked: function submitUnchecked() {\n store.setItem('dontShowLinearNextItemWarning', false);\n }\n };\n }\n\n return new Promise(function (resolve, reject) {\n // show special dialog:\n dialogConfirmNext(__('Go to the next item?'), getCustomNextMessage(action), resolve, // if the test taker accepts\n function cancel() {\n // if he refuses\n reject({\n cancel: true\n });\n }, checkboxParams);\n });\n }\n });\n }).catch(function (err) {\n // if the rejection is due to an error, rethrow it\n if (err && err instanceof Error) {\n throw err;\n }\n\n if (err && err.cancel === true) {\n testRunner.trigger('enablenav');\n return Promise.reject(); // to cancel the move\n }\n });\n } // Attach this plugin to 'next' & 'skip' events\n\n\n testRunner.on('init', function () {\n // Clear the stored checkbox value before each test:\n testStore.getStore(self.getName()).then(function (store) {\n store.setItem('dontShowLinearNextItemWarning', null);\n });\n }).before('move skip', function (e, type, scope) {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n var item = testRunner.getCurrentItem();\n var currentPart = testRunner.getCurrentPart();\n var categories = getNextItemCategories();\n var isLast = navigationHelper.isLast(map, context.itemIdentifier);\n\n if (currentPart && currentPart.isLinear) {\n // Do nothing if nextSection warning imminent:\n if (scope === 'section' && categories.nextSectionWarning) {\n return; // Do nothing if endOfPart warning imminent:\n } else if (categories.nextPartWarning) {\n return; // Do nothing if 'informational item':\n } else if (item.informational) {\n return; // Show dialog if conditions met:\n } else if (type === 'next' && !isLast && testRunnerOptions.forceEnableLinearNextItemWarning) {\n return doNextWarning('next');\n } else if (e.name === 'skip' && !isLast && testRunnerOptions.forceEnableLinearNextItemWarning) {\n return doNextWarning('skip');\n }\n }\n });\n }\n });\n\n return linearNextItemWarning;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/nextSection',['jquery', 'lodash', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/messages', 'handlebars', 'taoQtiTest/runner/helpers/map'], function ($$1, _, __, hider, pluginFactory, messages, Handlebars, mapHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2015-2019 (original work) Open Assessment Technologies SA ;\n */\n var nextSection = pluginFactory({\n name: 'nextsection',\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n /**\n * Retrieve the nexSection categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getNextSectionCategories() {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n return {\n nextSection: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSection', true),\n nextSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'nextSectionWarning', true),\n noExitTimedSectionWarning: mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'noExitTimedSectionWarning', true)\n };\n }\n\n function toggle() {\n var categories = getNextSectionCategories();\n\n if (testRunnerOptions.nextSection && (categories.nextSection || categories.nextSectionWarning)) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function nextSection() {\n testRunner.next('section');\n }\n /**\n * Check if warn section leaving dialog enabled to prevent showing double dialogs\n * @returns {Boolean}\n */\n\n\n var isWarnSectionLeavingEabled = function isWarnSectionLeavingEabled() {\n var testContext = testRunner.getTestContext();\n var categories = getNextSectionCategories();\n var timeConstraints = testContext.timeConstraints || [];\n return timeConstraints.some(function (_ref) {\n var source = _ref.source;\n return source === testContext.sectionId;\n }) && !categories.noExitTimedSectionWarning && !(testRunnerOptions.timer || {}).keepUpToTimeout;\n };\n\n this.$element = $$1(buttonTpl({\n control: 'next-section',\n title: __('Skip to the next section'),\n icon: 'fast-forward',\n text: __('Next Section')\n }));\n this.$element.on('click', function (e) {\n var enable = _.bind(self.enable, self);\n\n var categories = getNextSectionCategories();\n e.preventDefault();\n\n if (self.getState('enabled') !== false) {\n self.disable();\n\n if (categories.nextSectionWarning && !isWarnSectionLeavingEabled()) {\n var submitButtonLabel = __('CONTINUE TO THE NEXT SECTION');\n\n testRunner.trigger('confirm.nextsection', messages.getExitMessage('section', testRunner, '', false, submitButtonLabel), nextSection, // if the test taker accept\n enable, // if the test taker refuse\n {\n buttons: {\n labels: {\n ok: submitButtonLabel,\n cancel: __('CANCEL')\n }\n }\n });\n } else {\n nextSection();\n }\n }\n });\n this.disable();\n toggle();\n testRunner.on('loaditem', toggle).on('enablenav', function () {\n self.enable();\n }).on('disablenav', function () {\n self.disable();\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n self.show();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n //attach the element to the navigation area\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return nextSection;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/previous',['jquery', 'lodash', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/map', 'handlebars'], function ($$1, _, __, hider, pluginFactory, shortcut, namespaceHelper, navigationHelper, mapHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var previous = pluginFactory({\n name: 'previous',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Check if the \"Previous\" functionality should be available or not\n */\n\n var canDoPrevious = function canDoPrevious() {\n var testMap = testRunner.getTestMap();\n var context = testRunner.getTestContext();\n var currentSection = testRunner.getCurrentSection();\n var noExitTimedSectionWarning = mapHelper.hasItemCategory(testMap, context.itemIdentifier, 'noExitTimedSectionWarning', true);\n var currentPart = testRunner.getCurrentPart();\n var previousSection;\n var previousPart; // check TestMap if empty\n\n if (_.isPlainObject(testMap) && _.size(testMap) === 0) {\n return false;\n } //first item of the test\n\n\n if (navigationHelper.isFirst(testMap, context.itemIdentifier)) {\n return false;\n } //first item of a section\n\n\n if (navigationHelper.isFirstOf(testMap, context.itemIdentifier, 'section')) {\n //when entering an adaptive section,\n //you can't leave the section from the beginning\n if (currentSection.isCatAdaptive) {\n return false;\n } //if the previous section is adaptive or a timed section\n\n\n previousSection = mapHelper.getItemSection(testMap, context.itemPosition - 1);\n\n if (previousSection.isCatAdaptive || previousSection.timeConstraint && !noExitTimedSectionWarning) {\n return false;\n }\n }\n\n if (navigationHelper.isFirstOf(testMap, context.itemIdentifier, 'part')) {\n //if the previous part is linear, we don't enter it too\n previousPart = mapHelper.getItemPart(testMap, context.itemPosition - 1);\n\n if (previousPart.isLinear) {\n return false;\n }\n }\n\n return currentPart.isLinear === false && context.canMoveBackward === true;\n };\n /**\n * Hide the plugin if the Previous functionality shouldn't be available\n */\n\n\n var toggle = function toggle() {\n if (canDoPrevious()) {\n self.show();\n } else {\n self.hide();\n }\n }; //build element (detached)\n\n\n this.$element = $$1(buttonTpl({\n control: 'move-backward',\n title: __('Submit and go to the previous item'),\n icon: 'backward',\n text: __('Previous')\n })); //attach behavior\n\n function doPrevious(previousItemWarning) {\n var context = testRunner.getTestContext();\n\n function enableNav() {\n testRunner.trigger('enablenav');\n }\n\n function triggerAction() {\n testRunner.previous();\n }\n\n testRunner.trigger('disablenav');\n\n if (self.getState('enabled') !== false) {\n if (previousItemWarning && context.remainingAttempts !== -1) {\n testRunner.trigger('confirm.previous', __('You are about to go to the previous item. Click OK to continue and go to the previous item.'), triggerAction, // if the test taker accept\n enableNav // if he refuses\n );\n } else {\n triggerAction();\n }\n }\n }\n\n this.$element.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('nav-previous');\n });\n\n var registerShortcut = function registerShortcut(kbdShortcut) {\n if (testRunnerOptions.allowShortcuts && kbdShortcut) {\n shortcut.add(namespaceHelper.namespaceAll(kbdShortcut, _this.getName(), true), function () {\n if (canDoPrevious() && self.getState('enabled') === true) {\n testRunner.trigger('nav-previous', [true]);\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n };\n\n registerShortcut(pluginShortcuts.trigger); //start disabled\n\n toggle();\n self.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', toggle).on('enablenav', function () {\n self.enable();\n }).on('disablenav', function () {\n self.disable();\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n self.show();\n }).on('nav-previous', function (previousItemWarning) {\n doPrevious(previousItemWarning);\n }).on('enableaccessibilitymode', function () {\n var kbdShortcut = pluginShortcuts.triggerAccessibility;\n\n if (kbdShortcut && !_this.getState('eaccessibilitymode')) {\n shortcut.remove(\".\".concat(_this.getName()));\n registerShortcut(kbdShortcut);\n\n _this.setState('eaccessibilitymode');\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return previous;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/review/navigator',['jquery', 'lodash', 'ui/component', 'ui/autoscroll', 'taoQtiTest/runner/helpers/map', 'handlebars'], function ($$1, _, component, autoscroll, mapHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n autoscroll = autoscroll && Object.prototype.hasOwnProperty.call(autoscroll, 'default') ? autoscroll['default'] : autoscroll;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n \n return \" hidden\";\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += \"\\n <div class=\\\"qti-navigator-info collapsible\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Test status\", options) : helperMissing.call(depth0, \"__\", \"Test status\", options)))\n + \"</span>\\n <span class=\\\"icon-up\\\"></span>\\n <span class=\\\"icon-down\\\"></span>\\n </span>\\n <ul class=\\\"collapsible-panel plain\\\">\\n <li class=\\\"qti-navigator-viewed\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Viewed items\", options) : helperMissing.call(depth0, \"__\", \"Viewed items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-viewed\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Viewed\", options) : helperMissing.call(depth0, \"__\", \"Viewed\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-answered\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Completed items\", options) : helperMissing.call(depth0, \"__\", \"Completed items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-answered\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Answered\", options) : helperMissing.call(depth0, \"__\", \"Answered\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-unanswered\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered items\", options) : helperMissing.call(depth0, \"__\", \"Unanswered items\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-unanswered\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered\", options) : helperMissing.call(depth0, \"__\", \"Unanswered\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n <li class=\\\"qti-navigator-flagged\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Items marked for later review\", options) : helperMissing.call(depth0, \"__\", \"Items marked for later review\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\">\\n <span class=\\\"qti-navigator-icon icon-flagged\\\"></span>\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Flagged\", options) : helperMissing.call(depth0, \"__\", \"Flagged\", options)))\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">-/-</span>\\n </span>\\n </li>\\n </ul>\\n </div>\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n \n return \"(<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n }\n\n function program7(depth0,data) {\n \n \n return \"icon-unanswered \";\n }\n\n function program9(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Unanswered\", options) : helperMissing.call(depth0, \"__\", \"Unanswered\", options)))\n + \" (<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n return buffer;\n }\n\n function program11(depth0,data) {\n \n \n return \"icon-flagged \";\n }\n\n function program13(depth0,data) {\n \n var buffer = \"\", helper, options;\n buffer += escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Flagged\", options) : helperMissing.call(depth0, \"__\", \"Flagged\", options)))\n + \" (<span class=\\\"qti-navigator-counter\\\">0</span>)\";\n return buffer;\n }\n\n buffer += \"<div class=\\\"qti-panel qti-navigator\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.hidden), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\">\\n <div class=\\\"qti-navigator-collapsible\\\">\\n <span class=\\\"qti-navigator-collapse icon icon-left\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Collapse the review panel\", options) : helperMissing.call(depth0, \"__\", \"Collapse the review panel\", options)))\n + \"\\\"></span>\\n <span class=\\\"qti-navigator-expand icon icon-right\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Expand the review panel\", options) : helperMissing.call(depth0, \"__\", \"Expand the review panel\", options)))\n + \"\\\"></span>\\n </div>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n\\n\\n <div class=\\\"qti-navigator-filters\\\">\\n <ul role=\\\"tablist\\\" class=\\\"plain clearfix\\\">\\n <li role=\\\"tab\\\" aria-selected=\\\"true\\\" class=\\\"qti-navigator-filter active\\\" data-mode=\\\"all\\\">\\n <span title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Reset filters\", options) : helperMissing.call(depth0, \"__\", \"Reset filters\", options)))\n + \"\\\" class=\\\"qti-navigator-tab\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"All\", options) : helperMissing.call(depth0, \"__\", \"All\", options)))\n + \"\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n\\n <li role=\\\"tab\\\" class=\\\"qti-navigator-filter\\\" data-mode=\\\"unanswered\\\">\\n <span class=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(7, program7, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"qti-navigator-tab\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Only display the unanswered items\", options) : helperMissing.call(depth0, \"__\", \"Only display the unanswered items\", options)))\n + \"\\\">\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n\\n <li role=\\\"tab\\\" class=\\\"qti-navigator-filter\\\" data-mode=\\\"flagged\\\">\\n <span class=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"qti-navigator-tab\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Only display the items marked for review\", options) : helperMissing.call(depth0, \"__\", \"Only display the items marked for review\", options)))\n + \"\\\">\\n \";\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.showLegend), {hash:{},inverse:self.noop,fn:self.program(13, program13, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </span>\\n </li>\\n </ul>\\n </div>\\n\\n <nav class=\\\"qti-navigator-tree\\\"></nav>\\n\\n <div id=\\\"qti-navigator-linear\\\" class=\\\"qti-navigator-linear\\\">\\n <span class=\\\"icon icon-info\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\\"></span>\\n <p class=\\\"qti-navigator-message\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\n </p>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function navigatorTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var Template$1 = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression, functionType=\"function\", self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-part collapsible \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"icon-up\\\"></span>\\n <span class=\\\"icon-down\\\"></span>\\n </span>\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.isLinear), {hash:{},inverse:self.program(8, program8, data),fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </li>\\n \";\n return buffer;\n }\n function program2(depth0,data) {\n \n \n return \"active\";\n }\n\n function program4(depth0,data) {\n \n \n return \"collapsed\";\n }\n\n function program6(depth0,data) {\n \n var buffer = \"\", stack1, helper, options;\n buffer += \"\\n <div class=\\\"qti-navigator-linear-part collapsible-panel\\\">\\n <span class=\\\"icon icon-info\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\\"></span>\\n <p class=\\\"qti-navigator-message\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"In this part of the test navigation is not allowed.\", options) : helperMissing.call(depth0, \"__\", \"In this part of the test navigation is not allowed.\", options)))\n + \"\\n </p>\\n <p class=\\\"qti-navigator-actions\\\">\\n <button class=\\\"btn-info small\\\" data-position=\\\"\";\n if (helper = helpers.position) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.position); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Start Test-part\", options) : helperMissing.call(depth0, \"__\", \"Start Test-part\", options)))\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Start Test-part\", options) : helperMissing.call(depth0, \"__\", \"Start Test-part\", options)))\n + \"</span>\\n <span class=\\\"icon-play r\\\"></span>\\n </button>\\n </p>\\n </div>\\n \";\n return buffer;\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <ul aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-navigator-sections collapsible-panel plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.sections), {hash:{},inverse:self.noop,fn:self.program(9, program9, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n \";\n return buffer;\n }\n function program9(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-section collapsible \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.program(4, program4, data),fn:self.program(2, program2, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-text\\\">\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"qti-navigator-counter\\\">\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.stats)),stack1 == null || stack1 === false ? stack1 : stack1.answered)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"/\"\n + escapeExpression(((stack1 = ((stack1 = (depth0 && depth0.stats)),stack1 == null || stack1 === false ? stack1 : stack1.total)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"</span>\\n </span>\\n <ul aria-label=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" class=\\\"qti-navigator-items collapsible-panel plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.items), {hash:{},inverse:self.noop,fn:self.programWithDepth(10, program10, data, depth0),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </ul>\\n </li>\\n \";\n return buffer;\n }\n function program10(depth0,data,depth1) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"\\n <li class=\\\"qti-navigator-item \";\n if (helper = helpers.cls) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.cls); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-id=\\\"\";\n if (helper = helpers.id) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.id); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\" data-position=\\\"\";\n if (helper = helpers.position) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.position); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-label truncate\\\" title=\\\"\";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"link\\\" aria-disabled=\\\"\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.viewed), {hash:{},inverse:self.program(13, program13, data),fn:self.program(11, program11, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.active), {hash:{},inverse:self.noop,fn:self.program(15, program15, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n aria-label=\\\"\";\n if (helper = helpers.index) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.index); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \" of \"\n + escapeExpression(((stack1 = ((stack1 = (depth1 && depth1.stats)),stack1 == null || stack1 === false ? stack1 : stack1.total)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \" \";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\">\\n <span class=\\\"qti-navigator-icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"></span>\\n <span class=\\\"qti-navigator-number\\\">\";\n if (helper = helpers.index) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.index); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n \";\n if (helper = helpers.label) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.label); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\n </span>\\n </li>\\n \";\n return buffer;\n }\n function program11(depth0,data) {\n \n \n return \"false\";\n }\n\n function program13(depth0,data) {\n \n \n return \"true\";\n }\n\n function program15(depth0,data) {\n \n \n return \"aria-current=\\\"page\\\"\";\n }\n\n buffer += \"<ul class=\\\"qti-navigator-parts plain\\\">\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.parts), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n</ul>\\n\";\n return buffer;\n });\n function navigatorTreeTpl(data, options, asString) {\n var html = Template$1(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Some default values\n * @type {Object}\n * @private\n */\n\n var _defaults = {\n scope: 'test',\n canCollapse: false,\n preventsUnseen: true,\n hidden: false\n };\n /**\n * List of CSS classes\n * @type {Object}\n * @private\n */\n\n var _cssCls = {\n active: 'active',\n collapsed: 'collapsed',\n collapsible: 'collapsible',\n hidden: 'hidden',\n disabled: 'disabled',\n flagged: 'flagged',\n answered: 'answered',\n viewed: 'viewed',\n unseen: 'unseen',\n info: 'info',\n icon: 'qti-navigator-icon',\n scope: {\n test: 'scope-test',\n testPart: 'scope-test-part',\n testSection: 'scope-test-section'\n }\n };\n /**\n * List of icon CSS classes\n * @type {Array}\n * @private\n */\n\n var _iconCls = [_cssCls.info, _cssCls.flagged, _cssCls.answered, _cssCls.viewed];\n /**\n * List of common CSS selectors\n * @type {Object}\n * @private\n */\n\n var _selectors = {\n component: '.qti-navigator',\n filterBar: '.qti-navigator-filters',\n filter: '.qti-navigator-filter',\n tree: '.qti-navigator-tree',\n collapseHandle: '.qti-navigator-collapsible',\n linearState: '.qti-navigator-linear',\n infoAnswered: '.qti-navigator-answered .qti-navigator-counter',\n infoViewed: '.qti-navigator-viewed .qti-navigator-counter',\n infoUnanswered: '.qti-navigator-unanswered .qti-navigator-counter',\n infoFlagged: '.qti-navigator-flagged .qti-navigator-counter',\n infoPanel: '.qti-navigator-info',\n infoPanelLabels: '.qti-navigator-info > .qti-navigator-label',\n tabInfoAll: '[data-mode=\"all\"] .qti-navigator-counter',\n tabInfoUnanswered: '[data-mode=\"unanswered\"] .qti-navigator-counter',\n tabInfoFlagged: '[data-mode=\"flagged\"] .qti-navigator-counter',\n parts: '.qti-navigator-part',\n partLabels: '.qti-navigator-part > .qti-navigator-label',\n sections: '.qti-navigator-section',\n sectionLabels: '.qti-navigator-section > .qti-navigator-label',\n items: '.qti-navigator-item',\n itemLabels: '.qti-navigator-item > .qti-navigator-label',\n itemIcons: '.qti-navigator-item > .qti-navigator-icon',\n activeItem: '.qti-navigator-item.active',\n icons: '.qti-navigator-icon',\n linearStart: '.qti-navigator-linear-part button',\n counters: '.qti-navigator-counter',\n actives: '.active',\n collapsible: '.collapsible',\n collapsiblePanels: '.collapsible-panel',\n unseen: '.unseen',\n answered: '.answered',\n flagged: '.flagged',\n notFlagged: ':not(.flagged)',\n notAnswered: ':not(.answered)',\n notInformational: ':not(.info)',\n informational: '.info',\n hidden: '.hidden',\n disabled: '.disabled'\n };\n /**\n * Maps the filter mode to filter criteria.\n * Each filter criteria is a CSS selector used to find and mask the items to be discarded by the filter.\n * @type {Object}\n * @private\n */\n\n var _filterMap = {\n all: '',\n unanswered: [_selectors.answered, _selectors.informational].join(','),\n flagged: _selectors.notFlagged,\n answered: _selectors.notAnswered,\n filtered: _selectors.hidden\n };\n /**\n *\n * @type {Object}\n */\n\n var navigatorApi = {\n /**\n * Updates the stats on the flagged items in the current map\n * @param {Number} position\n * @param {Boolean} flag\n */\n updateStats: function updateStats(position, flag) {\n var map = this.map;\n var item;\n\n if (map) {\n item = mapHelper.getItemAt(map, position);\n\n if (item) {\n item.flagged = flag;\n mapHelper.updateItemStats(map, position);\n }\n }\n },\n\n /**\n * Gets the total number of items for the provided target\n * @param {Object} progression\n * @param {String} target\n * @returns {Number}\n */\n getProgressionTotal: function getProgressionTotal(progression, target) {\n var total;\n\n if ('questions' === target) {\n total = progression.questions;\n } else {\n total = progression.total;\n }\n\n return total;\n },\n\n /**\n * Set the marked state of an item\n * @param {Number|String|jQuery} position\n * @param {Boolean} flag\n */\n setItemFlag: function setItemFlag(position, flag) {\n var $item = position && position.jquery ? position : this.controls.$tree.find(\"[data-position=\".concat(position, \"]\"));\n var progression = this.progression;\n var icon; // update the map stats\n\n this.updateStats(position, flag); // update the item flag\n\n $item.toggleClass(_cssCls.flagged, flag); // set the item icon according to its state\n\n icon = _.find(_iconCls, _.bind($item.hasClass, $item)) || _cssCls.unseen;\n $item.find(_selectors.icons).attr('class', \"\".concat(_cssCls.icon, \" icon-\").concat(icon)); // update the info panel\n\n progression.flagged = this.controls.$tree.find(_selectors.flagged).length;\n this.writeCount(this.controls.$infoFlagged, progression.flagged, this.getProgressionTotal(progression, 'questions')); // recompute the filters\n\n this.filter(this.currentFilter);\n },\n\n /**\n * Filters the items by a criteria\n * @param {String} criteria\n */\n filter: function filter(criteria) {\n var self = this; // remove the current filter by restoring all items\n\n var $items = this.controls.$tree.find(_selectors.items).removeClass(_cssCls.hidden); // filter the items according to the provided criteria\n\n var filterCb = _filterMap[criteria];\n\n if (filterCb) {\n $items.filter(filterCb).addClass(_cssCls.hidden);\n } // update the section counters\n\n\n this.controls.$tree.find(_selectors.sections).each(function () {\n var $section = $$1(this);\n var $itemsFound = $section.find(_selectors.items).not(_selectors.hidden);\n var $filtered = $itemsFound.not(_selectors.disabled);\n self.writeCount($section.find(_selectors.counters), $filtered.length, $itemsFound.length);\n });\n this.currentFilter = criteria;\n },\n\n /**\n * Update the config\n * @param {Object} [config]\n * @returns {navigatorApi}\n */\n updateConfig: function updateConfig(config) {\n var $component = this.getElement();\n var scopeClass = _cssCls.scope[this.config.scope || _defaults.scope]; // apply the new config\n\n config = _.merge(this.config, config || {}); // enable/disable the collapsing of the panel\n\n $component.toggleClass(_cssCls.collapsible, config.canCollapse); // update the component CSS class according to the scope\n\n $component.removeClass(scopeClass);\n scopeClass = _cssCls.scope[this.config.scope || _defaults.scope];\n $component.addClass(scopeClass);\n return this;\n },\n\n /**\n * Keep the active item visible, auto scroll if needed\n */\n autoScroll: function autoScroll() {\n autoscroll(this.controls.$tree.find(_selectors.activeItem), this.controls.$tree);\n },\n\n /**\n * Updates the review screen\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {navigatorApi}\n * @fires navigator#update\n */\n update: function update(map, context) {\n var scopedMap = this.getScopedMap(map, context);\n var testPart = mapHelper.getPart(map, context.testPartId);\n var progression = scopedMap.stats || {\n questions: 0,\n answered: 0,\n flagged: 0,\n viewed: 0,\n total: 0\n };\n var totalQuestions = this.getProgressionTotal(progression, 'questions');\n this.map = map;\n this.progression = progression; // update the info panel\n\n this.writeCount(this.controls.$infoAnswered, progression.answered, totalQuestions);\n this.writeCount(this.controls.$infoUnanswered, totalQuestions - progression.answered, totalQuestions);\n this.writeCount(this.controls.$infoViewed, progression.viewed, this.getProgressionTotal(progression, 'total'));\n this.writeCount(this.controls.$infoFlagged, progression.flagged, totalQuestions);\n this.writeCount(this.controls.$infoAll, totalQuestions, null); // rebuild the tree\n\n if (!testPart.isLinear) {\n this.controls.$filterBar.show();\n this.controls.$linearState.hide();\n this.controls.$tree.html(navigatorTreeTpl(scopedMap));\n this.autoScroll();\n var activeItem = mapHelper.getActiveItem(scopedMap);\n this.setState('prevents-unseen', this.config.preventsUnseen);\n var isSkipaheadEnabled = activeItem && activeItem.categories && _.indexOf(activeItem.categories, 'x-tao-option-review-skipahead') >= 0;\n this.setState('skipahead-enabled', isSkipaheadEnabled);\n\n if (this.config.preventsUnseen && !isSkipaheadEnabled) {\n // disables all unseen items to prevent the test taker has access to.\n this.controls.$tree.find(_selectors.unseen).addClass(_cssCls.disabled);\n }\n } else {\n this.controls.$filterBar.hide();\n this.controls.$linearState.show();\n this.controls.$tree.empty();\n } // apply again the current filter\n\n\n this.filter(this.controls.$filters.filter(_selectors.actives).data('mode'));\n /**\n * @event navigator#update the navigation data have changed\n */\n\n this.trigger('update');\n return this;\n },\n\n /**\n * Gets the scoped map\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {object} The scoped map\n */\n getScopedMap: function getScopedMap(map, context) {\n var scopedMap = mapHelper.getScopeMapFromContext(map, context, this.config.scope);\n var testPart = mapHelper.getPart(scopedMap, context.testPartId) || {};\n var section = mapHelper.getSection(scopedMap, context.sectionId) || {};\n var item = mapHelper.getItem(scopedMap, context.itemIdentifier) || {}; // set the active part/section/item\n\n testPart.active = true;\n section.active = true;\n item.active = true; // adjust each item with additional meta\n\n return mapHelper.each(scopedMap, function (itm) {\n var cls = [];\n var icon = '';\n\n if (itm.active) {\n cls.push('active');\n }\n\n if (itm.informational) {\n cls.push('info');\n icon = icon || 'info';\n }\n\n if (itm.flagged) {\n cls.push('flagged');\n icon = icon || 'flagged';\n }\n\n if (itm.answered) {\n cls.push('answered');\n icon = icon || 'answered';\n }\n\n if (itm.viewed) {\n cls.push('viewed');\n icon = icon || 'viewed';\n } else {\n cls.push('unseen');\n icon = icon || 'unseen';\n }\n\n itm.cls = cls.join(' ');\n itm.icon = icon;\n });\n },\n\n /**\n * Updates a counter\n * @param {jQuery} $place\n * @param {Number} count\n * @param {Number|Null} total\n * @private\n */\n writeCount: function writeCount($place, count, total) {\n var display = 0;\n\n if ($place.parent().hasClass('qti-navigator-tab')) {\n display = Math.max(count, 0);\n } else if (total > 0) {\n display = \"\".concat(Math.min(count, total), \"/\").concat(total);\n }\n\n $place.text(display);\n },\n\n /**\n * Selects an item\n * @param {String|jQuery} position The item's position\n * @param {Boolean} [open] Forces the tree to be opened on the selected item\n * @returns {jQuery} Returns the selected item\n */\n select: function select(position, open) {\n // find the item to select and extract its hierarchy\n var $tree = this.controls.$tree;\n var selected = position && position.jquery ? position : $tree.find(\"[data-position=\".concat(position, \"]\"));\n var hierarchy = selected.parentsUntil($tree);\n var previousPosition = 0;\n var $previous = $tree.find(_selectors.activeItem);\n\n if ($previous.length) {\n previousPosition = $previous.data('position');\n } // collapse the full tree and open only the hierarchy of the selected item\n\n\n if (open) {\n this.openOnly(hierarchy);\n } // select the item\n\n\n $tree.find(_selectors.actives).removeClass(_cssCls.active);\n hierarchy.add(selected).addClass(_cssCls.active);\n position = selected.data('position');\n /**\n * An item is selected\n *\n * @param {Number} position - The item position on which select\n * @param {Number} previousPosition - The item position from which select\n * @event navigator#selected\n */\n\n this.trigger('selected', position, previousPosition);\n return selected;\n },\n\n /**\n * Opens the tree on the selected item only\n * @returns {jQuery} Returns the selected item\n */\n openSelected: function openSelected() {\n // find the selected item and extract its hierarchy\n var $tree = this.controls.$tree;\n var selected = $tree.find(_selectors.items + _selectors.actives);\n var hierarchy = selected.parentsUntil($tree); // collapse the full tree and open only the hierarchy of the selected item\n\n this.openOnly(hierarchy);\n return selected;\n },\n\n /**\n * Collapses the full tree and opens only the provided branch\n * @param {jQuery} opened The element to be opened\n * @param {jQuery} [root] The root element from which collapse the panels\n */\n openOnly: function openOnly(opened, root) {\n (root || this.controls.$tree).find(_selectors.collapsible).addClass(_cssCls.collapsed);\n opened.removeClass(_cssCls.collapsed);\n },\n\n /**\n * Toggles a panel\n * @param {jQuery} panel The panel to toggle\n * @param {String} [collapseSelector] Selector of panels to collapse\n * @returns {Boolean} Returns `true` if the panel just expanded now\n */\n togglePanel: function togglePanel(panel, collapseSelector) {\n var collapsed = panel.hasClass(_cssCls.collapsed);\n\n if (collapseSelector) {\n this.controls.$tree.find(collapseSelector).addClass(_cssCls.collapsed);\n }\n\n if (collapsed) {\n panel.removeClass(_cssCls.collapsed);\n } else {\n panel.addClass(_cssCls.collapsed);\n }\n\n return collapsed;\n },\n\n /**\n * Toggles the display state of the component\n * @param {Boolean} [show] External condition that's tells if the component must be shown or hidden\n * @returns {navigatorApi}\n */\n toggle: function toggle(show) {\n if (typeof show === 'undefined') {\n show = this.is('hidden');\n }\n\n if (show) {\n this.show();\n } else {\n this.hide();\n }\n\n return this;\n }\n };\n /**\n *\n * @param {Object} config\n * @param {String} [config.scope] Limit the review screen to a particular scope: test, testPart, testSection\n * @param {Boolean} [config.preventsUnseen] Prevents the test taker to access unseen items\n * @param {Boolean} [config.canCollapse] Allow the test taker to collapse the component\n * @param {Boolean} [config.canFlag] Allow the test taker to flag items\n * @param {Boolean} [config.hidden] Hide the component at init\n * @param {Object} map The current test map\n * @param {Object} context The current test context\n * @returns {*}\n */\n\n function navigatorFactory(config, map, context) {\n var navigator;\n /**\n * Flags an item\n * @param {jQuery} $item\n */\n\n function flagItem($item) {\n var position = $item.data('position');\n var flagged = !$item.hasClass(_cssCls.flagged); // update the display\n\n navigator.setItemFlag(position, flagged);\n /**\n * An item is flagged\n * @event navigator#flag\n * @param {Number} position - The item position on which jump\n * @param {Boolean} flag - Tells whether the item is marked for review or not\n */\n\n navigator.trigger('flag', position, flagged);\n }\n /**\n * Jumps to an item\n * @param {jQuery} $item\n * @private\n */\n\n\n function jump($item) {\n var position = $item.data('position');\n /**\n * A jump to a particular item is required\n * @event navigator#jump\n * @param {Number} position - The item position on which jump\n */\n\n navigator.trigger('jump', position);\n }\n\n navigator = component(navigatorApi, _defaults).setTemplate(navigatorTpl) // uninstalls the component\n .on('destroy', function () {\n this.controls = null;\n }) // keep the activ item visible\n .on('show', function () {\n this.autoScroll();\n }) // renders the component\n .on('render', function () {\n var self = this; // main component elements\n\n var $component = this.getElement();\n var $filterBar = $component.find(_selectors.filterBar);\n var $filters = $filterBar.find('li');\n var $tree = $component.find(_selectors.tree); // links the component to the underlying DOM elements\n\n this.controls = {\n // access to info panel displaying counters\n $infoAnswered: $component.find(_selectors.infoAnswered),\n $infoViewed: $component.find(_selectors.infoViewed),\n $infoAll: $component.find(_selectors.tabInfoAll),\n $infoUnanswered: this.config.showLegend ? $component.find(_selectors.infoUnanswered) : $component.find(_selectors.tabInfoUnanswered),\n $infoFlagged: this.config.showLegend ? $component.find(_selectors.infoFlagged) : $component.find(_selectors.tabInfoFlagged),\n // access to filter switches\n $filterBar: $filterBar,\n $filters: $filters,\n // access to the tree of parts/sections/items\n $tree: $tree,\n // access to the panel displayed when a linear part is reached\n $linearState: $component.find(_selectors.linearState)\n }; // apply options\n\n this.updateConfig(); // click on the collapse handle: collapse/expand the review panel\n\n $component.on(\"click\".concat(_selectors.component), _selectors.collapseHandle, function () {\n if (!self.is('disabled')) {\n $component.toggleClass(_cssCls.collapsed);\n\n if ($component.hasClass(_cssCls.collapsed)) {\n self.openSelected();\n }\n }\n }); // click on the info panel title: toggle the related panel\n\n $component.on(\"click\".concat(_selectors.component), _selectors.infoPanelLabels, function () {\n if (!self.is('disabled')) {\n self.togglePanel($$1(this).closest(_selectors.infoPanel), _selectors.infoPanel);\n }\n }); // click on a part title: toggle the related panel\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.partLabels, function () {\n var $panel;\n\n if (!self.is('disabled')) {\n $panel = $$1(this).closest(_selectors.parts);\n\n if (self.togglePanel($panel, _selectors.parts)) {\n if ($panel.hasClass(_cssCls.active)) {\n self.openSelected();\n } else {\n self.openOnly($panel.find(_selectors.sections).first(), $panel);\n }\n }\n }\n }); // click on a section title: toggle the related panel\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.sectionLabels, function () {\n if (!self.is('disabled')) {\n self.togglePanel($$1(this).closest(_selectors.sections), _selectors.sections);\n }\n }); // click on an item: jump to the position\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.itemLabels, function (event) {\n var $item, $target;\n\n if (!self.is('disabled')) {\n $item = $$1(this).closest(_selectors.items);\n\n if (!$item.hasClass(_cssCls.disabled)) {\n $target = $$1(event.target);\n\n if (self.config.canFlag && $target.is(_selectors.icons) && !$component.hasClass(_cssCls.collapsed)) {\n // click on the icon, just flag the item, unless the panel is collapsed\n if (!$item.hasClass(_cssCls.unseen) && !$item.hasClass(_cssCls.info)) {\n flagItem($item);\n }\n } else if (!$item.hasClass(_cssCls.active)) {\n // go to the selected item\n self.select($item);\n jump($item);\n }\n }\n }\n }); // click on the start button inside a linear part: jump to the position\n\n $tree.on(\"click\".concat(_selectors.component), _selectors.linearStart, function () {\n var $btn;\n\n if (!self.is('disabled')) {\n $btn = $$1(this); // go to the first item of the linear part\n\n if (!$btn.hasClass(_cssCls.disabled)) {\n $btn.addClass(_cssCls.disabled);\n jump($btn);\n }\n }\n }); // click on a filter button\n\n $filterBar.on(\"click\".concat(_selectors.component), _selectors.filter, function () {\n var $btn, mode;\n\n if (!self.is('disabled')) {\n $btn = $$1(this);\n mode = $btn.data('mode'); // select the button\n\n $filters.removeClass(_cssCls.active);\n $filters.attr('aria-selected', false);\n $component.removeClass(_cssCls.collapsed);\n $btn.addClass(_cssCls.active);\n $btn.attr('aria-selected', true); // filter the items\n\n self.filter(mode); //after filtering, ensure that the active item (if exists) is visible\n\n self.autoScroll();\n }\n });\n this.update(map, context);\n }); // set default filter\n\n navigator.currentFilter = 'all'; // the component will be ready\n\n return navigator.init(config);\n }\n\n return navigatorFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/review/review',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/navigation/review/navigator'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, mapHelper, navigatorFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n navigatorFactory = navigatorFactory && Object.prototype.hasOwnProperty.call(navigatorFactory, 'default') ? navigatorFactory['default'] : navigatorFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display states of the buttons\n */\n\n var buttonData = {\n setFlag: {\n control: 'set-item-flag',\n title: __('Flag the current item for later review'),\n icon: 'anchor',\n text: __('Flag for Review')\n },\n unsetFlag: {\n control: 'unset-item-flag',\n title: __('Do not flag the current item for later review'),\n icon: 'anchor',\n text: __('Unflag for Review')\n },\n showReview: {\n control: 'show-review',\n title: __('Show the review screen'),\n icon: 'right',\n text: __('Show Review')\n },\n hideReview: {\n control: 'hide-review',\n title: __('Hide the review screen'),\n icon: 'left',\n text: __('Hide Review')\n }\n };\n /**\n * Gets the definition of the flagItem button related to the context\n * @param {Boolean} flag - the flag status\n * @returns {Object}\n */\n\n function getFlagItemButtonData(flag) {\n var dataType = flag ? 'unsetFlag' : 'setFlag';\n return buttonData[dataType];\n }\n /**\n * Get the flagged value for the item at that position\n * @param {Object} testMap\n * @param {Number} position - the item position\n * @returns {Boolean}\n */\n\n\n function isItemFlagged(testMap, position) {\n var item = mapHelper.getItemAt(testMap, position);\n return !!item.flagged;\n }\n /**\n * Gets the definition of the toggleNavigator button related to the context\n * @param {Object} navigator - the navigator component\n * @returns {Object}\n */\n\n\n function getToggleButtonData(navigator) {\n var dataType = navigator.is('hidden') ? 'showReview' : 'hideReview';\n return buttonData[dataType];\n }\n /**\n * Update the button based on the provided data\n * @param {Component} button - the element to update\n * @param {Object} data - the button data\n */\n\n\n function updateButton(button, data) {\n var $button = button.getElement();\n\n if (button.is('rendered')) {\n if ($button.data('control') !== data.control) {\n $button.data('control', data.control).attr('title', data.title);\n $button.find('.icon').attr('class', \"icon icon-\".concat(data.icon));\n $button.find('.text').text(data.text);\n\n if (_.contains(data.control, 'flag')) {\n if (button.is('active')) {\n button.turnOff();\n } else {\n button.turnOn();\n }\n }\n }\n }\n }\n /**\n * Checks if the current context allows to mark the item for review\n * @param {Object} testRunner\n * @returns {Boolean}\n */\n\n\n function canFlag(testRunner) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var item = testRunner.getCurrentItem();\n var testPart = testRunner.getCurrentPart();\n var markReviewCategory = mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'markReview', true);\n return !!(!testPart.isLinear && markReviewCategory && !(item && item.informational));\n }\n /**\n * Creates the timer plugin\n */\n\n\n var review = pluginFactory({\n name: 'review',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var navigatorConfig = testRunnerOptions.review || {\n defaultOpen: false\n };\n var previousItemPosition;\n /**\n * Retrieve the review categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getReviewCategories() {\n var currentContext = testRunner.getTestContext();\n var currentMap = testRunner.getTestMap();\n return {\n reviewScreen: mapHelper.hasItemCategory(currentMap, currentContext.itemIdentifier, 'reviewScreen', true),\n markReview: mapHelper.hasItemCategory(currentMap, currentContext.itemIdentifier, 'markReview', true)\n };\n }\n /**\n * Tells if the component is enabled\n * @returns {Boolean}\n */\n\n\n function isPluginAllowed() {\n var categories = getReviewCategories();\n return navigatorConfig.enabled && categories.reviewScreen;\n }\n /**\n * Mark an item for review\n * @param {Number} position\n * @param {Boolean} flag\n * @returns {Promise}\n */\n\n\n function flagItem(position, flag) {\n self.disable();\n return testRunner.getProxy().callTestAction('flagItem', {\n position: position,\n flag: flag\n }).then(function () {\n var item = mapHelper.getItemAt(testRunner.getTestMap(), position); //update the value in the current testMap\n\n item.flagged = flag; // update the display of the flag button\n\n updateButton(self.flagItemButton, getFlagItemButtonData(flag)); // update the item state\n\n self.navigator.setItemFlag(position, flag);\n self.enable();\n }).catch(function () {\n // rollback on the item flag\n self.navigator.setItemFlag(position, !flag);\n self.enable();\n });\n }\n /**\n * Mark the current item for review\n */\n\n\n function flagCurrentItem() {\n if (self.getState('enabled') !== false) {\n var itemPosition = testRunner.getTestContext().itemPosition;\n var flagStatus = isItemFlagged(testRunner.getTestMap(), itemPosition);\n flagItem(itemPosition, !flagStatus);\n }\n }\n /**\n * Shows/hides the review panel\n *\n * @param [{Boolean} forcedState], true will show the panel\n */\n\n\n function togglePanel(forcedState) {\n var isHidden = _.isUndefined(forcedState) ? self.navigator.is('hidden') : forcedState;\n\n if (isHidden) {\n self.explicitlyHidden = false;\n self.navigator.show();\n } else {\n self.explicitlyHidden = true;\n self.navigator.hide();\n }\n\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n }\n\n this.navigator = navigatorFactory(navigatorConfig, testMap, testContext).on('selected', function (position, previousPosition) {\n previousItemPosition = previousPosition;\n }).on('jump', function (position) {\n if (self.getState('enabled') !== false) {\n self.disable();\n testRunner.jump(position, 'item');\n }\n }).on('flag', function (position, flag) {\n if (self.getState('enabled') !== false) {\n flagItem(position, flag);\n }\n }).render(); // restore current item in the navigator if movement not allowed\n\n testRunner.on('alert.notallowed', function () {\n self.navigator.select(previousItemPosition);\n });\n this.explicitlyHidden = false; // register buttons in the toolbox component\n\n this.toggleButton = this.getAreaBroker().getToolbox().createEntry(getToggleButtonData(this.navigator));\n this.toggleButton.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-reviewpanel');\n });\n this.flagItemButton = this.getAreaBroker().getToolbox().createEntry(getFlagItemButtonData(isItemFlagged(testMap, testContext.itemPosition)));\n this.flagItemButton.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-flagitem');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.flag) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.flag, this.getName(), true), function () {\n testRunner.trigger('tool-flagitem');\n }, {\n avoidInput: true\n });\n }\n\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-reviewpanel');\n }, {\n avoidInput: true\n });\n }\n }\n\n if (!isPluginAllowed()) {\n this.hide();\n } //disabled by default\n\n\n this.disable();\n togglePanel(navigatorConfig.defaultOpen); //change plugin state\n\n testRunner.on('render', function () {\n if (isPluginAllowed()) {\n self.show();\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n } else {\n self.hide();\n }\n }).on('loaditem', function () {\n var context = testRunner.getTestContext();\n var map = testRunner.getTestMap();\n var testPart = testRunner.getCurrentPart();\n var categories = getReviewCategories();\n\n if (isPluginAllowed()) {\n updateButton(self.flagItemButton, getFlagItemButtonData(isItemFlagged(map, context.itemPosition)));\n self.navigator.update(map, context).updateConfig({\n canFlag: !testPart.isLinear && categories.markReview\n });\n self.show();\n updateButton(self.toggleButton, getToggleButtonData(self.navigator));\n } else {\n self.hide();\n }\n }).on('enabletools enablenav', function () {\n if (isPluginAllowed()) {\n self.enable();\n }\n }).on('disabletools disablenav', function () {\n if (isPluginAllowed()) {\n self.disable();\n }\n }).on('hidenav', function () {\n self.hide();\n }).on('shownav', function () {\n if (isPluginAllowed()) {\n self.show();\n }\n }).on('tool-flagitem', function () {\n if (isPluginAllowed() && canFlag(testRunner)) {\n flagCurrentItem();\n }\n }).on('tool-reviewpanel', function () {\n if (isPluginAllowed() && self.getState('enabled')) {\n togglePanel();\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var areaBroker = this.getAreaBroker();\n var $panelContainer = areaBroker.getPanelArea();\n $panelContainer.append(this.navigator.getElement());\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.navigator.destroy();\n },\n\n /**\n * Enables the button\n */\n enable: function enable() {\n var testRunner = this.getTestRunner();\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n this.flagItemButton.enable();\n this.toggleButton.enable();\n this.navigator.enable();\n\n if (isItemFlagged(testMap, testContext.itemPosition)) {\n this.flagItemButton.turnOn();\n } else {\n this.flagItemButton.turnOff();\n }\n },\n\n /**\n * Disables the button\n */\n disable: function disable() {\n this.flagItemButton.disable();\n this.flagItemButton.turnOff();\n this.toggleButton.disable();\n this.navigator.disable();\n },\n\n /**\n * Shows the button\n */\n show: function show() {\n var testRunner = this.getTestRunner();\n\n if (canFlag(testRunner)) {\n this.flagItemButton.show();\n } else {\n this.flagItemButton.hide();\n }\n\n this.toggleButton.show();\n\n if (!this.explicitlyHidden) {\n this.navigator.show();\n } else {\n this.navigator.hide();\n }\n },\n\n /**\n * Hides the button\n */\n hide: function hide() {\n this.flagItemButton.hide();\n this.toggleButton.hide();\n this.navigator.hide();\n }\n });\n\n return review;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/skip',['jquery', 'i18n', 'ui/hider', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/messages', 'handlebars', 'taoQtiTest/runner/helpers/navigation', 'taoQtiTest/runner/helpers/map'], function ($$1, __, hider, pluginFactory, messages, Handlebars, navigationHelper, mapHelper) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n messages = messages && Object.prototype.hasOwnProperty.call(messages, 'default') ? messages['default'] : messages;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n navigationHelper = navigationHelper && Object.prototype.hasOwnProperty.call(navigationHelper, 'default') ? navigationHelper['default'] : navigationHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression, self=this;\n\n function program1(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \" \";\n if (helper = helpers.className) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.className); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n return buffer;\n }\n\n function program3(depth0,data) {\n \n var buffer = \"\", stack1;\n buffer += \"\\n aria-\"\n + escapeExpression(((stack1 = (data == null || data === false ? data : data.key)),typeof stack1 === functionType ? stack1.apply(depth0) : stack1))\n + \"=\\\"\"\n + escapeExpression((typeof depth0 === functionType ? depth0.apply(depth0) : depth0))\n + \"\\\"\\n \";\n return buffer;\n }\n\n function program5(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"icon icon-\";\n if (helper = helpers.icon) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.icon); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1);\n stack1 = helpers.unless.call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(6, program6, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"></span>\";\n return buffer;\n }\n function program6(depth0,data) {\n \n \n return \" no-label\";\n }\n\n function program8(depth0,data) {\n \n var buffer = \"\", stack1, helper;\n buffer += \"<span class=\\\"text\\\">\";\n if (helper = helpers.text) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.text); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\";\n return buffer;\n }\n\n buffer += \"<li\\n data-control=\\\"\";\n if (helper = helpers.control) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.control); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n class=\\\"small btn-info action\";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.className), {hash:{},inverse:self.noop,fn:self.program(1, program1, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\\"\\n title=\\\"\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"\\\"\\n role=\\\"button\\\"\\n \";\n stack1 = helpers.each.call(depth0, (depth0 && depth0.aria), {hash:{},inverse:self.noop,fn:self.program(3, program3, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n>\\n <a class=\\\"li-inner\\\" href=\\\"#\\\" onclick=\\\"return false\\\" aria-hidden=\\\"true\\\" >\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.icon), {hash:{},inverse:self.noop,fn:self.program(5, program5, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n \";\n stack1 = helpers['if'].call(depth0, (depth0 && depth0.text), {hash:{},inverse:self.noop,fn:self.program(8, program8, data),data:data});\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"\\n </a>\\n</li>\\n\";\n return buffer;\n });\n function buttonTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The display of the skip\n */\n\n var buttonData = {\n skip: {\n control: 'skip',\n title: __('Skip and go to the next item'),\n icon: 'external',\n text: __('Skip')\n },\n end: {\n control: 'skip-end',\n title: __('Skip and go to the end of the test'),\n icon: 'external',\n text: __('Skip and end test')\n }\n };\n /**\n * Create the button based on the current context\n * @param {Object} testRunner - testRunner\n * @returns {jQueryElement} the button\n */\n\n var createElement = function createElement(testRunner) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n var dataType = isLast ? 'end' : 'skip';\n return $$1(buttonTpl(buttonData[dataType]));\n };\n /**\n * Update the button based on the context\n * @param {jQueryElement} $element - the element to update\n * @param {Boolean} [isLast=false] - are we on the last item ?\n */\n\n\n var updateElement = function updateElement($element) {\n var isLast = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var dataType = isLast ? 'end' : 'skip';\n var button = buttonData[dataType];\n\n if (button && $element.attr('data-control') !== button.control) {\n $element.attr('data-control', button.control).attr('title', button.title).find('.text').text(button.text);\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var skip = pluginFactory({\n name: 'skip',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n\n var toggle = function toggle() {\n var testContext = testRunner.getTestContext();\n\n if (testContext.allowSkipping === true) {\n _this.show();\n\n return true;\n }\n\n _this.hide();\n\n return false;\n };\n\n function doSkip() {\n testRunner.skip();\n }\n\n this.$element = createElement(testRunner);\n this.$element.on('click', function (e) {\n var enable = _this.enable.bind(_this);\n\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n var endTestWarning = mapHelper.hasItemCategory(testMap, testContext.itemIdentifier, 'endTestWarning', true);\n e.preventDefault();\n\n if (_this.getState('enabled') !== false) {\n _this.disable();\n\n if (endTestWarning && isLast) {\n testRunner.trigger('confirm.endTest', messages.getExitMessage('test', testRunner), doSkip, // if the test taker accept\n enable // if the test taker refuse\n );\n } else {\n doSkip();\n }\n }\n });\n toggle();\n this.disable();\n testRunner.on('loaditem', function () {\n if (toggle()) {\n var testContext = testRunner.getTestContext();\n var testMap = testRunner.getTestMap();\n var isLast = navigationHelper.isLast(testMap, testContext.itemIdentifier);\n updateElement(_this.$element, isLast);\n }\n }).on('enablenav', function () {\n return _this.enable();\n }).on('disablenav', function () {\n return _this.disable();\n }).on('hidenav', function () {\n return _this.hide();\n }).on('shownav', function () {\n return _this.show();\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var $container = this.getAreaBroker().getNavigationArea();\n $container.append(this.$element);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.$element.remove();\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.$element.removeProp('disabled').removeClass('disabled');\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.$element.prop('disabled', true).addClass('disabled');\n },\n\n /**\n * Show the button\n */\n show: function show() {\n hider.show(this.$element);\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hider.hide(this.$element);\n }\n });\n\n return skip;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/validateResponses',['lodash', 'i18n', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/currentItem'], function (_, __, pluginFactory, currentItemHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n currentItemHelper = currentItemHelper && Object.prototype.hasOwnProperty.call(currentItemHelper, 'default') ? currentItemHelper['default'] : currentItemHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017-2019 (original work) Open Assessment Technologies SA ;\n */\n var pluginName = 'validateResponses';\n /**\n * Plugin\n * @returns {Object}\n */\n\n var validateResponses = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: pluginName,\n\n /**\n * Initialize plugin (called during runner's initialization)\n * @returns {this}\n */\n init: function init() {\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = this.getConfig();\n testRunner.before('move', function (e, direction) {\n var testContext = testRunner.getTestContext();\n var isInteracting = !testRunner.getItemState(testContext.itemIdentifier, 'disabled');\n\n if (!pluginConfig.validateOnPreviousMove && direction === 'previous') {\n return Promise.resolve();\n }\n\n if (isInteracting && testRunnerOptions.enableValidateResponses) {\n var currenItem = testRunner.getCurrentItem(); //@deprecated use validateResponses from testMap instead of the testContext\n\n var validateResponses = typeof currenItem.validateResponses === 'boolean' ? currenItem.validateResponses : testContext.validateResponses;\n\n if (validateResponses) {\n return new Promise(function (resolve, reject) {\n if (_.size(currentItemHelper.getDeclarations(testRunner)) === 0) {\n return resolve();\n }\n\n if (currentItemHelper.isAnswered(testRunner, false)) {\n return resolve();\n }\n\n if (!testRunner.getState('alerted.notallowed')) {\n // Only show one alert for itemSessionControl\n testRunner.setState('alerted.notallowed', true);\n testRunner.trigger('alert.notallowed', __('A valid response to this item is required.'), function () {\n testRunner.trigger('resumeitem');\n reject();\n testRunner.setState('alerted.notallowed', false);\n });\n }\n });\n }\n }\n });\n return this;\n }\n });\n\n return validateResponses;\n\n});\n\n","define('taoQtiTest/runner/plugins/navigation/warnBeforeLeaving',['i18n', 'taoTests/runner/plugin'], function (__, pluginFactory) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA ;\n */\n /**\n * There's only a few chance to have this message displayed.\n * Most browsers doesn't support custom message anymore.\n * See https://www.chromestatus.com/feature/5349061406228480\n */\n\n var warnMessage = __('Please confirm you want to leave the test.');\n /**\n * The beforeunload listener\n * @param {Event} e\n * @returns {String} the custom message (for some browser, just need to be a string)\n */\n\n\n var warnListener = function warnListener(e) {\n e.returnValue = warnMessage;\n return warnMessage;\n };\n /**\n * Plugin factory\n * @returns {Object}\n */\n\n\n var warnBeforeLeaving = pluginFactory({\n /**\n * Plugin name\n * @type {String}\n */\n name: 'warnBeforeLeaving',\n\n /**\n * Initialize plugin (called during runner's initialization)\n */\n init: function init() {\n this.enable();\n },\n\n /**\n * Destroy plugin (called during runner's destruction)\n */\n destroy: function destroy() {\n this.disable();\n },\n\n /**\n * Enables the warning\n */\n enable: function enable() {\n window.addEventListener('beforeunload', warnListener);\n },\n\n /**\n * Disables the warning\n */\n disable: function disable() {\n window.removeEventListener('beforeunload', warnListener);\n }\n });\n\n return warnBeforeLeaving;\n\n});\n\n","define('taoQtiTest/runner/plugins/security/disableRightClick',['taoTests/runner/plugin'], function (pluginFactory) { 'use strict';\n\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n var disableRightClick = pluginFactory({\n name: 'disableRightClick',\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var rightClickEvents = ['contextmenu', 'mousedown', 'mouseup'];\n rightClickEvents.forEach(function (eventName) {\n window.document.addEventListener(eventName, function disableRightClick(event) {\n if (event.button === 2) {\n event.preventDefault();\n }\n });\n });\n }\n });\n\n return disableRightClick;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerElimination/eliminator',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoTests/runner/plugin'], function (_, __, hider, shortcut, namespaceHelper, mapHelper, pluginFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'eliminator';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultConfig = {\n // when hiding the buttons, don't remove existing eliminations\n removeEliminationsOnClose: false,\n // when showing the buttons, restore previously set eliminations\n restoreEliminationsOnOpen: false\n };\n /**\n * Returns the configured plugin\n */\n\n var eliminator = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var config = Object.assign({}, defaultConfig, this.getConfig()); // register the button in the toolbox\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'eliminator',\n title: __('Eliminate choices'),\n icon: 'eliminate',\n text: __('Answer Eliminator')\n });\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-eliminator\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'eliminator', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePluginButton() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function togglePlugin() {\n if (!self.$choiceInteractions) {\n return;\n }\n\n self.$choiceInteractions.toggleClass('eliminable');\n\n if (isEliminable()) {\n enableEliminator();\n } else {\n disableEliminator();\n }\n }\n\n function isEliminable() {\n if (!self.$choiceInteractions) {\n return;\n }\n\n return self.$choiceInteractions.hasClass('eliminable');\n }\n\n function enableEliminator() {\n var $choices;\n\n if (!self.$choiceInteractions) {\n return;\n }\n\n $choices = self.$choiceInteractions.find('.qti-choice');\n self.button.turnOn();\n self.trigger('start');\n\n if (config.restoreEliminationsOnOpen) {\n $choices.each(function () {\n var input = this.querySelector('.real-label input');\n\n if (this.dataset.wasEliminated) {\n this.dataset.wasEliminated = null;\n this.classList.add('eliminated');\n input.setAttribute('disabled', 'disabled');\n input.checked = false;\n }\n });\n }\n }\n\n function disableEliminator() {\n var $choices;\n\n if (!self.$choiceInteractions) {\n return;\n }\n\n $choices = self.$choiceInteractions.find('.qti-choice');\n self.$choiceInteractions.removeClass('eliminable');\n self.button.turnOff();\n self.trigger('end');\n $choices.each(function () {\n if (this.classList.contains('eliminated')) {\n this.dataset.wasEliminated = true;\n this.classList.remove('eliminated');\n this.querySelector('.real-label input').removeAttribute('disabled');\n }\n });\n } //add a new mask each time the button is pressed\n\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePluginButton).on('renderitem', function conditionalInit() {\n // show button only when in the presence of choice interactions\n self.$choiceInteractions = $container.find('.qti-choiceInteraction');\n\n if (!self.$choiceInteractions.length) {\n self.hide();\n return;\n }\n\n if (isPluginEnabled()) {\n self.show();\n }\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n disableEliminator();\n }) // commands that controls the plugin\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isPluginEnabled()) {\n togglePlugin();\n }\n }) // Answer-eliminator and Answer-masking are mutually exclusive tools\n .on('tool-answer-masking-toggle', function () {\n if (isEliminable()) {\n disableEliminator();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return eliminator;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerMasking/answerMasking',['lodash', 'jquery', 'core/statifier', 'ui/component', 'handlebars'], function (_, $$1, statifier, componentFactory, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n statifier = statifier && Object.prototype.hasOwnProperty.call(statifier, 'default') ? statifier['default'] : statifier;\n componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); \n\n\n return \"<div class=\\\"answer-mask\\\">\\n <span class=\\\"answer-mask-toggle\\\"></span>\\n</div>\";\n });\n function maskTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA;\n */\n var ns = '.answerMasking';\n /**\n * @param {jQuery} $contentArea - DOM element containing the rendered item\n */\n\n function answerMaskingFactory($contentArea) {\n var answerMasking,\n allMasks = [],\n maskApi = {\n /**\n * Toggle mask visibility\n * @returns {component}\n */\n toggle: function toggle() {\n if (this.is('masked')) {\n return this.reveal();\n } else {\n return this.mask();\n }\n },\n\n /**\n * Show the choice under the current mask\n * @returns {component}\n */\n reveal: function reveal() {\n var $container = this.getContainer();\n $container.removeClass('masked');\n $container.find('input').removeAttr('disabled');\n this.setState('masked', false);\n return this;\n },\n\n /**\n * Cover the whole choice with the mask\n * @returns {component}\n */\n mask: function mask() {\n var $container = this.getContainer();\n $container.addClass('masked');\n $container.find('input').attr('disabled', 'disabled');\n this.setState('masked', true);\n return this;\n }\n };\n /**\n * Creates a ui/component to serve as a mask over a QTI Choice\n * @param {jQuery} $container - the qti-choice element\n * @returns {component}\n */\n\n function createMask($container) {\n return componentFactory(maskApi).setTemplate(maskTpl).on('render', function () {\n var self = this,\n $component = this.getElement();\n $component.on(\"click\".concat(ns), function (e) {\n e.stopPropagation();\n e.preventDefault();\n self.toggle();\n });\n }).on('destroy', function () {\n var $component = this.getElement();\n $component.off(ns);\n }).init().render($container).mask();\n }\n /**\n * The answer masking helper\n */\n\n\n answerMasking = {\n /**\n * Enable the answer masking functionality by creating masks over the Qti Choices\n */\n enable: function enable() {\n var $choiceInteractions = $contentArea.find('.qti-choiceInteraction'),\n $qtiChoices = $contentArea.find('.qti-choice');\n allMasks = [];\n $choiceInteractions.addClass('maskable');\n $qtiChoices.each(function () {\n var $choice = $$1(this);\n allMasks.push(createMask($choice));\n });\n this.setState('enabled', true);\n },\n\n /**\n * Remove any answerMasking-related markup from the rendered item\n */\n disable: function disable() {\n var $choiceInteractions = $contentArea.find('.qti-choiceInteraction');\n $choiceInteractions.removeClass('maskable');\n allMasks.forEach(function (mask) {\n mask.reveal(); // remove class on container\n\n mask.destroy();\n });\n allMasks = [];\n this.setState('enabled', false);\n },\n\n /**\n * Return the current state of the masks\n * @returns {Boolean[]} - true if the choice is masked, false if the choice is revealed\n */\n getMasksState: function getMasksState() {\n var state = allMasks.map(function (mask) {\n return mask.is('masked');\n });\n return state;\n },\n\n /**\n * Restore a previously saved state for the masked choices\n * @param {Boolean[]} state - array of boolean, most probably given by the getMasksState method\n */\n setMasksState: function setMasksState(state) {\n state = state || [];\n state.forEach(function (masked, index) {\n var mask = allMasks[index];\n\n if (_.isObject(mask) && _.isFunction(mask.reveal) && !masked) {\n mask.reveal();\n }\n });\n }\n };\n statifier(answerMasking);\n return answerMasking;\n }\n\n return answerMaskingFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/answerMasking/plugin',['i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/tools/answerMasking/answerMasking'], function (__, pluginFactory, hider, shortcut, namespaceHelper, mapHelper, answerMaskingFactory) { 'use strict';\n\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n answerMaskingFactory = answerMaskingFactory && Object.prototype.hasOwnProperty.call(answerMaskingFactory, 'default') ? answerMaskingFactory['default'] : answerMaskingFactory;\n\n /*\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'answer-masking';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Stores the masking state for each item in the test\n * @type {Object}\n */\n\n var itemStates = {};\n /**\n * Default Configuration\n */\n\n var defaultConfig = {\n restoreStateOnToggle: true,\n restoreStateOnMove: true\n };\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultConfig, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var $contentArea = this.getAreaBroker().getContentArea();\n var answerMasking = answerMaskingFactory($contentArea);\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-answerMasking\n var answerMaskingCategory = mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'answerMasking', true);\n return answerMaskingCategory && itemContainsChoiceInteraction();\n }\n\n function itemContainsChoiceInteraction() {\n var $container = self.getAreaBroker().getContentArea().parent();\n return $container.find('.qti-choiceInteraction').length;\n }\n\n function togglePluginButton() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function togglePlugin() {\n if (!answerMasking.getState('enabled')) {\n enableMasking();\n } else {\n disableMasking();\n }\n }\n\n function enableMasking() {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n answerMasking.enable();\n\n if (pluginConfig.restoreStateOnToggle) {\n answerMasking.setMasksState(itemStates[itemId]);\n }\n\n self.button.turnOn();\n self.trigger('start');\n }\n\n function disableMasking() {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n\n if (answerMasking.getState('enabled')) {\n itemStates[itemId] = answerMasking.getMasksState();\n }\n\n answerMasking.disable();\n self.button.turnOff();\n self.trigger('end');\n } // create buttons\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n title: __('Answer Masking'),\n icon: 'result-nok',\n control: 'answer-masking',\n text: __('Answer Masking')\n }); // attach user events\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n var testContext = testRunner.getTestContext(),\n itemId = testContext.itemIdentifier;\n\n if (!pluginConfig.restoreStateOnMove) {\n itemStates[itemId] = [];\n }\n\n togglePluginButton();\n }).on('enabletools renderitem', function () {\n togglePluginButton(); // we repeat this here as we need the rendered item markup in order to decide whether the plugin is enabled\n\n self.enable();\n }).on('beforeunloaditem', function () {\n disableMasking();\n }).on('disabletools unloaditem', function () {\n self.disable();\n disableMasking();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isPluginEnabled()) {\n togglePlugin();\n }\n }) // Answer-eliminator and Answer-masking are mutually exclusive tools\n .on('tool-eliminator-toggle', function () {\n disableMasking();\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/textToSpeech',['jquery', 'i18n', 'handlebars', 'ui/component', 'interact', 'ui/component/stackable', 'ui/component/placeable', 'ui/feedback', 'nouislider'], function ($$1, __, Handlebars, component, interact, makeStackable, makePlaceable, feedback, nouislider) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n interact = interact && Object.prototype.hasOwnProperty.call(interact, 'default') ? interact['default'] : interact;\n makeStackable = makeStackable && Object.prototype.hasOwnProperty.call(makeStackable, 'default') ? makeStackable['default'] : makeStackable;\n makePlaceable = makePlaceable && Object.prototype.hasOwnProperty.call(makePlaceable, 'default') ? makePlaceable['default'] : makePlaceable;\n feedback = feedback && Object.prototype.hasOwnProperty.call(feedback, 'default') ? feedback['default'] : feedback;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"tts-container\\\">\\n <div class=\\\"tts-controls\\\">\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-close\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close\", options) : helperMissing.call(depth0, \"__\", \"Close\", options)))\n + \"\\\">\\n <span class=\\\"icon-result-nok tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-drag\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Move\", options) : helperMissing.call(depth0, \"__\", \"Move\", options)))\n + \"\\\">\\n <span class=\\\"icon-grip tts-icon\\\"></span>\\n <span class=\\\"tts-control-label\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Text to Speech\", options) : helperMissing.call(depth0, \"__\", \"Text to Speech\", options)))\n + \"\\n </span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-playback\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toggle playback\", options) : helperMissing.call(depth0, \"__\", \"Toggle playback\", options)))\n + \"\\\">\\n <span class=\\\"icon-play tts-icon\\\"></span>\\n <span class=\\\"icon-pause tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-mode\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Toggle start from here mode\", options) : helperMissing.call(depth0, \"__\", \"Toggle start from here mode\", options)))\n + \"\\\">\\n <span class=\\\"icon-play-from-here tts-icon\\\"></span>\\n </a>\\n </div>\\n <div class=\\\"tts-control-container\\\">\\n <a class=\\\"tts-control tts-control-settings\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Settings\", options) : helperMissing.call(depth0, \"__\", \"Settings\", options)))\n + \"\\\">\\n <span class=\\\"icon-property-advanced tts-icon\\\"></span>\\n </a>\\n <div class=\\\"tts-slider-container\\\">\\n \"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Speed\", options) : helperMissing.call(depth0, \"__\", \"Speed\", options)))\n + \"<div class=\\\"tts-slider\\\"></div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function ttsTemplate(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n var defaultConfig = {\n activeElementClass: 'tts-active-content-node',\n elementClass: 'tts-content-node',\n left: -10,\n maxPlaybackRate: 2,\n minPlaybackRate: 0.5,\n playbackRate: 1,\n top: 50\n };\n var stackingOptions = {\n stackingScope: 'test-runner'\n };\n /**\n * Creates an instance of Text to Speech component\n *\n * @param {Element} container\n * @param {Object} config - component configurations\n * @param {String} config.activeElementClass - class applied to active content element. Default value 'tts-active-content-node'\n * @param {String} config.elementClass - class applied to content element. Default value 'tts-content-node'\n * @param {Number} config.left - initial left position of component. Default value 50\n * @param {Number} config.maxPlaybackRate - max playback rate. Default value 2\n * @param {Number} config.minPlaybackRate - min playback rate. Default value 0.5\n * @param {Number} config.playbackRate - playback rate. Default value 1\n * @param {Number} config.top - initial top position of component. Default value 50\n * @returns {ttsComponent} the textToSpeech component (uninitialized)\n */\n\n function maskingComponentFactory(container, config) {\n var audio = new Audio();\n var currentPlayback = [];\n var currentItem;\n var mediaContentData = [];\n var playbackRate; // Browser does not support selection Api If getSelection is not defined\n\n var selection = window.getSelection && window.getSelection(); // component API\n\n var spec = {\n /**\n * Remove APIP element class and click handlers from APIP elements\n */\n clearAPIPElements: function clearAPIPElements() {\n var elementClass = this.config.elementClass;\n var $contentNodes = $$1(mediaContentData.map(function (_ref) {\n var selector = _ref.selector;\n return selector;\n }).join(', '), container);\n $contentNodes.removeClass(elementClass);\n $contentNodes.off('click', this.handleContentNodeClick);\n },\n\n /**\n * Update componet state and stop playback\n *\n * @fires close\n */\n close: function close() {\n this.setTTSStateOnContainer('playing', false);\n this.setTTSStateOnContainer('sfhMode', false);\n this.setState('settings', false);\n this.stop();\n this.trigger('close');\n },\n\n /**\n * Get current active APIP item\n *\n * @returns {Object} active APIP item\n */\n getCurrentItem: function getCurrentItem() {\n return currentItem;\n },\n\n /**\n * When component in start from here mode, switch to clicked content element\n *\n * @param {Object} e - event object\n */\n handleContentNodeClick: function handleContentNodeClick(e) {\n var $target = $$1(e.target); // Allow default behaviour for inputs\n\n if ($target.hasClass('icon-checkbox') || $target.hasClass('icon-radio') || $target.is('input')) {\n return;\n } // Prevent default behaviour for lables and links\n\n\n e.stopPropagation();\n e.preventDefault();\n\n if (!this.is('sfhMode')) {\n return;\n }\n\n var $currentTarget = $$1(e.currentTarget); // Find APIP item associated with clicked element\n\n var selectedItemIndex = mediaContentData.findIndex(function (_ref2) {\n var selector = _ref2.selector;\n return $currentTarget.is(selector);\n });\n currentPlayback = mediaContentData.slice(selectedItemIndex);\n this.stop();\n this.initNextItem();\n this.togglePlayback();\n },\n\n /**\n * Select APIP item for default mode\n */\n initDefaultModeItem: function initDefaultModeItem() {\n this.initItemWithTextSelection();\n\n if (!currentItem) {\n this.initDefaultModePlayback();\n }\n },\n\n /**\n * Check if there is some selected content inside APIP elelemts on the page\n */\n initItemWithTextSelection: function initItemWithTextSelection() {\n // Check if there is selected content\n if (this.is('sfhMode') || !selection || !selection.toString()) {\n return;\n } // Get APIP item by current selection\n\n\n var currentSelection = selection.getRangeAt(0);\n var commonAncestorContainer = currentSelection.commonAncestorContainer;\n var selectedItem = mediaContentData.find(function (_ref3) {\n var selector = _ref3.selector;\n var $item = $$1(selector, container);\n return $item.is(commonAncestorContainer) || $$1.contains($item[0], commonAncestorContainer);\n });\n\n if (selectedItem && selectedItem !== currentItem) {\n currentPlayback = [selectedItem];\n this.initNextItem();\n }\n },\n\n /**\n * Check if there is next APIP item to play and start playback if component in playing state.\n * If there is no APIP item to play stop playback\n *\n * @fires finish\n * @fires next\n */\n initNextItem: function initNextItem() {\n var activeElementClass = this.config.activeElementClass;\n currentItem && $$1(currentItem.selector, container).removeClass(activeElementClass);\n currentItem = currentPlayback.shift();\n\n if (currentItem) {\n var _currentItem = currentItem,\n selector = _currentItem.selector,\n url = _currentItem.url;\n $$1(selector, container).addClass(activeElementClass);\n audio.setAttribute('src', url);\n audio.load();\n audio.playbackRate = playbackRate;\n\n if (this.is('playing')) {\n audio.play();\n }\n\n this.trigger('next');\n return;\n }\n\n this.trigger('finish');\n this.stop();\n },\n\n /**\n * Init default mode playback\n */\n initDefaultModePlayback: function initDefaultModePlayback() {\n currentPlayback = _toConsumableArray(mediaContentData);\n this.initNextItem();\n },\n\n /**\n * Set APIP data. Apply handlers to APIP elements. Stop current playback\n *\n * @param {Array} data - APIP data items\n */\n setMediaContentData: function setMediaContentData(data) {\n this.clearAPIPElements();\n var elementClass = this.config.elementClass;\n mediaContentData = data;\n var $contentNodes = $$1(mediaContentData.map(function (_ref4) {\n var selector = _ref4.selector;\n return selector;\n }).join(', '), container);\n $contentNodes.addClass(elementClass);\n $contentNodes.on('click', this.handleContentNodeClick);\n this.stop();\n },\n\n /**\n * Set playback rate\n *\n * @param {Object} e - event object\n * @param {Number} value - playback rate\n */\n setPlaybackRate: function setPlaybackRate(e, value) {\n playbackRate = value;\n audio.playbackRate = value;\n },\n\n /**\n * Update component state. Toggle state class on page body\n *\n * @param {String} name\n * @param {Boolean} value\n */\n setTTSStateOnContainer: function setTTSStateOnContainer(name, value) {\n this.setState(name, value);\n $$1(container).toggleClass(\"tts-\".concat(name), value);\n },\n\n /**\n * Pause playback and update component state. Set current item to null\n */\n stop: function stop() {\n var activeElementClass = this.config.activeElementClass;\n audio.pause();\n audio.currentTime = 0;\n currentItem && $$1(currentItem.selector, container).removeClass(activeElementClass);\n currentItem = null;\n this.setTTSStateOnContainer('playing', false);\n },\n\n /**\n * Toggle playback\n *\n * @param {Object} e - event object\n */\n togglePlayback: function togglePlayback(e) {\n e && e.preventDefault();\n var isPlaying = this.is('playing');\n this.initDefaultModeItem();\n\n if (!isPlaying && currentItem) {\n audio.play();\n this.setTTSStateOnContainer('playing', true);\n } else {\n audio.pause();\n this.setTTSStateOnContainer('playing', false);\n }\n },\n\n /**\n * Toggle start from here mode\n */\n toggleSFHMode: function toggleSFHMode() {\n var isSFHMode = this.is('sfhMode');\n this.setTTSStateOnContainer('sfhMode', !isSFHMode);\n this.stop();\n },\n\n /**\n * Toggle settings element\n */\n toggleSettings: function toggleSettings() {\n var isSettings = this.is('settings');\n this.setState('settings', !isSettings); // if settings was enabled make sure that component still inside the container\n\n if (!isSettings) {\n this.handleResize();\n }\n },\n\n /**\n * Handle browser resize\n */\n handleResize: function handleResize() {\n // offset from right\n var offsetFromRight = 10;\n\n var _this$getPosition = this.getPosition(),\n x = _this$getPosition.x,\n y = _this$getPosition.y;\n\n var maxXPosition = window.innerWidth - this.getElement().width() - offsetFromRight;\n this.moveTo(x > maxXPosition ? maxXPosition : x, y);\n }\n };\n var ttsComponent = component(spec, defaultConfig);\n makePlaceable(ttsComponent);\n makeStackable(ttsComponent, stackingOptions);\n ttsComponent.setTemplate(ttsTemplate).on('init', function () {\n if (container.hasClass('tts-component-container')) {\n throw new Error('Container already has assigned text to speech component');\n }\n\n container.addClass('tts-component-container');\n this.render(container);\n }).on('render', function () {\n var _this = this;\n\n var _this$getConfig = this.getConfig(),\n left = _this$getConfig.left,\n maxPlaybackRate = _this$getConfig.maxPlaybackRate,\n minPlaybackRate = _this$getConfig.minPlaybackRate,\n defaultPlaybackRate = _this$getConfig.playbackRate,\n top = _this$getConfig.top;\n\n if (left < 0) {\n left = window.innerWidth - this.getElement().width() + left;\n }\n\n var $element = this.getElement();\n var $closeElement = $$1('.tts-control-close', $element);\n var $dragElement = $$1('.tts-control-drag', $element);\n var $playbackElement = $$1('.tts-control-playback', $element);\n var $sfhModeElement = $$1('.tts-control-mode', $element);\n var $sliderElement = $$1('.tts-slider', $element);\n var $settingsElement = $$1('.tts-control-settings', $element);\n playbackRate = defaultPlaybackRate;\n $element.css('touch-action', 'none'); // make component dragable\n\n var interactElement = interact($element).draggable({\n autoScroll: true,\n manualStart: true,\n restrict: {\n restriction: container[0],\n elementRect: {\n left: 0,\n right: 1,\n top: 0,\n bottom: 1\n }\n },\n onmove: function onmove(event) {\n var xOffset = Math.round(event.dx),\n yOffset = Math.round(event.dy);\n\n _this.moveBy(xOffset, yOffset);\n }\n });\n interact($dragElement[0]).on('down', function (event) {\n var interaction = event.interaction;\n interaction.start({\n name: 'drag'\n }, interactElement, $element[0]);\n }); // initialise slider\n\n $sliderElement.noUiSlider({\n animate: true,\n connected: true,\n range: {\n min: minPlaybackRate,\n max: maxPlaybackRate\n },\n start: defaultPlaybackRate,\n step: 0.1\n }).on('change', this.setPlaybackRate); // handle controls\n\n $closeElement.on('click', this.close); // handle mousedown instead of click to prevent selection lose\n\n $playbackElement.on('mousedown touchstart', this.togglePlayback);\n $sfhModeElement.on('click', this.toggleSFHMode);\n $settingsElement.on('click', this.toggleSettings);\n audio.addEventListener('ended', this.initNextItem);\n audio.addEventListener('error', function () {\n feedback().error(__('Can not playback media file!'));\n\n _this.initNextItem();\n });\n window.addEventListener('resize', this.handleResize); // move to initial position\n\n this.moveTo(left, top);\n }).on('hide', function () {\n this.setTTSStateOnContainer('visible', false);\n }).on('show', function () {\n this.setTTSStateOnContainer('visible', true);\n }).on('destroy', function () {\n container.removeClass('tts-component-container');\n this.clearAPIPElements();\n this.stop();\n window.removeEventListener('resize', this.handleResize);\n });\n ttsComponent.init(config);\n return ttsComponent;\n }\n\n return maskingComponentFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider',[],function () { 'use strict';\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Anton Tsymuk <anton@taotesting.com>\n */\n\n /**\n * Extract TTS data from APIP item data\n *\n * @param {Object} apipElement - APIP item Data\n * @returns {Object}\n */\n var getTTSItemData = function getTTSItemData(apipElement) {\n var identifier = apipElement['@attributes'].identifier;\n var _apipElement$contentL = apipElement.contentLinkInfo,\n contentLinkInfo = _apipElement$contentL === void 0 ? {\n '@attributes': {}\n } : _apipElement$contentL,\n _apipElement$relatedE = apipElement.relatedElementInfo;\n _apipElement$relatedE = _apipElement$relatedE === void 0 ? {} : _apipElement$relatedE;\n var _apipElement$relatedE2 = _apipElement$relatedE.spoken;\n _apipElement$relatedE2 = _apipElement$relatedE2 === void 0 ? {} : _apipElement$relatedE2;\n var _apipElement$relatedE3 = _apipElement$relatedE2.audioFileInfo,\n audioFileInfo = _apipElement$relatedE3 === void 0 ? [] : _apipElement$relatedE3;\n\n var _ref = audioFileInfo.find(function (audioFile) {\n return audioFile['@attributes'].mimeType === 'audio/mpeg';\n }) || {},\n _ref$fileHref = _ref.fileHref,\n fileHref = _ref$fileHref === void 0 ? '' : _ref$fileHref;\n\n var elementId = contentLinkInfo['@attributes'].qtiLinkIdentifierRef;\n return {\n identifier: identifier,\n selector: elementId && \"#\".concat(elementId),\n url: fileHref.replace('assets/', '')\n };\n };\n /**\n * Get APIP item order from APIP order data\n *\n * @param {String} identifier - APIP item identifier\n * @param {Object} elementOrder - APIP order data\n * @returns {Number}\n */\n\n\n var getTTSItemOrder = function getTTSItemOrder(identifier, elementOrder) {\n var _ref2 = elementOrder.find(function (apipElementOrder) {\n return apipElementOrder['@attributes'].identifierRef === identifier;\n }) || {},\n order = _ref2.order;\n\n return parseInt(order) || Number.POSITIVE_INFINITY;\n };\n /**\n * Extract data related to Text To Speech from item APIP data\n * @param {Object} apipData\n * @returns {Object}\n */\n\n\n var ttsApipDataProvider = (function (apipData) {\n var _apipData$accessibili = apipData.accessibilityInfo;\n _apipData$accessibili = _apipData$accessibili === void 0 ? {} : _apipData$accessibili;\n var _apipData$accessibili2 = _apipData$accessibili.accessElement,\n accessElement = _apipData$accessibili2 === void 0 ? [] : _apipData$accessibili2,\n _apipData$inclusionOr = apipData.inclusionOrder;\n _apipData$inclusionOr = _apipData$inclusionOr === void 0 ? {} : _apipData$inclusionOr;\n var _apipData$inclusionOr2 = _apipData$inclusionOr.textGraphicsDefaultOrder;\n _apipData$inclusionOr2 = _apipData$inclusionOr2 === void 0 ? {} : _apipData$inclusionOr2;\n var _apipData$inclusionOr3 = _apipData$inclusionOr2.elementOrder,\n elementOrder = _apipData$inclusionOr3 === void 0 ? [] : _apipData$inclusionOr3;\n return accessElement.map(getTTSItemData).filter(function (_ref3) {\n var url = _ref3.url;\n return !!url;\n }).sort(function (a, b) {\n return getTTSItemOrder(a.identifier, elementOrder) - getTTSItemOrder(b.identifier, elementOrder);\n });\n });\n\n return ttsApipDataProvider;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/apipTextToSpeech/plugin',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map', 'ui/keyNavigation/navigator', 'ui/keyNavigation/navigableDomElement', 'taoQtiTest/runner/plugins/tools/apipTextToSpeech/textToSpeech', 'taoQtiTest/runner/plugins/tools/apipTextToSpeech/ttsApipDataProvider'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, mapHelper, keyNavigator, navigableDomElement, ttsComponentFactory, ttsApipDataProvider) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n keyNavigator = keyNavigator && Object.prototype.hasOwnProperty.call(keyNavigator, 'default') ? keyNavigator['default'] : keyNavigator;\n navigableDomElement = navigableDomElement && Object.prototype.hasOwnProperty.call(navigableDomElement, 'default') ? navigableDomElement['default'] : navigableDomElement;\n ttsComponentFactory = ttsComponentFactory && Object.prototype.hasOwnProperty.call(ttsComponentFactory, 'default') ? ttsComponentFactory['default'] : ttsComponentFactory;\n ttsApipDataProvider = ttsApipDataProvider && Object.prototype.hasOwnProperty.call(ttsApipDataProvider, 'default') ? ttsApipDataProvider['default'] : ttsApipDataProvider;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author Anton Tsymuk <anton@taotesting.com>\n */\n var pluginName = 'apiptts';\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var _this = this;\n\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var ttsComponent;\n var ttsApipData;\n\n var createNavigationGroup = function createNavigationGroup() {\n var $container = testRunner.getAreaBroker().getContainer();\n\n var $navigationGroupElement = _this.button.getElement();\n\n var groupNavigationId = \"\".concat(pluginName, \"_navigation_group\");\n var $navigationElements = $container.find(ttsApipData.map(function (_ref) {\n var selector = _ref.selector;\n return selector;\n }).join(', '));\n _this.navigationGroup = keyNavigator({\n id: groupNavigationId,\n group: $navigationGroupElement,\n elements: navigableDomElement.createFromDoms($navigationElements.add($navigationGroupElement)),\n propagateTab: false,\n loop: true,\n keepState: true\n }).on('tab', function () {\n if (ttsComponent.is('sfhMode')) {\n _this.navigationGroup.next();\n\n testRunner.trigger(\"\".concat(actionPrefix, \"next\"));\n }\n }).on('shift+tab', function () {\n if (ttsComponent.is('sfhMode')) {\n _this.navigationGroup.previous();\n\n testRunner.trigger(\"\".concat(actionPrefix, \"previous\"));\n }\n }).on('activate', function () {\n if (ttsComponent.is('sfhMode')) {\n testRunner.trigger(\"\".concat(actionPrefix, \"togglePlayback\"));\n }\n }).on('blur', function () {\n setTimeout(function () {\n if (!_this.navigationGroup.isFocused()) {\n _this.navigationGroup.focus();\n }\n }, 0);\n }).setCursorAt($navigationElements.length);\n ttsComponent.on('next finish', function () {\n if (ttsComponent.is('sfhMode')) {\n var $currentElement = _this.navigationGroup.getCursor().navigable.getElement();\n\n var _ref2 = ttsComponent.getCurrentItem() || {},\n selector = _ref2.selector;\n\n if (!selector || !$currentElement.is(selector)) {\n _this.navigationGroup.next();\n }\n }\n });\n };\n /**\n * Creates the tts component on demand\n * @returns {textToSpeech}\n */\n\n\n var getTTSComponent = function getTTSComponent() {\n if (!ttsComponent) {\n var $container = testRunner.getAreaBroker().getContainer();\n ttsComponent = ttsComponentFactory($container, {}).on('close', function () {\n if (_this.getState('active')) {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }\n }).hide();\n }\n\n return ttsComponent;\n };\n /**\n * Checks if the plugin is currently available.\n * To be activated with the special category x-tao-option-apiptts\n *\n * @returns {Boolean}\n */\n\n\n var isConfigured = function isConfigured() {\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'apiptts', true);\n };\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n var togglePlugin = function togglePlugin() {\n if (isConfigured()) {\n _this.show();\n } else {\n _this.hide();\n }\n };\n /**\n * Show the plugin panel\n *\n * @fires plugin-open.apiptts\n */\n\n\n var enablePlugin = function enablePlugin() {\n createNavigationGroup();\n\n _this.button.turnOn();\n\n _this.setState('active', true);\n\n _this.trigger('open');\n\n if (ttsComponent.is('hidden')) {\n ttsComponent.show();\n }\n };\n /**\n * Hide the plugin panel\n *\n * @fires plugin-close.apiptts\n */\n\n\n var disablePlugin = function disablePlugin() {\n if (_this.getState('active')) {\n _this.navigationGroup.blur();\n\n _this.navigationGroup.destroy();\n\n _this.setState('active', false);\n\n _this.button.turnOff();\n\n _this.trigger('close');\n\n if (ttsComponent && !ttsComponent.is('hidden')) {\n ttsComponent.close();\n ttsComponent.hide();\n }\n }\n };\n /**\n * Shows/hides the plugin\n */\n\n\n var toggleTool = function toggleTool() {\n if (_this.getState('enabled')) {\n if (_this.getState('active')) {\n disablePlugin();\n\n _this.setState('sleep', true);\n } else {\n enablePlugin();\n\n _this.setState('sleep', false);\n }\n }\n }; // Add plugin button to toolbox\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n className: \"\".concat(this.getName(), \"-plugin\"),\n control: this.getName(),\n icon: 'headphones',\n text: __('Text To Speech'),\n title: __('Enable text to speech')\n }); // Handle plugin button click\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // Register plugin shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n if (key === 'spaceTogglePlayback' && ttsComponent && ttsComponent.is('sfhMode')) {\n return;\n }\n\n var eventKey = key.endsWith('TogglePlayback') ? 'togglePlayback' : key;\n testRunner.trigger(actionPrefix + eventKey);\n }, {\n avoidInput: true\n });\n });\n } // Hide plugin by default\n\n\n togglePlugin();\n this.disable();\n this.hide(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n togglePlugin();\n\n _this.disable();\n }).on('enabletools renderitem', function () {\n _this.enable();\n }).on('disabletools unloaditem', function () {\n disablePlugin();\n\n _this.disable();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isConfigured()) {\n toggleTool();\n }\n }).on(\"\".concat(actionPrefix, \"togglePlayback\"), function () {\n if (_this.getState('enabled')) {\n if (_this.getState('active')) {\n if (ttsComponent.is('sfhMode')) {\n var $currentElement = _this.navigationGroup.getCursor().navigable.getElement();\n\n var _ref3 = ttsComponent.getCurrentItem() || {},\n selector = _ref3.selector;\n\n if (!$currentElement.is(selector)) {\n if (_this.button.getElement()[0] !== $currentElement[0]) {\n $currentElement.trigger('click');\n }\n\n return;\n }\n }\n\n ttsComponent.togglePlayback();\n }\n }\n }).on('renderitem', function () {\n if (!isConfigured()) {\n return;\n }\n\n ttsApipData = ttsApipDataProvider(testRunner.itemRunner.getData().apipAccessibility || {}).map(function (apipItemData) {\n return Object.assign({}, apipItemData, {\n url: testRunner.itemRunner.assetManager.resolve(apipItemData.url)\n });\n });\n\n if (!ttsApipData.length) {\n disablePlugin();\n\n _this.hide();\n\n return;\n }\n\n getTTSComponent().setMediaContentData(ttsApipData);\n\n _this.show();\n\n if (!_this.getState('sleep')) {\n _this.setState('enabled', true);\n\n toggleTool();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/areaMasking/mask',['lodash', 'handlebars', 'ui/dynamicComponent'], function (_, Handlebars, dynamicComponent) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n dynamicComponent = dynamicComponent && Object.prototype.hasOwnProperty.call(dynamicComponent, 'default') ? dynamicComponent['default'] : dynamicComponent;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"mask\\\">\\n <div class=\\\"inner\\\"></div>\\n <div class=\\\"controls\\\">\\n <a href=\\\"#\\\" class=\\\"view\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Preview the covered area\", options) : helperMissing.call(depth0, \"__\", \"Preview the covered area\", options)))\n + \"\\\"><span class=\\\"icon-preview\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"close\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close the mask\", options) : helperMissing.call(depth0, \"__\", \"Close the mask\", options)))\n + \"\\\"><span class=\\\"icon-result-nok\\\"></span></a>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function areaMaskingTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n var defaultConfig = {\n draggable: true,\n resizable: true,\n preserveAspectRatio: false,\n width: 250,\n minWidth: 160,\n maxWidth: 1000,\n minHeight: 60,\n height: 100,\n stackingScope: 'test-runner',\n top: 50,\n left: 10,\n previewDelay: 3000\n };\n /**\n * Creates a new masking component\n * @returns {maskComponent} the component (uninitialized)\n */\n\n function maskingComponentFactory() {\n var dynamicComponentInstance;\n /**\n * @typedef {Object} dynamicComponent\n */\n\n dynamicComponentInstance = dynamicComponent({\n /**\n * Preview the content under the masked area\n * @returns {maskComponent} chains\n *\n * @fires maskComponent#preview\n */\n preview: function preview() {\n var self = this;\n var delay = this.config.previewDelay || 1000;\n\n if (this.is('rendered') && !this.is('disabled') && !this.is('previewing')) {\n this.setState('previewing', true);\n this.trigger('preview');\n\n _.delay(function () {\n self.setState('previewing', false);\n }, delay);\n }\n\n return this;\n }\n }, defaultConfig).on('rendercontent', function ($content) {\n var self = this;\n var $element = this.getElement();\n $content.append(areaMaskingTpl({}));\n $element.addClass('mask-container');\n $element.on('click touchstart', '.view', function (e) {\n e.preventDefault();\n self.preview();\n }).on('click touchend', '.close', function (e) {\n e.preventDefault();\n self.destroy();\n });\n }).init();\n return dynamicComponentInstance;\n }\n\n return maskingComponentFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/areaMasking/areaMasking',['lodash', 'i18n', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/plugins/tools/areaMasking/mask', 'taoQtiTest/runner/helpers/map'], function (_, __, hider, shortcut, namespaceHelper, pluginFactory, maskComponent, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n maskComponent = maskComponent && Object.prototype.hasOwnProperty.call(maskComponent, 'default') ? maskComponent['default'] : maskComponent;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'area-masking';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultConfig = {\n max: 5,\n foo: true\n };\n /**\n * Returns the configured plugin\n */\n\n var areaMasking = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n var testRunnerOptions = testRunner.getOptions();\n var config = Object.assign({}, defaultConfig, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n\n function addMask() {\n maskComponent().on('render', function () {\n self.masks.push(this);\n self.button.turnOn();\n /**\n * @event areaMasking#maskadd\n */\n\n self.trigger('maskadd');\n }).on('destroy', function () {\n self.masks = _.without(self.masks, this);\n\n if (self.masks.length < config.max) {\n self.enable();\n }\n\n if (self.masks.length === 0) {\n self.button.turnOff();\n self.trigger('close');\n }\n /**\n * @event areaMasking#maskclose\n */\n\n\n self.trigger('maskclose');\n }).init({\n renderTo: $container,\n draggableContainer: $container\n });\n } //keep a ref to all masks\n\n\n this.masks = []; // register the element in the Toolbox\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'area-masking',\n text: __('Masking'),\n title: __('Covers parts of the item'),\n icon: 'eye-slash'\n }); //add a new mask each time the button is pressed\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n this.disable();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-areaMasking\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'areaMasking', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n } //update plugin state based on changes\n\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable(); //remove all masks\n\n _.invoke(self.masks, 'destroy');\n }) // commands that controls the plugin\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n if (self.masks.length === 0) {\n self.trigger('open');\n }\n\n if (self.masks.length < config.max) {\n addMask();\n } else if (config.max === 1) {\n _.invoke(self.masks, 'destroy');\n }\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return areaMasking;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/calculator',['jquery', 'lodash', 'i18n', 'ui/hider', 'ui/calculator', 'ui/maths/calculator/basicCalculator', 'ui/maths/calculator/scientificCalculator', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map'], function ($, _, __, hider, calculatorFactory, basicCalculatorFactory, scientificCalculatorFactory, shortcut, namespaceHelper, pluginFactory, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n calculatorFactory = calculatorFactory && Object.prototype.hasOwnProperty.call(calculatorFactory, 'default') ? calculatorFactory['default'] : calculatorFactory;\n basicCalculatorFactory = basicCalculatorFactory && Object.prototype.hasOwnProperty.call(basicCalculatorFactory, 'default') ? basicCalculatorFactory['default'] : basicCalculatorFactory;\n scientificCalculatorFactory = scientificCalculatorFactory && Object.prototype.hasOwnProperty.call(scientificCalculatorFactory, 'default') ? scientificCalculatorFactory['default'] : scientificCalculatorFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Default config for calculator components\n * @type {Object}\n */\n\n var defaultCalcConfig = {\n height: 380,\n width: 280,\n top: 50,\n left: 10,\n stackingScope: 'test-runner',\n proportionalResize: true\n };\n /**\n * Default config for BODMAS calculator component\n * @type {Object}\n */\n\n var bodmasCalcConfig = _.defaults({\n height: 380,\n width: 280\n }, defaultCalcConfig);\n /**\n * Default config for scientific calculator component\n * @type {Object}\n */\n\n\n var scientificCalcConfig = _.defaults({\n width: 490,\n height: 420,\n calculator: {\n maths: {\n degree: true\n }\n }\n }, defaultCalcConfig);\n /**\n * Returns the configured plugin\n */\n\n\n var calculator = pluginFactory({\n name: 'calculator',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var areaBroker = this.getAreaBroker();\n var testRunnerOptions = testRunner.getOptions();\n var config = this.getConfig();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Retrieve the calculators categories of the current item\n * @returns {Object} the calculator categories\n */\n\n function getCalculatorCategories() {\n var testContext = testRunner.getTestContext();\n var itemIdentifier = testContext.itemIdentifier;\n var testMap = testRunner.getTestMap();\n return {\n calculator: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator', true),\n bodmas: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator-bodmas', true),\n scientific: mapHelper.hasItemCategory(testMap, itemIdentifier, 'calculator-scientific', true)\n };\n }\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n\n function isEnabled() {\n //to be activated with a special category from:\n // - x-tao-option-calculator\n // - x-tao-option-calculator-bodmas\n // - x-tao-option-calculator-scientific\n var categories = getCalculatorCategories();\n return categories.calculator || categories.bodmas || categories.scientific;\n }\n /**\n * Is calculator activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n //allow calculator\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Build the calculator component\n * @param {Function} [calcTpl] - An optional alternative template for the calculator.\n * Only compatible with the four-functions version\n */\n\n\n function buildCalculator(calcTpl) {\n var categories = getCalculatorCategories();\n var factory, calcConfig;\n\n if (categories.scientific) {\n factory = scientificCalculatorFactory;\n calcConfig = scientificCalcConfig;\n calcConfig.calculator.maths.degree = _.isUndefined(config.degree) ? scientificCalcConfig.calculator.maths.degree : config.degree;\n } else if (categories.bodmas) {\n factory = basicCalculatorFactory;\n calcConfig = bodmasCalcConfig;\n } else {\n factory = calculatorFactory;\n calcConfig = defaultCalcConfig;\n }\n\n self.calculator = factory(_.defaults({\n renderTo: self.$calculatorContainer,\n replace: true,\n draggableContainer: areaBroker.getContainer(),\n alternativeTemplate: calcTpl || null\n }, calcConfig)).on('show', function () {\n self.trigger('open');\n self.button.turnOn();\n }).on('hide', function () {\n self.trigger('close');\n self.button.turnOff();\n }).after('render', function () {\n this.show();\n });\n }\n /**\n * Show/hide the calculator\n */\n\n\n function toggleCalculator() {\n if (self.getState('enabled') !== false) {\n if (self.calculator) {\n //just show/hide the calculator widget\n if (self.calculator.is('hidden')) {\n self.calculator.show();\n } else {\n self.calculator.hide();\n }\n } else {\n //build calculator widget\n if (config.template) {\n require([\"tpl!\".concat(config.template.replace(/\\.tpl$/, ''))], function (calcTpl) {\n buildCalculator(calcTpl);\n }, function () {\n //in case of error, display the default calculator:\n buildCalculator();\n });\n } else {\n buildCalculator();\n }\n }\n }\n } //build element (detached)\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'calculator',\n title: __('Open Calculator'),\n icon: 'table',\n text: __('Calculator')\n });\n this.$calculatorContainer = $('<div class=\"widget-calculator\">'); //init calculator instance var, it will be created only necessary\n\n this.calculator = null; //attach behavior\n\n this.button.on('click', function (e) {\n //prevent action if the click is made inside the form which is a sub part of the button\n if ($(e.target).closest('.widget-calculator').length) {\n return;\n }\n\n e.preventDefault();\n testRunner.trigger('tool-calculator');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-calculator');\n }, {\n avoidInput: true,\n allowIn: '.widget-calculator'\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n\n if (self.calculator) {\n //destroy calculator to create a new instance of calculator each time\n self.calculator.destroy();\n self.calculator = null;\n }\n }).on('tool-calculator', function () {\n if (isEnabled()) {\n toggleCalculator();\n }\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {\n var areaBroker = this.getAreaBroker();\n areaBroker.getContainer().append(this.$calculatorContainer);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n this.$calculatorContainer.remove();\n\n if (this.calculator) {\n this.calculator.destroy();\n }\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n\n if (this.calculator) {\n this.calculator.hide();\n }\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n\n if (this.calculator) {\n this.calculator.hide();\n }\n }\n });\n\n return calculator;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/comment/comment',['jquery', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'ui/stacker', 'util/shortcut', 'util/namespace', 'handlebars'], function ($$1, __, pluginFactory, hider, stackerFactory, shortcut, namespaceHelper, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n stackerFactory = stackerFactory && Object.prototype.hasOwnProperty.call(stackerFactory, 'default') ? stackerFactory['default'] : stackerFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", helper, options, helperMissing=helpers.helperMissing, escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div data-control=\\\"qti-comment\\\" class=\\\"hidden\\\">\\n <textarea data-control=\\\"qti-comment-text\\\" placeholder=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Your comment…\", options) : helperMissing.call(depth0, \"__\", \"Your comment…\", options)))\n + \"\\\"></textarea>\\n <button data-control=\\\"qti-comment-cancel\\\" class=\\\"btn-info small\\\"></span>\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Cancel\", options) : helperMissing.call(depth0, \"__\", \"Cancel\", options)))\n + \"</button>\\n <button data-control=\\\"qti-comment-send\\\" class=\\\"btn-info small\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Send\", options) : helperMissing.call(depth0, \"__\", \"Send\", options)))\n + \"</button>\\n</div>\\n\";\n return buffer;\n });\n function commentTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var comment = pluginFactory({\n name: 'comment',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var stacker = stackerFactory('test-runner');\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n var currentItem = testRunner.getCurrentItem();\n\n if (typeof currentItem.allowComment === 'boolean') {\n return currentItem.allowComment;\n } //@deprecated use allowComment from the testMap\n\n\n var testContext = testRunner.getTestContext();\n var contextOptions = testContext.options || {};\n return !!contextOptions.allowComment;\n }\n /**\n * Can we comment ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Show/hide the comment panel\n */\n\n\n function toggleComment() {\n if (self.getState('enabled') !== false) {\n //just show/hide the form\n hider.toggle(self.$form);\n\n if (!hider.isHidden(self.$form)) {\n //reset the form on each display\n self.$input.val('').focus();\n self.button.turnOn();\n stacker.bringToFront(self.$form);\n } else {\n self.button.turnOff();\n }\n }\n } // register button in toolbox\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'comment',\n title: __('Leave a comment'),\n icon: 'tag',\n text: __('Comment')\n }); //get access to controls\n\n this.button.on('render', function () {\n self.$button = self.button.getElement();\n self.$form = $$1(commentTpl()).appendTo(self.$button);\n self.$input = self.$button.find('[data-control=\"qti-comment-text\"]');\n self.$cancel = self.$button.find('[data-control=\"qti-comment-cancel\"]');\n self.$submit = self.$button.find('[data-control=\"qti-comment-send\"]');\n stacker.autoBringToFront(self.$form); //hide the form without submit\n\n self.$cancel.on('click', function () {\n hider.hide(self.$form);\n self.button.turnOff();\n }); //submit the comment, then hide the form\n\n self.$submit.on('click', function () {\n var comment = self.$input.val();\n\n if (comment) {\n self.disable();\n self.button.turnOff();\n testRunner.getProxy().callTestAction('comment', {\n comment: comment\n }).then(function () {\n hider.hide(self.$form);\n self.enable();\n }).catch(function () {\n hider.hide(self.$form);\n self.enable();\n });\n }\n });\n }); //attach behavior\n\n this.button.on('click', function (e) {\n //prevent action if the click is made inside the form which is a sub part of the button\n if ($$1(e.target).closest('[data-control=\"qti-comment\"]').length) {\n return;\n }\n\n e.preventDefault();\n testRunner.trigger('tool-comment');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-comment');\n }, {\n avoidInput: true\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', togglePlugin).on('renderitem enabletools', function () {\n self.enable();\n }).on('unloaditem disabletools', function () {\n self.disable();\n }).on('tool-comment', function () {\n if (isEnabled()) {\n toggleComment();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n if (this.$form) {\n hider.hide(this.$form);\n }\n\n this.button.disable();\n this.button.turnOff();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n if (this.$form) {\n hider.hide(this.$form);\n }\n\n this.button.hide();\n }\n });\n\n return comment;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/documentViewer/documentViewer',['jquery', 'lodash', 'ui/hider', 'ui/documentViewer', 'ui/documentViewer/providers/pdfViewer', 'taoTests/runner/plugin', 'handlebars'], function ($$1, _, hider, viewerFactory, pdfViewer, pluginFactory, Handlebars) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n hider = hider && Object.prototype.hasOwnProperty.call(hider, 'default') ? hider['default'] : hider;\n viewerFactory = viewerFactory && Object.prototype.hasOwnProperty.call(viewerFactory, 'default') ? viewerFactory['default'] : viewerFactory;\n pdfViewer = pdfViewer && Object.prototype.hasOwnProperty.call(pdfViewer, 'default') ? pdfViewer['default'] : pdfViewer;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, functionType=\"function\", escapeExpression=this.escapeExpression;\n\n\n buffer += \"<div class=\\\"document-viewer-plugin hidden\\\">\\n <div class=\\\"viewer-overlay\\\"></div>\\n <div class=\\\"viewer-panel\\\">\\n <div class=\\\"viewer-header\\\">\\n <span class=\\\"viewer-title\\\">\";\n if (helper = helpers.title) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.title); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</span>\\n <span class=\\\"icon icon-close\\\"></span>\\n </div>\\n <div class=\\\"viewer-content\\\">\";\n if (helper = helpers.content) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.content); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n if(stack1 || stack1 === 0) { buffer += stack1; }\n buffer += \"</div>\\n <div class=\\\"viewer-footer\\\"></div>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function panelTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The name of the plugin\n * @type {String}\n */\n\n var pluginName = 'documentViewer';\n /**\n * Shows the panel, trigger the `panelshow` event\n *\n * @param plugin\n */\n\n function showPanel(plugin) {\n hider.show(plugin.controls.$panel);\n plugin.trigger('panelshow');\n $$1(window).on(\"resize.\".concat(plugin.getName()), _.debounce(_.partial(resizeViewer, plugin), 50));\n }\n /**\n * Hides the panel, trigger the `panelhide` event\n *\n * @param plugin\n */\n\n\n function hidePanel(plugin) {\n hider.hide(plugin.controls.$panel);\n plugin.trigger('panelhide');\n $$1(window).off(\"resize.\".concat(plugin.getName()));\n }\n /**\n * Hides the panel if it is visible\n *\n * @param plugin\n * @returns {Boolean} Returns `true` if the panel was visible and has been hidden\n */\n\n\n function hideIfVisible(plugin) {\n var isVisible = !hider.isHidden(plugin.controls.$panel, true);\n\n if (isVisible) {\n hidePanel(plugin);\n }\n\n return isVisible;\n }\n /**\n * Initializes the event handlers for the panel container\n *\n * @param plugin\n */\n\n\n function initPanelEvents(plugin) {\n var namespace = \".\".concat(plugin.getName());\n var stopEvents = ['click', 'mousedown', 'mouseup', 'touchstart', 'touchend', 'keyup', 'keydow', 'keypress', 'scroll', 'drop'].join(\"\".concat(namespace, \" \")) + namespace;\n\n var hideViewer = _.partial(hidePanel, plugin);\n\n function stopPropagation(e) {\n e.stopImmediatePropagation();\n e.stopPropagation();\n }\n\n plugin.controls.$overlay.off(namespace).on(\"click\".concat(namespace), hideViewer).on(stopEvents, stopPropagation);\n plugin.controls.$panel.off(namespace).on(\"click\".concat(namespace), '.icon-close', hideViewer).on(stopEvents, stopPropagation);\n }\n /**\n * Resizes the viewer to fit the panel content area\n * @param plugin\n */\n\n\n function resizeViewer(plugin) {\n var $content = plugin.controls.$content;\n plugin.viewer.setSize($content.width(), $content.height());\n } // all document viewers need to be registered\n\n\n viewerFactory.registerProvider('pdf', pdfViewer);\n /**\n * Returns the configured plugin\n */\n\n var documentViewer = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var $panel = $$1(panelTpl());\n /**\n * @param {Object} data\n * @param {String} data.label - document title\n * @param {String} data.document - document url\n */\n\n function displayViewer(data) {\n if (self.getState('enabled') !== false) {\n showPanel(self);\n self.controls.$title.text(data.label);\n resizeViewer(self);\n self.viewer.load(data.document, 'pdf');\n }\n }\n\n this.controls = {\n $panel: $panel,\n $overlay: $panel.find('.viewer-overlay'),\n $title: $panel.find('.viewer-title'),\n $content: $panel.find('.viewer-content')\n };\n this.viewer = viewerFactory({\n renderTo: this.controls.$content,\n replace: true,\n fitToWidth: true,\n allowSearch: true\n }); //update plugin state based on changes\n\n testRunner.on('renderitem enabletools', function () {\n self.enable();\n }).on('renderitem', function () {\n self.getAreaBroker().getContentArea().append(self.controls.$panel).off(\".\".concat(self.getName())).on(\"viewDocument.\".concat(self.getName()), function (event) {\n var data = event.originalEvent.detail;\n displayViewer(data);\n });\n initPanelEvents(self);\n }).on('move', function () {\n hideIfVisible(self);\n }).on('skip', function () {\n hideIfVisible(self);\n }).on('unloaditem disabletools', function () {\n self.disable();\n }).on('tool-documentViewer', function (data) {\n displayViewer(data);\n });\n },\n\n /**\n * Called during the runner's render phase\n */\n render: function render() {},\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.getAreaBroker().getContentArea().off(\".\".concat(this.getName()));\n\n if (this.viewer) {\n this.viewer.destroy();\n }\n\n if (this.controls.$panel) {\n this.controls.$panel.remove();\n }\n\n this.viewer = null;\n this.controls = {};\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {},\n\n /**\n * Disable the button\n */\n disable: function disable() {\n hideIfVisible(this);\n },\n\n /**\n * Show the button\n */\n show: function show() {},\n\n /**\n * Hide the button\n */\n hide: function hide() {\n hideIfVisible(this);\n }\n });\n\n return documentViewer;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/highlighter',['lodash', 'jquery', 'core/eventifier', 'ui/highlighter'], function (_, $, eventifier, highlighterFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n eventifier = eventifier && Object.prototype.hasOwnProperty.call(eventifier, 'default') ? eventifier['default'] : eventifier;\n highlighterFactory = highlighterFactory && Object.prototype.hasOwnProperty.call(highlighterFactory, 'default') ? highlighterFactory['default'] : highlighterFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA;\n */\n var prevSelection = [];\n var selection;\n if (!window.getSelection) throw new Error('Browser does not support getSelection()');\n selection = window.getSelection();\n /**\n * Returns an array of active ranges.\n * If browser doesn't support multiple Ranges, returns only the first range\n * see note on https://w3c.github.io/selection-api/#methods\n *\n * @returns {Range[]}\n */\n\n function getAllRanges() {\n var i,\n allRanges = [];\n\n for (i = 0; i < selection.rangeCount; i++) {\n allRanges.push(selection.getRangeAt(i));\n }\n\n return allRanges;\n }\n /**\n * Discards the global text selection from the browser (window.selection)\n */\n\n\n function discardSelection() {\n // delay discarding, to allow time for multiple highlighters logic\n setTimeout(function () {\n selection.removeAllRanges();\n }, 250);\n }\n /**\n * The highlighter Factory\n * @param {Object} options\n * @param {String} [options.className]\n * @param {String} [options.containerSelector]\n * @param {Array} [options.containersBlackList]\n * @param {String} [options.id]\n * @returns {Object} the highlighter instance\n */\n\n\n function testHighlighterFactory(options) {\n /**\n * Is this highlighter enabled or disabled?\n * @type {boolean}\n */\n var enabled = true;\n /**\n * Are we in highlight mode, meaning that each new selection is automatically highlighted\n * without having to press any button\n * @type {boolean}\n */\n\n var isHighlighting = false;\n /**\n * The helper that does the highlight magic\n */\n\n var highlightHelper = highlighterFactory({\n className: options.className || 'txt-user-highlight',\n containerSelector: options.containerSelector || '.qti-itemBody',\n containersBlackList: options.containersBlackList || [],\n clearOnClick: true\n }); //add event to automatically highlight the recently made selection if needed\n\n $(document).on('mouseup.highlighter', function () {\n if (isHighlighting && !selection.isCollapsed) {\n highlightHelper.highlightRanges(getAllRanges());\n discardSelection();\n }\n }); //add event to automatically highlight the recently made selection if needed\n //added touch event (as from TAO-6578)\n\n $(document).on('touchend.highlighter', function () {\n if (isHighlighting && !selection.isCollapsed) {\n highlightHelper.highlightRanges(getAllRanges());\n }\n }); // iOS devices clears selection after click on button,\n // so we store prev selection for this devices to be able\n // to use it after click on highlight button\n\n if (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream) {\n $(document).on('selectionchange', function () {\n if (!isHighlighting) {\n prevSelection = _.clone(getAllRanges(), true);\n }\n });\n }\n /**\n * The highlighter instance\n */\n\n\n return eventifier({\n /**\n * Enable this instance\n */\n enable: function enable() {\n enabled = true;\n },\n\n /**\n * Disable this instance\n */\n disable: function disable() {\n enabled = false;\n },\n\n /**\n * Is this instance currently enabled?\n * @returns {Boolean}\n */\n isEnabled: function isEnabled() {\n return enabled;\n },\n\n /**\n * toggle highlighting mode on and off\n * @param {Boolean} bool - wanted state\n */\n toggleHighlighting: function toggleHighlighting(bool) {\n isHighlighting = bool;\n\n if (isHighlighting) {\n this.trigger('start');\n $('.qti-itemBody').toggleClass('highlighter-cursor', true);\n } else {\n this.trigger('end');\n $('.qti-itemBody').toggleClass('highlighter-cursor', false);\n }\n\n return this;\n },\n\n /**\n * Either highlight the current or selection, or toggle highlighting mode\n */\n highlight: function highlight() {\n if (!isHighlighting) {\n if (!selection.isCollapsed) {\n this.toggleHighlighting(true);\n highlightHelper.highlightRanges(getAllRanges());\n this.toggleHighlighting(false);\n discardSelection();\n } else if (prevSelection[0] && !prevSelection[0].collapsed) {\n this.toggleHighlighting(true);\n highlightHelper.highlightRanges(prevSelection);\n this.toggleHighlighting(false);\n discardSelection();\n } else {\n this.toggleHighlighting(true);\n }\n } else {\n this.toggleHighlighting(false);\n }\n },\n\n /**\n * restore the highlight from a given index\n * @param {Array} index\n */\n restoreIndex: function restoreIndex(index) {\n if (index && index.length > 0) {\n highlightHelper.highlightFromIndex(index);\n }\n },\n\n /**\n * Get the current index\n * @returns {Array} index\n */\n getIndex: function getIndex() {\n return highlightHelper.getHighlightIndex();\n },\n\n /**\n * remove all highlights\n */\n clearHighlights: function clearHighlights() {\n highlightHelper.clearHighlights();\n selection.removeAllRanges();\n },\n\n /**\n * Getter for the instance's id\n * @returns {String}\n */\n getId: function getId() {\n return options.id;\n }\n });\n }\n\n return testHighlighterFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/collection',['taoQtiTest/runner/plugins/tools/highlighter/highlighter'], function (highlighterFactory) { 'use strict';\n\n highlighterFactory = highlighterFactory && Object.prototype.hasOwnProperty.call(highlighterFactory, 'default') ? highlighterFactory['default'] : highlighterFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * @var {Array} highlighters - Highlighters collection\n * We can run multiple instances of the highlighter plugin on one page:\n * - one for item-level highlights, which persist for the Test session\n * - others for stimulus-level highlights, which should persist across multiple sessions (TAO-7617)\n */\n\n var highlighters = [];\n /**\n * @typedef {highlighterCollection}\n * @returns {Object}\n */\n\n var highlighterCollection = function highlighterCollection() {\n return {\n /**\n * Instantiates new highlighter and adds it to array\n * @param {Object} options\n * @param {String} options.className - class applied to highlighted spans\n * @param {String} options.containerSelector - selector for the unique root DOM node the HL will work on\n * @param {Array} options.containersBlackList - list of children which should not receive highlights\n * @param {String} options.id\n * @returns {Object} a highlighter instance\n */\n addHighlighter: function addHighlighter(options) {\n var hl = highlighterFactory(options);\n highlighters.push(hl);\n return hl;\n },\n\n /**\n * Retrieves one highlighter from the collection by matching its id\n * @param {String} id\n * @returns {Object} highlighter instance\n */\n getHighlighterById: function getHighlighterById(id) {\n return highlighters.find(function (hl) {\n return hl.getId() === id;\n });\n },\n\n /**\n * Retrieves the full array of highlighters from the collection\n * @returns {Array}\n */\n getAllHighlighters: function getAllHighlighters() {\n return highlighters;\n },\n\n /**\n * Retrieves the first highlighter in the collection\n * @returns {Object} highlighter instance\n */\n getItemHighlighter: function getItemHighlighter() {\n return highlighters[0];\n },\n\n /**\n * Retrieves the fully array of highlighter from the collection, minus the first one\n * @returns {Array} highlighter instance\n */\n getNonItemHighlighters: function getNonItemHighlighters() {\n return highlighters.slice(1);\n },\n\n /**\n * Empties th highlighter collection\n * @returns {Integer}\n */\n getLength: function getLength() {\n return highlighters.length;\n },\n\n /**\n * Empties the highlighter collection\n * @returns {Object}\n */\n empty: function empty() {\n highlighters = [];\n return this;\n }\n };\n };\n\n return highlighterCollection;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/highlighter/plugin',['jquery', 'lodash', 'i18n', 'core/logger', 'taoTests/runner/plugin', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/currentItem', 'taoQtiTest/runner/plugins/tools/highlighter/collection', 'taoQtiTest/runner/helpers/map'], function ($, _, __, loggerFactory, pluginFactory, shortcut, namespaceHelper, itemHelper, highlighterCollection, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n loggerFactory = loggerFactory && Object.prototype.hasOwnProperty.call(loggerFactory, 'default') ? loggerFactory['default'] : loggerFactory;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n itemHelper = itemHelper && Object.prototype.hasOwnProperty.call(itemHelper, 'default') ? itemHelper['default'] : itemHelper;\n highlighterCollection = highlighterCollection && Object.prototype.hasOwnProperty.call(highlighterCollection, 'default') ? highlighterCollection['default'] : highlighterCollection;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var plugin = pluginFactory({\n name: 'highlighter',\n\n /**\n * Install plugin's functions\n *\n */\n install: function install() {\n var testRunner = this.getTestRunner(); //define the \"highlighter\" store as \"volatile\" (removed on browser change).\n\n testRunner.getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initialize the plugin (called during runner's init)\n * @returns {void}\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var hasHighlights = false;\n var logger = loggerFactory('highlighterPlugin');\n /**\n * @var {Object} highlighters - Highlighters collection\n * See taoQtiTest/views/js/runner/plugins/tools/highlighter/collection.js\n */\n\n var highlighters = highlighterCollection(); // Create the first (item-level) highlighter instance:\n\n highlighters.addHighlighter({\n className: 'txt-user-highlight',\n containerSelector: '.qti-itemBody',\n containersBlackList: ['.qti-include'],\n id: 'item-highlighter'\n }); // create buttons\n\n this.buttonMain = this.getAreaBroker().getToolbox().createEntry({\n title: __('Highlight Text'),\n icon: 'text-marker',\n control: 'highlight-trigger',\n aria: {\n pressed: 'false',\n label: __('(Visual) Highlight Text')\n },\n text: __('Highlight')\n });\n this.buttonRemove = this.getAreaBroker().getToolbox().createEntry({\n title: __('Clear all active highlights'),\n icon: 'result-nok',\n control: 'highlight-clear',\n aria: {\n label: __('(Visual) Clear all active highlights')\n },\n text: __('Clear Highlights')\n }); // attach user events\n\n this.buttonMain.on('mousedown', function (e) {\n // using 'mousedown' instead of 'click' to avoid losing current selection\n e.preventDefault();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.highlight();\n }\n });\n }\n });\n this.buttonRemove.on('click', function (e) {\n e.preventDefault();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.clearHighlights();\n }\n });\n\n testRunner.trigger('clear');\n }\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.highlight();\n }\n });\n }\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isPluginEnabled() {\n //to be activated with the special category x-tao-option-highlighter\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'highlighter', true);\n }\n /**\n * Is plugin activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isPluginEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Gets the browser test store\n * Can be in volatile or non-volatile mode, depending on config\n * @returns {Promise}\n */\n\n\n function getStore() {\n return testRunner.getTestStore().getStore(self.getName());\n }\n /**\n * Load the stores and hook the behavior\n */\n\n\n return getStore().then(function (highlighterStore) {\n /**\n * Saves a highlighter's state to the appropriate store\n * @param {String} [itemId] - must be provided to save item-level highlights,\n * will be used as store key if no key provided\n * @param {String} [key] - a key (e.g. a stimulus href) under which we store non-item-level highlights\n * @returns {Boolean} true if save was done\n */\n function saveHighlight(itemId, key) {\n var instance;\n var highlightsIndex;\n\n if (!itemId) {\n instance = highlighters.getHighlighterById(key);\n } else {\n key = itemId;\n instance = highlighters.getItemHighlighter();\n }\n\n if (!instance) return Promise.resolve(false);\n highlightsIndex = instance.getIndex();\n\n if (isPluginEnabled() && hasHighlights && key) {\n logger.debug(\"Saving \".concat(highlightsIndex.length, \" highlights for id \").concat(key));\n return highlighterStore.setItem(key, highlightsIndex);\n }\n\n return false;\n }\n /**\n * Saves all the highlighters states in the store\n * First the non-item highlighters, then the item highlighter (index 0)\n * @returns {Promise} resolves once the save is done\n */\n\n\n function saveAll() {\n var nonItemHighlighters = highlighters.getNonItemHighlighters();\n return Promise.all(_(nonItemHighlighters).filter(function (instance) {\n return instance.isEnabled();\n }).map(function (instance) {\n var key = instance.getId();\n return saveHighlight(null, key);\n }).value()).then(function (results) {\n // Now save the main item highlight\n // and if every setItem() returned true, return true\n var itemId = testRunner.getTestContext().itemIdentifier;\n return saveHighlight(itemId) && _.every(results);\n });\n }\n /**\n * Retrieves a highlighter's state from a store and applies it to the DOM\n * @param {String} [itemId] - must be provided to save item-level highlights,\n * will be used as store key if no key provided\n * @param {String} [key] - a key (e.g. a stimulus href) under which we store non-item-level highlights\n * @returns {Promise} resolves once the load is done\n */\n\n\n function loadHighlight(itemId, key) {\n var instance;\n\n if (!itemId) {\n instance = highlighters.getHighlighterById(key);\n } else {\n key = itemId;\n instance = highlighters.getItemHighlighter();\n }\n\n if (!instance) return Promise.resolve(false);\n return highlighterStore.getItem(key).then(function (index) {\n if (index) {\n logger.debug(\"Loading \".concat(index.length, \" highlights for key \").concat(key));\n hasHighlights = true;\n instance.restoreIndex(index);\n }\n }).then(function () {\n //save highlighter state during the item session,\n //when the highlighting ends\n instance.on('end.save', function () {\n return saveHighlight(itemId, key);\n });\n });\n } //update plugin state based on changes\n\n\n testRunner.on('loaditem', togglePlugin).on('enabletools renderitem', function () {\n self.enable();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (!instance.isEnabled()) {\n instance.on('start').toggleHighlighting(false).enable();\n }\n });\n }\n }).on('renderitem', function () {\n var textStimuli;\n var itemId = testRunner.getTestContext().itemIdentifier;\n\n if (itemId && isPluginEnabled()) {\n hasHighlights = false;\n highlighters.getItemHighlighter().enable(); // Load item-level highlights from store:\n\n loadHighlight(itemId); // Count stimuli in this item:\n\n textStimuli = itemHelper.getTextStimuliHrefs(testRunner); // NOW we can instantiate the extra highlighters:\n\n _.forEach(textStimuli, function (textStimulusHref) {\n var stimHighlighter = highlighters.getHighlighterById(textStimulusHref); // Instantiate, if id not already present in highlighters...\n\n if (!stimHighlighter) {\n stimHighlighter = highlighters.addHighlighter({\n className: 'txt-user-highlight',\n containerSelector: \".qti-include[data-href=\\\"\".concat(textStimulusHref, \"\\\"]\"),\n id: textStimulusHref\n });\n }\n\n stimHighlighter.enable(); // And load its data:\n\n loadHighlight(null, textStimulusHref);\n });\n }\n }).after('renderitem', function () {\n // Attach start/end listeners only to item level highlighter\n var instance = highlighters.getItemHighlighter();\n\n if (instance.isEnabled()) {\n instance.on('start', function () {\n self.buttonMain.turnOn();\n self.buttonMain.$component.attr('aria-pressed', 'true');\n self.trigger('start');\n hasHighlights = true;\n }).on('end', function () {\n self.buttonMain.turnOff();\n self.buttonMain.$component.attr('aria-pressed', 'false');\n self.trigger('end');\n });\n }\n }).after('clear.highlighter', function () {\n saveAll();\n }).before('skip move timeout', function () {\n return saveAll();\n }).on('disabletools unloaditem', function () {\n self.disable();\n\n if (isPluginEnabled()) {\n _.forEach(highlighters.getAllHighlighters(), function (instance) {\n if (instance.isEnabled()) {\n instance.off('end.save end start').toggleHighlighting(false).disable();\n }\n });\n }\n });\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n $(document).off('.highlighter');\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.buttonMain.enable();\n this.buttonRemove.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.buttonMain.disable();\n this.buttonRemove.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.buttonMain.show();\n this.buttonRemove.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.buttonMain.hide();\n this.buttonRemove.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/itemThemeSwitcher/itemThemeSwitcher',['jquery', 'lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'ui/themes', 'util/shortcut', 'util/namespace', 'ui/themeLoader'], function ($, _, __, pluginFactory, hider, themeHandler, shortcut, namespaceHelper, themeLoader) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n themeHandler = themeHandler && Object.prototype.hasOwnProperty.call(themeHandler, 'default') ? themeHandler['default'] : themeHandler;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n themeLoader = themeLoader && Object.prototype.hasOwnProperty.call(themeLoader, 'default') ? themeLoader['default'] : themeLoader;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * Returns the configured plugin\n */\n\n var itemThemeSwitcher = pluginFactory({\n name: 'itemThemeSwitcher',\n\n /**\n * Install step, add behavior before the lifecycle.\n */\n install: function install() {\n //define the \"itemThemeSwitcher\" store as \"volatile\" (removed on browser change).\n this.getTestRunner().getTestStore().setVolatile(this.getName());\n },\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var pluginName = this.getName();\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n var pluginConfig = this.getConfig();\n var oldNamespace = themeHandler.getActiveNamespace();\n var state = {\n availableThemes: [],\n defaultTheme: '',\n selectedTheme: ''\n };\n var allMenuEntries = [];\n\n if (pluginConfig.activeNamespace) {\n themeHandler.setActiveNamespace(pluginConfig.activeNamespace);\n }\n\n var themesConfig = themeHandler.get('items') || {};\n\n if (pluginConfig.activeNamespace !== oldNamespace && !_.isEmpty(themesConfig)) {\n reloadThemes();\n }\n /**\n * Tells if the component is enabled\n * @returns {Boolean}\n */\n\n\n function isPluginAllowed() {\n return themesConfig && _.size(themesConfig.available) > 1;\n }\n /**\n * Reloads theme config and changes theme\n */\n\n\n function reloadThemes() {\n var themeConfig = themeHandler.get('items');\n themeLoader(themeConfig).load();\n\n if (state && state.selectedTheme) {\n changeTheme(state.selectedTheme);\n } else {\n changeTheme(themeConfig.default);\n }\n }\n /**\n * Load the selected theme\n * @param themeId\n */\n\n\n function changeTheme(themeId) {\n var $qtiItem = $('.qti-item');\n var previousTheme = state.selectedTheme;\n state.selectedTheme = themeId;\n\n if ($qtiItem) {\n _.defer(function () {\n $qtiItem.trigger('themechange', [state.selectedTheme]);\n });\n }\n\n if (self.storage) {\n self.storage.setItem('itemThemeId', themeId);\n }\n\n if (previousTheme !== state.selectedTheme) {\n testRunner.trigger('themechange', state.selectedTheme, previousTheme);\n }\n\n allMenuEntries.forEach(function (menuEntry) {\n if (menuEntry.getId() === themeId) {\n menuEntry.turnOn();\n } else {\n menuEntry.turnOff();\n }\n });\n } //init plugin state\n\n\n if (themesConfig) {\n if (themesConfig.default) {\n state.defaultTheme = themesConfig.default;\n state.selectedTheme = themesConfig.default;\n changeTheme(themesConfig.default);\n }\n\n if (themesConfig.available) {\n _.forEach(themesConfig.available, function (theme) {\n state.availableThemes.push({\n id: theme.id,\n label: __(theme.name)\n });\n });\n }\n } // register toolbox button\n\n\n this.menuButton = this.getAreaBroker().getToolbox().createMenu({\n control: 'color-contrast',\n title: __('Change the current color preset'),\n icon: 'contrast',\n text: __('Contrast')\n }).after('render', function () {\n if (!isPluginAllowed()) {\n self.hide();\n }\n }).on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-themeswitcher-toggle');\n }).on('openmenu', function () {\n testRunner.trigger(\"plugin-open.\".concat(pluginName), state.selectedTheme);\n }).on('closemenu', function () {\n testRunner.trigger(\"plugin-close.\".concat(pluginName), state.selectedTheme);\n }); // register menu entries\n\n state.availableThemes.forEach(function (theme) {\n var themeEntry = self.getAreaBroker().getToolbox().createEntry({\n role: 'option',\n control: theme.id,\n title: theme.label,\n icon: 'preview',\n text: __(theme.label)\n });\n themeEntry.setMenuId('color-contrast');\n themeEntry.on('click', function (e) {\n var themeId = this.config.control;\n e.preventDefault();\n self.menuButton.turnOffAll();\n this.turnOn();\n changeTheme(themeId);\n });\n\n if (state.defaultTheme === theme.id) {\n themeEntry.on('render', function () {\n this.turnOn();\n });\n }\n\n allMenuEntries.push(themeEntry);\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger('tool-themeswitcher-toggle');\n }, {\n avoidInput: true\n });\n }\n }\n\n if (!isPluginAllowed()) {\n this.hide();\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n if (isPluginAllowed()) {\n self.show();\n } else {\n self.hide();\n }\n }).on('renderitem', function () {\n self.enable();\n changeTheme(state.selectedTheme);\n }).on('enabletools', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n }).on('tool-themeswitcher-toggle', function () {\n if (self.getState('enabled') !== false) {\n self.menuButton.toggleMenu();\n }\n }).on('tool-themeswitcher-setnavtype', function (type) {\n self.menuButton.setNavigationType(type);\n });\n return testRunner.getPluginStore(this.getName()).then(function (itemThemesStore) {\n self.storage = itemThemesStore;\n self.storage.getItem('itemThemeId').then(function (itemThemeId) {\n if (itemThemeId && state.selectedTheme !== itemThemeId) {\n changeTheme(itemThemeId);\n }\n });\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n return this.getTestRunner().getPluginStore(this.getName()).then(function (itemThemesStore) {\n return itemThemesStore.removeItem('itemThemeId');\n });\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.menuButton.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.menuButton.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.menuButton.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.menuButton.hide();\n }\n });\n\n return itemThemeSwitcher;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/lineReader/compoundMask',['jquery', 'lodash', 'core/statifier', 'core/eventifier', 'ui/component', 'ui/component/placeable', 'ui/component/draggable', 'ui/component/resizable', 'ui/component/stackable'], function ($, _, statifier, eventifier, componentFactory, makePlaceable, makeDraggable, makeResizable, makeStackable) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n statifier = statifier && Object.prototype.hasOwnProperty.call(statifier, 'default') ? statifier['default'] : statifier;\n eventifier = eventifier && Object.prototype.hasOwnProperty.call(eventifier, 'default') ? eventifier['default'] : eventifier;\n componentFactory = componentFactory && Object.prototype.hasOwnProperty.call(componentFactory, 'default') ? componentFactory['default'] : componentFactory;\n makePlaceable = makePlaceable && Object.prototype.hasOwnProperty.call(makePlaceable, 'default') ? makePlaceable['default'] : makePlaceable;\n makeDraggable = makeDraggable && Object.prototype.hasOwnProperty.call(makeDraggable, 'default') ? makeDraggable['default'] : makeDraggable;\n makeResizable = makeResizable && Object.prototype.hasOwnProperty.call(makeResizable, 'default') ? makeResizable['default'] : makeResizable;\n makeStackable = makeStackable && Object.prototype.hasOwnProperty.call(makeStackable, 'default') ? makeStackable['default'] : makeStackable;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var defaultDimensions = {\n outerWidth: 600,\n outerHeight: 400,\n innerWidth: 500,\n innerHeight: 20\n };\n var defaultPosition = {\n outerX: 0,\n outerY: 0,\n innerX: 50,\n innerY: 50\n };\n var defaultOptions = {\n dragMinWidth: 10,\n dragMinHeight: 10,\n resizeHandleSize: 10,\n innerDragHeight: 20\n };\n var stackingOptions = {\n stackingScope: 'test-runner'\n };\n var constrains;\n /**\n * @param {Object} options\n * @param {Number} options.resizeHandleSize - size of the resize handlers on each resizable edge\n * @param {Number} options.dragMinWidth - minimal width for the draggable area of each component.\n * @param {Number} options.dragMinHeight - minimal height for the draggable area of each component.\n * @param {Number} options.innerDragHeight - height of the inner window drag handle\n * @param {Object} dimensions\n * @param {Number} dimensions.outerWidth - overall mask width\n * @param {Number} dimensions.outerHeight - overall mask height\n * @param {Number} dimensions.innerWidth - inner window width\n * @param {Number} dimensions.innerHeight - inner window height\n * @param {Number} position\n * @param {Number} position.outerX - overall mask x\n * @param {Number} position.outerY - overall mask y\n * @param {Number} position.innerX - inner window mask x\n * @param {Number} position.innerY - inner window mask y\n */\n\n function compoundMaskFactory(options, dimensions, position) {\n var compoundMask,\n allParts = {},\n innerDrag,\n closer,\n visualGuides = {};\n /**\n * ============================================\n * Definition of Mask & Overlay component types\n * ============================================\n */\n\n /**\n * Create a mask component. They are used for masking (obviously) but also resizing the compound mask\n * @param {Object} maskConfig\n * @param {String} maskConfig.id\n * @param {Function} maskConfig.place - size and position the mask according to the transform model\n * @param {Function} maskConfig.placeOverlay - size and position the overlay according to the transform model\n * @param {Function} maskConfig.beforeResize - used to set the resize limit depending on which edge the resizing occurs\n * @param {Function} maskConfig.onResize - how the resize affect the transform model\n * @param {Object} maskConfig.edges - Interact configuration to specify which edges can be used for resizing\n * @param {Number} maskConfig.minWidth\n * @param {Number} maskConfig.minHeight\n */\n\n function createMask(maskConfig) {\n var mask,\n maskAPI = {\n place: maskConfig.place,\n placeOverlay: maskConfig.placeOverlay,\n styleResizableEdges: function styleResizableEdges() {\n var $element = this.getElement();\n\n _.forOwn(this.config.edgesBorders, function (isResizable, edgeId) {\n if (isResizable) {\n $element.addClass(\"border-\".concat(edgeId));\n }\n });\n },\n addResizeControll: function addResizeControll() {\n var $element = this.getElement();\n var $resizeControll = $('<div>', {\n class: 'resize-control'\n });\n $element.append($resizeControll);\n }\n };\n mask = componentFactory(maskAPI, maskConfig);\n makeResizable(mask);\n makeStackable(mask, stackingOptions);\n return mask.on('render', function () {\n var $element = this.getElement();\n this.styleResizableEdges();\n\n if (this.config.resizeControll) {\n this.addResizeControll();\n }\n\n $element.addClass(\"line-reader-mask \".concat(maskConfig.id)).on('mousedown touchstart', function () {\n bringAllToFront();\n }); // uncomment this to see what's going on with masks:\n // $element.css({ border: '1px solid olive'});\n }).on('resizestart', function () {\n innerDrag.hide();\n closer.hide();\n invokeOnOverlays('hide');\n invokeOnMasks('setState', ['resizing', true]);\n this.setState('resizer', true);\n }).on('beforeresize', maskConfig.beforeResize || _.noop).on('resize', maskConfig.onResize || _.noop).on('resizeend', function () {\n applyTransformsToOverlays();\n applyTransformsToInnerDrag();\n applyTransformsToCloser();\n invokeOnMasks('setState', ['resizing', false]);\n invokeOnOverlays('show');\n innerDrag.show();\n closer.show();\n this.setState('resizer', false);\n }).init();\n }\n /**\n * Create a overlay component. Overlay are invisible and are used for dragging.\n * When clicked, the whole mask is hidden and only the overlay is displayed, after being resized to fit the whole mask surface\n * this allows for performance improvement as well as giving the dragged element proper dragging boundaries.\n * Also, visual guides are added, like a fake inner window, during the drag\n * @param {Object} overlayConfig\n * @param {String} overlayConfig.id\n */\n\n\n function createOverlay(overlayConfig) {\n var overlay,\n overlayAPI = {\n transformOverlay: function transformOverlay() {\n var $element = this.getElement();\n this._sizeBackup = this.getSize();\n this._posBackup = this.getPosition();\n this.setSize(dimensions.outerWidth, dimensions.outerHeight).moveTo(position.outerX, position.outerY);\n $element.addClass('moving');\n this.setState('transformed', true);\n },\n restoreOverlay: function restoreOverlay() {\n var $element = this.getElement();\n\n if (this.is('transformed')) {\n this.setSize(this._sizeBackup.width, this._sizeBackup.height).moveTo(this._posBackup.x, this._posBackup.y);\n $element.removeClass('moving');\n this._sizeBackup = null;\n this._posBackup = null;\n this.setState('transformed', false);\n }\n },\n appendVisualGuides: function appendVisualGuides() {\n var $element = this.getElement(),\n borderWidth = 1,\n // this mirror the $lrBorderWidth css variable\n borderOffset = borderWidth * 2;\n $element.append(visualGuides.$maskBg);\n $element.append(visualGuides.$innerWindow);\n visualGuides.$maskBg.css({\n width: dimensions.outerWidth - borderOffset,\n height: dimensions.outerHeight - borderOffset,\n 'border-top-width': dimensions.topHeight - borderOffset,\n 'border-right-width': dimensions.rightWidth - borderOffset,\n 'border-bottom-width': dimensions.bottomHeight - borderOffset,\n 'border-left-width': dimensions.leftWidth - borderOffset\n });\n visualGuides.$innerWindow.css({\n width: dimensions.innerWidth,\n height: dimensions.innerHeight,\n left: dimensions.leftWidth - borderOffset,\n top: dimensions.topHeight - borderOffset\n });\n },\n removeVisualGuides: function removeVisualGuides() {\n visualGuides.$maskBg.remove();\n visualGuides.$innerWindow.remove();\n }\n };\n overlay = componentFactory(overlayAPI, overlayConfig);\n makeDraggable(overlay);\n makeStackable(overlay, stackingOptions);\n return overlay.on('render', function () {\n var self = this,\n $element = this.getElement(),\n // captures touch and mouse\n // also fixes issue with IE not capturing 'mousedown' etc\n pointerEventsPrefix = window.PointerEvent ? 'pointer' : 'mouse',\n $moveIcon = $('<div>', {\n class: 'icon icon-mobile-menu'\n });\n $element.addClass(\"line-reader-overlay \".concat(overlayConfig.id)).on(\"\".concat(pointerEventsPrefix, \"down\") + \" touchstart\", function () {\n bringAllToFront();\n self.transformOverlay();\n }).on(\"\".concat(pointerEventsPrefix, \"up\") + \" touchend\", function () {\n self.restoreOverlay();\n }).prepend($moveIcon);\n }).on('dragstart', function () {\n innerDrag.hide();\n closer.hide();\n invokeOnMasks('hide');\n this.appendVisualGuides();\n }).on('dragmove', function moveAllPartsTogether(xOffsetRelative, yOffsetRelative) {\n // update the transform model\n position.outerX += xOffsetRelative;\n position.outerY += yOffsetRelative;\n position.innerX += xOffsetRelative;\n position.innerY += yOffsetRelative;\n }).on('dragend', function () {\n this.removeVisualGuides(); // although they are already display, calling show() again on the overlays\n // will force their z-Index at the top of the stack\n\n invokeOnAll('show');\n innerDrag.show();\n closer.show(); // apply the new transform model\n\n applyTransforms();\n }).init();\n }\n /**\n * ==========================\n * Inner Drag Handle & Closer\n * ==========================\n */\n\n /**\n * This handle allows to drag the inner window\n */\n\n\n function createInnerDragHandle() {\n // uncomment this (and a few lines below) if debugging is needed:\n // var $boundingBox = $('<div>').css({ position: 'fixed', 'box-sizing': 'border-box', border: '1px solid red' });\n innerDrag = componentFactory();\n makeStackable(innerDrag, stackingOptions);\n makeDraggable(innerDrag, {\n dragRestriction: function dragRestriction() {\n var fixedXY = allParts.nw.mask.getElement().offset(),\n rect;\n rect = {\n x: fixedXY.left + constrains.minWidth,\n y: fixedXY.top + (constrains.minTopHeight + dimensions.innerHeight + options.resizeHandleSize),\n width: dimensions.outerWidth - constrains.minWidth * 2,\n height: dimensions.outerHeight - (dimensions.innerHeight + constrains.minTopHeight + constrains.minBottomHeight - options.innerDragHeight)\n }; // uncomment to see what's going on:\n // allParts.ne.mask.getContainer().append($boundingBox);\n // $boundingBox.css({ width: rect.width, height: rect.height, top: rect.y, left: rect.x });\n\n return rect;\n }\n }).on('render', function () {\n var $element = this.getElement(),\n $dragIcon = $('<div>', {\n class: 'icon icon-move'\n });\n $element.css('touch-action', 'none');\n $element.addClass('line-reader-inner-drag');\n $element.css({\n background: 'none'\n });\n $element.append($dragIcon);\n }).on('dragstart', function () {\n closer.hide();\n bringAllToFront();\n invokeOnMasks('setState', ['resizing', true]);\n }).on('dragmove', function (xOffsetRelative, yOffsetRelative) {\n position.innerX += xOffsetRelative;\n position.innerY += yOffsetRelative;\n dimensions.leftWidth += xOffsetRelative;\n dimensions.topHeight += yOffsetRelative;\n dimensions.rightWidth -= xOffsetRelative;\n dimensions.bottomHeight -= yOffsetRelative;\n applyTransformsToMasks();\n }).on('dragend', function () {\n innerDrag.bringToFront();\n closer.show();\n invokeOnMasks('setState', ['resizing', false]);\n applyTransformsToOverlays();\n }).init();\n }\n /**\n * Close button for the compound mask\n */\n\n\n function createCloser() {\n closer = componentFactory();\n makeStackable(closer, stackingOptions);\n makePlaceable(closer).on('render', function () {\n var self = this,\n $element = this.getElement(),\n $closeIcon = $('<div>', {\n class: 'icon icon-result-nok'\n });\n $element.append($closeIcon);\n $element.addClass('line-reader-closer');\n $element.on('mousedown touchstart', function () {\n bringAllToFront();\n });\n $element.on('click', function (e) {\n e.stopPropagation();\n self.trigger('click');\n });\n }).init();\n }\n /**\n * =================\n * Utility functions\n * =================\n */\n\n\n function bringAllToFront() {\n invokeOnAll('bringToFront');\n innerDrag.bringToFront();\n closer.bringToFront();\n }\n\n function invokeOnAll(fn, args) {\n invokeOnMasks(fn, args);\n invokeOnOverlays(fn, args);\n }\n\n function invokeOnMasks(fn, args) {\n invokeOn('mask', fn, args);\n }\n\n function invokeOnOverlays(fn, args) {\n invokeOn('overlay', fn, args);\n }\n /**\n * Invoke a method on all compound mask parts, whether mask or overlays\n * @param {String} target - mask | overlay\n * @param {String} fn - the name of the method to invoke\n * @param {*[]} args - arguments passed on invoke\n */\n\n\n function invokeOn(target, fn, args) {\n _.forOwn(allParts, function (part) {\n if (_.isObject(part[target]) && _.isFunction(part[target][fn])) {\n var _part$target;\n\n (_part$target = part[target])[fn].apply(_part$target, _toConsumableArray(args || []));\n }\n });\n }\n /**\n * =================================\n * Transform model related functions\n * =================================\n */\n\n\n function applyTransforms() {\n applyTransformsToMasks();\n applyTransformsToOverlays();\n applyTransformsToInnerDrag();\n applyTransformsToCloser();\n }\n\n function applyTransformsToMasks() {\n invokeOnMasks('place');\n }\n\n function applyTransformsToOverlays() {\n _.forOwn(allParts, function (part) {\n if (part.overlay) {\n part.mask.placeOverlay(part.overlay);\n }\n });\n }\n\n function applyTransformsToInnerDrag() {\n if (innerDrag) {\n innerDrag.setSize(dimensions.innerWidth - 20, options.innerDragHeight).moveTo(position.innerX + 10, position.innerY + dimensions.innerHeight + options.resizeHandleSize);\n }\n }\n\n function applyTransformsToCloser() {\n if (closer) {\n closer.setSize(constrains.minWidth - options.resizeHandleSize, constrains.minHeight - options.resizeHandleSize).moveTo(position.outerX + dimensions.outerWidth - constrains.minWidth - 5, // manual adjustment so it looks better\n position.outerY + options.resizeHandleSize - 4);\n }\n }\n /**\n * Check that the given transform model respect the current constrains.\n * If not, correct them\n */\n\n\n function correctTransforms() {\n if (dimensions.topHeight < constrains.minTopHeight) {\n dimensions.topHeight = constrains.minTopHeight;\n position.innerY = position.outerY + constrains.minTopHeight;\n }\n\n if (dimensions.innerHeight < constrains.minHeight) {\n dimensions.innerHeight = constrains.minHeight;\n }\n\n if (dimensions.bottomHeight < constrains.minBottomHeight) {\n dimensions.bottomHeight = constrains.minBottomHeight;\n }\n\n dimensions.outerHeight = dimensions.topHeight + dimensions.innerHeight + dimensions.bottomHeight;\n\n if (dimensions.leftWidth < constrains.minWidth) {\n dimensions.leftWidth = constrains.minWidth;\n position.innerX = position.outerX + constrains.minWidth;\n }\n\n if (dimensions.innerWidth < constrains.minWidth) {\n dimensions.innerWidth = constrains.minWidth;\n }\n\n if (dimensions.rightWidth < constrains.minWidth) {\n dimensions.rightWidth = constrains.minWidth;\n }\n\n dimensions.outerWidth = dimensions.leftWidth + dimensions.innerWidth + dimensions.rightWidth;\n }\n /**\n * Update the transform model during a resize affecting the top height\n * @param {Number} newHeight\n * @param {Number} newY\n * @param {Boolean} fromTop - if the resize occurs from the top\n */\n\n\n function setTopHeight(newHeight, newY, fromTop) {\n dimensions.topHeight = newHeight;\n\n if (fromTop) {\n dimensions.outerHeight = newHeight + dimensions.innerHeight + dimensions.bottomHeight;\n position.outerY = newY;\n } else {\n dimensions.innerHeight = dimensions.outerHeight - newHeight - dimensions.bottomHeight;\n position.innerY = position.outerY + newHeight;\n }\n }\n /**\n * Update the transform model during a resize affecting the right width\n * @param {Number} newWidth\n * @param {Number} newX\n * @param {Boolean} fromLeft - if the resize occurs from the left\n */\n\n\n function setRightWidth(newWidth, newX, fromLeft) {\n dimensions.rightWidth = newWidth;\n\n if (fromLeft) {\n dimensions.innerWidth = newX - position.innerX;\n } else {\n dimensions.outerWidth = dimensions.leftWidth + dimensions.innerWidth + newWidth;\n }\n }\n /**\n * Update the transform model during a resize affecting the bottom height\n * @param {Number} newHeight\n * @param {Number} newY\n * @param {Boolean} fromTop - if the resize occurs from the top\n */\n\n\n function setBottomHeight(newHeight, newY, fromTop) {\n dimensions.bottomHeight = newHeight;\n\n if (fromTop) {\n dimensions.innerHeight = newY - position.innerY;\n dimensions.bottomHeight = newHeight;\n } else {\n dimensions.outerHeight = dimensions.topHeight + dimensions.innerHeight + newHeight;\n }\n }\n /**\n * Update the transform model during a resize affecting the left width\n * @param {Number} newWidth\n * @param {Number} newX\n * @param {Boolean} fromLeft - if the resize occurs from the left\n */\n\n\n function setLeftWidth(newWidth, newX, fromLeft) {\n dimensions.leftWidth = newWidth;\n\n if (fromLeft) {\n dimensions.outerWidth = newWidth + dimensions.innerWidth + dimensions.rightWidth;\n position.outerX = newX;\n } else {\n dimensions.innerWidth = dimensions.outerWidth - newWidth - dimensions.rightWidth;\n position.innerX = position.outerX + newWidth;\n }\n }\n /**\n * Update the transform model during a resize affecting inner height\n * @param {Number} newHeight\n */\n\n\n var setInnerHeight = function setInnerHeight(newHeight) {\n dimensions.innerHeight = newHeight;\n dimensions.bottomHeight = dimensions.outerHeight - dimensions.innerHeight - dimensions.topHeight;\n };\n /**\n * ======================================\n * Mask parts and other elements creation\n * ======================================\n */\n\n\n function createCompoundMask() {\n // North\n createPart({\n id: 'n',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: true,\n left: false\n },\n addOverlay: true,\n minHeight: constrains.minTopHeight,\n // move and dimension the mask\n place: function place() {\n this.moveTo(position.innerX, position.outerY).setSize(dimensions.innerWidth, dimensions.topHeight);\n },\n // move and dimension the overlay\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(position.outerX, pos.y).setSize(dimensions.outerWidth, size.height);\n },\n // set a resize limit whenever resize happens on an inner edge (here, the top inner edge, eg. the bottom of the mask),\n // so the min/max width/height limit for \"inner component\" is respected\n beforeResize: function beforeResize(width, height, fromLeft, fromTop) {\n this.config.maxHeight = fromTop ? null : dimensions.topHeight + (dimensions.innerHeight - constrains.minHeight);\n },\n // set the new transform values (dimension and position) resulting from the current mask resize, and apply them\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // North-east\n\n createPart({\n id: 'ne',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: true,\n bottom: false,\n left: false\n },\n minHeight: constrains.minTopHeight,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.outerY).setSize(dimensions.rightWidth, dimensions.topHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n setRightWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // South east\n\n createPart({\n id: 'se',\n edges: {\n top: false,\n right: '.resize-control',\n bottom: '.resize-control',\n left: false\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: true,\n left: false\n },\n minHeight: constrains.minBottomHeight,\n resizeControll: true,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.innerY + dimensions.innerHeight).setSize(dimensions.rightWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setRightWidth(width, x, fromLeft);\n setBottomHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // South\n\n createPart({\n id: 's',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: true,\n left: false\n },\n minHeight: constrains.minBottomHeight,\n place: function place() {\n this.moveTo(position.innerX, position.innerY + dimensions.innerHeight).setSize(dimensions.innerWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x, pos.y + options.resizeHandleSize).setSize(size.width, size.height - options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft, fromTop) {\n this.config.maxHeight = fromTop ? dimensions.bottomHeight + (dimensions.innerHeight - constrains.minHeight) : null;\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setBottomHeight(height, y, fromTop);\n applyTransformsToMasks();\n }\n }); // East\n\n createPart({\n id: 'e',\n edges: {\n top: false,\n right: false,\n bottom: '.resize-control',\n left: '.resize-control'\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: false,\n left: true\n },\n resizeControll: true,\n place: function place() {\n this.moveTo(position.innerX + dimensions.innerWidth, position.innerY).setSize(dimensions.rightWidth, dimensions.innerHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y - options.resizeHandleSize).setSize(size.width - options.resizeHandleSize * 2, size.height + options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft) {\n this.config.maxWidth = dimensions.rightWidth + (dimensions.innerWidth - constrains.minWidth);\n this.config.minWidth = constrains.minWidth;\n this.config.maxHeight = dimensions.outerHeight - dimensions.topHeight - constrains.minBottomHeight;\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x) {\n setRightWidth(width, x, fromLeft);\n setInnerHeight(height);\n applyTransformsToMasks();\n }\n }); // South-west\n\n createPart({\n id: 'sw',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: false,\n right: false,\n bottom: true,\n left: true\n },\n minHeight: constrains.minBottomHeight,\n place: function place() {\n this.moveTo(position.outerX, position.innerY + dimensions.innerHeight).setSize(dimensions.leftWidth, dimensions.bottomHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setBottomHeight(height, y, fromTop);\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // West\n\n createPart({\n id: 'w',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: false,\n right: true,\n bottom: false,\n left: true\n },\n place: function place() {\n this.moveTo(position.outerX, position.innerY).setSize(dimensions.leftWidth, dimensions.innerHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y - options.resizeHandleSize).setSize(size.width - options.resizeHandleSize * 2, size.height + options.resizeHandleSize * 2);\n },\n beforeResize: function beforeResize(width, height, fromLeft) {\n this.config.maxWidth = fromLeft ? null : dimensions.leftWidth + (dimensions.innerWidth - constrains.minWidth);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x) {\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n }); // North-west\n\n createPart({\n id: 'nw',\n edges: {\n top: false,\n right: false,\n bottom: false,\n left: false\n },\n edgesBorders: {\n top: true,\n right: false,\n bottom: false,\n left: true\n },\n minHeight: constrains.minTopHeight,\n place: function place() {\n this.moveTo(position.outerX, position.outerY).setSize(dimensions.leftWidth, dimensions.topHeight);\n },\n placeOverlay: function placeOverlay(overlay) {\n var pos = this.getPosition(),\n size = this.getSize();\n overlay.moveTo(pos.x + options.resizeHandleSize, pos.y + options.resizeHandleSize).setSize(size.width - options.resizeHandleSize, size.height - options.resizeHandleSize * 2);\n },\n onResize: function onResize(width, height, fromLeft, fromTop, x, y) {\n setTopHeight(height, y, fromTop);\n setLeftWidth(width, x, fromLeft);\n applyTransformsToMasks();\n }\n });\n }\n\n function createPart(partConfig) {\n allParts[partConfig.id] = {\n mask: createMask(_.assign({}, constrains, partConfig)),\n overlay: partConfig.addOverlay ? createOverlay(partConfig) : null\n };\n }\n\n function createVisualGuides() {\n visualGuides.$maskBg = $('<div>', {\n class: 'mask-bg'\n });\n visualGuides.$innerWindow = $('<div>', {\n class: 'inner-window'\n });\n }\n /**\n * =========================\n * The compoundMask instance\n * =========================\n */\n\n\n dimensions = _.defaults(dimensions || {}, defaultDimensions);\n position = _.defaults(position || {}, defaultPosition);\n options = _.defaults(options || {}, defaultOptions);\n constrains = {\n minWidth: options.resizeHandleSize * 2 + options.dragMinWidth,\n minHeight: options.resizeHandleSize * 2 + options.dragMinHeight,\n minBottomHeight: options.resizeHandleSize * 2 + options.innerDragHeight,\n minTopHeight: options.resizeHandleSize * 2 + 18 // make sure that top will fit header size\n\n };\n compoundMask = {\n init: function init() {\n var self = this;\n this.setTransforms(dimensions, position);\n createCompoundMask();\n createVisualGuides();\n createInnerDragHandle();\n createCloser();\n closer.on('click', function () {\n self.hide();\n self.trigger('close');\n });\n return this;\n },\n render: function render($container) {\n invokeOnAll('render', [$container]);\n innerDrag.render($container);\n closer.render($container);\n applyTransforms();\n return this;\n },\n destroy: function destroy() {\n invokeOnAll('destroy');\n visualGuides = null;\n innerDrag = null;\n closer = null;\n return this;\n },\n show: function show() {\n invokeOnAll('show');\n innerDrag.show();\n closer.show();\n this.setState('hidden', false);\n return this;\n },\n hide: function hide() {\n invokeOnAll('hide');\n innerDrag.hide();\n closer.hide();\n this.setState('hidden', true);\n return this;\n },\n\n /**\n * Allow updating the transform model\n * @param {Object} dim\n * @param {Number} dim.outerWidth - overall mask width\n * @param {Number} dim.outerHeight - overall mask height\n * @param {Number} dim.innerWidth - inner window width\n * @param {Number} dim.innerHeight - inner window height\n * @param {Number} pos\n * @param {Number} pos.outerX - overall mask x\n * @param {Number} pos.outerY - overall mask y\n * @param {Number} pos.innerX - inner window x\n * @param {Number} pos.innerY - inner window y\n */\n setTransforms: function setTransforms(dim, pos) {\n dimensions = _.defaults(dim || {}, dimensions);\n position = _.defaults(pos || {}, position); // automatically complete the dimensions\n\n dimensions.topHeight = pos.innerY - pos.outerY;\n dimensions.rightWidth = dim.outerWidth - (pos.innerX - pos.outerX) - dim.innerWidth;\n dimensions.bottomHeight = dim.outerHeight - (pos.innerY - pos.outerY) - dim.innerHeight;\n dimensions.leftWidth = pos.innerX - pos.outerX;\n correctTransforms();\n applyTransforms();\n },\n getDimensions: function getDimensions() {\n return dimensions;\n },\n getPosition: function getPosition() {\n return position;\n },\n getParts: function getParts() {\n return allParts;\n }\n };\n statifier(compoundMask);\n eventifier(compoundMask);\n return compoundMask;\n }\n\n return compoundMaskFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/lineReader/plugin',['lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/helpers/map', 'taoQtiTest/runner/plugins/tools/lineReader/compoundMask'], function (_, __, pluginFactory, hider, shortcut, namespaceHelper, mapHelper, compoundMaskFactory) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n compoundMaskFactory = compoundMaskFactory && Object.prototype.hasOwnProperty.call(compoundMaskFactory, 'default') ? compoundMaskFactory['default'] : compoundMaskFactory;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'line-reader';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Options for the compoundMask factory\n * @type {Object}\n */\n\n var maskOptions = {\n dragMinWidth: 17,\n dragMinHeight: 7,\n resizeHandleSize: 7,\n innerDragHeight: 20\n };\n var dimensions, position;\n /**\n * These functions are a first effort to place the mask on the first line on the item\n * They make a lot of assumptions:\n * - the item starts with a text\n * - the padding is set on the .qti-item container\n * - the padding is consistent with the minWidth/minHeight configuration of the mask\n * - and some other...\n * @param {jQuery} $container - where the mask is appended\n */\n\n function getDimensions($container) {\n var $qtiContent = $container.find('#qti-content'),\n $qtiItem = $qtiContent.find('.qti-item'),\n lineHeight = Math.ceil(parseFloat($qtiContent.css('line-height'))) || 20; // reasonable default line height\n\n return {\n outerWidth: $qtiItem.width() + maskOptions.resizeHandleSize * 4 + maskOptions.dragMinWidth * 2,\n outerHeight: 175,\n // reasonable default height\n innerWidth: $qtiItem.width(),\n innerHeight: lineHeight\n };\n }\n\n function getPosition($container) {\n var $qtiContent = $container.find('#qti-content'),\n $qtiItem = $qtiContent.find('.qti-item'),\n itemPosition = $qtiItem.position() || {},\n paddingLeft = parseInt($qtiItem.css('padding-left'), 10),\n paddingTop = parseInt($qtiItem.css('padding-top'), 10),\n textPadding = 3,\n // this is to let the text breathe a bit\n innerX = parseInt(itemPosition.left, 10) + paddingLeft - textPadding,\n innerY = parseInt(itemPosition.top, 10) + paddingTop - textPadding;\n return {\n outerX: innerX - maskOptions.resizeHandleSize * 2 - maskOptions.dragMinWidth,\n outerY: 0,\n innerX: innerX,\n innerY: innerY\n };\n }\n\n function containerWidthHasChanged($container) {\n var newDimensions = getDimensions($container);\n return newDimensions.outerWidth !== dimensions.outerWidth;\n }\n /**\n * Returns the configured plugin\n */\n\n\n var plugin = pluginFactory({\n name: pluginName,\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var $container = testRunner.getAreaBroker().getContentArea().parent();\n this.compoundMask = compoundMaskFactory(maskOptions).init().render($container).on('close', function () {\n closeMask();\n }).hide();\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-lineReader\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'lineReader', true);\n }\n\n function toggleButton() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n\n function toggleMask() {\n if (self.compoundMask.getState('hidden')) {\n if (containerWidthHasChanged($container)) {\n transformMask($container);\n }\n\n openMask();\n } else {\n closeMask();\n }\n }\n\n function openMask() {\n self.compoundMask.show();\n self.trigger('start');\n self.button.turnOn();\n }\n\n function closeMask() {\n if (!self.compoundMask.getState('hidden')) {\n self.compoundMask.hide();\n }\n\n self.trigger('end');\n self.button.turnOff();\n }\n\n function transformMask($maskContainer) {\n dimensions = getDimensions($maskContainer);\n position = getPosition($maskContainer);\n self.compoundMask.setTransforms(_.clone(dimensions), _.clone(position));\n } // create button\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n title: __('Line Reader'),\n icon: 'insert-horizontal-line',\n control: 'line-reader',\n text: __('Line Reader')\n }); // attach user events\n\n this.button.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.toggle) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.toggle, this.getName(), true), function () {\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }, {\n avoidInput: true,\n prevent: true\n });\n }\n } //start disabled\n\n\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', toggleButton).on('renderitem', function () {\n transformMask($container);\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n closeMask();\n }).on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n toggleMask();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n this.compoundMask.destroy();\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return plugin;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/magnifier/magnifierPanel',['jquery', 'lodash', 'ui/component', 'handlebars', 'ui/dynamicComponent'], function ($$1, _, component, Handlebars, dynamicComponent) { 'use strict';\n\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n component = component && Object.prototype.hasOwnProperty.call(component, 'default') ? component['default'] : component;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n dynamicComponent = dynamicComponent && Object.prototype.hasOwnProperty.call(dynamicComponent, 'default') ? dynamicComponent['default'] : dynamicComponent;\n\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var Template = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {\n this.compilerInfo = [4,'>= 1.0.0'];\n helpers = this.merge(helpers, Handlebars.helpers); data = data || {};\n var buffer = \"\", stack1, helper, options, functionType=\"function\", escapeExpression=this.escapeExpression, helperMissing=helpers.helperMissing;\n\n\n buffer += \"<div class=\\\"magnifier\\\">\\n <div class=\\\"level\\\">\";\n if (helper = helpers.level) { stack1 = helper.call(depth0, {hash:{},data:data}); }\n else { helper = (depth0 && depth0.level); stack1 = typeof helper === functionType ? helper.call(depth0, {hash:{},data:data}) : helper; }\n buffer += escapeExpression(stack1)\n + \"</div>\\n <div class=\\\"overlay\\\"></div>\\n <div class=\\\"inner\\\"></div>\\n <div class=\\\"controls close\\\">\\n <a href=\\\"#\\\" class=\\\"control\\\" data-control=\\\"zoomIn\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Magnify more\", options) : helperMissing.call(depth0, \"__\", \"Magnify more\", options)))\n + \"\\\"><span class=\\\"icon-add\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"control\\\" data-control=\\\"zoomOut\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Magnify less\", options) : helperMissing.call(depth0, \"__\", \"Magnify less\", options)))\n + \"\\\"><span class=\\\"icon-remove\\\"></span></a>\\n <a href=\\\"#\\\" class=\\\"closeMagnifier\\\" data-control=\\\"closeMagnifier\\\" title=\\\"\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"Close Magnifier\", options) : helperMissing.call(depth0, \"__\", \"Close Magnifier\", options)))\n + \"\\\"><span class=\\\"icon-result-nok\\\"></span></a>\\n </div>\\n</div>\\n\";\n return buffer;\n });\n function magnifierPanelTpl(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n /**\n * The screen pixel ratio\n * @type {Number}\n */\n\n var screenRatio = window.screen.width / window.screen.height;\n /**\n * Standard debounce delay for heavy process\n * @type {Number}\n */\n\n var debounceDelay = 50;\n /**\n * Standard scrolling throttling for the scrolling\n * It can be lower than the debounce delay as it is lighter in process and it improves the user experience\n * @type {Number}\n */\n\n var scrollingDelay = 20;\n /**\n * The default base size\n * @type {Number}\n */\n\n var defaultBaseSize = 116;\n /**\n * The minimum zoom level\n * @type {Number}\n */\n\n var defaultLevelMin = 2;\n /**\n * The maximum zoom level\n * @type {Number}\n */\n\n var defaultLevelMax = 8;\n /**\n * The default zoom level\n * @type {Number}\n */\n\n var defaultLevel = defaultLevelMin;\n /**\n * Some default values\n * @type {Object}\n */\n\n var defaultConfig = {\n level: defaultLevel,\n levelMin: defaultLevelMin,\n levelMax: defaultLevelMax,\n levelStep: 0.5,\n baseSize: defaultBaseSize,\n maxRatio: 0.5\n };\n var dynamicComponentDefaultConfig = {\n draggable: true,\n resizable: true,\n preserveAspectRatio: false,\n width: defaultBaseSize * defaultLevel,\n height: defaultBaseSize * defaultLevel / screenRatio,\n minWidth: defaultBaseSize * defaultLevelMin,\n minHeight: defaultBaseSize * defaultLevelMin / screenRatio,\n stackingScope: 'test-runner',\n top: 50,\n left: 10\n };\n /**\n * Creates a magnifier panel component\n * @param {Object} config\n * @param {Number} [config.level] - The default zoom level\n * @param {Number} [config.levelMin] - The minimum allowed zoom level\n * @param {Number} [config.levelMax] - The maximum allowed zoom level\n * @param {Number} [config.levelStep] - The level increment applied when using the controls + and -\n * @param {Number} [config.baseSize] - The base size used to assign the width and the height according to the zoom level\n * @param {Number} [config.maxRatio] - The ratio for the maximum size regarding the size of the window\n * @returns {magnifierPanel} the component (initialized)\n */\n\n function magnifierPanelFactory(config) {\n var initConfig = _.defaults(config || {}, defaultConfig);\n\n var zoomLevelMin = parseFloat(initConfig.levelMin);\n var zoomLevelMax = parseFloat(initConfig.levelMax);\n var zoomLevelStep = parseFloat(initConfig.levelStep);\n var zoomLevel = adjustZoomLevel(initConfig.level);\n var maxRatio = parseFloat(initConfig.maxRatio);\n var $initTarget = null;\n var controls = null;\n var observer = null;\n var targetWidth, targetHeight, dx, dy;\n var scrolling = [];\n var dynamicComponentInstance;\n\n var dynamicComponentConfig = _.defaults(config ? config.component || {} : {}, dynamicComponentDefaultConfig);\n /**\n * @typedef {Object} magnifierPanel\n */\n\n\n var magnifierPanel = component({\n /**\n * Gets the current zoom level\n * @returns {Number}\n */\n getZoomLevel: function getZoomLevel() {\n return zoomLevel;\n },\n\n /**\n * Gets the targeted content the magnifier will zoom\n * @returns {jQuery}\n */\n getTarget: function getTarget() {\n return controls && controls.$target;\n },\n\n /**\n * Sets the targeted content the magnifier will zoom\n * @param {jQuery} $newTarget\n * @returns {magnifierPanel}\n * @fires targetchange\n * @fires update\n */\n setTarget: function setTarget($newTarget) {\n if (controls) {\n controls.$target = $newTarget;\n controls.$viewTarget = null;\n setScrollingListener();\n /**\n * @event magnifierPanel#targetchange\n * @param {jQuery} $target\n */\n\n this.trigger('targetchange', controls.$target);\n this.update();\n } else {\n $initTarget = $newTarget;\n }\n\n return this;\n },\n\n /**\n * Sets the zoom level of the magnifier\n * @param {Number} level\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomTo: function zoomTo(level) {\n if (level && _.isFinite(level)) {\n zoomLevel = adjustZoomLevel(level);\n }\n\n applyZoomLevel();\n showZoomLevel();\n updateMaxSize();\n updateZoom();\n /**\n * @event magnifierPanel#zoom\n * @param {Number} zoomLevel\n */\n\n this.trigger('zoom', zoomLevel);\n return this;\n },\n\n /**\n * Increments the zoom level of the magnifier\n * @param {Number} step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomBy: function zoomBy(step) {\n if (step && _.isFinite(step)) {\n this.zoomTo(zoomLevel + parseFloat(step));\n }\n\n return this;\n },\n\n /**\n * Zoom-in using the configured level step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomIn: function zoomIn() {\n return this.zoomBy(zoomLevelStep);\n },\n\n /**\n * Zoom-out using the configured level step\n * @returns {magnifierPanel}\n * @fires zoom\n */\n zoomOut: function zoomOut() {\n return this.zoomBy(-zoomLevelStep);\n },\n\n /**\n * Places the magnifier sight at a particular position on the target content\n * @param {Number} x\n * @param {Number} y\n * @returns {magnifierPanel}\n */\n zoomAt: function zoomAt(x, y) {\n var position;\n\n if (controls) {\n position = this.translate(x, y);\n controls.$inner.css({\n top: -position.top,\n left: -position.left\n });\n }\n },\n\n /**\n * Translates screen coordinates to zoom coordinates\n * @param {Number} x\n * @param {Number} y\n * @returns {Object}\n */\n translate: function translate(x, y) {\n return {\n top: translateMagnifier(y, targetHeight, dynamicComponentInstance.position.height),\n left: translateMagnifier(x, targetWidth, dynamicComponentInstance.position.width)\n };\n },\n\n /**\n * Updates the magnifier with the target content\n * @returns {magnifierPanel}\n * @fires update\n */\n update: function update() {\n if (controls && controls.$target) {\n controls.$clone = controls.$target.clone().removeAttr('id');\n controls.$clone.find('iframe').remove();\n controls.$clone.find('[name],[id],[data-serial]').removeAttr('name id data-serial');\n controls.$inner.empty().append(controls.$clone);\n controls.$clone.find('audio').prop('muted', true);\n applySize();\n applyZoomLevel();\n updateZoom();\n updateMaxSize();\n applyScrolling();\n /**\n * @event magnifierPanel#update\n */\n\n this.trigger('update');\n }\n\n return this;\n }\n }, defaultConfig);\n /**\n * Will update the magnifier content with the actual content\n * @type {Function}\n */\n\n var updateMagnifier = _.debounce(_.bind(magnifierPanel.update, magnifierPanel), debounceDelay);\n /**\n * Will update the magnifier content with the scrolling position\n * @type {Function}\n */\n\n\n var scrollingListenerCallback = _.throttle(function (event) {\n var $target = $$1(event.target);\n var scrollingTop = event.target.scrollTop;\n var scrollLeft = event.target.scrollLeft;\n var scrollId, scrollData; //check if the element is already known as a scrollable element\n\n if (controls && controls.$clone && $target.data('magnifier-scroll')) {\n scrollId = $target.data('magnifier-scroll');\n scrollData = _.find(scrolling, {\n id: scrollId\n });\n scrollData.scrollTop = scrollingTop;\n scrollData.scrollLeft = scrollLeft; //if in clone, scroll it\n\n scrollInClone(scrollData);\n } else {\n //if the element is not yet identified as a scrollable element, tag it and register its id\n scrollId = _.uniqueId('scrolling_');\n $target.attr('data-magnifier-scroll', scrollId);\n scrolling.push({\n id: scrollId,\n scrollTop: scrollingTop,\n scrollLeft: scrollLeft\n }); //update all\n\n magnifierPanel.update();\n }\n }, scrollingDelay);\n /**\n * Scroll an element in the clone\n *\n * @param {Object} scrollData\n * @param {String} scrollData.id\n * @param {Number} [scrollData.scrollTop]\n * @param {Number} [scrollData.scrollLeft]\n */\n\n\n function scrollInClone(scrollData) {\n var $clonedTarget;\n\n if (controls && controls.$clone && scrollData && scrollData.id) {\n $clonedTarget = controls.$clone.find(\"[data-magnifier-scroll=\".concat(scrollData.id, \"]\"));\n\n if ($clonedTarget.length) {\n if (_.isNumber(scrollData.scrollTop)) {\n $clonedTarget[0].scrollTop = scrollData.scrollTop;\n }\n\n if (_.isNumber(scrollData.scrollLeft)) {\n $clonedTarget[0].scrollLeft = scrollData.scrollLeft;\n }\n }\n }\n }\n /**\n * Capture all scroll positions of elements inside current target\n */\n\n\n function updateScrollPositions() {\n if (!controls || !controls.$target) {\n return;\n }\n\n var elements = [controls.$target];\n var scrollOffsetsChanged = false;\n\n while (elements.length) {\n var $currentElement = $$1(elements.shift());\n var scrollLeft = $currentElement.scrollLeft();\n var scrollTop = $currentElement.scrollTop();\n var scrollId = $currentElement.data('magnifier-scroll');\n elements.push.apply(elements, _toConsumableArray(Array.from($currentElement.children())));\n\n if (scrollLeft > 0 || scrollTop > 0 || scrollId) {\n scrollOffsetsChanged = true;\n\n if (scrollId) {\n var scrollData = _.find(scrolling, {\n id: scrollId\n });\n\n scrollData.scrollTop = scrollTop;\n scrollData.scrollLeft = scrollLeft;\n } else {\n scrollId = _.uniqueId('scrolling_');\n $currentElement.attr('data-magnifier-scroll', scrollId);\n scrolling.push({\n id: scrollId,\n scrollTop: scrollTop,\n scrollLeft: scrollLeft\n });\n }\n }\n } // If there is any changes to scroll offset inside the target the magnifier should be updated\n\n\n if (scrollOffsetsChanged) {\n magnifierPanel.update();\n }\n }\n /**\n * Initializes the listener for scrolling event and transfer the scrolling\n */\n\n\n function setScrollingListener() {\n updateScrollPositions();\n window.addEventListener('scroll', scrollingListenerCallback, true);\n }\n /**\n * Stops the listener for scrolling event\n */\n\n\n function removeScrollingListener() {\n window.removeEventListener('scroll', scrollingListenerCallback, true);\n }\n /**\n * Applies scrolling programmatically from the recorded list of elements to be scrolled\n */\n\n\n function applyScrolling() {\n _.forEach(scrolling, scrollInClone);\n }\n /**\n * Adjusts a provided zoom level to fit the constraints\n * @param {Number|String} level\n * @returns {Number}\n */\n\n\n function adjustZoomLevel(level) {\n return Math.max(zoomLevelMin, Math.min(parseFloat(level), zoomLevelMax));\n }\n /**\n * Applies the zoom level to the content\n */\n\n\n function applyZoomLevel() {\n if (controls) {\n controls.$inner.css({\n transform: \"scale(\".concat(zoomLevel, \")\")\n });\n }\n }\n /**\n * Shows the zoom level using a CSS animation\n */\n\n\n function showZoomLevel() {\n var $newZoomLevel;\n\n if (controls) {\n $newZoomLevel = controls.$zoomLevel.clone(true).html(zoomLevel);\n controls.$zoomLevel.before($newZoomLevel).remove();\n controls.$zoomLevel = $newZoomLevel;\n }\n }\n /**\n * Updates the max size according to the window's size\n */\n\n\n function updateMaxSize() {\n if (!dynamicComponentInstance) {\n return;\n }\n\n var $window = $$1(window);\n dynamicComponentInstance.config.maxWidth = $window.width() * maxRatio;\n dynamicComponentInstance.config.maxHeight = $window.height() * maxRatio;\n }\n /**\n * Forwards the size of the target to the cloned content\n */\n\n\n function applySize() {\n if (controls && controls.$clone) {\n targetWidth = controls.$target.width();\n targetHeight = controls.$target.height();\n controls.$clone.width(targetWidth).height(targetHeight);\n }\n }\n /**\n * Place the zoom sight at the right place inside the magnifier\n */\n\n\n function updateZoom() {\n var position;\n\n if (controls && controls.$target) {\n position = dynamicComponentInstance.position;\n position.x += dx + controls.$target.scrollLeft();\n position.y += dy + controls.$target.scrollTop();\n magnifierPanel.zoomAt(position.x, position.y);\n }\n }\n /**\n * Creates the observer that will react to DOM changes to update the magnifier\n */\n\n\n function createObserver() {\n observer = new window.MutationObserver(updateMagnifier);\n }\n /**\n * Starts to observe the DOM of the magnifier target\n */\n\n\n function startObserver() {\n if (controls && controls.$target) {\n observer.observe(controls.$target.get(0), {\n childList: true,\n // Set to true if additions and removals of the target node's child elements (including text nodes) are to be observed.\n attributes: true,\n // Set to true if mutations to target's attributes are to be observed.\n characterData: true,\n // Set to true if mutations to target's data are to be observed.\n subtree: true // Set to true if mutations to target and target's descendants are to be observed.\n\n });\n }\n\n setScrollingListener();\n }\n /**\n * Stops to observe the DOM of the magnifier target\n */\n\n\n function stopObserver() {\n observer.disconnect();\n removeScrollingListener();\n }\n /**\n * Translates a screen coordinate into the magnifier\n * @param {Number} coordinate\n * @param {Number} actualSize\n * @param {Number} magnifierSize\n * @returns {Number}\n */\n\n\n function translateMagnifier(coordinate, actualSize, magnifierSize) {\n var delta = 0;\n var ratio = zoomLevel;\n\n if (actualSize) {\n delta = actualSize * (zoomLevel - 1) / 2;\n ratio = (actualSize * zoomLevel - magnifierSize) / (actualSize - magnifierSize);\n }\n\n return coordinate * ratio - delta;\n }\n /**\n * Gets the top element from a particular absolute point.\n * @param {Number} x - the page X-coordinate of the point\n * @param {Number} y - the page Y-coordinate of the point\n * @returns {HTMLElement}\n */\n\n\n function getElementFromPoint(x, y) {\n var el; // this is done to prevent working with undefined coordinates\n\n x = x || 0;\n y = y || 0;\n\n if (controls) {\n controls.$overlay.addClass('hidden');\n }\n\n el = document.elementFromPoint(x, y);\n\n if (controls) {\n controls.$overlay.removeClass('hidden');\n }\n\n return el;\n }\n /**\n * Find the related node in the target. The both trees must have the same content.\n * @param {jQuery|HTMLElement} node - the node for which find a relation\n * @param {jQuery|HTMLElement} root - the root of the tree that contains the actual node\n * @param {jQuery|HTMLElement} target - the root of the tree that could contains the related node\n * @returns {jQuery}\n */\n\n\n function findSourceNode(node, root, target) {\n var $node = $$1(node);\n var $root = $$1(root);\n var $target = $$1(target);\n var indexes = [$node.index()]; // compute map of node's parents indexes\n\n $node.parents().each(function () {\n var $this = $$1(this);\n\n if (!$this.is($root)) {\n indexes.push($this.index());\n } else {\n return false;\n }\n }); // the last index is related to the root, so ignore it\n\n indexes.pop(); // now try to find the same node using the path provided by the indexes map\n\n if (indexes.length) {\n $node = $target;\n\n _.forEachRight(indexes, function (index) {\n $node = $node.children().eq(index);\n\n if (!$node.length) {\n return false;\n }\n });\n } else {\n // nothing to search for...\n $node = $$1();\n }\n\n return $node;\n }\n\n dynamicComponentInstance = dynamicComponent({}).on('rendercontent', function ($content) {\n var dynamicComponentContext = this;\n var $element = this.getElement();\n $element.addClass('magnifier-container');\n magnifierPanel.setTemplate(magnifierPanelTpl).on('render', function () {\n var self = this;\n var $component = this.getElement();\n this.setState('hidden', true); // compute the padding of the magnifier content\n\n dx = ($component.outerWidth() - $component.width()) / 2;\n dy = ($component.outerHeight() - $component.height()) / 2;\n controls = {\n $target: $initTarget,\n $inner: $$1('.inner', $component),\n $zoomLevel: $$1('.level', $component),\n $overlay: $$1('.overlay', $component)\n };\n $initTarget = null; // click on zoom-out control\n\n $component.on('click touchstart', '.control[data-control=\"zoomOut\"]', function (event) {\n event.preventDefault();\n self.zoomOut();\n }); // click on zoom-in control\n\n $component.on('click touchstart', '.control[data-control=\"zoomIn\"]', function (event) {\n event.preventDefault();\n self.zoomIn();\n }); // click on close controls\n\n $component.on('click touchstart', '.closeMagnifier', function (event) {\n event.preventDefault();\n self.hide();\n self.trigger('close');\n }); // interact through the magnifier glass with the zoomed content\n\n $component.on('click touchstart', '.overlay', function (event) {\n findSourceNode(getElementFromPoint(event.pageX, event.pageY), controls.$inner, controls.$target).click().focus();\n });\n createObserver();\n updateMaxSize();\n applyZoomLevel();\n }).on('show', function () {\n updateMagnifier();\n startObserver();\n dynamicComponentContext.show();\n }).on('hide', function () {\n stopObserver();\n dynamicComponentContext.hide();\n }).on('destroy', function () {\n stopObserver();\n $initTarget = null;\n controls = null;\n observer = null;\n dynamicComponentContext.destroy();\n }).init(initConfig).render($content);\n }).on('down move resize', function () {\n updateZoom();\n }).on('resize', function () {\n updateMaxSize();\n }).init(dynamicComponentConfig);\n return magnifierPanel;\n }\n\n return magnifierPanelFactory;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/magnifier/magnifier',['lodash', 'i18n', 'taoTests/runner/plugin', 'ui/hider', 'util/shortcut', 'util/namespace', 'taoQtiTest/runner/plugins/tools/magnifier/magnifierPanel', 'taoQtiTest/runner/helpers/map'], function (_, __, pluginFactory, hider, shortcut, namespaceHelper, magnifierPanelFactory, mapHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n magnifierPanelFactory = magnifierPanelFactory && Object.prototype.hasOwnProperty.call(magnifierPanelFactory, 'default') ? magnifierPanelFactory['default'] : magnifierPanelFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016 (original work) Open Assessment Technologies SA ;\n */\n /**\n * The public name of the plugin\n * @type {String}\n */\n\n var pluginName = 'magnifier';\n /**\n * The prefix of actions triggered through the event loop\n * @type {String}\n */\n\n var actionPrefix = \"tool-\".concat(pluginName, \"-\");\n /**\n * Some default options for the plugin\n * @type {Object}\n */\n\n var defaultOptions = {\n zoomMin: 2,\n // Smallest magnification factor\n zoomMax: 8,\n // Biggest magnification factor\n zoomStep: 0.5 // Increment between min an max\n\n };\n /**\n * Returns the configured plugin\n */\n\n var magnifier = pluginFactory({\n name: pluginName,\n\n /**\n * Initializes the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginConfig = Object.assign({}, defaultOptions, this.getConfig());\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[pluginName] || {};\n var magnifierPanel = null;\n /**\n * Creates the magnifier panel on demand\n * @returns {magnifierPanel}\n * @fires plugin-magnifier-create.magnifier\n */\n\n function getMagnifierPanel() {\n var $container;\n\n if (!magnifierPanel) {\n $container = testRunner.getAreaBroker().getContainer();\n magnifierPanel = magnifierPanelFactory({\n levelMin: pluginConfig.zoomMin,\n levelMax: pluginConfig.zoomMax,\n levelStep: pluginConfig.zoomStep,\n component: {\n renderTo: $container.parent(),\n draggableContainer: $container.parent()\n }\n }).on('show', function () {\n /**\n * @event plugin-magnifier-show.magnifier\n */\n self.trigger('magnifier-show');\n }).on('hide', function () {\n /**\n * @event plugin-magnifier-hide.magnifier\n */\n self.trigger('magnifier-hide');\n }).on('zoom', function (level) {\n /**\n * @event plugin-magnifier-zoom.magnifier\n * @param {Number} zoomLevel\n */\n self.trigger('magnifier-zoom', level);\n }).on('close', function () {\n hideMagnifier();\n }).setTarget($container);\n /**\n * @event plugin-magnifier-create.magnifier\n */\n\n self.trigger('magnifier-create');\n }\n\n return magnifierPanel;\n }\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n\n function isEnabled() {\n //to be activated with the special category x-tao-option-magnifier\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'magnifier', true);\n }\n /**\n * Shows/hides the plugin GUI according to context\n */\n\n\n function togglePlugin() {\n if (isEnabled()) {\n self.show();\n } else {\n self.hide();\n }\n }\n /**\n * Shows/hides the magnifier\n */\n\n\n function toggleMagnifier() {\n if (self.getState('enabled')) {\n if (self.getState('active')) {\n hideMagnifier();\n } else {\n showMagnifier();\n }\n }\n }\n /**\n * Opens the magnifier panel\n * @fires plugin-magnifier-show.magnifier\n */\n\n\n function showMagnifier() {\n getMagnifierPanel();\n\n if (magnifierPanel.is('hidden')) {\n magnifierPanel.show();\n }\n\n self.button.turnOn();\n testRunner.trigger(\"plugin-open.\".concat(pluginName));\n self.setState('active', true);\n }\n /**\n * Closes the magnifier panel\n * @fires plugin-magnifier-hide.magnifier\n */\n\n\n function hideMagnifier() {\n self.setState('active', false);\n self.button.turnOff();\n testRunner.trigger(\"plugin-close.\".concat(pluginName));\n\n if (magnifierPanel && !magnifierPanel.is('hidden')) {\n magnifierPanel.hide();\n }\n } // build element\n\n\n this.button = this.getAreaBroker().getToolbox().createEntry({\n control: 'magnify',\n title: __('Displays a customisable magnifier'),\n text: __('Magnifying Glass'),\n icon: 'find'\n }); // attach behavior\n\n this.button.on('click', function (event) {\n event.preventDefault();\n testRunner.trigger(\"\".concat(actionPrefix, \"toggle\"));\n }); // handle the plugin's shortcuts\n\n if (testRunnerOptions.allowShortcuts) {\n _.forEach(pluginShortcuts, function (command, key) {\n shortcut.add(namespaceHelper.namespaceAll(command, pluginName, true), function () {\n // just fire the action using the event loop\n testRunner.trigger(actionPrefix + key);\n }, {\n avoidInput: true\n });\n });\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner // runner life cycle\n .on('loaditem', function () {\n togglePlugin();\n self.disable();\n }).on('renderitem', function () {\n if (magnifierPanel) {\n magnifierPanel.update().zoomTo(pluginConfig.zoomMin);\n }\n }).on('enabletools renderitem', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n if (self.getState('active')) {\n hideMagnifier();\n }\n\n self.disable();\n }).on('destroy', function () {\n if (magnifierPanel) {\n magnifierPanel.destroy();\n }\n\n magnifierPanel = null;\n }) // commands that controls the magnifier\n .on(\"\".concat(actionPrefix, \"toggle\"), function () {\n if (isEnabled()) {\n toggleMagnifier();\n }\n }).on(\"\".concat(actionPrefix, \"in\"), function () {\n if (isEnabled() && self.getState('enabled') && self.getState('active')) {\n getMagnifierPanel().zoomIn();\n }\n }).on(\"\".concat(actionPrefix, \"out\"), function () {\n if (isEnabled() && self.getState('enabled') && self.getState('active')) {\n getMagnifierPanel().zoomOut();\n }\n }).on(\"\".concat(actionPrefix, \"close\"), function () {\n if (self.getState('active')) {\n hideMagnifier();\n }\n });\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(pluginName));\n },\n\n /**\n * Enables the button\n */\n enable: function enable() {\n this.button.enable();\n },\n\n /**\n * Disables the button\n */\n disable: function disable() {\n this.button.disable();\n },\n\n /**\n * Shows the button\n */\n show: function show() {\n this.button.show();\n },\n\n /**\n * Hides the button\n */\n hide: function hide() {\n this.button.hide();\n }\n });\n\n return magnifier;\n\n});\n\n","define('taoQtiTest/runner/plugins/tools/zoom',['jquery', 'i18n', 'ui/hider', 'ui/transformer', 'util/shortcut', 'util/namespace', 'taoTests/runner/plugin', 'taoQtiTest/runner/helpers/map'], function ($, __, hider, transformer, shortcut, namespaceHelper, pluginFactory, mapHelper) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n transformer = transformer && Object.prototype.hasOwnProperty.call(transformer, 'default') ? transformer['default'] : transformer;\n shortcut = shortcut && Object.prototype.hasOwnProperty.call(shortcut, 'default') ? shortcut['default'] : shortcut;\n namespaceHelper = namespaceHelper && Object.prototype.hasOwnProperty.call(namespaceHelper, 'default') ? namespaceHelper['default'] : namespaceHelper;\n pluginFactory = pluginFactory && Object.prototype.hasOwnProperty.call(pluginFactory, 'default') ? pluginFactory['default'] : pluginFactory;\n mapHelper = mapHelper && Object.prototype.hasOwnProperty.call(mapHelper, 'default') ? mapHelper['default'] : mapHelper;\n\n /**\n * This program is free software; you can redistribute it and/or\n * modify it under the terms of the GNU General Public License\n * as published by the Free Software Foundation; under version 2\n * of the License (non-upgradable).\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with this program; if not, write to the Free Software\n * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n *\n * Copyright (c) 2016-2019 (original work) Open Assessment Technologies SA;\n *\n * @author dieter <dieter@taotesting.com>\n * @author Alexander Zagovorichev <zagovorichev@1pt.com>\n */\n /**\n * The standard zoom level, in percentage\n * @type {Number}\n */\n\n var standard = 100;\n /**\n * Zoom-In/Zoom-Out steps\n * @type {Number}\n */\n\n var increment = 10;\n /**\n * The zoom boundaries, in percentage\n * @type {Object}\n */\n\n var threshold = {\n lower: 10,\n upper: 200\n };\n /**\n * Sets the zoom level\n * @param {jQuery} $target\n * @param {Number} level - Zoom percentage\n */\n\n var _setZoomLevel = function _setZoomLevel($target, level) {\n var $parent = $target.parent();\n var newScale = level / standard;\n var isOverZoom = $parent.outerWidth(true) < $target.width() * newScale;\n\n if (isOverZoom) {\n transformer.setTransformOrigin($target, '0 0');\n $parent.css('margin-left', '0');\n } else {\n transformer.setTransformOrigin($target, '50% 0');\n $parent.css('margin-left', '');\n }\n\n transformer.scale($target, newScale);\n };\n /**\n * Restores the standard zoom level\n * @param {jQuery} $target\n */\n\n\n var _resetZoom = function _resetZoom($target) {\n transformer.reset($target);\n };\n /**\n * Forces a browser repaint\n * Solution from http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes?answertab=votes#tab-top\n * @param {jQuery} $target\n */\n\n\n var forceRepaint = function forceRepaint($target) {\n var sel = $target[0];\n\n if (sel) {\n sel.style.display = 'none';\n sel.offsetHeight; // no need to store this anywhere, the reference is enough\n\n sel.style.display = '';\n }\n };\n /**\n * Returns the configured plugin\n */\n\n\n var zoom = pluginFactory({\n name: 'zoom',\n\n /**\n * Initialize the plugin (called during runner's init)\n */\n init: function init() {\n var self = this;\n var testRunner = this.getTestRunner();\n var testRunnerOptions = testRunner.getOptions();\n var pluginShortcuts = (testRunnerOptions.shortcuts || {})[this.getName()] || {};\n /**\n * Checks if the plugin is currently available\n * @returns {Boolean}\n */\n\n function isConfigured() {\n //to be activated with the special category x-tao-option-zoom\n return mapHelper.hasItemCategory(testRunner.getTestMap(), testRunner.getTestContext().itemIdentifier, 'zoom', true);\n }\n /**\n * Is zoom activated ? if not, then we hide the plugin\n */\n\n\n function togglePlugin() {\n if (isConfigured()) {\n //allow zoom\n self.show();\n } else {\n self.hide();\n }\n }\n\n function zoomAction(dir) {\n var inc = increment * dir;\n var el, sx, sy, before, after;\n\n if (self.$zoomTarget) {\n el = self.$zoomTarget[0];\n before = el.getBoundingClientRect();\n sx = self.$container.scrollLeft();\n sy = self.$container.scrollTop();\n self.zoom = Math.max(threshold.lower, Math.min(threshold.upper, self.zoom + inc));\n\n if (self.zoom === standard) {\n _resetZoom(self.$zoomTarget);\n } else {\n _setZoomLevel(self.$zoomTarget, self.zoom);\n } // force a browser repaint to fix a scrollbar issue with WebKit\n\n\n forceRepaint(self.$zoomTarget);\n after = el.getBoundingClientRect();\n sx = Math.max(0, sx + (after.width - before.width) / 2);\n sy = Math.max(0, sy + (after.height - before.height) / 2);\n self.$container.scrollLeft(sx).scrollTop(sy);\n }\n }\n\n function zoomIn() {\n if (self.getState('enabled') !== false) {\n zoomAction(1);\n }\n }\n\n function zoomOut() {\n if (self.getState('enabled') !== false) {\n zoomAction(-1);\n }\n } //build element (detached)\n\n\n this.buttonZoomOut = this.getAreaBroker().getToolbox().createEntry({\n control: 'zoomOut',\n title: __('Zoom out'),\n icon: 'remove'\n });\n this.buttonZoomIn = this.getAreaBroker().getToolbox().createEntry({\n control: 'zoomIn',\n title: __('Zoom in'),\n icon: 'add'\n }); //attach behavior\n\n this.buttonZoomIn.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-zoomin');\n }); //attach behavior\n\n this.buttonZoomOut.on('click', function (e) {\n e.preventDefault();\n testRunner.trigger('tool-zoomout');\n });\n\n if (testRunnerOptions.allowShortcuts) {\n if (pluginShortcuts.in) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.in, this.getName(), true), function () {\n testRunner.trigger('tool-zoomin');\n }, {\n avoidInput: true\n });\n }\n\n if (pluginShortcuts.out) {\n shortcut.add(namespaceHelper.namespaceAll(pluginShortcuts.out, this.getName(), true), function () {\n testRunner.trigger('tool-zoomout');\n }, {\n avoidInput: true\n });\n }\n } //start disabled\n\n\n togglePlugin();\n this.disable(); //update plugin state based on changes\n\n testRunner.on('loaditem', function () {\n self.zoom = standard;\n togglePlugin();\n self.disable();\n }).on('renderitem', function () {\n self.$container = $('#qti-content');\n self.$zoomTarget = $('.qti-item');\n self.enable();\n }).on('enabletools', function () {\n self.enable();\n }).on('disabletools unloaditem', function () {\n self.disable();\n }).on('tool-zoomin', zoomIn).on('tool-zoomout', zoomOut);\n },\n\n /**\n * Called during the runner's destroy phase\n */\n destroy: function destroy() {\n shortcut.remove(\".\".concat(this.getName()));\n },\n\n /**\n * Enable the button\n */\n enable: function enable() {\n this.buttonZoomIn.enable();\n this.buttonZoomOut.enable();\n },\n\n /**\n * Disable the button\n */\n disable: function disable() {\n this.buttonZoomIn.disable();\n this.buttonZoomOut.disable();\n },\n\n /**\n * Show the button\n */\n show: function show() {\n this.buttonZoomIn.show();\n this.buttonZoomOut.show();\n },\n\n /**\n * Hide the button\n */\n hide: function hide() {\n this.buttonZoomIn.hide();\n this.buttonZoomOut.hide();\n }\n });\n\n return zoom;\n\n});\n\n","\n(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n('/*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.test-runner-scope .content-wrapper p.key-navigation-group, .test-runner-scope .content-wrapper div.key-navigation-group:not(.select2-container) {\\n padding: 5px !important;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction) {\\n border-width: 1px !important;\\n border-style: solid;\\n border-color: transparent;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction).focusin {\\n border-color: #0e5d91 !important;\\n outline: none;\\n}\\n\\n.test-runner-scope .content-wrapper .key-navigation-group:not(.qti-extendedTextInteraction):not(.qti-textEntryInteraction):not(.qti-customInteraction).qti-interaction .qti-choice.key-navigation-highlight:not(.tts-content-node) {\\n background: #e7eff4 !important;\\n}\\n\\n.test-runner-scope .content-wrapper span.key-navigation-group {\\n border: none !important;\\n}\\n\\n.test-runner-scope .content-wrapper span.key-navigation-group.focusin {\\n outline: solid #0e5d91 1px !important;\\n outline-offset: 1px;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group.focusin {\\n background: #e7eff4;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight .qti-navigator-tab {\\n border-width: 2px;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight:focus {\\n outline: none;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group .qti-navigator-filters .key-navigation-highlight:focus .qti-navigator-tab {\\n border-top-color: #222 !important;\\n border-left-color: #222 !important;\\n border-right-color: #222 !important;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group li.qti-navigator-item.key-navigation-highlight {\\n padding-left: 8px;\\n border-left: solid 2px #222;\\n}\\n\\n.test-runner-scope .test-sidebar .key-navigation-group li.qti-navigator-item.key-navigation-highlight .key-navigation-highlight:focus {\\n outline: none;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group.focusin {\\n -ms-box-shadow: 0 0 6px 2px #3e7da7;\\n -o-box-shadow: 0 0 6px 2px #3e7da7;\\n box-shadow: 0 0 6px 2px #3e7da7;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus {\\n margin-bottom: 0;\\n border-bottom-color: #e7eff4 !important;\\n outline: none;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus.active {\\n border-bottom-color: transparent !important;\\n background: #e7eff4 !important;\\n}\\n\\n.test-runner-scope .bottom-action-bar.content-action-bar.key-navigation-group .key-navigation-highlight:focus:not(.active):not(:active) .li-inner {\\n color: #e7eff4;\\n}\\n\\nheader .settings-menu .key-navigation-group {\\n padding-right: 5px;\\n}\\n\\nheader .settings-menu .key-navigation-group.focusin {\\n background-color: rgba(14, 93, 145, 0.5);\\n padding-bottom: 10px;\\n}\\n\\nheader .settings-menu .key-navigation-highlight:focus {\\n height: 54px;\\n color: white !important;\\n border-bottom: solid 2px white !important;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/content/accessibility/css/key-navigation.css.map *//*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.countdown {\\n opacity: 0;\\n position: relative;\\n display: inline-block;\\n overflow: hidden;\\n text-align: center;\\n vertical-align: top;\\n line-height: 1.2;\\n padding: 0 20px;\\n margin-top: -1px;\\n height: 100%;\\n}\\n\\n.countdown.rendered {\\n opacity: 1;\\n transition: opacity, 300ms, linear, 0s;\\n}\\n\\n.countdown .label {\\n max-width: 130px;\\n display: block;\\n font-size: 12px;\\n font-size: 1.2rem;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/controls/timer/component/css/countdown.css.map *//*\\nUsage:\\n- linear-gradient((color1, color2, color3)) - returns linear-gradient with evenly distributed colors,\\n if 3 colors used then the position of each will be 33,33%\\n- linear-gradient((color1 0%, color2 30%, color3 80%)) - returns linear-gradient with manually distributed colors,\\n first param - color, second - position. Also you can use px or other valid units for set position.\\n*/\\n/* Do not edit */\\n.timer-box {\\n opacity: 0;\\n padding-top: 0;\\n white-space: nowrap;\\n /*flex item of control-box */\\n flex: 1 0 auto;\\n /* is also a flex container for .qti-timer */\\n display: flex;\\n flex-direction: row;\\n flex-wrap: nowrap;\\n justify-content: flex-end;\\n}\\n\\n.timer-box.rendered {\\n opacity: 1;\\n transition: opacity, 300ms, linear, 0s;\\n}\\n\\n.timer-box .timer-toggler {\\n text-decoration: none;\\n color: white;\\n line-height: 1.3;\\n opacity: .68;\\n padding: 8px 20px;\\n position: relative;\\n top: -1px;\\n left: 20px;\\n z-index: 2;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box .timer-toggler:hover, .timer-box .timer-toggler:active, .timer-box .timer-toggler:focus {\\n outline: unset;\\n}\\n\\n.timer-box .timer-toggler:active, .timer-box .timer-toggler:focus {\\n border: 2px solid white;\\n}\\n\\n.timer-box .timer-toggler:hover {\\n opacity: .93;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box.zen .timer-toggler {\\n opacity: .93;\\n transition: opacity, 0.5s, ease-out, 0s;\\n}\\n\\n.timer-box.zen .countdown .time {\\n opacity: 0;\\n transition: opacity, 1s, ease-out, 0s;\\n}\\n\\n.timer-box .countdown::before {\\n content: \\' \\';\\n background: rgba(255, 255, 255, 0.3);\\n width: 1px;\\n height: 20px;\\n position: absolute;\\n left: 0;\\n top: 5px;\\n}\\n\\n.timer-box .countdown:first-child::before {\\n content: none;\\n}\\n\\n.timer-box .countdown[data-scope=test][data-type=min] {\\n order: 5;\\n}\\n\\n.timer-box .countdown[data-scope=test] {\\n order: 10;\\n}\\n\\n.timer-box .countdown[data-scope=testPart][data-type=min] {\\n order: 15;\\n}\\n\\n.timer-box .countdown[data-scope=testPart] {\\n order: 20;\\n}\\n\\n.timer-box .countdown[data-scope=section][data-type=min] {\\n order: 25;\\n}\\n\\n.timer-box .countdown[data-scope=section] {\\n order: 30;\\n}\\n\\n.timer-box .countdown[data-scope=item][data-type=min] {\\n order: 35;\\n}\\n\\n.timer-box .countdown[data-scope=item] {\\n order: 40;\\n}\\n\\n/*# sourceMappingURL=../../../taoQtiTest/views/node_modules/@oat-sa/tao-test-runner-qti/dist/plugins/controls/timer/component/css/timerbox.css.map */');\n","\ndefine(\"taoQtiTest/loader/testPlugins.bundle\", function(){});\n"]} |