package Ġcom . lag rad ost . cloud stream 3 . anime providers Ċ Ċ import Ġcom . lag rad ost . cloud stream 3 .* Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . Extractor Link Ċ import Ġcom . lag rad ost . cloud stream 3 . utils . get Quality FromName Ċ import Ġorg . js oup . J soup Ċ import Ġjava . util .* Ċ Ċ class ĠK awai ifu Provider Ġ: ĠMain API () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmain Url Ġ= Ġ" https :// k awai ifu . com " ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" K awai ifu " ĊĠĠĠ Ġoverride Ġval Ġhas Quick Search Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġval Ġhas Main Page Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġsupported Types Ġ= Ġset Of ( Tv Type . An ime , ĠT v Type . An ime Movie , ĠT v Type . ON A ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Main Page (): ĠHome Page Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= ĠArrayList < HomePage List >() ĊĠĠĠĠĠĠĠ Ġval Ġresp Ġ= Ġapp . get ( main Url ). text ĊĊĠĠĠĠĠĠĠ Ġval Ġsoup Ġ= ĠJ soup . parse ( resp ) ĊĊĠĠĠĠĠĠĠ Ġitems . add ( HomePage List (" Latest ĠUpdates ", Ġsoup . select (". today - update Ġ. item "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . select First (" img "). attr (" alt ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAn ime Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select First (" a "). attr (" href "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT v Type . An ime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select First (" img "). attr (" src "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select First (" h 4 Ġ> Ġa "). attr (" href "). split ("- "). last (). toInt OrNull (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . contains ("( D UB ) ")) ĠEnum Set . of ( D ub Status . D ub bed ) Ġelse ĠEnum Set . of ( D ub Status . Sub bed ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ Ġfor Ġ( section Ġin Ġsoup . select (". section ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġsection . select First (". title "). text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġan ime Ġ= Ġsection . select (". list - film Ġ> Ġ. item "). map Ġ{ Ġan i Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim Title Ġ= Ġan i . select First (" img "). attr (" alt ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAn ime Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanim Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan i . select First (" a "). attr (" href "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT v Type . An ime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan i . select First (" img "). attr (" src "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan i . select First (". vl - ch il - date "). text (). toInt OrNull (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anim Title . contains ("( D UB ) ")) ĠEnum Set . of ( D ub Status . D ub bed ) Ġelse ĠEnum Set . of ( D ub Status . Sub bed ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( HomePage List ( title , Ġan ime )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( items . size Ġ<= Ġ 0 ) Ġthrow ĠError Loading Exception () ĊĠĠĠĠĠĠĠ Ġreturn ĠHome Page Response ( items ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġsearch ( query : ĠString ): ĠArrayList < Search Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlink Ġ= Ġ"$ main Url / search - movie ? keyword =${ query }" ĊĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= Ġapp . get ( link ). text ĊĠĠĠĠĠĠĠ Ġval Ġsoup Ġ= ĠJ soup . parse ( html ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠArrayList ( soup . select (". item "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġit . select First (" h 4 Ġ> Ġa "). attr (" href "). split ("- "). last (). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . select First (" img "). attr (" alt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposter Ġ= Ġit . select First (" img "). attr (" src ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġit . select First (" a "). attr (" href ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAn ime Search Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT v Type . An ime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( title . contains ("( D UB ) ")) ĠEnum Set . of ( D ub Status . D ub bed ) Ġelse ĠEnum Set . of ( D ub Status . Sub bed ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( url : ĠString ): ĠLoad Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= Ġapp . get ( url ). text ĊĠĠĠĠĠĠĠ Ġval Ġsoup Ġ= ĠJ soup . parse ( html ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġsoup . select First (". title "). text () ĊĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġsoup . select (". table Ġa [ href * =\" / tag /\ "] "). map Ġ{ Ġtag Ġ-> Ġtag . text () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġsoup . select (". sub - desc Ġp ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . select (" strong "). isEmpty () Ġ&& Ġit . select (" iframe "). isEmpty () Ġ}. join ToString ("\ n ") Ġ{ Ġit . text () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġurl . split ("/ "). filter Ġ{ Ġit . contains ("- ") Ġ} [ 0 ]. split ("- ")[ 1 ]. toInt OrNull () ĊĊĠĠĠĠĠĠĠ Ġval Ġepisode s Link Ġ= Ġsoup . select First (" a [ href * =\" . html - episode \"] "). attr (" href ") Ġ?: Ġthrow ĠError Loading Exception (" Error Ġgetting Ġepisode Ġlist ") ĊĠĠĠĠĠĠĠ Ġval Ġepisode s Ġ= ĠJ soup . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp . get ( episodes Link ). text ĊĠĠĠĠĠĠĠ Ġ). select First (". list - ep "). select (" li "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAn ime Episode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . select First (" a "). attr (" href "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . text (). trim (). toInt OrNull () Ġ!= Ġnull ) Ġ" Episode Ġ${ it . text (). trim () }" Ġelse Ġit . text (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġposter Ġ= Ġsoup . select First (" a . thumb Ġ> Ġimg "). attr (" src ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnew An ime Load Response ( title , Ġurl , ĠT v Type . An ime ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . year Ġ= Ġyear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= Ġposter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Episode s ( D ub Status . Sub bed , Ġepisode s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot Ġ= Ġdescription ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tags Ġ= Ġtags ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Links ( ĊĠĠĠĠĠĠĠ Ġdata : ĠString , ĊĠĠĠĠĠĠĠ Ġis Cast ing : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġsubtitle Callback : Ġ( Subtitle File ) Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( Extractor Link ) Ġ-> ĠUnit ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhtml Source Ġ= Ġapp . get ( data ). text ĊĠĠĠĠĠĠĠ Ġval Ġsoup a Ġ= ĠJ soup . parse ( html Source ) ĊĊĠĠĠĠĠĠĠ Ġval Ġepisode Num Ġ= Ġif Ġ( data . contains (" ep =" )) Ġdata . split (" ep =" )[ 1 ]. split ("& ")[ 0 ]. toInt OrNull () Ġelse Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġservers Ġ= Ġsoup a . select (". list - server "). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġserver Name Ġ= Ġit . select First (". server - name "). text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġepisode s Ġ= Ġit . select (". list - ep Ġ> Ġli Ġ> Ġa "). map Ġ{ Ġepisode Ġ-> ĠPair ( episode . attr (" href "), Ġepisode . text ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġepisode Ġ= Ġif Ġ( episode Num Ġ== Ġnull ) Ġepisode s [ 0 ] Ġelse Ġepisode s . map NotNull Ġ{ Ġep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( if Ġ( ep . first . contains (" ep =" )) Ġep . first . split (" ep =" )[ 1 ]. split ("& ")[ 0 ]. toInt OrNull () Ġelse Ġnull ) Ġ== Ġepisode Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġep ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( server Name , Ġepisode ) ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . second . first Ġ== Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġsoup a . select (" video Ġ> Ġsource ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsource Ġ-> ĠPair ( source . attr (" src "), Ġsource . attr (" data - quality ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( it . first , Ġsources , Ġit . second . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhtml Ġ= Ġapp . get ( it . second . first ). text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsoup Ġ= ĠJ soup . parse ( html ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Ġ= Ġsoup . select (" video Ġ> Ġsource ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġsource Ġ-> ĠPair ( source . attr (" src "), Ġsource . attr (" data - quality ")) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( it . first , Ġsources , Ġit . second . second ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġservers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . second . forEach Ġ{ Ġsource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExtract or Link ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" K awai ifu ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . first } Ġ- Ġ${ source . second }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Quality FromName ( source . second ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . first . contains (". m 3 u ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ