/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 6 . Ġ ĠJo e Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . love jj fg . swiper ef resh recycle view Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Grid LayoutManager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . love jj fg . power recycle . Adapter Select Ċ import Ġcom . love jj fg . power recycle . OnLoad More Listener Ċ import Ġcom . love jj fg . power recycle . Select Power Adapter Ċ import Ġcom . love jj fg . power recycle . Spaces Item Decoration Ċ import Ġcom . love jj fg . power recycle . holder . Power Holder Ċ import Ġcom . love jj fg . power recycle . model . I Select Ċ import Ġcom . love jj fg . swiper ef resh recycle view . model . Test Bean Ċ import Ġkotlinx . android . synt hetic . main . activity _ list . recycle View Ċ import Ġkotlinx . android . synt hetic . main . activity _ list . refresh Ċ import Ġkotlinx . android . synt hetic . main . activity _ list . toolbar Ċ import Ġjava . util . ArrayList Ċ Ċ class ĠSecond Activity Ġ: ĠAppCompatActivity (), ĠOn Load More Listener Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġadapter : ĠSelect Power Adapter < Test Bean > ĊĠĠĠ Ġprivate Ġvar Ġrefresh Action : ĠRunnable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġload More Action : ĠRunnable ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġis Run : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġenable Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdecor : ĠSp aces Item Decoration ĊĠĠĠ Ġprivate Ġvar Ġflag : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ list ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠSelect Re cycle Adapter () ĊĠĠĠĠĠĠĠ Ġadapter . setOn Item Select Listener ( object Ġ: ĠAdapter Select . On ItemSelected Listener < Test Bean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Select Change ( holder : ĠPower Holder < Test Bean >, Ġposition : ĠInt , Ġis Selected : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" TAG ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on ItemSelected : Ġ$ position ::$ isSelected ;; total :" Ġ+ Ġadapter . selected Items ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" current ï¼ļ" Ġ+ Ġposition Ġ+ Ġ" ;; total :" Ġ+ Ġadapter . selected Items . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" on Nothing Selected : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" ä¸Ģä¸ª éĥ½ æ²¡ éĢī ä¸Ń ï¼ļ" Ġ+ Ġadapter . selected Items . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġadapter . setOn ItemClickListener Ġ{ Ġ_, Ġposition , Ġ_ Ġ-> Ġshow Toast (" click ï¼ļ $ position ") Ġ} ĊĠĠĠĠĠĠĠ Ġadapter . update Select Mode ( false ) ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠHashSet < Test Bean > Ġselected Beans Ġ= Ġadapter . getSelected Beans (); ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠGrid LayoutManager ( this , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġre cycle View . layout Manager Ġ= Ġmanager ĊĠĠĠĠĠĠĠ Ġ// recycle View . set Has Fixed Size ( true ); ĊĊĠĠĠĠĠĠĠ Ġdecor Ġ= ĠSp aces Item Decoration . Builder ( 5 0 , Ġ 1 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Top Bottom ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠ Ġre cycle View . addItem Decoration ( decor ) ĊĠĠĠĠĠĠĠ Ġre cycle View . item Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠ Ġre cycle View . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġrefresh . setOn Refresh Listener Ġ{ Ġre cycle View . post Delayed ( refresh Action , ĠDEFAULT _ TIME . to Long ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ//// åĪĿå§ĭåĮĸ ä¸Ģä¸ª Touch Helper Callback ĊĠĠĠĠĠĠĠ Ġ// Touch Helper Callback Ġcallback Ġ= Ġnew ĠTouch Helper Callback (); ĊĠĠĠĠĠĠĠ Ġ//// æ·»åĬł ä¸Ģä¸ª åĽŀè°ĥ ĊĠĠĠĠĠĠĠ Ġ// callback . setItem Drag Swipe CallBack ( adapter ); ĊĠĠĠĠĠĠĠ Ġ//// åĪĿå§ĭåĮĸ ä¸Ģä¸ª Item Touch Helper ĊĠĠĠĠĠĠĠ Ġ// Item Touch Helper Ġitem Touch Helper Ġ= Ġnew ĠItem Touch Helper ( callback ); ĊĠĠĠĠĠĠĠ Ġ//// åħ³èģĶ çĽ¸åħ³ çļĦ Re cycle View ĊĠĠĠĠĠĠĠ Ġ// item Touch Helper . attach To RecyclerView ( recycle View ); ĊĠĠĠĠĠĠĠ Ġadapter . set Load More Listener ( this ) ĊĠĠĠĠĠĠĠ Ġadapter . total Count Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġrefresh Action Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList < Test Bean >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( Test Bean (" è¿Ļæĺ¯ $ i ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set List ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġload More Action Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġ( Math . random () Ġ* Ġ 1 0 ). toInt () Ġ% Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarray List Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Test Bean (" ccc 1 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Test Bean (" ccc 2 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Test Bean (" ccc 3 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Test Bean (" ccc 4 ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( Test Bean (" ccc 5 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . append List ( array List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" run : Ġ æŃ£å¸¸ åĬłè½½ æĽ´å¤ļ ï¼ģï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . load More Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" run : Ġ åĬłè½½ å¤±è´¥ ï¼ģï¼ģ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Run Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrefresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġre cycle View . post Delayed ( refresh Action , ĠDEFAULT _ TIME . to Long ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Toast ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this . application Context , Ġmsg , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonLoad More () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Run ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" on Load More : æŃ£åľ¨ æī§è¡Į ï¼Į çĽ´æİ¥ è¿ĶåĽŀ ãĢĤãĢĤ ãĢĤ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . e (" TAG ", Ġ" on Load More : Ġ") ĊĠĠĠĠĠĠĠ Ġis Run Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġre cycle View . post Delayed ( load More Action , ĠDEFAULT _ TIME . to Long ()) Ċ // ĠĠĠĠĠĠĠ Ġadapter . load More Error () Ċ // ĠĠĠĠĠĠĠ Ġadapter . load More Error () ĊĠĠĠĠĠĠĠ Ġis Run Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . second , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . load _ more Ġ-> Ġadapter . set Total Count ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . own Ġ-> Ġadapter . set Load More View ( R . layout . layout _ foot _ self ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . pull _ refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Ġ= Ġ! enable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh . isEnabled Ġ= Ġenable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . select _ single Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setSelected Mode ( I Select . SINGLE _ MODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setCurrent Pos ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . select _ mul Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setSelected Mode ( I Select . MULTIPLE _ MODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setCurrent Pos ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . show edge Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View . removeItem Decoration ( decor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( flag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor Ġ= ĠSp aces Item Decoration . Builder ( 3 0 , Ġ 3 , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Top Bottom ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor Ġ= ĠSp aces Item Decoration . Builder ( 3 0 , Ġ 3 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Show Top Bottom ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflag Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cycle View . addItem Decoration ( decor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . normal Ġ-> ĠstartActivity ( Intent ( this , ĠNormal Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete _ select Ġ-> Ġadapter . delete Selected Items () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . revert _ select Ġ-> Ġadapter . revert All Selected () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . se let _ all Ġ-> Ġadapter . selectAll () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . un select _ all Ġ-> Ġadapter . reset All () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . default _ select Ġ-> Ġadapter . is Cancel Ab le Ġ= Ġ! adapter . is Cancel Ab le ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . show No Data Ġ-> Ġadapter . enable Load More (! adapter . is Enable Load More ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . error Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . layout _ error , Ġre cycle View , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf late . findViewById < View >( R . id . iv _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOnClickListener Ġ{ Ġ_ Ġ-> ĠLog . e (" TAG ", Ġ" on Options ItemSelected : Ġ çĤ¹åĩ» äºĨ ï¼ģï¼ģ ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setError View ( inflate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . show Error ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . empty Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinf late Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . layout _ empty , Ġre cycle View , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinf late . findViewById < View >( R . id . iv _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOnClickListener Ġ{ Ġ_ Ġ-> ĠLog . e (" TAG ", Ġ" on Options ItemSelected : Ġ çĤ¹åĩ» äºĨ ï¼ģï¼ģ ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set Empty View ( inflate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . show Empty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( adapter . is Select Mode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . clear Select List ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update Select Mode ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (" å·² æİ¨ åĩº éĢīæĭ© æ¨¡å¼ı ") ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDEFAULT _ TIME Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġ} Ċ } Ċ