tao-test/app/taoQtiItem/views/js/loader/qtiLoader.min.js.map

1 line
333 KiB
Plaintext

{"version":3,"sources":["../../loader/bootstrap.js","../qtiItem/core/qtiClasses.js","../qtiItem/helper/util.js","../qtiItem/helper/rendererConfig.js","../qtiItem/core/Element.js","../qtiItem/helper/xmlNsHandler.js","../qtiItem/helper/responseRules.js","../qtiItem/helper/response.js","../qtiItem/helper/itemScore.js","../qtiItem/core/Loader.js","../qtiItem/helper/pci.js","../qtiItem/helper/container.js","../qtiRunner/modalFeedback/inlineRenderer.js","../qtiRunner/modalFeedback/modalRenderer.js","../qtiRunner/core/QtiRunner.js","../qtiItem/helper/interactionHelper.js","../qtiRunner/core/Renderer.js","../portableElementRegistry/factory/factory.js","../qtiCreator/helper/qtiElements.js","../portableElementRegistry/factory/ciRegistry.js","../portableElementRegistry/ciRegistry.js","../portableElementRegistry/factory/icRegistry.js","../portableElementRegistry/icRegistry.js","../portableElementRegistry/assetManager/portableAssetStrategy.js","../qtiCommonRenderer/renderers/config.js","../qtiCommonRenderer/renderers/Renderer.js","../runner/provider/manager/userModules.js","../runtime/qtiBootstrap.js","../runtime/qtiLoader.js","module-create.js","/Users/hannadzmitryieva/projects/taoCore/tao/views/build/config-wrap-end-default.js"],"names":[],"mappings":"+iEAsBA,CAAA,UAAA,CACA,aADA,GAKA,CAAA,YAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CALA,CAMA,SAAA,CAAA,YAAA,CAAA,YAAA,CAAA,aAAA,CANA,CAOA,MAAA,CAAA,YAAA,CAAA,YAAA,CAAA,aAAA,CAPA,CASA,cAAA,CAAA,UAAA,IACA,CAAA,iBAAA,CAAA,EADA,CAEA,cAAA,CAAA,YAAA,CAAA,YAAA,CAAA,iBAAA,CAFA,CAGA,MAAA,CAAA,YAAA,CAAA,YAAA,CAAA,aAAA,CAHA,CAIA,GAAA,CACA,iBAAA,CAAA,IAAA,CAAA,KAAA,CAAA,MAAA,CACA,CAAA,MAAA,GAAA,CAAA,CACA,iBAAA,CAAA,EACA,CACA,MAAA,CAAA,OAAA,CAAA,CAAA,cAAA,CAAA,CAAA,SAAA,UAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,UAAA,CACA,MAAA,CAAA,OADA,GAEA,MAAA,CAAA,OAAA,GAFA,CAGA,UAAA,CAAA,KAAA,CAAA,iBAAA,CAHA,CAKA,CALA,CAMA,QAAA,CAAA,gBAAA,CAAA,kBAAA,CAAA,eAAA,IAPA,CAQA,UAAA,GAAA,QAAA,CAAA,UARA,EASA,eAAA,EAEA,CAXA,CAYA,CA9BA,CAiCA,MAAA,CAAA,OAAA,CAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAGA,MAAA,CAAA,WAHA,GAMA,MAAA,CAAA,MAAA,CAAA,EANA,CAaA,MAAA,CAAA,WAAA,CAAA,SAAA,OAAA,CAAA,CACA,OAAA,CAAA,OAAA,EAAA,EADA,CAEA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAFA,CAGA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,IAAA,CAAA,KAAA,CAAA,CACA,MAAA,CAAA,IAAA,EAAA,OAAA,CAAA,OAAA,CAAA,IAAA,IAAA,KAAA,EAAA,KAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CACA,CAFA,CAHA,CAMA,OAAA,CAAA,OAAA,CAAA,UAAA,CACA,OAAA,CAAA,OAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,IAAA,IACA,CAFA,CADA,CAIA,cAAA,EACA,CALA,CAMA,CAzBA,EA4BA,MAAA,EAAA,MAAA,CAAA,OAAA,EAAA,MAAA,CAAA,OAAA,CAAA,MA5BA,CA6BA,MAAA,CAAA,WAAA,CAAA,CAAA,MAAA,CAAA,CA7BA,CA+BA,cAAA,EAEA,CAjCA,CAkCA,CAnEA,G,CAqEA,MAAA,CAAA,kBAAA,CAAA,UAAA,CAAA,CAAA,C,CC3FA,MAAA,CAAA,oCAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAqDA,MAnDA,CACA,UAAA,CAAA,mCADA,CAEA,cAAA,CAAA,8BAFA,CAGA,kBAAA,CAAA,4CAHA,CAIA,mBAAA,CAAA,qDAJA,CAKA,UAAA,CAAA,oCALA,CAMA,IAAA,CAAA,8BANA,CAOA,GAAA,CAAA,6BAPA,CAQA,MAAA,CAAA,gCARA,CASA,kBAAA,CAAA,sDATA,CAUA,mBAAA,CAAA,uDAVA,CAWA,WAAA,CAAA,qCAXA,CAYA,iBAAA,CAAA,mDAZA,CAaA,GAAA,CAAA,qCAbA,CAcA,MAAA,CAAA,wCAdA,CAeA,OAAA,CAAA,yCAfA,CAgBA,aAAA,CAAA,+CAhBA,CAiBA,OAAA,CAAA,yCAjBA,CAkBA,YAAA,CAAA,8CAlBA,CAmBA,sBAAA,CAAA,wDAnBA,CAoBA,YAAA,CAAA,8CApBA,CAqBA,oBAAA,CAAA,2DArBA,CAsBA,iBAAA,CAAA,wDAtBA,CAuBA,qBAAA,CAAA,4DAvBA,CAwBA,uBAAA,CAAA,8DAxBA,CAyBA,mBAAA,CAAA,0DAzBA,CA0BA,2BAAA,CAAA,kEA1BA,CA2BA,0BAAA,CAAA,iEA3BA,CA4BA,uBAAA,CAAA,8DA5BA,CA6BA,kBAAA,CAAA,yDA7BA,CA8BA,kBAAA,CAAA,yDA9BA,CA+BA,uBAAA,CAAA,8DA/BA,CAgCA,gBAAA,CAAA,uDAhCA,CAiCA,gBAAA,CAAA,uDAjCA,CAkCA,gBAAA,CAAA,uDAlCA,CAmCA,MAAA,CAAA,6CAnCA,CAoCA,sBAAA,CAAA,6DApCA,CAqCA,iBAAA,CAAA,wDArCA,CAsCA,oBAAA,CAAA,2DAtCA,CAuCA,iBAAA,CAAA,wDAvCA,CAwCA,aAAA,CAAA,iDAxCA,CAyCA,cAAA,CAAA,kDAzCA,CA0CA,aAAA,CAAA,iDA1CA,CA2CA,iBAAA,CAAA,wDA3CA,CA4CA,WAAA,CAAA,6CA5CA,CA6CA,OAAA,CAAA,iCA7CA,CA8CA,KAAA,CAAA,+BA9CA,CA+CA,eAAA,CAAA,yCA/CA,CAgDA,QAAA,CAAA,iCAhDA,CAqDA,CAvDA,C,CCAA,MAAA,CAAA,gCAAA,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,CAuLA,MAhKA,CACA,WAAA,CAAA,SAAA,MAAA,CAAA,CAGA,OAFA,CAAA,EAAA,CAAA,MAAA,EAAA,EAEA,CADA,KAAA,CAAA,sCACA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,EAAA,EAAA,KAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,MAAA,GAAA,KAAA,CAAA,MAAA,CAAA,CAAA,CAEA,MAAA,CAAA,EACA,CARA,CAiBA,OAAA,CAAA,SAAA,IAAA,CAAA,MAAA,CAAA,IACA,CAAA,EADA,CAEA,OAFA,CAGA,CAAA,CAAA,CAHA,CAIA,MAAA,CAAA,EAJA,CAKA,MAAA,GALA,CAOA,GAAA,CAAA,IAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,oDAAA,CAAA,CAGA,OAAA,CAAA,IAAA,CAAA,UAAA,EAXA,CAaA,EACA,CAAA,MAAA,GADA,CAEA,EAAA,CAAA,MAAA,CAAA,MAFA,CAGA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAAA,CAHA,GAIA,MAAA,GAJA,CAKA,MAAA,CAAA,IAAA,CALA,CAMA,CAAA,EANA,QAQA,MARA,EAUA,MAAA,CAAA,EACA,CAzCA,CAmDA,eAAA,CAAA,SAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,IACA,CAAA,EADA,CAEA,OAFA,CAGA,MAAA,CAAA,EAHA,CAIA,CAAA,CAAA,CAJA,CAKA,MAAA,GALA,CAOA,GAAA,CAAA,IAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,oDAAA,CAAA,CAGA,GAAA,CAAA,MAAA,CACA,KAAA,IAAA,CAAA,SAAA,CAAA,2CAAA,CAAA,CAGA,OAAA,CAAA,IAAA,CAAA,kBAAA,EAfA,CAgBA,SAAA,GAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,EAAA,SAhBA,CAkBA,MAlBA,GAmBA,MAAA,CAAA,MAAA,CACA,OADA,CACA,YADA,CACA,GADA,EAEA,OAFA,CAEA,iBAFA,CAEA,GAFA,EAGA,OAHA,CAGA,QAHA,CAGA,GAHA,CAnBA,CAuBA,SAvBA,GAwBA,MAAA,CAAA,IAAA,CAxBA,GA4BA,EACA,CAAA,MAAA,GADA,CAEA,EAAA,CAAA,MAAA,CAAA,MAFA,CAGA,OAAA,CAAA,EAAA,CAHA,GAIA,MAAA,GAJA,CAKA,MAAA,CAAA,IAAA,CALA,CAMA,CAAA,EANA,QAQA,MARA,EAUA,MAAA,CAAA,EACA,CA1FA,CA4FA,gBAAA,CAAA,SAAA,OAAA,CAAA,eAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,IAAA,CAMA,GAJA,CAAA,CAAA,QAAA,CAAA,eAAA,CAIA,GAHA,eAAA,CAAA,CAAA,eAAA,CAGA,EAAA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,CACA,CAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,cAAA,CAAA,CAEA,GAAA,CAAA,UAAA,CAAA,OAAA,CACA,CAAA,CAAA,IAAA,CAAA,cAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,SAAA,SAAA,CAAA,CACA,UAAA,CAAA,UAAA,CAAA,SAAA,CACA,CAFA,CAHA,CAMA,GAAA,CAAA,GAAA,CAAA,UAAA,CAAA,cAAA,CAAA,CANA,MAQA,CAAA,GARA,EASA,KAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CATA,MAcA,CAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,CAAA,UAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GACA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,cAAA,CADA,CAEA,KAFA,EAGA,QAGA,CAPA,CAdA,EAuBA,KAvBA,SA0BA,CA1BA,CADA,KA6BA,MAAA,IAAA,CAAA,KAAA,CAAA,iEAAA,CAAA,CAGA,MAAA,CAAA,KACA,CApIA,CAqIA,kBAAA,CAAA,SAAA,MAAA,CAAA,EAAA,CAAA,OACA,CAAA,EADA,EAEA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,gCAAA,CAAA,SAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,OACA,EAAA,CAAA,EAAA,CAAA,OAAA,CAAA,GAAA,CADA,CAEA,EAFA,EAIA,EAAA,CAAA,EAAA,EAAA,EAJA,CAKA,EAAA,CAAA,EAAA,EAAA,EALA,CAMA,IAAA,EAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,EAAA,CAAA,EAAA,CAAA,GANA,CAOA,CAPA,CAFA,CAUA,MAVA,EAYA,MACA,CAlJA,CAmJA,sBAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,uBAAA,CAAA,QAAA,CACA,CArJA,CAsJA,uBAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,EAAA,CAKA,MAJA,CAAA,MAAA,CAAA,OAAA,CAAA,uBAAA,CAAA,SAAA,QAAA,CAAA,KAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAEA,MADA,CAAA,UAAA,CAAA,IAAA,CAAA,EAAA,CACA,CAAA,IAAA,KAAA,CAAA,IAAA,CAAA,GACA,CAHA,CAIA,CAAA,CAAA,CAAA,IAAA,CAAA,UAAA,CACA,CA7JA,CAkKA,CAzLA,C,CCAA,MAAA,CAAA,0CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,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,CAGA,CAAA,CAAA,CAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAHA,CAkCA,MA7BA,CAEA,uBAFA,CAEA,SAAA,IAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,CACA,IAAA,CAAA,EADA,CAEA,WAAA,CAAA,IAFA,CAGA,QAAA,CAAA,EAHA,CAIA,QAAA,CAAA,IAJA,CAAA,CAuBA,MAhBA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CACA,GADA,GAEA,GAAA,CAAA,UAFA,CAGA,OAAA,CAAA,QAAA,CAAA,GAHA,CAIA,GAAA,WAAA,CAAA,CAAA,EAAA,GAAA,CAAA,MAJA,CAKA,OAAA,CAAA,WAAA,CAAA,GALA,CAMA,CAAA,CAAA,QAAA,CAAA,GAAA,CANA,CAOA,OAAA,CAAA,QAAA,CAAA,GAPA,CAQA,CAAA,CAAA,aAAA,CAAA,GAAA,CARA,CASA,OAAA,CAAA,IAAA,CAAA,GATA,CAWA,OAAA,CAAA,GAAA,CAAA,aAAA,CAAA,GAAA,CAAA,IAAA,CAXA,CAcA,CAdA,CAgBA,CAAA,OACA,CA3BA,CA+BA,CApCA,C,CCAA,MAAA,CAAA,iCAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gCAAA,CAAA,0CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,aAAA,CAAA,IAAA,CAAA,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,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,IAAA,CAAA,IAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,IALA,CAMA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cANA,IA2BA,CAAA,UAAA,CAAA,EA3BA,CAgCA,MAAA,CAAA,aAAA,CAAA,iCAAA,CAhCA,CAkCA,OAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CACA,QAAA,CAAA,EADA,CAEA,MAAA,CAAA,EAFA,CAGA,WAAA,CAAA,IAHA,CAIA,IAAA,CAAA,cAAA,MAAA,CAAA,UAAA,CAAA,CAiBA,GAfA,KAAA,UAAA,CAAA,EAeA,CAZA,KAAA,QAAA,CAAA,EAYA,CATA,QAAA,WAAA,MAAA,CASA,GARA,UAAA,CAAA,MAQA,CAPA,MAAA,CAAA,EAOA,EAJA,MAIA,GAHA,MAAA,CAAA,IAAA,CAAA,WAAA,CAAA,KAAA,QAAA,CAAA,GAAA,CAGA,EAAA,MAAA,GAAA,QAAA,QAAA,CAAA,MAAA,EAAA,CAAA,MAAA,CAAA,KAAA,CAAA,eAAA,CAAA,CAAA,CACA,KAAA,iCAAA,MAAA,EAAA,IAAA,CAAA,MAAA,CAGA,GAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CACA,UAAA,CAAA,MAAA,CAAA,CAAA,IADA,CAEA,KAAA,MAAA,CAAA,MAFA,CAGA,KAAA,aAAA,CAAA,UAAA,EAAA,EAAA,CAHA,KAKA,MAAA,qDAAA,MAAA,CAGA,UAAA,QAAA,MAAA,aA7BA,EA8BA,KAAA,aAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CA9BA,CAgCA,UAAA,QAAA,MAAA,UAhCA,EAiCA,KAAA,UAAA,EAEA,CAvCA,CAwCA,EAAA,CAAA,YAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,GAAA,KAAA,QACA,CA1CA,CA2CA,WAAA,CAAA,sBAAA,CACA,MAAA,KAAA,KAAA,MAAA,CAAA,IACA,CA7CA,CA8CA,SAAA,CAAA,oBAAA,CACA,MAAA,MAAA,MACA,CAhDA,CAiDA,kBAAA,CAAA,6BAAA,IACA,CAAA,OAAA,CAAA,EADA,CAEA,IAAA,CAAA,KAAA,oBAAA,EAFA,CAGA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IACA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CADA,CAEA,EAAA,CAAA,GAAA,CAAA,IAAA,CAAA,YAAA,CAFA,CAGA,EAHA,GAKA,OAAA,CAAA,EAAA,CAAA,CAAA,GALA,CAOA,CACA,MAAA,CAAA,OACA,CA7DA,CAmEA,UAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,EAAA,CAOA,MANA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,oBAAA,EAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CACA,EAAA,EAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,EAAA,CAFA,EAGA,OAAA,CAAA,IAAA,CAAA,EAAA,CAEA,CALA,CAMA,CAAA,OACA,CA5EA,CA8EA,IAAA,CAAA,cAAA,IAAA,CAAA,KAAA,CAAA,CACA,GAAA,IAAA,CACA,GAAA,SAAA,KAAA,CACA,KAAA,UAAA,CAAA,IAAA,EAAA,KADA,KAGA,IAAA,QAAA,WAAA,IAAA,CAAA,CACA,IAAA,GAAA,CAAA,IAAA,GAAA,CAAA,IAAA,CACA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAFA,IAIA,IAAA,QAAA,QAAA,CAAA,IAAA,OACA,eAAA,UAAA,CAAA,IAAA,CADA,QAIA,KAAA,UAAA,CAAA,IAAA,CAJA,CASA,MAAA,KACA,CAjGA,CAkGA,IAAA,CAAA,cAAA,IAAA,CAAA,KAAA,CAAA,CACA,GAAA,IAAA,CACA,GAAA,SAAA,KAAA,CACA,KAAA,QAAA,CAAA,IAAA,EAAA,KADA,CAEA,CAAA,CAAA,QAAA,CAAA,CAAA,OAAA,CAAA,uBAAA,CAAA,CAAA,OAAA,CAAA,IAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAFA,KAIA,IAAA,QAAA,WAAA,IAAA,CAAA,CACA,IAAA,GAAA,CAAA,IAAA,GAAA,CAAA,IAAA,CACA,KAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,EAFA,IAIA,IAAA,QAAA,QAAA,CAAA,IAAA,OACA,eAAA,QAAA,CAAA,IAAA,CADA,QAIA,KAAA,QAAA,CAAA,IAAA,CAJA,CASA,MAAA,KACA,CAtHA,CAuHA,UAAA,CAAA,oBAAA,IAAA,CAAA,CAEA,MADA,OAAA,MAAA,QAAA,CAAA,IAAA,CACA,CAAA,IACA,CA1HA,CA2HA,UAAA,CAAA,oBAAA,IAAA,CAAA,CACA,MAAA,MAAA,gBAAA,CAAA,IAAA,CACA,CA7HA,CA8HA,aAAA,CAAA,uBAAA,UAAA,CAAA,CAKA,MAJA,CAAA,CAAA,CAAA,aAAA,CAAA,UAAA,CAIA,EAHA,MAAA,CAAA,IAAA,CAAA,qCAAA,CAGA,CADA,KAAA,UAAA,CAAA,UACA,CAAA,IACA,CApIA,CAqIA,aAAA,CAAA,wBAAA,CACA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,UAAA,CACA,CAvIA,CAwIA,gBAAA,CAAA,0BAAA,SAAA,CAAA,CAIA,IAAA,GAAA,CAAA,CAAA,GAHA,QAAA,QAAA,CAAA,SAGA,GAFA,SAAA,CAAA,CAAA,SAAA,CAEA,EAAA,SAAA,CACA,MAAA,MAAA,UAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAEA,MAAA,KACA,CAhJA,CAiJA,oBAAA,CAAA,+BAAA,CAEA,QAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CACA,IAAA,CAAA,OAAA,CAAA,SAAA,EAAA,CAAA,CAAA,OADA,CAEA,IAAA,CAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,oBAAA,EAAA,CACA,CAJA,GAAA,CAAA,IAAA,CAAA,EAAA,CAsBA,MAjBA,UAAA,QAAA,MAAA,aAiBA,EAhBA,MAAA,CAAA,KAAA,OAAA,EAAA,CAgBA,CAdA,UAAA,QAAA,MAAA,UAcA,EAbA,MAAA,CAAA,KAAA,SAAA,EAAA,CAaA,CAXA,CAAA,CAAA,IAAA,CAAA,KAAA,QAAA,CAAA,SAAA,CAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,YAAA,CADA,CAEA,MAAA,CAAA,CAAA,CAFA,CAGA,CAAA,CAAA,OAAA,CAAA,CAAA,CAHA,EAIA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,YAAA,CADA,EAEA,MAAA,CAAA,CAAA,CAEA,CAJA,CAMA,CAVA,CAWA,CAAA,IACA,CAzKA,CA0KA,cAAA,CAAA,yBAAA,CACA,GAAA,CAAA,GAAA,CAAA,CAAA,KAAA,QAAA,CAAA,CACA,aAAA,CAAA,KAAA,oBAAA,EADA,CAOA,MAJA,CAAA,CAAA,CAAA,IAAA,CAAA,aAAA,CAAA,SAAA,GAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,QAAA,CACA,CAFA,CAIA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,CACA,CAnLA,CAoLA,IAAA,CAAA,cAAA,MAAA,CAAA,IAEA,CAAA,MAFA,CAEA,IAFA,CACA,KAAA,CAAA,IADA,CAoBA,MAhBA,UAAA,QAAA,MAAA,UAgBA,GAfA,MAAA,CAAA,KAAA,SAAA,EAeA,CAdA,MAAA,CAAA,MAAA,GAAA,MAcA,GAbA,KAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CAAA,QAAA,CAAA,QAAA,CAaA,GATA,KAAA,EAAA,UAAA,QAAA,MAAA,aASA,GARA,IAAA,CAAA,KAAA,OAAA,EAQA,CANA,KAMA,CAPA,IAAA,CAAA,MAAA,GAAA,MAOA,CANA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,MAAA,CAMA,CAJA,KAAA,OAAA,GAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAIA,EAAA,KACA,CAzMA,CA0MA,MAAA,CAAA,iBAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,cAAA,EAAA,CACA,GAAA,IAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAAA,SAAA,EAAA,CAAA,CACA,GAAA,KAAA,CACA,MAAA,CAAA,KAAA,CAAA,MAEA,CACA,MAAA,KACA,CAnNA,CAuNA,cAAA,CAAA,wBAAA,IAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,oCAAA,CADA,CAEA,KAAA,cAAA,CAAA,IAAA,CACA,CA1NA,CA2NA,cAAA,CAAA,wBAAA,IAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,CAAA,CAEA,GAAA,OAAA,CAAA,GAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,CAGA,IAAA,CAAA,GAFA,MAAA,WAAA,CAAA,IAEA,CADA,aAAA,CAAA,KAAA,oBAAA,EACA,CAAA,aAAA,CACA,aAAA,CAAA,CAAA,CAAA,CAAA,cAAA,CAAA,IAAA,CAGA,CArOA,CAyOA,cAAA,CAAA,yBAAA,CAEA,MADA,CAAA,MAAA,CAAA,IAAA,CAAA,oCAAA,CACA,CAAA,KAAA,cAAA,EACA,CA5OA,CA6OA,cAAA,CAAA,yBAAA,CACA,GAAA,CAAA,GAAA,CAAA,IAAA,CAIA,MAHA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,WAAA,CAAA,gBAAA,CAGA,GAFA,GAAA,CAAA,KAAA,WAEA,EAAA,GACA,CAnPA,CAoPA,WAAA,CAAA,qBAAA,QAAA,CAAA,CACA,GAAA,QAAA,EAAA,QAAA,CAAA,UAAA,CAAA,CACA,KAAA,QAAA,CAAA,QADA,CAEA,GAAA,CAAA,IAAA,CAAA,KAAA,oBAAA,EAAA,CACA,IAAA,GAAA,CAAA,MAAA,GAAA,CAAA,IAAA,CACA,IAAA,CAAA,MAAA,CAAA,CAAA,WAAA,CAAA,QAAA,CAEA,CANA,IAOA,MAAA,8BAEA,CA9PA,CA+PA,WAAA,CAAA,sBAAA,CACA,MAAA,MAAA,QACA,CAjQA,CA2QA,MAAA,CAAA,UAAA,IAGA,CAAA,SAHA,CACA,IAAA,CAAA,cAAA,CAAA,uBAAA,CAAA,SAAA,CADA,CAEA,SAAA,CAAA,IAAA,CAAA,QAAA,EAAA,KAAA,WAAA,EAFA,CAKA,OAAA,CAAA,EALA,CAMA,WAAA,CAAA,CACA,GAAA,CAAA,KAAA,QADA,CAEA,MAAA,CAAA,KAAA,MAFA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CANA,CAYA,GAAA,CAAA,SAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,6CAAA,KAAA,QAAA,CAAA,GAAA,CAAA,KAAA,MAAA,CAAA,CAqBA,MAlBA,UAAA,QAAA,MAAA,aAkBA,GAhBA,WAAA,CAAA,IAAA,CAAA,KAAA,OAAA,GAAA,MAAA,CAAA,IAAA,CAAA,QAAA,CAgBA,EAdA,UAAA,QAAA,MAAA,UAcA,GAbA,WAAA,CAAA,MAAA,CAAA,CACA,UAAA,CAAA,KAAA,MAAA,CAAA,aAAA,EADA,CAaA,CAVA,WAAA,CAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,KAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,CAUA,EAPA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,EAAA,EAAA,CAOA,CANA,OAAA,CAAA,SAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAMA,CALA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,CAKA,CAJA,IAAA,CAAA,WAIA,EAHA,IAAA,CAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAGA,CAAA,SACA,CA9SA,CA+SA,UAAA,CAAA,oBAAA,IAAA,CAAA,YAAA,CAAA,QAAA,CAAA,IACA,CAAA,aAAA,CAAA,EADA,CAEA,SAAA,CAAA,QAAA,EAAA,KAAA,WAAA,EAFA,CASA,GALA,UAAA,QAAA,MAAA,aAKA,GAHA,aAAA,CAAA,KAAA,OAAA,GAAA,UAAA,CAAA,IAAA,CAAA,EAAA,CAAA,QAAA,CAGA,EAAA,SAAA,CACA,aAAA,CAAA,IAAA,CAAA,SAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,YAAA,CAAA,CADA,KAGA,MAAA,iDAAA,KAAA,QAAA,CAAA,GAAA,CAAA,KAAA,MAAA,CAGA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,aAAA,CACA,CA/TA,CAgUA,YAAA,CAAA,sBAAA,MAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,WAAA,EAAA,CACA,GAAA,QAAA,CACA,MAAA,CAAA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAEA,KAAA,mDAAA,KAAA,QAAA,CAAA,GAAA,CAAA,KAAA,MAEA,CAvUA,CAwUA,OAAA,CAAA,kBAAA,CACA,GAAA,CAAA,GAAA,CAAA,CACA,MAAA,CAAA,KAAA,MADA,CAEA,IAAA,CAAA,KAAA,QAFA,CAGA,UAAA,CAAA,KAAA,aAAA,EAHA,CAAA,CAaA,MAPA,UAAA,QAAA,MAAA,aAOA,GANA,GAAA,CAAA,IAAA,CAAA,KAAA,OAAA,GAAA,OAAA,EAMA,EAJA,UAAA,QAAA,MAAA,UAIA,GAHA,GAAA,CAAA,MAAA,CAAA,KAAA,MAAA,CAAA,OAAA,EAGA,EAAA,GACA,CAvVA,CAwVA,OAAA,CAAA,kBAAA,CAEA,QACA,CA3VA,CA4VA,QAAA,CAAA,kBAAA,SAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,IAAA,CAAA,OAAA,GAAA,EAAA,CACA,aAAA,CAAA,KAAA,CAAA,SAAA,CAFA,EAGA,KAAA,IAAA,CAAA,OAAA,CAAA,KAAA,EAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,SAAA,CAEA,CAjWA,CAkWA,QAAA,CAAA,kBAAA,SAAA,CAAA,CACA,MAAA,CAAA,aAAA,CAAA,KAAA,IAAA,CAAA,OAAA,CAAA,CAAA,SAAA,CACA,CApWA,CAqWA,WAAA,CAAA,qBAAA,SAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,KAAA,IAAA,CAAA,OAAA,GAAA,EAAA,CACA,GAAA,KAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,MAAA,CAAA,YAAA,SAAA,CAAA,WAAA,CAAA,CACA,KAAA,CAAA,KAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,EAAA,IAAA,EAFA,CAIA,KAJA,CAKA,KAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CALA,CAOA,KAAA,UAAA,CAAA,OAAA,CAEA,CACA,CAjXA,CAyXA,WAAA,CAAA,qBAAA,SAAA,CAAA,KAAA,CAAA,OACA,SAAA,QAAA,CAAA,KADA,CAEA,KAAA,CAAA,KAAA,QAAA,CAAA,SAAA,CAAA,CAAA,KAAA,WAAA,CAAA,SAAA,CAFA,CAKA,KAAA,QAAA,CAAA,SAAA,CALA,CAMA,KAAA,WAAA,CAAA,SAAA,CANA,CAQA,KAAA,QAAA,CAAA,SAAA,CACA,CAlYA,CAmYA,KAAA,CAAA,gBAAA,CACA,MAAA,CAAA,OAAA,CAAA,YAAA,CAAA,KAAA,MAAA,CACA,CArYA,CAsYA,KAAA,CAAA,gBAAA,CACA,MAAA,CAAA,OAAA,CAAA,YAAA,CAAA,KAAA,MAAA,CACA,CAxYA,CAAA,CAlCA,CA6aA,aAAA,CAAA,SAAA,WAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,GAAA,CAAA,MAAA,CAAA,YAAA,SAAA,CAAA,WAAA,CAAA,EAAA,CAAA,CACA,MAAA,CAAA,WAAA,EAAA,KAAA,CAAA,IAAA,CAAA,WAAA,CACA,CAhbA,CAmdA,MAhCA,CAAA,OAAA,CAAA,GAAA,CAAA,SAAA,UAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,UAAA,WAAA,CAAA,OAAA,EAAA,UAAA,CAAA,EAAA,CAAA,QAAA,CACA,CA8BA,CA5BA,OAAA,CAAA,kBAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,UAAA,CAAA,MAAA,CACA,CA0BA,CAxBA,OAAA,CAAA,YAAA,CAAA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CACA,CAsBA,CAfA,OAAA,CAAA,YAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,CAEA,GAAA,OAAA,CAAA,CACA,GAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,oBAAA,EAAA,CAMA,MALA,CAAA,CAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,UAAA,CAAA,GAAA,CAAA,MAAA,CACA,CAFA,CAKA,CAFA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,MAAA,CAEA,GACA,CACA,QACA,CAEA,CAAA,OAEA,CArdA,C,CCAA,MAAA,CAAA,wCAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAuCA,QAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CAAA,CAEA,OAAA,CAAA,GAAA,GAAA,CAAA,UAAA,CACA,GAAA,UAAA,CAAA,GAAA,CAAA,GAAA,OAAA,CACA,MAAA,CAAA,GAAA,CAGA,MAAA,KACA,CA+DA,MA7DA,CAMA,OAAA,CAAA,SAAA,IAAA,CAAA,CAIA,MAAA,CAAA,IAAA,CAAA,OAAA,wFAAA,KAAA,EAAA,OAAA,2FAAA,OAAA,CACA,CAXA,CAoBA,SAAA,CAAA,SAAA,GAAA,CAAA,UAAA,CAAA,IASA,CAAA,QATA,CAGA,QAAA,CAAA,GAAA,CAAA,KAAA,gKAHA,CAIA,MAAA,CAAA,8BAJA,CAKA,OAAA,CAAA,MAAA,CAAA,wBALA,CAMA,MAAA,CAAA,SAAA,CAAA,UAAA,CAAA,OAAA,CANA,CAOA,SAAA,CAAA,SAAA,MAAA,CAAA,KAAA,CAAA,OAAA,CAAA,IAPA,CAQA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CARA,CAWA,GAAA,CAAA,QAAA,CACA,MAAA,CAAA,GAAA,CAZA,KAeA,CAAA,EAfA,EAgBA,QAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,yKAhBA,CAiBA,GAAA,CAAA,GAAA,CAAA,OAAA,CACA,QAAA,CAAA,CAAA,CADA,CAEA,QAAA,CAAA,CAAA,CAAA,CACA,IAAA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,GADA,CAEA,KAAA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,GAJA,CAjBA,CAqCA,MAXA,CAAA,QAAA,CAAA,MAAA,EAAA,CAAA,CAAA,GAAA,GAAA,CAAA,OAAA,CAAA,SAAA,CAWA,GAVA,GAAA,CAAA,GAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,mBAAA,SAAA,CAUA,EANA,GAAA,CAAA,GAAA,CAAA,OAAA,CAAA,WAAA,MAAA,CAAA,gBAAA,CAAA,WAAA,MAAA,CAAA,gBAAA,CAMA,CALA,GAAA,CAAA,GAAA,CAAA,OAAA,CACA,wBAAA,MAAA,CAAA,gCADA,CAEA,wBAAA,MAAA,CAAA,eAAA,CAAA,MAAA,CAAA,gCAFA,CAKA,CAAA,GACA,CA1DA,CA+DA,CAhHA,C,CCAA,MAAA,CAAA,yCAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aAkKA,MA9IA,CACA,aAAA,CAAA,uBAAA,kBAAA,CAAA,iBAAA,QAAA,CACA,QAAA,CAAA,mBADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,YADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,OADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CADA,CAOA,CACA,QAAA,CAAA,SADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CAPA,CAFA,CAFA,CAmBA,aAAA,CAAA,CACA,CACA,QAAA,CAAA,iBADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CAKA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CADA,CAOA,CACA,QAAA,CAAA,WADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,SADA,CAFA,CAKA,KAAA,CAAA,GALA,CAPA,CAFA,CALA,CADA,CAnBA,CAFA,CAAA,CADA,CAkDA,YAAA,CAAA,sBAAA,kBAAA,CAAA,iBAAA,QAAA,CACA,QAAA,CAAA,mBADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,YADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,QADA,CAEA,WAAA,CAAA,CAAA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CAAA,CAFA,CADA,CAFA,CAFA,CAgBA,aAAA,CAAA,CACA,CACA,QAAA,CAAA,iBADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CAKA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CADA,CAOA,CACA,QAAA,CAAA,aADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CAPA,CAFA,CALA,CADA,CAhBA,CAFA,CAAA,CAlDA,CA+FA,kBAAA,CAAA,4BAAA,kBAAA,CAAA,iBAAA,QAAA,CACA,QAAA,CAAA,mBADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,YADA,CAEA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,QADA,CAEA,WAAA,CAAA,CAAA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CAAA,CAFA,CADA,CAFA,CAFA,CAgBA,aAAA,CAAA,CACA,CACA,QAAA,CAAA,iBADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CAKA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,CACA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,iBADA,CAFA,CADA,CAOA,CACA,QAAA,CAAA,kBADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,kBADA,CAFA,CAPA,CAFA,CALA,CADA,CAhBA,CAFA,CAAA,CA/FA,CAgJA,CApKA,C,CCAA,MAAA,CAAA,oCAAA,CAAA,CAAA,QAAA,CAAA,yCAAA,CAAA,CAAA,SAAA,CAAA,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,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAHA,IAwBA,CAAA,cAAA,CAAA,CACA,aAAA,CAAA,sEADA,CAEA,YAAA,CAAA,qEAFA,CAGA,kBAAA,CAAA,2EAHA,CAIA,IAAA,CAAA,wBAJA,CAxBA,CAsFA,MAtDA,CACA,eADA,0BACA,QADA,CACA,GADA,CACA,UACA,CAAA,CAAA,QAAA,CAAA,GAAA,CADA,GAEA,GAAA,GAAA,QAAA,CAAA,QAAA,EAAA,cAAA,CAAA,GAAA,CAAA,GAAA,QAAA,CAAA,QAFA,EAQA,CATA,CAUA,mBAVA,8BAUA,OAVA,CAUA,CACA,MAAA,CAAA,CAAA,KAAA,sBAAA,CAAA,OAAA,CACA,CAZA,CAaA,sBAbA,iCAaA,OAbA,CAaA,CACA,MAAA,CAAA,cAAA,CAAA,OAAA,CAAA,EAAA,EACA,CAfA,CAgBA,sBAhBA,iCAgBA,MAhBA,CAgBA,CACA,GAAA,CAAA,OAAA,CAAA,EAAA,CASA,MAPA,CAAA,CAAA,CAAA,KAAA,CAAA,cAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CACA,GAAA,GAAA,GAAA,MAAA,CAEA,MADA,CAAA,OAAA,CAAA,IACA,GAEA,CALA,CAOA,CAAA,OACA,CA3BA,CA4BA,gCA5BA,2CA4BA,kBA5BA,CA4BA,aA5BA,CA4BA,CACA,GAAA,CAAA,aAAA,CACA,MAAA,MAAA,CAFA,0BASA,aATA,CAMA,UANA,sDAQA,EARA,wEAOA,aAPA,wDAOA,EAPA,6IAOA,YAPA,iCAOA,EAPA,8CAcA,YAdA,CAWA,UAXA,sDAaA,EAbA,0BAYA,CAAA,iBAZA,uBAYA,UAZA,OAgBA,CAAA,iBAhBA,CAoBA,MAAA,CAAA,IAAA,CAAA,mBAAA,EAAA,IAAA,CACA,SAAA,GAAA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,aAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,kBAAA,CAAA,iBAAA,CAAA,CAAA,CADA,CApBA,CAiBA,EAMA,CAnDA,CAwDA,CAxFA,C,CCAA,MAAA,CAAA,qCAAA,CAAA,EAAA,CAAA,UAAA,CAAA,aA+CA,MApBA,SAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,CACA,GAAA,CAAA,kBAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,SAAA,iBAAA,QAAA,CACA,QAAA,CAAA,UADA,CAEA,UAAA,CAAA,CACA,UAAA,iBAAA,iBAAA,CADA,CAFA,CAAA,CAAA,CAAA,CAOA,MAAA,CACA,QAAA,CAAA,iBADA,CAEA,UAAA,CAAA,CACA,UAAA,CAAA,OADA,CAFA,CAKA,UAAA,CAAA,CACA,QAAA,CAAA,KADA,CAEA,WAAA,CAAA,kBAFA,CALA,CAUA,CAIA,CAjDA,C,CCAA,MAAA,CAAA,gCAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,oCAAA,CAAA,iCAAA,CAAA,wCAAA,CAAA,mBAAA,CAAA,oCAAA,CAAA,qCAAA,CAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,OAAA,CAAA,YAAA,CAAA,YAAA,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,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAHA,CAIA,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAJA,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,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YANA,CAOA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAPA,CAQA,eAAA,CAAA,eAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eAAA,CAAA,SAAA,CAAA,CAAA,eARA,IAgCA,CAAA,mCAAA,CAAA,SAAA,eAAA,CAAA,aAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,EAAA,CAEA,CAAA,CAAA,MAAA,CAAA,aAAA,CAAA,SAAA,KAAA,CAAA,GAAA,CAAA,CACA,GAAA,CACA,UAAA,CAAA,GAAA,CAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CACA,CAAA,MAAA,CAAA,CAAA,CACA,UAAA,CAAA,GAAA,CAAA,CAAA,KACA,CACA,CANA,CAHA,CAUA,eAAA,CAAA,UAAA,CAAA,UACA,CA3CA,CA6CA,6BAAA,CAAA,SAAA,eAAA,CAAA,IAAA,CAAA,CACA,eAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cADA,CAEA,eAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAFA,CAGA,eAAA,CAAA,UAAA,CAAA,IAAA,CAAA,UAHA,CAIA,eAAA,CAAA,SAAA,CAAA,IAAA,CAAA,SAJA,CAKA,eAAA,CAAA,YAAA,CAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CALA,CAOA,mCAAA,CAAA,eAAA,CAAA,IAAA,CAAA,UAAA,CACA,CArDA,CAuDA,MAAA,CAAA,KAAA,CAAA,MAAA,CAAA,CACA,IADA,eACA,IADA,CACA,eADA,CACA,CACA,KAAA,GAAA,CAAA,EADA,CAEA,KAAA,eAAA,CAAA,EAFA,CAGA,KAAA,IAAA,CAAA,IAAA,EAAA,IAHA,CAKA,KAAA,kBAAA,CAAA,eAAA,EAAA,UAAA,CACA,CAPA,CAQA,kBARA,6BAQA,cARA,CAQA,CAGA,MAFA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,eAAA,CAAA,cAAA,CAEA,CAAA,IACA,CAZA,CAaA,kBAbA,6BAaA,IAbA,CAaA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CAEA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CACA,UAAA,EAAA,CAAA,EAAA,YAAA,GAAA,IAAA,CAAA,CAAA,CAAA,EAAA,aAAA,GAAA,CADA,CAGA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAHA,CAIA,QAAA,WAAA,IAAA,CAAA,CAAA,CAAA,GAAA,eAAA,GAAA,CAJA,GAMA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,KAAA,kBAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CANA,EAUA,MAAA,CAAA,GACA,CA3BA,CA4BA,mBA5BA,8BA4BA,IA5BA,CA4BA,QA5BA,CA4BA,MA5BA,CA4BA,IACA,CAAA,aADA,aAEA,eAAA,CAAA,KAAA,kBAAA,CAAA,IAAA,CAAA,MAAA,CAFA,CAGA,QAAA,CAAA,EAHA,CAKA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,eAAA,CAEA,GADA,aAAA,CAAA,eAAA,CAAA,CAAA,CACA,CAAA,KAAA,eAAA,CAAA,aAAA,CAAA,CACA,QAAA,CAAA,IAAA,CAAA,CACA,MAAA,CAAA,KAAA,eAAA,CAAA,aAAA,CADA,CAEA,QAAA,CAAA,KAFA,CAAA,CADA,KAMA,MAAA,IAAA,CAAA,KAAA,oDAAA,aAAA,EAAA,CAIA,YAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,CAAA,OAAA,CAAA,QAAA,EAAA,IAAA,GAAA,IAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,OAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,EAAA,QACA,CAFA,CADA,CAIA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,GAAA,CACA,CALA,CAMA,CAnDA,CAoDA,gBApDA,4BAoDA,CACA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAA,GAAA,CACA,CAtDA,CAuDA,YAvDA,uBAuDA,IAvDA,CAuDA,QAvDA,CAuDA,iBACA,KAAA,mBAAA,CAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CACA,QAAA,WAAA,IAAA,GAAA,gBAAA,GAAA,IAAA,CAAA,QADA,aAUA,IAAA,GAAA,CAAA,CAAA,GAPA,CAAA,IAAA,CAAA,MAOA,EANA,OAAA,CAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAMA,CAHA,MAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA,EAAA,EAAA,CAGA,CAFA,MAAA,CAAA,aAAA,CAAA,MAAA,CAAA,IAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAEA,CAAA,IAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAEA,OAHA,EAIA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,OAAA,CAEA,CAEA,IAAA,GAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAEA,QAHA,EAIA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,QAAA,CAEA,CAEA,IAAA,GAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,CAEA,UAHA,EAIA,MAAA,CAAA,IAAA,CAAA,aAAA,CAAA,UAAA,CAEA,CAhCA,GAmCA,CAAA,aAAA,CAAA,IAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,kBAAA,CAAA,aAAA,oBACA,IAAA,CAAA,kBAAA,CAAA,aADA,EAEA,EArCA,gBAsCA,GAtCA,KAuCA,CAAA,kBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,GAAA,EAAA,UAvCA,CAwCA,qBAAA,CAAA,aAAA,CAAA,SAAA,CAAA,wCAAA,UAAA,0CAIA,EAJA,2DACA,UADA,sDAGA,EAHA,wEAEA,WAFA,wDAEA,EAFA,6IAEA,UAFA,iCAEA,EAFA,8BAIA,CAAA,UAAA,CAAA,UAAA,EACA,UAAA,CAAA,UAAA,CAAA,UAAA,GAAA,kBADA,EAGA,UAAA,CAAA,WAAA,EACA,UAAA,CAAA,WAAA,CAAA,CAAA,CADA,EAEA,UAAA,CAAA,WAAA,CAAA,CAAA,EAAA,UAFA,EAGA,UAAA,CAAA,WAAA,CAAA,CAAA,EAAA,UAAA,CAAA,UAAA,GAAA,kBAVA,CAAA,CAxCA,OAqDA,CAAA,CAAA,GAAA,qBAAA,CAEA,EAFA,CACA,aAAA,CAAA,MAAA,CAAA,qBAAA,CAAA,CAAA,CAtDA,+BAqDA,YArDA,UAyDA,QAAA,CAAA,MAAA,CAAA,aAAA,CACA,IAAA,CAAA,SAAA,CAAA,GAAA,CADA,CAEA,YAFA,CAzDA,CA8DA,GAAA,QAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,sBAAA,CAAA,QAAA,CADA,CAGA,GAAA,CAAA,aAAA,CAAA,IAAA,CAAA,SAAA,CAAA,GAAA,EAAA,aAAA,CAEA,aALA,EAMA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,WAKA,IAAA,CAAA,QAAA,CAAA,MAAA,CAAA,eAAA,GAAA,EALA,wBAEA,UAFA,4CAIA,EAJA,qBAGA,CAAA,yBAHA,kBAGA,UAHA,CAMA,QAAA,CAAA,aAAA,CAAA,MAAA,EAAA,MAAA,CAAA,uBAAA,CAAA,MAAA,CAAA,QAAA,CANA,CASA,GAAA,CAAA,yBAAA,CAAA,aAAA,CAAA,SAAA,CAAA,eAIA,4BAHA,UAGA,4CADA,EACA,6DAFA,aAEA,sDAFA,EAEA,2IAFA,sBAEA,iCAFA,EAEA,8CACA,sBADA,CACA,UADA,CACA,UADA,gCACA,EADA,uBACA,QADA,CACA,sBADA,CACA,QADA,CAEA,iBAAA,CAAA,UAAA,CAAA,UAFA,CAIA,MAAA,CAAA,yBAAA,GAAA,iBAAA,EACA,iBAAA,GAAA,QACA,CAVA,CAAA,CAYA,CAAA,CAAA,GAAA,yBArBA,EAsBA,aAAA,CAAA,MAAA,CAAA,yBAAA,CAAA,CAAA,CAEA,CAxBA,CA0BA,CA9FA,EAsCA,IAAA,GAAA,CAAA,GAAA,GAAA,CAAA,IAAA,CAAA,SAAA,OAAA,GAAA,EA2DA,GAAA,CAAA,mBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,EAAA,EAAA,EACA,GADA,CACA,SAAA,WAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,WAAA,EAAA,UAAA,CAAA,UAAA,CADA,CAAA,CAGA,GAAA,IAAA,CAAA,kBAAA,CAAA,CACA,GAAA,CAAA,wBAAA,CAEA,CAAA,CAAA,aAAA,CAAA,MAAA,EACA,EACA,CAAA,GAAA,aAAA,CAAA,MAAA,EACA,CAAA,CAAA,OAAA,CACA,aAAA,CAAA,CAAA,CADA,CAEA,eAAA,CACA,mBADA,CAFA,CAFA,CAFA,EAaA,MAAA,CAAA,IAAA,CAAA,SAAA,EACA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,EACA,IADA,CACA,SAAA,WAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,CAAA,WAAA,EAAA,QAAA,CADA,CAfA,CAmBA,MAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,MAAA,CAAA,uBAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,wBAAA,CAAA,CACA,CACA,MAAA,CAAA,IAAA,CAAA,aAAA,CAAA,IAAA,CAAA,UAAA,CA1HA,CA2HA,MAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,IAAA,CAAA,eAAA,CA3HA,CA4HA,MAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,iBAAA,CA5HA,IA+HA,UAAA,QAAA,CAAA,QA/HA,EAgIA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAEA,CAlIA,CAmIA,CA3LA,CA4LA,mBA5LA,8BA4LA,IA5LA,CA4LA,QA5LA,CA4LA,iBACA,KAAA,mBAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,CAEA,UAAA,QAAA,CAAA,QAHA,EAIA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAEA,CANA,CAOA,CApMA,CAqMA,WArMA,sBAqMA,OArMA,CAqMA,IArMA,CAqMA,QArMA,CAqMA,iBACA,KAAA,mBAAA,CAAA,IAAA,CAAA,UAAA,CACA,MAAA,CAAA,eAAA,CAAA,OAAA,CAAA,IAAA,CADA,CAGA,UAAA,QAAA,CAAA,QAHA,EAIA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAEA,CANA,CAOA,CA7MA,CAsNA,YAtNA,uBAsNA,IAtNA,CAsNA,QAtNA,CAsNA,iBACA,GAAA,CAAA,KAAA,IAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,gDAAA,CAAA,CAGA,KAAA,mBAAA,CAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,WAAA,CAAA,MAAA,CAAA,IAAA,CAAA,oBAAA,EAAA,CAEA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAEA,WAAA,EAAA,WAAA,CAAA,QAAA,EAAA,WAAA,CAAA,MAHA,EAKA,WAAA,CAAA,WAAA,CAAA,MAAA,CALA,EAMA,MAAA,CAAA,eAAA,CAAA,WAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CAAA,WAAA,CAGA,CAEA,UAAA,QAAA,CAAA,QAdA,EAeA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAEA,CAjBA,CAkBA,CA7OA,CA8OA,aA9OA,wBA8OA,IA9OA,CA8OA,YA9OA,CA8OA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,CAqBA,MAnBA,CAAA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,sBAAA,CACA,cAAA,CAAA,gCAAA,CAAA,IAAA,CAAA,UAAA,CAAA,YAAA,CADA,GAGA,IAAA,CAAA,QAHA,EAIA,IAeA,CAbA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,YAAA,EAAA,IAaA,CAZA,QAAA,CAAA,eAAA,CAAA,IAAA,CAAA,gBAAA,EAAA,IAYA,CATA,QAAA,CAAA,UASA,CAVA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAUA,CATA,IAAA,CAAA,OASA,CARA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAQA,CAPA,IAAA,CAAA,WAOA,CALA,EAKA,CAFA,QAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,iBAAA,EAAA,EAEA,CAAA,QACA,CArQA,CAsQA,uBAtQA,kCAsQA,IAtQA,CAsQA,QAtQA,CAsQA,CACA,GAAA,CAAA,YAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,CAEA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,aAAA,EAAA,IAAA,CAHA,CAMA,YAAA,CAAA,eAAA,CAAA,KAAA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,eAAA,GAAA,IANA,CAOA,YAAA,CAAA,YAAA,CAAA,KAAA,IAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,GAAA,IAPA,CAQA,YAAA,CAAA,YAAA,CAAA,KAAA,IAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,GAAA,IARA,CAWA,GAAA,CAAA,eAAA,CAAA,YAAA,CAAA,eAAA,CAUA,MARA,CAAA,YAAA,CAAA,YAQA,EAPA,YAAA,CAAA,YAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,eAAA,CAOA,CAJA,YAAA,CAAA,YAIA,EAHA,YAAA,CAAA,YAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,eAAA,CAGA,CAAA,YACA,CA5RA,CA6RA,YA7RA,uBA6RA,IA7RA,CA6RA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,CAGA,MAFA,CAAA,OAAA,CAAA,YAAA,CAAA,IAAA,CAAA,YAAA,EAAA,IAEA,CAAA,OACA,CAlSA,CAmSA,uBAnSA,kCAmSA,IAnSA,CAmSA,wBAnSA,CAmSA,CACA,GAAA,CAAA,EAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,CASA,MAPA,CAAA,wBAOA,EANA,EAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAMA,CALA,EAAA,CAAA,cAAA,CAAA,QAKA,EAHA,EAAA,CAAA,cAAA,CAAA,gBAGA,CAAA,EACA,CA9SA,CA+SA,aA/SA,wBA+SA,UA/SA,CA+SA,QA/SA,CA+SA,CACA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,UAAA,CAAA,YAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,oCAAA,CAAA,CAGA,GAAA,EAAA,QAAA,EAAA,QAAA,QAAA,CAAA,QAAA,CAAA,IAAA,EAAA,QAAA,WAAA,QAAA,CAAA,QAAA,CAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,uBAAA,CAAA,CAGA,IAAA,GAAA,CAAA,MAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IACA,CAAA,OAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CADA,CAEA,OAAA,CAAA,KAAA,YAAA,CAAA,OAAA,CAFA,CAKA,OALA,EAMA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAEA,CAEA,UAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,CAnUA,CAoUA,YApUA,uBAoUA,WApUA,CAoUA,CACA,GAAA,EAAA,WAAA,EAAA,WAAA,CAAA,QAAA,EAAA,WAAA,CAAA,MAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,0BAAA,CAAA,CAGA,GAAA,CAAA,SAAA,CAAA,WAAA,CAAA,QAAA,CAEA,GAAA,CAAA,KAAA,GAAA,CAAA,SAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,iDAAA,SAAA,EAAA,CAGA,GAAA,CAAA,GAAA,CAAA,GAAA,MAAA,GAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,MAAA,CAAA,CAGA,MAFA,MAAA,eAAA,CAAA,GAAA,CAAA,WAAA,CAEA,CAAA,GACA,CAnVA,CAoVA,eApVA,0BAoVA,OApVA,CAoVA,IApVA,CAoVA,CAEA,GAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,EAAA,EAAA,CAAA,OAAA,CAAA,UAAA,EAAA,EAAA,CAAA,CA2BA,MA1BA,CAAA,OAAA,CAAA,aAAA,CAAA,UAAA,CA0BA,CAxBA,OAAA,CAAA,IAAA,EAAA,IAAA,CAAA,IAwBA,EAvBA,OAAA,CAAA,GAuBA,EAtBA,KAAA,aAAA,CAAA,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,IAAA,CAsBA,CAlBA,OAAA,CAAA,MAAA,EAAA,IAAA,CAAA,MAkBA,EAjBA,OAAA,CAAA,MAiBA,EAhBA,KAAA,cAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAgBA,CAZA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,aAAA,CAYA,CAXA,KAAA,mBAAA,CAAA,OAAA,CAAA,IAAA,CAWA,CAVA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,QAAA,CAUA,CATA,KAAA,cAAA,CAAA,OAAA,CAAA,IAAA,CASA,CARA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,MAAA,CAQA,CAPA,KAAA,YAAA,CAAA,OAAA,CAAA,IAAA,CAOA,CANA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,aAAA,CAMA,CALA,KAAA,WAAA,CAAA,OAAA,CAAA,IAAA,CAKA,CAJA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,UAAA,CAIA,EAHA,KAAA,eAAA,CAAA,OAAA,CAAA,IAAA,CAGA,CAAA,OACA,CAlXA,CAmXA,mBAnXA,8BAmXA,WAnXA,CAmXA,IAnXA,CAmXA,CACA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CADA,EAEA,IAAA,CAAA,MAFA,EAGA,KAAA,aAAA,CAAA,WAAA,CAAA,MAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAHA,CAOA,KAAA,uBAAA,CAAA,WAAA,CAAA,IAAA,CAPA,CASA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,mBAAA,CATA,EAUA,KAAA,WAAA,CAAA,WAAA,CAAA,IAAA,CAEA,CA/XA,CAgYA,uBAhYA,kCAgYA,WAhYA,CAgYA,IAhYA,CAgYA,CAEA,GAAA,IAAA,CAAA,OAAA,CAAA,CACA,GAAA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,CACA,IAAA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,EAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,8BAAA,GAAA,EAAA,CAGA,GAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAEA,IAAA,GAAA,CAAA,MAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,KAAA,YAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,CAEA,MAHA,EAIA,WAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAEA,CACA,CAfA,IAiBA,KAAA,GAAA,CAAA,OAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAEA,OAHA,EAIA,WAAA,CAAA,SAAA,CAAA,OAAA,CAEA,CAGA,GAAA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,4BAAA,CAAA,EACA,IAAA,CAAA,OADA,CAEA,IAAA,GAAA,CAAA,QAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,KAAA,YAAA,CAAA,IAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CAAA,CAEA,MAHA,EAIA,WAAA,CAAA,SAAA,CAAA,MAAA,CAEA,CAGA,CACA,CAzaA,CA0aA,cA1aA,yBA0aA,MA1aA,CA0aA,IA1aA,CA0aA,CACA,GAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,oBAAA,CAAA,CACA,MAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CADA,KAEA,IAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,CAAA,IAAA,IAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAEA,MAAA,CAAA,IAAA,EAFA,EAGA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAHA,KAKA,IAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,iBAAA,CAAA,CAAA,CACA,CAnbA,CAobA,cApbA,yBAobA,MApbA,CAobA,IApbA,CAobA,CACA,MAAA,CAAA,aAAA,CAAA,IAAA,CAAA,UAAA,CADA,CAIA,IAAA,CAAA,IAJA,GAKA,QAAA,GAAA,IAAA,CAAA,IAAA,CAAA,QALA,CAMA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,YAAA,CAAA,IAAA,CAAA,IAAA,CANA,CAQA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IARA,CAWA,CA/bA,CAgcA,YAhcA,uBAgcA,IAhcA,CAgcA,IAhcA,CAgcA,CACA,IAAA,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EADA,CAEA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,MAAA,EAAA,EAAA,CAFA,CAGA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,WAAA,EAAA,EAAA,CAAA,SAAA,KAAA,CAAA,QAAA,CAAA,CACA,IAAA,CAAA,aAAA,CAAA,QAAA,CAAA,KAAA,CACA,CAFA,CAGA,CAtcA,CAucA,eAvcA,0BAucA,OAvcA,CAucA,IAvcA,CAucA,CACA,OAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CACA,CAzcA,CA0cA,WA1cA,sBA0cA,GA1cA,CA0cA,IA1cA,CA0cA,CACA,6BAAA,CAAA,GAAA,CAAA,IAAA,CACA,CA5cA,CA6cA,WA7cA,sBA6cA,GA7cA,CA6cA,IA7cA,CA6cA,CACA,6BAAA,CAAA,GAAA,CAAA,IAAA,CACA,CA/cA,CAAA,CAvDA,CAygBA,MAAA,CAAA,MAEA,CA3gBA,C,CCAA,MAAA,CAAA,+BAAA,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,CAiBA,MAbA,CACA,YAAA,CAAA,sBAAA,MAAA,CAAA,CACA,GAAA,CAAA,CAAA,aAAA,CAAA,MAAA,CAAA,CAAA,CACA,GAAA,MAAA,CAAA,IAAA,SAAA,CACA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CACA,GAAA,MAAA,CAAA,IAAA,CACA,MAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAEA,CACA,KAAA,mBACA,CAVA,CAeA,CAnBA,C,CCAA,MAAA,CAAA,qCAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAoCA,QAAA,CAAA,mBAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,aAAA,GAAA,CAAA,CAAA,UAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CACA,SAEA,KAAA,wCAEA,CASA,QAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CACA,GAAA,mBAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CACA,IADA,CACA,OAAA,CAAA,IAAA,EADA,EAEA,IAFA,CAEA,gBAFA,CAIA,CAUA,QAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,QAAA,EAAA,QAAA,CAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,EAAA,CAAA,CAEA,YAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAHA,CAKA,OAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,CACA,CACA,CAUA,QAAA,CAAA,YAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,CACA,QAAA,CAAA,MAFA,GAIA,QAAA,CAAA,SAAA,CAAA,+BAAA,CAJA,CAKA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,gBAAA,CALA,EAOA,QAPA,EAQA,QAAA,CAAA,WAAA,CAAA,QAAA,CARA,CAUA,QAVA,EAWA,QAAA,CAAA,QAAA,CAAA,QAAA,CAEA,CAsBA,QAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,OACA,CAAA,QAAA,EAAA,KADA,CAEA,SAAA,QAAA,CAAA,GAAA,CAAA,KAFA,CAIA,EACA,CAwDA,QAAA,CAAA,cAAA,CAAA,OAAA,CAAA,QAAA,CAAA,IACA,CAAA,KADA,CACA,OADA,CAEA,KAAA,CAAA,WAAA,CAAA,OAAA,CAFA,CAGA,GAAA,QAAA,EAAA,KAAA,EAAA,KAAA,CAAA,MAAA,EAAA,KAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GACA,KAAA,CAAA,GAAA,CAAA,MAAA,CAAA,SAAA,QAAA,CAAA,oBAAA,CADA,CAEA,OAAA,CAAA,KAAA,CAAA,IAAA,CAAA,OAAA,EAAA,KAAA,CAAA,KAAA,CAFA,CAGA,OAHA,EAIA,MAAA,CAAA,OAAA,CAAA,CAAA,CAGA,CA7LA,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,CA4MA,MARA,CACA,cAAA,CA9DA,SAAA,OAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,gBAAA,CACA,OADA,CAEA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAFA,CAGA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAHA,CAKA,CAsDA,CAEA,cAAA,CAhCA,SAAA,OAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CADA,SAEA,KAAA,EAAA,KAAA,CAAA,MAAA,EAAA,QAAA,EAAA,KAFA,GAGA,KAAA,CAAA,QAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAGA,CAwBA,CAGA,cAAA,CAAA,cAHA,CAIA,iBAAA,CAjDA,SAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,QAAA,EAAA,QAFA,EAGA,gBAAA,CAAA,OAAA,CAAA,EAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAEA,CAwCA,CAKA,mBAAA,CA5FA,SAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,YAAA,CAAA,QAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,CAqFA,CAUA,CA9MA,C,CCAA,MAAA,CAAA,mDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,+BAAA,CAAA,qCAAA,CAAA,YAAA,CAAA,MAAA,CAAA,sBAAA,CAAA,gBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CAAA,GAAA,CAAA,eAAA,CAAA,UAAA,CAAA,EAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA,aA0IA,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,CAaA,QAAA,CAAA,aAAA,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,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,WAAA,CAAA,eAAA,CAAA,cAAA,CAAA,IAOA,CAAA,aAPA,CACA,uBAAA,CAAA,0BAAA,CAAA,IAAA,CADA,CAEA,QAAA,CAAA,EAFA,CAGA,gBAAA,CAAA,EAHA,CAIA,cAAA,CAAA,EAJA,CAKA,cAAA,CAAA,IAAA,CAAA,YAAA,EALA,CAMA,SAAA,CAAA,cAAA,CAAA,QAAA,CAAA,eAAA,CANA,CAwGA,MA/FA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,WADA,CACA,OADA,CACA,UADA,CACA,eADA,CACA,sBADA,CACA,eADA,CAEA,iBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,mBAAA,CAFA,CAGA,KAAA,CAAA,CAAA,CAHA,CAMA,GAAA,WAAA,CAAA,iBAAA,CAAA,CAAA,CAGA,GADA,WAAA,CAAA,GAAA,CAAA,YAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,CACA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,QAAA,CAAA,EAAA,EAAA,CAAA,CACA,SAmBA,GAfA,OAAA,CAAA,2BAAA,CAAA,QAAA,CAeA,CAdA,eAAA,CAAA,eAAA,CAAA,cAAA,CAAA,QAAA,CAAA,gBAAA,CAcA,CAbA,eAAA,CAAA,CAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,CAAA,kBAAA,CAAA,eAAA,CAAA,CAaA,CAZA,eAAA,EAAA,eAYA,EAXA,UAAA,CAAA,eAAA,CAAA,gBAWA,CAVA,sBAAA,CAAA,eAAA,CAAA,cAUA,CATA,KAAA,CAAA,eAAA,CAAA,KASA,GAPA,UAAA,CAAA,SAOA,CANA,sBAAA,CAAA,UAMA,EAHA,QAAA,CAAA,sBAAA,CAGA,GAFA,QAAA,CAAA,sBAAA,CAAA,CAAA,EAEA,EAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,sBAAA,CAAA,CAAA,OAAA,CAAA,CACA,SAEA,QAAA,CAAA,sBAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CA1BA,CA8BA,cAAA,CAAA,IAAA,CAAA,CACA,QAAA,CAAA,QADA,CAEA,UAAA,CAAA,UAFA,CAGA,KAAA,CAAA,KAHA,CAAA,CAKA,CACA,CA1CA,CA+FA,CAnDA,cAAA,CAAA,MAmDA,GAlDA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,OAAA,CAkDA,CA/CA,mBAAA,CAAA,cAAA,CA+CA,CA5CA,CAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,cAAA,CAAA,CACA,mBAAA,CACA,cAAA,CAAA,QADA,CAEA,MAFA,CAGA,QAHA,CAIA,cAAA,CAAA,UAJA,CAKA,cALA,CAMA,SAAA,aAAA,CAAA,CAEA,aAFA,GAGA,aAAA,CAAA,GAAA,CAAA,aAAA,CAAA,GAAA,CAHA,EAMA,GAAA,CAAA,KAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,EAAA,CAAA,MAAA,CAAA,UAAA,CACA,cAAA,CAAA,MAAA,CAAA,mBAAA,CACA,CAFA,CANA,CAWA,gBAAA,CAAA,IAAA,CAAA,aAAA,CAXA,CAYA,gBAAA,CAAA,MAAA,GAAA,cAAA,CAAA,MAZA,GAcA,cAAA,CAAA,MAAA,CAAA,mBAAA,CAdA,CAoBA,aApBA,EAqBA,UAAA,CAAA,aAAA,CArBA,CAyBA,CAAA,CAAA,UAAA,CAAA,cAAA,CAzBA,EA0BA,cAAA,EA1BA,CA6BA,CAnCA,CAqCA,CAtCA,CA4CA,CAHA,cAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,eAAA,CAGA,EAAA,cAAA,CAAA,MACA,CAMA,QAAA,CAAA,eAAA,EAAA,QACA,CAAA,EAAA,CAAA,MADA,CAEA,UAAA,CAAA,IAFA,CAGA,GAAA,CAAA,EAHA,CAKA,EAAA,EAAA,EAAA,CAAA,eAAA,EAAA,GAAA,EALA,EAOA,GADA,EAAA,CAAA,EAAA,CAAA,MACA,CAAA,EAAA,EAAA,EAAA,CAAA,CAAA,GACA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,cAAA,CADA,CAEA,UAAA,CAAA,MAFA,EAGA,MAAA,CAAA,UAAA,CAIA,MAAA,KACA,CAOA,QAAA,CAAA,UAAA,CAAA,OAAA,CAAA,IAGA,CAAA,gBAHA,CAGA,YAHA,CAGA,YAHA,CAGA,SAHA,CACA,QAAA,CAAA,GAAA,CAAA,OAAA,CADA,CAEA,UAAA,CAAA,eAAA,EAFA,CAKA,QAAA,CAAA,MAAA,EAAA,UALA,GAMA,gBAAA,CAAA,UAAA,CAAA,SAAA,EANA,CAOA,YAAA,CAAA,QAAA,CAAA,MAAA,GAAA,GAPA,CAQA,YAAA,CAAA,YAAA,CAAA,UAAA,CAAA,MAAA,EAAA,CAAA,QAAA,CAAA,WAAA,EARA,CASA,SAAA,CAAA,IAAA,CAAA,GAAA,CAAA,IAAA,CAAA,GAAA,CAAA,YAAA,CAAA,gBAAA,CAAA,CAAA,YAAA,CATA,CAUA,SAAA,GAAA,gBAVA,EAWA,UAAA,CAAA,OAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAXA,CAcA,CASA,QAAA,CAAA,kBAAA,CAAA,WAAA,CAAA,IAGA,CAAA,cAHA,CAGA,iBAHA,CACA,qBAAA,CAAA,WAAA,CAAA,YAAA,EADA,CAEA,kBAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CAFA,CAkBA,MAbA,CAAA,WAAA,CAAA,EAAA,CAAA,mBAAA,CAaA,EAZA,iBAAA,CAAA,qBAAA,CAAA,OAAA,CAAA,uCAAA,CAYA,CAXA,cAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,qBAAA,CAWA,CAVA,CAAA,cAUA,GARA,cAAA,CAAA,CAAA,CAAA,QAAA,CAAA,uBAAA,CAQA,CAPA,iBAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,cAAA,CAOA,IAJA,cAAA,CAAA,kBAIA,CAHA,iBAAA,CAAA,qBAGA,EAAA,CACA,kBAAA,CAAA,kBADA,CAEA,oBAAA,CAAA,qBAFA,CAGA,gBAAA,CAAA,iBAHA,CAIA,cAAA,CAAA,cAJA,CAKA,KAAA,CAAA,CAAA,CALA,CAOA,CAQA,QAAA,CAAA,0BAAA,CAAA,IAAA,CAAA,IACA,CAAA,uBAAA,CAAA,EADA,CAEA,cAAA,CAAA,IAAA,CAAA,YAAA,EAFA,CAGA,gBAAA,CAAA,CAHA,CA2BA,MArBA,CAAA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,oBAAA,EAAA,CAAA,SAAA,OAAA,CAAA,CACA,GAAA,CAAA,kBAAA,CACA,OAAA,CAAA,EAAA,CAAA,aAAA,CAFA,GAGA,kBAAA,CAAA,OAAA,CAAA,IAAA,CAAA,oBAAA,CAHA,CAIA,uBAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,CAJA,CAMA,CANA,CAqBA,CAZA,cAAA,CAAA,IAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,oBAAA,CAAA,IAAA,CACA,CAAA,CAAA,IAAA,CAAA,uBAAA,CAAA,SAAA,gBAAA,CAAA,CACA,GAAA,gBAAA,CAAA,oBAAA,CAAA,CAAA,IAAA,oBAAA,CAEA,MADA,CAAA,gBAAA,CAAA,KAAA,CAAA,gBACA,GAEA,CALA,CAFA,CAQA,gBAAA,EACA,CATA,CAYA,CAFA,uBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,uBAAA,CAAA,OAAA,CAEA,CAAA,uBACA,CAOA,QAAA,CAAA,mBAAA,CAAA,cAAA,CAAA,CACA,cAAA,CAAA,IAAA,CAAA,oBAAA,EAAA,MAAA,EACA,CAcA,QAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,UAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,CAEA,QAAA,CAAA,IAAA,CAAA,UAAA,IAEA,CAAA,cAAA,CAAA,GAAA,CACA,QAAA,CAAA,MAAA,CAAA,CACA,MAAA,GADA,CAAA,CADA,CAFA,CAOA,IAAA,CAAA,UAAA,CACA,gBAAA,CAAA,CACA,UAAA,CAAA,QAAA,CAAA,EAAA,EADA,CAEA,MAAA,CAAA,QAAA,CAAA,SAAA,EAFA,CAGA,GAAA,CAAA,cAHA,CAAA,CAKA,CAbA,CAcA,UAAA,CAAA,MAAA,CAAA,cAAA,CAdA,CAkBA,OAAA,CAAA,IAAA,CAAA,CACA,OAAA,CAAA,GAAA,CACA,CAAA,CAAA,GAAA,CAAA,QAAA,CAAA,oBAAA,EAAA,CAAA,SAAA,GAAA,CAAA,CAEA,MAAA,CAAA,GAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,EAAA,GAAA,EACA,CAHA,CADA,CADA,CAOA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CACA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,iCAAA,CAAA,CACA,CAFA,CAPA,CAAA,EAWA,IAXA,CAWA,IAXA,EAYA,KAZA,CAYA,SAAA,GAAA,CAAA,CAGA,KADA,CAAA,IAAA,EACA,CAAA,GAAA,CAAA,KAAA,CAAA,6BAAA,GAAA,CACA,CAhBA,CAiBA,CAnCA,CAmCA,MAAA,CAAA,gBAAA,EAnCA,CAoCA,CAWA,QAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,SAAA,CAAA,gBAAA,CACA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAFA,CAGA,cAAA,CAAA,OAAA,CAAA,oBAAA,EAAA,MAHA,EAKA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,kBAAA,CALA,CAMA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gDAAA,CANA,CAOA,gBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,4BAAA,CAPA,CAQA,iBAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,QAAA,CARA,GAWA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA,wCAAA,CAXA,CAYA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,YAAA,CAZA,CAaA,gBAAA,CAAA,MAAA,CAAA,IAAA,CAAA,gBAAA,CAbA,CAcA,iBAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,QAAA,CAdA,GAkBA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,iBAAA,CAlBA,CAmBA,iBAAA,CAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAnBA,CAqBA,CAaA,QAAA,CAAA,iBAAA,CACA,gBADA,CAEA,cAFA,CAGA,SAHA,CAIA,gBAJA,CAKA,oBALA,CAMA,QANA,CAOA,CACA,GAAA,CAAA,GAAA,CAAA,GAAA,CAAA,oBAAA,EAAA,CAAA,CAAA,KAAA,CAAA,UAAA,CAEA,CAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,SAAA,EAAA,CAAA,CACA,EAAA,CAAA,GAAA,CAAA,IAAA,EACA,CAFA,CAFA,CAOA,OAAA,CAAA,CAAA,cAAA,CAAA,CAPA,CAQA,GAAA,CAAA,MAAA,EARA,CASA,SAAA,CAAA,IAAA,EATA,CAYA,QAAA,EACA,CAbA,CAAA,CAeA,SAAA,CAAA,IAAA,EAhBA,CAiBA,gBAAA,CAAA,MAAA,CAAA,GAAA,CAjBA,CAkBA,KAAA,CAAA,CAAA,cAAA,CAAA,CACA,CAOA,QAAA,CAAA,KAAA,CAAA,qBAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,GAAA,CAAA,4CAAA,CAAA,CACA,CAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,SAAA,YAAA,CAAA,CACA,YAAA,CAAA,MAAA,CAAA,MAAA,CACA,CAFA,CAGA,CAOA,QAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,CACA,CAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,SAAA,YAAA,CAAA,CACA,YAAA,CAAA,IAAA,CAAA,oBAAA,EAAA,MAAA,EACA,CAFA,CAGA,CAQA,QAAA,CAAA,2BAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,GAAA,QAAA,CAAA,IAAA,EAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EACA,WADA,GAEA,IAFA,GAGA,OAHA,CAGA,2BAHA,CAGA,EAHA,CAIA,CA9jBA,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,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAJA,CAKA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GALA,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,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAPA,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,SAAA,CAAA,SAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,CAAA,SATA,CAUA,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAVA,CAgCA,GAAA,CAAA,QAAA,CAAA,SAAA,EAAA,CAAA,CAEA,EAAA,CAAA,cAAA,CAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,GAAA,CACA,CAFA,CAFA,CAaA,EAAA,CAAA,cAAA,CAAA,WAAA,CAAA,SAAA,OAAA,CAAA,CACA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,OAAA,CACA,CAFA,CAbA,CAyBA,EAAA,CAAA,cAAA,CAAA,MAAA,CAAA,SAAA,GAAA,CAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,EAAA,CAwBA,MAtBA,CAAA,YAAA,CAAA,QAAA,QAAA,CAAA,YAAA,CAAA,YAAA,OAsBA,CArBA,YAAA,CAAA,QAAA,QAAA,CAAA,YAAA,CAAA,YAAA,CAAA,GAqBA,CApBA,OAAA,CAAA,QAAA,QAAA,CAAA,OAAA,CAAA,OAAA,CAAA,IAoBA,CAlBA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,SAAA,KAAA,CAAA,GAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,EAAA,CACA,IAAA,GAAA,KAAA,EAAA,SAAA,KAFA,CAGA,SAAA,QAAA,CAAA,KAHA,CAIA,KAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAJA,CAKA,QAAA,WAAA,KAAA,CALA,GAMA,KAAA,CAAA,CAAA,CAAA,MAAA,CAAA,KAAA,EAAA,IAAA,CAAA,GAAA,CANA,EASA,KAAA,CAAA,EATA,CAWA,SAAA,YAXA,GAYA,QAAA,EAAA,GAAA,CAAA,YAZA,EAcA,QAAA,EAAA,OAAA,CAAA,KAAA,CAAA,OAdA,CAeA,SAAA,CAAA,IAAA,CAAA,QAAA,CACA,CAhBA,CAkBA,CAAA,SAAA,CAAA,IAAA,CAAA,YAAA,CACA,CA1BA,CAzBA,CAuDA,EAAA,CAAA,cAAA,CAAA,KAAA,CAAA,SAAA,UAAA,CAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CACA,UAAA,CAAA,QAAA,CAAA,UAAA,CAFA,CAGA,SAAA,CAAA,QAAA,CAAA,SAAA,CAHA,CAIA,SAAA,CAAA,QAAA,CAAA,SAAA,CAJA,CAMA,IAAA,GAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,EAAA,SAAA,CACA,GAAA,EAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,MAAA,CAAA,EAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGA,MAAA,CAAA,GACA,CAXA,CAvDA,CAoEA,EAAA,CAAA,cAAA,CAAA,OAAA,CAAA,SAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OACA,CAAA,IAAA,EAAA,IADA,CAEA,OAAA,CAAA,EAAA,CAAA,IAAA,CAFA,CAIA,OAAA,CAAA,OAAA,CAAA,IAAA,CAEA,CANA,CApEA,CA8EA,EAAA,CAAA,cAAA,CAAA,UAAA,CAAA,SAAA,IAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,EAAA,EACA,CAFA,CA9EA,CAoFA,EAAA,CAAA,cAAA,CAAA,UAAA,CAAA,SAAA,QAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,EAAA,CAAA,IAAA,CAEA,CAJA,CAKA,CAzFA,CA2FA,QAAA,CAAA,aA3HA,GA4HA,QAAA,CAAA,UAAA,CA5HA,CA6HA,QAAA,CAAA,aAAA,GA7HA,EA+HA,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,OAAA,CAAA,MAAA,CAAA,EAAA,CAAA,aAAA,CAAA,OAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,KAAA,gBAAA,CAMA,MAHA,CAAA,MAAA,EAAA,kKACA,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,IAAA,CAAA,OAAA,CAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EADA,CAEA,0BACA,CAAA,MACA,CAVA,CAAA,CAgBA,QAAA,CAAA,aA/IA,GAgJA,QAAA,CAAA,UAAA,CAhJA,CAiJA,QAAA,CAAA,aAAA,GAjJA,KAmJA,CAAA,UAAA,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,uQACA,CANA,CAnJA,CAkLA,OAAA,CAAA,GAAA,EAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,CAlLA,CAskBA,MAJA,CACA,aAAA,CAAA,aADA,CAMA,CAxkBA,C,CCAA,MAAA,CAAA,kDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,+BAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,aAqCA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,WAAA,CAAA,eAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,KAAA,CACA,QAAA,CAAA,EADA,CAEA,sBAAA,CAAA,EAFA,CAsBA,GAjBA,CAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,QAAA,CAAA,IACA,CAAA,WADA,CACA,OADA,CAEA,iBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,mBAAA,CAFA,CAIA,WAAA,CAAA,iBAAA,CAJA,GAKA,WAAA,CAAA,GAAA,CAAA,YAAA,CAAA,WAAA,CAAA,iBAAA,CAAA,CALA,CAMA,OAAA,CAAA,2BAAA,CAAA,QAAA,CANA,CAOA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAAA,QAAA,CAAA,EAAA,EAAA,GAAA,CAAA,CAAA,GAAA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAPA,GASA,sBAAA,CAAA,IAAA,CAAA,QAAA,CATA,CAUA,QAAA,CAAA,IAAA,CAAA,OAAA,CAVA,EAaA,CAbA,CAiBA,CADA,KAAA,CAAA,sBAAA,CAAA,MACA,CAAA,KAAA,CAAA,CAEA,GAAA,CAAA,SAAA,CAAA,EAAA,CAGA,CAAA,CAAA,SAAA,CAAA,sBAAA,CAAA,SAAA,QAAA,CAAA,CAEA,GAAA,CAAA,WAAA,CACA,CAAA,GAAA,SAAA,CAAA,MAHA,GAIA,WAAA,CAAA,UAAA,CACA,eAAA,EACA,CANA,EASA,SAAA,CAAA,IAAA,CAAA,SAAA,EAAA,CAAA,CACA,mBAAA,CACA,QADA,CAEA,MAFA,CAGA,QAHA,CAIA,UAAA,CACA,EAAA,CAAA,IAAA,CACA,CANA,CAOA,WAPA,CASA,CAVA,CAWA,CApBA,CALA,CA2BA,KAAA,CAAA,MAAA,CAAA,SAAA,CAAA,UAAA,CAEA,CAAA,CAAA,UAAA,CAAA,cAAA,CAFA,EAGA,cAAA,EAEA,CALA,CAMA,CAEA,MAAA,CAAA,KACA,CAWA,QAAA,CAAA,mBAAA,CAAA,QAAA,CAAA,MAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,aAAA,CAAA,CACA,GAAA,CAAA,SAAA,CACA,YAAA,CAAA,CAAA,CAAA,iBAAA,CADA,CAGA,QAAA,CAAA,EAAA,CAAA,eAAA,CAJA,EAMA,QAAA,CAAA,IAAA,CAAA,UAAA,CACA,SAAA,CAAA,YAAA,CAAA,IAAA,CAAA,IAAA,QAAA,CAAA,SAAA,EAAA,CADA,CAEA,SAAA,CAAA,MAFA,CAOA,SAAA,CAAA,KAAA,EAPA,EAIA,SAAA,CAAA,QAAA,CAAA,MAAA,EAJA,CAKA,YAAA,CAAA,MAAA,CAAA,SAAA,CALA,EAUA,gBAAA,EAVA,CAYA,QAAA,CAAA,UAAA,CAAA,CACA,QAAA,CAAA,aADA,CAAA,CAGA,CAfA,CAeA,MAAA,CAAA,gBAAA,EAfA,CAiBA,CAQA,QAAA,CAAA,2BAAA,CAAA,QAAA,CAAA,CACA,MAAA,CAAA,GAAA,QAAA,CAAA,IAAA,EAAA,CAAA,QAAA,CAAA,IAAA,CAAA,OAAA,CAAA,EACA,WADA,GAEA,IAFA,GAGA,OAHA,CAGA,2BAHA,CAGA,EAHA,CAIA,CA7IA,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,KAAA,CAAA,KAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CAAA,CAAA,KAJA,CAKA,GAAA,CAAA,GAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GALA,CAqJA,MAJA,CACA,aAAA,CAAA,aADA,CAMA,CAvJA,C,CCAA,MAAA,CAAA,qCAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,SAAA,CAAA,QAAA,CAAA,gBAAA,CAAA,gCAAA,CAAA,mDAAA,CAAA,kDAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,cAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,kBAAA,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,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAJA,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,cAAA,CAAA,cAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cAAA,CAAA,SAAA,CAAA,CAAA,cANA,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,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBARA,CASA,kBAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBAAA,CAAA,SAAA,CAAA,CAAA,kBATA,IA+BA,CAAA,OAAA,CAAA,GAAA,EAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CAAA,EAAA,CA/BA,CAiCA,SAAA,CAAA,UAAA,CACA,KAAA,IAAA,CAAA,IADA,CAEA,KAAA,QAAA,CAAA,IAFA,CAGA,KAAA,QAAA,CAAA,IAHA,CAIA,KAAA,MAAA,CAAA,IAJA,CAKA,KAAA,OAAA,OACA,CAvCA,CAmTA,MA1QA,CAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,UAAA,IACA,CAAA,SAAA,CAAA,KAAA,YAAA,EADA,CAEA,MAAA,CAAA,KAAA,SAAA,EAFA,CAGA,SAAA,CAAA,EAHA,CAKA,IAAA,GAAA,CAAA,GAAA,GAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAOA,GAAA,KAAA,CAAA,QAAA,EAAA,WAAA,QAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CACA,IAAA,GAAA,CAAA,QAAA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CACA,GAAA,MAAA,EAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAGA,KAAA,CAAA,QAAA,CAAA,CACA,IAAA,CAAA,CACA,IAAA,CAAA,CACA,IAAA,CAAA,IAAA,CAAA,IADA,CAEA,IAAA,CAAA,8BAFA,CAGA,IAAA,CAAA,kDAHA,CADA,CADA,CASA,CAIA,SAAA,CAAA,GAAA,CAAA,CAAA,KACA,CAGA,KAAA,OAAA,CAAA,YAAA,CAAA,SAAA,CApCA,CAuCA,KAAA,OAAA,CAAA,aAAA,CAAA,SAAA,CAvCA,CAwCA,KAAA,OAAA,CAAA,SAAA,CAAA,YAAA,CAAA,IAAA,CACA,CAiOA,CA/NA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SAAA,OAAA,CAAA,CACA,KAAA,OAAA,CAAA,OADA,IAEA,CAAA,IAAA,CAAA,IAFA,CAGA,iBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,cAAA,CAHA,CAKA,OAAA,CAAA,MAAA,CAAA,SAAA,YAAA,CAAA,CAKA,IAAA,CAAA,aAAA,EALA,CAMA,GAAA,CAAA,iBAAA,CAAA,IAAA,CAAA,SAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CAGA,iBAAA,GAAA,iBAAA,EAAA,OAAA,CAAA,UAAA,CAAA,gBAAA,EATA,CAUA,OAAA,CAAA,MAAA,CAAA,UAAA,CAEA,OAAA,CAAA,UAAA,CAAA,gBAAA,IAFA,CAGA,YAAA,CAAA,CAAA,CACA,CAJA,CAVA,CAgBA,YAAA,CAAA,CAAA,CAEA,CAlBA,CAmBA,CAuMA,CArMA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,QAAA,CAAA,UAAA,CACA,KAAA,QAAA,CAAA,QADA,KAGA,MAAA,kBAEA,CA+LA,CA7LA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAIA,MAHA,MAAA,MAGA,GAFA,KAAA,MAAA,CAAA,GAAA,CAAA,UAEA,EAAA,KAAA,MACA,CAwLA,CAtLA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,SAAA,IAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,KAAA,SAAA,GAAA,YAAA,CAAA,IAAA,CAAA,SAAA,IAAA,CAAA,CACA,IAAA,CAAA,IAAA,CAAA,IADA,CAEA,QAAA,CAAA,IAAA,CAAA,IAAA,CACA,CAHA,CAIA,CAgLA,CA9KA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,SAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,KAAA,SAAA,GAAA,IAAA,CACA,KAAA,SAAA,GAAA,YAAA,CAAA,QAAA,CAAA,QAAA,CADA,KAGA,MAAA,gDAEA,CAwKA,CAtKA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,SAAA,IAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CAEA,IAAA,CAAA,CAAA,CAAA,UAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA,CAAA,IAHA,CAKA,GAAA,CAAA,MAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,KAAA,gCAAA,CAEA,GAAA,IAAA,CAAA,QAAA,CACA,IAAA,CAAA,QAAA,CAAA,IAAA,CAAA,UAAA,CACA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,QAAA,CADA,CAEA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,EAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAFA,CAMA,OAAA,CAAA,IAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,EAAA,CADA,CAEA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CACA,CAAA,CAAA,KAAA,CAAA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,KAAA,CAAA,iCAAA,CAAA,CACA,CAFA,CAFA,CAAA,EAMA,IANA,CAMA,UAAA,CACA,IAAA,CAAA,IAAA,CAAA,YAAA,GAAA,EAAA,CAAA,gBAAA,CAAA,SAAA,CAAA,CAAA,IAAA,CAAA,CACA,IAAA,CAAA,WAAA,EAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,EAAA,IAAA,CAAA,QADA,EAEA,cAAA,CAAA,MAAA,CAAA,gBAAA,CAAA,CACA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CADA,CAEA,IAAA,CAAA,QAFA,CAAA,CAKA,CAPA,CADA,CAUA,IAAA,CAAA,wBAAA,EAVA,CAWA,IAAA,CAAA,oBAAA,EAXA,CAYA,IAAA,EACA,CAnBA,EAoBA,KApBA,CAoBA,SAAA,GAAA,CAAA,CAIA,KAFA,CAAA,IAAA,EAEA,CAAA,GAAA,CAAA,KAAA,CAAA,6BAAA,GAAA,CACA,CAzBA,CA0BA,CAhCA,CAgCA,IAAA,CAAA,SAAA,GAAA,gBAAA,EAhCA,CADA,KAmCA,MAAA,qCAEA,CAzCA,CA2CA,QAAA,WAAA,IAAA,CAhDA,CAiDA,KAAA,YAAA,CAAA,IAAA,CAAA,MAAA,CAjDA,CAmDA,MAAA,EAEA,CAiHA,CA/GA,SAAA,CAAA,SAAA,CAAA,wBAAA,CAAA,UAAA,CACA,GAAA,CAAA,IAAA,CAAA,IAAA,CACA,GAAA,IAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,YAAA,CAAA,IAAA,CAAA,IAAA,CAAA,eAAA,EAAA,CACA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,YAAA,CAAA,IACA,CAAA,WAAA,CAAA,YAAA,CAAA,CAAA,CADA,CAEA,UAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CAFA,CAGA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CAAA,SAAA,MAAA,CAAA,CACA,GAAA,MAAA,CACA,WAAA,CAAA,QAAA,CAAA,MAAA,CADA,CAEA,cAAA,CAAA,MAAA,CAAA,YAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CAFA,KAGA,CACA,GAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,EAAA,CACA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,UAAA,CAFA,GAGA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAHA,CAIA,WAAA,CAAA,QAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAJA,CAKA,cAAA,CAAA,MAAA,CAAA,YAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CALA,CAOA,CACA,CAZA,CAaA,CACA,CACA,CAyFA,CAnFA,SAAA,CAAA,SAAA,CAAA,oBAAA,CAAA,UAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,UAAA,CAAA,KAAA,QAAA,CAAA,YAAA,CAAA,KAAA,IAAA,CAFA,CAGA,UAAA,CAAA,MAHA,GAIA,UAAA,CAAA,CAAA,CAAA,WAAA,CAJA,EAMA,UAAA,CAAA,GAAA,CAAA,aAAA,EAAA,EAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,IAAA,CAAA,QAAA,CAAA,cAAA,EAAA,CACA,SAAA,CAAA,SAAA,EAAA,CAAA,CAAA,aAAA,CAAA,MAFA,CAGA,WAHA,EAIA,WAAA,CAAA,MAAA,CAAA,SAAA,CAEA,CANA,CAOA,CAsEA,CApEA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,UAAA,CACA,KAAA,aAAA,EADA,CAEA,KAAA,OAAA,CAAA,MAAA,EACA,CAiEA,CA/DA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,UAAA,IACA,CAAA,SAAA,CAAA,EADA,CAEA,YAAA,CAAA,KAAA,IAAA,CAAA,eAAA,EAFA,CAcA,MAVA,CAAA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA,WAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,EAAA,CACA,GAAA,CACA,QAAA,CAAA,WAAA,CAAA,WAAA,EACA,CAAA,MAAA,CAAA,CAAA,CACA,OAAA,CAAA,KAAA,CAAA,CAAA,CACA,CACA,SAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,QACA,CARA,CAUA,CAAA,SACA,CAgDA,CA9CA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,UAAA,IACA,CAAA,MAAA,CAAA,EADA,CAEA,YAAA,CAAA,KAAA,IAAA,CAAA,eAAA,EAFA,CAcA,MAVA,CAAA,CAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA,WAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,EAAA,CACA,GAAA,CACA,KAAA,CAAA,WAAA,CAAA,QAAA,EACA,CAAA,MAAA,CAAA,CAAA,CACA,OAAA,CAAA,KAAA,CAAA,CAAA,CACA,CACA,MAAA,CAAA,WAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,KACA,CARA,CAUA,CAAA,MACA,CA+BA,CA7BA,SAAA,CAAA,SAAA,CAAA,qBAAA,CAAA,SAAA,QAAA,CAAA,CACA,KAAA,QAAA,CAAA,QACA,CA2BA,CAzBA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,SAAA,WAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,aAAA,CAAA,CAAA,CAAA,MAAA,CAAA,MAAA,GAAA,mBAAA,CADA,MAIA,CAAA,aAJA,CAKA,mBAAA,CAAA,aAAA,CACA,KAAA,IADA,CAEA,KAAA,SAAA,EAFA,CAGA,KAAA,QAHA,CAIA,WAJA,CAKA,QALA,CAMA,cANA,CALA,CAcA,kBAAA,CAAA,aAAA,CACA,KAAA,IADA,CAEA,KAAA,SAAA,EAFA,CAGA,KAAA,QAHA,CAIA,WAJA,CAKA,QALA,CAMA,cANA,CASA,CAEA,CAAA,SAEA,CArTA,C,CCAA,MAAA,CAAA,6CAAA,CAAA,CAAA,QAAA,CAAA,iCAAA,CAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,CAAA,aAAA,eAqFA,IAAA,CAAA,KArFA,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,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAHA,CAwGA,MAhGA,CACA,cAAA,CAAA,wBAAA,OAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CACA,KAAA,CAAA,IADA,CAoBA,MAjBA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,CADA,CAGA,QAHA,GAEA,UAFA,CAIA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAJA,CAMA,YANA,GAEA,UAFA,CAOA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAPA,CAUA,GAAA,CAAA,IAAA,CAAA,CAAA,CAVA,CAYA,CAAA,CAAA,OAAA,CAAA,CAAA,CAZA,EAaA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,cAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAEA,CAfA,CAiBA,CAAA,GACA,CAvBA,CAwBA,WAAA,CAAA,qBAAA,WAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CACA,KAAA,CAAA,IADA,CA0BA,MAvBA,CAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,CACA,GAAA,CAAA,MAAA,CACA,CAAA,CAAA,QAAA,CAAA,CAAA,CAFA,CAGA,QAAA,GAAA,SAHA,EAIA,MAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,CAJA,CAKA,MALA,EAMA,GAAA,CAAA,IAAA,CAAA,MAAA,CANA,EAQA,YAAA,GAAA,SARA,EASA,MAAA,CAAA,WAAA,CAAA,qBAAA,CAAA,CAAA,CATA,CAUA,MAVA,EAWA,GAAA,CAAA,IAAA,CAAA,MAAA,CAXA,EAcA,GAAA,CAAA,IAAA,CAAA,CAAA,CAdA,CAgBA,CAAA,CAAA,OAAA,CAAA,CAAA,CAhBA,CAiBA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,WAAA,CAAA,WAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAjBA,CAmBA,GAAA,CAAA,IAAA,CAAA,CAAA,CAEA,CArBA,CAuBA,CAAA,GACA,CApDA,CAqDA,cAAA,CAAA,wBAAA,OAAA,CAAA,CACA,GAAA,CAAA,CAAA,CAAA,EAAA,CACA,CAAA,CAAA,EADA,CAEA,CAAA,CAAA,CAFA,CAIA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CACA,GAAA,OAAA,CAAA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,OAAA,CAFA,GAGA,CAAA,CAAA,CAAA,CAAA,CAAA,MAHA,EAKA,CAAA,CAAA,IAAA,CAAA,MAAA,CALA,CAMA,CAAA,EACA,CAPA,IAQA,MAAA,+CAAA,CAIA,IAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,IAAA,CAAA,CAAA,CAAA,CAAA,EAGA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,EACA,CAAA,CAAA,CAAA,CAAA,CAAA,WAAA,IAAA,CAAA,MAAA,IAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CADA,OAEA,CAAA,CAAA,CAAA,CAFA,EAGA,GAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CARA,CASA,CAAA,CAAA,CAAA,CAAA,CAAA,GATA,CAYA,MAAA,CAAA,CACA,CArFA,CAsFA,kBAAA,CAAA,4BAAA,WAAA,CAAA,YAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,WAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CADA,MAEA,CAAA,MAFA,CAGA,MAAA,CAAA,EAAA,EAHA,CAKA,EAEA,CA7FA,CAkGA,CA1GA,C,CCAA,MAAA,CAAA,oCAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,iCAAA,CAAA,6CAAA,CAAA,gBAAA,CAAA,WAAA,CAAA,mBAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,WAAA,CAAA,YAAA,CAAA,YAAA,CAAA,UAAA,CAAA,CAAA,aAgKA,QAAA,CAAA,kBAAA,EAAA,CACA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,IAAA,CAAA,MAAA,CAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,WAAA,CAAA,EAAA,CACA,CAhKA,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,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAJA,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,WAAA,CAAA,WAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,WANA,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,YAAA,CAAA,YAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YAAA,CAAA,SAAA,CAAA,CAAA,YARA,CASA,UAAA,CAAA,UAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,UATA,CAiCA,GAAA,CAAA,EAAA,CAAA,UAAA,CACA,UAAA,QAAA,CAAA,EAAA,CAAA,OAlCA,GAmCA,EAAA,CAAA,OAAA,CAAA,YAAA,CAnCA,KAsCA,CAAA,gBAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,GAAA,CAEA,GAAA,QAAA,WAAA,QAAA,CAAA,CACA,SAGA,GAAA,CAAA,YAAA,GAAA,CACA,GAAA,QAAA,CAAA,QAAA,CACA,GAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,YAAA,GADA,KAEA,CACA,GAAA,CAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,GAAA,CAAA,CAAA,GAAA,CAAA,IACA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,CADA,CAEA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAFA,CAGA,qBAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAHA,GAIA,YAAA,GAJA,CAMA,CACA,CAEA,GAAA,CAAA,YAAA,CAEA,KADA,CAAA,KAAA,GACA,CAAA,GAAA,CAAA,KAAA,CAAA,oDAAA,QAAA,CAAA,QAAA,CAAA,CAGA,GAAA,CAAA,QAAA,CAAA,QAAA,CAEA,KADA,CAAA,KAAA,GACA,CAAA,GAAA,CAAA,KAAA,CAAA,8CAAA,QAAA,CAAA,QAAA,CAAA,CAGA,MAAA,CAAA,KACA,CAvEA,CAyEA,kBAAA,CAAA,CACA,YADA,CAEA,gBAFA,CAGA,YAHA,CAIA,qBAJA,CAKA,oBALA,CAMA,oBANA,CAOA,qBAPA,CAQA,UARA,CASA,KATA,CAUA,MAVA,CAWA,QAXA,CAYA,OAZA,CAaA,eAbA,CAcA,aAdA,CAeA,sBAfA,CAgBA,mBAhBA,CAiBA,yBAjBA,CAkBA,qBAlBA,CAmBA,6BAnBA,CAoBA,4BApBA,CAqBA,yBArBA,CAsBA,oBAtBA,CAuBA,oBAvBA,CAwBA,yBAxBA,CAyBA,kBAzBA,CA0BA,kBA1BA,CA2BA,kBA3BA,CA4BA,wBA5BA,CA6BA,mBA7BA,CA8BA,sBA9BA,CA+BA,mBA/BA,CAgCA,uBAhCA,CAiCA,mBAjCA,CAkCA,QAlCA,CAmCA,mBAnCA,CAoCA,KApCA,CAqCA,QArCA,CAsCA,SAtCA,CAuCA,eAvCA,CAwCA,SAxCA,CAyCA,cAzCA,CA0CA,wBA1CA,CA2CA,cA3CA,CA4CA,aA5CA,CA6CA,SA7CA,CA8CA,iBA9CA,CAzEA,CA6HA,aAAA,CAAA,CACA,cAAA,CAAA,CAAA,YAAA,CAAA,YAAA,CAAA,QAAA,CAAA,eAAA,CADA,CAEA,WAAA,CAAA,CAAA,YAAA,CAFA,CAGA,oBAAA,CAAA,CAAA,wBAAA,CAHA,CAIA,iBAAA,CAAA,CAAA,cAAA,CAJA,CAKA,mBAAA,CAAA,CAAA,KAAA,CAAA,SAAA,CALA,CAMA,2BAAA,CAAA,CAAA,mBAAA,CANA,CAOA,0BAAA,CAAA,CAAA,mBAAA,CAAA,QAAA,CAPA,CAQA,uBAAA,CAAA,CAAA,eAAA,CARA,CASA,kBAAA,CAAA,CAAA,eAAA,CATA,CAUA,kBAAA,CAAA,CAAA,SAAA,CAVA,CAWA,uBAAA,CAAA,CAAA,cAAA,CAXA,CAYA,gBAAA,CAAA,CAAA,wBAAA,CAZA,CAaA,gBAAA,CAAA,CAAA,cAAA,CAbA,CA7HA,CAgJA,qBAAA,CAAA,CACA,sBAAA,CAAA,CAAA,sBAAA,CAAA,kBAAA,CADA,CAEA,YAAA,CAAA,CAAA,mBAAA,CAAA,kBAAA,CAFA,CAhJA,CAwJA,SAAA,CAAA,CACA,cAAA,GADA,CAxJA,CA8KA,QAAA,CAAA,SAAA,OAAA,CAAA,CA8CA,QAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,IAAA,CAAA,CACA,GAAA,CAAA,OAAA,GAAA,CASA,MARA,KAAA,UAAA,CAAA,QAAA,CAQA,EANA,UAAA,CAAA,QAAA,CAAA,GAMA,CALA,OAAA,GAKA,EAJA,UAAA,CAAA,QAAA,CAIA,GAHA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,QAAA,CAAA,CAGA,CAFA,OAAA,GAEA,EAAA,OACA,CAzDA,GAIA,CAAA,UAAA,CAAA,EAJA,CASA,UAAA,CAAA,EATA,CAWA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,SAAA,CAXA,CAaA,KAAA,UAAA,GAbA,CAeA,KAAA,IAAA,CAAA,EAfA,CAkBA,KAAA,eAAA,CAAA,EAlBA,CAwBA,GAAA,CAAA,iBAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,IAAA,CACA,GAAA,UAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,UAAA,CAAA,QAAA,CADA,KAEA,CACA,GAAA,CAAA,GAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CACA,CAAA,CAAA,GAFA,GAGA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CAAA,GAAA,CAHA,CAIA,UAAA,CAAA,QAAA,CAJA,GAKA,GAAA,CAAA,UAAA,CAAA,QAAA,CALA,EAQA,CACA,MAAA,CAAA,GACA,CAdA,CAyCA,KAAA,SAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,CAIA,MAHA,QAAA,QAAA,CAAA,GAGA,GAFA,OAAA,CAAA,GAAA,CAAA,CAAA,KAEA,EAAA,IACA,CAtEA,CA6EA,KAAA,UAAA,CAAA,SAAA,IAAA,CAAA,CAEA,MADA,CAAA,OAAA,CAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CACA,CAAA,IACA,CAhFA,CAuFA,KAAA,SAAA,CAAA,SAAA,GAAA,CAAA,OACA,QAAA,QAAA,CAAA,GAAA,EAAA,OAAA,CAAA,GAAA,CADA,CAEA,OAAA,CAAA,GAAA,CAFA,CAIA,IACA,CA5FA,CA8FA,KAAA,gBAAA,CAAA,SAAA,WAAA,CAAA,UAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,SAAA,CAAA,UAAA,CAAA,CADA,MAEA,CAAA,QAAA,EAAA,WAAA,EAAA,QAAA,CAAA,WAAA,CAAA,EAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,UAAA,CAAA,CAFA,CAIA,EAAA,CAAA,OAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,UAAA,CAAA,CAJA,CAMA,IAEA,CAtGA,CA4GA,KAAA,eAAA,CAAA,UAAA,CACA,MAAA,CAAA,OAAA,CAAA,YACA,CA9GA,CAoHA,KAAA,cAAA,CAAA,UAAA,CACA,MAAA,MAAA,WACA,CAtHA,CAgIA,KAAA,SAAA,CAAA,SAAA,OAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IACA,CAAA,GADA,CAEA,GAAA,CAAA,EAFA,CAGA,QAAA,CAAA,WAAA,EAAA,OAAA,CAAA,QAHA,CAIA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAJA,CAKA,UAAA,CAAA,KAAA,SAAA,CAAA,YAAA,CALA,CAOA,GAAA,CAAA,QAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,sDAAA,QAAA,CAAA,CAiCA,MA7BA,CAAA,CAAA,CAAA,QAAA,CAAA,UAAA,GAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CA6BA,GAtBA,GAAA,CAAA,UAAA,CAAA,MAAA,CAAA,OAAA,CAAA,WAAA,CAsBA,CArBA,CAAA,CAAA,QAAA,CAAA,GAAA,CAqBA,GApBA,GAAA,EAAA,GAoBA,GAfA,GAAA,EAAA,QAAA,CAAA,QAAA,CAAA,IAAA,CAeA,CAZA,CAAA,CAAA,QAAA,CAAA,UAAA,GAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,KAAA,CAYA,GALA,GAAA,CAAA,UAAA,CAAA,KAAA,CAAA,OAAA,CAAA,WAAA,CAKA,CAJA,CAAA,CAAA,QAAA,CAAA,GAAA,CAIA,GAHA,GAAA,EAAA,GAGA,GAAA,GACA,CA1KA,CA4KA,KAAA,OAAA,CAAA,SAAA,OAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,IAAA,CACA,QAAA,CAAA,WAAA,EAAA,OAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAUA,MANA,CAAA,QAMA,EALA,UAAA,QAAA,CAAA,QAAA,CAAA,OAKA,GAJA,GAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,IAAA,CAIA,EAAA,GACA,CAxLA,CA0LA,KAAA,YAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CACA,MAAA,CAAA,EAAA,CAAA,OAAA,CAAA,GAAA,EAAA,IAAA,CACA,CA5LA,CA8LA,KAAA,YAAA,CAAA,SAAA,UAAA,CAAA,MAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,CAAA,IAAA,CACA,QAAA,CAAA,WAAA,EAAA,UAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,CACA,GAAA,CAAA,QAAA,CAAA,YAAA,CAAA,UAAA,CAAA,MAAA,CADA,KAGA,MAAA,qCAAA,UAAA,CAAA,QAAA,CAEA,MAAA,CAAA,GACA,CAzMA,CA2MA,KAAA,UAAA,CAAA,SAAA,UAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IACA,CAAA,QAAA,CAAA,WAAA,EAAA,UAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,EAAA,UAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CACA,MAAA,CAAA,QAAA,CAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAEA,CAlNA,CAoNA,KAAA,WAAA,CAAA,SAAA,cAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,GAAA,CACA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,IAAA,QAAA,CASA,KAAA,2CAAA,QAAA,CATA,IACA,IAAA,UAAA,QAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,QAAA,CADA,CAEA,GAAA,CAAA,UAAA,CAAA,QAAA,CAAA,YAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CACA,UAAA,WAAA,CAAA,CAAA,EAAA,UAAA,CAAA,MAHA,EAIA,UAAA,CAAA,OAAA,CAAA,aAAA,CAAA,CAAA,cAAA,CAAA,QAAA,CAAA,CAEA,CAIA,MAAA,CAAA,GACA,CArOA,CAuOA,KAAA,WAAA,CAAA,SAAA,cAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,GAAA,CACA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,CACA,UAAA,QAAA,CAAA,QAAA,CAAA,WADA,GAEA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAFA,MAKA,MAAA,2CAAA,QAAA,CAEA,MAAA,CAAA,GACA,CApPA,CAsPA,KAAA,aAAA,CAAA,SAAA,cAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,GAAA,CACA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,CACA,UAAA,QAAA,CAAA,QAAA,CAAA,aADA,GAEA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAFA,MAKA,MAAA,2CAAA,QAAA,CAEA,MAAA,CAAA,GACA,CAnQA,CA+QA,KAAA,QAAA,CAAA,SAAA,cAAA,CAAA,WAAA,CAAA,IACA,CAAA,GAAA,GADA,CAEA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QAFA,CAGA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAHA,CAKA,GAAA,QAAA,CAEA,GAFA,CACA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CADA,CAEA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAFA,CAIA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAJA,KAOA,MAAA,2CAAA,QAAA,CAEA,MAAA,CAAA,GACA,CA9RA,CA0SA,KAAA,QAAA,CAAA,SAAA,cAAA,CAAA,KAAA,CAAA,WAAA,CAAA,IACA,CAAA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,CACA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CADA,CAEA,QAAA,CAAA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,KAAA,CAFA,EAIA,QAAA,CAAA,aAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAJA,CAKA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAAA,KAAA,CALA,MAQA,MAAA,2CAAA,QAEA,CAxTA,CAgUA,KAAA,OAAA,CAAA,SAAA,cAAA,CAAA,WAAA,CAAA,CACA,GAAA,CAAA,GAAA,GAAA,CACA,QAAA,CAAA,WAAA,EAAA,cAAA,CAAA,QADA,CAEA,QAAA,CAAA,iBAAA,CAAA,QAAA,CAFA,CAIA,GAAA,QAAA,CACA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CADA,GAEA,GAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,cAAA,CAFA,MAKA,MAAA,2CAAA,QAAA,CAEA,MAAA,CAAA,GACA,CA7UA,CA+UA,KAAA,kBAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CAjVA,CAmVA,KAAA,QAAA,CAAA,SAAA,kBAAA,CAAA,CACA,CAAA,CAAA,MAAA,CAAA,UAAA,CAAA,kBAAA,CACA,CArVA,CAuVA,KAAA,IAAA,CAAA,SAAA,QAAA,CAAA,eAAA,CAAA,IACA,CAAA,IAAA,CAAA,IADA,CAEA,QAAA,CAAA,EAFA,CAIA,SAAA,CAAA,YAAA,CAAA,mBAAA,EAJA,CAiBA,GAZA,SAYA,GAXA,OAAA,CAAA,MAAA,CAAA,SAWA,EATA,OAAA,CAAA,MASA,GAPA,OAAA,CAAA,MAAA,CAAA,IAAA,CAAA,KAAA,UAAA,CAAA,OAAA,CAAA,MAAA,CAAA,IAAA,CAOA,CANA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,CAAA,SAAA,KAAA,CAAA,KAAA,CAAA,CACA,OAAA,CAAA,MAAA,CAAA,SAAA,CAAA,KAAA,EAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,KAAA,CAAA,IAAA,CACA,CAFA,CAMA,CAHA,KAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAGA,GAAA,eAAA,CAyCA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,UAAA,CAzCA,KACA,IAAA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,CAEA,eAAA,CAAA,CAAA,CAAA,YAAA,CAAA,eAAA,CAAA,kBAAA,CAFA,CAKA,CAAA,CAAA,IAAA,CAAA,eAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,IAAA,CAAA,aAAA,CAAA,QAAA,CAAA,CACA,IAFA,GAGA,eAAA,CAAA,CAAA,CAAA,KAAA,CAAA,eAAA,CAAA,IAAA,CAHA,CAKA,CALA,CALA,CAYA,CAAA,CAAA,OAAA,CAAA,eAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,kBAAA,CACA,GAAA,qBAAA,CAAA,QAAA,CAAA,CACA,kBAAA,CAAA,CAAA,CAAA,YAAA,CAAA,eAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,CADA,CAEA,CAAA,CAAA,IAAA,CAAA,kBAAA,CAAA,SAAA,QAAA,CAAA,CACA,GACA,CAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EACA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAFA,CAIA,KAAA,IAAA,CAAA,KAAA,CACA,IAAA,CAAA,IAAA,CACA,6CADA,CAEA,QAFA,CAGA,cAHA,CAIA,QALA,CAQA,CAbA,CAFA,KAiBA,IAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,IAAA,CAAA,IAAA,CAAA,6CAAA,CAAA,QAAA,CAGA,CAvBA,CAZA,KAqCA,MAAA,IAAA,CAAA,KAAA,CAAA,kEAAA,CAAA,CAqBA,MAfA,CAAA,YAAA,CAAA,EAAA,CAAA,oBAAA,CAAA,CACA,OADA,CACA,QAAA,CAAA,GAAA,CAAA,SAAA,MAAA,QAAA,CAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,CADA,EAEA,IAFA,GAGA,IAHA,CAGA,SAAA,MAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,CACA,gBAAA,CAAA,KAAA,CADA,GAEA,UAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,KAFA,CAKA,CALA,CADA,CAOA,UAAA,QAAA,CAAA,QAPA,EAQA,QAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAEA,CAbA,CAeA,CAAA,IACA,CApaA,CAyaA,KAAA,MAAA,CAAA,UAAA,CAIA,MAHA,MAAA,WAGA,EAFA,WAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CAAA,MAAA,EAEA,CAAA,IACA,CA9aA,CAubA,KAAA,kBAAA,CAAA,SAAA,WAAA,CAAA,OAAA,CAAA,kBAAA,CAAA,CACA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,aAAA,CADA,GAEA,KAAA,eAAA,CAAA,WAAA,CAAA,SAAA,EAAA,EAAA,CAAA,CAAA,KAAA,CACA,iBAAA,CAAA,WAAA,CAAA,WAAA,CAAA,OAAA,CAAA,kBAAA,CADA,CAEA,QAFA,CAFA,CAOA,CA9bA,CAwcA,KAAA,kBAAA,CAAA,SAAA,WAAA,CAAA,SAAA,CAAA,YAAA,CAAA,IAEA,CAAA,MAFA,CAEA,CAFA,CACA,OAAA,CAAA,EADA,CAIA,GAAA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,aAAA,CAAA,CAAA,CAIA,GAHA,MAAA,CAAA,WAAA,CAAA,SAAA,EAGA,CAAA,KAAA,eAAA,CAAA,MAAA,CAAA,GAAA,SAAA,CAcA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAdA,CAeA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,SAAA,MAAA,CAAA,KAAA,CAAA,CACA,CAAA,CAAA,KADA,EAEA,CAAA,CAAA,OAAA,CAAA,KAAA,eAAA,CAAA,MAAA,EAAA,CAAA,CAAA,CAAA,SAAA,YAAA,CAAA,CACA,MAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,CAFA,CAIA,CANA,CAfA,CAuBA,CAAA,CAAA,OAAA,CAAA,KAAA,eAAA,CAAA,MAAA,CAAA,CAAA,SAAA,YAAA,CAAA,CACA,OAAA,CAAA,IAAA,CAAA,WAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CACA,CAFA,CAvBA,KACA,IAAA,OAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,CAEA,IADA,KAAA,eAAA,CAAA,MAAA,EAAA,EACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CACA,OAAA,CAAA,CAAA,CAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,WAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CADA,CAEA,KAAA,eAAA,CAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAFA,CAFA,IAOA,CAAA,OAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,WAAA,CAAA,UAAA,EAAA,CAPA,CAQA,KAAA,eAAA,CAAA,MAAA,EAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CARA,CALA,MAkCA,QAAA,GAAA,YAAA,EAAA,YAAA,GAAA,YAlCA,CAmCA,iBAAA,CAAA,cAAA,CAAA,OAAA,CAAA,YAAA,CAnCA,CAuCA,CAAA,CAAA,KAAA,CAAA,OAAA,CACA,CAEA,MAAA,EACA,CAvfA,CAyfA,KAAA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CA3fA,CA6fA,KAAA,YAAA,CAAA,UAAA,CACA,MAAA,CAAA,UACA,CA/fA,CAsgBA,KAAA,UAAA,CAAA,SAAA,GAAA,CAAA,OACA,CAAA,OAAA,CAAA,YADA,CAIA,QAAA,QAAA,CAAA,GAAA,EAAA,CAAA,CAAA,GAAA,CAAA,MAJA,CAKA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CALA,QAEA,GAKA,CA7gBA,CAkhBA,KAAA,cAAA,CAAA,SAAA,MAAA,CAAA,CAKA,GAHA,OAAA,CAAA,IAAA,CAAA,sCAAA,CAAA,SAAA,CAGA,CAAA,KAAA,SAAA,CAAA,iBAAA,CAAA,CACA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,EAAA,CAAA,CAGA,GAAA,kBAAA,IAAA,CAAA,MAAA,GAAA,+CAAA,IAAA,CAAA,MAAA,CAAA,CAEA,MAAA,CAAA,MAAA,CAXA,GAaA,CAAA,MAAA,CAAA,EAbA,CAcA,gBAAA,CAAA,KAAA,SAAA,CAAA,kBAAA,CAdA,CAyBA,GATA,gBAAA,EAAA,CAAA,CAAA,IAAA,CAAA,gBAAA,CASA,EARA,CAAA,CAAA,KAAA,CAAA,gBAAA,CAAA,SAAA,eAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,GAAA,MAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CAEA,MADA,CAAA,MAAA,CAAA,MAAA,CAAA,OAAA,CAAA,cAAA,CAAA,eAAA,CACA,GAEA,CALA,CAQA,CAAA,MAAA,CACA,MAAA,CAAA,MAAA,CAEA,GAAA,CAAA,OAAA,CAAA,KAAA,SAAA,CAAA,SAAA,GAAA,kBAAA,EAAA,CACA,MAAA,CAAA,OAAA,CAAA,MAGA,CAljBA,CAojBA,KAAA,aAAA,CAAA,SAAA,UAAA,CAAA,CACA,KAAA,WAAA,CAAA,UACA,CAtjBA,CAwjBA,KAAA,aAAA,CAAA,UAAA,CACA,GAAA,KAAA,WAAA,CACA,MAAA,MAAA,WAEA,CA5jBA,CA8jBA,KAAA,cAAA,CAAA,UAAA,CACA,MAAA,MAAA,SAAA,CAAA,aAAA,CACA,CACA,CA/uBA,CA2wBA,MAtBA,CAOA,KAAA,CAAA,eAAA,kBAAA,CAAA,IAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,UAAA,CACA,GAAA,CAAA,OAAA,CAAA,CAAA,CAAA,aAAA,CAAA,SAAA,CAAA,CAAA,CAAA,EAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAEA,QAAA,CAAA,KAAA,CAAA,IAAA,CAHA,CAKA,KAAA,QAAA,CAAA,kBAAA,CALA,CAMA,KAAA,IAAA,CAAA,IAAA,EAAA,EANA,CAOA,KAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,cAAA,EAAA,EAAA,CAAA,CACA,CARA,CAUA,MADA,CAAA,WAAA,CAAA,SAAA,CAAA,QAAA,CAAA,SACA,CAAA,WACA,CAnBA,CAwBA,CA7wBA,C,CCkBA,MAAA,CAAA,oDAAA,CAAA,CAAA,QAAA,CAAA,cAAA,CAAA,iBAAA,CAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,UAAA,CAAA,CACA,aADA,GAGA,CAAA,UAAA,CAAA,MAAA,CAAA,OAHA,CAIA,sBAAA,CAAA,CACA,MAAA,GADA,CAJA,CAQA,gBAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,IAEA,CAAA,OAFA,CACA,oBAAA,CAAA,EADA,CAGA,UAAA,CAAA,EAHA,CAIA,OAAA,CAAA,EAJA,OAMA,CAAA,QAAA,EAAA,QAAA,CAAA,OANA,MAUA,OAAA,CAAA,QAAA,CAAA,OAVA,CAYA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,GAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAZA,EAaA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA,SAAA,CAAA,CACA,CAAA,CAAA,QAAA,CAAA,SAAA,CADA,CAEA,UAAA,CAAA,IAAA,CAAA,QAAA,OAAA,CAAA,GAAA,CAAA,SAAA,CAFA,CAIA,SAAA,CAAA,IAJA,CAKA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAAA,SAAA,CAAA,IAAA,CAAA,KAAA,EAAA,EAAA,CALA,CAMA,SAAA,CAAA,IANA,EAOA,UAAA,CAAA,IAAA,CAAA,QAAA,OAAA,CAAA,GAAA,CAAA,SAAA,CAAA,IAAA,CAGA,CAVA,CAbA,CA0BA,OAAA,CAAA,UAAA,CAAA,UAAA,CAEA,GAAA,CAAA,cAAA,CAAA,EAAA,CAEA,oBAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,OAJA,CAMA,QAAA,GAAA,QAAA,CAAA,KANA,GAQA,OAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,SAAA,GAAA,CAAA,IAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,QAAA,CAAA,GAAA,CAAA,IAAA,CAAA,KAAA,EAAA,EAAA,CACA,CAFA,CAEA,OAFA,CARA,CAYA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,OAAA,CAAA,OAAA,EAAA,EAAA,CAAA,SAAA,KAAA,CAAA,EAAA,CAAA,CACA,KAAA,GAAA,CAAA,CAAA,QAAA,CAAA,KAAA,GAAA,CAAA,CAAA,OAAA,CAAA,KAAA,GAAA,KAAA,CAAA,MAAA,CADA,GAEA,cAAA,CAAA,EAAA,CAAA,CAAA,KAFA,CAIA,CAJA,CAZA,CAkBA,OAAA,CAAA,CAAA,CAAA,KAAA,CAAA,OAAA,CAAA,cAAA,CAlBA,CAoBA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,SAAA,KAAA,CAAA,EAAA,CAAA,CACA,KAAA,CAAA,CAAA,CAAA,OAAA,CAAA,KAAA,EAAA,KAAA,CAAA,CAAA,KAAA,CADA,CAEA,oBAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,KAAA,CAAA,SAAA,IAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EAAA,CACA,CAFA,CAGA,CALA,CApBA,EA4BA,OAAA,CAAA,oBAAA,CAEA,CA9BA,CA8BA,MA9BA,CA1BA,EAOA,MAAA,CAAA,kBAAA,CAoDA,CA3DA,CA4DA,CArEA,CA4EA,yBAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,QAAA,EAAA,CAAA,CAAA,UAAA,CAAA,QAAA,CAAA,IAAA,CACA,CA9EA,CAgFA,MAAA,UAAA,OAAA,CAAA,IAEA,CAAA,OAAA,GAFA,CAGA,WAAA,CAAA,EAHA,CASA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CACA,SAAA,CAAA,EADA,CASA,GAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CAEA,GAAA,KAAA,SAAA,CAAA,cAAA,CAAA,OAEA,CAAA,OAFA,CAGA,CAAA,CAAA,IAAA,CAAA,KAAA,SAAA,CAAA,cAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAHA,CAMA,CAAA,CAAA,IAAA,CAAA,KAAA,SAAA,CAAA,cAAA,CAAA,CAGA,CApBA,CA4BA,gBAAA,CAAA,SAAA,UAAA,CAAA,QAAA,CAAA,CAGA,MAFA,CAAA,WAAA,CAAA,UAAA,CAAA,CAAA,yBAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAAA,IAEA,CADA,OAAA,GACA,CAAA,IACA,CAhCA,CAsCA,cAAA,CAAA,UAAA,CAGA,MAFA,CAAA,WAAA,CAAA,EAEA,CADA,OAAA,GACA,CAAA,IACA,CA1CA,CAkDA,aAAA,CAAA,SAAA,OAAA,CAAA,IAEA,CAAA,WAFA,CACA,IAAA,CAAA,IADA,CA2BA,MAtBA,CAAA,WAsBA,CAvBA,OAAA,EAAA,CAAA,OAAA,CAAA,MAuBA,CAtBA,OAAA,CAAA,OAAA,CAAA,EAAA,CAsBA,CApBA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CACA,GAAA,CAAA,oBAAA,CAAA,EAAA,CACA,CAAA,CAAA,KAAA,CAAA,WAAA,CAAA,SAAA,QAAA,CAAA,EAAA,CAAA,CACA,IAAA,GAAA,QADA,EAEA,oBAAA,CAAA,IAAA,CAAA,EAAA,CAEA,CAJA,CAFA,CAOA,UAAA,CAAA,oBAAA,CAAA,UAAA,CACA,CAAA,CAAA,IAAA,CAAA,GAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,SAAA,QAAA,CAAA,CACA,yBAAA,CAAA,QAAA,CADA,GAEA,WAAA,CAAA,oBAAA,CAAA,KAAA,EAAA,CAAA,CAAA,QAFA,CAIA,CAJA,CADA,CAMA,OAAA,CAAA,WAAA,CANA,CAOA,OAAA,GAPA,CAQA,IAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,WAAA,CACA,CATA,CASA,MATA,CAUA,CAjBA,CAoBA,CAAA,WACA,CA9EA,CAoFA,cAAA,CAAA,UAAA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CAIA,MAHA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,SAAA,CAAA,SAAA,QAAA,CAAA,EAAA,CAAA,CACA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,QAAA,CAAA,SAAA,CACA,CAFA,CAGA,CAAA,GACA,CA1FA,CAkGA,UAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CADA,MAEA,CAAA,eAFA,CAGA,CAAA,CAAA,MAAA,CAAA,eAAA,CAAA,OAAA,CAAA,CACA,EAAA,CAAA,eAAA,CAAA,cADA,CAEA,KAAA,CAAA,eAAA,CAAA,KAFA,CAGA,OAAA,CAAA,eAAA,CAAA,OAHA,CAIA,KAAA,CAAA,eAAA,CAAA,KAJA,CAAA,CAHA,KAUA,MAAA,OAAA,CAAA,OAAA,CAAA,CACA,OAAA,CAAA,mCADA,CAEA,cAAA,CAAA,cAFA,CAGA,OAAA,CAAA,OAHA,CAAA,CAMA,CAlHA,CA0HA,UAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CADA,MAEA,CAAA,eAAA,EAAA,eAAA,CAAA,OAFA,CAGA,CAAA,CAAA,MAAA,CAAA,eAAA,CAAA,OAAA,CAAA,CACA,EAAA,CAAA,eAAA,CAAA,cADA,CAEA,KAAA,CAAA,eAAA,CAAA,KAFA,CAGA,OAAA,CAAA,eAAA,CAAA,OAHA,CAIA,QAAA,CAAA,eAAA,CAAA,QAJA,CAKA,KAAA,CAAA,eAAA,CAAA,KALA,CAMA,KAAA,CAAA,eAAA,CAAA,KANA,CAAA,CAHA,KAYA,MAAA,OAAA,CAAA,OAAA,CAAA,CACA,OAAA,CAAA,mCADA,CAEA,cAAA,CAAA,cAFA,CAGA,OAAA,CAAA,OAHA,CAAA,CAMA,CA5IA,CAkJA,iBAAA,CAAA,UAAA,CACA,GAAA,CAAA,GAAA,CAAA,EAAA,CASA,MARA,CAAA,CAAA,CAAA,KAAA,CAAA,KAAA,SAAA,CAAA,SAAA,QAAA,CAAA,EAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CAAA,CAGA,WAAA,CAAA,OAAA,EAAA,WAAA,CAAA,OAAA,CAAA,IAAA,EAAA,WAAA,CAAA,OAJA,GAKA,GAAA,CAAA,EAAA,CAAA,CAAA,WALA,CAOA,CAPA,CAQA,CAAA,GACA,CA7JA,CAqKA,UAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CADA,MAEA,CAAA,OAFA,CAGA,OAAA,CAAA,OAHA,CAKA,EACA,CA3KA,CAqLA,YAAA,CAAA,SAAA,OAAA,CAAA,IAEA,CAAA,WAFA,CACA,IAAA,CAAA,IADA,CAwDA,MApDA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,sBAAA,CAoDA,CAlDA,WAAA,CAAA,IAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,CAAA,SAAA,SAAA,CAAA,CAEA,GAAA,CAAA,SAAA,CAAA,EAAA,CASA,MAPA,CAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,SAAA,QAAA,CAAA,CACA,QADA,EAEA,SAAA,CAAA,IAAA,CAAA,QAAA,CAAA,IAAA,EAAA,CAEA,CAJA,CAOA,CAAA,OAAA,CAAA,GAAA,CAAA,SAAA,EAAA,IAAA,CAAA,SAAA,OAAA,CAAA,CAEA,GAAA,CAAA,kBAAA,CAAA,EAAA,CAeA,MAZA,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,CAAA,MAAA,CAAA,OAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,KAAA,CACA,CAFA,CAEA,IAAA,CAAA,SAAA,EAAA,EAFA,CAYA,CAPA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,QAAA,CAAA,cAAA,CAAA,UACA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CADA,OAIA,CAAA,kBAAA,CAAA,IAAA,CAAA,gBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,cAAA,CAAA,CAAA,CACA,CALA,CAOA,CAAA,OAAA,CAAA,GAAA,CAAA,kBAAA,EAAA,IAAA,CAAA,SAAA,aAAA,CAAA,CACA,GAAA,CAAA,oBAAA,CAAA,CAAA,CAAA,MAAA,CAAA,aAAA,CAAA,SAAA,GAAA,CAAA,KAAA,CAAA,CACA,MAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,KAAA,CACA,CAFA,CAEA,EAFA,CAAA,CAMA,UAAA,CAAA,MAAA,CAAA,CAAA,KAAA,CAAA,oBAAA,CAAA,CACA,CARA,CASA,CA1BA,CA4BA,CAvCA,CAkDA,CARA,WAAA,CACA,IADA,CACA,UAAA,CACA,IAAA,CAAA,OAAA,CAAA,gBAAA,CACA,CAHA,EAIA,KAJA,CAIA,SAAA,GAAA,CAAA,CACA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CACA,CANA,CAQA,CAAA,WACA,CA9OA,CAwPA,YAAA,CAAA,SAAA,OAAA,CAAA,IACA,CAAA,WADA,CAEA,IAAA,CAAA,IAFA,CA2DA,MAvDA,CAAA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,sBAAA,CAuDA,CArDA,WAAA,CAAA,IAAA,CAAA,YAAA,CAAA,OAAA,EAAA,IAAA,CAAA,UAAA,CACA,GAAA,CAAA,oBAAA,CAAA,EAAA,CADA,MAGA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,QAAA,CAAA,cAAA,CAAA,CACA,GAAA,CAAA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,cAAA,CAAA,CACA,GAAA,oBAAA,CAAA,OAAA,EAAA,oBAAA,CAAA,OAAA,CAAA,IAAA,CAAA,CACA,GAAA,oBAAA,CAAA,OAAA,EACA,GAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CACA,SAFA,KAKA,IAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,cAAA,CAAA,CACA,SAGA,oBAAA,CAAA,IAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,EAAA,CAAA,CACA,CACA,CAdA,CAHA,CAmBA,oBAAA,CAAA,MAnBA,CAoBA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CAEA,UAAA,CAAA,oBAAA,CAAA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,EAAA,CACA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,WAAA,CAAA,IACA,CAAA,EAAA,CAAA,WAAA,CAAA,iBAAA,EADA,CAEA,oBAAA,CAAA,IAAA,CAAA,GAAA,CAAA,EAAA,CAFA,CAGA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,CAAA,oBAAA,CAAA,OAAA,CAAA,CAHA,CAIA,CAAA,CAAA,CAJA,CAKA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,mCAAA,EAAA,CAAA,GAAA,CAAA,oBAAA,CAAA,OAAA,CALA,EAOA,IAAA,CAAA,SAAA,CAAA,EAAA,EAAA,CAAA,EAAA,OAAA,CAAA,MAAA,CAAA,WAPA,CAQA,QAAA,CAAA,EAAA,CAAA,CAAA,WARA,CAUA,CAVA,CAFA,CAaA,OAAA,CAAA,QAAA,CACA,CAdA,CAcA,MAdA,CAeA,CAjBA,CApBA,CAuCA,OAAA,CAAA,OAAA,CAAA,EAAA,CAGA,CA1CA,CAqDA,CATA,WAAA,CACA,IADA,CACA,SAAA,QAAA,CAAA,CAEA,MADA,CAAA,IAAA,CAAA,OAAA,CAAA,gBAAA,CAAA,QAAA,CACA,CAAA,QACA,CAJA,EAKA,KALA,CAKA,SAAA,GAAA,CAAA,CACA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,GAAA,CACA,CAPA,CASA,CAAA,WACA,CApTA,CA4TA,MAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAIA,MAHA,CAAA,eAGA,GAFA,eAAA,CAAA,OAAA,GAEA,EAAA,IACA,CAlUA,CA0UA,OAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CAIA,MAHA,CAAA,eAGA,GAFA,eAAA,CAAA,OAAA,GAEA,EAAA,IACA,CAhVA,CAwVA,SAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CACA,MAAA,CAAA,eAAA,EAAA,KAAA,eAAA,CAAA,OACA,CA3VA,CAAA,CAAA,CA6VA,CACA,CAvbA,C,CCIA,MAAA,CAAA,0CAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CACA,aAEA,GAAA,CAAA,WAAA,CAAA,EAAA,CA0cA,MAxcA,CAAA,WAAA,CAAA,OAAA,CAAA,CAEA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,WAAA,CAFA,CAGA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,WAAA,CAHA,CAIA,aAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,WAAA,CAJA,CAKA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,WAAA,CALA,CAMA,aAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,WAAA,CANA,CAOA,WAAA,CAAA,QAAA,CAAA,MAAA,CAAA,CAAA,WAAA,CAPA,CAQA,YAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,WAAA,CARA,CASA,aAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,WAAA,CATA,CAUA,KAAA,CAAA,QAAA,CAAA,YAAA,CAAA,CAAA,WAAA,CAVA,CAWA,UAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,WAAA,CAXA,CAaA,QAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAbA,CAcA,IAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CAdA,CAeA,SAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,KAAA,CAAA,CAAA,QAAA,CAfA,CAgBA,IAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAhBA,CAiBA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,WAAA,CAAA,CAAA,QAAA,CAjBA,CAkBA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,SAAA,CAAA,QAAA,CAAA,CAAA,QAAA,CAlBA,CAmBA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAnBA,CAoBA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,QAAA,CApBA,CAqBA,KAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CArBA,CAsBA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,QAAA,CAtBA,CAuBA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CAvBA,CAwBA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CAxBA,CAyBA,OAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,YAAA,CAAA,CAAA,QAAA,CAzBA,CA0BA,MAAA,CAAA,QAAA,CAAA,YAAA,CAAA,CAAA,QAAA,CA1BA,CA2BA,MAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,UAAA,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,QAAA,CA3BA,CA4BA,MAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CA5BA,CA6BA,MAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CA7BA,CA8BA,MAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAAA,QAAA,CA9BA,CA+BA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,QAAA,CA/BA,CAgCA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,CAAA,QAAA,CAhCA,CAiCA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,WAAA,CAAA,CAAA,QAAA,CAjCA,CAkCA,EAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAlCA,CAmCA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAnCA,CAoCA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CApCA,CAqCA,EAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CArCA,CAsCA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAtCA,CAuCA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAvCA,CAwCA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAxCA,CAyCA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAzCA,CA0CA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA1CA,CA2CA,EAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA3CA,CA4CA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA5CA,CA6CA,EAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA7CA,CA8CA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA9CA,CA+CA,MAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CA/CA,CAgDA,KAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAhDA,CAiDA,OAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAjDA,CAkDA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAlDA,CAmDA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAnDA,CAoDA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CApDA,CAqDA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CArDA,CAsDA,WAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CAtDA,CAuDA,QAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CAvDA,CAwDA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CAxDA,CAyDA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CAzDA,CA0DA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA1DA,CA2DA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA3DA,CA4DA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA5DA,CA6DA,GAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA7DA,CA8DA,EAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA9DA,CA+DA,IAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,QAAA,CA/DA,CAgEA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAAA,UAAA,CAAA,CAAA,KAAA,CAAA,KAAA,CAAA,UAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAhEA,CAiEA,GAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,QAAA,CAjEA,CAmEA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,aAAA,CAAA,YAAA,CAAA,CAAA,MAAA,CAnEA,CAoEA,QAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,CAAA,MAAA,CApEA,CAqEA,eAAA,CAAA,QAAA,CAAA,cAAA,CAAA,iBAAA,CAAA,CAAA,MAAA,CArEA,CAsEA,cAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CAtEA,CAuEA,YAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CAvEA,CAwEA,iBAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CAxEA,CAyEA,kBAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CAzEA,CA0EA,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,CAAA,MAAA,CA1EA,CA2EA,QAAA,CAAA,QAAA,CAAA,YAAA,CAAA,cAAA,CAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA,MAAA,CA3EA,CA4EA,gBAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,cAAA,CAAA,gBAAA,CAAA,CAAA,MAAA,CA5EA,CA6EA,OAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA,MAAA,CA7EA,CA8EA,gBAAA,CAAA,QAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CA9EA,CA+EA,cAAA,CAAA,QAAA,CAAA,aAAA,CAAA,YAAA,CAAA,iBAAA,CAAA,CAAA,SAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CA/EA,CAgFA,eAAA,CAAA,QAAA,CAAA,cAAA,CAAA,YAAA,CAAA,iBAAA,CAAA,CAAA,SAAA,CAAA,cAAA,CAAA,CAAA,MAAA,CAhFA,CAiFA,kBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAjFA,CAkFA,qBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAlFA,CAmFA,iBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAnFA,CAoFA,iBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CApFA,CAqFA,mBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CArFA,CAsFA,oBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAtFA,CAuFA,iBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAvFA,CAwFA,kBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAxFA,CAyFA,kBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAzFA,CA0FA,mBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CA1FA,CA2FA,mBAAA,CAAA,QAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CA3FA,CA4FA,mBAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,CAAA,MAAA,CA5FA,CA6FA,4BAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,CAAA,MAAA,CA7FA,CA8FA,wBAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,CAAA,MAAA,CA9FA,CA+FA,2BAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,CAAA,MAAA,CA/FA,CAgGA,uBAAA,CAAA,QAAA,CAAA,oBAAA,CAAA,CAAA,MAAA,CAhGA,CAiGA,qBAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,mBAAA,CAAA,CAAA,MAAA,CAjGA,CAkGA,wBAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,kBAAA,CAAA,CAAA,MAAA,CAlGA,CAmGA,wBAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,CAAA,MAAA,CAnGA,CAoGA,sBAAA,CAAA,QAAA,CAAA,mBAAA,CAAA,CAAA,MAAA,CApGA,CAqGA,kBAAA,CAAA,QAAA,CAAA,OAAA,CAAA,MAAA,CAAA,aAAA,CAAA,CAAA,MAAA,CArGA,CAsGA,WAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CAAA,MAAA,CAtGA,CAwcA,CA/VA,WAAA,CAAA,KAAA,CAAA,CAAA,WAAA,CAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CA+VA,CA7VA,WAAA,CAAA,4BAAA,CAAA,SAAA,QAAA,CAAA,UAAA,CAAA,IACA,CAAA,OAAA,CAAA,WAAA,CAAA,oBAAA,CAAA,QAAA,CADA,CAEA,UAAA,CAAA,EAFA,CAGA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CACA,OAAA,CAAA,CAAA,CAAA,CAAA,GADA,GAGA,UAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,IAHA,EAWA,MAJA,CAAA,UAIA,GAHA,UAAA,CAAA,UAAA,CAAA,SAAA,CAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CAAA,CAGA,EAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,UAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,MAAA,CAAA,uBAAA,CACA,CA8UA,CA5UA,WAAA,CAAA,oBAAA,CAAA,SAAA,QAAA,CAAA,CACA,GAAA,CAAA,GAAA,CACA,GAAA,WAAA,CAAA,KAAA,CAAA,WAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,KAAA,CAAA,WAAA,CAAA,QAAA,CADA,KAEA,CACA,GAAA,CAAA,EADA,CAEA,GAAA,CAAA,OAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,QAAA,IAAA,CACA,IAAA,GAAA,CAAA,MAAA,GAAA,CAAA,WAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CACA,GAAA,KAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,SAAA,CAAA,CAAA,CAAA,YAAA,CAAA,KAAA,CAAA,QAAA,CAAA,OAAA,CAAA,CACA,SAAA,CAAA,MAFA,GAGA,CAAA,KAAA,CAAA,QAHA,EAIA,GAAA,CAAA,IAAA,CAAA,MAAA,CAJA,CAMA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,eAAA,CAAA,MAAA,IAAA,CANA,CAQA,CACA,CACA,WAAA,CAAA,KAAA,CAAA,WAAA,CAAA,QAAA,EAAA,GACA,CAEA,MAAA,CAAA,GACA,CAqTA,CAnTA,WAAA,CAAA,kBAAA,CAAA,SAAA,QAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAEA,GAAA,CAAA,GAAA,CAAA,EAAA,CACA,OAAA,CAAA,OAAA,EAAA,EAHA,CAKA,GAAA,CAAA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,KAAA,EAAA,KAAA,CAAA,QAAA,CACA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CACA,GAAA,CAAA,OAAA,CAAA,OAAA,CAAA,CAAA,CACA,OAAA,CAAA,OAAA,CAAA,GADA,CAIA,GAAA,CAAA,IAAA,CAAA,OAAA,CAJA,CAOA,GAAA,CAAA,QAAA,CAAA,WAAA,CAAA,eAAA,CAAA,OAAA,IAAA,CACA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CACA,OAAA,CAAA,KAAA,CAFA,GAGA,OAAA,CAAA,KAAA,CAAA,GAHA,CAKA,GAAA,CAAA,IAAA,CAAA,KAAA,CALA,CAQA,SARA,GASA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,KAAA,IAAA,OAAA,CAAA,CATA,EAYA,CAGA,SAvBA,GAwBA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,OAAA,IAAA,OAAA,CAAA,CAxBA,CA2BA,CACA,CAIA,GAAA,CAAA,OAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,QAAA,IAAA,CACA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,OAAA,CACA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,OAAA,CAAA,CAAA,CAGA,MAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,IACA,CAoQA,CAlQA,WAAA,CAAA,cAAA,CAAA,SAAA,iBAAA,CAAA,eAAA,CAAA,CACA,GAAA,CAAA,cAAA,CAAA,WAAA,CAAA,kBAAA,CAAA,iBAAA,CAAA,CACA,MAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,cAAA,CAAA,eAAA,CACA,CA+PA,CA7PA,WAAA,CAAA,gBAAA,CAAA,SAAA,QAAA,CAAA,SAAA,CAAA,CACA,GAAA,CAAA,GAAA,CACA,GAAA,SAAA,EAAA,WAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CADA,KAEA,CAEA,GADA,GAAA,CAAA,EACA,CAAA,WAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GACA,GAAA,CAAA,WAAA,CAAA,OAAA,CAAA,QAAA,EAAA,OADA,CAEA,SAFA,EAEA,CACA,IAAA,GAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CACA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAEA,GAAA,CAAA,CAAA,CAAA,IAAA,CAAA,GAAA,IACA,CAEA,WAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,EAAA,GACA,CAEA,MAAA,CAAA,GACA,CA0OA,CAxOA,WAAA,CAAA,eAAA,CAAA,SAAA,QAAA,CAAA,SAAA,CAAA,IAAA,CAAA,IACA,CAAA,GADA,CAEA,SAAA,CAAA,IAAA,CAAA,IAAA,CAAA,KAFA,CAGA,GAAA,SAAA,EAAA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,EAAA,SAAA,CAAA,CACA,GAAA,CAAA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,EAAA,SAAA,CADA,KAEA,CAEA,IAAA,GAAA,CAAA,MAAA,GADA,CAAA,GAAA,CAAA,EACA,CAAA,WAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,KAAA,CAAA,WAAA,CAAA,OAAA,CAAA,MAAA,CAAA,CACA,CAAA,EAAA,CAAA,CAAA,OAAA,CAAA,KAAA,CAAA,OAAA,CAAA,QAAA,CAFA,GAGA,IAHA,CAIA,KAAA,CAAA,IAAA,CAJA,EAKA,GAAA,CAAA,IAAA,CAAA,MAAA,CALA,CAQA,GAAA,CAAA,IAAA,CAAA,MAAA,CARA,CAUA,SAVA,GAWA,GAAA,CAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,WAAA,CAAA,eAAA,CAAA,MAAA,CAAA,SAAA,CAAA,IAAA,CAAA,CAXA,EAcA,CACA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,CAjBA,GAkBA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,EAAA,EAlBA,EAoBA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,QAAA,EAAA,SAAA,EAAA,GACA,CAEA,MAAA,CAAA,GACA,CA2MA,CAzMA,WAAA,CAAA,OAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,WAAA,CAAA,EAAA,CAAA,QAAA,CAAA,OAAA,CACA,CAuMA,CArMA,WAAA,CAAA,QAAA,CAAA,SAAA,QAAA,CAAA,CACA,MAAA,CAAA,WAAA,CAAA,EAAA,CAAA,QAAA,CAAA,QAAA,CACA,CAmMA,CAjMA,WAAA,CAAA,EAAA,CAAA,SAAA,QAAA,CAAA,QAAA,CAAA,CACA,GAAA,QAAA,GAAA,QAAA,CACA,SAEA,GAAA,CAAA,OAAA,CAAA,WAAA,CAAA,gBAAA,CAAA,QAAA,IAAA,CACA,MAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,OAAA,CAAA,QAAA,CAEA,CA0LA,CAxLA,WAAA,CAAA,6BAAA,CAAA,UAAA,CAEA,GAAA,CAAA,SAAA,CAAA,CACA,kBAAA,CAAA,EAAA,CAAA,qBAAA,CADA,CAEA,kBAAA,CAAA,EAAA,CAAA,qBAAA,CAFA,CAGA,mBAAA,CAAA,EAAA,CAAA,sBAAA,CAHA,CAAA,CAMA,MAAA,CACA,iBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,oBAAA,CADA,CAEA,WAAA,CAAA,EAAA,CAAA,6FAAA,CAFA,CAGA,IAAA,CAAA,aAHA,CAIA,KAAA,CAAA,EAAA,CAAA,QAAA,CAJA,CAKA,QAAA,CAAA,mBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,KAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CADA,CAUA,gBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,mBAAA,CADA,CAEA,IAAA,CAAA,YAFA,CAGA,WAAA,CAAA,EAAA,CAAA,iDAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,OAAA,CAJA,CAKA,QAAA,CAAA,kBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,UAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAVA,CAoBA,oBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,uBAAA,CADA,CAEA,IAAA,CAAA,gBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,0CAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,WAAA,CAJA,CAKA,QAAA,CAAA,sBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,aAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CApBA,CA6BA,gBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,mBAAA,CADA,CAEA,IAAA,CAAA,YAFA,CAGA,WAAA,CAAA,EAAA,CAAA,0FAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,OAAA,CAJA,CAKA,QAAA,CAAA,kBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,aAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CA7BA,CAsCA,kBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,qBAAA,CADA,CAEA,IAAA,CAAA,cAFA,CAGA,WAAA,CAAA,EAAA,CAAA,wDAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,SAAA,CAJA,CAKA,QAAA,CAAA,oBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,MAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAtCA,CA+CA,mBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,uBAAA,CADA,CAEA,IAAA,CAAA,gBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,oDAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,WAAA,CAJA,CAKA,QAAA,CAAA,qBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,MAAA,CAAA,aAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CA/CA,CAwDA,iBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,oBAAA,CADA,CAEA,IAAA,CAAA,aAFA,CAGA,WAAA,CAAA,EAAA,CAAA,0CAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,QAAA,CAJA,CAKA,QAAA,CAAA,mBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,SAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAxDA,CAiEA,uBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,2BAAA,CADA,CAEA,IAAA,CAAA,oBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,yFAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,eAAA,CAJA,CAKA,QAAA,CAAA,yBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,MAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAjEA,CA0EA,iBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,yBAAA,CADA,CAEA,IAAA,CAAA,aAFA,CAGA,WAAA,CAAA,EAAA,CAAA,0DAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,aAAA,CAJA,CAKA,QAAA,CAAA,mBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,SAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CA1EA,CAmFA,gBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,mBAAA,CADA,CAEA,IAAA,CAAA,YAFA,CAGA,WAAA,CAAA,EAAA,CAAA,8HAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,OAAA,CAJA,CAKA,QAAA,CAAA,kBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,OAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAnFA,CA4FA,UAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,YAAA,CADA,CAEA,IAAA,CAAA,WAFA,CAGA,WAAA,CAAA,EAAA,CAAA,uHAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,OAAA,CAJA,CAKA,QAAA,CAAA,YALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,MAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CA5FA,CAqGA,uBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,2BAAA,CADA,CAEA,IAAA,CAAA,oBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,wCAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,eAAA,CAJA,CAKA,QAAA,CAAA,yBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,qBAAA,CAAA,KAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CArGA,CA8GA,oBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,wBAAA,CADA,CAEA,IAAA,CAAA,iBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,mFAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,YAAA,CAJA,CAKA,QAAA,CAAA,sBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,qBAAA,CAAA,MAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CA9GA,CAuHA,qBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,yBAAA,CADA,CAEA,IAAA,CAAA,kBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,sCAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,aAAA,CAJA,CAKA,QAAA,CAAA,uBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,kBAAA,CAAA,qBAAA,CAAA,QAAA,CAAA,QAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAvHA,CAgIA,kBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,qBAAA,CADA,CAEA,IAAA,CAAA,cAFA,CAGA,WAAA,CAAA,EAAA,CAAA,8DAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,SAAA,CAJA,CAKA,QAAA,CAAA,oBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,KAAA,CANA,CAOA,KAAA,CAAA,sBAPA,CAhIA,CAyIA,uBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,2BAAA,CADA,CAEA,IAAA,CAAA,oBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,oDAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,OAAA,CAJA,CAKA,QAAA,CAAA,yBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,UAAA,CANA,CAOA,KAAA,CAAA,sBAPA,CAzIA,CAkJA,2BAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,+BAAA,CADA,CAEA,IAAA,CAAA,wBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,wEAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,WAAA,CAJA,CAKA,QAAA,CAAA,6BALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,aAAA,CANA,CAOA,KAAA,CAAA,sBAPA,CAlJA,CA2JA,0BAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,+BAAA,CADA,CAEA,IAAA,CAAA,kBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,4DAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,WAAA,CAJA,CAKA,QAAA,CAAA,4BALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,aAAA,CANA,CAOA,KAAA,CAAA,sBAPA,CA3JA,CAoKA,sBAAA,CAAA,CACA,KAAA,CAAA,EAAA,CAAA,0BAAA,CADA,CAEA,IAAA,CAAA,mBAFA,CAGA,WAAA,CAAA,EAAA,CAAA,8EAAA,CAHA,CAIA,KAAA,CAAA,EAAA,CAAA,cAAA,CAJA,CAKA,QAAA,CAAA,wBALA,CAMA,IAAA,CAAA,CAAA,SAAA,CAAA,mBAAA,CANA,CAOA,KAAA,CAAA,sBAPA,CApKA,CA8KA,CAEA,CAAA,WAEA,CA/cA,C,CCJA,MAAA,CAAA,uDAAA,CAAA,CACA,QADA,CAEA,oDAFA,CAGA,0CAHA,CAAA,CAIA,SAAA,CAAA,CAAA,uBAAA,CAAA,WAAA,CAAA,CACA,aAQA,MAAA,WAAA,CAEA,MAAA,CAAA,uBAAA,CAAA,CACA,gBAAA,CAAA,SAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,QAAA,CAGA,GAFA,OAAA,CAAA,CAAA,CAAA,QAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,WAAA,GAAA,CAAA,CAEA,CADA,QAAA,CAAA,KAAA,GAAA,CAAA,cAAA,CAAA,OAAA,CAAA,OAAA,CACA,CAAA,QAAA,EAAA,QAAA,CAAA,OAAA,EAAA,QAAA,CAAA,OAAA,CAAA,IAAA,EAAA,QAAA,CAAA,OAAA,CAAA,IAAA,GAAA,QAAA,CAAA,OAAA,EAAA,CAAA,OAAA,CAAA,WAAA,CAAA,CACA,MAAA,CACA,KAAA,CAAA,QAAA,CAAA,KADA,CAEA,IAAA,CAAA,QAAA,CAAA,OAAA,CAAA,IAAA,CAAA,OAAA,CAAA,GAAA,CAAA,MAAA,CAAA,IAAA,cAAA,CAAA,GAAA,CAAA,CAAA,QAAA,CAAA,OAAA,CAFA,CAGA,KAAA,CAAA,QAAA,CAAA,KAHA,CAIA,WAAA,CAAA,QAAA,CAAA,WAJA,CAKA,QAAA,CAAA,qBAAA,QAAA,CAAA,cALA,CAMA,IAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,qBAAA,CAAA,CAAA,QAAA,CAAA,IAAA,CANA,CAOA,KAAA,CAAA,qBAPA,CAUA,CAhBA,CAAA,CAAA,CAiBA,EAjBA,CAiBA,gBAjBA,CAiBA,UAAA,CACA,GAAA,CAAA,QAAA,CAAA,KAAA,iBAAA,EAAA,CACA,CAAA,CAAA,OAAA,CAAA,QAAA,CAAA,SAAA,OAAA,CAAA,cAAA,CAAA,CACA,WAAA,CAAA,OAAA,CAAA,qBAAA,cAAA,EAAA,CAAA,OAAA,CAAA,CAAA,mBAAA,CAAA,CAAA,GAAA,GAAA,CACA,CAFA,CAGA,CAtBA,CAuBA,CAEA,CAxCA,C,CCAA,MAAA,CAAA,+CAAA,CAAA,CAAA,QAAA,CAAA,uDAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CACA,aADA,GAIA,CAAA,QAAA,CAAA,UAAA,EAJA,CAKA,SAAA,CAAA,EALA,CAMA,MAAA,CAAA,MAAA,CAAA,MAAA,EANA,CAkBA,MAVA,CAAA,MAAA,EAAA,MAAA,CAAA,SAUA,GATA,SAAA,CAAA,MAAA,CAAA,SASA,EANA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,IAAA,EAAA,QAAA,CAAA,MADA,EAEA,QAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,MAAA,CAEA,CAJA,CAMA,CAAA,QACA,CAnBA,C,CCAA,MAAA,CAAA,uDAAA,CAAA,CACA,QADA,CAEA,oDAFA,CAAA,CAGA,SAAA,CAAA,CAAA,uBAAA,CAAA,CACA,aAOA,MAAA,WAAA,CACA,MAAA,CAAA,uBAAA,EACA,CAEA,CAfA,C,CCAA,MAAA,CAAA,+CAAA,CAAA,CAAA,QAAA,CAAA,uDAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,UAAA,CAAA,MAAA,CAAA,CACA,aADA,GAIA,CAAA,QAAA,CAAA,UAAA,EAJA,CAKA,SAAA,CAAA,EALA,CAMA,MAAA,CAAA,MAAA,CAAA,MAAA,EANA,CAkBA,MAVA,CAAA,MAAA,EAAA,MAAA,CAAA,SAUA,GATA,SAAA,CAAA,MAAA,CAAA,SASA,EANA,CAAA,CAAA,IAAA,CAAA,SAAA,CAAA,SAAA,QAAA,CAAA,CACA,QAAA,CAAA,IAAA,EAAA,QAAA,CAAA,MADA,EAEA,QAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,MAAA,CAEA,CAJA,CAMA,CAAA,QACA,CAnBA,C,CCAA,MAAA,CAAA,uEAAA,CAAA,CACA,+CADA,CAEA,+CAFA,CAAA,CAGA,SAAA,UAAA,CAAA,UAAA,CAAA,CACA,aAEA,QAAA,CAAA,sBAAA,CAAA,cAAA,CAAA,OACA,CAAA,UAAA,CAAA,GAAA,CAAA,cAAA,CADA,CAEA,UAAA,CAAA,UAAA,CAAA,cAAA,CAFA,CAIA,UAAA,CAAA,GAAA,CAAA,cAAA,CAJA,CAKA,UAAA,CAAA,UAAA,CAAA,cAAA,CALA,CAOA,cACA,CAIA,MAAA,CACA,IAAA,CAAA,yBADA,CAEA,MAAA,CAAA,SAAA,GAAA,CAAA,CAEA,GAAA,GAAA,CAAA,IAAA,GAAA,GAAA,CAAA,IAAA,CACA,MAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAHA,MAIA,CAAA,GAAA,CAAA,MAAA,GAAA,GAAA,CAAA,QAJA,CAKA,GAAA,CAAA,QAAA,CAAA,OAAA,CAAA,6BAAA,CAAA,SAAA,SAAA,CAAA,EAAA,CAAA,cAAA,CAAA,OAAA,CAAA,CACA,GAAA,CAAA,eAAA,CAAA,sBAAA,CAAA,cAAA,CAAA,CADA,MAEA,CAAA,eAFA,CAGA,eAAA,CAAA,GAAA,CAAA,OAHA,CAKA,SACA,CANA,CALA,OAaA,CAfA,CAiBA,CAnCA,C,CClBA,MAAA,CAAA,+CAAA,CAAA,CAAA,QAAA,CAAA,SAAA,CAAA,WAAA,CAAA,yBAAA,CAAA,4BAAA,CAAA,QAAA,CAAA,uEAAA,CAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,eAAA,CAAA,MAAA,CAAA,qBAAA,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,OAAA,CAAA,OAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,OAHA,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,mBAAA,CAAA,mBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBAAA,CAAA,SAAA,CAAA,CAAA,mBALA,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,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAPA,CAQA,qBAAA,CAAA,qBAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBAAA,CAAA,SAAA,CAAA,CAAA,qBARA,IA4BA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,OAAA,CA5BA,CA6BA,YAAA,CAAA,MAAA,CAAA,MAAA,EA7BA,CAgCA,YAAA,CAAA,mBAAA,CACA,CACA,CACA,IAAA,CAAA,OADA,CAEA,MAAA,CAAA,SAAA,GAAA,CAAA,CACA,GACA,UAAA,EACA,GAAA,CAAA,IADA,GAEA,GAAA,CAAA,IAAA,GAAA,UAAA,CAAA,IAAA,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,KAAA,CAAA,UAAA,CAAA,SAAA,CAAA,MAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAFA,CADA,CAKA,MAAA,CAAA,OAAA,CAAA,QAAA,CAAA,GAAA,CAAA,QAAA,EAEA,CAVA,CADA,CAaA,eAAA,CAAA,QAbA,CAcA,eAAA,CAAA,QAdA,CAeA,eAAA,CAAA,MAfA,CAgBA,eAAA,CAAA,cAhBA,CAiBA,eAAA,CAAA,OAjBA,CAkBA,qBAlBA,CADA,CAqBA,CAAA,OAAA,CAAA,EAAA,CArBA,CAhCA,CA8GA,MAAA,CAAA,CACA,IAAA,CAAA,gBADA,CAEA,SAAA,CAvDA,CACA,cAAA,CAAA,6CADA,CAEA,UAAA,CAAA,kDAFA,CAGA,mBAAA,GAHA,CAIA,QAAA,CAAA,gDAJA,CAKA,UAAA,CAAA,mDALA,CAMA,kBAAA,GANA,CAOA,mBAAA,GAPA,CAQA,kBAAA,GARA,CASA,GAAA,CAAA,4CATA,CAUA,IAAA,CAAA,6CAVA,CAWA,MAAA,CAAA,+CAXA,CAYA,KAAA,CAAA,8CAZA,CAaA,eAAA,CAAA,wDAbA,CAcA,WAAA,CAAA,oDAdA,CAeA,aAAA,CAAA,sDAfA,CAgBA,MAAA,CAAA,4DAhBA,CAiBA,iBAAA,CAAA,uEAjBA,CAkBA,uBAAA,CAAA,6EAlBA,CAmBA,gBAAA,CAAA,sEAnBA,CAoBA,oBAAA,CAAA,0EApBA,CAqBA,gBAAA,CAAA,sEArBA,CAsBA,oBAAA,CAAA,0EAtBA,CAuBA,iBAAA,CAAA,uEAvBA,CAwBA,uBAAA,CAAA,6EAxBA,CAyBA,iCAAA,+EAzBA,CA0BA,gCAAA,8EA1BA,CA2BA,OAAA,CAAA,wDA3BA,CA4BA,GAAA,CAAA,oDA5BA,CA6BA,OAAA,CAAA,wDA7BA,CA8BA,0CACA,wFA/BA,CAgCA,8CACA,4FAjCA,CAkCA,YAAA,CAAA,6DAlCA,CAmCA,kBAAA,CAAA,wEAnCA,CAoCA,kBAAA,CAAA,wEApCA,CAqCA,aAAA,GArCA,CAsCA,mBAAA,CAAA,yEAtCA,CAuCA,sBAAA,CAAA,4EAvCA,CAwCA,uBAAA,CAAA,6EAxCA,CAyCA,gBAAA,CAAA,sEAzCA,CA0CA,iBAAA,CAAA,uEA1CA,CA2CA,0BAAA,CAAA,gFA3CA,CA4CA,MAAA,CAAA,uDA5CA,CA6CA,2BAAA,CAAA,iFA7CA,CA8CA,iBAAA,GA9CA,CA+CA,iBAAA,CAAA,+EA/CA,CAgDA,WAAA,CAAA,4DAhDA,CAiDA,OAAA,CAAA,gDAjDA,CAkDA,qBAAA,CAAA,2EAlDA,CAqDA,CAGA,OAAA,CAAA,CACA,YAAA,CAAA,YADA,CAEA,MAAA,CAAA,UAFA,CAGA,iBAAA,CAAA,CACA,SAAA,CAAA,CAAA,CAAA,YAAA,CAAA,oBADA,CAEA,QAAA,CAAA,CAAA,CAAA,YAAA,CAAA,mBAFA,CAGA,eAAA,CAAA,CAAA,CAAA,YAAA,CAAA,0BAHA,CAIA,KAAA,CAAA,CAAA,CAAA,YAAA,CAAA,gBAJA,CAHA,CASA,QAAA,CAAA,YAAA,CAAA,QATA,CAHA,CA9GA,CA8HA,MAAA,CAAA,MAEA,CAhIA,C,CCAA,MAAA,CAAA,iDAAA,CAAA,CAAA,oCAAA,CAAA,+CAAA,CAAA,CAAA,SAAA,UAAA,CAAA,MAAA,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,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAHA,CAuBA,GAAA,CAAA,QAAA,CAAA,UAAA,CAAA,KAAA,CAAA,MAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAEA,MAAA,CAAA,QAEA,CA3BA,C,CCAA,MAAA,CAAA,gDAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAAA,SAAA,CAAA,CAAA,MAAA,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,MAAA,CAAA,MAAA,EAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,CAAA,MAHA,CAyDA,MAlCA,CAMA,IAAA,CAAA,SAAA,WAAA,CAAA,CACA,GAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,EAAA,CADA,MAGA,CAAA,WAAA,EAAA,CAAA,CAAA,OAAA,CAAA,WAAA,CAHA,GAIA,MAAA,EAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,WAAA,CAJA,CAKA,WAAA,CAAA,MAAA,CAAA,WALA,CAOA,WAAA,CAAA,EAPA,EAUA,WAAA,CAAA,MAVA,CAaA,GAAA,CAAA,OAAA,CAAA,SAAA,OAAA,CAAA,MAAA,CAAA,CACA,MAAA,CAAA,OAAA,CAAA,WAAA,CAAA,UAAA,CACA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,SAAA,UAAA,CAAA,CACA,UAAA,EAAA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CADA,EAEA,UAAA,CAAA,IAAA,EAEA,CAJA,CADA,CAMA,OAAA,EACA,CAPA,CAOA,SAAA,GAAA,CAAA,CACA,MAAA,CAAA,GAAA,CAAA,OAAA,CACA,CATA,CAUA,CAXA,CAbA,CAWA,OAAA,CAAA,OAAA,EAcA,CA/BA,CAoCA,CA3DA,C,CCiBA,MAAA,CAAA,iCAAA,CAAA,CACA,QADA,CAEA,QAFA,CAGA,QAHA,CAIA,qCAJA,CAKA,iDALA,CAMA,gBANA,CAOA,cAPA,CAQA,gDARA,CAAA,CASA,SAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,QAAA,CAAA,cAAA,CAAA,OAAA,CAAA,WAAA,CAAA,CACA,aAaA,MAVA,CAAA,OAAA,CAAA,iBAAA,EAUA,CAAA,SAAA,aAAA,CAAA,CAGA,MAAA,CAAA,cAAA,CAAA,SAAA,OAAA,CAAA,IACA,CAAA,SAAA,CAAA,GAAA,CAAA,SADA,CAEA,YAAA,CAAA,aAAA,CAAA,QAFA,CAGA,oBAAA,CAAA,CAAA,CAAA,KAAA,CAAA,aAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,MAAA,CAAA,gBAAA,EAAA,EAAA,CAHA,CAKA,QAAA,CAAA,GAAA,CAAA,QALA,CASA,MAAA,CAAA,SAAA,CAAA,SATA,CAWA,SAAA,CAAA,UAAA,CAAA,OAAA,CAXA,CAYA,SAAA,CAAA,WAAA,CAAA,QAAA,CAZA,CAcA,SAAA,CAAA,YAAA,CAAA,YAAA,CAAA,UAAA,CAEA,SAAA,CAAA,YAAA,CAAA,oBAAA,CAAA,UAAA,CAEA,SAAA,CAAA,UAAA,QAAA,UAAA,IAIA,CAAA,mBAJA,CAKA,MAAA,CAAA,MAAA,CAAA,MAAA,EALA,CAMA,MAAA,EAAA,MAAA,CAAA,WAAA,EAAA,CAAA,CAAA,OAAA,CAAA,MAAA,CAAA,WAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA,WAAA,CAAA,MANA,GAOA,mBAAA,CAAA,MAAA,CAAA,WAPA,EASA,WAAA,CAAA,IAAA,CAAA,mBAAA,EACA,IADA,CACA,UAAA,CAGA,CAAA,CAAA,OAAA,CAAA,aAAA,CAAA,WAAA,CAHA,EAIA,OAAA,CAAA,aAAA,CAAA,WAAA,CAAA,UAAA,CACA,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,SAAA,UAAA,CAAA,CACA,CAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CADA,EAEA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,QAAA,CAEA,CAJA,CAKA,CANA,CAJA,CAaA,cAAA,CAAA,MAAA,CAAA,YAAA,CAbA,CAgBA,CAAA,CAAA,KAAA,CAAA,UAAA,CACA,MAAA,CAAA,KAAA,EACA,CAFA,CAGA,CApBA,EAqBA,KArBA,CAqBA,SAAA,GAAA,CAAA,CACA,KAAA,IAAA,CAAA,KAAA,CAAA,2BAAA,GAAA,CAAA,OAAA,CACA,CAvBA,CAyBA,CAlCA,CAmCA,CArCA,CAsCA,CAxCA,CAyCA,CA1DA,CA6DA,CAAA,CAAA,KAAA,CAAA,UAAA,CAEA,cAAA,CAAA,MAAA,CAAA,WAAA,CACA,CAHA,CAKA,CACA,CA1FA,C,CCCA,MAAA,CAAA,8BAAA,CAAA,CACA,iCADA,CAEA,2BAFA,CAAA,CAGA,SAAA,YAAA,CAAA,CACA,aAEA,MAAA,CACA,KAAA,CAAA,UAAA,CAEA,GAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,gBAAA,CACA,YAAA,CAAA,aAAA,CACA,CALA,CAOA,CAbA,C,CCjBA,MAAA,CAAA,oCAAA,CAAA,UAAA,CAAA,CAAA,C,CCDA,MAAA,CAAA,OAAA,CAAA,CAAA,MAAA,CAAA,OAAA,EAAA,EAAA,EAAA,MAAA,CAAA,CAAA,kCAAA,CAAA,C","sourcesContent":["/**\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/**\n * Bootstrap the app, start the entry controller\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n */\n(function(){\n 'use strict';\n\n\n\n var loaderScript = document.getElementById('amd-loader');\n var configUrl = loaderScript.getAttribute('data-config');\n var bundle = loaderScript.getAttribute('data-bundle');\n\n var loadController = function loadController(){\n var controllerOptions = {};\n var controllerPath = loaderScript.getAttribute('data-controller');\n var params = loaderScript.getAttribute('data-params');\n try{\n controllerOptions = JSON.parse(params);\n } catch(err){\n controllerOptions = {};\n }\n window.require([controllerPath], function(controller) {\n var startController = function startController(){\n if(!window.started){\n window.started = true;\n controller.start(controllerOptions);\n }\n };\n document.addEventListener('readystatechange', startController, false);\n if (document.readyState === 'complete') {\n startController();\n }\n });\n };\n\n //always start to load the config\n window.require([configUrl], function() {\n\n //define the global loading mechanism\n if(!window.loadBundles){\n //keep tracl of loaded bundles, even if require does it,\n //this prevent some unecessary cycles\n window.loaded = {};\n\n /**\n * Loading entry point for inter bundle dependency,\n * always take the bundles from the params and window.bundles\n * @param {String[]} [bundles] - an optional list of bundle to load\n */\n window.loadBundles = function loadBundles(bundles){\n bundles = bundles || [];\n bundles = bundles.concat(window.bundles)\n bundles = bundles.filter( function(item, index){\n return item && bundles.indexOf(item) === index && window.loaded[item] !== true;\n });\n require(bundles, function(){\n bundles.forEach( function( item ) {\n window.loaded[item] = true;\n });\n loadController();\n });\n }\n }\n\n if(bundle || (window.bundles && window.bundles.length)) {\n window.loadBundles([bundle]);\n } else {\n loadController();\n }\n });\n})();\n\ndefine(\"loader/bootstrap\", function(){});\n\n","define('taoQtiItem/qtiItem/core/qtiClasses',[],function () { 'use strict';\n\n var qtiClasses = {\n _container: 'taoQtiItem/qtiItem/core/Container',\n assessmentItem: 'taoQtiItem/qtiItem/core/Item',\n responseProcessing: 'taoQtiItem/qtiItem/core/ResponseProcessing',\n _simpleFeedbackRule: 'taoQtiItem/qtiItem/core/response/SimpleFeedbackRule',\n stylesheet: 'taoQtiItem/qtiItem/core/Stylesheet',\n math: 'taoQtiItem/qtiItem/core/Math',\n img: 'taoQtiItem/qtiItem/core/Img',\n object: 'taoQtiItem/qtiItem/core/Object',\n outcomeDeclaration: 'taoQtiItem/qtiItem/core/variables/OutcomeDeclaration',\n responseDeclaration: 'taoQtiItem/qtiItem/core/variables/ResponseDeclaration',\n rubricBlock: 'taoQtiItem/qtiItem/core/RubricBlock',\n associableHotspot: 'taoQtiItem/qtiItem/core/choices/AssociableHotspot',\n gap: 'taoQtiItem/qtiItem/core/choices/Gap',\n gapImg: 'taoQtiItem/qtiItem/core/choices/GapImg',\n gapText: 'taoQtiItem/qtiItem/core/choices/GapText',\n hotspotChoice: 'taoQtiItem/qtiItem/core/choices/HotspotChoice',\n hottext: 'taoQtiItem/qtiItem/core/choices/Hottext',\n inlineChoice: 'taoQtiItem/qtiItem/core/choices/InlineChoice',\n simpleAssociableChoice: 'taoQtiItem/qtiItem/core/choices/SimpleAssociableChoice',\n simpleChoice: 'taoQtiItem/qtiItem/core/choices/SimpleChoice',\n associateInteraction: 'taoQtiItem/qtiItem/core/interactions/AssociateInteraction',\n choiceInteraction: 'taoQtiItem/qtiItem/core/interactions/ChoiceInteraction',\n endAttemptInteraction: 'taoQtiItem/qtiItem/core/interactions/EndAttemptInteraction',\n extendedTextInteraction: 'taoQtiItem/qtiItem/core/interactions/ExtendedTextInteraction',\n gapMatchInteraction: 'taoQtiItem/qtiItem/core/interactions/GapMatchInteraction',\n graphicAssociateInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicAssociateInteraction',\n graphicGapMatchInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicGapMatchInteraction',\n graphicOrderInteraction: 'taoQtiItem/qtiItem/core/interactions/GraphicOrderInteraction',\n hotspotInteraction: 'taoQtiItem/qtiItem/core/interactions/HotspotInteraction',\n hottextInteraction: 'taoQtiItem/qtiItem/core/interactions/HottextInteraction',\n inlineChoiceInteraction: 'taoQtiItem/qtiItem/core/interactions/InlineChoiceInteraction',\n matchInteraction: 'taoQtiItem/qtiItem/core/interactions/MatchInteraction',\n mediaInteraction: 'taoQtiItem/qtiItem/core/interactions/MediaInteraction',\n orderInteraction: 'taoQtiItem/qtiItem/core/interactions/OrderInteraction',\n prompt: 'taoQtiItem/qtiItem/core/interactions/Prompt',\n selectPointInteraction: 'taoQtiItem/qtiItem/core/interactions/SelectPointInteraction',\n sliderInteraction: 'taoQtiItem/qtiItem/core/interactions/SliderInteraction',\n textEntryInteraction: 'taoQtiItem/qtiItem/core/interactions/TextEntryInteraction',\n uploadInteraction: 'taoQtiItem/qtiItem/core/interactions/UploadInteraction',\n feedbackBlock: 'taoQtiItem/qtiItem/core/feedbacks/FeedbackBlock',\n feedbackInline: 'taoQtiItem/qtiItem/core/feedbacks/FeedbackInline',\n modalFeedback: 'taoQtiItem/qtiItem/core/feedbacks/ModalFeedback',\n customInteraction: 'taoQtiItem/qtiItem/core/interactions/CustomInteraction',\n infoControl: 'taoQtiItem/qtiItem/core/PortableInfoControl',\n include: 'taoQtiItem/qtiItem/core/Include',\n table: 'taoQtiItem/qtiItem/core/Table',\n printedVariable: 'taoQtiItem/qtiItem/core/PrintedVariable',\n _tooltip: 'taoQtiItem/qtiItem/core/Tooltip'\n };\n\n return qtiClasses;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/util',['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) 2015 (original work) Open Assessment Technologies SA\n *\n */\n\n var util = {\n buildSerial: function buildSerial(prefix) {\n var id = prefix || '';\n var chars = 'abcdefghijklmnopqrstuvwxyz0123456789';\n for (var i = 0; i < 22; i++) {\n id += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return id;\n },\n\n /**\n * Generates an id for a Qti element (the generation is different from identifier)\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildId: function buildId(item, prefix) {\n var id;\n var usedIds;\n var i = 1;\n var suffix = '';\n var exists = false;\n\n if (!item) {\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n usedIds = item.getUsedIds();\n\n do {\n exists = false;\n id = prefix + suffix;\n if (_.contains(usedIds, id)) {\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while (exists);\n\n return id;\n },\n\n /**\n * Generates an identifier for a Qti element\n * @param {Object} item - the element related item\n * @param {String} prefix - identifier prefix\n * @param {Boolean} [useSuffix = true] - add a \"_ + index\" to the identifier\n * @returns {String} the identifier\n * @throws {TypeError} if there is no item\n */\n buildIdentifier: function buildIdentifier(item, prefix, useSuffix) {\n var id;\n var usedIds;\n var suffix = '';\n var i = 1;\n var exists = false;\n\n if (!item) {\n throw new TypeError('A item is required to generate a unique identifier');\n }\n\n if (!prefix) {\n throw new TypeError('Prefix is required to build an identifier');\n }\n\n usedIds = item.getUsedIdentifiers();\n useSuffix = _.isUndefined(useSuffix) ? true : useSuffix;\n\n if (prefix) {\n prefix = prefix\n .replace(/_[0-9]+$/gi, '_') //detect incremental id of type choice_12, response_3, etc.\n .replace(/[^a-zA-Z0-9_]/gi, '_')\n .replace(/(_)+/gi, '_');\n if (useSuffix) {\n suffix = '_' + i;\n }\n }\n\n do {\n exists = false;\n id = prefix + suffix;\n if (usedIds[id]) {\n exists = true;\n suffix = '_' + i;\n i++;\n }\n } while (exists);\n\n return id;\n },\n\n findInCollection: function findInCollection(element, collectionNames, searchedSerial) {\n var found = null;\n\n if (_.isString(collectionNames)) {\n collectionNames = [collectionNames];\n }\n\n if (_.isArray(collectionNames)) {\n _.each(collectionNames, function(collectionName) {\n //get collection to search in (resolving case like interaction.choices.0\n var collection = element;\n _.each(collectionName.split('.'), function(nameToken) {\n collection = collection[nameToken];\n });\n var elt = collection[searchedSerial];\n\n if (elt) {\n found = { parent: element, element: elt };\n return false; //break the each loop\n }\n\n //search inside each elements:\n _.each(collection, function(elt) {\n if (_.isFunction(elt.find)) {\n found = elt.find(searchedSerial);\n if (found) {\n return false; //break the each loop\n }\n }\n });\n\n if (found) {\n return false; //break the each loop\n }\n });\n } else {\n throw new Error('invalid argument : collectionNames must be an array or a string');\n }\n\n return found;\n },\n addMarkupNamespace: function addMarkupNamespace(markup, ns) {\n if (ns) {\n markup = markup.replace(/<(\\/)?([a-z:]+)(\\s?)([^><]*)>/g, function($0, $1, $2, $3, $4) {\n if ($2.indexOf(':') > 0) {\n return $0;\n }\n $1 = $1 || '';\n $3 = $3 || '';\n return '<' + $1 + ns + ':' + $2 + $3 + $4 + '>';\n });\n return markup;\n }\n return markup;\n },\n removeMarkupNamespaces: function removeMarkupNamespace(markup) {\n return markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, '<$1$3>');\n },\n getMarkupUsedNamespaces: function getMarkupUsedNamespaces(markup) {\n var namespaces = [];\n markup.replace(/<(\\/)?(\\w*):([^>]*)>/g, function(original, slash, ns, node) {\n namespaces.push(ns);\n return '<' + slash + node + '>';\n });\n return _.uniq(namespaces);\n }\n };\n\n return util;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/rendererConfig',['lodash', 'jquery'], function (_, $) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n\n var rendererConfigHelper = {};\n\n rendererConfigHelper.getOptionsFromArguments = function(args) {\n var options = {\n data: {},\n placeholder: null,\n subclass: '',\n renderer: null\n };\n\n _.each(args, function(arg) {\n if (arg) {\n if (arg.isRenderer) {\n options.renderer = arg;\n } else if (arg instanceof $ && arg.length) {\n options.placeholder = arg;\n } else if (_.isString(arg)) {\n options.subclass = arg;\n } else if (_.isPlainObject(arg)) {\n options.data = arg;\n } else {\n console.log('invalid arg', arg, args);\n }\n }\n });\n\n return options;\n };\n\n return rendererConfigHelper;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Element',['jquery', 'lodash', 'class', 'core/logger', 'taoQtiItem/qtiItem/helper/util', 'taoQtiItem/qtiItem/helper/rendererConfig'], function ($, _, _class, loggerFactory, util, rendererConfig) { 'use strict';\n\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 util = util && Object.prototype.hasOwnProperty.call(util, 'default') ? util['default'] : util;\n rendererConfig = rendererConfig && Object.prototype.hasOwnProperty.call(rendererConfig, 'default') ? rendererConfig['default'] : rendererConfig;\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 (original work) Open Assessment Technologies SA\n *\n */\n\n var _instances = {};\n\n /**\n * Create a logger\n */\n var logger = loggerFactory('taoQtiItem/qtiItem/core/Element');\n\n var Element = Class.extend({\n qtiClass: '',\n serial: '',\n rootElement: null,\n init: function(serial, attributes) {\n //init own attributes\n this.attributes = {};\n\n //system properties, for item creator internal use only\n this.metaData = {};\n\n //init call in the format init(attributes)\n if (typeof serial === 'object') {\n attributes = serial;\n serial = '';\n }\n\n if (!serial) {\n serial = util.buildSerial(this.qtiClass + '_');\n }\n\n if (serial && (typeof serial !== 'string' || !serial.match(/^[a-z_0-9]*$/i))) {\n throw 'invalid QTI serial : (' + typeof serial + ') ' + serial;\n }\n\n if (!_instances[serial]) {\n _instances[serial] = this;\n this.serial = serial;\n this.setAttributes(attributes || {});\n } else {\n throw 'a QTI Element with the same serial already exists ' + serial;\n }\n\n if (typeof this.initContainer === 'function') {\n this.initContainer(arguments[2] || '');\n }\n if (typeof this.initObject === 'function') {\n this.initObject();\n }\n },\n is: function(qtiClass) {\n return qtiClass === this.qtiClass;\n },\n placeholder: function() {\n return '{{' + this.serial + '}}';\n },\n getSerial: function() {\n return this.serial;\n },\n getUsedIdentifiers: function() {\n var usedIds = {};\n var elts = this.getComposingElements();\n for (var i in elts) {\n var elt = elts[i];\n var id = elt.attr('identifier');\n if (id) {\n //warning: simplistic implementation, allow only one unique identifier in the item no matter the element class/type\n usedIds[id] = elt;\n }\n }\n return usedIds;\n },\n\n /**\n * Get the ids in use. (id is different from identifier)\n * @returns {Array} of the ids in use\n */\n getUsedIds: function getUsedIds() {\n var usedIds = [];\n _.forEach(this.getComposingElements(), function(elt) {\n var id = elt.attr('id');\n if (id && !_.contains(usedIds, id)) {\n usedIds.push(id);\n }\n });\n return usedIds;\n },\n\n attr: function(name, value) {\n if (name) {\n if (value !== undefined) {\n this.attributes[name] = value;\n } else {\n if (typeof name === 'object') {\n for (var prop in name) {\n this.attr(prop, name[prop]);\n }\n } else if (typeof name === 'string') {\n if (this.attributes[name] === undefined) {\n return undefined;\n } else {\n return this.attributes[name];\n }\n }\n }\n }\n return this;\n },\n data: function(name, value) {\n if (name) {\n if (value !== undefined) {\n this.metaData[name] = value;\n $(document).trigger('metaChange.qti-widget', { element: this, key: name, value: value });\n } else {\n if (typeof name === 'object') {\n for (var prop in name) {\n this.data(prop, name[prop]);\n }\n } else if (typeof name === 'string') {\n if (this.metaData[name] === undefined) {\n return undefined;\n } else {\n return this.metaData[name];\n }\n }\n }\n }\n return this;\n },\n removeData: function(name) {\n delete this.metaData[name];\n return this;\n },\n removeAttr: function(name) {\n return this.removeAttributes(name);\n },\n setAttributes: function(attributes) {\n if (!_.isPlainObject(attributes)) {\n logger.warn('attributes should be a plain object');\n }\n this.attributes = attributes;\n return this;\n },\n getAttributes: function() {\n return _.clone(this.attributes);\n },\n removeAttributes: function(attrNames) {\n if (typeof attrNames === 'string') {\n attrNames = [attrNames];\n }\n for (var i in attrNames) {\n delete this.attributes[attrNames[i]];\n }\n return this;\n },\n getComposingElements: function() {\n var elts = {};\n function append(element) {\n elts[element.getSerial()] = element; //pass individual object by ref, instead of the whole list(object)\n elts = _.extend(elts, element.getComposingElements());\n }\n if (typeof this.initContainer === 'function') {\n append(this.getBody());\n }\n if (typeof this.initObject === 'function') {\n append(this.getObject());\n }\n _.each(this.metaData, function(v) {\n if (Element.isA(v, '_container')) {\n append(v);\n } else if (_.isArray(v)) {\n _.each(v, function(v) {\n if (Element.isA(v, '_container')) {\n append(v);\n }\n });\n }\n });\n return elts;\n },\n getUsedClasses: function() {\n var ret = [this.qtiClass],\n composingElts = this.getComposingElements();\n\n _.each(composingElts, function(elt) {\n ret.push(elt.qtiClass);\n });\n\n return _.uniq(ret);\n },\n find: function(serial) {\n var found = null;\n var object, body;\n\n if (typeof this.initObject === 'function') {\n object = this.getObject();\n if (object.serial === serial) {\n found = { parent: this, element: object, location: 'object' };\n }\n }\n\n if (!found && typeof this.initContainer === 'function') {\n body = this.getBody();\n if (body.serial === serial) {\n found = { parent: this, element: body, location: 'body' };\n } else {\n found = this.getBody().find(serial, this);\n }\n }\n\n return found;\n },\n parent: function() {\n var item = this.getRootElement();\n if (item) {\n var found = item.find(this.getSerial());\n if (found) {\n return found.parent;\n }\n }\n return null;\n },\n /**\n * @deprecated - use setRootElement() instead\n */\n setRelatedItem: function(item) {\n logger.warn('Deprecated use of setRelatedItem()');\n this.setRootElement(item);\n },\n setRootElement: function(item) {\n var composingElts, i;\n\n if (Element.isA(item, 'assessmentItem')) {\n this.rootElement = item;\n composingElts = this.getComposingElements();\n for (i in composingElts) {\n composingElts[i].setRootElement(item);\n }\n }\n },\n /**\n * @deprecated - use getRootElement() instead\n */\n getRelatedItem: function() {\n logger.warn('Deprecated use of getRelatedItem()');\n return this.getRootElement();\n },\n getRootElement: function() {\n var ret = null;\n if (Element.isA(this.rootElement, 'assessmentItem')) {\n ret = this.rootElement;\n }\n return ret;\n },\n setRenderer: function(renderer) {\n if (renderer && renderer.isRenderer) {\n this.renderer = renderer;\n var elts = this.getComposingElements();\n for (var serial in elts) {\n elts[serial].setRenderer(renderer);\n }\n } else {\n throw 'invalid qti rendering engine';\n }\n },\n getRenderer: function() {\n return this.renderer;\n },\n /**\n * Render the element. Arguments are all optional and can be given in any order.\n * Argument parsing is based on argument type and is done by taoQtiItem/qtiItem/core/helpers/rendererConfig\n * @param {Renderer} renderer - specify which renderer to use\n * @param {jQuery} placeholder - DOM element that will be replaced by the rendered element\n * @param {Object} data - template data for the rendering\n * @param {String} subclass - subclass enables different behaviour of the same qti class in different contexts (eg. we could have different rendering for simpleChoice according to where it is being used: simpleChoice.orderInteraction, simpleChoice.choiceInteraction...)\n * @returns {String} - the rendered element as an HTML string\n */\n render: function render() {\n var args = rendererConfig.getOptionsFromArguments(arguments);\n var _renderer = args.renderer || this.getRenderer();\n var rendering;\n\n var tplData = {},\n defaultData = {\n tag: this.qtiClass,\n serial: this.serial,\n attributes: this.getAttributes()\n };\n\n if (!_renderer) {\n throw new Error('render: no renderer found for the element ' + this.qtiClass + ':' + this.serial);\n }\n\n if (typeof this.initContainer === 'function') {\n //allow body to have a different renderer if it has its own renderer set\n defaultData.body = this.getBody().render(args.renderer);\n }\n if (typeof this.initObject === 'function') {\n defaultData.object = {\n attributes: this.object.getAttributes()\n };\n defaultData.object.attributes.data = _renderer.resolveUrl(this.object.attr('data'));\n }\n\n tplData = _.merge(defaultData, args.data || {});\n tplData = _renderer.getData(this, tplData, args.subclass);\n rendering = _renderer.renderTpl(this, tplData, args.subclass);\n if (args.placeholder) {\n args.placeholder.replaceWith(rendering);\n }\n\n return rendering;\n },\n postRender: function(data, altClassName, renderer) {\n var postRenderers = [];\n var _renderer = renderer || this.getRenderer();\n\n if (typeof this.initContainer === 'function') {\n //allow body to have a different renderer if it has its own renderer set\n postRenderers = this.getBody().postRender(data, '', renderer);\n }\n\n if (_renderer) {\n postRenderers.push(_renderer.postRender(this, data, altClassName));\n } else {\n throw 'postRender: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n\n return _.compact(postRenderers);\n },\n getContainer: function($scope, subclass) {\n var renderer = this.getRenderer();\n if (renderer) {\n return renderer.getContainer(this, $scope, subclass);\n } else {\n throw 'getContainer: no renderer found for the element ' + this.qtiClass + ':' + this.serial;\n }\n },\n toArray: function() {\n var arr = {\n serial: this.serial,\n type: this.qtiClass,\n attributes: this.getAttributes()\n };\n\n if (typeof this.initContainer === 'function') {\n arr.body = this.getBody().toArray();\n }\n if (typeof this.initObject === 'function') {\n arr.object = this.object.toArray();\n }\n\n return arr;\n },\n isEmpty: function() {\n //tells whether the element should be considered empty or not, from the rendering point of view\n return false;\n },\n addClass: function(className) {\n var clazz = this.attr('class') || '';\n if (!_containClass(clazz, className)) {\n this.attr('class', clazz + (clazz.length ? ' ' : '') + className);\n }\n },\n hasClass: function(className) {\n return _containClass(this.attr('class'), className);\n },\n removeClass: function(className) {\n var clazz = this.attr('class') || '';\n if (clazz) {\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)');\n clazz = clazz.replace(regex, ' ').trim();\n\n if (clazz) {\n this.attr('class', clazz);\n } else {\n this.removeAttr('class');\n }\n }\n },\n /**\n * Add or remove class. Setting the optional state will force addition/removal.\n * State is here to keep the jQuery syntax\n *\n * @param {String} className\n * @param {Boolean} [state]\n */\n toggleClass: function(className, state) {\n if (typeof state === 'boolean') {\n return state ? this.addClass(className) : this.removeClass(className);\n }\n\n if (this.hasClass(className)) {\n return this.removeClass(className);\n }\n return this.addClass(className);\n },\n isset: function() {\n return Element.issetElement(this.serial);\n },\n unset: function() {\n return Element.unsetElement(this.serial);\n }\n });\n\n var _containClass = function(allClassStr, className) {\n var regex = new RegExp('(?:^|\\\\s)' + className + '(?:\\\\s|$)', '');\n return allClassStr && regex.test(allClassStr);\n };\n\n //helpers\n Element.isA = function(qtiElement, qtiClass) {\n return qtiElement instanceof Element && qtiElement.is(qtiClass);\n };\n\n Element.getElementBySerial = function(serial) {\n return _instances[serial];\n };\n\n Element.issetElement = function(serial) {\n return !!_instances[serial];\n };\n\n /**\n * Unset a registered element from it's serial\n * @param {String} serial - the element serial\n * @returns {Boolean} true if unset\n */\n Element.unsetElement = function(serial) {\n var element = Element.getElementBySerial(serial);\n\n if (element) {\n var composingElements = element.getComposingElements();\n _.each(composingElements, function(elt) {\n delete _instances[elt.serial];\n });\n delete _instances[element.serial];\n\n return true;\n }\n return false;\n };\n\n return Element;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/xmlNsHandler',[],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) 2017 (original work) Open Assessment Technologies SA\n */\n\n /**\n * XML namespace handling\n */\n\n /**\n * Elements that need to be prefixed\n *\n * @see http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd\n * @type {string}\n */\n var prefixed = 'article|aside|bdi|figure|footer|header|nav|rb|rp|rt|rtc|ruby|section';\n\n /**\n * Find a possibly existing prefix\n *\n * @param namespaces\n * @param html5Ns\n * @returns {*}\n */\n function getPrefix(namespaces, html5Ns) {\n var key;\n for (key in namespaces) {\n if (namespaces[key] === html5Ns) {\n return key;\n }\n }\n return 'qh5';\n }\n\n var xmlNsHandler = {\n /**\n * Remove prefix to make sure elements are properly displayed\n *\n * @param body\n */\n stripNs: function stripNs(body) {\n var pattern = '([\\\\w]+)\\\\:(' + prefixed + ')';\n var openRegEx = new RegExp('(<' + pattern + ')', 'gi');\n var closeRegEx = new RegExp('(<\\\\/' + pattern + '>)', 'gi');\n return body.replace(openRegEx, '<$3').replace(closeRegEx, '</$3>');\n },\n\n /**\n * Add a prefix to those elements that require one\n *\n * @param xml\n * @param namespaces\n * @returns {*}\n */\n restoreNs: function restoreNs(xml, namespaces) {\n var xmlRe = new RegExp('(<(' + prefixed + ')[^>]*>|<\\\\/(' + prefixed + ')>)', 'gi');\n var tagRe = new RegExp('((<)(' + prefixed + ')([^>]*)(>)|(<\\\\/)(' + prefixed + ')(>))', 'i');\n var xmlMatch = xml.match(xmlRe);\n var imsXsd = 'http://www.imsglobal.org/xsd';\n var html5Ns = imsXsd + '/imsqtiv2p2_html5_v1p0';\n var prefix = getPrefix(namespaces, html5Ns);\n var prefixAtt = 'xmlns:' + prefix + '=\"' + html5Ns + '\"';\n var i = xmlMatch ? xmlMatch.length : 0;\n var tagMatch;\n\n if (!xmlMatch) {\n return xml;\n }\n\n while (i--) {\n tagMatch = xmlMatch[i].match(tagRe);\n xml = xml.replace(\n xmlMatch[i],\n tagMatch[5]\n ? '<' + prefix + ':' + tagMatch[3] + tagMatch[4] + '>'\n : '</' + prefix + ':' + tagMatch[7] + '>'\n );\n }\n\n // we found matches but no namespace has been set\n if (xmlMatch.length && xml.indexOf(prefixAtt) === -1) {\n xml = xml.replace('<assessmentItem', '<assessmentItem ' + prefixAtt);\n }\n\n // make sure the item is set to qti 2.2\n xml = xml.replace('xmlns=\"' + imsXsd + '/imsqti_v2p1\"', 'xmlns=\"' + imsXsd + '/imsqti_v2p2\"');\n xml = xml.replace(\n 'xsi:schemaLocation=\"' + imsXsd + '/imsqti_v2p1 imsqti_v2p1.xsd\"',\n 'xsi:schemaLocation=\"' + imsXsd + '/imsqti_v2p2 ' + imsXsd + '/qti/qtiv2p2/imsqti_v2p2.xsd\"'\n );\n\n return xml;\n }\n };\n\n return xmlNsHandler;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/responseRules',[],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 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n var responseRules = {\n MATCH_CORRECT: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'match',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n {\n qtiClass: 'correct',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n },\n },\n {\n qtiClass: 'baseValue',\n attributes: {\n baseType: 'integer'\n },\n value: '1',\n },\n ],\n },\n },\n ],\n },\n }),\n MAP_RESPONSE: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'not',\n expressions: [\n {\n qtiClass: 'isNull',\n expressions: [{\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n }],\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n }\n },\n {\n qtiClass: 'mapResponse',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n },\n ],\n },\n }),\n MAP_RESPONSE_POINT: (responseIdentifier, outcomeIdentifier) => ({\n qtiClass: 'responseCondition',\n responseIf: {\n qtiClass: 'responseIf',\n expression: {\n qtiClass: 'not',\n expressions: [\n {\n qtiClass: 'isNull',\n expressions: [{\n qtiClass: 'variable',\n attributes: {\n identifier: responseIdentifier,\n },\n }],\n },\n ],\n },\n responseRules: [\n {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: outcomeIdentifier,\n },\n expression: {\n qtiClass: 'sum',\n expressions: [\n {\n qtiClass: 'variable',\n attributes: {\n identifier: outcomeIdentifier,\n }\n },\n {\n qtiClass: 'mapResponsePoint',\n attributes: {\n identifier: responseIdentifier,\n },\n },\n ],\n },\n },\n ],\n },\n }),\n };\n\n return responseRules;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/response',['lodash', 'taoQtiItem/qtiItem/helper/responseRules'], function (_, responseRulesHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n responseRulesHelper = responseRulesHelper && Object.prototype.hasOwnProperty.call(responseRulesHelper, 'default') ? responseRulesHelper['default'] : responseRulesHelper;\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) 2014-2020 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n const _templateNames = {\n MATCH_CORRECT: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct',\n MAP_RESPONSE: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response',\n MAP_RESPONSE_POINT: 'http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response_point',\n NONE: 'no_response_processing'\n };\n\n\n var response = {\n isUsingTemplate(response, tpl) {\n if (_.isString(tpl)) {\n if (tpl === response.template || _templateNames[tpl] === response.template) {\n return true;\n }\n }\n\n return false;\n },\n isValidTemplateName(tplName) {\n return !!this.getTemplateUriFromName(tplName);\n },\n getTemplateUriFromName(tplName) {\n return _templateNames[tplName] || '';\n },\n getTemplateNameFromUri(tplUri) {\n let tplName = '';\n\n _.forIn(_templateNames, (uri, name) => {\n if (uri === tplUri) {\n tplName = name;\n return false;\n }\n });\n\n return tplName;\n },\n getTemplateNameFromResponseRules(responseIdentifier, responseRules) {\n if (!responseRules) {\n return 'NONE';\n }\n\n const {\n responseIf: {\n responseRules: [outcomeRules = {}] = [],\n } = {}\n } = responseRules;\n const {\n attributes: {\n identifier: outcomeIdentifier,\n } = {},\n } = outcomeRules;\n\n if (!outcomeIdentifier) {\n return '';\n }\n\n return Object.keys(responseRulesHelper).find(\n (key) => _.isEqual(responseRules, responseRulesHelper[key](responseIdentifier, outcomeIdentifier))\n );\n }\n };\n\n return response;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/itemScore',[],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 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n */\n\n /**\n * Returns iteraction score response rule object\n *\n * @param {String} responseIdentifiers interactions reponse indentifiers\n * @returns {Obeject}\n */\n var itemScore = (responseIdentifiers) => {\n const outcomeExpressions = responseIdentifiers.map((outcomeIdentifier) => ({\n qtiClass: 'variable',\n attributes: {\n identifier: `SCORE_${outcomeIdentifier}`,\n },\n }));\n\n return {\n qtiClass: 'setOutcomeValue',\n attributes: {\n identifier: 'SCORE',\n },\n expression: {\n qtiClass: 'sum',\n expressions: outcomeExpressions,\n },\n };\n };\n\n return itemScore;\n\n});\n\n","define('taoQtiItem/qtiItem/core/Loader',['lodash', 'class', 'taoQtiItem/qtiItem/core/qtiClasses', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/xmlNsHandler', 'core/moduleLoader', 'taoQtiItem/qtiItem/helper/response', 'taoQtiItem/qtiItem/helper/itemScore'], function (_, _class, qtiClasses, Element, xmlNsHandler, moduleLoader, responseHelper, itemScoreHelper) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n qtiClasses = qtiClasses && Object.prototype.hasOwnProperty.call(qtiClasses, 'default') ? qtiClasses['default'] : qtiClasses;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n xmlNsHandler = xmlNsHandler && Object.prototype.hasOwnProperty.call(xmlNsHandler, 'default') ? xmlNsHandler['default'] : xmlNsHandler;\n moduleLoader = moduleLoader && Object.prototype.hasOwnProperty.call(moduleLoader, 'default') ? moduleLoader['default'] : moduleLoader;\n responseHelper = responseHelper && Object.prototype.hasOwnProperty.call(responseHelper, 'default') ? responseHelper['default'] : responseHelper;\n itemScoreHelper = itemScoreHelper && Object.prototype.hasOwnProperty.call(itemScoreHelper, 'default') ? itemScoreHelper['default'] : itemScoreHelper;\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-2020 (original work) Open Assessment Technologies SA ;\n *\n */\n\n /**\n * If a property is given as a serialized JSON object, parse it directly to a JS object\n */\n const loadPortableCustomElementProperties = (portableElement, rawProperties) => {\n var properties = {};\n\n _.forOwn(rawProperties, (value, key) => {\n try {\n properties[key] = JSON.parse(value);\n } catch (e) {\n properties[key] = value;\n }\n });\n portableElement.properties = properties;\n };\n\n const loadPortableCustomElementData = (portableElement, data) => {\n portableElement.typeIdentifier = data.typeIdentifier;\n portableElement.markup = data.markup;\n portableElement.entryPoint = data.entryPoint;\n portableElement.libraries = data.libraries;\n portableElement.setNamespace('', data.xmlns);\n\n loadPortableCustomElementProperties(portableElement, data.properties);\n };\n\n var Loader = Class.extend({\n init(item, classesLocation) {\n this.qti = {}; //loaded qti classes are store here\n this.classesLocation = {};\n this.item = item || null; //starts either from scratch or with an existing item object\n\n this.setClassesLocation(classesLocation || qtiClasses); //load default location for qti classes model\n },\n setClassesLocation(qtiClassesList) {\n _.extend(this.classesLocation, qtiClassesList);\n\n return this;\n },\n getRequiredClasses(data) {\n let ret = [];\n\n for (let i in data) {\n if (i === 'qtiClass' && data[i] !== '_container' && i !== 'rootElement') {\n //although a _container is a concrete class in TAO, it is not defined in QTI standard\n ret.push(data[i]);\n } else if (typeof data[i] === 'object' && i !== 'responseRules') {\n //responseRules should'nt be part of the parsing\n ret = _.union(ret, this.getRequiredClasses(data[i]));\n }\n }\n\n return ret;\n },\n loadRequiredClasses(data, callback, reload) {\n let requiredClass;\n const requiredClasses = this.getRequiredClasses(data, reload);\n const required = [];\n\n for (let i in requiredClasses) {\n requiredClass = requiredClasses[i];\n if (this.classesLocation[requiredClass]) {\n required.push({\n module: this.classesLocation[requiredClass],\n category: 'qti'\n });\n } else {\n throw new Error(`missing qti class location declaration : ${requiredClass}`);\n }\n }\n\n moduleLoader([], () => true).addList(required).load().then(loadeded => {\n loadeded.forEach(QtiClass => {\n this.qti[QtiClass.prototype.qtiClass] = QtiClass;\n });\n callback.call(this, this.qti);\n });\n },\n getLoadedClasses() {\n return _.keys(this.qti);\n },\n loadItemData(data, callback) {\n this.loadRequiredClasses(data, Qti => {\n if (typeof data === 'object' && data.qtiClass === 'assessmentItem') {\n //unload an item from it's serial (in case of a reload)\n if (data.serial) {\n Element.unsetElement(data.serial);\n }\n\n this.item = new Qti.assessmentItem(data.serial, data.attributes || {});\n this.loadContainer(this.item.getBody(), data.body);\n\n for (let i in data.outcomes) {\n const outcome = this.buildOutcome(data.outcomes[i]);\n\n if (outcome) {\n this.item.addOutcomeDeclaration(outcome);\n }\n }\n\n for (let i in data.feedbacks) {\n const feedback = this.buildElement(data.feedbacks[i]);\n\n if (feedback) {\n this.item.addModalFeedback(feedback);\n }\n }\n\n for (let i in data.stylesheets) {\n const stylesheet = this.buildElement(data.stylesheets[i]);\n\n if (stylesheet) {\n this.item.addStylesheet(stylesheet);\n }\n }\n\n //important : build responses after all modal feedbacks and outcomes has been loaded, because the simple feedback rules need to reference them\n let responseRules = data.responseProcessing && data.responseProcessing.responseRules\n ? [...data.responseProcessing.responseRules]\n : [];\n for (let i in data.responses) {\n const responseIdentifier = data.responses[i].identifier;\n const responseRuleItemIndex = responseRules.findIndex(({ responseIf: {\n expression: {\n expressions: [expression = {}] = [],\n } = {}\n } = {} }) => expression.attributes\n && expression.attributes.identifier === responseIdentifier\n || (\n expression.expressions\n && expression.expressions[0]\n && expression.expressions[0].attributes\n && expression.expressions[0].attributes.identifier === responseIdentifier\n )\n );\n const [responseRule] = responseRuleItemIndex !== -1\n ? responseRules.splice(responseRuleItemIndex, 1)\n : [];\n\n const response = this.buildResponse(\n data.responses[i],\n responseRule\n );\n\n if (response) {\n this.item.addResponseDeclaration(response);\n\n const feedbackRules = data.responses[i].feedbackRules;\n\n if (feedbackRules) {\n _.forIn(feedbackRules, (fbData, serial) => {\n const {\n attributes: {\n identifier: feedbackOutcomeIdentifier,\n } = {}\n } = data.outcomes[fbData.feedbackOutcome] || {};\n response.feedbackRules[serial] = this.buildSimpleFeedbackRule(fbData, response);\n\n // remove feedback response rule from response rules array\n const feedbackResponseRuleIndex = responseRules.findIndex(({\n responseIf: {\n responseRules: [setOutcomeResponseRule = {}] = [],\n } = {}\n }) => {\n const { attributes = {}, qtiClass } = setOutcomeResponseRule;\n const outcomeIdentifier = attributes.identifier;\n\n return feedbackOutcomeIdentifier === outcomeIdentifier\n && qtiClass === 'setOutcomeValue';\n });\n\n if (feedbackResponseRuleIndex !== -1) {\n responseRules.splice(feedbackResponseRuleIndex, 1);\n }\n });\n }\n }\n }\n\n const responseIdentifiers = Object.keys(this.item.responses || {})\n .map((responseKey) => this.item.responses[responseKey].attributes.identifier);\n\n if (data.responseProcessing) {\n const customResponseProcessing =\n (\n responseRules.length > 0\n && !(\n responseRules.length === 1\n && _.isEqual(\n responseRules[0],\n itemScoreHelper(\n responseIdentifiers\n )\n )\n )\n )\n || (\n this.item.responses\n && Object.keys(this.item.responses)\n .some((responseKey) => !this.item.responses[responseKey].template)\n );\n\n this.item.setResponseProcessing(this.buildResponseProcessing(data.responseProcessing, customResponseProcessing));\n }\n this.item.setNamespaces(data.namespaces);\n this.item.setSchemaLocations(data.schemaLocations);\n this.item.setApipAccessibility(data.apipAccessibility);\n }\n\n if (typeof callback === 'function') {\n callback.call(this, this.item);\n }\n });\n },\n loadAndBuildElement(data, callback) {\n this.loadRequiredClasses(data, () => {\n const element = this.buildElement(data);\n\n if (typeof callback === 'function') {\n callback.call(this, element);\n }\n });\n },\n loadElement(element, data, callback) {\n this.loadRequiredClasses(data, () => {\n this.loadElementData(element, data);\n\n if (typeof callback === 'function') {\n callback.call(this, element);\n }\n });\n },\n /**\n * Load ALL given elements into existing loaded item\n *\n * @todo to be renamed to loadItemElements\n * @param {object} data\n * @param {function} callback\n * @returns {undefined}\n */\n loadElements(data, callback) {\n if (!this.item) {\n throw new Error('QtiLoader : cannot load elements in empty item');\n }\n\n this.loadRequiredClasses(data, () => {\n const allElements = this.item.getComposingElements();\n\n for (let i in data) {\n const elementData = data[i];\n\n if (elementData && elementData.qtiClass && elementData.serial) {\n //find and update element\n if (allElements[elementData.serial]) {\n this.loadElementData(allElements[elementData.serial], elementData);\n }\n }\n }\n\n if (typeof callback === 'function') {\n callback.call(this, this.item);\n }\n });\n },\n buildResponse(data, responseRule) {\n const response = this.buildElement(data);\n\n response.template = responseHelper.getTemplateUriFromName(\n responseHelper.getTemplateNameFromResponseRules(data.identifier, responseRule)\n )\n || data.howMatch\n || null;\n\n response.defaultValue = data.defaultValue || null;\n response.correctResponse = data.correctResponses || null;\n\n if (_.size(data.mapping)) {\n response.mapEntries = data.mapping;\n } else if (_.size(data.areaMapping)) {\n response.mapEntries = data.areaMapping;\n } else {\n response.mapEntries = {};\n }\n\n response.mappingAttributes = data.mappingAttributes || {};\n\n return response;\n },\n buildSimpleFeedbackRule(data, response) {\n const feedbackRule = this.buildElement(data);\n\n feedbackRule.setCondition(response, data.condition, data.comparedValue || null);\n\n // feedbackRule.comparedOutcome = this.item.responses[data.comparedOutcome] || null;\n feedbackRule.feedbackOutcome = this.item.outcomes[data.feedbackOutcome] || null;\n feedbackRule.feedbackThen = this.item.modalFeedbacks[data.feedbackThen] || null;\n feedbackRule.feedbackElse = this.item.modalFeedbacks[data.feedbackElse] || null;\n\n //associate the compared outcome to the feedbacks if applicable\n const comparedOutcome = feedbackRule.comparedOutcome;\n\n if (feedbackRule.feedbackThen) {\n feedbackRule.feedbackThen.data('relatedResponse', comparedOutcome);\n }\n\n if (feedbackRule.feedbackElse) {\n feedbackRule.feedbackElse.data('relatedResponse', comparedOutcome);\n }\n\n return feedbackRule;\n },\n buildOutcome(data) {\n const outcome = this.buildElement(data);\n outcome.defaultValue = data.defaultValue || null;\n\n return outcome;\n },\n buildResponseProcessing(data, customResponseProcessing) {\n const rp = this.buildElement(data);\n\n if (customResponseProcessing) {\n rp.xml = data.data;\n rp.processingType = 'custom';\n } else {\n rp.processingType = 'templateDriven';\n }\n\n return rp;\n },\n loadContainer(bodyObject, bodyData) {\n if (!Element.isA(bodyObject, '_container')) {\n throw new Error('bodyObject must be a QTI Container');\n }\n\n if (!(bodyData && typeof bodyData.body === 'string' && typeof bodyData.elements === 'object')) {\n throw new Error('wrong bodydata format');\n }\n\n for (let serial in bodyData.elements) {\n const eltData = bodyData.elements[serial];\n const element = this.buildElement(eltData);\n\n //check if class is loaded:\n if (element) {\n bodyObject.setElement(element, bodyData.body);\n }\n }\n\n bodyObject.body(xmlNsHandler.stripNs(bodyData.body));\n },\n buildElement(elementData) {\n if (!(elementData && elementData.qtiClass && elementData.serial)) {\n throw new Error('wrong elementData format');\n }\n\n const className = elementData.qtiClass;\n\n if (!this.qti[className]) {\n throw new Error(`the qti element class does not exist: ${className}`);\n }\n\n const elt = new this.qti[className](elementData.serial);\n this.loadElementData(elt, elementData);\n\n return elt;\n },\n loadElementData(element, data) {\n //merge attributes when loading element data\n const attributes = _.defaults(data.attributes || {}, element.attributes || {});\n element.setAttributes(attributes);\n\n if (element.body && data.body) {\n if (element.bdy) {\n this.loadContainer(element.getBody(), data.body);\n }\n }\n\n if (element.object && data.object) {\n if (element.object) {\n this.loadObjectData(element.object, data.object);\n }\n }\n\n if (Element.isA(element, 'interaction')) {\n this.loadInteractionData(element, data);\n } else if (Element.isA(element, 'choice')) {\n this.loadChoiceData(element, data);\n } else if (Element.isA(element, 'math')) {\n this.loadMathData(element, data);\n } else if (Element.isA(element, 'infoControl')) {\n this.loadPicData(element, data);\n } else if (Element.isA(element, '_tooltip')) {\n this.loadTooltipData(element, data);\n }\n\n return element;\n },\n loadInteractionData(interaction, data) {\n if (Element.isA(interaction, 'blockInteraction')) {\n if (data.prompt) {\n this.loadContainer(interaction.prompt.getBody(), data.prompt);\n }\n }\n\n this.buildInteractionChoices(interaction, data);\n\n if (Element.isA(interaction, 'customInteraction')) {\n this.loadPciData(interaction, data);\n }\n },\n buildInteractionChoices(interaction, data) {\n // note: Qti.ContainerInteraction (Qti.GapMatchInteraction and Qti.HottextInteraction) has already been parsed by builtElement(interacionData);\n if (data.choices) {\n if (Element.isA(interaction, 'matchInteraction')) {\n for (let set = 0; set < 2; set++) {\n if (!data.choices[set]) {\n throw new Error(`missing match set #${set}`);\n }\n\n const matchSet = data.choices[set];\n\n for (let serial in matchSet) {\n const choice = this.buildElement(matchSet[serial]);\n\n if (choice) {\n interaction.addChoice(choice, set);\n }\n }\n }\n } else {\n for (let serial in data.choices) {\n const choice = this.buildElement(data.choices[serial]);\n\n if (choice) {\n interaction.addChoice(choice);\n }\n }\n }\n\n if (Element.isA(interaction, 'graphicGapMatchInteraction')) {\n if (data.gapImgs) {\n for (let serial in data.gapImgs) {\n const gapImg = this.buildElement(data.gapImgs[serial]);\n\n if (gapImg) {\n interaction.addGapImg(gapImg);\n }\n }\n }\n }\n }\n },\n loadChoiceData(choice, data) {\n if (Element.isA(choice, 'textVariableChoice')) {\n choice.val(data.text);\n } else if (Element.isA(choice, 'gapImg')) ; else if (Element.isA(choice, 'gapText')) {\n // this ensure compatibility of Qti 2.1 items\n if (!choice.body()) {\n choice.body(data.text);\n }\n } else if (Element.isA(choice, 'containerChoice')) ;\n },\n loadObjectData(object, data) {\n object.setAttributes(data.attributes);\n\n //@todo: manage object like a container\n if (data._alt) {\n if (data._alt.qtiClass === 'object') {\n object._alt = Loader.buildElement(data._alt);\n } else {\n object._alt = data._alt;\n }\n }\n },\n loadMathData(math, data) {\n math.ns = data.ns || {};\n math.setMathML(data.mathML || '');\n _.forIn(data.annotations || {}, (value, encoding) => {\n math.setAnnotation(encoding, value);\n });\n },\n loadTooltipData(tooltip, data) {\n tooltip.content(data.content);\n },\n loadPciData(pci, data) {\n loadPortableCustomElementData(pci, data);\n },\n loadPicData(pic, data) {\n loadPortableCustomElementData(pic, data);\n }\n });\n\n return Loader;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/pci',['lodash'], function (_) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n\n var pci = {\n getRawValues: function(pciVar) {\n if (_.isPlainObject(pciVar)) {\n if (pciVar.base !== undefined) {\n return _.values(pciVar.base);\n } else if (pciVar.list) {\n return _.values(pciVar.list);\n }\n }\n throw 'unsupported type ';\n }\n };\n\n return pci;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/container',['lodash', 'jquery'], function (_, $) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\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 /**\n * Prefix used to the variable storage\n * @type String\n */\n var _prefix = 'x-tao-';\n\n /**\n * Check if the element is of a qti container type\n *\n * @private\n * @param {Object} element\n * @returns {Boolean}\n */\n function _checkContainerType(element) {\n if (_.isFunction(element.initContainer) && _.isFunction(element.body)) {\n return true;\n } else {\n throw 'the element is not of a container type';\n }\n }\n\n /**\n * Get the body element of the container\n *\n * @private\n * @param {Object} element\n * @returns {JQuery}\n */\n function _getBodyDom(element) {\n if (_checkContainerType(element)) {\n return $('<div>')\n .html(element.body())\n .find('.x-tao-wrapper');\n }\n }\n\n /**\n * Add a class to the body element of the qti container\n *\n * @private\n * @param {Object} element\n * @param {String} newClass\n * @param {String} [oldClass]\n */\n function _setBodyDomClass(element, newClass, oldClass) {\n if (_checkContainerType(element) && (oldClass || newClass)) {\n var $wrapper = $('<div>').html(element.body());\n //set css class to element\n _setDomClass($wrapper, newClass, oldClass);\n //set to the model\n element.body($wrapper.html());\n }\n }\n\n /**\n * Switch class to the wrapped DOM\n *\n * @param {JQuery} $wrapper\n * @param {String} newClass\n * @param {String} oldClass\n * @returns {undefined}\n */\n function _setDomClass($wrapper, newClass, oldClass) {\n var $bodyDom = $wrapper.find('.x-tao-wrapper');\n if (!$bodyDom.length) {\n //create one\n $wrapper.wrapInner('<div class=\"x-tao-wrapper\">');\n $bodyDom = $wrapper.find('.x-tao-wrapper');\n }\n if (oldClass) {\n $bodyDom.removeClass(oldClass);\n }\n if (newClass) {\n $bodyDom.addClass(newClass);\n }\n }\n\n /**\n * Add manually the encoded information to a dom element\n *\n * @param {JQuery} $wrapper - the wrapper of the element that will holds the information\n * @param {String} dataName - the name of the information\n * @param {String} newValue - the new value to be added\n * @param {String} [oldValue] - the old value to be removed\n * @returns {undefined}\n */\n function setEncodedDataToDom($wrapper, dataName, newValue, oldValue) {\n _setDomClass($wrapper, _getEncodedDataString(dataName, newValue), _getEncodedDataString(dataName, oldValue));\n }\n\n /**\n * Get the full variable name for the data store\n *\n * @param {String} dataName\n * @param {String} value\n * @returns {String}\n */\n function _getEncodedDataString(dataName, value) {\n if (dataName && value) {\n return _prefix + dataName + '-' + value;\n }\n return '';\n }\n\n /**\n * Set a data string to the element identified by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @param {String} newValue\n * @returns {undefined}\n */\n function setEncodedData(element, dataName, newValue) {\n var oldValue = getEncodedData(element, dataName);\n return _setBodyDomClass(\n element,\n _getEncodedDataString(dataName, newValue),\n _getEncodedDataString(dataName, oldValue)\n );\n }\n\n /**\n * Remove the stored data from the element by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @returns {unresolved}\n */\n function removeEncodedData(element, dataName) {\n var oldValue = getEncodedData(element, dataName);\n if (dataName && oldValue) {\n _setBodyDomClass(element, '', _getEncodedDataString(dataName, oldValue));\n }\n }\n\n /**\n * Check if the stored data exist\n *\n * @param {Object} element\n * @param {String} dataName\n * @param {String} value\n * @returns {Boolean}\n */\n function hasEncodedData(element, dataName, value) {\n var $body = _getBodyDom(element);\n if ($body && $body.length && dataName && value) {\n return $body.hasClass(_getEncodedDataString(dataName, value));\n }\n return false;\n }\n\n /**\n * Get the encoded data identified by its dataName\n *\n * @param {Object} element\n * @param {String} dataName\n * @returns {String}\n */\n function getEncodedData(element, dataName) {\n var regex, matches;\n var $body = _getBodyDom(element);\n if (dataName && $body && $body.length && $body.attr('class')) {\n regex = new RegExp(_prefix + dataName + '-([a-zA-Z0-9-._]*)');\n matches = $body.attr('class').match(regex);\n if (matches) {\n return matches[1];\n }\n }\n }\n\n /**\n * Provide a set of helper functions to set,retirve and manage string data to a container type qti element.\n */\n var container = {\n setEncodedData: setEncodedData,\n hasEncodedData: hasEncodedData,\n getEncodedData: getEncodedData,\n removeEncodedData: removeEncodedData,\n setEncodedDataToDom: setEncodedDataToDom\n };\n\n return container;\n\n});\n\n","define('taoQtiItem/qtiRunner/modalFeedback/inlineRenderer',['lodash', 'jquery', 'context', 'taoQtiItem/qtiItem/helper/pci', 'taoQtiItem/qtiItem/helper/container', 'handlebars', 'i18n', 'lib/dompurify/purify', 'iframeNotifier'], function (_, $$1, context, pci, containerHelper, Handlebars, __, DOMPurify, iframeNotifier) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $$1 = $$1 && Object.prototype.hasOwnProperty.call($$1, 'default') ? $$1['default'] : $$1;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n pci = pci && Object.prototype.hasOwnProperty.call(pci, 'default') ? pci['default'] : pci;\n containerHelper = containerHelper && Object.prototype.hasOwnProperty.call(containerHelper, 'default') ? containerHelper['default'] : containerHelper;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\n __ = __ && Object.prototype.hasOwnProperty.call(__, 'default') ? __['default'] : __;\n DOMPurify = DOMPurify && Object.prototype.hasOwnProperty.call(DOMPurify, 'default') ? DOMPurify['default'] : DOMPurify;\n iframeNotifier = iframeNotifier && Object.prototype.hasOwnProperty.call(iframeNotifier, 'default') ? iframeNotifier['default'] : iframeNotifier;\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) 2013-2019 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var Helpers0 = hb => {\n //register a i18n helper\n hb.registerHelper('__', function(key) {\n return __(key);\n });\n\n /**\n * Register dompurify helper\n *\n * https://github.com/cure53/DOMPurify\n * with config SAFE_FOR_TEMPLATES: true\n * to make output safe for template systems\n */\n hb.registerHelper('dompurify', function(context) {\n return DOMPurify.sanitize(context);\n });\n\n /**\n * Register join helper\n *\n * Example :\n * var values = {a:v1, b:v2, c:v3};\n * Using {{{join attributes '=' ' ' '\"'}}} will return : a=\"v1\" b=\"v2\" c=\"v3\"\n * Using {{{join values null ' or ' '*'}}} will return : *v1* or *v2* or *v3*\n */\n hb.registerHelper('join', function(arr, keyValueGlue, fragmentGlue, wrapper) {\n var fragments = [];\n\n keyValueGlue = typeof keyValueGlue === 'string' ? keyValueGlue : undefined;\n fragmentGlue = typeof fragmentGlue === 'string' ? fragmentGlue : ' ';\n wrapper = typeof wrapper === 'string' ? wrapper : '\"';\n\n _.forIn(arr, function(value, key) {\n var fragment = '';\n if (value !== null || value !== undefined) {\n if (typeof value === 'boolean') {\n value = value ? 'true' : 'false';\n } else if (typeof value === 'object') {\n value = _.values(value).join(' ');\n }\n } else {\n value = '';\n }\n if (keyValueGlue !== undefined) {\n fragment += key + keyValueGlue;\n }\n fragment += wrapper + value + wrapper;\n fragments.push(fragment);\n });\n\n return fragments.join(fragmentGlue);\n });\n\n //register a classic \"for loop\" helper\n //it also adds a local variable \"i\" as the index in each iteration loop\n hb.registerHelper('for', function(startIndex, stopIndex, increment, options) {\n var ret = '';\n startIndex = parseInt(startIndex);\n stopIndex = parseInt(stopIndex);\n increment = parseInt(increment);\n\n for (var i = startIndex; i < stopIndex; i += increment) {\n ret += options.fn(_.extend({}, this, { i: i }));\n }\n\n return ret;\n });\n\n hb.registerHelper('equal', function(var1, var2, options) {\n if (var1 == var2) {\n return options.fn(this);\n } else {\n return options.inverse(this);\n }\n });\n\n // register a \"get property\" helper\n // it gets the named property from the provided context\n hb.registerHelper('property', function(name, context) {\n return context[name] || '';\n });\n\n // register an 'includes' helper\n // it checks if value is in array\n hb.registerHelper('includes', function(haystack, needle, options) {\n if (_.contains(haystack, needle)) {\n return options.fn(this);\n }\n });\n };\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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 += \"<li class=\\\"small btn-info action action-button rgt\\\" id=\\\"preview-feedback-ok-button\\\">\\n <a class=\\\"li-inner\\\" href=\\\"#\\\">\\n <span class=\\\"label\\\">\"\n + escapeExpression((helper = helpers.__ || (depth0 && depth0.__),options={hash:{},data:data},helper ? helper.call(depth0, \"OK\", options) : helperMissing.call(depth0, \"__\", \"OK\", options)))\n + \"</span>\\n </a>\\n</li>\";\n return buffer;\n });\n function previewOkBtn(data, options, asString) {\n var html = Template(data, options);\n return (asString || true) ? html : $(html);\n }\n\n if (!Helpers0.__initialized) {\n Helpers0(Handlebars);\n Helpers0.__initialized = true;\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); \n\n\n return \"<li data-control=\\\"feedback-ok\\\" class=\\\"small btn-info action forward\\\" title=\\\"Feedback ok and ready to proceed.\\\">\\n <a class=\\\"li-inner\\\" href=\\\"#\\\">\\n <span class=\\\"icon-result-ok\\\"></span>\\n <span class=\\\"text\\\">OK</span>\\n </a>\\n</li>\";\n });\n function deliveryOkBtn(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) 2015 (original work) Open Assessment Techonologies SA;\n *\n */\n\n var timeout = (context.timeout > 0 ? context.timeout + 1 : 30) * 1000;\n\n /**\n * Main function for the module. It loads and render the feedbacks accodring to the given itemSession variables\n *\n * @param {Object} item - the standard tao qti item object\n * @param {Object} loader - the item loader instance\n * @param {Object} renderer - the item render instance\n * @param {Object} itemSession - session information containing the list of feedbacks to display\n * @param {Function} onCloseCallback - the callback to be executed when the feedbacks are closed\n * @param {Function} [onShowCallback] - the callback to be executed when the feedbacks are shown\n * @returns {Number} Number of feedbacks to be displayed\n */\n function showFeedbacks(item, loader, renderer, itemSession, onCloseCallback, onShowCallback) {\n var interactionsDisplayInfo = getInteractionsDisplayInfo(item);\n var messages = {};\n var renderedFeebacks = [];\n var renderingQueue = [];\n var $itemContainer = item.getContainer();\n var $itemBody = $itemContainer.children('.qti-itemBody');\n var firstFeedback;\n\n _.each(item.modalFeedbacks, function(feedback) {\n var feedbackIds, message, $container, comparedOutcome, _currentMessageGroupId, interactionInfo;\n var outcomeIdentifier = feedback.attr('outcomeIdentifier');\n var order = -1;\n\n //verify if the feedback should be displayed\n if (itemSession[outcomeIdentifier]) {\n //is the feedback in the list of feedbacks to be displayed ?\n feedbackIds = pci.getRawValues(itemSession[outcomeIdentifier]);\n if (_.indexOf(feedbackIds, feedback.id()) === -1) {\n return true; //continue with next feedback\n }\n\n //which group of feedbacks (interaction related) the feedback belongs to ?\n message = getFeedbackMessageSignature(feedback);\n comparedOutcome = containerHelper.getEncodedData(feedback, 'relatedOutcome');\n interactionInfo = _.find(interactionsDisplayInfo, { responseIdentifier: comparedOutcome });\n if (comparedOutcome && interactionInfo) {\n $container = interactionInfo.displayContainer;\n _currentMessageGroupId = interactionInfo.messageGroupId;\n order = interactionInfo.order;\n } else {\n $container = $itemBody;\n _currentMessageGroupId = '__item__';\n }\n //is this message already displayed ?\n if (!messages[_currentMessageGroupId]) {\n messages[_currentMessageGroupId] = [];\n }\n if (_.indexOf(messages[_currentMessageGroupId], message) >= 0) {\n return true; //continue\n } else {\n messages[_currentMessageGroupId].push(message);\n }\n\n //ok, display feedback\n renderingQueue.push({\n feedback: feedback,\n $container: $container,\n order: order\n });\n }\n });\n\n if (renderingQueue.length) {\n renderingQueue = _.sortBy(renderingQueue, 'order');\n\n //clear previously displayed feedbacks\n clearModalFeedbacks($itemContainer);\n\n //process rendering queue\n _.each(renderingQueue, function(renderingToken) {\n renderModalFeedback(\n renderingToken.feedback,\n loader,\n renderer,\n renderingToken.$container,\n $itemContainer,\n function(renderingData) {\n // keep the first feedback to force focus on it if needed\n if (!firstFeedback) {\n firstFeedback = $$1(renderingData.dom);\n }\n\n $$1('img', renderingData.dom).on('load', function() {\n iframeNotifier.parent('itemcontentchange');\n });\n\n //record rendered feedback for later reference\n renderedFeebacks.push(renderingData);\n if (renderedFeebacks.length === renderingQueue.length) {\n //rendering processing queue completed\n iframeNotifier.parent('itemcontentchange');\n\n // set the focus on the first feedback if needed\n // TODO: this is heavily related to the old TestRunner, with the ugly iframes.\n // To make this working, a search is made accross parent frames.\n // When the InlineFeedbacks will be ported to the new TestRunner, a strong improvement will be needed!\n if (firstFeedback) {\n autoscroll(firstFeedback);\n }\n\n //if an optional \"on show modal\" callback has been provided, execute it\n if (_.isFunction(onShowCallback)) {\n onShowCallback();\n }\n }\n }\n );\n });\n\n //if any feedback is displayed, replace the controls by a \"ok\" button\n replaceControl(renderedFeebacks, $itemContainer, onCloseCallback);\n }\n\n return renderingQueue.length;\n }\n\n /**\n * Gets the QTI Container element\n * @returns {jQuery|null}\n */\n function getQtiContainer() {\n var me = window;\n var $container = null;\n var max = 10;\n\n while (me && me.__knownParent__ && max--) {\n me = me.parent;\n if (me && me.$) {\n $container = me.$('#qti-content');\n if ($container.length) {\n return $container;\n }\n }\n }\n return null;\n }\n\n /**\n * Keeps an element visible inside the QTI container.\n * If the element is outside the container viewport, scroll to display it.\n * @param {String|jQuery|HTMLElement} element\n */\n function autoscroll(element) {\n var $element = $$1(element);\n var $container = getQtiContainer();\n var currentScrollTop, minScrollTop, maxScrollTop, scrollTop;\n\n if ($element.length && $container) {\n currentScrollTop = $container.scrollTop();\n maxScrollTop = $element.offset().top;\n minScrollTop = maxScrollTop - $container.height() + $element.outerHeight();\n scrollTop = Math.max(Math.min(maxScrollTop, currentScrollTop), minScrollTop);\n if (scrollTop !== currentScrollTop) {\n $container.animate({ scrollTop: scrollTop });\n }\n }\n }\n\n /**\n * Extract the display information for an interaction-related feedback\n *\n * @private\n * @param {Object} interaction - a qti interaction object\n * @returns {Object} Object containing useful display information\n */\n function extractDisplayInfo(interaction) {\n var $interactionContainer = interaction.getContainer();\n var responseIdentifier = interaction.attr('responseIdentifier');\n var messageGroupId, $displayContainer;\n\n if (interaction.is('inlineInteraction')) {\n $displayContainer = $interactionContainer.closest('[class*=\" col-\"], [class^=\"col-\"]');\n messageGroupId = $displayContainer.attr('data-messageGroupId');\n if (!messageGroupId) {\n //generate a messageFroupId\n messageGroupId = _.uniqueId('inline_message_group_');\n $displayContainer.attr('data-messageGroupId', messageGroupId);\n }\n } else {\n messageGroupId = responseIdentifier;\n $displayContainer = $interactionContainer;\n }\n\n return {\n responseIdentifier: responseIdentifier,\n interactionContainer: $interactionContainer,\n displayContainer: $displayContainer,\n messageGroupId: messageGroupId,\n order: -1\n };\n }\n\n /**\n * Get interaction display information sorted in the order of appearance within the item\n *\n * @param {Object} item\n * @returns {Array}\n */\n function getInteractionsDisplayInfo(item) {\n var interactionsDisplayInfo = [];\n var $itemContainer = item.getContainer();\n var interactionOrder = 0;\n\n //extract all interction related information needed to display their\n _.each(item.getComposingElements(), function(element) {\n var responseIdentifier;\n if (element.is('interaction')) {\n responseIdentifier = element.attr('responseIdentifier');\n interactionsDisplayInfo.push(extractDisplayInfo(element));\n }\n });\n\n //sort interactionsDisplayInfo on the item level\n $itemContainer.find('.qti-interaction').each(function() {\n var interactionContainer = this;\n _.each(interactionsDisplayInfo, function(_interactionInfo) {\n if (_interactionInfo.interactionContainer[0] === interactionContainer) {\n _interactionInfo.order = interactionOrder;\n return false;\n }\n });\n interactionOrder++;\n });\n interactionsDisplayInfo = _.sortBy(interactionsDisplayInfo, 'order');\n\n return interactionsDisplayInfo;\n }\n\n /**\n * Remove previously displayed feedbacks contained in the given container element\n *\n * @param {JQuery} $itemContainer\n */\n function clearModalFeedbacks($itemContainer) {\n $itemContainer.find('.qti-modalFeedback').remove();\n }\n\n /**\n * Render a modal feedback into a given container, scoped within an item container\n *\n * @private\n * @param {type} feedback - feedback object\n * @param {type} loader - loader instance\n * @param {type} renderer - renderer instance\n * @param {JQuery} $container - the targeted feedback container\n * @param {JQuery} $itemContainer - the item container\n * @param {type} renderedCallback - callback when the feedback has been rendered\n * @returns {undefined}\n */\n function renderModalFeedback(feedback, loader, renderer, $container, $itemContainer, renderedCallback) {\n //load (potential) new qti classes used in the modal feedback (e.g. math, img)\n renderer.load(function() {\n //render the modal feedback\n var $modalFeedback = $$1(\n feedback.render({\n inline: true\n })\n );\n var done = function done() {\n renderedCallback({\n identifier: feedback.id(),\n serial: feedback.getSerial(),\n dom: $modalFeedback\n });\n };\n $container.append($modalFeedback);\n\n // Race between postRendering and timeout\n // postRendering waits for everything to be resolved or one reject\n Promise.race([\n Promise.all(\n _.map(feedback.getComposingElements(), function(elt) {\n //render also internal elements, such as math or img\n return elt.postRender({}, '', renderer).pop();\n })\n ),\n new Promise(function(resolve, reject) {\n _.delay(reject, timeout, new Error('Post rendering ran out of time.'));\n })\n ])\n .then(done)\n .catch(function(err) {\n //in case of postRendering issue, we are also done\n done();\n throw new Error('Error in post rendering : ' + err);\n });\n }, loader.getLoadedClasses());\n }\n\n /**\n * Replace the controls in the running environment with an \"OK\" button to trigger the end of the feedback state\n *\n * @private\n * @todo FIX ME ! replace the hack to preview and delivery toolbar with a proper plugin in the new test runner is ready\n * @param {Array} renderedFeebacks\n * @param {JQuery} $itemContainer\n * @param {Function} callback\n */\n function replaceControl(renderedFeebacks, $itemContainer, callback) {\n var $scope, $controls, $toggleContainer;\n if (window.parent && window.parent.parent && window.parent.parent.$) {\n if ($itemContainer.parents('.tao-preview-scope').length) {\n //preview mode\n $scope = window.parent.parent.$('#preview-console');\n $controls = $scope.find('.preview-console-header .action-bar li:visible');\n $toggleContainer = $scope.find('.console-button-action-bar');\n initControlToggle(renderedFeebacks, $itemContainer, $controls, $toggleContainer, previewOkBtn, callback);\n } else {\n //delivery delivery\n $scope = window.parent.parent.$('body.qti-test-scope .bottom-action-bar');\n $controls = $scope.find('li:visible');\n $toggleContainer = $scope.find('.navi-box-list');\n initControlToggle(renderedFeebacks, $itemContainer, $controls, $toggleContainer, deliveryOkBtn, callback);\n }\n } else {\n //not in an iframe, add to item body for now\n $scope = $itemContainer.find('#modalFeedbacks');\n initControlToggle(renderedFeebacks, $itemContainer, $$1(), $scope, previewOkBtn, callback);\n }\n }\n\n /**\n * Initialize the \"OK\" button to trigger the end of the feedback mode\n *\n * @private\n * @param {Array} renderedFeebacks\n * @param {JQuery} $itemContainer\n * @param {JQuery} $controls\n * @param {JQuery} $toggleContainer\n * @param {Function} toggleButtonTemplate\n * @param {Function} callback\n */\n function initControlToggle(\n renderedFeebacks,\n $itemContainer,\n $controls,\n $toggleContainer,\n toggleButtonTemplate,\n callback\n ) {\n var $ok = $$1(toggleButtonTemplate()).click(function() {\n //end feedback mode, hide feedbacks\n _.each(renderedFeebacks, function(fb) {\n fb.dom.hide();\n });\n\n //restore controls\n uncover([$itemContainer]);\n $ok.remove();\n $controls.show();\n\n //exec callback\n callback();\n });\n\n $controls.hide();\n $toggleContainer.append($ok);\n cover([$itemContainer]);\n }\n\n /**\n * Cover the given interaction containers with a transparent layer to prevent user interacting with the item\n * @private\n * @param {Array} interactionContainers\n */\n function cover(interactionContainers) {\n var $cover = $$1('<div class=\"interaction-cover modal-bg\">');\n _.each(interactionContainers, function($interaction) {\n $interaction.append($cover);\n });\n }\n\n /**\n * Remove the layer set by the function cover()\n * @private\n * @param {Array} interactionContainers\n */\n function uncover(interactionContainers) {\n _.each(interactionContainers, function($interaction) {\n $interaction.find('.interaction-cover').remove();\n });\n }\n\n /**\n * Provide the feedbackMessage signature to check if the feedback contents should be considered equals\n *\n * @param {type} feedback\n * @returns {String}\n */\n function getFeedbackMessageSignature(feedback) {\n return ('' + feedback.body() + feedback.attr('title'))\n .toLowerCase()\n .trim()\n .replace(/x-tao-[a-zA-Z0-9\\-._\\s]*/g, '');\n }\n\n var inlineRenderer = {\n showFeedbacks: showFeedbacks\n };\n\n return inlineRenderer;\n\n});\n\n","define('taoQtiItem/qtiRunner/modalFeedback/modalRenderer',['lodash', 'jquery', 'async', 'taoQtiItem/qtiItem/helper/pci'], function (_, $, async, pci) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n async = async && Object.prototype.hasOwnProperty.call(async, 'default') ? async['default'] : async;\n pci = pci && Object.prototype.hasOwnProperty.call(pci, 'default') ? pci['default'] : pci;\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 (original work) Open Assessment Techonologies SA;\n *\n */\n\n /**\n * Main function for the module. It loads and render the feedbacks accodring to the given itemSession variables\n *\n * @param {Object} item - the standard tao qti item object\n * @param {Object} loader - the item loader instance\n * @param {Object} renderer - the item render instance\n * @param {Object} itemSession - session information containing the list of feedbacks to display\n * @param {Function} onCloseCallback - the callback to be executed when the feedbacks are closed\n * @param {Function} [onShowCallback] - the callback to be executed when the feedbacks are shown\n * @returns {Number} Number of feedbacks to be displayed\n */\n function showFeedbacks(item, loader, renderer, itemSession, onCloseCallback, onShowCallback) {\n var count,\n messages = [],\n feedbacksToBeDisplayed = [];\n\n //find which modal feedbacks should be displayed according to the current item session:\n _.each(item.modalFeedbacks, function(feedback) {\n var feedbackIds, message;\n var outcomeIdentifier = feedback.attr('outcomeIdentifier');\n\n if (itemSession[outcomeIdentifier]) {\n feedbackIds = pci.getRawValues(itemSession[outcomeIdentifier]);\n message = getFeedbackMessageSignature(feedback);\n if (_.indexOf(feedbackIds, feedback.id()) >= 0 && _.indexOf(messages, message) === -1) {\n //check content if is already in the display queue\n feedbacksToBeDisplayed.push(feedback);\n messages.push(message);\n }\n }\n });\n\n //record the number of feedbacks to be displayed:\n count = feedbacksToBeDisplayed.length;\n if (count) {\n //show in reverse order\n var callstack = [];\n\n //iterate from the right because the modal popup will pile up.\n _.eachRight(feedbacksToBeDisplayed, function(feedback) {\n //the end callback should be executed to the last displayed modal, which is the last displayed one\n var endCallback;\n if (callstack.length === 0) {\n endCallback = function() {\n onCloseCallback();\n };\n }\n\n callstack.push(function(cb) {\n renderModalFeedback(\n feedback,\n loader,\n renderer,\n function() {\n cb(null);\n },\n endCallback\n );\n });\n });\n\n async.series(callstack, function() {\n //all modal are ready and displayed\n if (_.isFunction(onShowCallback)) {\n onShowCallback();\n }\n });\n }\n\n return count;\n }\n\n /**\n * Render modal feedback as a modal popup\n *\n * @param {Object} feedback - object\n * @param {Object} loader - loader instance\n * @param {Object} renderer - renderer instance\n * @param {Function} [closeCallback] - feedback to be executed when the popop closes\n * @returns {undefined}\n */\n function renderModalFeedback(feedback, loader, renderer, renderedCallback, closeCallback) {\n var $feedback,\n $feedbackBox = $('#modalFeedbacks'); //feedback.getItem().getContainer().find('#')\n\n if (feedback.is('modalFeedback')) {\n //load (potential) new qti classes used in the modal feedback (e.g. math, img)\n renderer.load(function() {\n $feedback = $feedbackBox.find('#' + feedback.getSerial());\n if (!$feedback.length) {\n //render the modal feedback\n $feedback = feedback.render();\n $feedbackBox.append($feedback);\n } else {\n $feedback.modal();\n }\n\n renderedCallback();\n\n feedback.postRender({\n callback: closeCallback\n });\n }, loader.getLoadedClasses());\n }\n }\n\n /**\n * Provide the feedbackMessage signature to check if the feedback contents should be considered equals\n *\n * @param {type} feedback\n * @returns {String}\n */\n function getFeedbackMessageSignature(feedback) {\n return ('' + feedback.body() + feedback.attr('title'))\n .toLowerCase()\n .trim()\n .replace(/x-tao-[a-zA-Z0-9\\-._\\s]*/g, '');\n }\n\n var modalRenderer = {\n showFeedbacks: showFeedbacks\n };\n\n return modalRenderer;\n\n});\n\n","define('taoQtiItem/qtiRunner/core/QtiRunner',['jquery', 'lodash', 'context', 'module', 'iframeNotifier', 'taoQtiItem/qtiItem/core/Loader', 'taoQtiItem/qtiRunner/modalFeedback/inlineRenderer', 'taoQtiItem/qtiRunner/modalFeedback/modalRenderer'], function ($, _, context, module, iframeNotifier, ItemLoader, modalFeedbackInline, modalFeedbackModal) { 'use strict';\n\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n iframeNotifier = iframeNotifier && Object.prototype.hasOwnProperty.call(iframeNotifier, 'default') ? iframeNotifier['default'] : iframeNotifier;\n ItemLoader = ItemLoader && Object.prototype.hasOwnProperty.call(ItemLoader, 'default') ? ItemLoader['default'] : ItemLoader;\n modalFeedbackInline = modalFeedbackInline && Object.prototype.hasOwnProperty.call(modalFeedbackInline, 'default') ? modalFeedbackInline['default'] : modalFeedbackInline;\n modalFeedbackModal = modalFeedbackModal && Object.prototype.hasOwnProperty.call(modalFeedbackModal, 'default') ? modalFeedbackModal['default'] : modalFeedbackModal;\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) 2013 (original work) Open Assessment Techonologies SA (under the project TAO-PRODUCT);\n *\n *\n */\n\n var timeout = (context.timeout > 0 ? context.timeout + 1 : 30) * 1000;\n\n var QtiRunner = function() {\n this.item = null;\n this.rpEngine = null;\n this.renderer = null;\n this.loader = null;\n this.itemApi = undefined;\n };\n\n QtiRunner.prototype.updateItemApi = function() {\n var responses = this.getResponses();\n var states = this.getStates();\n var variables = [];\n // Transform responses into state variables.\n for (var key in states) {\n var value = states[key];\n // This is where we set variables that will be collected and stored\n // as the Item State. We do not want to store large files into\n // the state, and force the client to download these files\n // all over again. We then transform them as a place holder, that will\n // simply indicate that a file composes the state.\n\n if (value.response && typeof value.response.base !== 'undefined') {\n for (var property in value.response.base) {\n if (property === 'file') {\n var file = value.response.base.file;\n // QTI File found! Replace it with an appropriate placeholder.\n // The data is base64('qti_file_datatype_placeholder_data')\n value.response = {\n base: {\n file: {\n name: file.name,\n mime: 'qti+application/octet-stream',\n data: 'cXRpX2ZpbGVfZGF0YXR5cGVfcGxhY2Vob2xkZXJfZGF0YQ=='\n }\n }\n };\n }\n }\n }\n\n variables[key] = value;\n }\n\n //set all variables at once\n this.itemApi.setVariables(variables);\n\n // Save the responses that will be used for response processing.\n this.itemApi.saveResponses(responses);\n this.itemApi.resultApi.setQtiRunner(this);\n };\n\n QtiRunner.prototype.setItemApi = function(itemApi) {\n this.itemApi = itemApi;\n var that = this;\n var oldStateVariables = JSON.stringify(itemApi.stateVariables);\n\n itemApi.onKill(function(killCallback) {\n // If the responses did not change,\n // just close gracefully.\n\n // Collect new responses and update item API.\n that.updateItemApi();\n var newStateVariables = JSON.stringify(itemApi.stateVariables);\n\n // Store the results.\n if (oldStateVariables !== newStateVariables || itemApi.serviceApi.getHasBeenPaused()) {\n itemApi.submit(function() {\n // Send successful signal.\n itemApi.serviceApi.setHasBeenPaused(false);\n killCallback(0);\n });\n } else {\n killCallback(0);\n }\n });\n };\n\n QtiRunner.prototype.setRenderer = function(renderer) {\n if (renderer.isRenderer) {\n this.renderer = renderer;\n } else {\n throw 'invalid renderer';\n }\n };\n\n QtiRunner.prototype.getLoader = function() {\n if (!this.loader) {\n this.loader = new ItemLoader();\n }\n return this.loader;\n };\n\n QtiRunner.prototype.loadItemData = function(data, callback) {\n var self = this;\n this.getLoader().loadItemData(data, function(item) {\n self.item = item;\n callback(self.item);\n });\n };\n\n QtiRunner.prototype.loadElements = function(elements, callback) {\n if (this.getLoader().item) {\n this.getLoader().loadElements(elements, callback);\n } else {\n throw 'QtiRunner : cannot load elements in empty item';\n }\n };\n\n QtiRunner.prototype.renderItem = function(data, done) {\n var self = this;\n\n done = _.isFunction(done) ? done : _.noop;\n\n var render = function() {\n if (!self.item) {\n throw 'cannot render item: empty item';\n }\n if (self.renderer) {\n self.renderer.load(function() {\n self.item.setRenderer(self.renderer);\n self.item.render({}, $('#qti_item'));\n\n // Race between postRendering and timeout\n // postRendering waits for everything to be resolved or one reject\n Promise.race([\n Promise.all(self.item.postRender()),\n new Promise(function(resolve, reject) {\n _.delay(reject, timeout, new Error('Post rendering ran out of time.'));\n })\n ])\n .then(function() {\n self.item.getContainer().on('responseChange', function(e, data) {\n if (data.interaction && data.interaction.attr('responseIdentifier') && data.response) {\n iframeNotifier.parent('responsechange', [\n data.interaction.attr('responseIdentifier'),\n data.response\n ]);\n }\n });\n\n self.initInteractionsResponse();\n self.listenForThemeChange();\n done();\n })\n .catch(function(err) {\n //in case of postRendering issue, we are also done\n done();\n\n throw new Error('Error in post rendering : ' + err);\n });\n }, self.getLoader().getLoadedClasses());\n } else {\n throw 'cannot render item: no rendered set';\n }\n };\n\n if (typeof data === 'object') {\n this.loadItemData(data, render);\n } else {\n render();\n }\n };\n\n QtiRunner.prototype.initInteractionsResponse = function() {\n var self = this;\n if (self.item) {\n var interactions = self.item.getInteractions();\n for (var i in interactions) {\n var interaction = interactions[i];\n var responseId = interaction.attr('responseIdentifier');\n self.itemApi.getVariable(responseId, function(values) {\n if (values) {\n interaction.setState(values);\n iframeNotifier.parent('stateready', [responseId, values]);\n } else {\n var states = self.getStates();\n if (_.indexOf(states, responseId)) {\n self.itemApi.setVariable(responseId, states[responseId]);\n interaction.setState(states[responseId]);\n iframeNotifier.parent('stateready', [responseId, states[responseId]]);\n }\n }\n });\n }\n }\n };\n\n /**\n * If an event 'themechange' bubbles to \"#qti_item\" node\n * then we tell the renderer to switch the theme.\n */\n QtiRunner.prototype.listenForThemeChange = function listenForThemeChange() {\n var self = this;\n var $container = this.renderer.getContainer(this.item);\n if (!$container.length) {\n $container = $('.qti-item');\n }\n $container.off('themechange').on('themechange', function(e, themeName) {\n var themeLoader = self.renderer.getThemeLoader();\n themeName = themeName || e.originalEvent.detail;\n if (themeLoader) {\n themeLoader.change(themeName);\n }\n });\n };\n\n QtiRunner.prototype.validate = function() {\n this.updateItemApi();\n this.itemApi.finish();\n };\n\n QtiRunner.prototype.getResponses = function() {\n var responses = {};\n var interactions = this.item.getInteractions();\n\n _.forEach(interactions, function(interaction) {\n var response = {};\n try {\n response = interaction.getResponse();\n } catch (e) {\n console.error(e);\n }\n responses[interaction.attr('responseIdentifier')] = response;\n });\n\n return responses;\n };\n\n QtiRunner.prototype.getStates = function() {\n var states = {};\n var interactions = this.item.getInteractions();\n\n _.forEach(interactions, function(interaction) {\n var state = {};\n try {\n state = interaction.getState();\n } catch (e) {\n console.error(e);\n }\n states[interaction.attr('responseIdentifier')] = state;\n });\n\n return states;\n };\n\n QtiRunner.prototype.setResponseProcessing = function(callback) {\n this.rpEngine = callback;\n };\n\n QtiRunner.prototype.showFeedbacks = function(itemSession, callback, onShowCallback) {\n var inlineDisplay = !!module.config().inlineModalFeedback;\n\n //currently only modal feedbacks are available\n if (inlineDisplay) {\n return modalFeedbackInline.showFeedbacks(\n this.item,\n this.getLoader(),\n this.renderer,\n itemSession,\n callback,\n onShowCallback\n );\n } else {\n return modalFeedbackModal.showFeedbacks(\n this.item,\n this.getLoader(),\n this.renderer,\n itemSession,\n callback,\n onShowCallback\n );\n }\n };\n\n return QtiRunner;\n\n});\n\n","define('taoQtiItem/qtiItem/helper/interactionHelper',['lodash', 'taoQtiItem/qtiItem/core/Element'], function (_, Element) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n\n /**\n * Common helper functions\n */\n var interactionHelper = {\n convertChoices: function(choices, outputType) {\n var ret = [],\n _this = this;\n\n _.each(choices, function(c) {\n if (Element.isA(c, 'choice')) {\n switch (outputType) {\n case 'serial':\n ret.push(c.getSerial());\n break;\n case 'identifier':\n ret.push(c.id());\n break;\n default:\n ret.push(c);\n }\n } else if (_.isArray(c)) {\n ret.push(_this.convertChoices(c, outputType));\n }\n });\n\n return ret;\n },\n findChoices: function(interaction, choices, inputType) {\n var ret = [],\n _this = this;\n\n _.each(choices, function(c) {\n var choice;\n if (_.isString(c)) {\n if (inputType === 'serial') {\n choice = interaction.getChoice(c);\n if (choice) {\n ret.push(choice);\n }\n } else if (inputType === 'identifier') {\n choice = interaction.getChoiceByIdentifier(c);\n if (choice) {\n ret.push(choice);\n }\n } else {\n ret.push(c);\n }\n } else if (_.isArray(c)) {\n ret.push(_this.findChoices(interaction, c, inputType));\n } else {\n ret.push(c);\n }\n });\n\n return ret;\n },\n shuffleChoices: function(choices) {\n var r = [], //returned array\n f = {}, //fixed choices array\n j = 0;\n\n for (var i in choices) {\n if (Element.isA(choices[i], 'choice')) {\n var choice = choices[i];\n if (choice.attr('fixed')) {\n f[j] = choice;\n }\n r.push(choice);\n j++;\n } else {\n throw 'invalid element in array: is not a qti choice';\n }\n }\n\n for (var n = 0; n < r.length - 1; n++) {\n if (f[n]) {\n continue;\n }\n var k = -1;\n do {\n k = n + Math.floor(Math.random() * (r.length - n));\n } while (f[k]);\n var tmp = r[k];\n r[k] = r[n];\n r[n] = tmp;\n }\n\n return r;\n },\n serialToIdentifier: function(interaction, choiceSerial) {\n var choice = interaction.getChoice(choiceSerial);\n if (choice) {\n return choice.id();\n } else {\n return '';\n }\n }\n };\n\n return interactionHelper;\n\n});\n\n","define('taoQtiItem/qtiRunner/core/Renderer',['lodash', 'jquery', 'taoQtiItem/qtiItem/core/Element', 'taoQtiItem/qtiItem/helper/interactionHelper', 'ui/themeLoader', 'ui/themes', 'core/moduleLoader', 'handlebars'], function (_, $, Element, interactionHelper, themeLoader, themesHelper, moduleLoader, Handlebars) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n $ = $ && Object.prototype.hasOwnProperty.call($, 'default') ? $['default'] : $;\n Element = Element && Object.prototype.hasOwnProperty.call(Element, 'default') ? Element['default'] : Element;\n interactionHelper = interactionHelper && Object.prototype.hasOwnProperty.call(interactionHelper, 'default') ? interactionHelper['default'] : interactionHelper;\n themeLoader = themeLoader && Object.prototype.hasOwnProperty.call(themeLoader, 'default') ? themeLoader['default'] : themeLoader;\n themesHelper = themesHelper && Object.prototype.hasOwnProperty.call(themesHelper, 'default') ? themesHelper['default'] : themesHelper;\n moduleLoader = moduleLoader && Object.prototype.hasOwnProperty.call(moduleLoader, 'default') ? moduleLoader['default'] : moduleLoader;\n Handlebars = Handlebars && Object.prototype.hasOwnProperty.call(Handlebars, 'default') ? Handlebars['default'] : Handlebars;\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) 2014 (original work) Open Assessment Technlogies SA (under the project TAO-PRODUCT);\n *\n */\n\n //webpack trick : handlebar is usale only from cjs.\n //but anyway we should deprecate the practice to invoke\n //directly Handlebars at runtimej\n let hb = Handlebars;\n if(typeof hb.compile !== 'function'){\n hb = require('handlebars');\n }\n\n var _isValidRenderer = function(renderer) {\n var valid = true;\n\n if (typeof renderer !== 'object') {\n return false;\n }\n\n var classCorrect = false;\n if (renderer.qtiClass) {\n if (_.indexOf(_renderableClasses, renderer.qtiClass) >= 0) {\n classCorrect = true;\n } else {\n var pos = renderer.qtiClass.indexOf('.');\n if (pos > 0) {\n var qtiClass = renderer.qtiClass.slice(0, pos);\n var subClass = renderer.qtiClass.slice(pos + 1);\n if (_renderableSubclasses[qtiClass] && _.indexOf(_renderableSubclasses[qtiClass], subClass) >= 0) {\n classCorrect = true;\n }\n }\n }\n }\n if (!classCorrect) {\n valid = false;\n throw new Error('invalid qti class name in renderer declaration : ' + renderer.qtiClass);\n }\n\n if (!renderer.template) {\n valid = false;\n throw new Error('missing template in renderer declaration : ' + renderer.qtiClass);\n }\n\n return valid;\n };\n\n var _renderableClasses = [\n '_container',\n 'assessmentItem',\n 'stylesheet',\n 'responseDeclaration',\n 'outcomeDeclaration',\n 'responseProcessing',\n '_simpleFeedbackRule',\n '_tooltip',\n 'img',\n 'math',\n 'object',\n 'table',\n 'modalFeedback',\n 'rubricBlock',\n 'associateInteraction',\n 'choiceInteraction',\n 'extendedTextInteraction',\n 'gapMatchInteraction',\n 'graphicAssociateInteraction',\n 'graphicGapMatchInteraction',\n 'graphicOrderInteraction',\n 'hotspotInteraction',\n 'hottextInteraction',\n 'inlineChoiceInteraction',\n 'matchInteraction',\n 'mediaInteraction',\n 'orderInteraction',\n 'selectPointInteraction',\n 'sliderInteraction',\n 'textEntryInteraction',\n 'uploadInteraction',\n 'endAttemptInteraction',\n 'customInteraction',\n 'prompt',\n 'associableHotspot',\n 'gap',\n 'gapImg',\n 'gapText',\n 'hotspotChoice',\n 'hottext',\n 'inlineChoice',\n 'simpleAssociableChoice',\n 'simpleChoice',\n 'infoControl',\n 'include',\n 'printedVariable'\n ];\n\n /**\n * The list of qti element dependencies. It is used internally to load dependent qti classes\n */\n var _dependencies = {\n assessmentItem: ['stylesheet', '_container', 'prompt', 'modalFeedback'],\n rubricBlock: ['_container'],\n associateInteraction: ['simpleAssociableChoice'],\n choiceInteraction: ['simpleChoice'],\n gapMatchInteraction: ['gap', 'gapText'],\n graphicAssociateInteraction: ['associableHotspot'],\n graphicGapMatchInteraction: ['associableHotspot', 'gapImg'],\n graphicOrderInteraction: ['hotspotChoice'],\n hotspotInteraction: ['hotspotChoice'],\n hottextInteraction: ['hottext'],\n inlineChoiceInteraction: ['inlineChoice'],\n matchInteraction: ['simpleAssociableChoice'],\n orderInteraction: ['simpleChoice']\n };\n\n /**\n * The list of supported qti subclasses.\n */\n var _renderableSubclasses = {\n simpleAssociableChoice: ['associateInteraction', 'matchInteraction'],\n simpleChoice: ['choiceInteraction', 'orderInteraction']\n };\n\n /**\n * List of the default properties for the item\n */\n var _defaults = {\n shuffleChoices: true\n };\n\n /**\n * Get the location of the document, useful to define a baseUrl for the required context\n * @returns {String}\n */\n function getDocumentBaseUrl() {\n return window.location.protocol + '//' + window.location.host + window.location.pathname.replace(/([^\\/]*)$/, '');\n }\n\n /**\n * The built Renderer class\n * @constructor\n * @param {Object} [options] - the renderer options\n * @param {AssetManager} [options.assetManager] - The renderer needs an AssetManager to resolve URLs (see {@link taoItems/assets/manager})\n * @param {Boolean} [options.shuffleChoices = true] - Does the renderer take care of the shuffling\n * @param {Object} [options.decorators] - to set up rendering decorator\n * @param {preRenderDecorator} [options.decorators.before] - to set up a pre decorator\n * @param {postRenderDecorator} [options.decorators.after] - to set up a post decorator\n */\n var Renderer = function(options) {\n /**\n * Store the registered renderer location\n */\n var _locations = {};\n\n /**\n * Store loaded renderers\n */\n var _renderers = {};\n\n options = _.defaults(options || {}, _defaults);\n\n this.isRenderer = true;\n\n this.name = '';\n\n //store shuffled choice here\n this.shuffledChoices = [];\n\n /**\n * Get the actual renderer of the give qti class or subclass:\n * e.g. simplceChoice, simpleChoice.choiceInteraction, simpleChoice.orderInteraction\n */\n var _getClassRenderer = function(qtiClass) {\n var ret = null;\n if (_renderers[qtiClass]) {\n ret = _renderers[qtiClass];\n } else {\n var pos = qtiClass.indexOf('.');\n if (pos > 0) {\n qtiClass = qtiClass.slice(0, pos);\n if (_renderers[qtiClass]) {\n ret = _renderers[qtiClass];\n }\n }\n }\n return ret;\n };\n\n /**\n * Registers a QTI renderer class\n * @param {String} qtiClass\n * @param {Array} list\n * @returns {Boolean} `true` if the class has been successfully registered\n */\n function registerRendererClass(qtiClass, list) {\n var success = false;\n if (_locations[qtiClass] === false) {\n //mark this class as not renderable\n _renderers[qtiClass] = false;\n success = true;\n } else if (_locations[qtiClass]) {\n list.push(_locations[qtiClass]);\n success = true;\n }\n return success;\n }\n\n /**\n * Set the renderer options\n * @param {String} key - the name of the option\n * @param {*} value - the option vallue\n * @returns {Renderer} for chaining\n */\n this.setOption = function(key, value) {\n if (typeof key === 'string') {\n options[key] = value;\n }\n return this;\n };\n\n /**\n * Set the renderer options\n * @param {Object} opts - the options\n * @returns {Renderer} for chaining\n */\n this.setOptions = function(opts) {\n options = _.extend(options, opts);\n return this;\n };\n\n /**\n * Get the renderer option\n * @param {String} key - the name of the option\n * @returns {*|null} the option vallue\n */\n this.getOption = function(key) {\n if (typeof key === 'string' && options[key]) {\n return options[key];\n }\n return null;\n };\n\n this.getCustomMessage = function getCustomMessage(elementName, messageKey) {\n var messages = this.getOption('messages');\n if (messages && elementName && messages[elementName] && _.isString(messages[elementName][messageKey])) {\n //currently not translatable but potentially could be if the need raises\n return hb.compile(messages[elementName][messageKey]);\n } else {\n return null;\n }\n };\n\n /**\n * Get the bound assetManager\n * @returns {AssetManager} the assetManager\n */\n this.getAssetManager = function getAssetManager() {\n return options.assetManager;\n };\n\n /**\n * Get the bound theme loader\n * @returns {Object} the themeLoader\n */\n this.getThemeLoader = function getThemeLoader() {\n return this.themeLoader;\n };\n\n /**\n * Renders the template\n * @param {Object} element - the QTI model element\n * @param {Object} data - the data to give to the template\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the template results\n * @throws {Error} if the renderer is not set or has no template bound\n */\n this.renderTpl = function(element, data, qtiSubclass) {\n var res;\n var ret = '';\n var qtiClass = qtiSubclass || element.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n var decorators = this.getOption('decorators');\n\n if (!renderer || !_.isFunction(renderer.template)) {\n throw new Error('no renderer template loaded under the class name : ' + qtiClass);\n }\n\n //pre rendering decoration\n if (_.isObject(decorators) && _.isFunction(decorators.before)) {\n /**\n * @callback preRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.before(element, qtiSubclass);\n if (_.isString(res)) {\n ret += res;\n }\n }\n\n //render the template\n ret += renderer.template(data);\n\n //post rendering decoration\n if (_.isObject(decorators) && _.isFunction(decorators.after)) {\n /**\n * @callback postRenderDecoractor\n * @param {Object} element - the QTI model element\n * @param {String} [qtiSubclass] - to get the render of the element subclass (when element's qtiClass is abstract)\n * @returns {String} the decorator result\n */\n res = decorators.after(element, qtiSubclass);\n if (_.isString(res)) {\n ret += res;\n }\n }\n return ret;\n };\n\n this.getData = function(element, data, qtiSubclass) {\n var ret = data,\n qtiClass = qtiSubclass || element.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.getData === 'function') {\n ret = renderer.getData.call(this, element, data);\n }\n }\n\n return ret;\n };\n\n this.renderDirect = function(tpl, data) {\n return hb.compile(tpl)(data);\n };\n\n this.getContainer = function(qtiElement, $scope, qtiSubclass) {\n var ret = null,\n qtiClass = qtiSubclass || qtiElement.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n ret = renderer.getContainer(qtiElement, $scope);\n } else {\n throw 'no renderer found for the class : ' + qtiElement.qtiClass;\n }\n return ret;\n };\n\n this.postRender = function(qtiElement, data, qtiSubclass) {\n var qtiClass = qtiSubclass || qtiElement.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer && typeof renderer.render === 'function') {\n return renderer.render.call(this, qtiElement, data);\n }\n };\n\n this.setResponse = function(qtiInteraction, response, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.setResponse === 'function') {\n ret = renderer.setResponse.call(this, qtiInteraction, response);\n var $container = renderer.getContainer.call(this, qtiInteraction);\n if ($container instanceof $ && $container.length) {\n $container.trigger('responseSet', [qtiInteraction, response]);\n }\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getResponse = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.getResponse === 'function') {\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.resetResponse = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (typeof renderer.resetResponse === 'function') {\n ret = renderer.resetResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n * @returns {Object} the interaction's state\n *\n * @throws {Error} if no renderer is registered\n */\n this.getState = function(qtiInteraction, qtiSubclass) {\n var ret = false;\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.getState)) {\n ret = renderer.getState.call(this, qtiInteraction);\n } else {\n ret = renderer.getResponse.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n /**\n * Retrieve the state of the interaction.\n * If the renderer has no state management, it falls back to the response management.\n *\n * @param {Object} qtiInteraction - the interaction\n * @param {Object} state - the interaction's state\n * @param {String} [qtiSubClass] - (not sure of the type and how it is used - Sam ? )\n *\n * @throws {Error} if no renderer is found\n */\n this.setState = function(qtiInteraction, state, qtiSubclass) {\n var qtiClass = qtiSubclass || qtiInteraction.qtiClass;\n var renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.setState)) {\n renderer.setState.call(this, qtiInteraction, state);\n } else {\n renderer.resetResponse.call(this, qtiInteraction);\n renderer.setResponse.call(this, qtiInteraction, state);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n };\n\n /**\n * Calls the renderer destroy.\n * Ask the renderer to run destroy if exists.\n *\n * @throws {Error} if no renderer is found\n */\n this.destroy = function(qtiInteraction, qtiSubclass) {\n var ret = false,\n qtiClass = qtiSubclass || qtiInteraction.qtiClass,\n renderer = _getClassRenderer(qtiClass);\n\n if (renderer) {\n if (_.isFunction(renderer.destroy)) {\n ret = renderer.destroy.call(this, qtiInteraction);\n }\n } else {\n throw 'no renderer registered under the name : ' + qtiClass;\n }\n return ret;\n };\n\n this.getLoadedRenderers = function() {\n return _renderers;\n };\n\n this.register = function(renderersLocations) {\n _.extend(_locations, renderersLocations);\n };\n\n this.load = function(callback, requiredClasses) {\n var self = this;\n var required = [];\n\n var themeData = themesHelper.getCurrentThemeData();\n if (themeData) {\n options.themes = themeData;\n }\n if (options.themes) {\n //resolve themes paths\n options.themes.base = this.resolveUrl(options.themes.base);\n _.forEach(options.themes.available, function(theme, index) {\n options.themes.available[index].path = self.resolveUrl(theme.path);\n });\n this.themeLoader = themeLoader(options.themes).load(options.preload);\n }\n\n if (requiredClasses) {\n if (_.isArray(requiredClasses)) {\n //exclude abstract classes\n requiredClasses = _.intersection(requiredClasses, _renderableClasses);\n\n //add dependencies\n _.each(requiredClasses, function(reqClass) {\n var deps = _dependencies[reqClass];\n if (deps) {\n requiredClasses = _.union(requiredClasses, deps);\n }\n });\n\n _.forEach(requiredClasses, function(qtiClass) {\n var requiredSubClasses;\n if (_renderableSubclasses[qtiClass]) {\n requiredSubClasses = _.intersection(requiredClasses, _renderableSubclasses[qtiClass]);\n _.each(requiredSubClasses, function(subclass) {\n if (\n !registerRendererClass(qtiClass + '.' + subclass, required) &&\n !registerRendererClass(qtiClass, required)\n ) {\n throw new Error(\n self.name +\n ' : missing qti class location declaration: ' +\n qtiClass +\n ', subclass: ' +\n subclass\n );\n }\n });\n } else {\n if (!registerRendererClass(qtiClass, required)) {\n throw new Error(self.name + ' : missing qti class location declaration: ' + qtiClass);\n }\n }\n });\n } else {\n throw new Error('invalid argument type: expected array for arg \"requireClasses\"');\n }\n } else {\n required = _.values(_locations);\n }\n\n moduleLoader([], ()=> true)\n .addList( required.map( module => ({ module, category: 'qti'}) ) )\n .load()\n .then( loaded => {\n loaded.forEach( clazz => {\n if (_isValidRenderer(clazz)) {\n _renderers[clazz.qtiClass] = clazz;\n }\n\n });\n if (typeof callback === 'function') {\n callback.call(self, _renderers);\n }\n });\n\n return this;\n };\n\n /**\n * Unload the renderer\n */\n this.unload = function unload() {\n if (this.themeLoader) {\n themeLoader(options.themes).unload();\n }\n return this;\n };\n\n /**\n * Define the shuffling manually\n *\n * @param {Object} interaction - the interaction\n * @param {Array} choices - the shuffled choices\n * @param {String} identificationType -\n */\n this.setShuffledChoices = function(interaction, choices, identificationType) {\n if (Element.isA(interaction, 'interaction')) {\n this.shuffledChoices[interaction.getSerial()] = _.pluck(\n interactionHelper.findChoices(interaction, choices, identificationType),\n 'serial'\n );\n }\n };\n\n /**\n * Get the choices shuffled for this interaction.\n *\n * @param {Object} interaction - the interaction\n * @param {Boolean} reshuffle - by default choices are shuffled only once and store, but if true you can force shuffling again\n * @param {String} returnedType - the choice type\n * @returns {Array} the choices\n */\n this.getShuffledChoices = function(interaction, reshuffle, returnedType) {\n var choices = [];\n var serial, i;\n\n if (Element.isA(interaction, 'interaction')) {\n serial = interaction.getSerial();\n\n //1st time, we shuffle (or asked to force shuffling)\n if (!this.shuffledChoices[serial] || reshuffle) {\n if (Element.isA(interaction, 'matchInteraction')) {\n this.shuffledChoices[serial] = [];\n for (i = 0; i < 2; i++) {\n choices[i] = interactionHelper.shuffleChoices(interaction.getChoices(i));\n this.shuffledChoices[serial][i] = _.pluck(choices[i], 'serial');\n }\n } else {\n choices = interactionHelper.shuffleChoices(interaction.getChoices());\n this.shuffledChoices[serial] = _.pluck(choices, 'serial');\n }\n\n //otherwise get the choices from the serials\n } else {\n if (Element.isA(interaction, 'matchInteraction')) {\n _.forEach(choices, function(choice, index) {\n if (index < 2) {\n _.forEach(this.shuffledChoices[serial][i], function(choiceSerial) {\n choice.push(interaction.getChoice(choiceSerial));\n });\n }\n });\n } else {\n _.forEach(this.shuffledChoices[serial], function(choiceSerial) {\n choices.push(interaction.getChoice(choiceSerial));\n });\n }\n }\n\n //do some type convertion\n if (returnedType === 'serial' || returnedType === 'identifier') {\n return interactionHelper.convertChoices(choices, returnedType);\n }\n\n //pass value only, not ref\n return _.clone(choices);\n }\n\n return [];\n };\n\n this.getRenderers = function() {\n return _renderers;\n };\n\n this.getLocations = function() {\n return _locations;\n };\n\n /**\n * Resolve URLs using the defined assetManager's strategies\n * @param {String} url - the URL to resolve\n * @returns {String} the resolved URL\n */\n this.resolveUrl = function resolveUrl(url) {\n if (!options.assetManager) {\n return url;\n }\n if (typeof url === 'string' && url.length > 0) {\n return options.assetManager.resolve(url);\n }\n };\n\n /**\n * @deprecated in favor of resolveUrl\n */\n this.getAbsoluteUrl = function(relUrl) {\n //let until method is removed\n console.warn('DEPRECATED used getAbsoluteUrl with ', arguments);\n\n //allow relative url output only if explicitely said so\n if (this.getOption('userRelativeUrl')) {\n return relUrl.replace(/^\\.?\\//, '');\n }\n\n if (/^http(s)?:\\/\\//i.test(relUrl) || /^data:[^\\/]+\\/[^;]+(;charset=[\\w]+)?;base64,/.test(relUrl)) {\n //already absolute or base64 encoded\n return relUrl;\n } else {\n var absUrl = '';\n var runtimeLocations = this.getOption('runtimeLocations');\n\n if (runtimeLocations && _.size(runtimeLocations)) {\n _.forIn(runtimeLocations, function(runtimeLocation, typeIdentifier) {\n if (relUrl.indexOf(typeIdentifier) === 0) {\n absUrl = relUrl.replace(typeIdentifier, runtimeLocation);\n return false; //break\n }\n });\n }\n\n if (absUrl) {\n return absUrl;\n } else {\n var baseUrl = this.getOption('baseUrl') || getDocumentBaseUrl();\n return baseUrl + relUrl;\n }\n }\n };\n\n this.setAreaBroker = function setAreaBroker(areaBroker) {\n this._areaBroker = areaBroker;\n };\n\n this.getAreaBroker = function getAreaBroker() {\n if (this._areaBroker) {\n return this._areaBroker;\n }\n };\n\n this.getItemCreator = function getItemCreator() {\n return this.getOption('itemCreator');\n };\n };\n\n /**\n * Expose the renderer's factory\n * @exports taoQtiItem/qtiRunner/core/Renderer\n */\n var Renderer$1 = {\n /**\n * Creates a new Renderer by extending the Renderer's prototype\n * @param {Object} renderersLocations -\n * @param {String} [name] - the new renderer name\n * @param {Object} [defaultOptions] - the renderer options\n */\n build: function(renderersLocations, name, defaultOptions) {\n var NewRenderer = function() {\n var options = _.isPlainObject(arguments[0]) ? arguments[0] : {};\n\n Renderer.apply(this);\n\n this.register(renderersLocations);\n this.name = name || '';\n this.setOptions(_.defaults(options, defaultOptions || {}));\n };\n NewRenderer.prototype = Renderer.prototype;\n return NewRenderer;\n }\n };\n\n return Renderer$1;\n\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/factory',['lodash', 'core/promise', 'core/eventifier'], function (_, Promise, eventifier){\n 'use strict';\n\n var _requirejs = window.require;\n var _defaultLoadingOptions = {\n reload: false\n };\n\n var loadModuleConfig = function loadModuleConfig(manifest){\n return new Promise(function(resolve, reject){\n var requireConfigAliases = {};\n var baseUrl;\n var reqConfigs = [];\n var modules = {};\n\n if(!manifest || !manifest.runtime){\n return reject('invalid manifest');\n }\n\n baseUrl = manifest.baseUrl;\n\n if(_.isArray(manifest.runtime.config) && manifest.runtime.config.length){\n _.forEach(manifest.runtime.config, function(pciConfig){\n if(_.isString(pciConfig)){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig);\n }else{\n if(pciConfig.data){\n modules = _.defaults(modules, pciConfig.data.paths || {});\n }else if(pciConfig.file){\n reqConfigs.push('json!' + baseUrl + '/' + pciConfig.file);\n }\n }\n });\n }\n\n require(reqConfigs, function(){\n\n var runtimeModules = {};\n\n requireConfigAliases[manifest.typeIdentifier] = baseUrl;\n\n if(manifest.model === 'IMSPCI'){\n\n modules = _.reduce(arguments, function(acc, conf){\n return _.defaults(acc, conf.paths || {});\n }, modules);\n\n _.forEach(manifest.runtime.modules || {}, function(paths, id){\n if(paths && (_.isString(paths) || (_.isArray(paths) && paths.length))){\n runtimeModules[id] = paths;\n }\n });\n\n modules = _.merge(modules, runtimeModules);\n\n _.forEach(modules, function(paths, id){\n paths = _.isArray(paths) ? paths : [paths];\n requireConfigAliases[id] = _.map(paths, function(path){\n return baseUrl+'/'+path.replace(/\\.js$/, '');\n });\n });\n }\n\n resolve(requireConfigAliases);\n\n }, reject);\n\n\n });\n };\n\n /**\n * Evaluate if the given object is a proper portable element provider\n * @param {Object} provider\n * @returns {Boolean}\n */\n var isPortableElementProvider = function isPortableElementProvider(provider){\n return (provider && _.isFunction(provider.load));\n };\n\n return function portableElementRegistry(methods){\n\n var _loaded = false;\n var __providers = {};\n\n /**\n * The portable element registry instance\n * @typedef {portableElementRegistry}\n */\n return eventifier(_.defaults(methods || {}, {\n _registry : {},\n\n /**\n * Get a register portable element\n * @param {String} typeIdentifier\n * @param {String} version\n * @returns {Object}\n */\n get : function get(typeIdentifier, version){\n\n if(this._registry[typeIdentifier]){\n //check version\n if(version){\n return _.find(this._registry[typeIdentifier], {version : version});\n }else{\n //latest\n return _.last(this._registry[typeIdentifier]);\n }\n }\n },\n\n /**\n * Register a portable element provider\n * @param moduleName\n * @param {String|Object }provider - the portable provider object or module name\n * @returns {portableElementRegistry}\n */\n registerProvider : function registerProvider(moduleName, provider){\n __providers[moduleName] = isPortableElementProvider(provider) ? provider : null;\n _loaded = false;\n return this;\n },\n\n /**\n * Clear all previously registered providers\n * @returns {portableElementRegistry}\n */\n resetProviders : function resetProviders(){\n __providers = {};\n _loaded = false;\n return this;\n },\n\n /**\n * Load the providers\n * @param {Object} [options]\n * @param {Boolean} [options.reload] - force to reload the registered providers\n * @returns {Promise}\n */\n loadProviders : function loadProviders(options){\n var self = this;\n var loadPromise;\n\n if(_loaded && !options.reload){\n loadPromise = Promise.resolve([]);\n } else {\n loadPromise = new Promise(function(resolve, reject) {\n var providerLoadingStack = [];\n _.forIn(__providers, function(provider, id){\n if(provider === null){\n providerLoadingStack.push(id);\n }\n });\n _requirejs(providerLoadingStack, function(){\n _.each([].slice.call(arguments), function(provider){\n if(isPortableElementProvider(provider)){\n __providers[providerLoadingStack.shift()] = provider;\n }\n });\n resolve(__providers);\n _loaded = true;\n self.trigger('providersloaded', __providers);\n }, reject);\n });\n }\n\n return loadPromise;\n },\n\n /**\n * Get all versions of all portable elements registered\n * @returns {Object} - all portable elements and their versions\n */\n getAllVersions : function getAllVersions(){\n var all = {};\n _.forIn(this._registry, function (versions, id){\n all[id] = _.map(versions, 'version');\n });\n return all;\n },\n\n /**\n * Get the runtime for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {Object} the runtime model\n */\n getRuntime : function getRuntime(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n return _.assign(portableElement.runtime, {\n id : portableElement.typeIdentifier,\n label : portableElement.label,\n baseUrl : portableElement.baseUrl,\n model : portableElement.model\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n\n /**\n * Get the creator model for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {Object} the creator model\n */\n getCreator : function getCreator(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement && portableElement.creator){\n return _.assign(portableElement.creator, {\n id : portableElement.typeIdentifier,\n label : portableElement.label,\n baseUrl : portableElement.baseUrl,\n response : portableElement.response,\n model : portableElement.model,\n xmlns : portableElement.xmlns\n });\n }else{\n this.trigger('error', {\n message : 'no portable element runtime found',\n typeIdentifier : typeIdentifier,\n version : version\n });\n }\n },\n\n /**\n * Returned all enabled created from the registry\n * @returns {Object} the collection of creators\n */\n getLatestCreators : function getLatestCreators(){\n var all = {};\n _.forIn(this._registry, function (versions, id){\n var lastVersion = _.last(versions);\n\n //check if the portable element is creatable:\n if(lastVersion.creator && lastVersion.creator.hook && lastVersion.enabled){\n all[id] = lastVersion;\n }\n });\n return all;\n },\n\n /**\n * Get the baseUrl for a given portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {String} the base url\n */\n getBaseUrl : function getBaseUrl(typeIdentifier, version){\n var runtime = this.get(typeIdentifier, version);\n if(runtime){\n return runtime.baseUrl;\n }\n return '';\n },\n\n /**\n * Load the runtimes from registered portable element provider(s)\n *\n * @param {Object} [options]\n * @param {Array} [options.include] - the exact list of portable element typeIdentifier that should be loaded\n * @param {Boolean} [options.reload] - tells if all interactions should be reloaded\n * @returns {Promise}\n */\n loadRuntimes : function loadRuntimes(options){\n var self = this;\n var loadPromise;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n loadPromise = self.loadProviders(options).then(function(providers){\n\n var loadStack = [];\n\n _.forEach(providers, function (provider){\n if(provider){//check that the provider is loaded\n loadStack.push(provider.load());\n }\n });\n\n //performs the loadings in parallel\n return Promise.all(loadStack).then(function (results){//TODO could remove one level of promise\n\n var configLoadingStack = [];\n\n //update registry\n self._registry = _.reduce(results, function (acc, _pcis){\n return _.merge(acc, _pcis);\n }, self._registry || {});//incremental loading\n\n //pre-configuring the baseUrl of the portable element's source\n _.forIn(self._registry, function (versions, typeIdentifier){\n if(_.isArray(options.include) && _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n configLoadingStack.push(loadModuleConfig(self.get(typeIdentifier)));\n });\n\n return Promise.all(configLoadingStack).then(function(moduleConfigs){\n var requireConfigAliases = _.reduce(moduleConfigs, function(acc, paths){\n return _.merge(acc, paths);\n }, {});\n\n //save the required libs name => path to global require alias\n //TODO in future planned user story : change this to a local require context to solve conflicts in third party module naming\n _requirejs.config({paths : requireConfigAliases});\n });\n });\n\n });\n\n\n loadPromise\n .then(function() {\n self.trigger('runtimesloaded');\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n\n /**\n * Load the creators from registered portable element provider(s)\n *\n * @param {Object} [options]\n * @param {Array} [options.include] - the exact list of portable element typeIdentifier that should be loaded\n * @param {Boolean} [options.reload] - tells if all interactions should be reloaded\n * @returns {Promise}\n */\n loadCreators : function loadCreators(options){\n var loadPromise;\n var self = this;\n\n options = _.defaults(options||{}, _defaultLoadingOptions);\n\n loadPromise = self.loadRuntimes(options).then(function(){\n var requiredCreatorHooks = [];\n\n _.forIn(self._registry, function (versions, typeIdentifier){\n var portableElementModel = self.get(typeIdentifier);//currently use the latest version only\n if(portableElementModel.creator && portableElementModel.creator.hook){\n if(portableElementModel.enabled){\n if(_.isArray(options.include) && _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n }else{\n if(!_.isArray(options.include) || _.indexOf(options.include, typeIdentifier) < 0){\n return true;\n }\n }\n requiredCreatorHooks.push(portableElementModel.creator.hook.replace(/\\.js$/, ''));\n }\n });\n\n if(requiredCreatorHooks.length){\n return new Promise(function(resolve, reject){\n //@todo support caching?\n _requirejs(requiredCreatorHooks, function (){\n var creators = {};\n _.each(arguments, function (creatorHook){\n var id = creatorHook.getTypeIdentifier();\n var portableElementModel = self.get(id);\n var i = _.findIndex(self._registry[id], {version : portableElementModel.version});\n if(i < 0){\n self.trigger('error', 'no creator found for id/version ' + id + '/' + portableElementModel.version);\n }else{\n self._registry[id][i].creator.module = creatorHook;\n creators[id] = creatorHook;\n }\n });\n resolve(creators);\n }, reject);\n });\n }else{\n return Promise.resolve({});\n }\n\n });\n\n loadPromise\n .then(function(creators) {\n self.trigger('creatorsloaded', creators);\n return creators;\n })\n .catch(function(err) {\n self.trigger('error', err);\n });\n\n return loadPromise;\n },\n\n /**\n * enable a portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n enable: function enable(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n portableElement.enabled = true;\n }\n return this;\n },\n\n /**\n * disable a portable element\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n disable: function disable(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n if(portableElement){\n portableElement.enabled = false;\n }\n return this;\n },\n\n /**\n * check is a portable element is enabled\n * @param {String} typeIdentifier\n * @param {String} [version] - if the version is provided, the method will try to find that version\n * @returns {portableElementRegistry}\n */\n isEnabled: function isEnabled(typeIdentifier, version){\n var portableElement = this.get(typeIdentifier, version);\n return (portableElement && portableElement.enabled === true);\n }\n }));\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 (original work) Open Assessment Technologies SA ;\n */\n/**\n * @author Sam <sams@taotesting.com>\n * @requires jquery\n * @requires lodash\n */\ndefine('taoQtiItem/qtiCreator/helper/qtiElements',['jquery', 'lodash', 'i18n'], function($, _, __){\n \"use strict\";\n\n var QtiElements = {};\n\n QtiElements.classes = {\n //abstract classes:\n 'itemBody' : {'parents' : ['bodyElement'], 'contains' : ['block'], 'abstract' : true},\n 'atomicBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'atomicInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'simpleBlock' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['block'], 'abstract' : true},\n 'simpleInline' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['inline'], 'abstract' : true},\n 'flowStatic' : {'parents' : ['flow'], 'abstract' : true},\n 'blockStatic' : {'parents' : ['block'], 'abstract' : true},\n 'inlineStatic' : {'parents' : ['inline'], 'abstract' : true},\n 'flow' : {'parents' : ['objectFlow'], 'abstract' : true},\n 'tableCell' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'abstract' : true},\n //html-derived qti elements:\n 'caption' : {'parents' : ['bodyElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'col' : {'parents' : ['bodyElement'], 'xhtml' : true},\n 'colgroup' : {'parents' : ['bodyElement'], 'contains' : ['col'], 'xhtml' : true},\n 'div' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['flow'], 'xhtml' : true},\n 'dl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['dlElement'], 'xhtml' : true},\n 'dt' : {'parents' : ['dlElement'], 'contains' : ['inline'], 'xhtml' : true},\n 'dd' : {'parents' : ['dlElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'hr' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'xhtml' : true},\n 'math' : {'parents' : ['blockStatic', 'flowStatic', 'inlineStatic'], 'xhtml' : true},\n 'li' : {'parents' : ['bodyElement'], 'contains' : ['flow'], 'xhtml' : true},\n 'ol' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'ul' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['li'], 'xhtml' : true},\n 'object' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic'], 'contains' : ['objectFlow'], 'xhtml' : true},\n 'param' : {'parents' : ['objectFlow'], 'xhtml' : true},\n 'table' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'contains' : ['caption', 'col', 'colgroup', 'thead', 'tfoot', 'tbody'], 'xhtml' : true},\n 'tbody' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'tfoot' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'thead' : {'parents' : ['bodyElement'], 'contains' : ['tr'], 'xhtml' : true},\n 'td' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'th' : {'parents' : ['tableCell'], 'xhtml' : true},\n 'tr' : {'parents' : ['bodyElement'], 'contains' : ['tableCell'], 'xhtml' : true},\n 'a' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'abbr' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'acronym' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'b' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'big' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'cite' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'code' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'dfn' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'em' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'i' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'kbd' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'q' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'samp' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'small' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'span' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'strong' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sub' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'sup' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'tt' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'var' : {'parents' : ['simpleInline'], 'xhtml' : true},\n 'blockquote' : {'parents' : ['simpleBlock'], 'xhtml' : true},\n 'address' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h1' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h2' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h3' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h4' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h5' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'h6' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'p' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'pre' : {'parents' : ['atomicBlock'], 'xhtml' : true},\n 'img' : {'parents' : ['atomicInline'], 'xhtml' : true, attributes : ['src', 'alt', 'longdesc', 'height', 'width']},\n 'br' : {'parents' : ['atomicInline'], 'xhtml' : true},\n //qti elements:\n 'infoControl' : {'parents' : ['blockStatic', 'bodyElement', 'flowStatic'], 'qti' : true},\n 'textRun' : {'parents' : ['inlineStatic', 'flowstatic'], 'qti' : true},\n 'feedbackInline' : {'parents' : ['simpleInline', 'feedbackElement'], 'qti' : true},\n 'feedbackBlock' : {'parents' : ['simpleBlock'], 'qti' : true},\n 'rubricBlock' : {'parents' : ['simpleBlock'], 'qti' : true}, //strange qti 2.1 exception, marked as simpleBlock instead of\n 'blockInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n 'inlineInteraction' : {'parents' : ['inline', 'flow', 'interaction'], 'qti' : true},\n 'gap' : {'parents' : ['inlineStatic'], 'qti' : true},\n 'hottext' : {'parents' : ['flowstatic', 'inlineStatic'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'printedVariable' : {'parents' : ['bodyElement', 'flowStatic', 'inlineStatic', 'textOrVariable'], 'qti' : true},\n 'prompt' : {'parents' : ['bodyElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'templateElement' : {'parents' : ['bodyElement'], 'qti' : true},\n 'templateBlock' : {'parents' : ['blockStatic', 'flowStatic', 'templateElement'], 'contains' : ['blockStatic'], 'qti' : true},\n 'templateInline' : {'parents' : ['inlineStatic', 'flowStatic', 'templateElement'], 'contains' : ['inlineStatic'], 'qti' : true},\n 'choiceInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'associateInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'orderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'matchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hottextInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'gapMatchInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'mediaInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'sliderInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'uploadInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'drawingInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'graphicInteraction' : {'parents' : ['blockInteraction'], 'qti' : true},\n 'hotspotInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicAssociateInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicOrderInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'graphicGapMatchInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'selectPointInteraction' : {'parents' : ['graphicInteraction'], 'qti' : true},\n 'textEntryInteraction' : {'parents' : ['stringInteraction', 'inlineInteraction'], 'qti' : true},\n 'extendedTextInteraction' : {'parents' : ['stringInteraction', 'blockInteraction'], 'qti' : true},\n 'inlineChoiceInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'endAttemptInteraction' : {'parents' : ['inlineInteraction'], 'qti' : true},\n 'customInteraction' : {'parents' : ['block', 'flow', 'interaction'], 'qti' : true},\n '_container' : {'parents' : ['block'], 'qti' : true}//a pseudo class introduced in TAO\n };\n\n QtiElements.cache = {containable : {}, children : {}, parents : {}};\n\n QtiElements.getAllowedContainersElements = function(qtiClass, $container){\n var classes = QtiElements.getAllowedContainers(qtiClass);\n var jqSelector = '';\n for(var i in classes){\n if(!classes[i].qti){\n //html element:\n jqSelector += classes[i] + ', ';\n }\n }\n\n if(jqSelector){\n jqSelector = jqSelector.substring(0, jqSelector.length - 2);\n }\n\n return $(jqSelector, $container ? $container : $(document)).filter(':not([data-qti-type])');\n };\n\n QtiElements.getAllowedContainers = function(qtiClass){\n var ret;\n if(QtiElements.cache.containable[qtiClass]){\n ret = QtiElements.cache.containable[qtiClass];\n }else{\n ret = [];\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(model.contains){\n var intersect = _.intersection(model.contains, parents);\n if(intersect.length){\n if(!model.abstract){\n ret.push(aClass);\n }\n ret = _.union(ret, QtiElements.getChildClasses(aClass, true));\n }\n }\n }\n QtiElements.cache.containable[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getAllowedContents = function(qtiClass, recursive, checked){\n\n var ret = [];\n checked = checked || {};\n\n var model = QtiElements.classes[qtiClass];\n if(model && model.contains){\n for(var i in model.contains){\n var contain = model.contains[i];\n if(!checked[contain]){\n checked[contain] = true;\n\n //qtiClass can contain everything defined as its contents\n ret.push(contain);\n\n //qtiClass can also contain subclass of its contents\n var children = QtiElements.getChildClasses(contain, true);\n for(var i in children){\n var child = children[i];\n if(!checked[child]){\n checked[child] = true;\n\n ret.push(child);\n\n //adding children allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(child, true, checked));\n }\n }\n }\n\n //adding allowed contents of qtiClass' allowed contents depends on the option \"recursive\"\n if(recursive){\n ret = _.union(ret, QtiElements.getAllowedContents(contain, true, checked));\n }\n\n }\n }\n }\n\n //qtiClass can contain all allowed contents of its parents:\n var parents = QtiElements.getParentClasses(qtiClass, true);\n for(var i in parents){\n ret = _.union(ret, QtiElements.getAllowedContents(parents[i], recursive, checked));\n }\n\n return _.uniq(ret, false);\n };\n\n QtiElements.isAllowedClass = function(qtiContainerClass, qtiContentClass){\n var allowedClasses = QtiElements.getAllowedContents(qtiContainerClass);\n return (_.indexOf(allowedClasses, qtiContentClass) >= 0);\n };\n\n QtiElements.getParentClasses = function(qtiClass, recursive){\n var ret;\n if(recursive && QtiElements.cache.parents[qtiClass]){\n ret = QtiElements.cache.parents[qtiClass];\n }else{\n ret = [];\n if(QtiElements.classes[qtiClass]){\n ret = QtiElements.classes[qtiClass].parents;\n if(recursive){\n for(var i in ret){\n ret = _.union(ret, QtiElements.getParentClasses(ret[i], recursive));\n }\n ret = _.uniq(ret, false);\n }\n }\n QtiElements.cache.parents[qtiClass] = ret;\n }\n\n return ret;\n };\n\n QtiElements.getChildClasses = function(qtiClass, recursive, type){\n var ret;\n var cacheType = type ? type : 'all';\n if(recursive && QtiElements.cache.children[qtiClass] && QtiElements.cache.children[qtiClass][cacheType]){\n ret = QtiElements.cache.children[qtiClass][cacheType];\n }else{\n ret = [];\n for(var aClass in QtiElements.classes){\n var model = QtiElements.classes[aClass];\n if(_.indexOf(model.parents, qtiClass) >= 0){\n if(type){\n if(model[type]){\n ret.push(aClass);\n }\n }else{\n ret.push(aClass);\n }\n if(recursive){\n ret = _.union(ret, QtiElements.getChildClasses(aClass, recursive, type));\n }\n }\n }\n if(!QtiElements.cache.children[qtiClass]){\n QtiElements.cache.children[qtiClass] = {};\n }\n QtiElements.cache.children[qtiClass][cacheType] = ret;\n }\n\n return ret;\n };\n\n QtiElements.isBlock = function(qtiClass){\n return QtiElements.is(qtiClass, 'block');\n };\n\n QtiElements.isInline = function(qtiClass){\n return QtiElements.is(qtiClass, 'inline');\n };\n\n QtiElements.is = function(qtiClass, topClass){\n if(qtiClass === topClass){\n return true;\n }else{\n var parents = QtiElements.getParentClasses(qtiClass, true);\n return (_.indexOf(parents, topClass) >= 0);\n }\n };\n\n QtiElements.getAvailableAuthoringElements = function(){\n\n var tagTitles = {\n commonInteractions: __('Common Interactions'),\n inlineInteractions: __('Inline Interactions'),\n graphicInteractions: __('Graphic Interactions')\n }\n\n return {\n choiceInteraction : {\n label : __('Choice Interaction'),\n description : __('Select a single (radio buttons) or multiple (check boxes) responses among a set of choices.'),\n icon : 'icon-choice',\n short : __('Choice'),\n qtiClass : 'choiceInteraction',\n tags:[tagTitles.commonInteractions, 'mcq'],\n group: 'common-interactions'\n },\n orderInteraction : {\n label : __('Order Interaction'),\n icon : 'icon-order',\n description : __('Arrange a list of choices in the correct order.'),\n short : __('Order'),\n qtiClass : 'orderInteraction',\n tags:[tagTitles.commonInteractions, 'ordering'],\n group: 'common-interactions'\n\n },\n associateInteraction : {\n label : __('Associate Interaction'),\n icon : 'icon-associate',\n description : __('Create pair(s) from a series of choices.'),\n short : __('Associate'),\n qtiClass : 'associateInteraction',\n tags:[tagTitles.commonInteractions, 'association'],\n group: 'common-interactions'\n },\n matchInteraction : {\n label : __('Match Interaction'),\n icon : 'icon-match',\n description : __('Create association(s) between two sets of choices displayed in a table (row and column).'),\n short : __('Match'),\n qtiClass : 'matchInteraction',\n tags:[tagTitles.commonInteractions, 'association'],\n group: 'common-interactions'\n },\n hottextInteraction : {\n label : __('Hottext Interaction'),\n icon : 'icon-hottext',\n description : __('Select one or more text parts (hottext) within a text.'),\n short : __('Hottext'),\n qtiClass : 'hottextInteraction',\n tags:[tagTitles.commonInteractions, 'text'],\n group: 'common-interactions'\n },\n gapMatchInteraction : {\n label : __('Gap Match Interaction'),\n icon : 'icon-gap-match',\n description : __(' Fill in the gaps in a text from a set of choices.'),\n short : __('Gap Match'),\n qtiClass : 'gapMatchInteraction',\n tags:[tagTitles.commonInteractions, 'text', 'association'],\n group: 'common-interactions'\n },\n sliderInteraction : {\n label : __('Slider Interaction'),\n icon : 'icon-slider',\n description :__('Select a value within a numerical range.'),\n short : __('Slider'),\n qtiClass : 'sliderInteraction',\n tags:[tagTitles.commonInteractions, 'special'],\n group: 'common-interactions'\n },\n extendedTextInteraction : {\n label : __('Extended Text Interaction'),\n icon : 'icon-extended-text',\n description : __('Collect open-ended information in one or more text area(s) (strings or numeric values).'),\n short : __('Extended Text'),\n qtiClass : 'extendedTextInteraction',\n tags:[tagTitles.commonInteractions, 'text'],\n group: 'common-interactions'\n },\n uploadInteraction : {\n label : __('File Upload Interaction'),\n icon : 'icon-upload',\n description : __('Upload a file (e.g. document, picture...) as a response.'),\n short : __('File Upload'),\n qtiClass : 'uploadInteraction',\n tags:[tagTitles.commonInteractions, 'special'],\n group: 'common-interactions'\n },\n mediaInteraction : {\n label : __('Media Interaction'),\n icon : 'icon-media',\n description : __('Control the playing parameters (auto-start, loop) of a video or audio file and report the number of time it has been played.'),\n short : __('Media'),\n qtiClass : 'mediaInteraction',\n tags:[tagTitles.commonInteractions, 'media'],\n group: 'common-interactions'\n },\n _container : {\n label : __('Text Block'),\n icon : 'icon-font',\n description : __('Block contains the content (stimulus) of the item such as text or image. It is also required for Inline Interactions.'),\n short : __('Block'),\n qtiClass : '_container',\n tags:[tagTitles.inlineInteractions, 'text'],\n group: 'inline-interactions'\n },\n inlineChoiceInteraction : {\n label : __('Inline Choice Interaction'),\n icon : 'icon-inline-choice',\n description : __('Select a choice from a drop-down list.'),\n short : __('Inline Choice'),\n qtiClass : 'inlineChoiceInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'mcq'],\n group: 'inline-interactions'\n },\n textEntryInteraction : {\n label : __('Text Entry Interaction'),\n icon : 'icon-text-entry',\n description : __('Collect open-ended information in a short text input (strings or numeric values).'),\n short : __('Text Entry'),\n qtiClass : 'textEntryInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'text'],\n group: 'inline-interactions'\n },\n endAttemptInteraction : {\n label : __('End Attempt Interaction'),\n icon : 'icon-end-attempt',\n description : __('Trigger the end of the item attempt.'),\n short : __('End Attempt'),\n qtiClass : 'endAttemptInteraction',\n tags:[tagTitles.inlineInteractions, 'inline-interactions', 'button', 'submit'],\n group: 'inline-interactions'\n },\n hotspotInteraction : {\n label : __('Hotspot Interaction'),\n icon : 'icon-hotspot',\n description : __('Select one or more areas (hotspots) displayed on an picture.'),\n short : __('Hotspot'),\n qtiClass : 'hotspotInteraction',\n tags:[tagTitles.graphicInteractions, 'mcq'],\n group: 'graphic-interactions'\n },\n graphicOrderInteraction : {\n label : __('Graphic Order Interaction'),\n icon : 'icon-graphic-order',\n description : __('Order the areas (hotspots) displayed on a picture.'),\n short : __('Order'),\n qtiClass : 'graphicOrderInteraction',\n tags:[tagTitles.graphicInteractions, 'ordering'],\n group: 'graphic-interactions'\n },\n graphicAssociateInteraction : {\n label : __('Graphic Associate Interaction'),\n icon : 'icon-graphic-associate',\n description : __('Create association(s) between areas (hotspots) displayed on a picture.'),\n short : __('Associate'),\n qtiClass : 'graphicAssociateInteraction',\n tags:[tagTitles.graphicInteractions, 'association'],\n group: 'graphic-interactions'\n },\n graphicGapMatchInteraction : {\n label : __('Graphic Gap Match Interaction'),\n icon : 'icon-graphic-gap',\n description : __('Fill in the gaps on a picture with a set of image choices.'),\n short : __('Gap Match'),\n qtiClass : 'graphicGapMatchInteraction',\n tags:[tagTitles.graphicInteractions, 'association'],\n group: 'graphic-interactions'\n },\n selectPointInteraction : {\n label : __('Select Point Interaction'),\n icon : 'icon-select-point',\n description : __('Position one or more points on a picture (response areas are not displayed).'),\n short : __('Select Point'),\n qtiClass : 'selectPointInteraction',\n tags:[tagTitles.graphicInteractions],\n group: 'graphic-interactions'\n }\n };\n };\n\n return QtiElements;\n\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/ciRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory',\n 'taoQtiItem/qtiCreator/helper/qtiElements'\n], function (_, portableElementRegistry, qtiElements){\n 'use strict';\n\n /**\n * Create a ney interaction registry instance\n * interaction registry need to register newly loaded creator hooks in the list of available qti authoring elements\n *\n * @returns {Object} registry instance\n */\n return function customInteractionRegistry(){\n\n return portableElementRegistry({\n getAuthoringData : function getAuthoringData(typeIdentifier, options){\n let pciModel;\n options = _.defaults(options || {}, {version : 0, enabledOnly : false});\n pciModel = this.get(typeIdentifier, options.version);\n if(pciModel && pciModel.creator && pciModel.creator.hook && pciModel.creator.icon && (pciModel.enabled || !options.enabledOnly)){\n return {\n label : pciModel.label, //currently no translation available\n icon : pciModel.creator.icon.replace(new RegExp('^' + typeIdentifier + '\\/'), pciModel.baseUrl),\n short : pciModel.short,\n description : pciModel.description,\n qtiClass : 'customInteraction.' + pciModel.typeIdentifier, //custom interaction is block type\n tags : _.union(['Custom Interactions'], pciModel.tags),\n group : 'custom-interactions'\n };\n }\n }\n }).on('creatorsloaded', function(){\n var creators = this.getLatestCreators();\n _.forEach(creators, function(creator, typeIdentifier){\n qtiElements.classes['customInteraction.' + typeIdentifier] = {parents : ['customInteraction'], qti : true};\n });\n });\n };\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 */\ndefine('taoQtiItem/portableElementRegistry/ciRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/ciRegistry', 'module'], function (_, ciRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of ciRegistry\n var registry = ciRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\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 */\ndefine('taoQtiItem/portableElementRegistry/factory/icRegistry',[\n 'lodash',\n 'taoQtiItem/portableElementRegistry/factory/factory'\n], function (_, portableElementRegistry){\n 'use strict';\n\n /**\n * Info control registry has currently no additonal fonctionalities than the basic portable element registry\n *\n * @returns {Object} registry instance\n */\n return function infoControlRegistry(){\n return portableElementRegistry();\n }\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 */\ndefine('taoQtiItem/portableElementRegistry/icRegistry',['lodash', 'taoQtiItem/portableElementRegistry/factory/icRegistry', 'module'], function (_, icRegistry, module){\n 'use strict';\n\n //create a preregistered singleton of icRegistry\n var registry = icRegistry();\n var providers = [];\n var config = module.config();\n\n if(config && config.providers){\n providers = config.providers;\n }\n\n _.each(providers, function(provider){\n if(provider.name && provider.module){\n registry.registerProvider(provider.module);\n }\n });\n\n return registry;\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\ndefine('taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy',[\n 'taoQtiItem/portableElementRegistry/ciRegistry',\n 'taoQtiItem/portableElementRegistry/icRegistry'\n], function (ciRegistry, icRegistry) {\n 'use strict';\n\n function getBaseUrlByIdentifier(typeIdentifier) {\n if (ciRegistry.get(typeIdentifier)) {\n return ciRegistry.getBaseUrl(typeIdentifier);\n }\n if (icRegistry.get(typeIdentifier)) {\n return icRegistry.getBaseUrl(typeIdentifier);\n }\n return typeIdentifier;\n }\n\n //strategy to resolve portable info control and portable interactions paths.\n //It should never be reached in the stack the usual way and should be called only using resolveBy.\n return {\n name: 'portableElementLocation',\n handle: function handlePortableElementLocation(url) {\n\n if (url.file === url.path) {\n return getBaseUrlByIdentifier(url.file);\n } else if (url.source === url.relative) {\n return url.relative.replace(/^(\\.\\/)?([a-z_0-9]+)\\/(.*)/i, function (fullmatch, $1, typeIdentifier, relPath) {\n var runtimeLocation = getBaseUrlByIdentifier(typeIdentifier);\n if (runtimeLocation) {\n return runtimeLocation + '/' + relPath;\n }\n return fullmatch;\n });\n }\n }\n };\n});\n","define('taoQtiItem/qtiCommonRenderer/renderers/config',['lodash', 'context', 'ui/themes', 'taoItems/assets/manager', 'taoItems/assets/strategies', 'module', 'taoQtiItem/portableElementRegistry/assetManager/portableAssetStrategy'], function (_, context, themes, assetManagerFactory, assetStrategies, module, portableAssetStrategy) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n context = context && Object.prototype.hasOwnProperty.call(context, 'default') ? context['default'] : context;\n themes = themes && Object.prototype.hasOwnProperty.call(themes, 'default') ? themes['default'] : themes;\n assetManagerFactory = assetManagerFactory && Object.prototype.hasOwnProperty.call(assetManagerFactory, 'default') ? assetManagerFactory['default'] : assetManagerFactory;\n assetStrategies = assetStrategies && Object.prototype.hasOwnProperty.call(assetStrategies, 'default') ? assetStrategies['default'] : assetStrategies;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\n portableAssetStrategy = portableAssetStrategy && Object.prototype.hasOwnProperty.call(portableAssetStrategy, 'default') ? portableAssetStrategy['default'] : portableAssetStrategy;\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) 2014 (original work) Open Assessment Technologies SA;\n */\n\n var itemThemes = themes.get('items');\n var moduleConfig = module.config();\n\n //Create asset manager stack\n var assetManager = assetManagerFactory(\n [\n {\n name: 'theme',\n handle: function handleTheme(url) {\n if (\n itemThemes &&\n url.path &&\n (url.path === itemThemes.base || _.contains(_.pluck(itemThemes.available, 'path'), url.path))\n ) {\n return context.root_url + url.toString();\n }\n }\n },\n assetStrategies.taomedia,\n assetStrategies.external,\n assetStrategies.base64,\n assetStrategies.itemCssNoCache,\n assetStrategies.baseUrl,\n portableAssetStrategy\n ],\n { baseUrl: '' }\n ); //baseUrl is not predefined in the config, but should be set upon renderer instantiating\n\n //renderers locations\n var locations = {\n assessmentItem: 'taoQtiItem/qtiCommonRenderer/renderers/Item',\n _container: 'taoQtiItem/qtiCommonRenderer/renderers/Container',\n _simpleFeedbackRule: false,\n _tooltip: 'taoQtiItem/qtiCommonRenderer/renderers/Tooltip',\n stylesheet: 'taoQtiItem/qtiCommonRenderer/renderers/Stylesheet',\n outcomeDeclaration: false,\n responseDeclaration: false,\n responseProcessing: false,\n img: 'taoQtiItem/qtiCommonRenderer/renderers/Img',\n math: 'taoQtiItem/qtiCommonRenderer/renderers/Math',\n object: 'taoQtiItem/qtiCommonRenderer/renderers/Object',\n table: 'taoQtiItem/qtiCommonRenderer/renderers/Table',\n printedVariable: 'taoQtiItem/qtiCommonRenderer/renderers/PrintedVariable',\n rubricBlock: 'taoQtiItem/qtiCommonRenderer/renderers/RubricBlock',\n modalFeedback: 'taoQtiItem/qtiCommonRenderer/renderers/ModalFeedback',\n prompt: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/Prompt',\n choiceInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ChoiceInteraction',\n extendedTextInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/ExtendedTextInteraction',\n orderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/OrderInteraction',\n associateInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/AssociateInteraction',\n matchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MatchInteraction',\n textEntryInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/TextEntryInteraction',\n sliderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SliderInteraction',\n inlineChoiceInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/InlineChoiceInteraction',\n 'simpleChoice.choiceInteraction': 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.ChoiceInteraction',\n 'simpleChoice.orderInteraction': 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleChoice.OrderInteraction',\n hottext: 'taoQtiItem/qtiCommonRenderer/renderers/choices/Hottext',\n gap: 'taoQtiItem/qtiCommonRenderer/renderers/choices/Gap',\n gapText: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapText',\n 'simpleAssociableChoice.matchInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.MatchInteraction',\n 'simpleAssociableChoice.associateInteraction':\n 'taoQtiItem/qtiCommonRenderer/renderers/choices/SimpleAssociableChoice.AssociateInteraction',\n inlineChoice: 'taoQtiItem/qtiCommonRenderer/renderers/choices/InlineChoice',\n hottextInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HottextInteraction',\n hotspotInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/HotspotInteraction',\n hotspotChoice: false,\n gapMatchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GapMatchInteraction',\n selectPointInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/SelectPointInteraction',\n graphicOrderInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicOrderInteraction',\n mediaInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/MediaInteraction',\n uploadInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/UploadInteraction',\n graphicGapMatchInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicGapMatchInteraction',\n gapImg: 'taoQtiItem/qtiCommonRenderer/renderers/choices/GapImg',\n graphicAssociateInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/GraphicAssociateInteraction',\n associableHotspot: false,\n customInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/PortableCustomInteraction',\n infoControl: 'taoQtiItem/qtiCommonRenderer/renderers/PortableInfoControl',\n include: 'taoQtiItem/qtiCommonRenderer/renderers/Include',\n endAttemptInteraction: 'taoQtiItem/qtiCommonRenderer/renderers/interactions/EndAttemptInteraction'\n };\n\n var config = {\n name: 'commonRenderer',\n locations: locations,\n options: {\n assetManager: assetManager,\n themes: itemThemes,\n enableDragAndDrop: {\n associate: !!moduleConfig.associateDragAndDrop,\n gapMatch: !!moduleConfig.gapMatchDragAndDrop,\n graphicGapMatch: !!moduleConfig.graphicGapMatchDragAndDrop,\n order: !!moduleConfig.orderDragAndDrop\n },\n messages: moduleConfig.messages\n }\n };\n\n return config;\n\n});\n\n","define('taoQtiItem/qtiCommonRenderer/renderers/Renderer',['taoQtiItem/qtiRunner/core/Renderer', 'taoQtiItem/qtiCommonRenderer/renderers/config'], function (Renderer$1, config) { 'use strict';\n\n\tRenderer$1 = Renderer$1 && Object.prototype.hasOwnProperty.call(Renderer$1, 'default') ? Renderer$1['default'] : Renderer$1;\n\tconfig = config && Object.prototype.hasOwnProperty.call(config, 'default') ? config['default'] : config;\n\n\t/**\n\t * This program is free software; you can redistribute it and/or\n\t * modify it under the terms of the GNU General Public License\n\t * as published by the Free Software Foundation; under version 2\n\t * of the License (non-upgradable).\n\t *\n\t * This program is distributed in the hope that it will be useful,\n\t * but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\t * GNU General Public License for more details.\n\t *\n\t * You should have received a copy of the GNU General Public License\n\t * along with this program; if not, write to the Free Software\n\t * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n\t *\n\t * Copyright (c) 2014 (original work) Open Assessment Technologies SA;\n\t */\n\n\tvar Renderer = Renderer$1.build(config.locations, config.name, config.options);\n\n\treturn Renderer;\n\n});\n\n","define('taoQtiItem/runner/provider/manager/userModules',['lodash', 'module'], function (_, module) { 'use strict';\n\n _ = _ && Object.prototype.hasOwnProperty.call(_, 'default') ? _['default'] : _;\n module = module && Object.prototype.hasOwnProperty.call(module, 'default') ? module['default'] : module;\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 var userModules = {\n /**\n * Load user modules defined in the module config\n * @param {Array} [userModules] - manually specify user modules to load instead of getting them from the module config\n * @returns {Promise}\n */\n load: function load(userModules) {\n var config = module.config();\n\n if (!userModules || !_.isArray(userModules)) {\n if (config && config.userModules && _.isArray(config.userModules)) {\n userModules = config.userModules;\n } else {\n userModules = [];\n }\n }\n if(!userModules.length){\n return Promise.resolve();\n }\n return new Promise(function(resolve, reject) {\n window.require(userModules, function() {\n _.forEach(arguments, function(dependency) {\n if (dependency && _.isFunction(dependency.exec)) {\n dependency.exec();\n }\n });\n resolve();\n }, function(err) {\n reject(err.message);\n });\n });\n }\n };\n\n return userModules;\n\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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\ndefine('taoQtiItem/runtime/qtiBootstrap',[\n 'jquery',\n 'lodash',\n 'module',\n 'taoQtiItem/qtiRunner/core/QtiRunner',\n 'taoQtiItem/qtiCommonRenderer/renderers/Renderer',\n 'iframeNotifier',\n 'core/history',\n 'taoQtiItem/runner/provider/manager/userModules'\n], function($, _, module, QtiRunner, Renderer, iframeNotifier, history, userModules){\n 'use strict';\n\n //fix backspace going back into the history\n history.fixBrokenBrowsers();\n\n /**\n * The bootstrap is used to set up a QTI item at runtime. It connects to the itemApi.\n *\n * @author Bertrand Chevrier <bertrand@taotesting.com>\n * @exports taoQtiItem/runtime/qtiBootstrap\n *\n * @param {Object} runnerContext - the item context\n */\n return function bootstrap (runnerContext){\n\n //reconnect to global itemApi function\n window.onItemApiReady = function onItemApiReady(itemApi) {\n var qtiRunner = new QtiRunner();\n var coreItemData = runnerContext.itemData;\n var variableElementsData = _.merge(runnerContext.variableElements, itemApi.params.contentVariables || {});\n\n var renderer = new Renderer();\n\n // Makes the runner interface available from outside the frame\n // for preview.\n window.qtiRunner = qtiRunner;\n\n qtiRunner.setItemApi(itemApi);\n qtiRunner.setRenderer(renderer);\n\n qtiRunner.loadItemData(coreItemData, function() {\n\n qtiRunner.loadElements(variableElementsData, function() {\n\n qtiRunner.renderItem(undefined, function() {\n\n //userModules loading\n //we use any user modules bound to this module configuration instead of the ones bound to the new test runner\n var userModulesOverride;\n var config = module.config();\n if (config && config.userModules && _.isArray(config.userModules) && config.userModules.length > 0) {\n userModulesOverride = config.userModules;\n }\n userModules.load(userModulesOverride)\n .then(function() {\n\n //exec user scripts\n if (_.isArray(runnerContext.userScripts)) {\n require(runnerContext.userScripts, function() {\n _.forEach(arguments, function(dependency) {\n if (_.isFunction(dependency.exec)) {\n dependency.exec.call(null, runnerContext.userVars);\n }\n });\n });\n }\n\n iframeNotifier.parent('itemloaded');\n\n //IE9/10 loose the iframe focus, so we force getting it back.\n _.defer(function(){\n window.focus();\n });\n })\n .catch(function(err) {\n throw new Error('Error in user modules : ' + err.message);\n });\n\n });\n });\n });\n };\n\n //if the item is longer to load,\n _.defer(function(){\n //tell the parent to connect the item api\n iframeNotifier.parent('itemready');\n });\n\n };\n});\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) 2014 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);\n */\n\ndefine('taoQtiItem/runtime/qtiLoader',[\n 'taoQtiItem/runtime/qtiBootstrap',\n 'css!taoCss/tao-main-style'\n], function(qtiBootstrap){\n 'use strict';\n\n return {\n start : function start(){\n //the context is set into the template and bound to the tao namespace in global scope\n var runnerContext = window.tao.qtiRunnerContext;\n qtiBootstrap(runnerContext);\n }\n };\n});\n\n","\ndefine(\"taoQtiItem/loader/qtiLoader.bundle\", function(){});\n","window.bundles = (window.bundles || []).concat([\"taoQtiItem/loader/taoQtiItem.min\"]);\n"]}