{"version":3,"sources":["scripts/app-b62a3f242d.js"],"names":["refList","input","currentRef","indexOf","push","padZeroesFilter","length","str","euroFilter","numberFormattedFilter","hideZero","curSymbol","decPlaces","thouSep","decSep","out","isNaN","minus","Math","abs","numberFilter","parseFloat","replace","$inject","angular","module","config","$stateProvider","state","url","params","nextState","nextStateParams","templateUrl","controller","controllerAs","resolve","CUSTOMTRANSLATIONS","CustomTranslations","promise","CUSTOM2TRANSLATIONS","promise2","CUSTOMSTYLE","CustomElements","vm","this","data","$state","$rootScope","$localStorage","Relen","$analytics","$stateParams","getExtraTab","found","tab","table","headers","rows","getData","then","hasOwnProperty","extra_tabs","value","fromJson","forEach","val","checkbox","name","paaSGetTab","result","jsonData","definition","go","watcher","$on","acl","ErrorService","Auth","checkAccessList","App","t","$q","setPermissions","permissions","permissionsGood","index","contact","ContactPermissions","permission","isDefined","inOut","hide","string","isUndefined","cbpCode","toString","channelCode","translation","icon","code","key","title","allChannels","item","allPermissions","per","fallbackTitle","sort","a","b","nameA","nameB","dataGood","d","createGroups","singleStates","categories","useCategories","description","permission_code","unescape","childeren","show","title_permission","description_permission","equals","k","Object","keys","permissionsCategory","singlePermissions","showGroupsToggle","GroupsToggleState","colors","true","false","toggle","good","bad","unkwon","disabled","updated","getAllPossiblePermissions","PaaSChannelCodes","PaaSPermissions","editPermission","cbpID","updatePermission","refreshContact","tracking","eventTrack","category","label","editPermissionGroup","promises","all","Ref","SidePanel","ConfirmationService","toastr","loadTouchpoints","touchPoints","mainTypes","subTypes","modify_data","ContactRelationTouchPoints","reltpCode","reltpSubCode","modify","reltpCodes","map","create","includes","reltpCombinations","i","tpSubCode","tpCode","getGenderslocal","genders","inGUIDropDown","ContactIndividualEntity","genderCode","valueOf","setUser","dob","sideIndividu","Date","languageCode","titleCode","genderDescription","gender","language","titles","titleDescription","salutation","replaceByEmptyString","street","tp","ContactAddress","ca","streetHouseNumber","streetComplement","city","country","countryCode","postalCode","trim","address","filter","join","showSubtypes","getSubTypes","type","touchPointsOrder","getLegalCode","isObject","touchpointValue","firstName","familyName","conieID","sideTitles","editIndividu","updateIndividual","copy","success","createSideTouchpoint","sideTouchpoint","reltpStatusCode","getTouchpointForm","directory","file","sideTouchpointLabel","createTouchpoint","method","closeAll","editTouchpoint","reltpID","showReltpSubCodes","get","combinations","editSideTouchpoint","extend","deleteTouchpoint","info","confirmRemove","getFaqs","faq","title_tab","tabs","dashboards","openTab","directive","$compile","restrict","scope","form","link","$scope","element","validationTooltip","errors","triangle","next","$invalid","remove","attr","tooltipContent","after","errorsByType","tooltips","error","parent","find","html","invalidWatch","$watch","invalid","prop","errorsWatch","$location","$sessionStorage","PRIVACYVERSION","privacyVersion","token","checkCode","doLoginWithCode","searchParams","search","setLanguage","newCode","getTokenInfo","service","$log","moment","createNotifier","notifier","listeners","handle","listen","listener","isFunction","Error","detach","notify","args","Array","prototype","slice","call","arguments","apply","deepCompare","given","expected","every","child","createSessionCache","timeout","unit","cacheKey","cache","store","meta","$cached","when","expectedMeta","stored","debug","maxAge","subtract","diff","$promise","identityMap","arr","el","mapArray","obj","qReject","reason","reject","collectionIndexOnKey","collection","isArray","idx","o","$window","run","Phone","PHONE","toJsonSoap","pretty","undefined","isNumber","JSON","stringify","jsonSoapReplacer","jsonSoapArgs","_key","Number","String","Boolean","object","spacing","$interpolate","tmhDynamicLocale","API","$document","replaceAll","RegExp","custom","variables","translatedValue","text","split","getCustom","getElementById","addClass","set","$broadcast","getLanguages","$http","translations","customTranslations","combinedTranslations","$","template","tk","locale","languages","languagesCount","languageWatch","loc","toggleside","$timeout","click","event","preventDefault","toggleClass","trigger","on","innerWidth","resizeEvt","resize","doNotExecute","cancel","removeClass","customizations","favicon","pathImage","pathImage2","attrs","elements","body","document","css","compare","path","factory","broadcastEvent","panel","isOpen","sides","closeBody","open","openBody","close","closeAllAndOpen","stateChange","openSidePanel","$element","bindClick","aclmap","openSidePanelController","onOpen","transclude","topVar","checkSize","$bottomNav","$sidebar","height","floor","outerHeight","bind","$digest","endsWith","searchString","position","subjectString","isFinite","lastIndex","checkScroll","scrollTop","window","positionSubmenu","positionContent","$submenu","setPosition","offset","top","$content","$button","$body","showButton","matchHeight","getUrl","urls","charAt","substr","imagePath","location","pathname","$set","$footer","$wrapper","heightSideBar","classList","add","loadedScripts","firstime","loadExternalScript","scriptTag","src","getScript","loadInlineScripts","inlineScripts","append","loadDashboard","cleanUp","externalScript","innerHTML","tagName","hasAttribute","empty","unbindWatch","nextAll","google","charts","ctatype","$uibModal","question","SOAPClient","SOAPClientParameters","_serialize","s","_isAMomentObject","toISOString","constructor","year","getFullYear","month","getMonth","date","getDate","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","tzminutes","getTimezoneOffset","tzhours","timezone","p","exec","$1","$tagName","xmlValue","test","_nodeAttributes","node","attributes","_node2object","wsdlTypes","nodeType","_extractValue","childNodes","isarray","_getTypeFromWsdl","nodeName","toLowerCase","l","j","hasChildNodes","cname","nodeValue","parentNode","dt","isValid","parseInt","getContact","addTouchpoint","addPostTouchpoint","updateTouchpoint","updatePostTouchpoint","permissionTabOpened","faqs","faqId","PaaSFAQInput","faqID","cmsName","getURL","getClient","application","tabName","field","resp","getObjects","valueField","checkValueField","objects","attribute","getObjectsFromArray","countries","inOutCodes","constant","LS_AUTH_USER","SESSION_TIMEOUT","Util","$filter","getExpiration","expiration","setLogin","setToken","setPaaSToken","PaaSToken","AuthenticationString","setAuthenticationString","logoutURL","setAcl","ACL","validUntil","user","list","sessionTimeoutNotifier","onSessionTimeout","fn","sessionTimeout","onAPICall","tokenInfo","Client","AuthorizationMessage","NeedsAutorizationCode","doLogin","login","loginWithCode","reLogin","getPaaSToken","doLogout","$reset","doLoginFromCache","tz","@path","@hasAccess","refResource","group","refFn","mapper","getter","ref","id","options","selectable","thisRef","load","defer","cached","err","refSimpleResource","combinationsMapper","map1","combination","defaultGetter","titleGetter","individual","titlesMapper","map2","map3","initialized","deinitialize","initialize","refLoader","$soap","SIGNAL_API_CALL_STARTED","SIGNAL_API_CALL_ENDED","relogin","resume","keyForErrorCode","unobjectifyPrimitives","baseUrl","port","host","apiCallNotifier","1","session","newToken","newString","getAuthenticationString","noop","errorCodeMappings","unobjectify","customXmlParser","4","excludedMethods","apiCall","post","returnStatus","errorNumber","isString","errorMessage","errorKey","message","output","preserveKey","recursive","filterArrays","filterCreation","delete_null_properties","xmlToJson","action","deferred","soapParams","param","soapCallback","e","rawXml","json","parse","invoke","setCredentials","username","password","tableToString","div","createElement","appendChild","xml","ignoreKeys","doNotParseNode","old","aclKey","aclIf","validateEmail","email","re","firstTimeDefaultlangue","lang","checkEmail","sentByEmail","URL","href","CLEAR","abstract","USER","notLoggedIn","APP","getExtraTabs","extraTabs","dobFormat","format","logout","logoutUrl","useLink","watcherLang","doLoginWithoutCode","ERROR_NOT_LOGGED_IN","ERROR_NOT_AUTHORIZED","notAuthorized","ERROR_TYPE_STATE","errorHandler","evt","toState","toParams","fromState","fromParams","invalidError","CLIENT","LS_ERROR_PREVIOUS","back","retry","stringifyState","stateArgs","toJson","successListener","_evt","to","toArgs","from","fromArgs","notFoundListener","unfoundState","warn","errorListener","$urlRouterProvider","$locationProvider","otherwise","injector","absUrl","querystring","redirect","html5Mode","$logProvider","tmhDynamicLocaleProvider","debugEnabled","localeLocationPattern","$templateCache","put"],"mappings":"AAAA,YAkxEI,SAASA,WACP,MAAO,UAAUC,EAAOC,GAItB,MAHiC,IAA7BD,EAAME,QAAQD,IAChBD,EAAMG,KAAKF,GAEND,GASb,QAASI,mBACP,MAAO,UAAUJ,EAAOK,GAGtB,IAFA,GAAIC,GAAMN,EAAQ,GAEXM,EAAID,OAASA,GAClBC,EAAM,IAAMA,CACd,OAAOA,IAUX,QAASC,YAAWC,GAClB,MAAO,UAAUR,EAAOS,EAAUC,EAAWC,EAAWC,EAASC,GAE/DH,EAAYA,GAAa,IACzBD,EAAWA,IAAY,CAEvB,IAAIK,GAAMC,MAAMf,IAAoB,KAAVA,GAA0B,OAAVA,EAAiB,EAAMA,CAEjE,IAAY,IAARc,GAAaL,EAAU,MAAO,GAClC,IAAIO,GAAgB,EAARhB,CAIZ,OAHAc,GAAMG,KAAKC,IAAIJ,GACfA,EAAMN,EAAsBM,EAAKH,EAAWC,EAASC,GAElDG,EACM,IAAMN,EAAYI,EAElBJ,EAAYI,GAKzB,QAASN,uBAAsBW,GAC/B,MAAO,UAAUnB,EAAOW,EAAWC,EAASC,GAE1CF,EAAYA,GAAa,EACzBC,EAAUA,GAAW,IACrBC,EAASA,GAAU,GAEnB,IAAIC,GAAMC,MAAMf,IAAoB,KAAVA,GAA0B,OAAVA,EAAiB,EAAMA,EAE7DgB,EAAgB,EAARhB,CAaZ,OAZAc,GAAMG,KAAKC,IAAIJ,GAEbA,EADEM,WAAWD,EAAaL,EAAIH,KAAeS,WAAWD,EAAaL,EAAK,IACpEK,EAAaL,EAAKH,GAElBQ,EAAaL,EAAK,GAGZ,KAAXF,IAAgBE,EAAMA,EAAIO,QAAQ,MAAO,MAC/B,KAAVR,IAAeC,EAAMA,EAAIO,QAAQ,MAAO,MAC3CP,EAAMA,EAAIO,QAAQ,KAAMT,GACxBE,EAAMA,EAAIO,QAAQ,KAAMR,GAErBG,EACM,IAAMF,EAENA,GA51EXN,sBAAsBc,SAAW,gBACjCf,WAAWe,SAAW,yBADxBC,QAAQC,OAAO,WACb,YACA,YACA,aACA,aACA,SACA,YACA,eACA,cACA,SACA,UACA,YACA,gBACA,YACA,+BACA,iBACA,UACA,sBACA,cACA,WACA,QACA,+BACA,oBACA,aAKFD,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,qBACnBC,IAAK,oBACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBC,YAAa,yCACbC,WAAY,qCACZC,aAAc,QACdC,SACEC,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,kBAK7BL,WAAW,qCAAsC,cAMlDV,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,mBACnBC,IAAK,gBACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBC,YAAa,qCACbC,WAAY,mCACZC,aAAc,QACdC,SACEC,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,kBAK7BL,WAAW,mCAAoC,WAE9C,GAAIU,GAAKC,IACTD,GAAGE,KAAO,KAMZtB,QAAQC,OAAO,WACZC,QAAA,iBAAO,SAAUC,GAChBA,EAAeC,MAAM,oBACnBC,IAAK,aACLI,YAAa,wBACbC,WAAY,yBACZC,aAAc,WAGjBD,WAAW,0BAAA,SAAA,aAAA,gBAAA,QAAA,aAAA,iBAAA,eAA0B,SACpCa,EAAQC,EAAYC,EAAeC,EAAOC,EAAYR,EAAgBS,GAKtE,QAASC,KACP,GAAIC,IAAQ,CACZV,GAAGW,OACHX,EAAGY,SACHZ,EAAGa,WACHb,EAAGc,QACHf,EAAegB,UAAUC,KAAK,SAAUd,GACtC,GAAIA,EAAKe,eAAe,eAClBf,EAAKgB,WAAWD,eAAeZ,EAAc,QAAY,CAC3D,GAAIc,GAAQvC,QAAQwC,SAASlB,EAAKgB,WAAWb,EAAc,QAC3DzB,SAAQyC,QAAQF,EAAO,SAAUG,GAC3BA,EAAIL,eAAe,aAAeK,EAAIC,UAAYC,IAASF,EAAIE,OACjEd,GAAQ,EACRJ,EAAMmB,WAAWH,EAAIE,MAAMR,KAAK,SAAUU,GACxC,GAAIC,GAAW/C,QAAQwC,SAASM,EAAOxB,KAAKyB,SAC5C3B,GAAGa,QAAUc,EAASC,WAAWf,QACjCb,EAAGc,KAAOa,EAASzB,KAAKY,OAE1Bd,EAAGW,IAAMW,KAMZZ,GACHP,EAAO0B,GAAG,uBA5BhB,GAAIL,GAAOhB,EAAagB,KACpBxB,EAAKC,IAiCTQ,IAEA,IAAIqB,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9CtB,KAGFL,GAAW2B,IAAI,WAAY,WACzBD,SAONlD,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,4BACnBC,IAAK,eACLI,YAAa,wCACbC,WAAY,kCACZC,aAAc,cACdC,SACEwC,KAAA,eAAA,OAAK,SAASC,EAAcC,GAC1B,MAAOA,GAAKC,gBAAgB,4BAKnC7C,WAAW,mCAAA,QAAA,MAAA,MAAA,SAAA,iBAAA,gBAAA,aAAA,IAAA,aAAA,KAAmC,SAC7CgB,EAAO0B,EAAKI,EAAKjC,EAAQJ,EAAgBM,EAAeE,EAAY8B,EAAGjC,EAAYkC,GAoBnF,QAASC,KACPvC,EAAGwC,eACHxC,EAAGyC,kBAEH,KAAK,GAAIC,GAAQ,EAAGA,EAAQN,EAAIO,QAAQC,mBAAmBlF,OAAQgF,IAAS,CAC1E,GAAIG,GAAaT,EAAIO,QAAQC,mBAAmBF,EAE7C9D,SAAQkE,UAAUD,EAAWE,SAC9BF,EAAWE,MAAQF,EAAWE,MAAM,GAEX,MAArBF,EAAWE,MACbF,EAAWG,KAAO,OAElBH,EAAWG,KAAO,QAGpBhD,EAAGwC,YAAYhF,KAAKqF,IAIxB,GAAII,GAAS,EACbrE,SAAQyC,QAAQrB,EAAGwC,YAAa,SAASrB,GACnCvC,QAAQsE,YAAYlD,EAAGyC,gBAAgBtB,EAAMgC,QAAQC,cACvDpD,EAAGyC,gBAAgBtB,EAAMgC,QAAQC,eACjCH,EAAS,sBAAwB9B,EAAMkC,YAAYD,WACnDjC,EAAMmC,YAAcL,EACpB9B,EAAMoC,KAAO,2BAA6BpC,EAAMkC,YAAYD,WAG5DpD,EAAGyC,gBAAgBtB,EAAMgC,QAAQC,aAC/BI,KAAOrC,EAAMgC,QAAQC,WACrBK,IAAM,wBAA0BtC,EAAMgC,QAAQC,WAC9CM,MAAQrB,EAAE,yBAA2BlB,EAAMgC,QAAQC,YACnDlD,SAEFF,EAAGyC,gBAAgBtB,EAAMgC,QAAQC,YAAYlD,KAAK1C,KAAK2D,KAEvD8B,EAAS,sBAAwB9B,EAAMkC,YAAYD,WACnDjC,EAAMmC,YAAcL,EACpB9B,EAAMoC,KAAO,2BAA6BpC,EAAMkC,YAAYD,WAC5DpD,EAAGyC,gBAAgBtB,EAAMgC,QAAQC,YAAYlD,KAAK1C,KAAK2D,MAI3DvC,QAAQyC,QAAQsC,EAAa,SAASxC,GACpC8B,EAAS,sBAAwB9B,EAAMkC,YAAYD,WACnDjC,EAAMmC,YAAcL,EACpB9B,EAAMoC,KAAO,2BAA6BpC,EAAMkC,YAAYD,WAC5DjC,EAAM6B,KAAO,SACbpE,QAAQyC,QAAQrB,EAAGyC,gBAAiB,SAASmB,GAC3ClD,GAAQ,EAER9B,QAAQyC,QAAQwC,EAAe,SAASC,GACtC,GAAGF,EAAKJ,OAASM,EAAIX,QAAQC,WAAY,CACvC,GAAIK,GAAM,eAAiBpD,EAAc,MACzCuD,GAAKG,cAAgBD,EAAIL,MAI7B7E,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASA,GAC/BA,EAAKmD,YAAYD,aAAejC,EAAMkC,YAAYD,aACnD1C,GAAQ,KAGRA,GACFkD,EAAK1D,KAAK1C,KAAK2D,GAEjByC,EAAK1D,KAAK8D,KAAK,SAAUC,EAAGC,GAC1B,GAAIC,GAAQF,EAAEZ,YAAYD,WACtBgB,EAAQF,EAAEb,YAAYD,UAC1B,OAAYgB,GAARD,EACK,GAELA,EAAQC,EACH,EAGF,QAKbxF,QAAQyC,QAAQrB,EAAGyC,gBAAiB,SAASmB,GAC3C,GAAIS,KACJzF,SAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,OAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,OAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,OAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,QAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,QAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,QAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlB1F,QAAQyC,QAAQuC,EAAK1D,KAAM,SAASoE,GACD,QAA7BA,EAAEjB,YAAYD,YAChBiB,EAAS7G,KAAK8G,KAIlBV,EAAK1D,KAAOmE,IAEdE,IAiEF,QAASA,KACP,GAAI7C,MACA8C,IACJzE,GAAegB,UAAUC,KAAK,SAASd,GACrC,GAAIA,EAAKe,eAAe,uBAAwB,CAC9C,GAAIwD,GAAa7F,QAAQwC,SAASlB,EAAK,oBACpCuE,GAAW/G,OAAS,IACrBsC,EAAG0E,eAAgB,EACnB9F,QAAQyC,QAAQoD,EAAY,SAAStD,GACnC,GAAIuC,GAAQ,GACRiB,EAAa,GACbZ,EAAgB,EAEU,MAA1B5C,EAAMyD,kBACRhG,QAAQyC,QAAQwC,EAAe,SAASC,GACtC,GAAG3C,EAAMyD,kBAAoBd,EAAIX,QAAQC,WAAY,CACnD,GAAIK,GAAM,eAAiBpD,EAAc,MACzC0D,GAAgBD,EAAIL,MAIxBC,EAAQrB,EAAE,yBAA2BlB,EAAMyD,iBAC3CD,EAAetC,EAAE,wBAA0BlB,EAAMyD,kBAIhDzD,EAAMF,eAAeZ,EAAc,SAAiD,KAAnCc,EAAMd,EAAc,SACtEqB,EAAOlE,MACLkG,MAAOmB,SAAS1D,EAAMd,EAAc,SACpCsE,YAAaE,SAAS1D,EAAMd,EAAc,OAAY,iBACtDoD,IAAKtC,EAAMuC,MACX1E,MAAO,IACP8F,aACAC,MAAM,EACNxD,SAAUJ,EAAMI,SAChBqD,gBAAiBzD,EAAMyD,gBACvB1E,QACA8E,iBAAmBtB,EACnBuB,uBAAyBN,EACzBZ,cAAgBA,MAKlB7D,EAAKe,eAAe,wBACtBrC,QAAQyC,QAAQK,EAAQ,SAASP,GAC/BvC,QAAQyC,QAAQnB,EAAK,oBAAwB,SAAS0D,EAAMH,GACvDtC,EAAMsC,MAAQG,IACfzC,EAAM2D,UAAUrB,OAGL,iBAATG,IACFY,EAAaf,OAGX,WAAatC,EAAMyD,kBAAoBhB,IACzCzC,EAAM2D,UAAUrB,SAIjB7E,QAAQsG,OAAO/D,EAAM2D,gBACtB3D,EAAM4D,MAAO,KAKnBnG,QAAQyC,QAAQK,EAAQ,SAASP,GAC/BvC,QAAQyC,QAAQF,EAAM2D,UAAW,SAASlB,EAAMH,GAC9C7E,QAAQyC,QAAQrB,EAAGyC,gBAAiB,SAASvC,EAAMiF,GAC7C1B,IAAQ0B,IACVhE,EAAM2D,UAAUrB,GAAOvD,OAKA,KAA1BiB,EAAMyD,iBACPhG,QAAQyC,QAAQrB,EAAGyC,gBAAiB,SAASvC,EAAMiF,GAC7ChE,EAAMyD,kBAAoBO,IAC5BhE,EAAMjB,KAAOA,OAMjBkF,OAAOC,KAAKb,GAAc9G,OAAS,GACrCkB,QAAQyC,QAAQmD,EAAc,SAASrD,EAAOsC,GAC5C7E,QAAQyC,QAAQrB,EAAGyC,gBAAiB,SAASvC,EAAMiF,GAC7C1B,IAAQ0B,IACVX,EAAaf,GAAOvD,QAQhCF,EAAGsF,oBAAsB5D,EACzB1B,EAAGuF,kBAAoBf,IAnT3B,IAAKxC,EACH,MAAO7B,GAAO0B,GAAG,oBAGnB,IAAI7B,GAAKC,IAETD,GAAGwC,eACHxC,EAAGyC,mBACHzC,EAAGsF,uBACHtF,EAAGuF,oBACH,IAAI5B,MACAE,KACAnD,GAAQ,CACZV,GAAG0E,eAAgB,EACnB1E,EAAGwF,kBAAmB,EACtBxF,EAAGyF,mBAAoB,EAqIvBzF,EAAG0F,QACDC,OAAO,OACPC,QAAQ,QAGV5F,EAAG6F,QACDC,KAAO,IACPC,IAAM,IACNC,OAAQ,IACRC,SAAU,IACVC,SAAU,GAGZnG,EAAegB,UAAUC,KAAK,SAASd,GAClCA,IACEA,EAAKe,eAAe,kBACrBjB,EAAG6F,OAAOK,SAAU,EACpBlG,EAAG0F,OAAH1F,SAAkBE,EAAK,cAEtBA,EAAKe,eAAe,iBACrBjB,EAAG6F,OAAOK,SAAU,EACpBlG,EAAG0F,OAAH1F,QAAiBE,EAAK,cAG1BF,EAAG6F,OAAOK,SAAU,EAEpB5F,EAAM6F,0BAA0B9F,EAAc,QAAWW,KAAK,SAASd,GACrEyD,KACAE,KACAF,EAAczD,EAAKkG,iBACnBvC,EAAiB3D,EAAKmG,gBACtB9D,QAKJvC,EAAGsG,eAAiB,SAASzD,GAC3B,GAAI3C,IACFqG,MAAQ1D,EAAW0D,MACnBlD,YAAaR,EAAWQ,YAAYD,WACpCL,MAAOF,EAAWE,MAAMK,WAG1B9C,GAAMkG,iBAAiBtG,GAAMc,KAAK,WAChCoB,EAAIqE,iBAAiBzF,KAAK,WACxBuB,SAKNvC,EAAG0G,SAAW,WACZnG,EAAWoG,WAAW,OAAUC,SAAU,cAAeC,MAAOxG,EAAc,SAGhF,IAAIyB,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9CQ,KAGFnC,GAAW2B,IAAI,WAAY,WACzBD,MAwGF9B,EAAG8G,oBAAsB,SAASF,GAChC,GAAIG,KACJnI,SAAQyC,QAAQuF,EAAS9B,UAAW,SAAS3D,GAC3CvC,QAAQyC,QAAQF,EAAMjB,KAAM,SAAS0D,GACnC,GAAGhF,QAAQkE,UAAUc,EAAK2C,OAAQ,CAChC,GAAIrG,IACFqG,MAAQ3C,EAAK2C,MACblD,YAAaO,EAAKP,YAAYD,WAC9BL,MAAO6D,EAAS5H,MAAMoE,WAExB2D,GAASvJ,KAAK8C,EAAMkG,iBAAiBtG,SAKxCkF,OAAOC,KAAKuB,EAAS1G,MAAMxC,OAAS,GACrCkB,QAAQyC,QAAQuF,EAAS1G,KAAKA,KAAM,SAAS0D,GAC3C,GAAGhF,QAAQkE,UAAUc,EAAK2C,OAAQ,CAChC,GAAIrG,IACFqG,MAAQ3C,EAAK2C,MACblD,YAAaO,EAAKP,YAAYD,WAC9BL,MAAO6D,EAAS5H,MAAMoE,WAExB2D,GAASvJ,KAAK8C,EAAMkG,iBAAiBtG,OAM3CoC,EAAG0E,IAAID,GAAU/F,KAAK,WACpBoB,EAAIqE,iBAAiBzF,KAAK,WACxBuB,YASR3D,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,qBACnBC,IAAK,QACLI,YAAa,0BACbC,WAAY,2BACZC,aAAc,OACdC,SACEwC,KAAA,eAAA,OAAK,SAASC,EAAcC,GAC1B,MAAOA,GAAKC,gBAAgB,qBAKnC7C,WAAW,4BAAA,QAAA,MAAA,MAAA,YAAA,MAAA,IAAA,SAAA,sBAAA,aAAA,gBAAA,SAAA,aAAA,iBAA4B,SACtCgB,EAAO0B,EAAKiF,EAAKC,EAAW9E,EAAKC,EAAGlC,EAAQgH,EAAqB5G,EACjEF,EAAe+G,EAAQhH,EAAYL,GAsBnC,QAASsH,KACPrH,EAAGsH,eACHtH,EAAGuH,aACHvH,EAAGwH,YAEHzH,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAIA,EAAKe,eAAe,eAAgB,CACtC,GAAIwG,GAAc7I,QAAQwC,SAASlB,EAAKuH,YACxC7I,SAAQyC,QAAQe,EAAIO,QAAQ+E,2BAA4B,SAAS9D,GAC/DhF,QAAQyC,QAAQoG,EAAa,SAAStG,GACpC,GAAIyC,EAAK3C,eAAe,gBAAiB,CACvC,GAAIO,GAAOoC,EAAK+D,UAAUvE,WAAa,IAAOQ,EAAKgE,aAAaxE,UAC5DjC,GAAMK,OAASA,IACjBoC,EAAKiE,OAAS1G,EAAM0G,OACpBjE,EAAAA,UAAczC,EAAAA,eAGZA,GAAMK,OAASoC,EAAK+D,UAAUvE,aAChCQ,EAAKiE,OAAS1G,EAAM0G,OACpBjE,EAAAA,UAAczC,EAAAA,aAIpBnB,EAAGsH,YAAY9J,KAAKoG,SAGtB5D,GAAGsH,YAAclF,EAAIO,QAAQ+E,6BAIjC9I,QAAQyC,QAAQe,EAAI0F,WAAWC,IAAK,SAASnE,GAC3C7D,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAIA,EAAKe,eAAe,eAAgB,CACtC,GAAIwG,GAAc7I,QAAQwC,SAASlB,EAAKuH,YACxC7I,SAAQyC,QAAQoG,EAAa,SAAStG,GACM,KAAvCA,EAAMK,KAAKjE,QAAQqG,EAAK+D,YAAqBxG,EAAM6G,SAAWhI,EAAGuH,UAAUU,SAASrE,KACrF5D,EAAGuH,UAAU/J,KAAKoG,GAClB5D,EAAGwH,SAAS5D,EAAK+D,sBAO3B/I,QAAQyC,QAAQe,EAAI8F,kBAAkBH,IAAK,SAASnE,GAClDhF,QAAQyC,QAAQuC,EAAM,SAASuE,GAC7BpI,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAIA,EAAKe,eAAe,eAAgB,CACtC,GAAIwG,GAAc7I,QAAQwC,SAASlB,EAAKuH,YACxC7I,SAAQyC,QAAQoG,EAAa,SAAStG,GACpC,GAAoB,KAAhBgH,EAAEC,UAAkB,CACtB,GAAI5G,GAAO2G,EAAEE,OAAS,IAAMF,EAAEC,SAC3B5G,KAASL,EAAMK,MAAQL,EAAM6G,QAC9BhI,EAAGwH,SAASW,EAAEE,QAAQ7K,KAAK2K,OAG1BA,GAAEE,SAAWlH,EAAMK,MAAQL,EAAM6G,QAClChI,EAAGwH,SAASW,EAAEE,QAAQ7K,KAAK2K,YAgB3C,QAASG,KACPtI,EAAGuI,WACHtB,EAAIsB,UAAUvH,KAAK,SAASU,GAC1B9C,QAAQyC,QAAQK,EAAQ,SAASP,EAAOsC,GACV,SAAxBtC,EAAMqH,eACRxI,EAAGuI,QAAQ/K,KAAK2D,GAGN,MAARsC,GAAerB,EAAIO,QAAQ8F,wBAAwBC,WAAWC,YAAclF,GAC9EzD,EAAGuI,QAAQ/K,KAAK2D,KAGpByH,MAkDJ,QAASA,KACHxG,EAAIO,QAAQ8F,wBAAwBI,MACtC7I,EAAG8I,aAAaD,IAAM,GAAIE,MAAK3G,EAAIO,QAAQ8F,wBAAwBI,MAGjEzG,EAAIO,QAAQ8F,wBAAwBO,eACtChJ,EAAG8I,aAAaE,aAAe5G,EAAIO,QAAQ8F,wBAAwBO,aAAa5F,YAG9EhB,EAAIO,QAAQ8F,wBAAwBC,aACtC1I,EAAG8I,aAAaJ,WAAatG,EAAIO,QAAQ8F,wBAAwBC,WAAWC,WAG1EvG,EAAIO,QAAQ8F,wBAAwBQ,YACtCjJ,EAAG8I,aAAaG,UAAY7G,EAAIO,QAAQ8F,wBAAwBQ,UAAUN,WAG5E/J,QAAQyC,QAAQrB,EAAGuI,QAAS,SAASpH,GAC/BnB,EAAG8I,aAAaJ,aAAevH,EAAMuH,aACvC1I,EAAG8I,aAAaI,kBAAqB/H,EAAMwD,cAI/C,IAAIlB,GAAMzD,EAAG8I,aAAaG,UACtBE,EAASnJ,EAAG8I,aAAaJ,WACzBU,EAAY/I,EAAc,MAC1B+B,GAAIiH,OAAOtB,IAAItE,IAAQrB,EAAIiH,OAAOtB,IAAItE,GAAK0F,IAAW/G,EAAIiH,OAAOtB,IAAItE,GAAK0F,GAAQC,KAClFpJ,EAAG8I,aAAaQ,iBAAmBlH,EAAIiH,OAAOtB,IAAItE,GAAK0F,GAAQC,GAAUG,YA+M/E,QAASC,GAAqBrI,GAK5B,OAJc,OAAVA,GAAkBvC,QAAQsE,YAAY/B,KAAWA,KACnDA,EAAQ,IAGHA,EAGT,QAASsI,GAAOC,GACd,IAAKA,IAAOA,EAAGC,eACb,MAAO,EAET,IAAIC,GAAKF,EAAGC,cACZ,OAAOH,GAAqBI,EAAGH,QAAU,IACvCD,EAAqBI,EAAGC,oBACtBL,EAAqBI,EAAGE,kBACxB,IAAMN,EAAqBI,EAAGE,kBAC9B,IAIN,QAASC,GAAKL,GACZ,IAAKA,IAAOA,EAAGC,eACb,MAAO,EAET,IAAIC,GAAKF,EAAGC,eAERK,EAAUR,EAAqBI,EAAGK,YAKtC,OAJgB,KAAZD,IACFA,EAAUJ,EAAGK,YAAY,kBAGnBT,EAAqBI,EAAGM,YAAc,IAAMV,EAAqBI,EAAGG,OAAUH,EAAGM,YAAcN,EAAGG,KAAO,KAAM,IAAMC,GAASG,OAGxI,QAASC,GAAQV,GACf,MAAKA,IAIGD,EAAOC,GAAKK,EAAKL,IACtBW,OAAO,SAAS1M,GAAO,MAAsB,KAAfA,EAAIwM,SAClCG,KAAK,MALC,GAzaX,IAAKtI,EACH,MAAO7B,GAAO0B,GAAG,2BAGnB,IAAI7B,GAAKC,IAETD,GAAGuI,WACHvI,EAAGsH,eACHtH,EAAGuH,aACHvH,EAAGwH,YACHxH,EAAGuK,cAAe,EAClB3L,QAAQyC,QAAQe,EAAI8F,kBAAkBH,IAAK,SAASnE,GAClDhF,QAAQyC,QAAQuC,EAAM,SAAS1D,GACN,KAAnBA,EAAKkI,YACPpI,EAAGuK,cAAe,OAwExBlD,IAEArH,EAAGwK,YAAc,SAASC,GACxB,MAAOzK,GAAGwH,SAASiD,IAmBrBnC,IAEAtI,EAAG0K,iBAAmB,SAAShB,GAC7B,OAAQA,EAAG/B,UAAUgB,WACnB,IAAK,OAAQ,MAAO,EACpB,KAAK,QAAS,MAAO,EACrB,KAAK,MAAO,MAAO,EACnB,KAAK,QAAS,MAAO,EACrB,KAAK,MAAO,MAAO,EACnB,SAAS,MAAO,OAIpB3I,EAAG2K,aAAe,SAAsBnH,GACtC,GAAIrC,GAAQqC,EAAKmF,SAKjB,OAJI/J,SAAQgM,SAASzJ,KACnBA,EAAQ,IAGHA,GAGTnB,EAAG6K,gBAAkB,SAASnB,GAC5B,IAAKA,EACH,MAAO,EAGT,QAAQA,EAAG/B,UAAUgB,WACnB,IAAK,OAAQ,MAAOyB,GAAQV,EAC5B,KAAK,MACL,IAAK,QACL,IAAK,QACL,QAAS,MAAOA,GAAGvI,QAIvBnB,EAAG8I,cACDgC,UAAW1I,EAAIO,QAAQ8F,wBAAwBqC,UAC/CC,WAAY3I,EAAIO,QAAQ8F,wBAAwBsC,WAChDlC,IAAK,KACLG,aAAc,KACdN,WAAY,KACZO,UAAW,KACX+B,QAAS5I,EAAIO,QAAQ8F,wBAAwBuC,SAmC/CpC,IAEA5I,EAAGiL,WAAa,WACd,GAAI5B,MACAF,EAASnJ,EAAG8I,aAAaJ,WACzBU,EAAWpJ,EAAG8I,aAAaE,YAE/B,KAAK,GAAIvF,KAAOrB,GAAIiH,OAAOtB,IACrB3F,EAAIiH,OAAOtB,IAAItE,IAAQrB,EAAIiH,OAAOtB,IAAItE,GAAK0F,IAAW/G,EAAIiH,OAAOtB,IAAItE,GAAK0F,GAAQC,IAClFC,EAAO7L,KAAK4E,EAAIiH,OAAOtB,IAAItE,GAAK0F,GAAQC,GAI9C,OAAOC,IAGTrJ,EAAGkL,aAAe,WAChB5K,EAAM6K,iBAAiBvM,QAAQwM,KAAKpL,EAAG8I,eAAe9H,KAAK,WACzDoB,EAAIqE,iBAAiBzF,KAAK,WACxBsH,IACAlB,EAAOiE,QAAQhJ,EAAE,sCACjBgF,SAKNrH,EAAG8H,cACH9H,EAAGsL,qBAAuB,WACxBtL,EAAGuL,gBACD3D,aAAc,GACd4D,gBAAiB,IACjB7B,gBACEM,YAAa,QAKnBjK,EAAGyL,kBAAoB,SAAS/B,GAC9B,GAAIgC,GAAY,uBACZC,EAAO,MAEX,IADA3L,EAAG4L,oBAAsB,KACrBlC,EAAI,CACN,GAAI/B,GAAY+B,EAAG/B,SAKnB,QAJI/I,QAAQgM,SAASjD,KACnBA,EAAYA,EAAUgB,WAGhBhB,GACN,IAAK,OACHgE,EAAO,MACP,MACF,KAAK,QACH3L,EAAG4L,oBAAsBvJ,EAAE,gDAC3BsJ,EAAO,SACP,MACF,KAAK,MACH3L,EAAG4L,oBAAsBvJ,EAAE,8CAC3BsJ,EAAO,SACP,MACF,KAAK,QACH3L,EAAG4L,oBAAsBvJ,EAAE,gDAC3BsJ,EAAO,SACP,MACF,KAAK,MACH3L,EAAG4L,oBAAsBvJ,EAAE,8CAC3BsJ,EAAO,SACP,MACF,SACE3L,EAAG4L,oBAAsBvJ,EAAE,gDAC3BsJ,EAAO,WAKb,MAAOD,GAAYC,EAAO,SAG5B3L,EAAG6L,iBAAmB,WACpB,GACIC,GADA5L,IAEgC,UAAhCF,EAAGuL,eAAe5D,WACpBzH,GACE0H,aAAc5H,EAAGuL,eAAe3D,aAChCD,UAAW3H,EAAGuL,eAAe5D,UAC7B8B,OAAQzJ,EAAGuL,eAAe5B,eAAeF,OACzCI,kBAAmB7J,EAAGuL,eAAe5B,eAAeE,kBACpDK,WAAYlK,EAAGuL,eAAe5B,eAAeO,WAC7CH,KAAM/J,EAAGuL,eAAe5B,eAAeI,KACvCE,YAAajK,EAAGuL,eAAe5B,eAAeM,aAGhD6B,EAAS,oBAEL9L,EAAGuL,eAAe5B,eAAeG,mBACnC5J,EAAK4J,iBAAmB9J,EAAGuL,eAAe5B,eAAeG,oBAG3D5J,GACEiB,MAAOnB,EAAGuL,eAAepK,MACzBwG,UAAW3H,EAAGuL,eAAe5D,UAC7BC,aAAc5H,EAAGuL,eAAe3D,cAGlCkE,EAAS,iBAGXxL,EAAMwL,GAAQ5L,GAAMc,KAAK,WACvBoB,EAAIqE,iBAAiBzF,KAAK,WACxBqG,MAEFrH,EAAGuL,kBACHrE,EAAU6E,cAId/L,EAAGgM,eAAiB,WAClB,GACIF,GADA5L,IAGgC,UAAhCF,EAAGuL,eAAe5D,WACpBzH,GACE+L,QAASjM,EAAGuL,eAAeU,QAC3BrE,aAAc5H,EAAGuL,eAAe3D,aAChCD,UAAW3H,EAAGuL,eAAe5D,UAC7B8B,OAAQzJ,EAAGuL,eAAe5B,eAAeF,OACzCI,kBAAmB7J,EAAGuL,eAAe5B,eAAeE,kBACpDK,WAAYlK,EAAGuL,eAAe5B,eAAeO,WAC7CH,KAAM/J,EAAGuL,eAAe5B,eAAeI,KACvCE,YAAajK,EAAGuL,eAAe5B,eAAeM,aAGhD6B,EAAS,uBAEL9L,EAAGuL,eAAe5B,eAAeG,mBACnC5J,EAAK4J,iBAAmB9J,EAAGuL,eAAe5B,eAAeG,oBAG3D5J,GACE+L,QAASjM,EAAGuL,eAAeU,QAC3B9K,MAAOnB,EAAGuL,eAAepK,MACzBwG,UAAW3H,EAAGuL,eAAe5D,UAC7BC,aAAc5H,EAAGuL,eAAe3D,cAGlCkE,EAAS,oBAGXxL,EAAMwL,GAAQ5L,GAAMc,KAAK,WACvBoB,EAAIqE,iBAAiBzF,KAAK,WACxBqG,IACArH,EAAGuL,kBACHrE,EAAU6E,gBAKhB/L,EAAGkM,kBAAoB,SAASvE,GAC9B,GAAIvF,EAAI8F,kBAAkBiE,IAAIxE,GAAY,CACxC,GAAIyE,GAAehK,EAAI8F,kBAAkBiE,IAAIxE,GAAW0C,OAAO,SAAS/I,GACtE,MAAyB,KAAlBA,EAAI8G,WAEb,OAA8B,IAAvBgE,EAAa1O,OAGtB,OAAO,GAGTsC,EAAGqM,mBAAqB,SAA4B3C,GAClD1J,EAAGuL,eAAiB3M,QAAQ0N,UAAW5C,GACnC9K,QAAQsE,YAAYlD,EAAGuL,eAAe3D,cACxC5H,EAAGuL,eAAe3D,aAAe,GAEjC5H,EAAGuL,eAAe3D,aAAe8B,EAAG9B,aAAaxE,WAEnDpD,EAAGuL,eAAe5D,UAAY3H,EAAGuL,eAAe5D,UAAUgB,UAE1D3I,EAAGuL,eAAe5B,eAAiB/K,QAAQ0N,UAAW5C,EAAGC,gBAErDD,EAAGC,gBAAkBD,EAAGC,eAAe1I,eAAe,iBACpDjB,EAAGuL,eAAe5B,eAAeM,YAAcP,EAAGC,eAAeM,YAAYtB,YAIrF3I,EAAGuM,iBAAmB,SAA0B7C,GAC9C,GAAI8C,GAAO,IAE2C,KAAlDpK,EAAIO,QAAQ+E,2BAA2BhK,SACzC8O,EAAOnK,EAAE,qCAGX8E,EAAoBsF,cAClBpK,EAAE,4CACFmK,GACAxL,KAAK,WACLV,EAAMiM,iBAAiB7C,EAAGuC,SAASjL,KAAK,WACtCoB,EAAIqE,iBAAiBzF,KAAK,WACxBqG,WAmDRrH,EAAG0G,SAAW,WACZnG,EAAWoG,WAAW,OAAUC,SAAU,cAAeC,MAAOxG,EAAc,SAGhF,IAAIyB,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9CuG,IACAM,KAGFxI,GAAW2B,IAAI,WAAY,WACzBD,SAQJlD,QAAQC,OAAO,WACZC,QAAA,iBAAO,SAAUC,GAChBA,EAAeC,MAAM,oBACnBC,IAAK,OACLI,YAAa,wBACbC,WAAY,yBACZC,aAAc,MACdC,SACEwC,KAAA,OAAK,SAAUE,GACb,MAAOA,GAAKC,gBAAgB,oBAKnC7C,WAAW,0BAAA,MAAA,SAAA,aAAA,gBAAA,QAAA,aAAA,iBAA0B,SACpC0C,EAAK7B,EAAQC,EAAYC,EAAeC,EAAOC,EAAYR,GAY3D,QAAS2M,KACP3M,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAIA,EAAKe,eAAe,OACtB,GAAIf,EAAKyM,IAAI1L,eAAeZ,EAAc,QAAY,CACpD,GAAIc,GAAQvC,QAAQwC,SAASlB,EAAKyM,IAAItM,EAAc,QACjDc,GAAMzD,OAAS,GAChBkB,QAAQyC,QAAQF,EAAO,SAASyC,GAC9BA,EAAKgJ,UAAY/H,SAASjB,EAAKF,SAEjC1D,EAAG6M,KAAO1L,EACVnB,EAAG0D,MAAQmB,SAAS1D,EAAM,GAAGuC,OAC7B1D,EAAG2E,YAAcE,SAAS1D,EAAM,GAAGwD,cAEnC3E,EAAG8M,kBAGL9M,GAAG8M,gBAzBX,IAAK9K,EACH,MAAO7B,GAAO0B,GAAG,oBAGnB,IAAI7B,GAAKC,IACTD,GAAG6M,QACH7M,EAAG2E,YAAc,GACjB3E,EAAG0D,MAAQ,GAwBXgJ,IAEA1M,EAAG+M,QAAU,SAASpM,GACpBX,EAAG0D,MAAQmB,SAASlE,EAAI+C,OACxB1D,EAAG2E,YAAcE,SAASlE,EAAIgE,aAGhC,IAAI7C,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9C2K,KAGFtM,GAAW2B,IAAI,WAAY,WACzBD,MAGF9B,EAAG0G,SAAW,WACZnG,EAAWoG,WAAW,OACpBC,SAAU,cACVC,MAAOxG,EAAc,aAQ7BzB,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,kBACnBC,IAAK,UACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBC,YAAa,+BACbC,WAAY,yBACZC,aAAc,SACdC,SACEC,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,kBAK7BL,WAAW,yBAA0B,cAItCV,QAAQC,OAAO,WACdmO,UAAU,qBAAA,WAAqB,SAASC,GACvC,OACEC,SAAU,IACVC,OACIC,KAAM,sBAEVC,KAAM,SAASC,EAAQC,GAcrB,QAASC,GAAkBC,GACzB,GAAIC,GAAWH,EAAQI,KAAK,kCAExBL,GAAOF,KAAKQ,UAEVF,EAAShQ,OAAS,GACpBgQ,EAASG,SAGXH,EAAW9O,QAAQ2O,QAAQ,6EAC3BG,EAASI,KAAK,cAAeC,EAAeN,IAC5CF,EAAQS,MAAMf,EAASS,GAAUJ,KACxBI,EAAShQ,OAAS,GAE3BgQ,EAASG,SAIb,QAASE,GAAeE,GACtB,GAAIC,KAEJ,KAAK,GAAIzD,KAAQwD,GACf,GAAIA,EAAahN,eAAewJ,GAG9B,IAAK,GAFDgD,GAASQ,EAAaxD,GAEjBtC,EAAI,EAAGA,EAAIsF,EAAO/P,OAAQyK,IAAK,CACtC,GAAIgG,GAAQV,EAAOtF,EACnBoF,GAAQa,OAAO,QAAQC,KAAK,cAAgBF,EAAM,MAAW,MAAMG,MACnE,IAAIzH,GAAS0G,EAAQa,OAAO,QAAQC,KAAK,cAAgBF,EAAM,MAAW,MAAMG,QAAUH,EAAM,KAEhE,MAA5BD,EAAS3Q,QAAQsJ,IACnBqH,EAAS1Q,KAAKqJ,GAKtB,MAAOqH,GAAS5D,KAAK,MAjDvB,GAAIiE,GAAejB,EAAOkB,OAAO,gBAAiB,SAASC,GACzDlB,EAAQmB,KAAK,WAAYD,KACxB,GACCE,EAAcrB,EAAOkB,OAAO,cAAe,SAASf,GACtDD,EAAkBC,KACjB,EAEHH,GAAOvL,IAAI,WAAY,WAErBwM,IACAI,WAgDR/P,QAAQC,OAAO,WACZC,QAAA,iBAAO,SAAUC,GAChBA,EAAeC,MAAM,qBACnBC,IAAK,eACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBC,YAAa,qCACbC,WAAY,uBACZC,aAAc,OACdC,SACEC,oBAAA,qBAAoB,SAAUC,GAC5B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAAUF,GAC7B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAAUC,GACrB,MAAOA,GAAeJ,kBAK7BL,WAAW,wBAAA,SAAA,eAAA,OAAA,YAAA,IAAA,gBAAA,SAAA,aAAA,kBAAA,iBAAwB,SAClCa,EAAQK,EAAc0B,EAAM0M,EAAWvM,EAAGhC,EAAe+G,EAAQ7G,EACjEsO,EAAiBC,GAEblQ,QAAQkE,UAAU+L,EAAgB,WACpC1O,EAAO0B,GAAG,oBAGZ,IAAI7B,GAAKC,IACTD,GAAGE,KAAO,GACVF,EAAG+O,eAAiBD,EAEftO,EAAaS,eAAe,UAC/Bd,EAAO0B,GAAG,yBAGRjD,QAAQsE,YAAY7C,EAAc,SACpCF,EAAO0B,GAAG,iBACRmN,MAAOxO,EAAawO,QAIxBhP,EAAGiP,UAAY,WACE,IAAXjP,EAAGE,KACLgC,EAAKgN,gBAAgB1O,EAAawO,MAAOhP,EAAGE,MAAMc,KAAK,SAAUd,GAQ/D,GAPAK,EAAWoG,WACT,OACEC,SAAU,YACVC,MAAOxG,EAAc,SAIrBH,EAAK8O,MAAO,CACd,GAAIG,GAAeP,EAAUQ,QACzBD,GAAalO,eAAe,aAC9BoB,EAAEgN,YAAYF,EAAa/F,UAE7BjJ,EAAO0B,GAAG,yBAEV1B,GAAO0B,GAAG,2BAfdK,SAiBS,WACP/B,EAAO0B,GAAG,2BAGZuF,EAAO+G,MAAM9L,EAAE,wCAInBrC,EAAGsP,QAAU,WACXpN,EAAKqN,aAAa/O,EAAawO,WAMrCpQ,QAAQC,OAAO,WACd2Q,QAAQ,QAAA,kBAAA,KAAA,OAAA,SAAO,SACdX,EAAiBvM,EAAImN,EAAMC,GAG3B,GAAI1P,KA+HJ,OA7HAA,GAAG2P,eAAiB,WAClB,GAAIC,KACJA,GAASC,YAET,IAAIC,GAAS,CAqBb,OAnBAF,GAASG,OAAS,SAASC,GACzB,IAAIpR,QAAQqR,WAAWD,GACrB,KAAM,IAAIE,OAAM,6CAGlB,OADAN,GAASC,UAAUC,GAAUE,EACtBF,KAGTF,EAASO,OAAS,SAASL,SAClBF,GAASE,IAGlBF,EAASQ,OAAS,WAChB,GAAIC,GAAOC,MAAMC,UAAUC,MAAMC,KAAKC,UACtCtL,QAAOC,KAAKuK,EAASC,WAAWxO,QAAQ,SAASyO,GAC/CF,EAASC,UAAUC,GAAQa,MAAM,KAAMN,MAIpCT,GAGT5P,EAAG4Q,YAAc,SAASC,EAAMC,GAE9B,MAAIlS,SAAQgM,SAASiG,GAIZjS,QAAQgM,SAASkG,GAKjB1L,OAAOC,KAAKwL,GAAOE,MAAM,SAASC,GACvC,MAAOhR,GAAG4Q,YAAYC,EAAMG,GAAOF,EAASE,OALvC,EAJAH,IAAUC,GAcrB9Q,EAAGiR,mBAAqB,SAASC,EAASC,EAAMC,GAC9C,GAAIC,KA2CJ,OAzCAA,GAAMC,MAAQ,SAAS5P,EAAQ6P,GAE7B,MAAG7P,GAAO8P,SACD,GAET3C,EAAgBuC,IACd1P,OAAQA,EACR+P,KAAM/B,IACN6B,KAAMA,IAED,IAGTF,EAAMlF,IAAM,SAASuF,GACnB,GAAIC,GAAS9C,EAAgBuC,EAE7B,KAAIO,EAEF,MADAlC,GAAKmC,MAAM,iBAAkBR,IACtB,CAGT,IAAIK,GAAO/B,EAAOiC,EAAOF,MACrBI,EAASnC,IAASoC,SAASZ,EAASC,EACxC,OAAGM,GAAKM,KAAKF,GAAU,GACrBpC,EAAKmC,MAAM,oCAAqCR,IACzC,GAGNM,IAAiB1R,EAAG4Q,YAAYe,EAAOJ,KAAMG,IAC9CjC,EAAKmC,MAAM,qCAAsCR,IAC1C,IAET3B,EAAKmC,MAAM,gBAAiBR,GAE5BO,EAAOjQ,OAAO8P,SAAU,EAExBG,EAAOjQ,OAAOsQ,SAAW1P,EAAG9C,QAAQmS,EAAOjQ,QAEpCiQ,EAAOjQ,SAGT2P,GAGTrR,EAAGiS,YAAc,SAASC,GACxB,GAAInK,KAIJ,OAHAmK,GAAI7Q,QAAQ,SAAS8Q,GACnBpK,EAAIoK,GAAMA,IAELpK,GAGT/H,EAAGoS,SAAW,SAASF,EAAKzO,GAC1B,GAAIsE,KAIJ,OAHAmK,GAAI7Q,QAAQ,SAASgR,GACnBtK,EAAIsK,EAAI5O,IAAQ4O,IAEXtK,GAGT/H,EAAGsS,QAAU,SAASC,GACpB,MAAOjQ,GAAGkQ,OAAOD,IAGnBvS,EAAGyS,qBAAuB,SAASC,EAAYL,EAAK5O,GAClD,IAAI7E,QAAQ+T,QAAQD,GAClB,MAAO,EAET,KAAI,GAAIE,GAAM,EAAGA,EAAMF,EAAWhV,OAAQkV,IAAO,CAC/C,GAAIC,GAAIH,EAAWE,EACnB,IAAGC,IAAMR,GAAOQ,EAAEpP,KAAS4O,EAAI5O,GAC7B,MAAOmP,GAGX,MAAO,IAGF5S,KAMTpB,QAAQC,OAAO,WACd2Q,QAAQ,SAAA,UAAS,SAASsD,GACzB,GAAI9S,KAkBJ,QAdE,uBACA,+BACA,gBACA,aACA,sBACA,cACA,wBACA,sBACA,aACA,qBACAqB,QAAQ,SAASyK,GACjB9L,EAAG8L,GAAUgH,EAAQhH,KAGhB9L,KAGR+S,KAAA,aAAA,QAAI,SAAS3S,EAAY4S,GACxB5S,EAAW6S,MAAQD,KAKrBpU,QAAQC,OAAO,WACdwL,OAAO,YAAA,UAAW,SAASyI,GAC1B,QAASI,GAAWb,EAAKc,GACvB,MAAmB,mBAARd,GACFe,QAEJxU,QAAQyU,SAASF,KACpBA,EAASA,EAAS,EAAI,MAEjBL,EAAQQ,KAAKC,UAAUlB,EAAKmB,EAAkBL,IAEvD,QAASM,GAAapB,GACpB,GAAIhC,GAAOjL,OAAOC,KAAKgN,GAEtBhI,OAAO,SAASlF,GACf,MAAO/G,OAAM+G,KAGd4C,IAAI,SAAS5C,GACZ,MAAOA,GAAI,MAAQkN,EAAIlN,IAEzB,OAAOkL,GAAK3S,OAAS,EACnB,KAAO2S,EAAK/F,KAAK,MAAQ,IAAM,GAEnC,QAASkJ,GAAiBE,EAAMpS,GAC9B,MACEA,aAAeqS,SACfrS,YAAesS,SACftS,YAAeuS,SAER,GAAKvS,EAAIqH,UAAY8K,EAAanS,GAEpCA,EAGT,MAAO,UAASwS,EAAQC,GAItB,MAHInV,SAAQsE,YAAY6Q,KACpBA,EAAU,GAEPb,EAAWY,EAAQC,OAM9BnV,QAAQC,OAAO,WACd2Q,QAAQ,KAAA,qBAAA,eAAA,gBAAA,mBAAA,MAAA,aAAA,YAAI,SACX9P,EAAoBsU,EAAc3T,EAAe4T,EAAkBC,EAAK9T,EAAY+T,GAGpF,QAASC,GAAWzW,EAAK0Q,EAAM3P,GAC3B,MAAOf,GAAIe,QAAQ,GAAI2V,QAAOhG,EAAM,KAAM3P,GAG9C,QAAS2D,GAAEoB,EAAK6Q,EAAQC,GACtB,GAAG9Q,EAAK,CACN,GAAI+Q,GAAkB,EACtB,IACyC,KAAvC/Q,EAAIlG,QAAQ,wBAC6B,KAAzCkG,EAAIlG,QAAQ,0BAC8B,KAA1CkG,EAAIlG,QAAQ,2BACgC,KAA5CkG,EAAIlG,QAAQ,4BACZ,CACA,GAAIkX,GAAOhR,EAAIiR,MAAM,IACrBF,GAAkB9U,EAAmBiV,UAAUF,EAAK,GAAIA,EAAK,QAE7DD,GAAkB9U,EAAmByM,IAAI1I,EAAK6Q,EAGhD,IAA+C,KAA5C7Q,EAAIlG,QAAQ,4BACb,MAAOiX,EAIT,IAAIA,EAAiB,CACnB,GAAIlR,GAAckR,EAAgBxU,EAAGoJ,SACrC,IAAoB,KAAhB9F,GAAsB1E,QAAQsE,YAAYI,IAAgC,OAAhBA,EAAsB,CAClF,GAA4C,KAAzCG,EAAIlG,QAAQ,yBAAiC,CAC9C,GAAIgQ,GAAU3O,QAAQ2O,QAAQ4G,EAAU,GAAGS,eAAenR,GAE1D,OADA8J,GAAQsH,SAAS,QACV,GAET,MAA6C,KAA1CpR,EAAIlG,QAAQ,0BACN,GAEF,IAAMkG,EAAM,IAIrB,MAAOuQ,GAAa1Q,GAAaiR,GAQjC,MANIA,KACF9Q,EAAM2Q,EAAW3Q,EAAK,IAAK,MAC3BA,EAAM2Q,EAAW3Q,EAAK,IAAK,MAC3BA,EAAMuQ,EAAavQ,GAAK8Q,IAGnB,IAAM9Q,EAAM,KAKzB,GAAIzD,GAAKqC,CAqBT,OAnBArC,GAAGqP,YAAc,SAASjG,GACxBpJ,EAAGoJ,SAAWA,EACd6K,EAAiBa,IAAI1L,GACrB/I,EAAc,OAAY+I,EAC1B8K,EAAI7E,YAAYjG,GAAUpI,KAAK,WAC7BZ,EAAW2U,WAAW,kBAAmB3L,MAIxC/I,EAAc,OAGjBL,EAAGqP,YAAYhP,EAAc,QAF7BL,EAAGqP,YAAY,MAKjBrP,EAAGgV,aAAe,WAChB,MAAOtV,GAAmByM,IAAI,wBAGzBnM,KAGRwP,QAAQ,sBAAA,QAAA,gBAAsB,SAASyF,EAAO5U,GAC7C,GAAI6U,MACAC,KACAC,KACApV,IA0CJ,OAxCAA,GAAGL,QAAU,WACX,MAAOsV,GAAM9I,IAAI,qBAAqBd,QAAQ,SAASnL,GAErD,MADAgV,GAAehV,KAKnBF,EAAGH,SAAW,WACZ,MAAOoV,GAAM9I,IAAI,kBAAoB9L,EAAc,OAAY,SAASgL,QAAQ,SAASnL,GACvF,MAAY,QAATA,EACDiV,EAAqBjV,EADvB,UAOJF,EAAGmM,IAAM,SAAa1I,GAIpB,MAHA2R,MACAA,EAAuBC,EAAE/I,UAAU4I,EAAaC,GAE5CC,EAAqBnU,eAAewC,GAC/B2R,EAAqB3R,IAGvB,GAGTzD,EAAG2U,UAAY,SAAmBlR,EAAKtC,GAIrC,MAHAiU,MACAA,EAAuBC,EAAE/I,UAAU4I,EAAaC,GAE5CC,EAAqBnU,eAAewC,IACnC2R,EAAqB3R,GAAKxC,eAAeE,GACnCiU,EAAqB3R,GAAKtC,IAI9B,GAGFnB,KAKTpB,QAAQC,OAAO,WACdmO,UAAU,KAAK,WACd,OACEE,SAAU,KACVxO,SAAS,EACT4W,SAAU,gCACVnI,OACI1J,IAAK,IACL8R,GAAI,KAERjW,YAAA,IAAA,SAAY,SAAS+C,EAAGiL,GACtB,GAAItN,GAAKC,IACTD,GAAGqC,EAAIA,EACPrC,EAAGyD,IAAM6J,EAAOiI,IAAMjI,EAAO7J,MAE/BlE,aAAc,QAGjByN,UAAU,aAAc,WACvB,OACEE,SAAU,KACVxO,SAAS,EACTW,YAAa,8CACbC,YAAA,IAAA,SAAY,SAAS+C,EAAGiL,GACtB,GAAItN,GAAKC,IACTD,GAAGwV,OAASnT,EAAE+G,SACdpJ,EAAGyV,UAAYpT,EAAE2S,eACjBhV,EAAG0V,eAAiBtQ,OAAOC,KAAKrF,EAAGyV,WAAW/X,MAE9C,IAAIiY,GAAgBrI,EAAOkB,OAAO,WAChC,MAAOnM,GAAE+G,UACR,WACDpJ,EAAGyV,UAAYpT,EAAE2S,eACjBhV,EAAGwV,OAASnT,EAAE+G,UAGhBkE,GAAOvL,IAAI,WAAY,WACrB4T,MAGF3V,EAAGqP,YAAc,SAAqBuG,GACpCvT,EAAEgN,YAAYuG,MAGlBrW,aAAc,UAMlB,WAIE,QAASsW,GAAW/C,EAASgD,GAO3B,QAASzI,KACPzO,QAAQ2O,QAAQ,kBAAkBwI,MAAM,SAASC,GAC/CA,EAAMC,iBACNrX,QAAQ2O,QAAQ,kBAAkB2I,YAAY,yBAC9CtX,QAAQ2O,QAAQ,sBAAsB2I,YAAY,6BAClDJ,EAAS,WACLlX,QAAQ2O,QAAQuF,GAASqD,QAAQ,UAAS,IACzC,OAGPvX,QAAQ2O,QAAQ,QAAQ6I,GAAG,QAAQ,gCAAgC,WAC7DtD,EAAQuD,YAAc,OACxBzX,QAAQ2O,QAAQ,kBAAkBsH,SAAS,yBAC3CjW,QAAQ2O,QAAQ,sBAAsBsH,SAAS,6BAC/CiB,EAAS,WACPlX,QAAQ2O,QAAQuF,GAASqD,QAAQ,UAAS,IACzC,QAKLrD,EAAQwD,UACR1X,QAAQ2O,QAAQuF,GAASyD,OAAO,SAASP,EAAMQ,GAE7C,MAAGA,IACM,GAEL1D,EAAQwD,WACVR,EAASW,OAAO3D,EAAQwD,gBAE1BxD,EAAQwD,UAAYR,EAAS,WACvBhD,EAAQuD,YAAc,MACxBzX,QAAQ2O,QAAQ,kBAAkBsH,SAAS,yBAC3CjW,QAAQ2O,QAAQ,sBAAsBsH,SAAS,6BAC/CjW,QAAQ2O,QAAQuF,GAASqD,QAAQ,UAAS,KAG1CvX,QAAQ2O,QAAQ,kBAAkBmJ,YAAY,yBAC9C9X,QAAQ2O,QAAQ,sBAAsBmJ,YAAY,6BAClD9X,QAAQ2O,QAAQuF,GAASqD,QAAQ,UAAS,KAE3C,SA/CT,GAAInJ,IACAK,KAAMA,EAEV,OAAOL,GAPT6I,EAAWlX,SAAW,UAAW,YAFjCC,QACGC,OAAO,WACPmO,UAAU,aAAc6I,MA4D7BjX,QAAQC,OAAO,WACd2Q,QAAQ,kBAAA,QAAA,KAAA,gBAAkB,SAASyF,EAAO3S,EAAIjC,GAC7C,GAAIsW,MACA3W,IAqCJ,OAnCAA,GAAGL,QAAU,WACX,MAAOsV,GAAM9I,IAAI,kBAAmB9L,EAAc,OAAW,SAASgL,QAAQ,SAASnL,GACrF,GAAY,OAATA,EAAe,CAChB,GAAItB,QAAQkE,UAAUzC,EAAc,QAAY,CAC5C,GAAGzB,QAAQkE,UAAU5C,EAAK,MAAU,CAClC,GAAI0W,GAAUhY,QAAQ2O,QAAQ,oBAC1BsJ,EAAY,WAAa3W,EAAK,IAClC0W,GAAQ9I,KAAK,OAAQ+I,GAEvB,GAAGjY,QAAQkE,UAAU5C,EAAK,UAAc,CACtC,GAAIqD,GAAO3E,QAAQ2O,QAAQ,gCACvBuJ,EAAa,WAAa5W,EAAK,QACnCqD,GAAKuK,KAAK,OAAQ,aAClBvK,EAAKuK,KAAK,OAAQgJ,IAKxB,MADAH,GAAiBzW,MAMvBF,EAAGe,QAAU,WACX,MAAOuB,GAAGmP,KAAKkF,IAIjB3W,EAAGmM,IAAM,SAAa1I,GACpB,MAAIkT,GAAe1V,eAAewC,GACzBkT,EAAelT,GAEjB,IAGFzD,KAKTpB,QAAQC,OAAO,WACdmO,UAAU,eAAA,iBAAe,SAAUjN,GACnC,OACCmN,SAAU,IACRG,KAAM,SAAUF,EAAOI,EAASwJ,GAC1BnY,QAAQkE,UAAUiU,EAAMC,WAC1BjX,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAGA,EAAO,CACR,GAAI+W,GAAOrY,QAAQ2O,QAAQ2J,UAAU7I,KAAK,OAC1C4I,GAAKE,IAAI,mBAAoBjX,EAAK,gBAClC,IAAI8W,GAAWpY,QAAQwC,SAAS2V,EAAMC,SACtCpY,SAAQyC,QAAQ2V,EAAU,SAAS7V,EAAOsC,GAC5B,kBAARA,GAA2C,MAAhBvD,EAAKiB,GAC/BjB,EAAKiB,KACNoM,EAAQ4J,IAAI1T,EAAK,QACjB8J,EAAQ4J,IAAI,eAAgB,SAC5B5J,EAAQ4J,IAAI,eAAgB,SAG9B5J,EAAQ4J,IAAI1T,EAAKvD,EAAKiB,cAYtCvC,QAAQC,OAAO,WACdmO,UAAU,gBAAA,iBAAgB,SAAUjN,GACnC,OACEmN,SAAU,IACVC,OACE3J,KAAO,IACPhC,KAAO,KAET6L,KAAM,SAAUF,EAAOI,GAOrB,QAAS6J,KACJjK,EAAM3L,OAAS2L,EAAM3J,KACtB+J,EAAQ4J,IAAI,QAAS,OAErB5J,EAAQ4J,IAAI,QAAS,SAEvBpX,EAAegB,UAAUC,KAAK,SAASd,GAClCA,IACEiN,EAAM3L,OAAS2L,EAAM3J,KACtB+J,EAAQ4J,IAAI,QAASjX,EAAK,YAE1BqN,EAAQ4J,IAAI,QAASjX,EAAK,kBAjBlCkX,IAEAjK,EAAMqB,OAAO,OAAQ,WACnB4I,WAyBRxY,QAAQC,OAAO,WACZmO,UAAU,aAAA,iBAAA,eAAA,YAAa,SAAUjN,EAAgBS,EAAcoO,GAC9D,OACE1B,SAAU,IACVC,OACE6J,SAAU,KAEZ3J,KAAM,SAAUF,EAAOI,GASrB,QAAS6J,KACPrX,EAAegB,UAAUC,KAAK,SAAUd,GAClCA,IACEM,EAAaS,eAAe,QAC1BrC,QAAQsG,OAAO1E,EAAagB,KAAM2L,EAAM6J,UAC1CzJ,EAAQ4J,IAAI,QAASjX,EAAK,YAE1BqN,EAAQ4J,IAAI,QAASjX,EAAK,eAGxBiN,EAAM6J,YAAa,EACrBzJ,EAAQ4J,IAAI,QAASjX,EAAK,YAE1BqN,EAAQ4J,IAAI,QAASjX,EAAK,kBArBpCkX,IAEAjK,EAAMqB,OAAO,WACX,MAAOI,GAAUyI,QAChB,WACDD,WA4BVxY,QAAQC,OAAO,WACdyY,QAAQ,aAAA,WAAA,aAAA,YAAY,SACnBxB,EAAU1V,EAAY+T,GAQtB,QAASoD,GAAeC,EAAOC,GAC7BrX,EAAW2U,WAAW,aACpByC,MAAOA,EACPC,OAAQA,IAIZ,QAAS1L,GAASyL,GAChB,IAAK,GAAIzS,KAAQ2S,GACX3S,IAASyS,IACXE,EAAM3S,IAAQ,EACdwS,EAAexS,GAAM,GAIzB4S,KAGF,QAASC,GAAKJ,GACZE,EAAMF,IAAS,EACfD,EAAeC,GAAO,GAEtBK,IAGF,QAAS7Q,KACP,MAAO0Q,GAGT,QAASI,GAAMN,GACbE,EAAMF,IAAS,EACfD,EAAeC,GAAO,GAEtBG,IAGF,QAASI,GAAgBP,GACrBzL,EAASyL,GACT1B,EAAS,WACP8B,EAAKJ,IACJ,GAEHK,IAGJ,QAASJ,GAAOD,GACd,QAASE,EAAMF,GAGjB,QAASK,KACPZ,EAAKP,YAAY,4BACjBO,EAAKpC,SAAS,0BAGhB,QAAS8C,KACPV,EAAKP,YAAY,0BACjBO,EAAKpC,SAAS,4BA9DhB,GAAI6C,MACAT,EAAOrY,QAAQ2O,QAAQ4G,EAAU,GAAG8C,MAEpCe,EAAc5X,EAAW2B,IAAI,oBAAqBgK,EA8DtD,OA7DA3L,GAAW2B,IAAI,WAAYiW,IA8DzBjM,SAAUA,EACV+L,MAAOA,EACPF,KAAMA,EACNG,gBAAiBA,EACjBN,OAAQA,EACRzQ,IAAKA,MAMTpI,QAAQC,OAAO,WACdmO,UAAU,YAAA,YAAA,OAAW,SACpB9F,EAAWhF,GAWX,QAAS+V,GAAcC,EAAU5K,GAC/B,QAAS6K,KACPD,EAAS9B,GAAG,QAAS,WACf9I,EAAOrH,YAAa,GACtBiB,EAAU6Q,gBAAgBzK,EAAOkK,SAKnC5Y,QAAQkE,UAAUwK,EAAO8K,SAA6B,KAAlB9K,EAAO8K,OAC7ClW,EAAKC,gBAAgBmL,EAAO8K,QAAQpX,KAAK,SAASU,GAC5CA,GACFyW,MAKJA,IA1BJ,MAGAF,GAActZ,SAAW,WAAY,WAFnCuO,SAAU,IACVC,OACEqK,MAAO,YACPvR,SAAU,gBACVmS,OAAQ,WAEV9Y,WAAY2Y,MAuBfjL,UAAU,aAAA,YAAY,SACrB9F,GAaA,QAASmR,GAAwB/K,GAC/BA,EAAOvL,IAAI,YAAa,SAASiU,EAAO9W,GAClCA,EAAOsY,QAAUlK,EAAOkK,QAC1BlK,EAAOmK,OAASvY,EAAOuY,OACnBnK,EAAOmK,QAAUnK,EAAOgL,QACtBhL,EAAOgL,QACThL,EAAOgL,YAMfhL,EAAOwK,MAAQ,WACb5Q,EAAU6E,YAxBd,MAIAsM,GAAwB1Z,SAAW,WAHjCuO,SAAU,IACVqL,YAAY,EACZlZ,YAAa,mDACb8N,OACEqK,MAAO,UACPc,OAAQ,IACRE,OAAQ,WAEVlZ,WAAY+Y,MAsBhBzZ,QAAQC,OAAO,WACdmO,UAAU,gBAAA,iBAAgB,SAAUjN,GACnC,OACEmN,SAAU,IACVG,KAAM,SAAUF,EAAOI,GACrBxN,EAAegB,UAAUC,KAAK,SAASd,GAClCA,GACEA,EAAKe,eAAe,gBACM,MAAxBf,EAAK,aACNqN,EAAQ4J,IAAI,UAAW,eAWrCvY,QAAQC,OAAO,WACdmO,UAAU,iBAAA,UAAiB,SAAU8F,GACpC,OACE5F,SAAU,IACRG,KAAM,SAAUF,GAad,QAASsL,KACHC,EAAWhb,OAAS,GAAKib,EAASjb,OAAS,GAC7Ckb,EAASta,KAAKua,MAAMH,EAAWI,aAAY,IAASxa,KAAKua,MAAMH,EAAWvB,IAAI,UAAUzY,QAAQ,KAAM,KAEtGia,EAASxB,IAAI,iBAAkByB,IAEhCD,EAASxB,IAAI,iBAAkB,IAlBlC,GAAIuB,GAAc9Z,QAAQ2O,QAAQ,kBAC9BoL,EAAc/Z,QAAQ2O,QAAQ,qBAC9BqL,EAAc,CAElBH,KAEA7Z,QAAQ2O,QAAQuF,GAASiG,KAAK,SAAU,WACtCH,EAAW,EACXH,IACAtL,EAAM6L,iBAiBXpF,OAAOrD,UAAU0I,WACpBrF,OAAOrD,UAAU0I,SAAW,SAASC,EAAcC,GAC/C,GAAIC,GAAgBnZ,KAAKmD,aACpBxE,QAAQyU,SAAS8F,KAAcE,SAASF,IAAa7a,KAAKua,MAAMM,KAAcA,GAAYA,EAAWC,EAAc1b,UACtHyb,EAAWC,EAAc1b,QAE3Byb,GAAYD,EAAaxb,MACzB,IAAI4b,GAAYF,EAAc7b,QAAQ2b,EAAcC,EACpD,OAAqB,KAAdG,GAAoBA,IAAcH,IAM/Cva,QAAQC,OAAO,WACdmO,UAAU,UAAA,UAAA,WAAU,SAAU8F,EAASgD,GACtC,OACE5I,SAAU,IACRG,KAAM,SAAUF,GAMd,QAASoM,KACP,GAAIC,GAAY5a,QAAQ2O,QAAQkM,QAAQD,WACpCA,GAAYE,EACVF,EAAYG,GACdC,EAAS/E,SAAS,YAClB+E,EAASlD,YAAY,WAErBkD,EAAS/E,SAAS,SAClB+E,EAASlD,YAAY,cAGvBkD,EAASlD,YAAY,SACrBkD,EAASlD,YAAY,aAGvBvJ,EAAM6L,UAGR,QAASa;AACPD,EAASlD,YAAY,SACrBkD,EAASlD,YAAY,YAErBgD,EAAkBE,EAASE,SAASC,IACpCJ,EAAkBK,EAASF,SAASC,IAAMC,EAASlB,aAAY,GAAQc,EAASd,aAAY,GAE5FS,IA9BF,GAAIK,GAAkBhb,QAAQ2O,QAAQ,qBAClCyM,EAAkBpb,QAAQ2O,QAAQ,6BAClCmM,EAAkB,EAClBC,EAAkB,CA8BtB/a,SAAQ2O,QAAQuF,GAASiG,KAAK,SAAU,WACtCQ,MAGF3a,QAAQ2O,QAAQuF,GAASiG,KAAK,SAAU,WACtCc,MAGF/D,EAAS,WACP+D,KACC,UAOXjb,QAAQC,OAAO,WACdmO,UAAU,OAAQ,WACjB,OACEE,SAAU,IACRG,KAAM,SAAUF,GACd,GAAI8M,GAAWrb,QAAQ2O,QAAQ,mBAC3B2M,EAAQtb,QAAQ2O,QAAQ,OAE5B0M,GAAQlB,KAAK,QAAS,WACpBkB,EAAQ/D,YAAY,UACpBgE,EAAMhE,YAAY,wBAGpB/I,EAAMpL,IAAI,yBAA0B,WAClCkY,EAAQvD,YAAY,UACpBwD,EAAMxD,YAAY,4BAQ5B9X,QAAQC,OAAO,WACdmO,UAAU,gBAAA,iBAAgB,SAAUjN,GACpC,OACCmN,SAAU,IACRG,KAAM,SAAUF,EAAOI,GACrBxN,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAGA,EAAO,CACR,GAAIia,IAAa,GAEfvb,QAAQkE,UAAU5C,EAAK,aAAyC,MAAvBA,EAAK,YAC9CtB,QAAQkE,UAAU5C,EAAK,mBAAqD,MAA7BA,EAAK,kBACpDtB,QAAQkE,UAAU5C,EAAK,gBAA+C,MAA1BA,EAAK,eACjDtB,QAAQkE,UAAU5C,EAAK,kBAAmD,MAA5BA,EAAK,iBACnDtB,QAAQkE,UAAU5C,EAAK,cAA2C,MAAxBA,EAAK,aAC/CtB,QAAQkE,UAAU5C,EAAK,eAA6C,MAAzBA,EAAK,gBAEhDia,GAAa,GAGXA,GACF5M,EAAQ4J,IAAI,UAAW,gBAUnCvY,QAAQC,OAAO,WACdmO,UAAU,UAAA,iBAAU,SAAUjN,GAC9B,OACCmN,SAAU,IACRG,KAAM,SAAUF,EAAOI,EAASwJ,GAC9B,GAAInY,QAAQkE,UAAUiU,EAAM7W,MAAO,CACjC,GAAI8W,GAAWpY,QAAQwC,SAAS2V,EAAM7W,KACtCH,GAAegB,UAAUC,KAAK,SAASd,GAClCA,GACDtB,QAAQyC,QAAQ2V,EAAU,SAAS7V,EAAOsC,GACtB,MAAdvD,EAAKuD,GACO,QAAVtC,GACFoM,EAAQ4J,IAAI,UAAW,QAGX,UAAVhW,GACFoM,EAAQ4J,IAAI,UAAW,kBAazCvY,QAAQC,OAAO,WACdmO,UAAU,eAAA,WAAe,SAAU8I,GAClC,OACE5I,SAAU,IACVG,KAAM,SAAUF,EAAOI,GAErBuI,EAAS,WACPlX,QAAQ2O,QAAQA,GAASc,KAAK,oBAAoB+L,eACjD,WAOTxb,QAAQC,OAAO,WACd2Q,QAAQ,OAAA,iBAAM,SACbzP,GAGA,QAASd,GAAIwE,GACX,MAAGA,GACO1D,EAAeoM,IAAI1I,GAEpB,GAIX,GAAIzD,GAAKf,CACT,OAAOe,MAMTpB,QAAQC,OAAO,WACdmO,UAAU,WAAA,iBAAA,gBAAA,aAAW,SAAUjN,EAAgBM,EAAeD,GAC7D,OACE8M,SAAU,IACVG,KAAM,SAAUF,EAAOI,EAASO,GAE9B,QAASuM,KACPta,EAAegB,UAAUC,KAAK,SAASd,GAClCA,GACEA,EAAKe,eAAe6M,EAAKwM,OAC1B/M,EAAQO,KAAK,OAAQ5N,EAAK4N,EAAKwM,MAAMja,EAAc,WAM3Dga,GAEA,IAAIvY,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9CsY,KAGFja,GAAW2B,IAAI,WAAY,WACzBD,WAQRlD,QAAQC,OAAO,WACdmO,UAAU,eAAA,iBAAe,SAAUjN,GAClC,OACEmN,SAAU,IACRG,KAAM,SAAUF,EAAOI,EAASwJ,GAC1BnY,QAAQkE,UAAUiU,EAAMC,WAC1BjX,EAAegB,UAAUC,KAAK,SAASd,GACrC,GAAGA,GACEA,EAAKe,eAAe8V,EAAMC,UAC3B,GAA4B,OAAzB9W,EAAK6W,EAAMC,UAAoB,CAChC,KAAyC,MAAnC9W,EAAK6W,EAAMC,UAAUuD,OAAO,IAEhCra,EAAK6W,EAAMC,UAAY9W,EAAK6W,EAAMC,UAAUwD,OAAO,EAErD,IAAIC,GAAYC,SAASC,SAAYza,EAAK6W,EAAMC,SAChDD,GAAM6D,KAAK,MAAOH,GAElBlN,EAAQwL,KAAK,OAAQ,WACnB,GAAI8B,GAAgBjc,QAAQ2O,QAAQ,cAChCuN,EAAgBlc,QAAQ2O,QAAQ,sBAChCmL,EAAgB9Z,QAAQ2O,QAAQ,kBAChCoL,EAAgB/Z,QAAQ2O,QAAQ,qBAChCqL,EAAgB,EAChBmC,EAAgB,CAEhBF,GAAQnd,OAAS,GAAKod,EAASpd,OAAS,GAC1Ckb,EAASiC,EAAQ/B,aAAY,GAC7BgC,EAAS3D,IAAI,iBAAkByB,IAE/BkC,EAAS3D,IAAI,iBAAkB,IAG7BuB,EAAWhb,OAAS,GAAKib,EAASjb,OAAS,GAC7Cqd,EAAgBrC,EAAWI,aAAY,GACvCH,EAASxB,IAAI,iBAAkB4D,IAEhCpC,EAASxB,IAAI,iBAAkB,UAKlC5J,GAAQ,GAAGyN,UAAUC,IAAI,iBAUzCrc,QACGC,OAAO,WACPwL,OAAO,UAAWjN,SAWrBwB,QACGC,OAAO,WACPwL,OAAO,YAAa5M,iBAavBmB,QACGC,OAAO,WACPwL,OAAO,kBAAmBxM,uBAC1BwM,OAAO,OAAQzM,YAyDpBgB,QAAQC,OAAO,WACdmO,UAAU,gBAAA,UAAA,WAAgB,SAAU8F,EAASgD,GAC5C,OACE5I,SAAU,IACRG,KAAM,SAAUF,GAgBd,QAASsL,KACHoC,EAAQnd,OAAS,GAAKod,EAASpd,OAAS,GAC1Ckb,EAASiC,EAAQ/B,aAAY,GAC7BgC,EAAS3D,IAAI,iBAAkByB,IAEhCkC,EAAS3D,IAAI,iBAAkB,IApBlC,GAAI0D,GAAWjc,QAAQ2O,QAAQ,cAC3BuN,EAAWlc,QAAQ2O,QAAQ,sBAC3BqL,EAAW,CAGf9C,GAAS,WACP2C,KACA,KAEF7Z,QAAQ2O,QAAQuF,GAASiG,KAAK,SAAU,WACtCH,EAAS,EACTH,IACAtL,EAAM6L,gBAiBhB,IAAIkC,iBAEJtc,SAAQC,OAAO,WACdmO,UAAU,aAAA,YAAA,UAAY,SACrBmH,EAAWrB,GAEX,OACE5F,SAAU,IACVC,OACE3J,KAAM,aACN2X,SAAU,aAEZzc,SAAU,EACV2O,KAAM,SAASC,EAAQC,GAIrB,QAAS6N,GAAmBC,GACmB,KAAzCH,cAAc3d,QAAQ8d,EAAUC,MAClCjG,EAAEkG,UAAUF,EAAUC,IAAK,WACzBE,MAEFN,cAAc1d,KAAK6d,EAAUC,MAE7BE,IAIJ,QAASA,KACP,IAAK,GAAIrT,GAAI,EAAGA,EAAIsT,EAAc/d,OAAQyK,IACxC+R,EAAMwB,OAAOD,EAActT,GAE7BsT,MAGF,QAASE,KACP,GAAKrO,EAAO9J,KAAZ,CAIAoY,GAAQ,EAER,IAAI5E,GAAWpY,QAAQ2O,QAAQD,EAAO9J,KAEtC,IAAIwT,EAAStZ,OAAS,EAAG,CAEvB,IAAK,GADDme,IAAiB,EACZnZ,EAAQ,EAAGA,EAAQsU,EAAStZ,OAAQgF,IAAS,CACpD,GAAIyP,GAAK6E,EAAStU,EAEb4K,GAAO6N,WACVhJ,EAAG2J,UAAY3J,EAAG2J,UAAUpd,QAAQ,6DAA6D,KAGhF,WAAfyT,EAAG4J,QACC5J,EAAG6J,aAAa,OAClBH,EAAiB1J,EAEjBsJ,EAAcje,KAAK2U,IAGvB5E,EAAQ0O,QACR1O,EAAQmO,OAAOvJ,IAGnBiJ,EAAmBS,KAMvB,QAASD,GAAQK,GAEXA,EACF1O,EAAQ0O,SAERC,IACA3O,EAAQM,UAEVqN,iBAEAtc,QAAQ2O,QAAQ,uBAAuB4O,QAAQ,UAAUtO,SAErDjP,QAAQkE,UAAUgQ,EAAQsJ,SAAWxd,QAAQkE,UAAUgQ,EAAQsJ,OAAOC,UACxEvJ,EAAQsJ,OAAOC,OAASjJ,QArE5B,GAAI8G,GAAQtb,QAAQ2O,QAAQ4G,EAAU,GAAG8C,MACrCwE,KAqDAS,EAAc5O,EAAOkB,OAAO,OAAQmN,EAmBxCrO,GAAOvL,IAAI,WAAY6Z,IAEzBrc,aAAc,SAMlBX,QAAQC,OAAO,WACdmO,UAAU,cAAA,iBAAc,SAAUjN,GACjC,OACEmN,SAAU,IACVG,KAAM,SAAUF,EAAOI,GACrBxN,EAAegB,UAAUC,KAAK,SAASd,GAClCA,GACEA,EAAKe,eAAe,2BACiB,MAAnCf,EAAK,wBACNqN,EAAQ4J,IAAI,UAAW,eAYrCvY,QAAQC,OAAO,WACdmO,UAAU,WAAA,iBAAA,gBAAW,SAAUjN,EAAgBM,GAC9C,OACE6M,SAAU,IACVC,OACE6J,SAAU,KAEZ3J,KAAM,SAAUF,EAAOI,EAASO,GAC9B/N,EAAegB,UAAUC,KAAK,SAASd,GAClCA,GACEA,EAAKe,eAAe,oBAAsBf,EAAKe,eAAe,cACvC,MAArBf,EAAK,SACkD,OAArDA,EAAK,gBAAmBG,EAAc,SAAwC,SAAjByN,EAAKwO,QACnE/O,EAAQ4J,IAAI,UAAW,QACsC,OAArDjX,EAAK,gBAAmBG,EAAc,SAAwC,YAAjByN,EAAKwO,SAC1E/O,EAAQ4J,IAAI,UAAW,QAGzB5J,EAAQ4J,IAAI,UAAW,gBAWrCvY,QAAQC,OAAO,WACd2Q,QAAQ,uBAAA,YAAA,IAAsB,SAC7B+M,EAAWla,GAGX,GAAIrC,KAmBJ,OAjBAA,GAAGyM,cAAgB,SAAS+P,EAAUhQ,GACpC,MAAO+P,GAAU3E,MACfvY,YAAa,kDACbE,aAAc,eACdD,WAAY,WACV,GAAIU,GAAKC,IACTD,GAAGwc,SAAWA,EAEV5d,QAAQkE,UAAU0J,IAASA,EAC7BxM,EAAGwM,KAAOA,EAEVxM,EAAGwM,KAAOnK,EAAE,uCAGfX,QAGE1B,IAKT,IAAIyc,YAAahD,OAAOgD,cAsCxBC,sBAAqBC,WAAa,SAAS9J,GAEvC,GAAI+J,GAAI,EACR,cAAO,IAEH,IAAK,SACDA,GAAK/J,EAAEnU,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,OAAS,MAC/E,KAAK,SACL,IAAK,UACDke,GAAK/J,EAAEzP,UAAY,MACvB,KAAK,SAED,GAAQ,MAALyP,OAEE,IAAGA,EAAEgK,iBACRD,GAAK/J,EAAEiK,kBAGJ,IAAGjK,EAAEkK,YAAY3Z,WAAW7F,QAAQ,mBAAqB,GAC9D,CACI,GAAIyf,GAAOnK,EAAEoK,cAAc7Z,WACvB8Z,GAASrK,EAAEsK,WAAa,GAAG/Z,UAAY8Z,GAAyB,GAAhBA,EAAMxf,OAAe,IAAMwf,EAAQA,CACvF,IAAIE,GAAOvK,EAAEwK,UAAUja,UAAYga,GAAuB,GAAfA,EAAK1f,OAAe,IAAM0f,EAAOA,CAC5E,IAAIE,GAAQzK,EAAE0K,WAAWna,UAAYka,GAAyB,GAAhBA,EAAM5f,OAAe,IAAM4f,EAAQA,CACjF,IAAIE,GAAU3K,EAAE4K,aAAara,UAAYoa,GAA6B,GAAlBA,EAAQ9f,OAAe,IAAM8f,EAAUA,CAC3F,IAAIE,GAAU7K,EAAE8K,aAAava,UAAYsa,GAA6B,GAAlBA,EAAQhgB,OAAe,IAAMggB,EAAUA,CAI3F,KAHA,GAAIE,GAAe/K,EAAEgL,kBAAkBza,WACnC0a,EAAYxf,KAAKC,IAAIsU,EAAEkL,qBACvBC,EAAU,EACRF,GAAa,IAEfE,IACAF,GAAa,EAEjBA,GAA4C,GAA/BA,EAAU1a,WAAW1F,OAAe,IAAMogB,EAAU1a,WAAa0a,EAAU1a,WACxF4a,EAAwC,GAA7BA,EAAQ5a,WAAW1F,OAAe,IAAMsgB,EAAQ5a,WAAa4a,EAAQ5a,UAChF,IAAI6a,IAAapL,EAAEkL,oBAAsB,EAAK,IAAM,KAAOC,EAAU,IAAMF,CAC3ElB,IAAKI,EAAO,IAAME,EAAQ,IAAME,EAAO,IAAME,EAAQ,IAAME,EAAU,IAAME,EAAU,IAAME,EAAeK,MAGzG,IAAGpL,EAAEkK,YAAY3Z,WAAW7F,QAAQ,oBAAsB,GAE3D,IAAI,GAAI2gB,KAAKrL,GAET,GAAIzU,MAAM8f,GA6BNtB,GAAK,IAAMsB,EAAI,IAAMxB,qBAAqBC,WAAW9J,EAAEqL,IAAM,KAAOA,EAAI,QA5B5E,CACI,0BAA4BC,KAAKtL,EAAEqL,GAAGnB,YAAY3Z,WAClD,IAAIqH,GAAO4J,OAAO+J,EAClB,QAAO3T,GAEH,IAAK,GACDA,QAAcoI,GAAEqL,EACpB,KAAK,SACDzT,EAAO,QAAU,MACrB,KAAK,SACDA,EAAO,KAAO,MAClB,KAAK,UACDA,EAAO,MAAQ,MACnB,KAAK,OACDA,EAAO,UAAY,MACvB,KAAK,SACEoI,EAAEqL,GAAGjd,eAAe,cACrBwJ,EAAOoI,EAAEqL,GAAGG,SAERxL,EAAEqL,GAAGjd,eAAe,aAA4C,IAA7BmE,OAAOC,KAAKwN,EAAEqL,IAAIxgB,SACvDmV,EAAEqL,GAAKrL,EAAEqL,GAAGI,WAKxB1B,GAAK,IAAMnS,EAAO,IAAMiS,qBAAqBC,WAAW9J,EAAEqL,IAAM,KAAOzT,EAAO,QAQtF,KAAI,GAAIyT,KAAKrL,GAER,aAAa0L,KAAKL,KAGjBtB,GADChe,QAAQsE,YAAY2P,EAAEqL,KAAgB,OAATrL,EAAEqL,GAC3B,IAAMA,EAAI,qBAGV,IAAMA,EAAI,IAAMxB,qBAAqBC,WAAW9J,EAAEqL,IAAM,KAAOA,EAAI,KAS1F,MAAOtB,IAmHXH,WAAW+B,gBAAkB,SAASC,GAEpC,GAAGA,EAAKC,YAAcD,EAAKC,WAAWhhB,OAAS,EAAG,CAEhD,IAAI,GADA2U,MACIlK,EAAI,EAAGA,EAAIsW,EAAKC,WAAWhhB,OAAQyK,IAAK,CAC9C,GAAI2F,GAAO2Q,EAAKC,WAAW9a,KAAKuE,EAChCkK,GAAI,IAAIvE,EAAKtM,MAAQsM,EAAK3M,MAG5B,MAA8B,KAA3Bsd,EAAKC,WAAWhhB,QAAoC,SAApB2U,EAAI,YAC9B,KAEFA,EAGP,MAAO,OAGXoK,WAAWkC,aAAe,SAASF,EAAMG,GAEvC,GAAIF,GAAatL,MAEjB,IAAW,MAARqL,EACD,MAAO,KAGT,IAAoB,GAAjBA,EAAKI,UAAkC,GAAjBJ,EAAKI,SAC5B,MAAOpC,YAAWqC,cAAcL,EAAMG,EAGxC,IAA8B,GAA1BH,EAAKM,WAAWrhB,SAA+C,GAA/B+gB,EAAKM,WAAW,GAAGF,UAAgD,GAA/BJ,EAAKM,WAAW,GAAGF,UAAgB,CACzG,GAAI1d,GAAQsb,WAAWkC,aAAaF,EAAKM,WAAW,GAAIH,EAExD,OADAF,GAAajC,WAAW+B,gBAAgBC,GACrCC,EACM9f,QAAQ0N,OAAO,GAAIlH,QAAOjE,GAAQud,GAEpCvd,EAET,GAAI6d,GAAoG,IAA1FvC,WAAWwC,iBAAiBR,EAAKS,SAAUN,GAAWO,cAAc5hB,QAAQ,UAE1F,IAAIyhB,EAoCJ,CAGE,IAAI,GADAI,GAAI,GAAI9O,OACJ+O,EAAI,EAAGA,EAAIZ,EAAKM,WAAWrhB,OAAQ2hB,IACzCD,EAAEA,EAAE1hB,QAAU+e,WAAWkC,aAAaF,EAAKM,WAAWM,GAAIT,EAC5D,OAAOQ,GAvCP,GAAI/M,GAAM,IACPoM,GAAKa,kBACNjN,EAAM,GAAIjN,QAEZ,KAAI,GAAI+C,GAAI,EAAGA,EAAIsW,EAAKM,WAAWrhB,OAAQyK,IAC3C,CACE,GAAI+V,GAAIzB,WAAWkC,aAAaF,EAAKM,WAAW5W,GAAIyW,GAChDW,EAAQd,EAAKM,WAAW5W,GAAG+W,QAC3B7M,GAAIkN,GACFlN,EAAIkN,YAAkBjP,OACxB+B,EAAIkN,GAAO/hB,KAAK0gB,IAGhB7L,EAAIkN,GAAS,GAAIjP,OAAM+B,EAAIkN,IAC3BlN,EAAIkN,GAAO/hB,KAAK0gB,IAIlB7L,EAAIkN,GAASrB,EAIjB,GADAQ,EAAajC,WAAW+B,gBAAgBC,GACzB,CACb,GAAW,OAARpM,EACD,MAAOqM,EAGP9f,SAAQ0N,OAAO+F,EAAKqM,GAGxB,MAAOrM,IAaXoK,WAAWqC,cAAgB,SAASL,EAAMG,GAExC,GAAIzd,GAAQsd,EAAKe,SACjB,QAAO/C,WAAWwC,iBAAiBR,EAAKgB,WAAWP,SAAUN,GAAWO,eAEtE,QACA,IAAK,WACH,MAAiB,OAAThe,EAAiBA,EAAQ,GAAK,EACxC,KAAK,YAEH,GAAgC,aAA7Bsd,EAAKgB,WAAWP,SAAyB,CAC1C,GAAIQ,GAAKhQ,OAAOvO,EAChB,IAAGue,EAAGC,UACJ,MAAOD,GAKX,MAAQve,GAAQ,IAAM,QAAUA,EAAQ,IAAM,GAChD,KAAK,QACL,IAAK,SACH,MAAiB,OAATA,EAAiBye,SAASze,EAAQ,GAAI,IAAM,CACtD,KAAK,WACH,MAAiB,OAATA,EAAiB1C,WAAW0C,EAAQ,IAAM,CACpD,KAAK,aACH,MAAa,QAAVA,EACM,KAGAuO,OAAOvO,KA8ItBvC,QAAQC,OAAO,WACZ2Q,QAAQ,SAAA,MAAS,SAChB0E,GAGA,GAAIlU,KAyGJ,OAvGAA,GAAG6f,WAAa,WACd,MAAO3L,GAAIzD,KAAK,qBAAsB,GAAMzP,KAAK,SAAUU,GACzD,MAAOA,GAAOxB,QAIlBF,EAAGmL,iBAAmB,SAA0BjL,GAC9C,MAAOgU,GAAIzD,KAAK,wBACdvQ,KAAMA,OACD,IAGTF,EAAG8f,cAAgB,SAAuB5f,GACxC,MAAOgU,GAAIzD,KAAK,qBACdvQ,KAAMA,OACD,IAGTF,EAAG+f,kBAAoB,SAA2B7f,GAChD,MAAOgU,GAAIzD,KAAK,yBACdvQ,KAAMA,OACD,IAGTF,EAAGggB,iBAAmB,SAAuB9f,GAC3C,MAAOgU,GAAIzD,KAAK,wBACdvQ,KAAMA,OACD,IAGTF,EAAGigB,qBAAuB,SAA2B/f,GACnD,MAAOgU,GAAIzD,KAAK,4BACdvQ,KAAMA,OACD,IAGTF,EAAGuM,iBAAmB,SAA0BN,GAC9C,MAAOiI,GAAIzD,KAAK,wBACdvQ,MACE+L,QAASA,QAEN,IAGTjM,EAAGwG,iBAAmB,SAA0BtG,GAC9C,MAAOgU,GAAIzD,KAAK,wBACdvQ,KAAMA,OACD,IAGTF,EAAGkgB,oBAAsB,WACvB,MAAOhM,GAAIzD,KAAK,kCAAoC,IAGtDzQ,EAAGmgB,KAAO,WACR,MAAOjM,GAAIzD,KAAK,kBAAoB,IAGtCzQ,EAAG2M,IAAM,SAAayT,GACpB,MAAOlM,GAAIzD,KAAK,WACd4P,cACEC,MAAOF,QAEJ,IAGTpgB,EAAGmG,0BAA4B,SAAUoa,GACvC,MAAOrM,GAAIzD,KAAK,iCACd8P,QAASA,OACJ,GAAMvf,KAAK,SAAUU,GAC1B,MAAOA,GAAOxB,QAIlBF,EAAGwgB,OAAS,SAAgBtgB,GAC1B,MAAOgU,GAAIzD,KAAK,gBACdvQ,KAAMA,OACD,GAAMc,KAAK,SAAUU,GAC1B,MAAOA,GAAOxB,OAHTgU,SAIE,SAAU/F,GACjB,MAAOA,MAIXnO,EAAGygB,UAAY,WACb,MAAOvM,GAAIzD,KAAK,mBACdvQ,MACEwgB,YAAa,gBAEV,GAAM1f,KAAK,SAAUU,GAC1B,MAAOA,GAAOxB,QAIlBF,EAAGyB,WAAa,SAAoBD,GAClC,MAAO0S,GAAIzD,KAAK,gBACdvQ,MACEygB,QAASnf,QAEN,IAIFxB,KAMXpB,QAAQC,OAAO,WACd2Q,QAAQ,OAAA,MAAM,SACb0E,GAKA,QAASnT,GAAQ6f,GACf,MAAO,UAASC,GACd,MAAOA,GAAK3gB,KAAK0gB,IAKrB,QAASE,GAAWC,EAAYrC,EAAYsC,GAE1C,MAAO,UAASC,GACd,MAAOA,GAAQlZ,IAAI,SAAS+L,GAC1B,GAAIzB,KAQJ,OAPAA,GAAI0O,GAAcjN,EAAOnL,UACrBqY,SAA0B3O,GAAI0O,GAAc,IAAM,WACpD1O,EAAI0O,GAAc,IAEpBrC,EAAWrd,QAAQ,SAAS6f,GAC1B7O,EAAI6O,GAAapN,EAAO,IAAIoN,KAEvB7O,KAKb,QAAS8O,GAAoBzC,GAC3B,MAAO,UAASuC,GACd,MAAOA,GAAQlZ,IAAI,SAAS+L,GAC1B,GAAIzB,KAIJ,OAHAqM,GAAWrd,QAAQ,SAAS6f,GAC1B7O,EAAI6O,GAAapN,EAAO,IAAIoN,KAEvB7O,KAjCb,GAAIrS,KA8FJ,OAvDAA,GAAGyV,UAAY,WACb,MAAOvB,GAAIzD,KAAK,oBACfzP,KAAKD,EAAQ,kBACbC,KAAK8f,EAAW,gBAAiB,cAAe,mBAChD9f,KAAK,SAASd,GAEb,IAAK,GADDuV,MACKtN,EAAI,EAAEA,EAAIjI,EAAKxC,OAAOyK,IACA,QAAzBjI,EAAKiI,GAAGK,eACViN,EAAUjY,KAAK0C,EAAKiI,GAGxB,OAAOsN,MAIXzV,EAAGohB,UAAY,WACb,MAAOlN,GAAIzD,KAAK,oBACfzP,KAAKD,EAAQ,iBACbC,KAAK8f,EAAW,eAAgB,kBAGnC9gB,EAAGuI,QAAU,WACX,MAAO2L,GAAIzD,KAAK,kBACfzP,KAAKD,EAAQ,gBACbC,KAAK8f,EAAW,cAAe,cAAe,oBAGjD9gB,EAAGqJ,OAAS,WACV,MAAO6K,GAAIzD,KAAK,qBACfzP,KAAKD,EAAQ,eACbC,KAAK8f,EAAW,aACf,aACA,eACA,iBAIJ9gB,EAAGkI,kBAAoB,WACrB,MAAOgM,GAAIzD,KAAK,4BACfzP,KAAKD,EAAQ,sBACbC,KAAKmgB,GAAqB,SAAU,oBAAqB,YAAa,2BAGzEnhB,EAAG8H,WAAa,WACd,MAAOoM,GAAIzD,KAAK,qBACfzP,KAAKD,EAAQ,eACbC,KAAK8f,EAAW,aAAc,kBAGjC9gB,EAAGqhB,WAAY,WACb,MAAOnN,GAAIzD,KAAK,qBACfzP,KAAKD,EAAQ,eACbC,KAAK8f,EAAW,aAAc,kBAG1B9gB,KAKTpB,QAAQC,OAAO,WACdyiB,SAAS,eAAe,aACxBA,SAAS,kBAAkB,MAC3B9R,QAAQ,QAAA,eAAA,kBAAA,KAAA,OAAA,WAAA,kBAAA,SAAA,YAAA,MAAA,OAAA,UAAA,gBAAA,IAAA,UAAA,SAAO,SACd+R,EAAcC,EACdlf,EAAImN,EAAMqG,EAAUjH,EAAiBa,EAAQd,EAC7CsF,EAAKuN,EAAMC,EAASrhB,EAAegC,EAAGyQ,EAAS1L,GAO/C,QAASua,KACP,GAAIC,GAAalS,GAEjB,OADAkS,GAAW3G,IAAIuG,GACRI,EA0BT,QAASC,GAAS3hB,GAmBhB,MAlBAgU,GAAI4N,SAAS5hB,EAAK8O,OAClBkF,EAAI6N,aAAa7hB,EAAK8hB,WAElBpjB,QAAQkE,UAAU5C,EAAK+hB,uBACzB/N,EAAIgO,wBAAwBhiB,EAAK+hB,sBAGnC5f,EAAEgN,YAAYnP,EAAK8I,cACnB3I,EAAc,UAAeH,EAAKiiB,UAElCC,EAAOliB,EAAKmiB,IAAI,IAEhBniB,EAAKoiB,WAAaX,IAClB3hB,EAAGuiB,KAAOriB,EAEV2O,EAAgB,UAAc,EAC9BA,EAAgB0S,GAAgBvhB,EAAGuiB,KAE5BviB,EAAGuiB,KA8DZ,QAASH,GAAOI,GACdxgB,EAAMwgB,EAnHR,GAAIxiB,KAEJA,GAAGuiB,KAAOnP,MAQV,IAAIqP,GAAyBhB,EAAK9R,eAAe,EACjD3P,GAAG0iB,iBAAmB,SAASC,GAC7BF,EAAuB1S,OAAO4S,GAEhC,IAAIC,GAAiBxP,MACrBc,GAAI2O,UAAU,SAAS/W,GAClB8W,GACD9M,EAASW,OAAOmM,GAGlBA,EAAiB9M,EAAS,WACxB2M,EAAuBrS,UACvBoR,GAAiB,GAEJ,2BAAX1V,IACG9L,EAAGuiB,OACNviB,EAAGuiB,SAELviB,EAAGuiB,KAAKD,WAAaX,IACrB9S,EAAgB0S,GAAgBvhB,EAAGuiB,OA0BvC,IAAIvgB,KAsEJ,OApEAhC,GAAGuP,aAAe,SAASP,GACzB,MAAOkF,GAAI4O,UAAU9T,GAAOhO,KAAK,SAASd,GAKxC,MAJAmC,GAAEgN,YAAYnP,EAAK8I,cACnB3I,EAAc,MAAW2O,EACzB3O,EAAc,OAAYH,EAAK6iB,OAC/B3b,EAAOiE,QAAQnL,EAAK8iB,sBACb9iB,EAAK+iB,yBAIhBjjB,EAAGkjB,QAAU,SAASlU,GACpB,MAAOkF,GAAIiP,MAAMnU,GAAOhO,KAAK,SAASd,GACpC,MAAO2hB,GAAS3hB,MAIpBF,EAAGkP,gBAAkB,SAASF,EAAOxL,GACnC,MAAO0Q,GAAIkP,cAAcpU,EAAOxL,GAAMxC,KAAK,SAASd,GAClD,MAAO2hB,GAAS3hB,MAIpBF,EAAGqjB,QAAU,WACX,MAAOnP,GAAIiP,MAAMjP,EAAIoP,gBAAgBtiB,KAAK,SAASd,GACjD,MAAO2hB,GAAS3hB,MAIpBF,EAAGujB,SAAW,WACTX,IACD9M,EAASW,OAAOmM,GAChBA,EAAiBxP,QAEnBc,EAAI4N,SAAS1O,QACbc,EAAI6N,aAAa3O,QAEjBvE,EAAgB2U,SAChBxjB,EAAGuiB,KAAOnP,OACVpR,MAGFhC,EAAGyjB,iBAAmB,WAEpB,GAAIlB,GAAO1T,EAAgB0S,EAE3B,OACEgB,IAAQA,EAAKD,YACb5S,EAAOgU,GAAGnB,EAAKD,WAAY,iBACxBvQ,KAAKrC,EAAOgU,GAAG,kBAAoB,GAEtCjU,EAAKmC,MAAM,oBACXiQ,EAASU,GACFA,IAEF,GAOTviB,EAAGmC,gBAAkB,SAASsB,GAC5B,MAAOie,GAAQ,UAAU1f,GACvB2hB,QAASlgB,EACTmgB,aAAc,SACb,GAAMlmB,QAGJsC,KAMTpB,QAAQC,OAAO,WACd2Q,QAAQ,OAAA,UAAA,KAAA,OAAA,gBAAA,WAAA,MAAA,OAAA,IAAA,QAAA,aAAM,SACbkS,EAASpf,EAAImN,EAAMpP,EAAeyV,EAAU7O,EAAKwa,EAAMpf,EAAG/B,EAAOF,GAmBjE,QAASyjB,GAAYC,EAAOC,EAAOC,EAAQC,GAEzC,GAAIC,IACF/X,IAAK,SAASgY,GACZ,IAAID,EAAInc,IACN,KAAM,IAAImI,OAAM4T,EAAQ,mCAE1B,OAAOG,GAAOC,EAAInc,IAAKoc,IAEzBC,QAAS,SAASD,GAChB,IAAID,EAAInc,IACN,KAAM,IAAImI,OAAM4T,EAAQ,mCAG1B,IAAIO,GAAa3C,EAAQ,UAAUA,EAAQ,WAAWwC,EAAInc,MAAOS,eAAe,IAC5E8b,EAAUL,EAAOC,EAAInc,IAAKoc,EAM9B,QAJIvlB,QAAQkE,UAAUwhB,KAAY1lB,QAAQkE,UAAUwhB,EAAQ9b,gBAAoB8b,EAAQ9b,eAA2C,UAA1B8b,EAAQ9b,eAC/G6b,EAAW7mB,KAAK8mB,GAGXD,GA6CX,OAzCAH,GAAIK,KAAO,WACT,GAAInT,GAAW,aAAe0S,EAC1Bxf,EAAIhC,EAAGkiB,QAEPC,EAASpkB,EAAc+Q,EAkC3B,OAjCGqT,KAEDP,EAAInc,IAAMic,EAAOS,GAEjBngB,EAAE9E,QAAQ0kB,EAAInc,MAIhB+N,EAAS,WACPiO,IAAQ/iB,KAAK,SAAS0R,GACpB,GAAG9T,QAAQsE,YAAYwP,GACrB,KAAM,IAAIxC,OAAM,SAAS4T,EAAM,iBAGjCzjB,GAAc+Q,GAAYsB,EAC1BwR,EAAInc,IAAMic,EAAOtR,GACd+R,EAEDngB,EAAE8L,OAAO8T,EAAInc,KAIbzD,EAAE9E,QAAQ0kB,EAAInc,MAEhB,SAAS2c,GACND,EACDhV,EAAKtB,MAAM2V,EAAQ,kCAGnBxf,EAAEkO,OAAOkS,OAIRpgB,EAAE3E,SAGJukB,EAGT,QAASS,GAAkBb,EAAOlgB,GAChC,GAAIogB,GAAS,SAAStR,GACpB,MAAO+O,GAAKrP,SAASM,EAAY9O,IAE/BqgB,EAAS,SAASlc,EAAKoc,GACzB,MAAOpc,GAAIoc,GAEb,OAAON,GAAYC,EAAO7c,EAAI6c,GAAQE,EAAQC,GAShD,QAASW,GAAmBxY,GAC1B,GAAIyY,KAOJ,OANAzY,GAAa/K,QAAQ,SAASyjB,GACxBlmB,QAAQsE,YAAY2hB,EAAKC,EAAYzc,WACvCwc,EAAKC,EAAYzc,QAAU,GAAIiI,QAEjCuU,EAAKC,EAAYzc,QAAQ7K,KAAKsnB,KAEzBD,EAET,QAASE,GAAchd,EAAKoc,GAC1B,MAAOpc,GAAIoc,GAMb,QAASa,GAAYjd,EAAKkd,GACxB,MAAOld,GAAIkd,EAAWhc,WACnBgc,EAAWvc,YACXuc,EAAWjc,cAGhB,QAASkc,GAAa7b,GACpB,GAAIwb,KAYJ,OAXAxb,GAAOhI,QAAQ,SAASqC,GAClBmhB,EAAK5jB,eAAeyC,EAAMuF,aAC5B4b,EAAKnhB,EAAMuF,cAEb,IAAIkc,GAAON,EAAKnhB,EAAMuF,UAClBkc,GAAKlkB,eAAeyC,EAAMgF,cAC5Byc,EAAKzhB,EAAMgF,eAEb,IAAI0c,GAAOD,EAAKzhB,EAAMgF,WACtB0c,GAAK1hB,EAAMsF,cAAgBtF,IAEtBmhB,EAzIT,GAAI7kB,KAEJA,GAAG2C,WA6FH3C,EAAGuI,QAAUoc,EAAkB,UAAW,cAC1C3kB,EAAGohB,UAAYuD,EAAkB,YAAa,eAC9C3kB,EAAGyV,UAAYkP,EAAkB,YAAa,gBAC9C3kB,EAAG8H,WAAa6c,EAAkB,aAAc,aAChD3kB,EAAGqhB,WAAasD,EAAkB,aAAc,aAgBhD3kB,EAAGkI,kBAAoB2b,EAAY,oBAAqB5c,EAAIiB,kBAAmB0c,EAAoBG,GAyBnG/kB,EAAGqJ,OAASwa,EAAY,SAAU5c,EAAIoC,OAAQ6b,EAAcF,EAE5D,IAAIK,IAAc,CAClBrlB,GAAGslB,aAAe,WAChBD,GAAc,GAGhBrlB,EAAGyG,eAAiB,WAClB,MAAOnG,GAAMuf,aAAa7e,KAAK,SAASd,GACtCF,EAAG2C,QAAUzC,KAIjBF,EAAGulB,WAAa,WAEd,GAAIF,KAAgB,EAClB,MAAO/iB,GAAG9C,QAAQQ,EAGlBqlB,IAAc,CAGhB,IAAIG,IACFxlB,EAAGuI,QACHvI,EAAGqJ,OACHrJ,EAAGohB,UACHphB,EAAGyV,UACHzV,EAAG8H,WACH9H,EAAGkI,kBACHlI,EAAGqhB,WAIL,OAAO/e,GAAG0E,IAAIwe,EAAUzd,IAAI,SAASmc,GACnC,MAAOA,GAAIK,UACTvjB,KAAK,WACP,MAAOhB,GAAGyG,mBACTzF,KAAK,WAMN,MAHAqkB,IAAc,EAGPrlB,IAIX,IAAI8B,GAAU1B,EAAW2B,IAAI,kBAAmB,WAC9C/B,EAAGslB,eACHtlB,EAAGulB,cAOL,OAJAnlB,GAAW2B,IAAI,WAAY,WACzBD,MAGK9B,KAKTpB,QAAQC,OAAO,WACZyiB,SAAS,0BAA2B,2BACpCA,SAAS,wBAAyB,yBAClC9R,QAAQ,OAAA,QAAA,OAAA,KAAA,UAAA,aAAA,OAAA,SAAA,0BAAA,wBAAA,YAAO,SACdiW,EAAOhW,EAAMnN,EAAIof,EAASthB,EAC1BqhB,EAAMra,EACNse,EAAyBC,EAAuB/W,GAyDhD,QAASgX,GAAQC,GACf,GAAIvhB,GAAIhC,EAAGkiB,OAMX,OAJAxkB,GAAGmjB,MAAMnB,GAAWhhB,KAAK,WACvB6kB,IAAS7kB,KAAKsD,EAAE9E,QAAS8E,EAAEkO,UAGtBlO,EAAE3E,QAGX,QAASmmB,GAAgBtiB,EAAMuE,GAC7B,MAAa,KAATvE,EACK,wBACGuE,EAAI9G,eAAeuC,GAGtBuE,EAAIvE,GAFJ,yBAsCX,QAASuiB,GAAsB7lB,GAC7B,GAAItB,QAAQgM,SAAS1K,GAAO,CAC1B,GAAIiB,GAAQjB,EAAKyI,SACjB,OAAK/J,SAAQgM,SAASzJ,IAGpBiE,OAAOC,KAAKnF,GAAMmB,QAAQ,SAAUoC,GACtB,aAARA,IAAuBvD,EAAKe,eAAe,UAAYf,EAAKuD,GAAKxC,eAAe,YAClFf,EAAK6C,MAAQ7C,EAAKuD,GAAK,WAEzBvD,EAAKuD,GAAOsiB,EAAsB7lB,EAAKuD,MAElCvD,GARAiB,EAWT,MAAOjB,GAzHX,GAAI8lB,GAAU,mDAEVpX,GAAUqX,OAAS,IAErBD,EAAU,uBACoB,qBAArBpX,EAAUsX,QAAsD,4CAArBtX,EAAUsX,QAA6E,oCAArBtX,EAAUsX,UAChIF,EAAU,gDAGZ,IAAIhX,IAAQ,EACRgT,GAAY,EACZC,GAAuB,EAEvBjiB,KAEAmmB,EAAkB1E,EAAK9R,gBA6P3B,OA5PA3P,GAAG6iB,UAAY,SAAUF,GACvB,MAAOwD,GAAgBpW,OAAO4S,IAGhC3iB,EAAG8iB,UAAY,SAAmB9T,GAChC,MAAOhP,GAAGyQ,KAAK,sBACbuR,UAAWhT,IAEXoX,EAAG,4BACFplB,KAAK,SAAUU,GAChB,MAAOA,GAAOxB,QAIlBF,EAAGmjB,MAAQ,SAAenU,GACxB,MAAOhP,GAAGyQ,KAAK,0BACbuR,UAAWhT,IAEXoX,EAAG,4BACFplB,KAAK,SAAUqlB,GAEhB,MADAA,GAAQnmB,KAAK8hB,UAAYhT,EAClBqX,EAAQnmB,QAInBF,EAAGojB,cAAgB,SAAuBpU,EAAOxL,GAC/C,MAAOxD,GAAGyQ,KAAK,0BACbuR,UAAWhT,EACXiT,qBAAsBze,IAEtB4iB,EAAG,4BACFplB,KAAK,SAAUqlB,GAGhB,MAFAA,GAAQnmB,KAAK8hB,UAAYhT,EACzBqX,EAAQnmB,KAAK+hB,qBAAuBze,EAC7B6iB,EAAQnmB,QAwBnBF,EAAG8hB,SAAW,SAAUwE,GACtBtX,EAAQsX,GAGVtmB,EAAG+hB,aAAe,SAAUuE,GAC1BtE,EAAYsE,GAGdtmB,EAAGsjB,aAAe,WAChB,MAAOtB,IAGThiB,EAAGkiB,wBAA0B,SAAUqE,GACrCtE,EAAuBsE,GAGzBvmB,EAAGwmB,wBAA0B,WAC3B,MAAOvE,IAITjiB,EAAGqP,YAAc,SAAqBjG,GACpC,MAAI4F,GACKhP,EAAGyQ,KAAK,eACbrH,SAAUA,IAGLpJ,EAAGymB,QAwBdzmB,EAAGyQ,KAAO,SAAU3E,EAAQ5L,EAAMwmB,EAAmBC,EAAaC,GAC3DF,IACHA,GACEG,EAAG,2BAKP,IAAIC,IACF,yBACA,qBACA,eACA,kBAGE9X,IAA6C,KAApC8X,EAAgBvpB,QAAQuO,KACK,MAApCA,EAAO0O,OAAO1O,EAAOpO,OAAS,KAChCoO,GAAkB,MAGhBlN,QAAQsE,YAAYhD,KACtBA,MAGFA,EAAK8O,MAAQA,EAETpQ,QAAQsE,YAAYhD,EAAKA,QAC3BA,EAAKA,SAGH8hB,IACF9hB,EAAKA,KAAK8hB,UAAYA,GAGpBC,IACF/hB,EAAKA,KAAK+hB,qBAAuBA,IAKtB,iBAAXnW,IACF5L,EAAK8O,MAAQ,MAGf,IAAI1K,GAAIhC,EAAGkiB,OACX2B,GAAgB/V,OAAOtE,EAAQ5L,EAC/B,IAAI6mB,IACFjb,OAAQA,EACR5L,KAAMA,EAwFR,OArFAE,GAAW2U,WAAW2Q,EAAyBqB,GAC/CtB,EAAMuB,KAAKhB,EAASla,EAAQ5L,EAAM0mB,GAC/B5lB,KAAK,SAAU6f,GAad,IAXKjiB,QAAQgM,SAASiW,EAAKoG,eACzBroB,QAAQyU,SAASwN,EAAKqG,cACtBtoB,QAAQuoB,SAAStG,EAAKuG,gBAEtBvG,EAAKoG,cACHC,YAAarG,EAAKqG,YAClBE,aAAcvG,EAAKuG,eAKlBxoB,QAAQgM,SAASiW,EAAKoG,cActB,CAAA,GAAsC,IAAlCpG,EAAKoG,aAAaC,YACzB,MAAOtB,GAAQ,WACb,MAAO5lB,GAAGyQ,KAAK3E,EAAQ5L,EAAMwmB,IAI5B,KACDE,GAAqD,IAAlC/F,EAAKoG,aAAaC,aACtCN,GAAmBhoB,QAAQgM,SAASiW,EAAKoG,aAAaC,cAA2D,MAA3CrG,EAAKoG,aAAaC,YAAY,SAErGzX,EAAKtB,MAAM,OAASrC,EAAS,QACrB+U,EAAKoG,aAAaC,YAAc,KACtCrG,EAAKoG,aAAaG,cACpBvG,EAAKoG,aAAaI,SAAWvB,EAC3BjF,EAAKoG,aAAaC,YAAaR,GAGG,MAAlC7F,EAAKoG,aAAaC,aACgB,MAAlCrG,EAAKoG,aAAaC,aACgB,MAAlCrG,EAAKoG,aAAaC,aAElB9f,EAAO+G,MAAM0S,EAAKoG,aAAaG,cAEjC9iB,EAAEkO,OAAOqO,EAAKoG,kBAGX,CACH,GAAIK,GAAU,EAEZA,GADEV,GAAmBhoB,QAAQgM,SAASiW,EAAKoG,aAAaG,cAC9CvG,EAAKoG,aAAaG,aAAa,SAE/BvG,EAAKoG,aAAaG,aAE9B3X,EAAKjD,KAAK,OAASV,EAAS,OAASwb,GACjCX,GACFZ,EAAsBlF,GAExBvc,EAAE9E,QAAQqhB,QAnD8B,CACxC,GAAI6D,IACFwC,YAAa,GACbE,aAAc,uBACdC,SAAU,uBACVvb,OAAQA,EACRzO,MAAO6C,EACPqnB,OAAQ1G,EAEVpR,GAAKtB,MAAM,mBAAoBuW,GAC/Btd,EAAO+G,MAAMuW,EAAI0C,cACjB9iB,EAAEkO,OAAOkS,KA0CV,SAAUA,GAEXjV,EAAKtB,MAAM,oBACTrC,OAAQA,EACR5L,KAAMA,EACNiO,MAAOuW,IAETtd,EAAO+G,MAAM,sBACb7J,EAAEkO,QACA0U,YAAa,GACbE,aAAc,yBAIpB9iB,EAAE3E,QAAF2E,WAAkB,WAChBlE,EAAW2U,WAAW4Q,EAAuBoB,KAExCziB,EAAE3E,SAGXK,EAAGymB,KAAO,WACR,MAAOnkB,GAAGmP,QAGLzR,KAENqK,OAAO,gBAAiB,WAEzB,MAAO,UAAUhN,EAAOmqB,EAAaC,EAAWC,EAAcC,GAK5D,QAASC,GAAuBvqB,EAAOoqB,EAAWC,EAAcC,GAC9D,IAAK,GAAIxf,KAAK9K,GACK,OAAbA,EAAM8K,GACJqf,EACFnqB,EAAM8K,GAAK,SAEJ9K,GAAM8K,GAENuf,GAAgB9oB,QAAQ+T,QAAQtV,EAAM8K,KAA0B,GAAnB9K,EAAM8K,GAAGzK,aACxDL,GAAM8K,GACJwf,GAAwB,aAANxf,GAA0B,eAANA,QACxC9K,GAAM8K,GACJsf,GAAa7oB,QAAQgM,SAASvN,EAAM8K,KAC7Cyf,EAAuBvqB,EAAM8K,GAAIsf,EAGrC,OAAOpqB,GAlBT,MAFAA,GAAQuB,QAAQ0N,UAAWjP,GACvBuB,QAAQsE,YAAYukB,KAAYA,GAAY,GACzCG,EAAuBvqB,EAAOoqB,EAAWC,EAAcC,MAwBpE/oB,QAAQC,OAAO,kBAEdyY,QAAQ,SAAA,KAAA,OAAA,UAAA,YAAS,SAAShV,EAAImN,EAAMqD,EAAS+U,GAC5C,OACEb,KAAM,SAAS/nB,EAAK6oB,EAAQ5oB,EAAQ0nB,GAClC,GAAImB,GAAWzlB,EAAGkiB,QAGdwD,EAAa,GAAIlV,GAAQ4J,oBAC7B,KAAI,GAAIuL,KAAS/oB,GACf8oB,EAAW/M,IAAIgN,EAAO/oB,EAAO+oB,GAI/B,IAAIC,GAAe,SAASC,EAAGC,GAC7B,GAA4D,IAAxDD,EAAEpL,YAAY3Z,WAAW7F,QAAQ,oBACnCwqB,EAASvV,OAAO,8BACX,IAAI5T,QAAQgM,SAASgc,GAAkB,CAC5C,GAAIyB,GAAOR,EAAUS,MAAMF,EAAQxB,EACnCmB,GAASvoB,QAAQ6oB,EAAK,iBAAiB,aAAaP,EAAS,YAAYA,EAAS,eAElFC,GAASvoB,QAAQ2oB,GAMrB,OAFArV,GAAQ2J,WAAW8L,OAAOtpB,EAAK6oB,EAAQE,GAAY,EAAME,GAElDH,EAASpoB,SAElB6oB,eAAgB,SAASC,EAAUC,GACjC5V,EAAQ2J,WAAWgM,SAAWA,EAC9B3V,EAAQ2J,WAAWiM,SAAWA,OAKnCpR,QAAQ,aAAA,YAAa,SAASnD,GAE7B,QAASwU,GAAc/nB,GACrB,GAAIgoB,GAAMzU,EAAU,GAAG0U,cAAc,MAErC,OADAD,GAAIE,YAAYloB,GACTgoB,EAAI9M,UAKb,QAASwM,GAAMS,EAAK3E,GAElB,GAAI/R,MACA2W,IAMJ,IAJIpqB,QAAQkE,UAAUshB,EAAQ4E,cAC5BA,EAAa5E,EAAQ4E,YAGH,GAAhBD,EAAIlK,UAEN,GAAIkK,EAAIrK,WAAWhhB,OAAS,EAAG,CAC/B2U,EAAI,iBACF,KAAK,GAAIgN,GAAI,EAAGA,EAAI0J,EAAIrK,WAAWhhB,OAAQ2hB,IAAK,CAC9C,GAAI6B,GAAY6H,EAAIrK,WAAW9a,KAAKyb,EACpChN,GAAI,eAAe6O,EAAUhC,UAAYgC,EAAU1B,gBAG9B,IAAhBuJ,EAAIlK,WACbxM,EAAM0W,EAAIvJ,UAIZ,IAAIuJ,EAAIzJ,gBACN,IAAI,GAAInX,GAAI,EAAGA,EAAI4gB,EAAIhK,WAAWrhB,OAAQyK,IAAK,CAC7C,GAAIvE,GAAOmlB,EAAIhK,WAAWnb,KAAKuE,GAC3B+W,EAAWtb,EAAKsb,SAChB+J,EAAmD,KAAjCD,EAAWzrB,QAAQ2hB,EAEzC,IAA6B,mBAAlB7M,GAAI6M,GACT+J,EACF5W,EAAI6M,GAAYyJ,EAAc/kB,GAE9ByO,EAAI6M,GAAYoJ,EAAM1kB,EAAMwgB,OAEzB,CACL,GAAkC,mBAAvB/R,GAAI6M,GAAU,KAAsB,CAC7C,GAAIgK,GAAM7W,EAAI6M,EACd7M,GAAI6M,MACJ7M,EAAI6M,GAAU1hB,KAAK0rB,GAEjBD,EACF5W,EAAI6M,GAAU1hB,KAAKmrB,EAAc/kB,IAEjCyO,EAAI6M,GAAU1hB,KAAK8qB,EAAM1kB,EAAMwgB,KAKvC,MAAO/R,GAGT,OACEiW,MAAOA,MAMX1pB,QAAQC,OAAO,WACdmO,UAAU,UAAA,OAAA,OAAU,SAASyC,EAAMvN,GAClC,OACEgL,SAAU,IACVG,KAAM,SAASC,EAAQC,EAASwJ,GAC1BnY,QAAQkE,UAAUiU,EAAMoS,SAA4B,KAAjBpS,EAAMoS,SACtCjnB,EAAKC,gBAAgB4U,EAAMoS,SAC9B5b,EAAQM,eAMjBb,UAAU,SAAA,OAAA,OAAS,SAASyC,EAAMvN,GACjC,OACEgL,SAAU,IACVC,OACEic,MAAO,KAET/b,KAAM,SAASC,EAAQC,GACjBrL,EAAKC,gBAAgBmL,EAAO8b,QAC9B7b,EAAQM,cAQhBjP,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,qBACnBC,IAAK,SACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBC,YAAa,+BACbC,WAAY,4BACZC,aAAc,QACdC,SACEC,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,kBAK7BL,WAAW,6BAAA,SAAA,QAAA,UAAA,iBAAA,IAAA,aAAA,SAA6B,SACvCa,EAAQG,EAAOwS,EAAQ/S,EAAgBsC,EAAGjC,EAAYgH,GAsCtD,QAASiiB,GAAcC,GACrB,GAAIC,GAAK,yJACT,OAAOA,GAAGhL,KAAK3K,OAAO0V,GAAOnK,eAtC/B,GAAInf,GAAKC,IAGT,IAFAD,EAAGE,KAAO,GAENtB,QAAQsE,YAAY9C,EAAWopB,wBAAyB,CAC1D,GAAIC,GAAO1pB,EAAeoM,IAAI,mBAC9B9J,GAAEgN,YAAYoa,GACdrpB,EAAWopB,wBAAyB,EAGtCxpB,EAAG0pB,WAAa,WACd,GAAIL,EAAcrpB,EAAGE,MAAO,CAC1B,GAAIA,IACF+L,QAAS,KACTqd,MAAOtpB,EAAGE,KACVypB,aAAa,EACbjJ,YAAa,UAGfpgB,GAAMkgB,OAAOtgB,GAAMc,KAAK,SAASU,GAC5B9C,QAAQkE,UAAUpB,IAAW9C,QAAQkE,UAAUpB,EAAOkoB,OACvD9W,EAAQ4H,SAASmP,KAAOnoB,EAAOkoB,KAG9BhrB,QAAQkE,UAAUpB,IAAW9C,QAAQkE,UAAUpB,EAAOwlB,eAC7B,MAAvBxlB,EAAOwlB,aAA8C,MAAvBxlB,EAAOwlB,YACtC/mB,EAAO0B,GAAG,mBACqB,MAAvBH,EAAOwlB,aACf/mB,EAAO0B,GAAG,4BAKhBuF,GAAO+G,MAAM9L,EAAE,sCAYrBzD,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,sBACnBC,IAAK,iBACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBE,WAAY,wBACZC,aAAc,QACdC,SACEsqB,OAAA,gBAAO,SAASzpB,GACdA,EAAcmjB,iBAKrBlkB,WAAW,yBAAA,SAAA,QAAA,gBAAyB,SACnCa,EAAQG,EAAOD,GAGfC,EAAMmgB,YAAYzf,KAAK,SAASU,GAC9BrB,EAAc,OAAYqB,EAAOqhB,OACjC5iB,EAAO0B,GAAG,0BAOdjD,QAAQC,OAAO,WACZC,QAAA,iBAAO,SAAUC,GAChBA,EAAeC,MAAM,gBACnB+qB,YAAU,EACV9qB,IAAK,QACLI,YAAa,qBACbC,WAAY,sBACZC,aAAc,OACdC,SACEwqB,MAAA,OAAA,eAAM,SAAU9nB,EAAMD,GACpB,MAAIC,GAAKqgB,MAAQrgB,EAAKuhB,mBACbvhB,EAAKqgB,KAEPtgB,EAAagoB,gBAEtBC,KAAA,MAAK,SAAU9nB,GACb,MAAOA,GAAImjB,eAEb9lB,oBAAA,qBAAoB,SAAUC,GAC5B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAAUF,GAC7B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAAUC,GACrB,MAAOA,GAAeJ,kBAK7BL,WAAW,uBAAA,OAAA,IAAA,iBAAA,MAAA,SAAA,OAAA,SAAA,MAAA,UAAA,gBAAA,iBAAA,aAAuB,SACjC0qB,EAAM3nB,EAAGyM,EAAgBob,EAAK5c,EAAQpL,EAAM/B,EAAQlB,EAAK6T,EAASzS,EAAeN,EAAgBK,GAmBjG,QAAS+pB,KACPnqB,EAAGoqB,aACHrqB,EAAegB,UAAUC,KAAK,SAAUd,GACtC,GAAIA,EAAKe,eAAe,eAClBf,EAAKgB,WAAWD,eAAeZ,EAAc,QAAY,CAC3D,GAAIc,GAAQvC,QAAQwC,SAASlB,EAAKgB,WAAWb,EAAc,QAC3DzB,SAAQyC,QAAQF,EAAO,SAAUG,GAC3BA,EAAIL,eAAe,aAAeK,EAAIC,UACxCvB,EAAGoqB,UAAU5sB,KAAK8D,QAzB9B,GAAItB,GAAKC,IAETrB,SAAQ0N,OAAOtM,EAAIkqB,EAEnB,IAAIpoB,GAAUwL,EAAOkB,OAAO,WAC1B,MAAO0b,GAAIvnB,SACV,SAAUA,GACX3C,EAAG2C,QAAUA,EAET3C,EAAG2C,QAAQ1B,eAAe,4BAA8BjB,EAAG2C,QAAQ8F,wBAAwBxH,eAAe,SAC5GjB,EAAG2C,QAAQ8F,wBAAwB4hB,UAAY1nB,EAAQ8F,wBAAwBI,IAAIyhB,OAAO,iBAE3F,EAEHtqB,GAAGuiB,KAAOyH,EACVhqB,EAAG+O,eAAiBD,EAkBpBqb,IAEAnqB,EAAG+M,QAAU,SAAiBpM,GAC5BR,EAAO0B,GAAG,oBACRL,KAAMb,EAAIa,QAIdxB,EAAGuqB,OAAS,WACV,GAAIC,GAAYvrB,EAAI,eAChBwrB,EAAUxrB,EAAI,iBAClBiD,GAAKqhB,WACW,MAAZkH,EACFtqB,EAAO0B,GAAG,kBACW,MAAZ4oB,GAAiC,KAAdD,EAC5B1X,EAAQ4H,SAASmP,KAAOW,EAExBrqB,EAAO0B,GAAG,mBAIdyL,EAAOvL,IAAI,WAAY,WACrBD,IACA4oB,KAGF,IAAIA,GAActqB,EAAW2B,IAAI,kBAAmB,WAClDooB,SAONvrB,QAAQC,OAAO,WACdC,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,iBACnBC,IAAK,oBACLC,QACEC,UAAW,KACXC,gBAAiB,MAEnBE,WAAY,wBACZC,aAAc,QACdC,SACEsqB,OAAA,gBAAO,SAASzpB,GACdA,EAAcmjB,iBAKrBzQ,KAAA,OAAA,SAAA,OAAI,SAAS7Q,EAAM/B,EAAQsP,GAC1BvN,EAAKwgB,iBAAiB,WACpBjT,EAAKmC,MAAM,2CACXzR,EAAO0B,GAAG,sBAGbvC,WAAW,yBAAA,OAAA,SAAA,eAAA,YAAA,IAAyB,SACnC4C,EAAM/B,EAAQK,EAAcoO,EAAWvM,GAkBvC,QAASsoB,KACPzoB,EAAKghB,QAAQ1iB,EAAawO,OAAOhO,KAAK,SAASd,GAC7C,GAAIA,EAAK8O,MAAO,CACd,GAAIG,GAAeP,EAAUQ,QACzBD,GAAalO,eAAe,aAC9BoB,EAAEgN,YAAYF,EAAa/F,UAE7BjJ,EAAO0B,GAAG,yBAEV1B,GAAO0B,GAAG,2BARdK,SAUS,WACP/B,EAAO0B,GAAG,2BA5BVrB,EAAaS,eAAe,SAC9BiB,EAAKqN,aAAa/O,EAAawO,OAAOhO,KAAK,SAASU,GAC9CA,EAGFvB,EAAO0B,GAAG,qBACRmN,MAAOxO,EAAawO,QAHtB2b,KAMD,WACDxqB,EAAO0B,GAAG,2BAGZ1B,EAAO0B,GAAG,4BAsBdjD,QAAQC,OAAO,WACdyiB,SAAS,mBAAoB,oBAC7BA,SAAS,qBAAsB,sBAC/BA,SAAS,sBAAuB,uBAChCA,SAAS,uBAAwB,wBACjC9R,QAAQ,gBAAA,KAAA,sBAAA,uBAAe,SAASlN,EAAIsoB,EAAqBC,GACxD,GAAI7qB,KAeJ,OAbAA,GAAGiqB,YAAc,WACf,MAAO3nB,GAAGkQ,QACRrE,MAAOyc,KAIX5qB,EAAG8qB,cAAgB,SAAS3B,GAC1B,MAAO7mB,GAAGkQ,QACRrE,MAAO0c,EACP1B,OAAQA,KAILnpB,KAKTpB,QAAQC,OAAO,WACdkU,KAAA,aAAA,OAAA,SAAA,mBAAA,sBAAA,uBAAI,SACH3S,EAAYqP,EAAMtP,EAClB4qB,EAAkBH,EAAqBC,GAGvC,GAAIG,GAAe5qB,EAAW2B,IAAI,oBAAoB,SACpDkpB,EAAKC,EAASC,EAAUC,EAAWC,EAAYld,GAE3CvP,QAAQgM,SAASuD,KACnBsB,EAAKtB,MAAM,wBAAwBA,GACnCA,GAASmd,aAAand,IAExBvP,QAAQ0N,OAAO6B,GACb1D,KAAMsgB,EACNG,QAAQA,EACRC,SAAUA,EACVC,UAAWA,EACXC,WAAYA,IAEd5b,EAAKmC,MAAM,oBAAqBzD,GAC7BA,EAAMA,QAAU0c,EACjB1qB,EAAO0B,GAAG,yBACRsnB,OAAQhb,EAAMgb,SAES,kBAAjB+B,EAAQ1pB,MAChBiO,EAAKmC,MAAM,gCACXzR,EAAO0B,GAAG,iBAAiBsM,MAAOA,KACzBA,EAAMA,QAAUyc,EACtBzc,EAAMA,QAAUyc,GACjBzqB,EAAO0B,GAAG,iBACR1C,UAAW+rB,EACX9rB,gBAAiB+rB,IAIrB1b,EAAKtB,MAAM,+BAIf/N,GAAW2B,IAAI,WAAYipB,MAK7BpsB,QAAQC,OAAO,WACdyiB,SAAS,oBAAoB,kBAC7BxiB,QAAA,iBAAO,SAASC,GACfA,EAAeC,MAAM,iBAEnBE,QACEiP,MAAO,MAET9O,YAAa,uBACbC,WAAY,wBACZC,aAAc,QACdC,SACE+rB,QAAA,gBAAQ,SAASlrB,GACZzB,QAAQsE,YAAY7C,EAAc,UACnCA,EAAc,OAAY,aAG9BZ,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,eAI5BZ,EAAeC,MAAM,yBACnBC,IAAK,kBACLI,YAAa,gCACbC,WAAY,gCACZC,aAAc,QACdL,QACEiqB,OAAQ,MAEV3pB,SACE+rB,QAAA,gBAAQ,SAASlrB,GACZzB,QAAQsE,YAAY7C,EAAc,UACnCA,EAAc,OAAY,aAG9BZ,oBAAA,qBAAoB,SAASC,GAC3B,MAAOA,GAAmBC,YAE5BC,qBAAA,qBAAqB,SAASF,GAC5B,MAAOA,GAAmBG,aAE5BC,aAAA,iBAAa,SAASC,GACpB,MAAOA,GAAeJ,kBAK7BL,WAAW,yBAAA,eAAA,OAAA,SAAA,kBAAA,oBAAA,gBAAA,OAAyB,SACnCkB,EAAciP,EAAMtP,EAAQ0O,EAC5B2c,EAAmBnrB,EAAe6B,GAGlC,GAAIlC,GAAKC,KAELkO,EAAQ3N,EAAa2N,OAASU,EAAgB2c,EAClD3c,GAAgB2c,GAAqBrd,EACrCvP,QAAQ0N,OAAOtM,EAAGmO,GAElBnO,EAAGyrB,KAAO,WACRhc,EAAKmC,MAAM,0BACXzR,EAAO0B,GAAGsM,EAAMid,UAAU5pB,KAAM2M,EAAMkd,aAGxCrrB,EAAG0rB,MAAQ,WACTjc,EAAKmC,MAAM,4BACXzR,EAAO0B,GAAGsM,EAAM+c,QAAQ1pB,KAAM2M,EAAMgd,WAGtCnrB,EAAGsP,QAAU,WACXpN,EAAKqN,aAAalP,EAAc,OAAUW,KAAK,WAC7C6N,EAAgB2U,SAChBrjB,EAAO0B,GAAG,qBACRmN,MAAO3O,EAAc,cAM5Bf,WAAW,iCAAA,eAAA,gBAAA,OAAA,SAAiC,SAASkB,EAAcH,EAAe6B,EAAM/B,GACvF,GAAIH,GAAKC,IACTD,GAAGmpB,OAAS3oB,EAAa2oB,OAEzBnpB,EAAGsP,QAAU,WACXpN,EAAKqN,aAAalP,EAAc,OAAUW,KAAK,WAC7Cb,EAAO0B,GAAG,qBACRmN,MAAO3O,EAAc,cAQ7BzB,QAAQC,OAAO,WACdkU,KAAA,aAAA,OAAI,SAAS3S,EAAYqP,GAExB,QAASkc,GAAe3sB,EAAO4sB,GAC7B,OAAQ5sB,EAAMwC,MAAQ,UAAY,IAChC5C,QAAQitB,OAAOD,GAGnB,GAAIE,GAAkB1rB,EAAW2B,IAAI,sBAAuB,SAASgqB,EAAMC,EAAIC,EAAQC,EAAMC,GAC3F1c,EAAKjD,KAAK,yBACRmf,EAAeO,EAAMC,GACrBR,EAAeK,EAAIC,MAInBG,EAAmBhsB,EAAW2B,IAAI,iBAAkB,SAASkpB,EAAKoB,EAAcH,EAAMC,GACxF1c,EAAK6c,KAAK,mBACRrB,IAAKA,EACLoB,aAAcA,EACdH,KAAMA,EACNC,SAAUA,MAIVI,EAAgBnsB,EAAW2B,IAAI,oBAAqB,SAASkpB,EAAKe,EAAIC,EAAQC,EAAMC,EAAUhe,GAChGsB,EAAK6c,KAAK,uBAAyBJ,EAAK1qB,KAAO,OAASwqB,EAAGxqB,MACzDypB,IAAKA,EACLe,GAAIA,EACJC,OAAQA,EACRC,KAAMA,EACNC,SAAUA,EACVhe,MAAOA,KAIX/N,GAAW2B,IAAI,WAAY,WACzBwqB,IACAT,IACAM,MAGF3c,EAAKmC,MAAM,mCAKbhT,QAAQC,OAAO,WAAWC,QAAA,iBAAA,qBAAA,oBAAO,SAC/BC,EAAgBytB,EAAoBC,GAGpC1tB,EAAeC,MAAM,WACnB+qB,YAAS,EACTzU,SAAS,sBACThW,YAAA,aAAA,IAAY,SAASc,EAAYiC,GAC/BjC,EAAWiC,EAAIA,IAEjB9C,aAAc,YAGhBitB,EAAmBE,UAAU,SAASC,EAAUjS,GAC9C,GAAIzb,GAAMyb,EAASkS,SACf9Z,EAAU6Z,EAASxgB,IAAI,WACvB0gB,EAAe5tB,EAAI1B,QAAQ,KAAO,EAAI0B,EAAIuR,MAAMvR,EAAI1B,QAAQ,MAAQ6V,OACpE0Z,EAAW,iBAUf,OARID,KACFC,GAAYD,EACZ5tB,EAAMA,EAAIP,QAAQmuB,EAAa,IAG/B/Z,EAAQ4H,SAASmP,KAAO5qB,EAAM,IAAM6tB,GAG/BA,IAKTL,EAAkBM,WAAU,MAM9BnuB,QACGC,OAAO,WACPyiB,SAAS,iBAAkB,WAC3BxiB,QAAA,eAAA,2BAAO,SAAUkuB,EAAcC,GAE9BD,EAAaE,cAAa,GAC1BD,EAAyBE,sBACvB,wCAGH3d,QAAQ,UAAA,UAAU,SAAUsD,GAC3B,MAAOA,GAAQpD,UAGnB9Q,QAAQC,OAAO,WAAWkU,KAAK,iBAAkB,SAASqa,GAAiBA,EAAeC,IAAI,uBAAuB,8VACrHD,EAAeC,IAAI,gCAAgC;AACnDD,EAAeC,IAAI,qBAAqB,kTACxCD,EAAeC,IAAI,+BAA+B,quCAClDD,EAAeC,IAAI,kDAAkD,ohBACrED,EAAeC,IAAI,mDAAmD,2hBACtED,EAAeC,IAAI,2CAA2C,ymGAC9DD,EAAeC,IAAI,8CAA8C,qaACjED,EAAeC,IAAI,qCAAqC,q2CACxDD,EAAeC,IAAI,+BAA+B,0WAClDD,EAAeC,IAAI,0BAA0B,+9IAC7CD,EAAeC,IAAI,yCAAyC,6mBAC5DD,EAAeC,IAAI,gCAAgC,mjBACnDD,EAAeC,IAAI,gCAAgC,yIACnDD,EAAeC,IAAI,wCAAwC,2iBAC3DD,EAAeC,IAAI,qCAAqC,saACxDD,EAAeC,IAAI,iCAAiC,kpDACpDD,EAAeC,IAAI,wBAAwB,o/DAC3CD,EAAeC,IAAI,wCAAwC,k6VAC3DD,EAAeC,IAAI,wBAAwB,4vBAC3CD,EAAeC,IAAI,yCAAyC;AAC5DD,EAAeC,IAAI,qCAAqC,8wBACxDD,EAAeC,IAAI,mCAAmC,guBACtDD,EAAeC,IAAI,gCAAgC,oyEACnDD,EAAeC,IAAI,2CAA2C,6mJAC9DD,EAAeC,IAAI,8CAA8C,w+EACjED,EAAeC,IAAI,kDAAkD,2lCACrED,EAAeC,IAAI,gDAAgD,knBACnED,EAAeC,IAAI,uBAAuB,8VAC1CD,EAAeC,IAAI,gCAAgC,w2BACnDD,EAAeC,IAAI,qBAAqB,kTACxCD,EAAeC,IAAI,+BAA+B,quCAClDD,EAAeC,IAAI,kDAAkD,ohBACrED,EAAeC,IAAI,mDAAmD,2hBACtED,EAAeC,IAAI,2CAA2C,ymGAC9DD,EAAeC,IAAI,qCAAqC,q2CACxDD,EAAeC,IAAI,8CAA8C,qaACjED,EAAeC,IAAI,+BAA+B,0WAClDD,EAAeC,IAAI,yCAAyC,6mBAC5DD,EAAeC,IAAI,gCAAgC,mjBACnDD,EAAeC,IAAI,gCAAgC,yIACnDD,EAAeC,IAAI,wCAAwC,2iBAC3DD,EAAeC,IAAI,qCAAqC,saACxDD,EAAeC,IAAI,iCAAiC,kpDACpDD,EAAeC,IAAI,0BAA0B,+9IAC7CD,EAAeC,IAAI,wBAAwB;AAC3CD,EAAeC,IAAI,wBAAwB,4vBAC3CD,EAAeC,IAAI,wCAAwC,k6VAC3DD,EAAeC,IAAI,yCAAyC,ixBAC5DD,EAAeC,IAAI,qCAAqC,8wBACxDD,EAAeC,IAAI,mCAAmC,guBACtDD,EAAeC,IAAI,gCAAgC,oyEACnDD,EAAeC,IAAI,2CAA2C,6mJAC9DD,EAAeC,IAAI,8CAA8C,w+EACjED,EAAeC,IAAI,kDAAkD,2lCACrED,EAAeC,IAAI,gDAAgD","file":"scripts/app-b62a3f242d.js","sourcesContent":["'use strict';\n\nangular.module('privacy', [\n 'ngAnimate',\n 'ngCookies',\n 'ngSanitize',\n 'ngMessages',\n 'ngAria',\n 'ui.router',\n 'ui.bootstrap',\n 'angularSoap',\n 'toastr',\n 'blockUI',\n 'ngStorage',\n 'angularMoment',\n 'prettyXml',\n 'frapontillo.bootstrap-switch',\n 'angular.filter',\n 'ui.tree',\n 'pageslide-directive',\n 'angulartics',\n 'ngLodash',\n 'uuid4',\n 'angulartics.google.analytics',\n 'tmh.dynamicLocale',\n 'nzToggle'\n]);\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.notUnique', {\n url: '/not-unique-email',\n params: {\n nextState: null,\n nextStateParams: null\n },\n templateUrl: 'app/paasLogin/notUnique/notUnique.html',\n controller: 'login_PaasloginNotUniqueController',\n controllerAs: 'login',\n resolve: {\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n})\n.controller('login_PaasloginNotUniqueController', function(\n) {\n});\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.unknown', {\n url: '/unkown-email',\n params: {\n nextState: null,\n nextStateParams: null\n },\n templateUrl: 'app/paasLogin/unknown/unknown.html',\n controller: 'login_PaasloginUnknownController',\n controllerAs: 'login',\n resolve: {\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n})\n.controller('login_PaasloginUnknownController', function(\n) {\n var vm = this;\n vm.data = '';\n\n});\n\n'use strict';\n\nangular.module('privacy')\n .config(function ($stateProvider) {\n $stateProvider.state('privacy.main.tab', {\n url: '/tab/:name',\n templateUrl: 'app/main/tab/tab.html',\n controller: 'main_tab_TabController',\n controllerAs: 'tab'\n });\n })\n .controller('main_tab_TabController', function (\n $state, $rootScope, $localStorage, Relen, $analytics, CustomElements, $stateParams\n ) {\n var name = $stateParams.name;\n var vm = this;\n\n function getExtraTab() {\n var found = false;\n vm.tab = [];\n vm.table = [];\n vm.headers = [];\n vm.rows = [];\n CustomElements.getData().then(function (data) {\n if (data.hasOwnProperty('extra_tabs')) {\n if (data.extra_tabs.hasOwnProperty($localStorage['locale'])) {\n var value = angular.fromJson(data.extra_tabs[$localStorage['locale']]);\n angular.forEach(value, function (val) {\n if (val.hasOwnProperty('checkbox') && val.checkbox && name === val.name) {\n found = true;\n Relen.paaSGetTab(val.name).then(function (result) {\n var jsonData = angular.fromJson(result.data.jsonData);\n vm.headers = jsonData.definition.headers;\n vm.rows = jsonData.data.rows;\n });\n vm.tab = val;\n }\n });\n }\n }\n\n if (!found) {\n $state.go('privacy.main.data');\n }\n\n });\n }\n\n getExtraTab();\n\n var watcher = $rootScope.$on('languageChanged', function () {\n getExtraTab();\n });\n\n $rootScope.$on('$destroy', function () {\n watcher();\n })\n\n });\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.main.permissions', {\n url: '/permissions',\n templateUrl: 'app/main/permissions/permissions.html',\n controller: 'main_permissions_DataController',\n controllerAs: 'permissions',\n resolve: {\n acl: function(ErrorService, Auth) {\n return Auth.checkAccessList('PAAS/Permissions');\n }\n }\n });\n})\n.controller('main_permissions_DataController', function(\n Relen, acl, App, $state, CustomElements, $localStorage, $analytics, t, $rootScope, $q\n) {\n\n if (!acl) {\n return $state.go('privacy.main.data');\n }\n\n var vm = this;\n\n vm.permissions = [];\n vm.permissionsGood = {};\n vm.permissionsCategory = {};\n vm.singlePermissions = {};\n var allChannels = [];\n var allPermissions = [];\n var found = false;\n vm.useCategories = false;\n vm.showGroupsToggle = false;\n vm.GroupsToggleState = false;\n\n function setPermissions() {\n vm.permissions = [];\n vm.permissionsGood = {};\n\n for (var index = 0; index < App.contact.ContactPermissions.length; index++) {\n var permission = App.contact.ContactPermissions[index];\n\n if(angular.isDefined(permission.inOut)) {\n permission.inOut = permission.inOut[0];\n\n if (permission.inOut === '?') {\n permission.hide = \"true\";\n } else {\n permission.hide = \"false\";\n }\n\n vm.permissions.push(permission);\n }\n\n }\n var string = \"\";\n angular.forEach(vm.permissions, function(value) {\n if (angular.isUndefined(vm.permissionsGood[value.cbpCode.toString()])) {\n vm.permissionsGood[value.cbpCode.toString()] = {};\n string = 'permission_channel.' + value.channelCode.toString();\n value.translation = string;\n value.icon = 'permission_channel_icon.' + value.channelCode.toString(),\n\n\n vm.permissionsGood[value.cbpCode.toString()] = {\n code : value.cbpCode.toString(),\n key : 'permission_info_text.' + value.cbpCode.toString(),\n title : t('permission_info_title.' + value.cbpCode.toString()),\n data : []\n };\n vm.permissionsGood[value.cbpCode.toString()].data.push(value);\n } else {\n string = 'permission_channel.' + value.channelCode.toString();\n value.translation = string;\n value.icon = 'permission_channel_icon.' + value.channelCode.toString(),\n vm.permissionsGood[value.cbpCode.toString()].data.push(value);\n }\n });\n\n angular.forEach(allChannels, function(value) {\n string = 'permission_channel.' + value.channelCode.toString();\n value.translation = string;\n value.icon = 'permission_channel_icon.' + value.channelCode.toString(),\n value.hide = \"unkown\";\n angular.forEach(vm.permissionsGood, function(item) {\n found = false\n\n angular.forEach(allPermissions,function(per) {\n if(item.code === per.cbpCode.toString()) {\n var key = 'description_' + $localStorage['locale'];\n item.fallbackTitle = per[key];\n }\n });\n\n angular.forEach(item.data, function(data) {\n if(data.channelCode.toString() === value.channelCode.toString()) {\n found = true;\n }\n });\n if(!found) {\n item.data.push(value);\n }\n item.data.sort(function (a, b) {\n var nameA = a.channelCode.toString(); // ignore upper and lowercase\n var nameB = b.channelCode.toString(); // ignore upper and lowercase\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n // names must be equal\n return 0;\n });\n });\n });\n\n angular.forEach(vm.permissionsGood, function(item) {\n var dataGood = [];\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'DM') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'EM') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'PH') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'SMS') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'APP') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'OTH') {\n dataGood.push(d);\n }\n });\n\n angular.forEach(item.data, function(d) {\n if (d.channelCode.toString() === 'WEB') {\n dataGood.push(d);\n }\n });\n\n item.data = dataGood;\n });\n createGroups();\n }\n\n vm.colors = {\n true : \"#000\",\n false : \"#000\"\n };\n\n vm.toggle = {\n good : \"I\",\n bad : \"O\",\n unkwon: \"?\",\n disabled: \"?\",\n updated : false\n }\n\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty('toggle_false')){\n vm.toggle.updated = true;\n vm.colors.false = data['toggle_false'];\n }\n if(data.hasOwnProperty('toggle_true')){\n vm.toggle.updated = true;\n vm.colors.true = data['toggle_true'];\n }\n }\n vm.toggle.updated = true;\n\n Relen.getAllPossiblePermissions($localStorage['client']).then(function(data) {\n allChannels = [];\n allPermissions = [];\n allChannels = data.PaaSChannelCodes;\n allPermissions = data.PaaSPermissions;\n setPermissions();\n });\n\n });\n\n vm.editPermission = function(permission) {\n var data = {\n cbpID : permission.cbpID,\n channelCode: permission.channelCode.toString(),\n inOut: permission.inOut.toString()\n };\n\n Relen.updatePermission(data).then(function() {\n App.refreshContact().then(function() {\n setPermissions();\n });\n });\n }\n\n vm.tracking = function() {\n $analytics.eventTrack('hit', { category: 'Company CTA', label: $localStorage['client'] });\n };\n\n var watcher = $rootScope.$on('languageChanged', function() {\n setPermissions();\n });\n\n $rootScope.$on('$destroy', function() {\n watcher();\n });\n\n function createGroups() {\n var result = [];\n var singleStates = {};\n CustomElements.getData().then(function(data) {\n if (data.hasOwnProperty('category_permission')) {\n var categories = angular.fromJson(data['category_permission']);\n if(categories.length > 0) {\n vm.useCategories = true;\n angular.forEach(categories, function(value) {\n var title = \"\";\n var description =\"\";\n var fallbackTitle = \"\";\n\n if (value.permission_code !== \"\") {\n angular.forEach(allPermissions,function(per) {\n if(value.permission_code === per.cbpCode.toString()) {\n var key = 'description_' + $localStorage['locale'];\n fallbackTitle = per[key]\n }\n });\n\n title = t('permission_info_title.' + value.permission_code);\n description = t('permission_info_text.' + value.permission_code);\n\n }\n\n if(value.hasOwnProperty($localStorage['locale']) && value[$localStorage['locale']] !== '') {\n result.push({\n title: unescape(value[$localStorage['locale']]),\n description: unescape(value[$localStorage['locale'] + \"_description\"]),\n key: value.title,\n state: '?',\n childeren: {},\n show: true,\n checkbox: value.checkbox,\n permission_code: value.permission_code,\n data : {},\n title_permission : title ,\n description_permission : description,\n fallbackTitle : fallbackTitle\n });\n }\n });\n\n if (data.hasOwnProperty('permission_category')) {\n angular.forEach(result, function(value) {\n angular.forEach(data['permission_category'], function(item, key){\n if(value.key === item) {\n value.childeren[key] = [];\n }\n\n if (item === 'single-state') {\n singleStates[key] = [];\n }\n\n if ('cbpCode_' + value.permission_code === item) {\n value.childeren[key] = [];\n }\n\n });\n if(angular.equals(value.childeren, {})) {\n value.show = false;\n }\n });\n }\n\n angular.forEach(result, function(value) {\n angular.forEach(value.childeren, function(item, key) {\n angular.forEach(vm.permissionsGood, function(data, k){\n if (key === k) {\n value.childeren[key] = data;\n }\n });\n });\n\n if(value.permission_code !== '') {\n angular.forEach(vm.permissionsGood, function(data, k){\n if (value.permission_code === k) {\n value.data = data;\n }\n });\n }\n });\n\n if (Object.keys(singleStates).length > 0) {\n angular.forEach(singleStates, function(value, key) {\n angular.forEach(vm.permissionsGood, function(data, k){\n if (key === k) {\n singleStates[key] = data;\n }\n });\n });\n }\n }\n }\n\n vm.permissionsCategory = result;\n vm.singlePermissions = singleStates;\n });\n }\n\n vm.editPermissionGroup = function(category) {\n var promises = [];\n angular.forEach(category.childeren, function(value){\n angular.forEach(value.data, function(item){\n if(angular.isDefined(item.cbpID)) {\n var data = {\n cbpID : item.cbpID,\n channelCode: item.channelCode.toString(),\n inOut: category.state.toString()\n };\n promises.push(Relen.updatePermission(data));\n }\n });\n });\n\n if(Object.keys(category.data).length > 0) {\n angular.forEach(category.data.data, function(item){\n if(angular.isDefined(item.cbpID)) {\n var data = {\n cbpID : item.cbpID,\n channelCode: item.channelCode.toString(),\n inOut: category.state.toString()\n };\n promises.push(Relen.updatePermission(data));\n }\n });\n }\n\n /*eslint angular/no-services: [2,[\"q\"]]*/\n $q.all(promises).then(function(){\n App.refreshContact().then(function() {\n setPermissions();\n });\n });\n }\n\n});\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.main.data', {\n url: '/data',\n templateUrl: 'app/main/data/data.html',\n controller: 'main_data_DataController',\n controllerAs: 'data',\n resolve: {\n acl: function(ErrorService, Auth) {\n return Auth.checkAccessList('PAAS/Data');\n }\n }\n });\n})\n.controller('main_data_DataController', function(\n Relen, acl, Ref, SidePanel, App, t, $state, ConfirmationService, $analytics,\n $localStorage, toastr, $rootScope, CustomElements\n) {\n\n if (!acl) {\n return $state.go('privacy.main.permissions');\n }\n\n var vm = this;\n\n vm.genders = [];\n vm.touchPoints = [];\n vm.mainTypes = [];\n vm.subTypes = [];\n vm.showSubtypes = false;\n angular.forEach(App.reltpCombinations.map, function(item) {\n angular.forEach(item, function(data){\n if (data.tpSubCode !== '') {\n vm.showSubtypes = true;\n }\n });\n });\n\n function loadTouchpoints() {\n vm.touchPoints = [];\n vm.mainTypes = [];\n vm.subTypes = [];\n\n CustomElements.getData().then(function(data) {\n if (data.hasOwnProperty('modify_data')) {\n var modify_data = angular.fromJson(data.modify_data);\n angular.forEach(App.contact.ContactRelationTouchPoints, function(item) {\n angular.forEach(modify_data, function(value) {\n if (item.hasOwnProperty('reltpSubCode')) {\n var name = item.reltpCode.toString() + '_' + item.reltpSubCode.toString()\n if (value.name === name) {\n item.modify = value.modify;\n item.delete = value.delete;\n }\n } else {\n if (value.name === item.reltpCode.toString()) {\n item.modify = value.modify;\n item.delete = value.delete;\n }\n }\n })\n vm.touchPoints.push(item);\n });\n } else {\n vm.touchPoints = App.contact.ContactRelationTouchPoints;\n }\n });\n\n angular.forEach(App.reltpCodes.map, function(item) {\n CustomElements.getData().then(function(data) {\n if (data.hasOwnProperty('modify_data')) {\n var modify_data = angular.fromJson(data.modify_data);\n angular.forEach(modify_data, function(value) {\n if(value.name.indexOf(item.reltpCode) !== -1 && value.create && !vm.mainTypes.includes(item)) {\n vm.mainTypes.push(item);\n vm.subTypes[item.reltpCode] = [];\n }\n });\n }\n });\n });\n\n angular.forEach(App.reltpCombinations.map, function(item) {\n angular.forEach(item, function(i){\n CustomElements.getData().then(function(data) {\n if (data.hasOwnProperty('modify_data')) {\n var modify_data = angular.fromJson(data.modify_data);\n angular.forEach(modify_data, function(value) {\n if (i.tpSubCode !== '') {\n var name = i.tpCode + '_' + i.tpSubCode;\n if(name === value.name && value.create) {\n vm.subTypes[i.tpCode].push(i);\n }\n } else {\n if(i.tpCode === value.name && value.create) {\n vm.subTypes[i.tpCode].push(i);\n }\n }\n });\n }\n });\n });\n });\n }\n\n loadTouchpoints();\n\n vm.getSubTypes = function(type) {\n return vm.subTypes[type];\n }\n\n function getGenderslocal() {\n vm.genders = [];\n Ref.genders().then(function(result) {\n angular.forEach(result, function(value, key){\n if (value.inGUIDropDown === 'true') {\n vm.genders.push(value);\n }\n\n if (key === '*' && App.contact.ContactIndividualEntity.genderCode.valueOf() === key ) {\n vm.genders.push(value);\n }\n });\n setUser();\n });\n }\n\n getGenderslocal();\n\n vm.touchPointsOrder = function(tp) {\n switch (tp.reltpCode.valueOf()) {\n case 'POST': return 1;\n case 'EMAIL': return 2;\n case 'MOB': return 3;\n case 'PHONE': return 4;\n case 'FAX': return 5;\n default: return 100;\n }\n };\n\n vm.getLegalCode = function getLegalCode(code) {\n var value = code.valueOf();\n if (angular.isObject(value)) {\n value = '';\n }\n\n return value;\n }\n\n vm.touchpointValue = function(tp) {\n if (!tp) {\n return '';\n }\n\n switch (tp.reltpCode.valueOf()) {\n case 'POST': return address(tp);\n case 'MOB':\n case 'PHONE':\n case 'EMAIL': // no special action\n default: return tp.value;\n }\n };\n\n vm.sideIndividu = {\n firstName: App.contact.ContactIndividualEntity.firstName,\n familyName: App.contact.ContactIndividualEntity.familyName,\n dob: null,\n languageCode: null,\n genderCode: null,\n titleCode: null,\n conieID: App.contact.ContactIndividualEntity.conieID\n };\n\n function setUser() {\n if (App.contact.ContactIndividualEntity.dob) {\n vm.sideIndividu.dob = new Date(App.contact.ContactIndividualEntity.dob);\n }\n\n if (App.contact.ContactIndividualEntity.languageCode) {\n vm.sideIndividu.languageCode = App.contact.ContactIndividualEntity.languageCode.toString();\n }\n\n if (App.contact.ContactIndividualEntity.genderCode) {\n vm.sideIndividu.genderCode = App.contact.ContactIndividualEntity.genderCode.valueOf();\n }\n\n if (App.contact.ContactIndividualEntity.titleCode) {\n vm.sideIndividu.titleCode = App.contact.ContactIndividualEntity.titleCode.valueOf();\n }\n\n angular.forEach(vm.genders, function(value) {\n if (vm.sideIndividu.genderCode === value.genderCode) {\n vm.sideIndividu.genderDescription = value.description;\n }\n });\n\n var key = vm.sideIndividu.titleCode;\n var gender = vm.sideIndividu.genderCode;\n var language = $localStorage['locale'];\n if (App.titles.map[key] && App.titles.map[key][gender] && App.titles.map[key][gender][language]) {\n vm.sideIndividu.titleDescription = App.titles.map[key][gender][language].salutation;\n }\n\n }\n\n setUser();\n\n vm.sideTitles = function() {\n var titles = [];\n var gender = vm.sideIndividu.genderCode;\n var language = vm.sideIndividu.languageCode;\n\n for (var key in App.titles.map) {\n if (App.titles.map[key] && App.titles.map[key][gender] && App.titles.map[key][gender][language]) {\n titles.push(App.titles.map[key][gender][language]);\n }\n }\n\n return titles;\n }\n\n vm.editIndividu = function() {\n Relen.updateIndividual(angular.copy(vm.sideIndividu)).then(function() {\n App.refreshContact().then(function() {\n getGenderslocal();\n toastr.success(t('my_data_contact_successful_update'));\n loadTouchpoints();\n });\n });\n }\n\n vm.reltpCodes = [];\n vm.createSideTouchpoint = function() {\n vm.sideTouchpoint = {\n reltpSubCode: '',\n reltpStatusCode: 'V',\n ContactAddress: {\n countryCode: 'BE'\n }\n };\n };\n\n vm.getTouchpointForm = function(tp) {\n var directory = 'app/main/data/forms/';\n var file = 'post';\n vm.sideTouchpointLabel = null;\n if (tp) {\n var reltpCode = tp.reltpCode;\n if (angular.isObject(reltpCode)) {\n reltpCode = reltpCode.valueOf();\n }\n\n switch (reltpCode) {\n case 'POST':\n file = 'post';\n break;\n case 'EMAIL':\n vm.sideTouchpointLabel = t('contacts_touchpoints_manage_touchpoint_email');\n file = 'default';\n break;\n case 'MOB':\n vm.sideTouchpointLabel = t('contacts_touchpoints_manage_touchpoint_mob');\n file = 'default';\n break;\n case 'PHONE':\n vm.sideTouchpointLabel = t('contacts_touchpoints_manage_touchpoint_phone');\n file = 'default';\n break;\n case 'FAX':\n vm.sideTouchpointLabel = t('contacts_touchpoints_manage_touchpoint_fax');\n file = 'default';\n break;\n default:\n vm.sideTouchpointLabel = t('contacts_touchpoints_manage_touchpoint_value');\n file = 'default';\n break;\n }\n }\n\n return directory + file + '.html';\n };\n\n vm.createTouchpoint = function() {\n var data = {};\n var method;\n if (vm.sideTouchpoint.reltpCode === 'POST') {\n data = {\n reltpSubCode: vm.sideTouchpoint.reltpSubCode,\n reltpCode: vm.sideTouchpoint.reltpCode,\n street: vm.sideTouchpoint.ContactAddress.street,\n streetHouseNumber: vm.sideTouchpoint.ContactAddress.streetHouseNumber,\n postalCode: vm.sideTouchpoint.ContactAddress.postalCode,\n city: vm.sideTouchpoint.ContactAddress.city,\n countryCode: vm.sideTouchpoint.ContactAddress.countryCode\n };\n\n method = 'addPostTouchpoint';\n\n if (vm.sideTouchpoint.ContactAddress.streetComplement) {\n data.streetComplement = vm.sideTouchpoint.ContactAddress.streetComplement;\n }\n } else {\n data = {\n value: vm.sideTouchpoint.value,\n reltpCode: vm.sideTouchpoint.reltpCode,\n reltpSubCode: vm.sideTouchpoint.reltpSubCode\n };\n\n method = 'addTouchpoint';\n }\n\n Relen[method](data).then(function() {\n App.refreshContact().then(function(){\n loadTouchpoints();\n });\n vm.sideTouchpoint = {};\n SidePanel.closeAll();\n });\n };\n\n vm.editTouchpoint = function() {\n var data = {};\n var method;\n\n if (vm.sideTouchpoint.reltpCode === 'POST') {\n data = {\n reltpID: vm.sideTouchpoint.reltpID,\n reltpSubCode: vm.sideTouchpoint.reltpSubCode,\n reltpCode: vm.sideTouchpoint.reltpCode,\n street: vm.sideTouchpoint.ContactAddress.street,\n streetHouseNumber: vm.sideTouchpoint.ContactAddress.streetHouseNumber,\n postalCode: vm.sideTouchpoint.ContactAddress.postalCode,\n city: vm.sideTouchpoint.ContactAddress.city,\n countryCode: vm.sideTouchpoint.ContactAddress.countryCode\n };\n\n method = 'updatePostTouchpoint';\n\n if (vm.sideTouchpoint.ContactAddress.streetComplement) {\n data.streetComplement = vm.sideTouchpoint.ContactAddress.streetComplement;\n }\n } else {\n data = {\n reltpID: vm.sideTouchpoint.reltpID,\n value: vm.sideTouchpoint.value,\n reltpCode: vm.sideTouchpoint.reltpCode,\n reltpSubCode: vm.sideTouchpoint.reltpSubCode\n };\n\n method = 'updateTouchpoint';\n }\n\n Relen[method](data).then(function() {\n App.refreshContact().then(function(){\n loadTouchpoints();\n vm.sideTouchpoint = {};\n SidePanel.closeAll();\n });\n });\n };\n\n vm.showReltpSubCodes = function(reltpCode) {\n if (App.reltpCombinations.get(reltpCode)) {\n var combinations = App.reltpCombinations.get(reltpCode).filter(function(val) {\n return val.tpSubCode !== '';\n });\n return combinations.length != 0;\n }\n\n return false;\n };\n\n vm.editSideTouchpoint = function editSideTouchpoint(tp) {\n vm.sideTouchpoint = angular.extend({}, tp);\n if (angular.isUndefined(vm.sideTouchpoint.reltpSubCode)) {\n vm.sideTouchpoint.reltpSubCode = '';\n } else {\n vm.sideTouchpoint.reltpSubCode = tp.reltpSubCode.toString();\n }\n vm.sideTouchpoint.reltpCode = vm.sideTouchpoint.reltpCode.valueOf();\n\n vm.sideTouchpoint.ContactAddress = angular.extend({}, tp.ContactAddress);\n\n if (tp.ContactAddress && tp.ContactAddress.hasOwnProperty('countryCode')) {\n vm.sideTouchpoint.ContactAddress.countryCode = tp.ContactAddress.countryCode.valueOf();\n }\n };\n\n vm.deleteTouchpoint = function deleteTouchpoint(tp) {\n var info = null;\n\n if (App.contact.ContactRelationTouchPoints.length === 1) {\n info = t('contacts_touchpoints_delete_last');\n }\n\n ConfirmationService.confirmRemove(\n t('contacts_touchpoints_delete_confirmation'),\n info\n ).then(function() {\n Relen.deleteTouchpoint(tp.reltpID).then(function() {\n App.refreshContact().then(function(){\n loadTouchpoints();\n });\n });\n })\n };\n\n function replaceByEmptyString(value) {\n if (value === null || angular.isUndefined(value) || !value) {\n value = '';\n }\n\n return value;\n }\n\n function street(tp) {\n if (!tp || !tp.ContactAddress) {\n return '';\n }\n var ca = tp.ContactAddress;\n return replaceByEmptyString(ca.street) + ' ' +\n replaceByEmptyString(ca.streetHouseNumber) +\n ((replaceByEmptyString(ca.streetComplement))?\n ' ' + replaceByEmptyString(ca.streetComplement):\n ''\n )\n }\n\n function city(tp) {\n if (!tp || !tp.ContactAddress) {\n return '';\n }\n var ca = tp.ContactAddress;\n\n var country = replaceByEmptyString(ca.countryCode);\n if (country !== '') {\n country = ca.countryCode['@description'];\n }\n\n return (replaceByEmptyString(ca.postalCode) + ' ' + replaceByEmptyString(ca.city) + ((ca.postalCode || ca.city)? ', ': '') + country).trim();\n }\n\n function address(tp) {\n if (!tp) {\n return '';\n }\n\n return [street(tp), city(tp)]\n .filter(function(str) { return str.trim() !== ''; })\n .join(', ');\n }\n\n vm.tracking = function() {\n $analytics.eventTrack('hit', { category: 'Company CTA', label: $localStorage['client'] });\n };\n\n var watcher = $rootScope.$on('languageChanged', function() {\n getGenderslocal();\n setUser();\n });\n\n $rootScope.$on('$destroy', function() {\n watcher();\n })\n\n\n});\n\n'use strict';\n\nangular.module('privacy')\n .config(function ($stateProvider) {\n $stateProvider.state('privacy.main.faq', {\n url: '/faq',\n templateUrl: 'app/main/faq/faq.html',\n controller: 'main_faq_FaqController',\n controllerAs: 'faq',\n resolve: {\n acl: function (Auth) {\n return Auth.checkAccessList('PAAS/Faq');\n }\n }\n });\n })\n .controller('main_faq_FaqController', function (\n acl, $state, $rootScope, $localStorage, Relen, $analytics, CustomElements\n ) {\n\n if (!acl) {\n return $state.go('privacy.main.data');\n }\n\n var vm = this;\n vm.tabs = [];\n vm.description = \"\";\n vm.title = \"\";\n\n function getFaqs() {\n CustomElements.getData().then(function(data) {\n if (data.hasOwnProperty('faq')) {\n if (data.faq.hasOwnProperty($localStorage['locale'])) {\n var value = angular.fromJson(data.faq[$localStorage['locale']]);\n if(value.length > 0) {\n angular.forEach(value, function(item) {\n item.title_tab = unescape(item.title);\n });\n vm.tabs = value;\n vm.title = unescape(value[0].title);\n vm.description = unescape(value[0].description);\n } else {\n vm.dashboards = [];\n }\n } else {\n vm.dashboards = [];\n }\n }\n });\n }\n \n getFaqs();\n\n vm.openTab = function(tab) {\n vm.title = unescape(tab.title);\n vm.description = unescape(tab.description);\n }\n\n var watcher = $rootScope.$on('languageChanged', function () {\n getFaqs();\n });\n\n $rootScope.$on('$destroy', function () {\n watcher();\n })\n\n vm.tracking = function () {\n $analytics.eventTrack('hit', {\n category: 'Company CTA',\n label: $localStorage['client']\n });\n };\n\n });\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.logout', {\n url: '/logout',\n params: {\n nextState: null,\n nextStateParams: null\n },\n templateUrl: 'app/login/logout/logout.html',\n controller: 'login_LogoutController',\n controllerAs: 'logout',\n resolve : {\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n})\n.controller('login_LogoutController', function() {});\n\n'use strict'\n\nangular.module('privacy')\n.directive('validationTooltip', function($compile) {\n return {\n restrict: 'A',\n scope: {\n form: '=validationTooltip'\n },\n link: function($scope, element) {\n var invalidWatch = $scope.$watch('form.$invalid', function(invalid) {\n element.prop('disabled', invalid);\n }, true);\n var errorsWatch = $scope.$watch('form.$error', function(errors) {\n validationTooltip(errors);\n }, true);\n\n $scope.$on('$destroy', function() {\n\n invalidWatch();\n errorsWatch();\n });\n\n function validationTooltip(errors) {\n var triangle = element.next('span.btn-attention[uib-tooltip]');\n\n if ($scope.form.$invalid) {\n // create or update triangle with errors in tooltip, but remove old triangles first\n if (triangle.length > 0) {\n triangle.remove();\n }\n\n triangle = angular.element('');\n triangle.attr('uib-tooltip', tooltipContent(errors));\n element.after($compile(triangle)($scope));\n } else if (triangle.length > 0) {\n // remove triangle if it exists\n triangle.remove();\n }\n }\n\n function tooltipContent(errorsByType) {\n var tooltips = [];\n\n for (var type in errorsByType) {\n if (errorsByType.hasOwnProperty(type)) {\n var errors = errorsByType[type];\n\n for (var i = 0; i < errors.length; i++) {\n var error = errors[i];\n element.parent('form').find('label[for=\"' + error['$name'] + '\"]').html()\n var label = (element.parent('form').find('label[for=\"' + error['$name'] + '\"]').html() || error['$name']);\n\n if (tooltips.indexOf(label) === -1) {\n tooltips.push(label);\n }\n }\n }\n }\n return tooltips.join(', ');\n }\n\n }\n };\n});\n\n'use strict';\n\nangular.module('privacy')\n .config(function ($stateProvider) {\n $stateProvider.state('privacy.codeCheck', {\n url: '/code/:token',\n params: {\n nextState: null,\n nextStateParams: null\n },\n templateUrl: 'app/login/codeCheck/codeCheck.html',\n controller: 'login_CodeController',\n controllerAs: 'code',\n resolve: {\n CUSTOMTRANSLATIONS: function (CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function (CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function (CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n })\n .controller('login_CodeController', function (\n $state, $stateParams, Auth, $location, t, $localStorage, toastr, $analytics,\n $sessionStorage, PRIVACYVERSION\n ) {\n if (angular.isDefined($sessionStorage['loged_in'])) {\n $state.go('privacy.main.data');\n }\n\n var vm = this;\n vm.data = \"\";\n vm.privacyVersion = PRIVACYVERSION;\n\n if (!$stateParams.hasOwnProperty('token')) {\n $state.go('privacy.notAuthorized');\n }\n\n if (angular.isUndefined($localStorage['client'])) {\n $state.go('privacy.login', {\n token: $stateParams.token\n });\n }\n\n vm.checkCode = function checkCode() {\n if (vm.data != \"\") {\n Auth.doLoginWithCode($stateParams.token, vm.data).then(function (data) {\n $analytics.eventTrack(\n 'hit', {\n category: 'Login CTA',\n label: $localStorage['client']\n }\n );\n\n if (data.token) {\n var searchParams = $location.search();\n if (searchParams.hasOwnProperty('language')) {\n t.setLanguage(searchParams.language);\n }\n $state.go('privacy.main.data');\n } else {\n $state.go('privacy.notAuthorized');\n }\n }).catch(function () {\n $state.go('privacy.notAuthorized');\n });\n } else {\n toastr.error(t('codecheck_please_fill_in_your_code'));\n }\n }\n\n vm.newCode = function () {\n Auth.getTokenInfo($stateParams.token);\n }\n });\n\n'use strict'\n\nangular.module('privacy')\n.service('Util',function(\n $sessionStorage, $q, $log, moment\n) {\n\n var vm = {};\n\n vm.createNotifier = function() {\n var notifier = {};\n notifier.listeners = {};\n\n var handle = 0;\n\n notifier.listen = function(listener) {\n if(!angular.isFunction(listener)) {\n throw new Error('notifier expects listener to be a function');\n }\n notifier.listeners[handle] = listener;\n return handle++;\n };\n\n notifier.detach = function(handle) {\n delete notifier[handle];\n };\n\n notifier.notify = function() {\n var args = Array.prototype.slice.call(arguments);\n Object.keys(notifier.listeners).forEach(function(handle) {\n notifier.listeners[handle].apply(null, args);\n });\n };\n\n return notifier;\n };\n\n vm.deepCompare = function(given,expected) {\n // leaf node\n if(!angular.isObject(given)) {\n return given === expected;\n }\n // expected leaf node but got object\n else if(!angular.isObject(expected)) {\n return false;\n }\n // recursively check all children\n else {\n return Object.keys(given).every(function(child) {\n return vm.deepCompare(given[child],expected[child]);\n });\n }\n };\n\n vm.createSessionCache = function(timeout, unit, cacheKey) {\n var cache = {};\n\n cache.store = function(result, meta) {\n // don't store an already cached result\n if(result.$cached) {\n return false;\n }\n $sessionStorage[cacheKey] = {\n result: result,\n when: moment(),\n meta: meta\n };\n return true;\n };\n\n cache.get = function(expectedMeta) {\n var stored = $sessionStorage[cacheKey];\n // check if there is something in the cache\n if(!stored) {\n $log.debug('cache[%s] miss', cacheKey);\n return false;\n }\n // check if the cached result is too old\n var when = moment(stored.when);\n var maxAge = moment().subtract(timeout, unit);\n if(when.diff(maxAge) < 0) {\n $log.debug('cache[%s] miss - age check failed', cacheKey);\n return false;\n }\n // check meta info if needed\n if(expectedMeta && !vm.deepCompare(stored.meta, expectedMeta)) {\n $log.debug('cache[%s] miss - meta check failed', cacheKey);\n return false;\n }\n $log.debug('cache[%s] hit', cacheKey);\n // mark the result as cached\n stored.result.$cached = true;\n // attach a resolved promise to the result\n stored.result.$promise = $q.resolve(stored.result);\n // return the result\n return stored.result;\n };\n\n return cache;\n };\n\n vm.identityMap = function(arr) {\n var map = {};\n arr.forEach(function(el) {\n map[el] = el;\n });\n return map;\n };\n\n vm.mapArray = function(arr, key) {\n var map = {};\n arr.forEach(function(obj) {\n map[obj[key]] = obj;\n });\n return map;\n };\n\n vm.qReject = function(reason) {\n return $q.reject(reason);\n };\n\n vm.collectionIndexOnKey = function(collection, obj, key) {\n if(!angular.isArray(collection)) {\n return -1;\n }\n for(var idx = 0; idx < collection.length; idx++) {\n var o = collection[idx];\n if(o === obj || o[key] === obj[key]) {\n return idx;\n }\n }\n return -1;\n };\n\n return vm;\n\n});\n\n'use strict';\n\nangular.module('privacy')\n.service('Phone', function($window) {\n var vm = {};\n\n // make all methods from phoneformat.js available\n // https://github.com/albeebe/phoneformat.js\n [ 'countryForE164Number',\n 'formatNumberForMobileDialing',\n 'isValidNumber',\n 'formatE164',\n 'formatInternational',\n 'formatLocal',\n 'exampleLandlineNumber',\n 'exampleMobileNumber',\n 'cleanPhone',\n 'countryCodeToName'\n ].forEach(function(method) {\n vm[method] = $window[method];\n });\n\n return vm;\n})\n// make the service available in via $rootScope\n.run(function($rootScope, Phone) {\n $rootScope.PHONE = Phone;\n});\n\n'use strict';\n\nangular.module('privacy')\n.filter('jsonsoap',function($window) {\n function toJsonSoap(obj, pretty) {\n if (typeof obj === 'undefined') {\n return undefined;\n }\n if (!angular.isNumber(pretty)) {\n pretty = pretty ? 2 : null;\n }\n return $window.JSON.stringify(obj, jsonSoapReplacer, pretty);\n }\n function jsonSoapArgs(obj) {\n var args = Object.keys(obj)\n // keep only non-numeric keys\n .filter(function(k) {\n return isNaN(k);\n })\n // create \"@key = value\" pairs\n .map(function(k) {\n return k + ' = ' + obj[k];\n });\n return args.length > 0 ?\n ' [' + args.join(', ') + ']' : '';\n }\n function jsonSoapReplacer(_key, val) {\n if(\n val instanceof Number ||\n val instanceof String ||\n val instanceof Boolean\n ) {\n return '' + val.valueOf() + jsonSoapArgs(val);\n }\n return val;\n }\n\n return function(object, spacing) {\n if (angular.isUndefined(spacing)) {\n spacing = 2;\n }\n return toJsonSoap(object, spacing);\n };\n});\n\n'use strict'\n\nangular.module('privacy')\n.service('t',function(\n CustomTranslations, $interpolate, $localStorage, tmhDynamicLocale, API, $rootScope, $document\n) {\n\n function replaceAll(str, find, replace) {\n return str.replace(new RegExp(find, 'g'), replace);\n }\n\n function t(key, custom, variables) {\n if(key) {\n var translatedValue = \"\";\n if(\n key.indexOf('permission_channel.') !== -1 ||\n key.indexOf('permission_info_text.') !== -1 ||\n key.indexOf('permission_info_title.') !== -1 ||\n key.indexOf('permission_channel_icon.') !== -1\n ) {\n var text = key.split(\".\");\n translatedValue = CustomTranslations.getCustom(text[0], text[1]);\n } else {\n translatedValue = CustomTranslations.get(key, custom);\n }\n\n if(key.indexOf('permission_channel_icon.') !== -1) {\n return translatedValue;\n }\n\n\n if (translatedValue) {\n var translation = translatedValue[vm.language];\n if (translation === \"\" || angular.isUndefined(translation) || translation === null) {\n if(key.indexOf('permission_info_text.') !== -1) {\n var element = angular.element($document[0].getElementById(key) );\n element.addClass('hide');\n return '';\n }\n if(key.indexOf('permission_info_title.') !== -1) {\n return '';\n }\n return '[' + key + ']';\n\n }\n\n return $interpolate(translation)(variables);\n } else {\n if (variables) {\n key = replaceAll(key, '{', '{{');\n key = replaceAll(key, '}', '}}');\n key = $interpolate(key)(variables);\n }\n\n return '[' + key + ']';\n }\n }\n }\n\n var vm = t;\n\n vm.setLanguage = function(language) {\n vm.language = language;\n tmhDynamicLocale.set(language);\n $localStorage['locale'] = language;\n API.setLanguage(language).then(function() {\n $rootScope.$broadcast('languageChanged', language);\n });\n };\n\n if (!$localStorage['locale']) {\n vm.setLanguage('en');\n } else {\n vm.setLanguage($localStorage['locale']);\n }\n\n vm.getLanguages = function getLanguages() {\n return CustomTranslations.get('available_languages');\n };\n\n return vm;\n\n})\n.service('CustomTranslations', function($http, $localStorage) {\n var translations = {},\n customTranslations = {},\n combinedTranslations = {},\n vm = {};\n\n vm.promise = function() {\n return $http.get('translations.json').success(function(data) {\n translations = data;\n return translations;\n });\n };\n\n vm.promise2 = function promise2() {\n return $http.get('customizations/' + $localStorage['client'] + '.json').success(function(data) {\n if(data !== null) {\n customTranslations = data;\n return customTranslations;\n }\n });\n };\n\n vm.get = function get(key) {\n combinedTranslations = {};\n combinedTranslations = $.extend({},translations,customTranslations);\n\n if (combinedTranslations.hasOwnProperty(key)) {\n return combinedTranslations[key];\n }\n\n return false;\n }\n\n vm.getCustom = function getCustom(key, value) {\n combinedTranslations = {};\n combinedTranslations = $.extend({},translations,customTranslations);\n\n if (combinedTranslations.hasOwnProperty(key)) {\n if(combinedTranslations[key].hasOwnProperty(value)) {\n return combinedTranslations[key][value];\n }\n }\n\n return false;\n }\n\n return vm;\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('tk',function() {\n return {\n restrict: 'EA',\n replace: false,\n template: '{{vm.t(vm.key)}}',\n scope: {\n key: '@',\n tk: '@'\n },\n controller: function(t, $scope) {\n var vm = this;\n vm.t = t;\n vm.key = $scope.tk || $scope.key;\n },\n controllerAs: 'vm'\n };\n})\n.directive('langSwitch', function() {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'app/components/translation/lang-switch.html',\n controller: function(t, $scope) {\n var vm = this;\n vm.locale = t.language;\n vm.languages = t.getLanguages();\n vm.languagesCount = Object.keys(vm.languages).length;\n\n var languageWatch = $scope.$watch(function() {\n return t.language;\n }, function() {\n vm.languages = t.getLanguages();\n vm.locale = t.language;\n });\n\n $scope.$on('$destroy', function() {\n languageWatch();\n });\n\n vm.setLanguage = function setLanguage(loc) {\n t.setLanguage(loc);\n }\n },\n controllerAs: 'lang'\n };\n});\n\n(function() {\n angular\n .module('privacy')\n .directive('toggleside', toggleside);\n\n /** @ngInject */\n function toggleside($window, $timeout) {\n var directive = {\n link: link\n };\n return directive;\n\n /** @ngInject */\n function link() {\n angular.element('.js-toggle-nav').click(function(event) {\n event.preventDefault();\n angular.element('.js-module-nav').toggleClass('js-module-nav--toggle');\n angular.element('.js-module-content').toggleClass('js-module-content--toggle');\n $timeout(function() {\n angular.element($window).trigger('resize',true);\n }, 250);\n });\n\n angular.element('body').on('click','.js-module-subnav ul > li > a',function() {\n if ($window.innerWidth <= 1050) {\n angular.element('.js-module-nav').addClass('js-module-nav--toggle');\n angular.element('.js-module-content').addClass('js-module-content--toggle');\n $timeout(function() {\n angular.element($window).trigger('resize',true);\n }, 250);\n }\n });\n\n //angular.element($window).bind('resize', function() {\n $window.resizeEvt;\n angular.element($window).resize(function(event,doNotExecute) {\n\n if(doNotExecute){\n return false;\n }\n if ($window.resizeEvt) {\n $timeout.cancel($window.resizeEvt);\n }\n $window.resizeEvt = $timeout(function() {\n if ($window.innerWidth <= 1050) {\n angular.element('.js-module-nav').addClass('js-module-nav--toggle');\n angular.element('.js-module-content').addClass('js-module-content--toggle');\n angular.element($window).trigger('resize',true);\n }\n else {\n angular.element('.js-module-nav').removeClass('js-module-nav--toggle');\n angular.element('.js-module-content').removeClass('js-module-content--toggle');\n angular.element($window).trigger('resize',true);\n }\n }, 250);\n });\n //});\n }\n }\n})();\n\n'use strict'\n\nangular.module('privacy')\n.service('CustomElements', function($http, $q, $localStorage) {\n var customizations = {},\n vm = {};\n\n vm.promise = function() {\n return $http.get('customizations/'+ $localStorage['client'] +'.json').success(function(data) {\n if(data !== null) {\n if (angular.isDefined($localStorage['client'])) {\n if(angular.isDefined(data['icon'])) {\n var favicon = angular.element('link[rel=\"icon\"]');\n var pathImage = \"../../..\" + data['icon'];\n favicon.attr('href', pathImage);\n }\n if(angular.isDefined(data['icon_png'])) {\n var icon = angular.element('link[rel=\"apple-touch-icon\"]');\n var pathImage2 = \"../../..\" + data['icon_png'];\n icon.attr('type', 'image/png');\n icon.attr('href', pathImage2);\n }\n\n }\n customizations = data;\n return customizations;\n }\n });\n };\n\n vm.getData = function() {\n return $q.when(customizations);\n };\n\n //used for url\n vm.get = function get(key) {\n if (customizations.hasOwnProperty(key)) {\n return customizations[key];\n }\n return \"\";\n }\n\n return vm;\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('customstyle', function (CustomElements) {\n\treturn {\n\t\trestrict: 'A',\n link: function (scope, element, attrs) {\n if (angular.isDefined(attrs.elements)) {\n CustomElements.getData().then(function(data) {\n if(data) {\n var body = angular.element(document).find('body');\n body.css('background-color', data['main_background'] );\n var elements = angular.fromJson(attrs.elements);\n angular.forEach(elements, function(value, key){\n if (key === \"border-radius\" && data[value] !== '0') {\n if(data[value]) {\n element.css(key, '25px');\n element.css(\"border-style\", \"solid\");\n element.css(\"border-width\", 'thin');\n }\n } else {\n element.css(key, data[value]);\n }\n });\n }\n });\n }\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('linkfaqstyle', function (CustomElements) {\n return {\n restrict: 'A',\n scope: {\n code : '=',\n name : '='\n },\n link: function (scope, element) {\n compare();\n\n scope.$watch('name', function() {\n compare();\n });\n\n function compare() {\n if(scope.name === scope.code){\n element.css('color', 'red');\n } else {\n element.css('color', 'white');\n }\n CustomElements.getData().then(function(data) {\n if(data) {\n if(scope.name === scope.code){\n element.css('color', data['link_color']);\n } else {\n element.css('color', data['sidebar_color']);\n }\n }\n });\n }\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n .directive('linkstyle', function (CustomElements, $stateParams, $location) {\n return {\n restrict: 'A',\n scope: {\n elements: '='\n },\n link: function (scope, element) {\n compare();\n\n scope.$watch(function () {\n return $location.path();\n }, function () {\n compare();\n });\n\n function compare() {\n CustomElements.getData().then(function (data) {\n if (data) {\n if ($stateParams.hasOwnProperty('name')) {\n if (angular.equals($stateParams.name, scope.elements)) {\n element.css('color', data['link_color']);\n } else {\n element.css('color', data['sidebar_color']);\n }\n } else {\n if (scope.elements === true) {\n element.css('color', data['link_color']);\n } else {\n element.css('color', data['sidebar_color']);\n }\n }\n }\n });\n }\n }\n }\n });\n\n'use strict'\n\nangular.module('privacy')\n.factory('SidePanel',function(\n $timeout, $rootScope, $document\n) {\n var sides = {};\n var body = angular.element($document[0].body);\n\n var stateChange = $rootScope.$on('$stateChangeStart', closeAll);\n $rootScope.$on('$destroy', stateChange);\n\n function broadcastEvent(panel, isOpen) {\n $rootScope.$broadcast('sidepanel', {\n panel: panel,\n isOpen: isOpen\n });\n }\n\n function closeAll(panel) {\n for (var show in sides) {\n if (show !== panel) {\n sides[show] = false;\n broadcastEvent(show, false);\n }\n }\n\n closeBody();\n }\n\n function open(panel) {\n sides[panel] = true;\n broadcastEvent(panel, true);\n\n openBody();\n }\n\n function all() {\n return sides;\n }\n\n function close(panel) {\n sides[panel] = false;\n broadcastEvent(panel, false);\n\n closeBody();\n }\n\n function closeAllAndOpen(panel) {\n closeAll(panel);\n $timeout(function() {\n open(panel);\n }, 1);\n\n openBody();\n }\n\n function isOpen(panel) {\n return !!sides[panel];\n }\n\n function openBody() {\n body.removeClass('ng-pageslide-body-closed');\n body.addClass('ng-pageslide-body-open');\n }\n\n function closeBody() {\n body.removeClass('ng-pageslide-body-open');\n body.addClass('ng-pageslide-body-closed');\n }\n\n return {\n closeAll: closeAll,\n close: close,\n open: open,\n closeAllAndOpen: closeAllAndOpen,\n isOpen: isOpen,\n all: all\n };\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('openSide',function(\n SidePanel, Auth\n) {\n return {\n restrict: \"A\",\n scope: {\n panel: '@openSide',\n disabled: '=sideDisabled',\n aclmap: '@aclMap'\n },\n controller: openSidePanel\n };\n function openSidePanel($element, $scope) {\n function bindClick() {\n $element.on('click', function(){\n if ($scope.disabled !== true) {\n SidePanel.closeAllAndOpen($scope.panel);\n }\n });\n }\n\n if (angular.isDefined($scope.aclmap) && $scope.aclmap !== '') {\n Auth.checkAccessList($scope.aclmap).then(function(result) {\n if (result) {\n bindClick();\n }\n\n });\n } else {\n bindClick();\n }\n }\n})\n.directive('sidePanel',function(\n SidePanel\n) {\n return {\n restrict: \"E\",\n transclude: true,\n templateUrl: \"app/components/sidepanel/sidepanel.template.html\",\n scope: {\n panel: '@openBy',\n onOpen: '&',\n topVar: '@topVar'\n },\n controller: openSidePanelController\n };\n function openSidePanelController($scope) {\n $scope.$on('sidepanel', function(event, params) {\n if (params.panel === $scope.panel) {\n $scope.isOpen = params.isOpen;\n if ($scope.isOpen && $scope.onOpen) {\n if ($scope.onOpen) {\n $scope.onOpen();\n }\n }\n }\n });\n\n $scope.close = function() {\n SidePanel.closeAll();\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('socialentity', function (CustomElements) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty('social_show')){\n if(data['social_show'] === '0') {\n element.css(\"display\", \"none\");\n }\n }\n }\n });\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('resizeSidebar', function ($window) {\n return {\n restrict: 'A',\n link: function (scope) {\n var $bottomNav = angular.element('.js-bottom-nav'),\n $sidebar = angular.element('.js-outer-sidebar'),\n height = 0;\n\n checkSize();\n\n angular.element($window).bind('resize', function(){\n height = 0;\n checkSize();\n scope.$digest();\n });\n\n function checkSize() {\n if ($bottomNav.length > 0 && $sidebar.length > 0) {\n height = Math.floor($bottomNav.outerHeight(true)) + Math.floor($bottomNav.css('bottom').replace('px', ''));\n\n $sidebar.css('padding-bottom', height);\n } else {\n $sidebar.css('padding-bottom', '');\n }\n }\n }\n }\n});\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith#Polyfill\nif (!String.prototype.endsWith) {\n String.prototype.endsWith = function(searchString, position) {\n var subjectString = this.toString();\n if (!angular.isNumber(position) || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n position = subjectString.length;\n }\n position -= searchString.length;\n var lastIndex = subjectString.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n };\n}\n\n'use strict'\n\nangular.module('privacy')\n.directive('scroll', function ($window, $timeout) {\n return {\n restrict: 'A',\n link: function (scope) {\n var $submenu = angular.element('.js-module-subnav'),\n $content = angular.element('.js-module-subnav-content'),\n positionSubmenu = 0,\n positionContent = 0;\n\n function checkScroll() {\n var scrollTop = angular.element(window).scrollTop();\n if (scrollTop > positionSubmenu) {\n if (scrollTop > positionContent) {\n $submenu.addClass('absolute');\n $submenu.removeClass('fixed');\n } else {\n $submenu.addClass('fixed');\n $submenu.removeClass('absolute');\n }\n } else {\n $submenu.removeClass('fixed');\n $submenu.removeClass('absolute');\n }\n\n scope.$digest();\n }\n\n function setPosition() {\n $submenu.removeClass('fixed');\n $submenu.removeClass('absolute');\n\n positionSubmenu = $submenu.offset().top;\n positionContent = $content.offset().top + $content.outerHeight(true) - $submenu.outerHeight(true);\n\n checkScroll();\n }\n\n angular.element($window).bind('scroll', function(){\n checkScroll();\n });\n\n angular.element($window).bind('resize', function(){\n setPosition();\n });\n\n $timeout(function() {\n setPosition();\n }, 1000);\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('menu', function () {\n return {\n restrict: 'A',\n link: function (scope) {\n var $button = angular.element('.js-menu-button'),\n $body = angular.element('body');\n\n $button.bind('click', function() {\n $button.toggleClass('active');\n $body.toggleClass('active-mobile-menu');\n });\n\n scope.$on('$locationChangeSuccess', function() {\n $button.removeClass('active');\n $body.removeClass('active-mobile-menu');\n })\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('mydatabutton', function (CustomElements) {\n\treturn {\n\t\trestrict: 'A',\n link: function (scope, element) {\n CustomElements.getData().then(function(data) {\n if(data) {\n var showButton = false;\n if (\n angular.isDefined(data['modify_dob']) && data['modify_dob'] === '1' ||\n angular.isDefined(data['modify_firstname']) && data['modify_firstname'] === '1' ||\n angular.isDefined(data['modify_gender']) && data['modify_gender'] === '1' ||\n angular.isDefined(data['modify_language']) && data['modify_language'] === '1' ||\n angular.isDefined(data['modify_name']) && data['modify_name'] === '1' ||\n angular.isDefined(data['modify_title']) && data['modify_title'] === '1'\n ) {\n showButton = true\n }\n\n if(!showButton) {\n element.css(\"display\", \"none\");\n }\n }\n });\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('mydata', function (CustomElements) {\n\treturn {\n\t\trestrict: 'A',\n link: function (scope, element, attrs) {\n if (angular.isDefined(attrs.data)) {\n var elements = angular.fromJson(attrs.data);\n CustomElements.getData().then(function(data) {\n if(data) {\n angular.forEach(elements, function(value, key){\n if (data[key] === '1') {\n if (value === 'div') {\n element.css(\"display\", \"none\");\n }\n } else {\n if (value === 'input') {\n element.css(\"display\", \"none\");\n }\n }\n });\n }\n });\n }\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('matchHeight', function ($timeout) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n\n $timeout(function() {\n angular.element(element).find('.js-equal-height').matchHeight();\n }, 1100);\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.service('url',function(\n CustomElements\n) {\n\n function url(key) {\n if(key) {\n return CustomElements.get(key);\n } else {\n return '';\n }\n }\n\n var vm = url;\n return vm;\n\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('linkurl', function (CustomElements, $localStorage, $rootScope) {\n return {\n restrict: 'A',\n link: function (scope, element, attr) {\n\n function getUrl() {\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty(attr.urls)){\n element.attr(\"href\", data[attr.urls][$localStorage['locale']]);\n }\n }\n });\n }\n\n getUrl();\n\n var watcher = $rootScope.$on('languageChanged', function() {\n getUrl();\n });\n\n $rootScope.$on('$destroy', function() {\n watcher();\n })\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('customimage', function (CustomElements) {\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n if (angular.isDefined(attrs.elements)) {\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty(attrs.elements)) {\n if(data[attrs.elements] !== null) {\n while(data[attrs.elements].charAt(0) === '/')\n {\n data[attrs.elements] = data[attrs.elements].substr(1);\n }\n var imagePath = location.pathname + data[attrs.elements];\n attrs.$set(\"src\", imagePath);\n\n element.bind('load', function() {\n var $footer = angular.element('.js-footer'),\n $wrapper = angular.element('.js-module-content'),\n $bottomNav = angular.element('.js-bottom-nav'),\n $sidebar = angular.element('.js-outer-sidebar'),\n height = 0,\n heightSideBar = 0;\n\n if ($footer.length > 0 && $wrapper.length > 0) {\n height = $footer.outerHeight(true);\n $wrapper.css('padding-bottom', height);\n } else {\n $wrapper.css('padding-bottom', '');\n }\n\n if ($bottomNav.length > 0 && $sidebar.length > 0) {\n heightSideBar = $bottomNav.outerHeight(true);\n $sidebar.css('padding-bottom', heightSideBar);\n } else {\n $sidebar.css('padding-bottom', '');\n }\n\n });\n } else {\n element[0].classList.add(\"hidden\");\n }\n }\n }\n });\n }\n }\n }\n});\n\n angular\n .module('privacy')\n .filter('refList', refList);\n\n function refList() {\n return function (input, currentRef) {\n if (input.indexOf(currentRef) == -1) {\n input.push(currentRef);\n }\n return input;\n }\n }\n\n angular\n .module('privacy')\n .filter('padZeroes', padZeroesFilter);\n\n\n function padZeroesFilter() {\n return function (input, length) {\n var str = input + \"\";\n\n while (str.length < length)\n str = \"0\" + str;\n return str;\n }\n }\n\n angular\n .module('privacy')\n .filter('numberFormatted', numberFormattedFilter)\n .filter('euro', euroFilter);\n\n\n function euroFilter(numberFormattedFilter) {\n return function (input, hideZero, curSymbol, decPlaces, thouSep, decSep) {\n\n curSymbol = curSymbol || '€';\n hideZero = hideZero || false;\n\n var out = isNaN(input) || input === '' || input === null ? 0.0 : input;\n\n if (out === 0 && hideZero) return '-';\n var minus = input < 0;\n out = Math.abs(out);\n out = numberFormattedFilter(out, decPlaces, thouSep, decSep);\n\n if(minus){\n return \"-\" + curSymbol + out;\n }else{\n return curSymbol + out;\n }\n }\n }\n\n function numberFormattedFilter(numberFilter) {\n return function (input, decPlaces, thouSep, decSep) {\n\n decPlaces = decPlaces || 2;\n thouSep = thouSep || \".\";\n decSep = decSep || \",\";\n\n var out = isNaN(input) || input === '' || input === null ? 0.0 : input;\n\n var minus = input < 0;\n out = Math.abs(out);\n if (parseFloat(numberFilter(out,decPlaces)) == parseFloat(numberFilter(out, 4))) {\n out = numberFilter(out, decPlaces);\n } else {\n out = numberFilter(out, 4);\n }\n\n if(thouSep != \",\") out = out.replace(/\\,/g, \"T\");\n if(decSep != \".\") out = out.replace(/\\./g, \"D\");\n out = out.replace(/T/g, thouSep);\n out = out.replace(/D/g, decSep);\n\n if(minus){\n return \"-\" + out;\n }else{\n return out;\n }\n }\n\n }\n\n'use strict'\n\nangular.module('privacy')\n.directive('resizeFooter', function ($window, $timeout) {\n return {\n restrict: 'A',\n link: function (scope) {\n var $footer = angular.element('.js-footer'),\n $wrapper = angular.element('.js-module-content'),\n height = 0;\n\n\n $timeout(function() {\n checkSize();\n },250);\n\n angular.element($window).bind('resize', function(){\n height = 0;\n checkSize();\n scope.$digest();\n });\n\n function checkSize() {\n if ($footer.length > 0 && $wrapper.length > 0) {\n height = $footer.outerHeight(true);\n $wrapper.css('padding-bottom', height);\n } else {\n $wrapper.css('padding-bottom', '');\n }\n }\n }\n }\n});\n\n'use strict';\n\nvar loadedScripts = [];\n\nangular.module('privacy')\n.directive('dashboard',function(\n $document, $window\n) {\n return {\n restrict: 'A',\n scope: {\n code: '=dashboard',\n firstime: '=firstime'\n },\n replace : true,\n link: function($scope, element) {\n var $body = angular.element($document[0].body);\n var inlineScripts = [];\n\n function loadExternalScript(scriptTag) {\n if (loadedScripts.indexOf(scriptTag.src) === -1) {\n $.getScript(scriptTag.src, function() {\n loadInlineScripts();\n });\n loadedScripts.push(scriptTag.src);\n } else {\n loadInlineScripts();\n }\n }\n\n function loadInlineScripts() {\n for (var i = 0; i < inlineScripts.length; i++) {\n $body.append(inlineScripts[i]);\n }\n inlineScripts = [];\n }\n\n function loadDashboard() {\n if (!$scope.code) {\n return;\n }\n\n cleanUp(true);\n\n var elements = angular.element($scope.code);\n\n if (elements.length > 0) {\n var externalScript = false;\n for (var index = 0; index < elements.length; index++) {\n var el = elements[index];\n\n if (!$scope.firstime) {\n el.innerHTML = el.innerHTML.replace('google.charts.load(\"current\", {packages:[\\'corechart\\']});','');\n }\n\n if (el.tagName === 'SCRIPT' ) {\n if (el.hasAttribute('src')) {\n externalScript = el;\n } else {\n inlineScripts.push(el);\n }\n } else {\n element.empty();\n element.append(el);\n }\n }\n loadExternalScript(externalScript);\n }\n }\n\n var unbindWatch = $scope.$watch('code', loadDashboard);\n\n function cleanUp(empty) {\n\n if (empty) {\n element.empty();\n } else {\n unbindWatch();\n element.remove();\n }\n loadedScripts = [];\n\n angular.element('.block-ui-container').nextAll('script').remove();\n\n if (angular.isDefined($window.google) && angular.isDefined($window.google.charts)) {\n $window.google.charts = undefined;\n }\n }\n\n $scope.$on('$destroy', cleanUp);\n },\n controllerAs: 'vm'\n };\n})\n\n'use strict'\n\nangular.module('privacy')\n.directive('legendhide', function (CustomElements) {\n return {\n restrict: 'A',\n link: function (scope, element) {\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty('legend_permission_show')){\n if(data['legend_permission_show'] === '0') {\n element.css(\"display\", \"none\");\n }\n }\n }\n });\n }\n }\n});\n\n\n'use strict'\n\nangular.module('privacy')\n.directive('ctahide', function (CustomElements, $localStorage) {\n return {\n restrict: 'A',\n scope: {\n elements: '='\n },\n link: function (scope, element, attr) {\n CustomElements.getData().then(function(data) {\n if(data) {\n if(data.hasOwnProperty('cta_button_link') && data.hasOwnProperty('cta_show') ){\n if(data['cta_show'] !== '0') {\n if(data['cta_button_link'][$localStorage['locale']] === null && attr.ctatype === \"link\") {\n element.css(\"display\", \"none\");\n } else if(data['cta_button_link'][$localStorage['locale']] !== null && attr.ctatype === \"default\") {\n element.css(\"display\", \"none\");\n }\n } else {\n element.css(\"display\", \"none\");\n }\n }\n }\n });\n }\n }\n});\n\n'use strict'\n\nangular.module('privacy')\n.service('ConfirmationService',function(\n $uibModal, t\n) {\n\n var vm = {};\n\n vm.confirmRemove = function(question, info) {\n return $uibModal.open({\n templateUrl: 'app/components/confirmation/confirm-remove.html',\n controllerAs: 'confirmation',\n controller: function() {\n var vm = this;\n vm.question = question;\n\n if (angular.isDefined(info) && info) {\n vm.info = info;\n } else {\n vm.info = t('confirmation_confirm_remove_info');\n }\n }\n }).result;\n };\n\n return vm;\n\n});\n\n/*eslint-disable */\nvar SOAPClient = window.SOAPClient || {};\n// /*****************************************************************************\\\n\n// Javascript \"SOAP Client\" library\n\n// @version: 2.4 - 2007.12.21\n// @author: Matteo Casati - http://www.guru4.net/\n\n// \\*****************************************************************************/\n\n// function SOAPClientParameters()\n// {\n// var _pl = new Array();\n// this.add = function(name, value)\n// {\n// _pl[name] = value;\n// return this;\n// }\n// this.toXml = function()\n// {\n// var xml = \"\";\n// for(var p in _pl)\n// {\n// switch(typeof(_pl[p]))\n// {\n// case \"string\":\n// case \"number\":\n// case \"boolean\":\n// case \"object\":\n// xml += \"<\" + p + \">\" + SOAPClientParameters._serialize(_pl[p]) + \"\";\n// break;\n// default:\n// break;\n// }\n// }\n// return xml;\n// }\n// }\nSOAPClientParameters._serialize = function(o)\n{\n var s = \"\";\n switch(typeof(o))\n {\n case \"string\":\n s += o.replace(/&/g, \"&\").replace(//g, \">\"); break;\n case \"number\":\n case \"boolean\":\n s += o.toString(); break;\n case \"object\":\n // moment\n if(o == null) {\n }\n else if(o._isAMomentObject) {\n s += o.toISOString();\n }\n // Date\n else if(o.constructor.toString().indexOf(\"function Date()\") > -1)\n {\n var year = o.getFullYear().toString();\n var month = (o.getMonth() + 1).toString(); month = (month.length == 1) ? \"0\" + month : month;\n var date = o.getDate().toString(); date = (date.length == 1) ? \"0\" + date : date;\n var hours = o.getHours().toString(); hours = (hours.length == 1) ? \"0\" + hours : hours;\n var minutes = o.getMinutes().toString(); minutes = (minutes.length == 1) ? \"0\" + minutes : minutes;\n var seconds = o.getSeconds().toString(); seconds = (seconds.length == 1) ? \"0\" + seconds : seconds;\n var milliseconds = o.getMilliseconds().toString();\n var tzminutes = Math.abs(o.getTimezoneOffset());\n var tzhours = 0;\n while(tzminutes >= 60)\n {\n tzhours++;\n tzminutes -= 60;\n }\n tzminutes = (tzminutes.toString().length == 1) ? \"0\" + tzminutes.toString() : tzminutes.toString();\n tzhours = (tzhours.toString().length == 1) ? \"0\" + tzhours.toString() : tzhours.toString();\n var timezone = ((o.getTimezoneOffset() < 0) ? \"+\" : \"-\") + tzhours + \":\" + tzminutes;\n s += year + \"-\" + month + \"-\" + date + \"T\" + hours + \":\" + minutes + \":\" + seconds + \".\" + milliseconds + timezone;\n }\n // Array\n else if(o.constructor.toString().indexOf(\"function Array()\") > -1)\n {\n for(var p in o)\n {\n if(!isNaN(p)) // linear array\n {\n (/function\\s+(\\w*)\\s*\\(/ig).exec(o[p].constructor.toString());\n var type = RegExp.$1;\n switch(type)\n {\n case \"\":\n type = typeof(o[p]);\n case \"String\":\n type = \"string\"; break;\n case \"Number\":\n type = \"int\"; break;\n case \"Boolean\":\n type = \"bool\"; break;\n case \"Date\":\n type = \"DateTime\"; break;\n case \"Object\":\n if(o[p].hasOwnProperty(\"$tagName\")) {\n type = o[p].$tagName;\n\n if (o[p].hasOwnProperty('xmlValue') && Object.keys(o[p]).length === 2) {\n o[p] = o[p].xmlValue;\n }\n }\n break;\n }\n s += \"<\" + type + \">\" + SOAPClientParameters._serialize(o[p]) + \"\"\n }\n else // associative array\n s += \"<\" + p + \">\" + SOAPClientParameters._serialize(o[p]) + \"\"\n }\n }\n // Object or custom function\n else {\n for(var p in o) {\n // don't serialize junk\n if(/^[a-zA-Z_]/.test(p)) {\n // xsi:nil for null/undefined fields\n if(angular.isUndefined(o[p]) || o[p] === null) {\n s += \"<\" + p + \" xsi:nil=\\\"true\\\" />\";\n }\n else {\n s += \"<\" + p + \">\" + SOAPClientParameters._serialize(o[p]) + \"\";\n }\n }\n }\n }\n break;\n default:\n break; // throw new Error(500, \"SOAPClientParameters: type '\" + typeof(o) + \"' is not supported\");\n }\n return s;\n}\n\n// function SOAPClient() {}\n\n// SOAPClient.username = null;\n// SOAPClient.password = null;\n\n// SOAPClient.invoke = function(url, method, parameters, async, callback)\n// {\n// if(async)\n// SOAPClient._loadWsdl(url, method, parameters, async, callback);\n// else\n// return SOAPClient._loadWsdl(url, method, parameters, async, callback);\n// }\n\n// // private: wsdl cache\n// SOAPClient_cacheWsdl = new Array();\n\n// // private: invoke async\n// SOAPClient._loadWsdl = function(url, method, parameters, async, callback)\n// {\n// // load from cache?\n// var wsdl = SOAPClient_cacheWsdl[url];\n// if(wsdl + \"\" != \"\" && wsdl + \"\" != \"undefined\")\n// return SOAPClient._sendSoapRequest(url, method, parameters, async, callback, wsdl);\n// // get wsdl\n// var xmlHttp = SOAPClient._getXmlHttp();\n// xmlHttp.open(\"GET\", url + \"?wsdl\", async);\n// if(async)\n// {\n// xmlHttp.onreadystatechange = function()\n// {\n// if(xmlHttp.readyState == 4)\n// SOAPClient._onLoadWsdl(url, method, parameters, async, callback, xmlHttp);\n// }\n// }\n// xmlHttp.send(null);\n// if (!async)\n// return SOAPClient._onLoadWsdl(url, method, parameters, async, callback, xmlHttp);\n// }\n// SOAPClient._onLoadWsdl = function(url, method, parameters, async, callback, req)\n// {\n// var wsdl = req.responseXML;\n// SOAPClient_cacheWsdl[url] = wsdl; // save a copy in cache\n// return SOAPClient._sendSoapRequest(url, method, parameters, async, callback, wsdl);\n// }\n// SOAPClient._sendSoapRequest = function(url, method, parameters, async, callback, wsdl)\n// {\n// // get namespace\n// var ns = (wsdl.documentElement.attributes[\"targetNamespace\"] + \"\" == \"undefined\") ? wsdl.documentElement.attributes.getNamedItem(\"targetNamespace\").nodeValue : wsdl.documentElement.attributes[\"targetNamespace\"].value;\n// // build SOAP request\n// var sr =\n// \"\" +\n// \"\" +\n// \"\" +\n// \"<\" + method + \" xmlns=\\\"\" + ns + \"\\\">\" +\n// parameters.toXml() +\n// \"\";\n// // send request\n// var xmlHttp = SOAPClient._getXmlHttp();\n// if (SOAPClient.userName && SOAPClient.password){\n// xmlHttp.open(\"POST\", url, async, SOAPClient.userName, SOAPClient.password);\n// // Some WS implementations (i.e. BEA WebLogic Server 10.0 JAX-WS) don't support Challenge/Response HTTP BASIC, so we send authorization headers in the first request\n// xmlHttp.setRequestHeader(\"Authorization\", \"Basic \" + SOAPClient._toBase64(SOAPClient.userName + \":\" + SOAPClient.password));\n// }\n// else\n// xmlHttp.open(\"POST\", url, async);\n// var soapaction = ((ns.lastIndexOf(\"/\") != ns.length - 1) ? ns + \"/\" : ns) + method;\n// xmlHttp.setRequestHeader(\"SOAPAction\", soapaction);\n// xmlHttp.setRequestHeader(\"Content-Type\", \"text/xml; charset=utf-8\");\n// if(async)\n// {\n// xmlHttp.onreadystatechange = function()\n// {\n// if(xmlHttp.readyState == 4)\n// SOAPClient._onSendSoapRequest(method, async, callback, wsdl, xmlHttp);\n// }\n// }\n// xmlHttp.send(sr);\n// if (!async)\n// return SOAPClient._onSendSoapRequest(method, async, callback, wsdl, xmlHttp);\n// }\n\n// SOAPClient._onSendSoapRequest = function(method, async, callback, wsdl, req)\n// {\n// var o = null;\n// var nd = SOAPClient._getElementsByTagName(req.responseXML, method + \"Result\");\n// if(nd.length == 0)\n// nd = SOAPClient._getElementsByTagName(req.responseXML, \"return\"); // PHP web Service?\n// if(nd.length == 0)\n// {\n// if(req.responseXML.getElementsByTagName(\"faultcode\").length > 0)\n// {\n// if(async || callback)\n// o = new Error(500, req.responseXML.getElementsByTagName(\"faultstring\")[0].childNodes[0].nodeValue);\n// else\n// throw new Error(500, req.responseXML.getElementsByTagName(\"faultstring\")[0].childNodes[0].nodeValue);\n// }\n// }\n// else\n// o = SOAPClient._soapresult2object(nd[0], wsdl);\n// if(callback)\n// callback(o, req.responseXML);\n// if(!async)\n// return o;\n// }\n// SOAPClient._soapresult2object = function(node, wsdl)\n// {\n// var wsdlTypes = SOAPClient._getTypesFromWsdl(wsdl);\n// return SOAPClient._node2object(node, wsdlTypes);\n// }\nSOAPClient._nodeAttributes = function(node)\n{\n if(node.attributes && node.attributes.length > 0) {\n var obj = {};\n for(var i = 0; i < node.attributes.length; i++) {\n var attr = node.attributes.item(i);\n obj['@'+attr.name] = attr.value;\n }\n // special case: tag with xsi:nil\n if(node.attributes.length === 1 && obj['@xsi:nil'] === 'true') {\n return null;\n }\n return obj;\n }\n else {\n return null;\n }\n};\nSOAPClient._node2object = function(node, wsdlTypes)\n{\n var attributes = undefined;\n // null node\n if(node == null) {\n return null;\n }\n // text node\n if(node.nodeType == 3 || node.nodeType == 4) {\n return SOAPClient._extractValue(node, wsdlTypes);\n }\n // leaf node\n if (node.childNodes.length == 1 && (node.childNodes[0].nodeType == 3 || node.childNodes[0].nodeType == 4)) {\n var value = SOAPClient._node2object(node.childNodes[0], wsdlTypes);\n attributes = SOAPClient._nodeAttributes(node);\n if(attributes) {\n return angular.extend(new Object(value), attributes);\n }\n return value;\n }\n var isarray = SOAPClient._getTypeFromWsdl(node.nodeName, wsdlTypes).toLowerCase().indexOf(\"arrayof\") != -1;\n // object node\n if(!isarray)\n {\n var obj = null;\n if(node.hasChildNodes())\n obj = new Object();\n\n for(var i = 0; i < node.childNodes.length; i++)\n {\n var p = SOAPClient._node2object(node.childNodes[i], wsdlTypes);\n var cname = node.childNodes[i].nodeName;\n if (obj[cname]) {\n if (obj[cname] instanceof Array) {\n obj[cname].push(p);\n }\n else {\n obj[cname] = new Array(obj[cname]);\n obj[cname].push(p);\n }\n }\n else {\n obj[cname] = p;\n }\n }\n attributes = SOAPClient._nodeAttributes(node);\n if(attributes) {\n if(obj === null) {\n return attributes;\n }\n else {\n angular.extend(obj, attributes);\n }\n }\n return obj;\n }\n // list node\n else\n {\n // create node ref\n var l = new Array();\n for(var j = 0; j < node.childNodes.length; j++)\n l[l.length] = SOAPClient._node2object(node.childNodes[j], wsdlTypes);\n return l;\n }\n return null;\n}\nSOAPClient._extractValue = function(node, wsdlTypes)\n{\n var value = node.nodeValue;\n switch(SOAPClient._getTypeFromWsdl(node.parentNode.nodeName, wsdlTypes).toLowerCase())\n {\n default:\n case \"s:string\":\n return (value != null) ? value + \"\" : \"\";\n case \"s:boolean\":\n //-- API returns invalid WSDL type for 'creation' field\n if(node.parentNode.nodeName === 'creation') {\n var dt = moment(value);\n if(dt.isValid()) {\n return dt;\n }\n }\n\n //-- end of fix\n return (value + \"\" == \"true\" || value + \"\" == \"1\");\n case \"s:int\":\n case \"s:long\":\n return (value != null) ? parseInt(value + \"\", 10) : 0;\n case \"s:double\":\n return (value != null) ? parseFloat(value + \"\") : 0;\n case \"s:datetime\":\n if(value === null) {\n return null;\n }\n else {\n return moment(value);\n }\n //--OLD\n // if(value == null)\n // return null;\n // else\n // {\n // value = value + \"\";\n // value = value.substring(0, (value.lastIndexOf(\".\") == -1 ? value.length : value.lastIndexOf(\".\")));\n // value = value.replace(/T/gi,\" \");\n // value = value.replace(/-/gi,\"/\");\n // var d = new Date();\n // d.setTime(Date.parse(value));\n // return d;\n // }\n }\n}\n// SOAPClient._getTypesFromWsdl = function(wsdl)\n// {\n// var wsdlTypes = new Array();\n// // IE\n// var ell = wsdl.getElementsByTagName(\"s:element\");\n// var useNamedItem = true;\n// // MOZ\n// if(ell.length == 0)\n// {\n// ell = wsdl.getElementsByTagName(\"element\");\n// useNamedItem = false;\n// }\n// for(var i = 0; i < ell.length; i++)\n// {\n// if(useNamedItem)\n// {\n// if(ell[i].attributes.getNamedItem(\"name\") != null && ell[i].attributes.getNamedItem(\"type\") != null)\n// wsdlTypes[ell[i].attributes.getNamedItem(\"name\").nodeValue] = ell[i].attributes.getNamedItem(\"type\").nodeValue;\n// }\n// else\n// {\n// if(ell[i].attributes[\"name\"] != null && ell[i].attributes[\"type\"] != null)\n// wsdlTypes[ell[i].attributes[\"name\"].value] = ell[i].attributes[\"type\"].value;\n// }\n// }\n// return wsdlTypes;\n// }\n// SOAPClient._getTypeFromWsdl = function(elementname, wsdlTypes)\n// {\n// var type = wsdlTypes[elementname] + \"\";\n// return (type == \"undefined\") ? \"\" : type;\n// }\n// // private: utils\n// SOAPClient._getElementsByTagName = function(document, tagName)\n// {\n// try\n// {\n// // trying to get node omitting any namespaces (latest versions of MSXML.XMLDocument)\n// return document.selectNodes(\".//*[local-name()=\\\"\"+ tagName +\"\\\"]\");\n// }\n// catch (ex) {}\n// // old XML parser support\n// return document.getElementsByTagName(tagName);\n// }\n// // private: xmlhttp factory\n// SOAPClient._getXmlHttp = function()\n// {\n// try\n// {\n// if(window.XMLHttpRequest)\n// {\n// var req = new XMLHttpRequest();\n// // some versions of Moz do not support the readyState property and the onreadystate event so we patch it!\n// if(req.readyState == null)\n// {\n// req.readyState = 1;\n// req.addEventListener(\"load\",\n// function()\n// {\n// req.readyState = 4;\n// if(typeof req.onreadystatechange == \"function\")\n// req.onreadystatechange();\n// },\n// false);\n// }\n// return req;\n// }\n// if(window.ActiveXObject)\n// return new ActiveXObject(SOAPClient._getXmlHttpProgID());\n// }\n// catch (ex) {}\n// throw new Error(\"Your browser does not support XmlHttp objects\");\n// }\n// SOAPClient._getXmlHttpProgID = function()\n// {\n// if(SOAPClient._getXmlHttpProgID.progid)\n// return SOAPClient._getXmlHttpProgID.progid;\n// var progids = [\"Msxml2.XMLHTTP.5.0\", \"Msxml2.XMLHTTP.4.0\", \"MSXML2.XMLHTTP.3.0\", \"MSXML2.XMLHTTP\", \"Microsoft.XMLHTTP\"];\n// var o;\n// for(var i = 0; i < progids.length; i++)\n// {\n// try\n// {\n// o = new ActiveXObject(progids[i]);\n// return SOAPClient._getXmlHttpProgID.progid = progids[i];\n// }\n// catch (ex) {};\n// }\n// throw new Error(\"Could not find an installed XML parser\");\n// }\n\n// SOAPClient._toBase64 = function(input)\n// {\n// var keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n// var output = \"\";\n// var chr1, chr2, chr3;\n// var enc1, enc2, enc3, enc4;\n// var i = 0;\n\n// do {\n// chr1 = input.charCodeAt(i++);\n// chr2 = input.charCodeAt(i++);\n// chr3 = input.charCodeAt(i++);\n\n// enc1 = chr1 >> 2;\n// enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n// enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n// enc4 = chr3 & 63;\n\n// if (isNaN(chr2)) {\n// enc3 = enc4 = 64;\n// } else if (isNaN(chr3)) {\n// enc4 = 64;\n// }\n\n// output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +\n// keyStr.charAt(enc3) + keyStr.charAt(enc4);\n// } while (i < input.length);\n\n// return output;\n// }\n/*eslint-enable */\n\n'use strict'\n\nangular.module('privacy')\n .service('Relen', function (\n API\n ) {\n\n var vm = {};\n\n vm.getContact = function getContact() {\n return API.call('PaaSGetContact', {}, true).then(function (result) {\n return result.data;\n });\n };\n\n vm.updateIndividual = function updateIndividual(data) {\n return API.call('PaaSUpdateIndividual', {\n data: data\n }, {}, true);\n };\n\n vm.addTouchpoint = function addTouchpoint(data) {\n return API.call('PaaSAddTouchPoint', {\n data: data\n }, {}, true);\n };\n\n vm.addPostTouchpoint = function addPostTouchpoint(data) {\n return API.call('PaaSAddPOSTTouchPoint', {\n data: data\n }, {}, true);\n };\n\n vm.updateTouchpoint = function addTouchpoint(data) {\n return API.call('PaaSUpdateTouchPoint', {\n data: data\n }, {}, true);\n };\n\n vm.updatePostTouchpoint = function addPostTouchpoint(data) {\n return API.call('PaaSUpdatePOSTTouchPoint', {\n data: data\n }, {}, true);\n };\n\n vm.deleteTouchpoint = function deleteTouchpoint(reltpID) {\n return API.call('PaaSDeleteTouchPoint', {\n data: {\n reltpID: reltpID\n }\n }, {}, true);\n };\n\n vm.updatePermission = function updatePermission(data) {\n return API.call('PaaSUpdatePermission', {\n data: data\n }, {}, true);\n }\n\n vm.permissionTabOpened = function permissionsTabOpened() {\n return API.call('PaaSPermissionsTabOpened', {}, {}, true)\n }\n\n vm.faqs = function faqs() {\n return API.call('PaaSFAQs', {}, {}, true)\n }\n\n vm.faq = function faq(faqId) {\n return API.call('PaaSFAQ', {\n PaaSFAQInput: {\n faqID: faqId\n }\n }, {}, true);\n }\n\n vm.getAllPossiblePermissions = function (cmsName) {\n return API.call('PaaSGetAllPossiblePermissions', {\n cmsName: cmsName\n }, {}, true).then(function (result) {\n return result.data;\n });\n }\n\n vm.getURL = function getURL(data) {\n return API.call('PaaSGetURL_t', {\n data: data\n }, {}, true).then(function (result) {\n return result.data;\n }).catch(function (error) {\n return error;\n });\n }\n\n vm.getClient = function getClient() {\n return API.call('PaaSGetClient_t', {\n data: {\n application: 'Website'\n }\n }, {}, true).then(function (result) {\n return result.data;\n });\n }\n\n vm.paaSGetTab = function paaSGetTab(name) {\n return API.call('PaaSGetTab_t', {\n data: {\n tabName: name\n }\n }, {}, true);\n };\n\n\n return vm;\n\n });\n\n'use strict'\n\nangular.module('privacy')\n.service('Ref',function(\n API\n) {\n\n var vm = {};\n\n function getData(field) {\n return function(resp) {\n return resp.data[field];\n }\n\n }\n\n function getObjects(valueField, attributes, checkValueField) {\n\n return function(objects) {\n return objects.map(function(object) {\n var obj = {};\n obj[valueField] = object.valueOf();\n if (checkValueField && typeof obj[valueField] + \"\" != \"string\") {\n obj[valueField] = \"\";\n }\n attributes.forEach(function(attribute) {\n obj[attribute] = object['@'+attribute];\n });\n return obj;\n });\n };\n }\n\n function getObjectsFromArray(attributes) {\n return function(objects) {\n return objects.map(function(object) {\n var obj = {};\n attributes.forEach(function(attribute) {\n obj[attribute] = object['@'+attribute];\n });\n return obj;\n });\n };\n }\n\n\n vm.languages = function() {\n return API.call('PaaSRefLanguages')\n .then(getData('languageCodes'))\n .then(getObjects('languageCode', ['description', 'inGUIDropDown']))\n .then(function(data){\n var languages = [];\n for (var i = 0;i < data.length;i++) {\n if (data[i].inGUIDropDown == 'true') {\n languages.push(data[i]);\n }\n }\n return languages;\n });\n };\n\n vm.countries = function() {\n return API.call('PaaSRefCountries')\n .then(getData('countryCodes'))\n .then(getObjects('countryCode', ['description']));\n };\n\n vm.genders = function() {\n return API.call('PaaSRefGenders')\n .then(getData('genderCodes'))\n .then(getObjects('genderCode', ['description', 'inGUIDropDown']));\n };\n\n vm.titles = function() {\n return API.call('PaaSRefTitleCodes')\n .then(getData('titleCodes'))\n .then(getObjects('titleCode', [\n 'genderCode',\n 'languageCode',\n 'salutation'\n ]));\n };\n\n vm.reltpCombinations = function() {\n return API.call('PaaSRefReltpCombinations')\n .then(getData('reltpCombinations'))\n .then(getObjectsFromArray(['tpCode', 'tpCodeDescription', 'tpSubCode', 'tpSubCodeDescription']));\n };\n\n vm.reltpCodes = function() {\n return API.call('PaaSRefReltpCodes')\n .then(getData('reltpCodes'))\n .then(getObjects('reltpCode', ['description']));\n };\n\n vm.inOutCodes= function() {\n return API.call('PaaSRefInOutCodes')\n .then(getData('inOutCodes'))\n .then(getObjects('inOutCode', ['description']));\n };\n\n return vm;\n});\n\n'use strict'\n\nangular.module('privacy')\n.constant('LS_AUTH_USER','auth.user')\n.constant('SESSION_TIMEOUT',2*60*60*1000)\n.service('Auth',function(\n LS_AUTH_USER, SESSION_TIMEOUT,\n $q, $log, $timeout, $sessionStorage, moment, $location,\n API, Util, $filter, $localStorage, t, $window, toastr\n) {\n\n var vm = {};\n\n vm.user = undefined;\n\n function getExpiration() {\n var expiration = moment();\n expiration.add(SESSION_TIMEOUT);\n return expiration;\n }\n\n var sessionTimeoutNotifier = Util.createNotifier(1);\n vm.onSessionTimeout = function(fn) {\n sessionTimeoutNotifier.listen(fn);\n };\n var sessionTimeout = undefined;\n API.onAPICall(function(method) {\n if(sessionTimeout) {\n $timeout.cancel(sessionTimeout);\n }\n // notify all listeners after 2 hours\n sessionTimeout = $timeout(function() {\n sessionTimeoutNotifier.notify();\n },SESSION_TIMEOUT, false);\n // update the expiration date and store in sessionStorage\n if (method !== 'PaaSDoLoginWithToken_t') {\n if (!vm.user) {\n vm.user = {};\n }\n vm.user.validUntil = getExpiration();\n $sessionStorage[LS_AUTH_USER] = vm.user;\n }\n });\n\n function setLogin(data) {\n API.setToken(data.token);\n API.setPaaSToken(data.PaaSToken);\n\n if (angular.isDefined(data.AuthenticationString)) {\n API.setAuthenticationString(data.AuthenticationString);\n }\n\n t.setLanguage(data.languageCode);\n $localStorage['logoutURL'] = data.logoutURL;\n\n setAcl(data.ACL[\"AC\"]);\n\n data.validUntil = getExpiration();\n vm.user = data;\n\n $sessionStorage['loged_in'] = true;\n $sessionStorage[LS_AUTH_USER] = vm.user;\n\n return vm.user;\n }\n\n var acl = [];\n\n vm.getTokenInfo = function(token) {\n return API.tokenInfo(token).then(function(data) {\n t.setLanguage(data.languageCode);\n $localStorage['token'] = token;\n $localStorage['client'] = data.Client;\n toastr.success(data.AuthorizationMessage);\n return data.NeedsAutorizationCode;\n });\n }\n\n vm.doLogin = function(token) {\n return API.login(token).then(function(data) {\n return setLogin(data);\n });\n };\n\n vm.doLoginWithCode = function(token, code) {\n return API.loginWithCode(token, code).then(function(data) {\n return setLogin(data);\n });\n }\n\n vm.reLogin = function() {\n return API.login(API.getPaaSToken()).then(function(data) {\n return setLogin(data);\n });\n };\n\n vm.doLogout = function() {\n if(sessionTimeout) {\n $timeout.cancel(sessionTimeout);\n sessionTimeout = undefined;\n }\n API.setToken(undefined);\n API.setPaaSToken(undefined);\n //$localStorage.$reset();\n $sessionStorage.$reset();\n vm.user = undefined;\n acl = [];\n };\n\n vm.doLoginFromCache = function() {\n // fetch the user from cache\n var user = $sessionStorage[LS_AUTH_USER];\n // check if the user has expired\n if(\n user && user.validUntil &&\n moment.tz(user.validUntil, 'Europe/London')\n .diff(moment.tz('Europe/London')) > 0\n ) {\n $log.debug('login from cache');\n setLogin(user);\n return user;\n }\n return false;\n };\n\n function setAcl(list) {\n acl = list;\n }\n\n vm.checkAccessList = function(key) {\n return $filter('filter')(acl, {\n '@path': key,\n '@hasAccess': 'true'\n }, true).length;\n };\n\n return vm;\n\n});\n\n'use strict'\n\nangular.module('privacy')\n.service('App',function(\n $filter, $q, $log, $localStorage, $timeout, Ref, Util, t, Relen, $rootScope\n) {\n\n var vm = {};\n\n vm.contact = {};\n /**\n * An resources reference object provides following interface:\n * {\n * get(id) => retrieve the resource given an identifier\n * load() => load the values for the resource\n * map => mapped resource data\n * }\n *\n * @param group:string Ref[group] fetches the resources\n * @param refFn:function()=>Promise will return the collection of resources\n * @param mapper:function(collection)=>map mapping of ID => resource;\n * @param getter:function(map,id)=>resource retrieves resource given an ID\n */\n function refResource(group, refFn, mapper, getter) {\n\n var ref = {\n get: function(id) {\n if(!ref.map) {\n throw new Error(group + ' resource is not initialized yet');\n }\n return getter(ref.map, id);\n },\n options: function(id) {\n if(!ref.map) {\n throw new Error(group + ' resource is not initialized yet');\n }\n\n var selectable = $filter('filter')($filter('toArray')(ref.map), {inGUIDropDown: true});\n var thisRef = getter(ref.map, id);\n\n if (angular.isDefined(thisRef) && angular.isDefined(thisRef.inGUIDropDown) && (!thisRef.inGUIDropDown || thisRef.inGUIDropDown === 'false')) {\n selectable.push(thisRef);\n }\n\n return selectable;\n }\n };\n\n ref.load = function() {\n var cacheKey = 'cache.app.' + group;\n var d = $q.defer();\n // load from cache\n var cached = $localStorage[cacheKey];\n if(cached) {\n // make it available\n ref.map = mapper(cached);\n // and resolve the promise\n d.resolve(ref.map);\n }\n // always fetch the resource from the server\n // but do so with a minimal delay\n $timeout(function() {\n refFn().then(function(collection) {\n if(angular.isUndefined(collection)) {\n throw new Error('refFn('+group+') => undefined');\n }\n // update the cached version\n $localStorage[cacheKey] = collection;\n ref.map = mapper(collection);\n if(cached) {\n // notify the update if already resolved\n d.notify(ref.map);\n }\n else {\n // resolve the promise\n d.resolve(ref.map);\n }\n },function(err) {\n if(cached) {\n $log.error(group + ' cache resolved, server failed');\n }\n else {\n d.reject(err);\n }\n });\n });\n return d.promise;\n };\n // return the interface\n return ref;\n }\n\n function refSimpleResource(group, item) {\n var mapper = function(collection) {\n return Util.mapArray(collection, item);\n };\n var getter = function(map, id) {\n return map[id];\n };\n return refResource(group, Ref[group], mapper, getter);\n }\n\n vm.genders = refSimpleResource('genders', 'genderCode');\n vm.countries = refSimpleResource('countries', 'countryCode');\n vm.languages = refSimpleResource('languages', 'languageCode');\n vm.reltpCodes = refSimpleResource('reltpCodes', 'reltpCode');\n vm.inOutCodes = refSimpleResource('inOutCodes', 'inOutCode');\n\n function combinationsMapper(combinations) {\n var map1 = {};\n combinations.forEach(function(combination) {\n if (angular.isUndefined(map1[combination.tpCode])) {\n map1[combination.tpCode] = new Array();\n }\n map1[combination.tpCode].push(combination);\n });\n return map1;\n }\n function defaultGetter(map, id) {\n return map[id];\n }\n\n vm.reltpCombinations = refResource('reltpCombinations', Ref.reltpCombinations, combinationsMapper, defaultGetter);\n\n\n function titleGetter(map, individual) {\n return map[individual.titleCode]\n [individual.genderCode]\n [individual.languageCode];\n }\n\n function titlesMapper(titles) {\n var map1 = {};\n titles.forEach(function(title) {\n if(!map1.hasOwnProperty(title.titleCode)) {\n map1[title.titleCode] = {};\n }\n var map2 = map1[title.titleCode];\n if(!map2.hasOwnProperty(title.genderCode)) {\n map2[title.genderCode] = {};\n }\n var map3 = map2[title.genderCode];\n map3[title.languageCode] = title;\n });\n return map1;\n }\n\n vm.titles = refResource('titles', Ref.titles, titlesMapper, titleGetter);\n\n var initialized = false;\n vm.deinitialize = function() {\n initialized = false;\n }\n\n vm.refreshContact = function refreshContact() {\n return Relen.getContact().then(function(data) {\n vm.contact = data;\n });\n };\n\n vm.initialize = function() {\n // only initialize once\n if (initialized === true) {\n return $q.resolve(vm);\n } else {\n // unset the initialized in case it was already\n initialized = false;\n }\n\n var refLoader = [\n vm.genders,\n vm.titles,\n vm.countries,\n vm.languages,\n vm.reltpCodes,\n vm.reltpCombinations,\n vm.inOutCodes\n ];\n\n // wait for all ref loaders to complete\n return $q.all(refLoader.map(function(ref) {\n return ref.load();\n })).then(function() {\n return vm.refreshContact();\n }).then(function() {\n\n // mark the app as loaded\n initialized = true;\n\n // resolve the App interface\n return vm;\n });\n };\n\n var watcher = $rootScope.$on('languageChanged', function() {\n vm.deinitialize();\n vm.initialize();\n });\n\n $rootScope.$on('$destroy', function() {\n watcher();\n })\n\n return vm;\n});\n\n'use strict'\n\nangular.module('privacy')\n .constant('SIGNAL_API_CALL_STARTED', 'SIGNAL_API_CALL_STARTED')\n .constant('SIGNAL_API_CALL_ENDED', 'SIGNAL_API_CALL_ENDED')\n .service('API', function (\n $soap, $log, $q, $filter, $rootScope,\n Util, toastr,\n SIGNAL_API_CALL_STARTED, SIGNAL_API_CALL_ENDED, $location\n ) {\n\n var baseUrl = 'https://api.mymip.be/API_2_latest/MipSoapAPI.asmx';\n\n if ($location.port() > 1000) {\n // If we use a port, it's local\n baseUrl = 'api/MipSoapAPI.asmx';\n } else if ($location.host() === 'devpaas.mymip.be' || $location.host() === 'developmentstratics.mypersonaldata.info' || $location.host() === 'development.mypersonaldata.info') {\n baseUrl = 'https://api.mymip.be/API_devl/MipSoapAPI.asmx';\n }\n\n var token = false;\n var PaaSToken = false;\n var AuthenticationString = false;\n\n var vm = {};\n\n var apiCallNotifier = Util.createNotifier();\n vm.onAPICall = function (fn) {\n return apiCallNotifier.listen(fn);\n };\n\n vm.tokenInfo = function tokenInfo(token) {\n return vm.call('PaaSGetTokenInfo_t', {\n PaaSToken: token\n }, {\n 1: 'warning.login.bad token'\n }).then(function (result) {\n return result.data\n });\n }\n\n vm.login = function login(token) {\n return vm.call('PaaSDoLoginWithToken_t', {\n PaaSToken: token\n }, {\n 1: 'warning.login.bad login'\n }).then(function (session) {\n session.data.PaaSToken = token;\n return session.data;\n });\n }\n\n vm.loginWithCode = function loginWithCode(token, code) {\n return vm.call('PaaSDoLoginWithToken_t', {\n PaaSToken: token,\n AuthenticationString: code\n }, {\n 1: 'warning.login.bad login'\n }).then(function (session) {\n session.data.PaaSToken = token;\n session.data.AuthenticationString = code;\n return session.data;\n });\n }\n\n function relogin(resume) {\n var d = $q.defer();\n\n vm.login(PaaSToken).then(function () {\n resume().then(d.resolve, d.reject);\n });\n\n return d.promise;\n }\n\n function keyForErrorCode(code, map) {\n if (code === -1) {\n return 'warning.unknown error';\n } else if (!map.hasOwnProperty(code)) {\n return 'warning.unmapped error';\n } else {\n return map[code];\n }\n }\n\n vm.setToken = function (newToken) {\n token = newToken;\n };\n\n vm.setPaaSToken = function (newToken) {\n PaaSToken = newToken;\n };\n\n vm.getPaaSToken = function () {\n return PaaSToken;\n };\n\n vm.setAuthenticationString = function (newString) {\n AuthenticationString = newString;\n };\n\n vm.getAuthenticationString = function () {\n return AuthenticationString;\n };\n\n\n vm.setLanguage = function setLanguage(language) {\n if (token) {\n return vm.call('setLanguage', {\n language: language\n });\n } else {\n return vm.noop();\n }\n }\n\n // remove attributes from primitive objects\n function unobjectifyPrimitives(data) {\n if (angular.isObject(data)) {\n var value = data.valueOf();\n if (!angular.isObject(value)) {\n return value;\n } else {\n Object.keys(data).forEach(function (key) {\n if (key === 'cmpeCode' && !data.hasOwnProperty('inOut') && data[key].hasOwnProperty('@inOut')) {\n data.inOut = data[key]['@inOut'];\n }\n data[key] = unobjectifyPrimitives(data[key]);\n });\n return data;\n }\n } else {\n return data;\n }\n }\n\n vm.call = function (method, data, errorCodeMappings, unobjectify, customXmlParser) {\n if (!errorCodeMappings) {\n errorCodeMappings = {\n 4: 'api_err_invalid-session'\n };\n }\n\n // methods who don't have to be appended by _t\n var excludedMethods = [\n 'PaaSDoLoginWithToken_t',\n 'PaaSGetTokenInfo_t',\n 'PaaSGetURL_t',\n 'PaaSGetClient_t'\n ];\n\n if (token && excludedMethods.indexOf(method) === -1) {\n if (method.substr(method.length - 2) != \"_t\") {\n method = method + '_t';\n }\n\n if (angular.isUndefined(data)) {\n data = {};\n }\n\n data.token = token;\n\n if (angular.isUndefined(data.data)) {\n data.data = {};\n }\n\n if (PaaSToken) {\n data.data.PaaSToken = PaaSToken;\n }\n\n if (AuthenticationString) {\n data.data.AuthenticationString = AuthenticationString\n }\n\n }\n\n if (method === 'PaaSGetURL_t') {\n data.token = 'URI'\n }\n\n var d = $q.defer();\n apiCallNotifier.notify(method, data);\n var apiCall = {\n method: method,\n data: data\n };\n // broadcast start event\n $rootScope.$broadcast(SIGNAL_API_CALL_STARTED, apiCall);\n $soap.post(baseUrl, method, data, customXmlParser)\n .then(function (resp) {\n // some older methods return no returnStatus\n if (!angular.isObject(resp.returnStatus) &&\n angular.isNumber(resp.errorNumber) &&\n angular.isString(resp.errorMessage)) {\n\n resp.returnStatus = {\n errorNumber: resp.errorNumber,\n errorMessage: resp.errorMessage\n };\n }\n\n // ensure the method returned a returnStatus\n if (!angular.isObject(resp.returnStatus)) {\n var err = {\n errorNumber: -1,\n errorMessage: 'Missing returnStatus',\n errorKey: 'api_invalid-response',\n method: method,\n input: data,\n output: resp\n };\n $log.error('INVALID RESPONSE', err);\n toastr.error(err.errorMessage);\n d.reject(err);\n }\n // invalid sessions => relogin\n else if (resp.returnStatus.errorNumber === 4) {\n return relogin(function () {\n return vm.call(method, data, errorCodeMappings);\n });\n }\n // check if errorNumber indicates something other than success\n else if (\n (!customXmlParser && resp.returnStatus.errorNumber !== 0) ||\n (customXmlParser && angular.isObject(resp.returnStatus.errorNumber) && resp.returnStatus.errorNumber['#text'] !== '0')\n ) {\n $log.error('API.' + method + ' => ' +\n '[' + resp.returnStatus.errorNumber + '] ' +\n resp.returnStatus.errorMessage);\n resp.returnStatus.errorKey = keyForErrorCode(\n resp.returnStatus.errorNumber, errorCodeMappings);\n\n if (\n resp.returnStatus.errorNumber !== 102 &&\n resp.returnStatus.errorNumber !== 103 &&\n resp.returnStatus.errorNumber !== 104\n ) {\n toastr.error(resp.returnStatus.errorMessage);\n }\n d.reject(resp.returnStatus);\n }\n // simply return the API's response\n else {\n var message = '';\n if (customXmlParser && angular.isObject(resp.returnStatus.errorMessage)) {\n message = resp.returnStatus.errorMessage['#text'];\n } else {\n message = resp.returnStatus.errorMessage;\n }\n $log.info('API.' + method + ' => ' + message);\n if (unobjectify) {\n unobjectifyPrimitives(resp);\n }\n d.resolve(resp);\n }\n }, function (err) {\n // something else went wrong, most likely bad input\n $log.error('INVALID API CALL', {\n method: method,\n data: data,\n error: err\n });\n toastr.error('[INVALID API CALL]');\n d.reject({\n errorNumber: -1,\n errorMessage: '[INVALID API CALL]'\n });\n });\n // broadcast end event\n d.promise.finally(function () {\n $rootScope.$broadcast(SIGNAL_API_CALL_ENDED, apiCall);\n });\n return d.promise;\n };\n\n vm.noop = function noop() {\n return $q.when();\n };\n\n return vm;\n\n }).filter('sanitize4Soap', function () {\n // this filter will remove all null values from te given object, soapjs could not handle null objects. If you preserveKey === true all null's will be replaced by empty strings, recursive is default true\n return function (input, preserveKey, recursive, filterArrays, filterCreation) {\n input = angular.extend({}, input);\n if (angular.isUndefined(recursive)) recursive = true;\n return delete_null_properties(input, recursive, filterArrays, filterCreation);\n\n function delete_null_properties(input, recursive, filterArrays, filterCreation) {\n for (var i in input) {\n if (input[i] === null) {\n if (preserveKey) {\n input[i] = '';\n } else {\n delete input[i];\n }\n } else if (filterArrays && angular.isArray(input[i]) && input[i].length == 0) {\n delete input[i];\n } else if (filterCreation && i === \"creation\" || i === \"created_by\") {\n delete input[i];\n } else if (recursive && angular.isObject(input[i])) {\n delete_null_properties(input[i], recursive);\n }\n }\n return input\n }\n }\n\n });\n\nangular.module('angularSoap', [])\n\n.factory('$soap', function($q, $log, $window, xmlToJson){\n return {\n post: function(url, action, params, customXmlParser){\n var deferred = $q.defer();\n\n //Create SOAPClientParameters\n var soapParams = new $window.SOAPClientParameters();\n for(var param in params){\n soapParams.add(param, params[param]);\n }\n\n //Create Callback\n var soapCallback = function(e, rawXml){\n if (e.constructor.toString().indexOf(\"function Error()\") != -1){\n deferred.reject(\"An error has occurred.\");\n } else if (angular.isObject(customXmlParser)) {\n var json = xmlToJson.parse(rawXml, customXmlParser);\n deferred.resolve(json['soap:Envelope']['soap:Body'][action + 'Response'][action + 'Result']);\n } else {\n deferred.resolve(e);\n }\n }\n\n $window.SOAPClient.invoke(url, action, soapParams, true, soapCallback);\n\n return deferred.promise;\n },\n setCredentials: function(username, password){\n $window.SOAPClient.username = username;\n $window.SOAPClient.password = password;\n }\n }\n})\n// Changes XML to JSON\n.factory('xmlToJson', function($document) {\n\n function tableToString(table) {\n var div = $document[0].createElement('div');\n div.appendChild(table);\n return div.innerHTML;\n }\n\n // Options can be an object with the key 'ignoreKeys'.\n // This key can be used to not parse some keys as json, but return them as a string.\n function parse(xml, options) {\n // Create the return object\n var obj = {};\n var ignoreKeys = [];\n\n if (angular.isDefined(options.ignoreKeys)) {\n ignoreKeys = options.ignoreKeys;\n }\n\n if (xml.nodeType == 1) { // element\n // do attributes\n if (xml.attributes.length > 0) {\n obj['@attributes'] = {};\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j);\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType == 3) { // text\n obj = xml.nodeValue;\n }\n\n // do children\n if (xml.hasChildNodes()) {\n for(var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i);\n var nodeName = item.nodeName;\n var doNotParseNode = (ignoreKeys.indexOf(nodeName) !== -1);\n\n if (typeof(obj[nodeName]) == 'undefined') {\n if (doNotParseNode) {\n obj[nodeName] = tableToString(item);\n } else {\n obj[nodeName] = parse(item, options);\n }\n } else {\n if (typeof(obj[nodeName].push) == 'undefined') {\n var old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n if (doNotParseNode) {\n obj[nodeName].push(tableToString(item));\n } else {\n obj[nodeName].push(parse(item, options));\n }\n }\n }\n }\n return obj;\n }\n\n return {\n parse: parse\n };\n});\n\n'use strict'\n\nangular.module('privacy')\n.directive('aclKey', function($log, Auth) {\n return {\n restrict: 'A',\n link: function($scope, element, attrs) {\n if (angular.isDefined(attrs.aclKey) && attrs.aclKey !== '') {\n if (!Auth.checkAccessList(attrs.aclKey)) {\n element.remove();\n }\n }\n }\n };\n})\n.directive('aclIf', function($log, Auth) {\n return {\n restrict: 'A',\n scope: {\n aclIf: '='\n },\n link: function($scope, element) {\n if (Auth.checkAccessList($scope.aclIf)) {\n element.remove();\n }\n }\n };\n});\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.paasLogin', {\n url: '/login',\n params: {\n nextState: null,\n nextStateParams: null\n },\n templateUrl: 'app/paasLogin/paasLogin.html',\n controller: 'login_PaasloginController',\n controllerAs: 'login',\n resolve: {\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n})\n.controller('login_PaasloginController', function(\n $state, Relen, $window,CustomElements, t, $rootScope, toastr\n) {\n var vm = this;\n vm.data = '';\n\n if (angular.isUndefined($rootScope.firstTimeDefaultlangue)) {\n var lang = CustomElements.get('default_language');\n t.setLanguage(lang);\n $rootScope.firstTimeDefaultlangue = false;\n }\n\n vm.checkEmail = function() {\n if (validateEmail(vm.data)) {\n var data = {\n reltpID: null,\n email: vm.data,\n sentByEmail: false,\n application: 'Website'\n };\n\n Relen.getURL(data).then(function(result) {\n if(angular.isDefined(result) && angular.isDefined(result.URL)) {\n $window.location.href = result.URL;\n }\n\n if(angular.isDefined(result) && angular.isDefined(result.errorNumber)) {\n if(result.errorNumber === 102 || result.errorNumber === 104) {\n $state.go('privacy.unknown');\n } else if(result.errorNumber === 103) {\n $state.go('privacy.notUnique');\n }\n }\n });\n } else {\n toastr.error(t('login_privacy_email_not_valid'));\n }\n }\n\n function validateEmail(email) {\n var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n});\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.first_step', {\n url: '/privacy-login',\n params: {\n nextState: null,\n nextStateParams: null\n },\n controller: 'login_FirstController',\n controllerAs: 'login',\n resolve: {\n CLEAR: function($localStorage) {\n $localStorage.$reset();\n }\n }\n });\n})\n.controller('login_FirstController', function(\n $state, Relen, $localStorage\n) {\n\n Relen.getClient().then(function(result){\n $localStorage['client'] = result.Client;\n $state.go('privacy.paasLogin');\n });\n\n});\n\n'use strict';\n\nangular.module('privacy')\n .config(function ($stateProvider) {\n $stateProvider.state('privacy.main', {\n abstract: true,\n url: '/main',\n templateUrl: 'app/main/main.html',\n controller: 'main_MainController',\n controllerAs: 'main',\n resolve: {\n USER: function (Auth, ErrorService) {\n if (Auth.user || Auth.doLoginFromCache()) {\n return Auth.user;\n }\n return ErrorService.notLoggedIn();\n },\n APP: function (App) {\n return App.initialize();\n },\n CUSTOMTRANSLATIONS: function (CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function (CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function (CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n })\n .controller('main_MainController', function (\n USER, t, PRIVACYVERSION, APP, $scope, Auth, $state, url, $window, $localStorage, CustomElements, $rootScope\n ) {\n var vm = this;\n\n angular.extend(vm, APP);\n\n var watcher = $scope.$watch(function () {\n return APP.contact;\n }, function (contact) {\n vm.contact = contact;\n\n if (vm.contact.hasOwnProperty('ContactIndividualEntity') && vm.contact.ContactIndividualEntity.hasOwnProperty('dob')) {\n vm.contact.ContactIndividualEntity.dobFormat = contact.ContactIndividualEntity.dob.format('DD/MM/YYYY');\n }\n }, true);\n\n vm.user = USER;\n vm.privacyVersion = PRIVACYVERSION;\n\n function getExtraTabs() {\n vm.extraTabs = [];\n CustomElements.getData().then(function (data) {\n if (data.hasOwnProperty('extra_tabs')) {\n if (data.extra_tabs.hasOwnProperty($localStorage['locale'])) {\n var value = angular.fromJson(data.extra_tabs[$localStorage['locale']]);\n angular.forEach(value, function (val) {\n if (val.hasOwnProperty('checkbox') && val.checkbox) {\n vm.extraTabs.push(val);\n }\n });\n }\n }\n });\n }\n\n getExtraTabs();\n\n vm.openTab = function openTab(tab) {\n $state.go('privacy.main.tab', {\n name: tab.name\n })\n };\n\n vm.logout = function logout() {\n var logoutUrl = url('logout_link');\n var useLink = url('logout_use_url');\n Auth.doLogout();\n if (useLink !== \"1\") {\n $state.go('privacy.logout');\n } else if (useLink === \"1\" && logoutUrl !== \"\") {\n $window.location.href = logoutUrl;\n } else {\n $state.go('privacy.logout');\n }\n };\n\n $scope.$on('$destroy', function () {\n watcher();\n watcherLang();\n })\n\n var watcherLang = $rootScope.$on('languageChanged', function () {\n getExtraTabs();\n });\n\n });\n\n'use strict';\n\nangular.module('privacy')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.login', {\n url: '/token/{token:.*}',\n params: {\n nextState: null,\n nextStateParams: null\n },\n controller: 'login_LoginController',\n controllerAs: 'login',\n resolve: {\n CLEAR: function($localStorage) {\n $localStorage.$reset();\n }\n }\n });\n})\n.run(function(Auth, $state, $log) {\n Auth.onSessionTimeout(function() {\n $log.debug('session timed out - going back to login');\n $state.go('privacy.login');\n });\n})\n.controller('login_LoginController', function(\n Auth, $state, $stateParams, $location, t\n) {\n if ($stateParams.hasOwnProperty('token')) {\n Auth.getTokenInfo($stateParams.token).then(function(result) {\n if(!result) {\n doLoginWithoutCode();\n } else {\n $state.go('privacy.codeCheck', {\n token: $stateParams.token\n });\n }\n }, function () {\n $state.go('privacy.notAuthorized');\n });\n } else {\n $state.go('privacy.notAuthorized');\n }\n\n function doLoginWithoutCode() {\n Auth.doLogin($stateParams.token).then(function(data) {\n if (data.token) {\n var searchParams = $location.search();\n if (searchParams.hasOwnProperty('language')) {\n t.setLanguage(searchParams.language);\n }\n $state.go('privacy.main.data');\n } else {\n $state.go('privacy.notAuthorized');\n }\n }).catch(function() {\n $state.go('privacy.notAuthorized');\n });\n }\n});\n\n'use strict';\n\nangular.module('privacy')\n.constant('ERROR_TYPE_STATE', 'error_type_state')\n.constant('ERROR_TYPE_UNKNOWN', 'error_type_unknown')\n.constant('ERROR_NOT_LOGGED_IN', 'error_not_logged_in')\n.constant('ERROR_NOT_AUTHORIZED', 'error_not_authorized')\n.service('ErrorService',function($q, ERROR_NOT_LOGGED_IN, ERROR_NOT_AUTHORIZED) {\n var vm = {};\n\n vm.notLoggedIn = function() {\n return $q.reject({\n error: ERROR_NOT_LOGGED_IN\n });\n };\n\n vm.notAuthorized = function(aclKey) {\n return $q.reject({\n error: ERROR_NOT_AUTHORIZED,\n aclKey: aclKey\n });\n };\n\n return vm;\n});\n\n'use strict'\n\nangular.module('privacy')\n.run(function(\n $rootScope, $log, $state,\n ERROR_TYPE_STATE, ERROR_NOT_LOGGED_IN, ERROR_NOT_AUTHORIZED\n) {\n // listen for state change problems\n var errorHandler = $rootScope.$on('$stateChangeError',function(\n evt, toState, toParams, fromState, fromParams, error\n ) {\n if(!angular.isObject(error)) {\n $log.error('invalid error passed:',error);\n error = {invalidError:error};\n }\n angular.extend(error, {\n type: ERROR_TYPE_STATE,\n toState:toState,\n toParams: toParams,\n fromState: fromState,\n fromParams: fromParams\n });\n $log.debug('$stateChangeError', error);\n if(error.error === ERROR_NOT_AUTHORIZED) {\n $state.go('privacy.notAuthorized', {\n aclKey: error.aclKey\n });\n } else if(toState.name !== 'privacy.error') {\n $log.debug('redirecting to privacy.error');\n $state.go('privacy.error',{error: error});\n } else if (error.error === ERROR_NOT_LOGGED_IN) {\n if(error.error === ERROR_NOT_LOGGED_IN) {\n $state.go('privacy.login', {\n nextState: toState,\n nextStateParams: toParams\n });\n }\n } else {\n $log.error('error state not reachable!');\n }\n });\n // cleanup $stateChangeError handler\n $rootScope.$on('$destroy', errorHandler);\n})\n\n'use strict';\n\nangular.module('privacy')\n.constant('LS_ERROR_PREVIOUS','error.previous')\n.config(function($stateProvider) {\n $stateProvider.state('privacy.error', {\n // url: '/error',\n params: {\n error: null\n },\n templateUrl: 'app/error/error.html',\n controller: 'error_ErrorController',\n controllerAs: 'error',\n resolve: {\n CLIENT: function($localStorage) {\n if(angular.isUndefined($localStorage['client'])) {\n $localStorage['client'] = 'default';\n }\n },\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n $stateProvider.state('privacy.notAuthorized', {\n url: '/not-authorized',\n templateUrl: 'app/error/not-authorized.html',\n controller: 'error_NotAuthorizedController',\n controllerAs: 'error',\n params: {\n aclKey: null\n },\n resolve: {\n CLIENT: function($localStorage) {\n if(angular.isUndefined($localStorage['client'])) {\n $localStorage['client'] = 'default';\n }\n },\n CUSTOMTRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise();\n },\n CUSTOM2TRANSLATIONS: function(CustomTranslations) {\n return CustomTranslations.promise2();\n },\n CUSTOMSTYLE: function(CustomElements) {\n return CustomElements.promise();\n }\n }\n });\n})\n.controller('error_ErrorController', function(\n $stateParams, $log, $state, $sessionStorage,\n LS_ERROR_PREVIOUS, $localStorage, Auth\n) {\n\n var vm = this;\n\n var error = $stateParams.error || $sessionStorage[LS_ERROR_PREVIOUS];\n $sessionStorage[LS_ERROR_PREVIOUS] = error;\n angular.extend(vm,error);\n\n vm.back = function() {\n $log.debug('back to previous state');\n $state.go(error.fromState.name, error.fromParams);\n };\n\n vm.retry = function() {\n $log.debug('retrying errornous state');\n $state.go(error.toState.name, error.toParams);\n };\n\n vm.newCode = function() {\n Auth.getTokenInfo($localStorage['token']).then(function() {\n $sessionStorage.$reset()\n $state.go('privacy.codeCheck', {\n token: $localStorage['token']\n })\n });\n }\n\n})\n.controller('error_NotAuthorizedController', function($stateParams, $localStorage, Auth, $state) {\n var vm = this;\n vm.aclKey = $stateParams.aclKey;\n\n vm.newCode = function() {\n Auth.getTokenInfo($localStorage['token']).then(function() {\n $state.go('privacy.codeCheck', {\n token: $localStorage['token']\n })\n });\n }\n});\n\n'use strict';\n\nangular.module('privacy')\n.run(function($rootScope, $log) {\n // state change debugging\n function stringifyState(state, stateArgs) {\n return (state.name || '') + ' ' +\n angular.toJson(stateArgs);\n }\n\n var successListener = $rootScope.$on('$stateChangeSuccess', function(_evt, to, toArgs, from, fromArgs) {\n $log.info('state change: %s => %s',\n stringifyState(from, fromArgs),\n stringifyState(to, toArgs)\n );\n });\n\n var notFoundListener = $rootScope.$on('$stateNotFound', function(evt, unfoundState, from, fromArgs) {\n $log.warn('state not found', {\n evt: evt,\n unfoundState: unfoundState,\n from: from,\n fromArgs: fromArgs\n });\n });\n\n var errorListener = $rootScope.$on('$stateChangeError', function(evt, to, toArgs, from, fromArgs, error) {\n $log.warn('state change error: ' + from.name + ' => ' + to.name, {\n evt: evt,\n to: to,\n toArgs: toArgs,\n from: from,\n fromArgs: fromArgs,\n error: error\n });\n });\n\n $rootScope.$on('$destroy', function() {\n errorListener();\n successListener();\n notFoundListener();\n });\n\n $log.debug('Privacy Platform initialized');\n});\n\n'use strict';\n\nangular.module('privacy').config(function(\n $stateProvider, $urlRouterProvider, $locationProvider\n) {\n\n $stateProvider.state('privacy',{\n abstract:true,\n template:'',\n controller: function($rootScope, t) {\n $rootScope.t = t;\n },\n controllerAs: 'privacy'\n });\n\n $urlRouterProvider.otherwise(function(injector, location) {\n var url = location.absUrl(),\n $window = injector.get('$window'),\n querystring = (url.indexOf('?') > 1)? url.slice(url.indexOf('?')) : undefined,\n redirect = '/not-authorized';\n\n if (querystring) {\n redirect += querystring;\n url = url.replace(querystring, '');\n // redirect with querystring behind the hashbang\n // remove if html 5 mode is enabled\n $window.location.href = url + '#' + redirect;\n }\n\n return redirect;\n\n });\n\n // cannot use html5mode + base tag for development\n $locationProvider.html5Mode(false);\n\n});\n\n\"use strict\";\n\nangular\n .module(\"privacy\")\n .constant(\"PRIVACYVERSION\", \"v1.0.18\")\n .config(function ($logProvider, tmhDynamicLocaleProvider) {\n // Enable log\n $logProvider.debugEnabled(true);\n tmhDynamicLocaleProvider.localeLocationPattern(\n \"i18n/angular-locale_{{locale}}.js\"\n );\n })\n .service(\"moment\", function ($window) {\n return $window.moment;\n });\n\nangular.module(\"privacy\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/error/error.html\",\"

{{t(\\'error.title\\')}}

{{ t(\\'error.text\\') }}

{{ t(\\'need_a_new_code_description\\') }} {{ t(\\'need_a_new_code_click_here\\') }}

\");\n$templateCache.put(\"app/error/not-authorized.html\",\"

{{ t(\\'error.notAuthorized.title\\') }}

{{ t(\\'error.notAuthorized.description\\') }}

{{ t(\\'error.notAuthorized.to {aclKey}\\', {aclKey: error.aclKey}) }}

{{ t(\\'need_a_new_code_description\\') }} {{ t(\\'need_a_new_code_click_here\\') }}

\");\n$templateCache.put(\"app/main/main.html\",\"
\");\n$templateCache.put(\"app/paasLogin/paasLogin.html\",\"

{{ t(\\'login_privacy_title\\') }}

\");\n$templateCache.put(\"app/components/confirmation/confirm-remove.html\",\"

{{confirmation.question}}

{{ confirmation.info }}

\");\n$templateCache.put(\"app/components/sidepanel/sidepanel.template.html\",\"
\");\n$templateCache.put(\"app/components/templates/timepicker.html\",\"
  
::
  
\");\n$templateCache.put(\"app/components/translation/lang-switch.html\",\"
  • 1\\\">{{ lang.languages[lang.locale] }}
  • \");\n$templateCache.put(\"app/login/codeCheck/codeCheck.html\",\"

    {{ t(\\'codeCheck_title\\') }}

    {{ t(\\'no_code_received_description\\') }} {{ t(\\'no_code_received_click_here\\') }}


    \");\n$templateCache.put(\"app/login/logout/logout.html\",\"

    {{ t(\\'logout_title\\') }}

    \");\n$templateCache.put(\"app/main/data/data.html\",\"

    {{ t(\\'main_data_my_data_title\\') }}

    {{ t(\\'main_data_personal_data_title\\') }}

    {{ t(\\'main_data_touchpoints_title\\') }}

    0\\\">
    {{ t(\\'main_data_touchpoints_touchpoint_type\\') }}{{ t(\\'main_data_touchpoints_touchpoint_subtype\\') }}{{ t(\\'main_data_touchpoints_touchpoint_data\\') }}
    {{ tp.reltpCode[\\'@description\\'] }}{{ tp.reltpSubCode[\\'@description\\'] }}{{ data.touchpointValue(tp) }}
    0\\\">

    {{ t(\\'main_data_touchpoints_add_new_title\\') }}

    {{ t(\\'contacts_touchpoints_add_touchpoint\\') }}

    {{ t(\\'main_data_social_entity_title\\') }}

    {{ t(\\'main_data_social_entity_company\\') }} {{ t(\\'main_data_social_entity_family\\') }}
    {{ main.contact.ContactSocialEntity.vat }}, {{ main.contact.ContactSocialEntity.legalFormCode[\\'@description\\'] }}, {{ main.contact.ContactSocialEntity.name }} {{ main.contact.ContactSocialEntity.name }}
    {{ t(\\'main_data_social_entity_change_data\\') }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/main/elements/default_sidebar.html\",\"
    \\\"\\\"
    \\\"\\\"
    \");\n$templateCache.put(\"app/main/elements/footer.html\",\"\");\n$templateCache.put(\"app/main/elements/header.html\",\"
    \");\n$templateCache.put(\"app/main/elements/logout_sidebar.html\",\"
    \\\"\\\"
    \\\"\\\"
    \");\n$templateCache.put(\"app/main/elements/old_topmenu.html\",\"
    \");\n$templateCache.put(\"app/main/elements/sidebar.html\",\"
    \");\n$templateCache.put(\"app/main/faq/faq.html\",\"

    {{ t(\\'main_data_faq_title\\') }}

    {{ (faq.title) }}

    {{ t(\\'faq.no dashboards found\\') }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/main/permissions/permissions.html\",\"

    {{ t(\\'main_data_personal_permissions_title\\') }}

    {{ t(\\'main_permissions_legend_title\\') }}

    • {{ t(\\'main_permissions_toggle_disabled\\') }}
    • {{ t(\\'main_permissions_toggle_unkown\\') }}
    • {{ t(\\'main_permissions_toggle_true\\') }}
    • {{ t(\\'main_permissions_toggle_false\\') }}

    {{ t(\\'main_data_personal_permissions_personal_data_title\\') }}

    • {{ prb.title }} {{ prb.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}
    • {{ cat.title }}

      {{ cat.description }}

      {{ cat.title_permission }} {{ cat.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}
      • {{ prb.title }} {{ prb.fallbackTitle }}
        • {{ t(pr.translation) }} {{ t(pr.translation) }}
    • {{ prb.title }} {{ prb.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/main/tab/tab.html\",\"

    {{ tab.tab.title }}

    {{ tab.tab.subtitle }}

    {{ tab.tab.titlelist }}

    {{ header.ColumnName }}
    {{ row[header.ColumnNumber] }}
    \");\n$templateCache.put(\"app/paasLogin/notUnique/notUnique.html\",\"

    {{ t(\\'error_email_login_not_unique_title\\') }}

    \");\n$templateCache.put(\"app/paasLogin/unknown/unknown.html\",\"

    {{ t(\\'error_email_login_not_found_title\\') }}

    \");\n$templateCache.put(\"app/main/data/forms/default.html\",\"
    \");\n$templateCache.put(\"app/main/data/forms/post.html\",\"
    \");\n$templateCache.put(\"app/main/data/forms/update-individu.html\",\"
    {{ data.sideIndividu.firstName }}
    {{ data.sideIndividu.familyName }}
    {{ data.sideIndividu.genderDescription }}
    {{ data.sideIndividu.titleDescription}}
    {{ main.languages.get(data.sideIndividu.languageCode).description }}
    {{ data.sideIndividu.dob | date: \\'dd/MM/yyyy\\' }}
    \");\n$templateCache.put(\"app/main/data/sidepanels/individu-edit.html\",\"

    {{ t(\\'contacts.touchpoints.manage.edit individual\\') }}


    \");\n$templateCache.put(\"app/main/data/sidepanels/touchpoint-create.html\",\"

    {{ t(\\'contacts_touchpoints_manage_touchpoint_add_touchpoint\\') }}

    \");\n$templateCache.put(\"app/main/data/sidepanels/touchpoint-edit.html\",\"

    {{ t(\\'contacts_touchpoints_manage_touchpoint_edit_touchpoint\\') }}

    \");\n$templateCache.put(\"app/error/error.html\",\"

    {{t(\\'error.title\\')}}

    {{ t(\\'error.text\\') }}

    {{ t(\\'need_a_new_code_description\\') }} {{ t(\\'need_a_new_code_click_here\\') }}

    \");\n$templateCache.put(\"app/error/not-authorized.html\",\"

    {{ t(\\'error.notAuthorized.title\\') }}

    {{ t(\\'error.notAuthorized.description\\') }}

    {{ t(\\'error.notAuthorized.to {aclKey}\\', {aclKey: error.aclKey}) }}

    {{ t(\\'need_a_new_code_description\\') }} {{ t(\\'need_a_new_code_click_here\\') }}

    \");\n$templateCache.put(\"app/main/main.html\",\"
    \");\n$templateCache.put(\"app/paasLogin/paasLogin.html\",\"

    {{ t(\\'login_privacy_title\\') }}

    \");\n$templateCache.put(\"app/components/confirmation/confirm-remove.html\",\"

    {{confirmation.question}}

    {{ confirmation.info }}

    \");\n$templateCache.put(\"app/components/sidepanel/sidepanel.template.html\",\"
    \");\n$templateCache.put(\"app/components/templates/timepicker.html\",\"
      
    ::
      
    \");\n$templateCache.put(\"app/login/codeCheck/codeCheck.html\",\"

    {{ t(\\'codeCheck_title\\') }}

    {{ t(\\'no_code_received_description\\') }} {{ t(\\'no_code_received_click_here\\') }}


    \");\n$templateCache.put(\"app/components/translation/lang-switch.html\",\"
  • 1\\\">{{ lang.languages[lang.locale] }}
  • \");\n$templateCache.put(\"app/login/logout/logout.html\",\"

    {{ t(\\'logout_title\\') }}

    \");\n$templateCache.put(\"app/main/elements/default_sidebar.html\",\"
    \\\"\\\"
    \\\"\\\"
    \");\n$templateCache.put(\"app/main/elements/footer.html\",\"\");\n$templateCache.put(\"app/main/elements/header.html\",\"
    \");\n$templateCache.put(\"app/main/elements/logout_sidebar.html\",\"
    \\\"\\\"
    \\\"\\\"
    \");\n$templateCache.put(\"app/main/elements/old_topmenu.html\",\"
    \");\n$templateCache.put(\"app/main/elements/sidebar.html\",\"
    \");\n$templateCache.put(\"app/main/data/data.html\",\"

    {{ t(\\'main_data_my_data_title\\') }}

    {{ t(\\'main_data_personal_data_title\\') }}

    {{ t(\\'main_data_touchpoints_title\\') }}

    0\\\">
    {{ t(\\'main_data_touchpoints_touchpoint_type\\') }}{{ t(\\'main_data_touchpoints_touchpoint_subtype\\') }}{{ t(\\'main_data_touchpoints_touchpoint_data\\') }}
    {{ tp.reltpCode[\\'@description\\'] }}{{ tp.reltpSubCode[\\'@description\\'] }}{{ data.touchpointValue(tp) }}
    0\\\">

    {{ t(\\'main_data_touchpoints_add_new_title\\') }}

    {{ t(\\'contacts_touchpoints_add_touchpoint\\') }}

    {{ t(\\'main_data_social_entity_title\\') }}

    {{ t(\\'main_data_social_entity_company\\') }} {{ t(\\'main_data_social_entity_family\\') }}
    {{ main.contact.ContactSocialEntity.vat }}, {{ main.contact.ContactSocialEntity.legalFormCode[\\'@description\\'] }}, {{ main.contact.ContactSocialEntity.name }} {{ main.contact.ContactSocialEntity.name }}
    {{ t(\\'main_data_social_entity_change_data\\') }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/main/faq/faq.html\",\"

    {{ t(\\'main_data_faq_title\\') }}

    {{ (faq.title) }}

    {{ t(\\'faq.no dashboards found\\') }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/main/tab/tab.html\",\"

    {{ tab.tab.title }}

    {{ tab.tab.subtitle }}

    {{ tab.tab.titlelist }}

    {{ header.ColumnName }}
    {{ row[header.ColumnNumber] }}
    \");\n$templateCache.put(\"app/main/permissions/permissions.html\",\"

    {{ t(\\'main_data_personal_permissions_title\\') }}

    {{ t(\\'main_permissions_legend_title\\') }}

    • {{ t(\\'main_permissions_toggle_disabled\\') }}
    • {{ t(\\'main_permissions_toggle_unkown\\') }}
    • {{ t(\\'main_permissions_toggle_true\\') }}
    • {{ t(\\'main_permissions_toggle_false\\') }}

    {{ t(\\'main_data_personal_permissions_personal_data_title\\') }}

    • {{ prb.title }} {{ prb.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}
    • {{ cat.title }}

      {{ cat.description }}

      {{ cat.title_permission }} {{ cat.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}
      • {{ prb.title }} {{ prb.fallbackTitle }}
        • {{ t(pr.translation) }} {{ t(pr.translation) }}
    • {{ prb.title }} {{ prb.fallbackTitle }}
      • {{ t(pr.translation) }} {{ t(pr.translation) }}

    {{ t(\\'cta_title\\') }}

    {{ t(\\'cta_button_text\\') }}

    {{ t(\\'cta_title\\') }}

    \");\n$templateCache.put(\"app/paasLogin/notUnique/notUnique.html\",\"

    {{ t(\\'error_email_login_not_unique_title\\') }}

    \");\n$templateCache.put(\"app/paasLogin/unknown/unknown.html\",\"

    {{ t(\\'error_email_login_not_found_title\\') }}

    \");\n$templateCache.put(\"app/main/data/forms/default.html\",\"
    \");\n$templateCache.put(\"app/main/data/forms/post.html\",\"
    \");\n$templateCache.put(\"app/main/data/forms/update-individu.html\",\"
    {{ data.sideIndividu.firstName }}
    {{ data.sideIndividu.familyName }}
    {{ data.sideIndividu.genderDescription }}
    {{ data.sideIndividu.titleDescription}}
    {{ main.languages.get(data.sideIndividu.languageCode).description }}
    {{ data.sideIndividu.dob | date: \\'dd/MM/yyyy\\' }}
    \");\n$templateCache.put(\"app/main/data/sidepanels/individu-edit.html\",\"

    {{ t(\\'contacts.touchpoints.manage.edit individual\\') }}


    \");\n$templateCache.put(\"app/main/data/sidepanels/touchpoint-create.html\",\"

    {{ t(\\'contacts_touchpoints_manage_touchpoint_add_touchpoint\\') }}

    \");\n$templateCache.put(\"app/main/data/sidepanels/touchpoint-edit.html\",\"

    {{ t(\\'contacts_touchpoints_manage_touchpoint_edit_touchpoint\\') }}

    \");}]);"],"sourceRoot":"/source/"}