package Ġcom . be gateway . mobile payments . sdk Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . annotation . Keep Ċ import Ġcom . be gateway . mobile payments . encryption . RSA Ċ import Ġcom . be gateway . mobile payments . models . google pay . android . response . Google Pay Response Ċ import Ġcom . be gateway . mobile payments . models . google pay . api . GP ayment Request Ċ import Ġcom . be gateway . mobile payments . models . google pay . api . G Request Ċ import Ġcom . be gateway . mobile payments . models . network . request . Order Ċ import Ġcom . be gateway . mobile payments . models . network . request . Payment Request Ċ import Ġcom . be gateway . mobile payments . models . network . request . Token Checkout Data Ċ import Ġcom . be gateway . mobile payments . models . network . response . Be Gateway Response Ċ import Ġcom . be gateway . mobile payments . models . network . response . Checkout With Token Data Ċ import Ġcom . be gateway . mobile payments . models . network . response . ResponseStatus Ċ import Ġcom . be gateway . mobile payments . models . settings . Payment Sdk Settings Ċ import Ġcom . be gateway . mobile payments . models . ui . Card Data Ċ import Ġcom . be gateway . mobile payments . network . Http Result Ċ import Ġcom . be gateway . mobile payments . network . Rest Ċ import Ġcom . be gateway . mobile payments . payment . google pay . Google Pay Helper Ċ import Ġcom . be gateway . mobile payments . ui . Checkout Activity Ċ import Ġcom . be gateway . mobile payments . ui . WebView Activity Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ @ Keep Ċ class ĠPayment Sdk Ġprivate Ġconstructor () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ [ Jvm Static ĠKeep ] ĊĠĠĠĠĠĠĠ Ġfun Ġget Card Form Intent ( context : ĠContext ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( context , ĠCheckout Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= ĠIntent . FLAG _ ACTIVITY _ CLEAR _ TOP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ [ Jvm Static ĠJ vm Over loads ĠKeep ] ĊĠĠĠĠĠĠĠ Ġfun Ġget Card Data Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Holder Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Month : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Year : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc vc Code : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠCard Data . get Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Holder Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Month , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry Year , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc vc Code ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ [ Jvm Static ĠJ vm Over loads ĠKeep ] ĊĠĠĠĠĠĠĠ Ġfun Ġget Card Data Intent With Expiry String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Holder Name : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry String : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc vc Code : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠCard Data . get Intent With Expiry String ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Number , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcard Holder Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpiry String , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc vc Code ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME OUT _ MILLISECONDS : ĠLong Ġ= Ġ 6 0 0 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAT TEMP T _ INTERVAL _ MILLISECONDS : ĠLong Ġ= Ġ 5 0 0 0 L ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠREQUEST _ WEB VIEW _ ACTIVITY Ġ= Ġ 1 2 3 4 ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġinstance Ġ= ĠPayment Sdk () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġvar Ġis Save Card : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġinternal Ġvar Ġcard Token : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġsettings : ĠPayment Sdk Settings ĊĠĠĠ Ġinternal Ġval Ġis Sdk Initialized : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcheckout With Token Data Ġ!= Ġnull ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrest : ĠRest ĊĠĠĠ Ġprivate Ġval Ġcallbacks : ĠArrayList < On Result Listener > Ġ= Ġarray ListOf () ĊĠĠĠ Ġprivate Ġvar Ġtoken : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġvar Ġcheckout With Token Data : ĠCheckout With Token Data ? Ġ= Ġnull ĊĊĠĠĠ Ġinternal Ġfun Ġinit Sdk ( ĊĠĠĠĠĠĠĠ Ġsettings : ĠPayment Sdk Settings , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset Values () ĊĠĠĠĠĠĠĠ Ġthis . settings Ġ= Ġsettings ĊĠĠĠĠĠĠĠ Ġrest Ġ= ĠRest ( settings . endpoint , Ġsettings . isDebug Mode , Ġsettings . publicKey ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġfun Ġadd CallBack Listener ( on Result Listener : ĠOn Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! callbacks . contains ( on Result Listener )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . add ( on Result Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġfun Ġremove Result Listener ( on Result Listener : ĠOn Result Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . remove ( on Result Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġsuspend Ġfun Ġget Payment Token ( ĊĠĠĠĠĠĠĠ Ġrequest Body : ĠToken Checkout Data ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings . return Url Ġ= Ġrequest Body . checkout . settings . return Url ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpayment Token Ġ= Ġrest . get Payment Token ( request Body )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġpayment Token . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheckout With Token Data Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Token Ready ( data . checkout . token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġon Not Success ( payment Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġsuspend Ġfun Ġpay With Card ( ĊĠĠĠĠĠĠĠ Ġrequest Body : ĠPayment Request , ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpay Ġ= Ġrest . pay With Card ( request Body )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġpay . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . status Ġ== ĠResponse Status . IN COMPLETE Ġ&& Ġdata . three DS Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= Ġdata . payment Token ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWebView Activity . get Three DS Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . three DS Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ WEB VIEW _ ACTIVITY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Payment Finished ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġon Not Success ( pay ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġfun Ġencrypt Data ( data : ĠString ) Ġ= ĠRSA . encrypt Data ( data , Ġsettings . publicKey ) ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġon Three D Secure Complete () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Payment Status ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġsuspend Ġfun Ġcheck Payment Status ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Payment Status ( token ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Keep ĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġpay With Google Pay ( data : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGoogle Pay Helper . get Google Pay Response ( data )?. let Ġ{ Ġg Pay Response Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpay Ġ= Ġrest . pay With Google Pay ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Request With Google Pay Token ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Pay Response ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Payment Finished ( pay . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġon Not Success ( pay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġon Payment Finished ( Be Gateway Response ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Request With Google Pay Token ( response : ĠGoogle Pay Response ): ĠG Payment Request Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠG Payment Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheckout With Token Data !!. checkout . token , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . apiVersion , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . apiVersion Minor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . payment Method Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Payment Status ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠstartTime Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġbe Gateway Response Ġ= ĠBe Gateway Response ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠResponse Status . TIME _ OUT , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Please Ġcheck Ġpayment Ġstatus " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġwhile Ġ( startTime Ġ< ĠTIME OUT _ MILLISECONDS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpayment Status Ġ= Ġrest . get Payment Status ( token )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe Gateway Response Ġ= Ġpayment Status . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( be Gateway Response . status Ġ!= ĠResponse Status . IN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Payment Finished ( payment Status . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Not Success ( payment Status ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( AT TEMP T _ INTERVAL _ MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ+= Ġ( System . currentTimeMillis () Ġ- ĠcurrentTime ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Payment Finished ( be Gateway Response ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġget Order Details (): ĠOrder ? Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġpay Ġ= Ġrest . get Payment Data ( checkout With Token Data !!. checkout . token )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpay . data . checkout . order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġ< T Ġ: ĠAny > Ġon Not Success ( result : ĠHttp Result < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Un Success Ġ-> Ġon Payment Finished ( result . be Gateway Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Error Ġ-> Ġon Payment Finished ( result . be Gateway Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Result . Success Ġ-> ĠTODO () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġon Payment Finished ( be Gateway Response : ĠBe Gateway Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcallbacks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Payment Finished ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbe Gateway Response Ġ= Ġbe Gateway Response , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Token Ġ= Ġcard Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreset Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġreset Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Save Card Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġcard Token Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtoken Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcheckout With Token Data Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }