package Ġcom . rod rig matrix . sig aa u fc . internal . work Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work . Coroutine Worker Ċ import Ġandroidx . work . Worker Parameters Ċ import Ġcom . rod rig matrix . sig aa u fc . R Ċ import Ġcom . rod rig matrix . sig aa u fc . data . network . Sig aa DataSource Ċ import Ġcom . rod rig matrix . sig aa u fc . data . repository . Sig aa Preferences Ċ import Ġcom . rod rig matrix . sig aa u fc . data . repository . Sig aa Repository Ċ import Ġcom . rod rig matrix . sig aa u fc . firebase . Firebase Events Ċ import Ġcom . rod rig matrix . sig aa u fc . firebase . NOT IFIC AC AO _ NOT A Ċ import Ġcom . rod rig matrix . sig aa u fc . firebase . NOT IFIC AC AO _ NOT IC IA Ċ import Ġcom . rod rig matrix . sig aa u fc . firebase . Remote Config Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . Result . Error Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . Result . Success Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . notification . send File Notification Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . notification . send Grade Notification Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . notification . send News Notification Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . notification . send Notification Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . util . get ClassName Without Code Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . util . getUn common Elements Ċ import Ġcom . rod rig matrix . sig aa u fc . internal . util . getUn common Gr ades Ċ import Ġcom . rod rig matrix . sig aa u fc . persistence . Student Dao Ċ import Ġcom . rod rig matrix . sig aa u fc . persistence . entity . Login Status . Companion . LOGIN _ ERROR Ċ import Ġcom . rod rig matrix . sig aa u fc . persistence . entity . Login Status . Companion . LOGIN _ V INC UL O Ċ import Ġcom . rod rig matrix . sig aa u fc . persistence . entity . Student Class Ċ import Ġcom . rod rig matrix . sig aa u fc . serializer . New Serializer Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . kode in . di . K ode in Aware Ċ import Ġorg . kode in . di . android . closest K ode in Ċ import Ġorg . kode in . di . generic . instance Ċ Ċ class ĠNotifications Coroutine Work ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġparams : ĠWorker Parameters Ċ ): ĠCor outine Worker ( context , Ġparams ), ĠK ode in Aware Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġk ode in Ġby Ġclosest K ode in ( context ) ĊĊĠĠĠ Ġprivate Ġval Ġsig aa DataSource : ĠSig aa DataSource Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġsig aa Repository : ĠSig aa Repository Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġsig aa Preferences : ĠSig aa Preferences Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġstudent Dao : ĠStudent Dao Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġserializer Ġ= ĠNew Serializer () ĊĠĠĠ Ġval Ġremote Config : ĠRemote Config Ġby Ġinstance () ĊĠĠĠ Ġprivate Ġval Ġevents : ĠFirebase Events Ġby Ġinstance () ĊĊĠĠĠ Ġprivate Ġfun Ġlogin (): ĠResult Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstudent Ġ= Ġsig aa Repository . get Student Async () Ġ?: Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠĠĠĠĠ Ġif ( student . login Ġ== Ġ"") Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsig aa DataSource . login ( student . login , Ġstudent . password ) ĊĠĠĠĠĠĠĠ Ġif ( result Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking Ġwhen ( result . data . login Status ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGIN _ V INC UL O Ġ-> Ġhandle V inc ulo () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGIN _ ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( result . data . login Message ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Al uno Ġe / ou Ġsen ha ĠnÃ£o Ġencontr ado " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . send Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Erro Ġao Ġef et uar Ġlogin Ġno Ġapp ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . wrong _ password _ alert ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . failure () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġhandle Classes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( result Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle V inc ulo (): ĠResult Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġsig aa DataSource . set V inc ulo ( sig aa Preferences . getLast V inc ulo () Ġ?: Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking Ġhandle Classes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . retry () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Classes (): ĠResult Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsig aa DataSource . redirect Home () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġsig aa DataSource . get Classes () ĊĠĠĠĠĠĠĠ Ġval Ġstudent Classes Ġ= Ġstudent Dao . get Classes () ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Classes . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Class And Check For Notifications ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . sync ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert Class ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig aa DataSource . get Classes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . failure () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Class And Check For Notifications ( student Class : ĠStudent Class ): ĠResult Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsig aa DataSource . setCurrent Class ( student Class ) ĊĠĠĠĠĠĠĠ Ġif ( result Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Files ( result . data , Ġstudent Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For Gr ades ( result . data , Ġstudent Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck For News ( result . data , Ġstudent Class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( result Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . failure () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For News ( res : ĠString , Ġstudent Class : ĠStudent Class ) Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcas hed News Ġ= Ġstudent Dao . getNew sWith Class Id Async ( student Class . tur ma Id ) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġsig aa DataSource . get News ( res , Ġstudent Class ) ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnews Ġ= Ġresponse . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! student Class . sync ed ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsig aa DataSource . get News Content ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . insert News ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew News Ġ= Ġnews . getUn common Elements ( cas hed News ). filter Ġ{ Ġit . requestId Ġ!= Ġ" fake " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( new News . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . add Event ( NOT IFIC AC AO _ NOT IC IA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! sig aa Preferences . get News Notification ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew News . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġstudent Class . name . get ClassName Without Code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . send News Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . news _ notification _ title , ĠclassName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . news _ notification _ body , Ġit . title , Ġit . content ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . news Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert News Content ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Gr ades ( res : ĠString , Ġstudent Class : ĠStudent Class ) Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġsig aa DataSource . get Gr ades ( res , Ġstudent Class ) ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠSuccess ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgr ades Ġ= Ġresponse . data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcas hed Gr ades Ġ= Ġstudent Dao . get Gr ades Async ( student Class . tur ma Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! student Class . sync ed ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgr ades . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert Grade ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Gr ades Ġ= Ġgr ades . getUn common Gr ades ( cas hed Gr ades ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! sig aa Preferences . get News Notification ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Gr ades . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġstudent Class . name . get ClassName Without Code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( it . content Ġ!= Ġ""){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . send Grade Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . grade _ notification _ title , ĠclassName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . grade _ notification _ body , Ġit . name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgr ades . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert Grade ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( response Ġis ĠError ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . exception . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Files ( res : ĠString , Ġstudent Class : ĠStudent Class ) Ġ= Ġrun Blocking ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġserializer . parse Files ( res , Ġstudent Class . tur ma Id ) ĊĠĠĠĠĠĠĠ Ġval Ġcas hed Files Ġ= Ġstudent Dao . get Files Async ( student Class . tur ma Id ) ĊĠĠĠĠĠĠĠ Ġif (! student Class . sync ed ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert File ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( files . size Ġ== Ġcas hed Files . size ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ run Blocking ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnew Files Ġ= Ġfiles . getUn common Elements ( cas hed Files ). filter Ġ{ Ġit . name Ġ!= Ġ" null " Ġ} ĊĠĠĠĠĠĠĠ Ġif ( new Files . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents . add Event ( NOT IFIC AC AO _ NOT A ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġnew Files . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Dao . upsert File ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! sig aa Preferences . get Files Notification ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġstudent Class . name . get ClassName Without Code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . send File Notification ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . file _ notification _ title , ĠclassName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . file _ notification _ body , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( sig aa Preferences . getAll Notification () Ġ|| Ġ! remote Config . is Notifications Enabled ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlogin () ĊĠĠĠ Ġ} Ċ Ċ }