/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ċ Ġ* Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ċ Ġ* Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe Ċ Ġ* ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . store . dao . atom Ċ Ċ import Ġcom . tencent . devops . common . api . util . UUID Util Ċ import Ġcom . tencent . devops . model . store . tables . T Atom Ċ import Ġcom . tencent . devops . model . store . tables . T Atom Env Info Ċ import Ġcom . tencent . devops . model . store . tables . T Store Project Rel Ċ import Ġcom . tencent . devops . model . store . tables . records . T Atom Env Info Record Ċ import Ġcom . tencent . devops . store . pojo . atom . Atom Env Request Ċ import Ġcom . tencent . devops . store . pojo . common . enums . Store TypeEnum Ċ import Ġorg . jooq . Condition Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . jooq . Record Ċ import Ġorg . springframework . stereotype . Repository Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Repository Ċ class ĠMarket Atom Env Info Dao Ġ{ ĊĊĠĠĠ Ġfun Ġadd Market Atom Env Info ( dsl Context : ĠDSL Context , Ġatom Id : ĠString , Ġatom Env Request : ĠAtom Env Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( T Atom Env Info . T _ ATOM _ ENV _ INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . insert Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA TOM _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPK G _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPK G _ PATH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLANGUAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMIN _ VERSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTARGET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSHA _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRE _ CMD , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCRE ATOR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMO DI FIER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUUID Util . generate (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . pkg Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . pkg Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . language , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . min Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . target , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . sha Content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . pre Cmd , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . userId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġatom Env Request . userId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Project Market Atom Env Info ( dsl Context : ĠDSL Context , Ġproject Code : ĠString , Ġatom Code : ĠString , Ġversion : ĠString , Ġatom Status List : ĠList < Byte >? ): ĠRecord ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠT Atom . T _ ATOM .` as ` (" a ") ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠT Atom Env Info . T _ ATOM _ ENV _ INFO .` as ` (" b ") ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠT Store Project Rel . T _ STORE _ PROJECT _ REL .` as ` (" c ") ĊĠĠĠĠĠĠĠ Ġval Ġdefault Atom Condition Ġ= Ġquery Default Atom Condition ( a , Ġatom Code , Ġversion , Ġatom Status List ) ĊĠĠĠĠĠĠĠ Ġval Ġnormal Atom Condition Ġ= Ġquery Normal Atom Condition ( a , Ġc , Ġproject Code , Ġatom Code , Ġversion , Ġatom Status List ) ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġd sl Context . select ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . ID .` as ` (" atom Id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . ATOM _ CODE .` as ` (" atom Code "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . ATOM _ STATUS .` as ` (" atom Status "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . NAME .` as ` (" atom Name "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . CRE ATOR .` as ` (" creator "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . VERSION .` as ` (" version "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . SUM MARY .` as ` (" summary "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . DOCS _ LINK .` as ` (" docs Link "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . PRO PS .` as ` (" props "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . CREATE _ TIME .` as ` (" create Time "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa . UPDATE _ TIME .` as ` (" update Time "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . PKG _ PATH .` as ` (" pkg Path "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . LANGUAGE .` as ` (" language "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . MIN _ VERSION .` as ` (" min Version "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . TARGET .` as ` (" target "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . SHA _ CONTENT .` as ` (" sha Content "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb . PRE _ CMD .` as ` (" pre Cmd ") ĊĠĠĠĠĠĠĠ Ġ). from ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( a . ID . eq ( b . ATOM _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( default Atom Condition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. union ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . ID .` as ` (" atom Id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . ATOM _ CODE .` as ` (" atom Code "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . ATOM _ STATUS .` as ` (" atom Status "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . NAME .` as ` (" atom Name "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . CRE ATOR .` as ` (" creator "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . VERSION .` as ` (" version "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . SUM MARY .` as ` (" summary "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . DOCS _ LINK .` as ` (" docs Link "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . PRO PS .` as ` (" props "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . CREATE _ TIME .` as ` (" create Time "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa . UPDATE _ TIME .` as ` (" update Time "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . PKG _ PATH .` as ` (" pkg Path "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . LANGUAGE .` as ` (" language "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . MIN _ VERSION .` as ` (" min Version "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . TARGET .` as ` (" target "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . SHA _ CONTENT .` as ` (" sha Content "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb . PRE _ CMD .` as ` (" pre Cmd ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). from ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( a . ID . eq ( b . ATOM _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( a . ATOM _ CODE . eq ( c . STORE _ CODE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( normal Atom Condition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Table (" t ") ĊĠĠĠĠĠĠĠ Ġreturn Ġd sl Context . select From ( t ). orderBy ( t . field (" create Time "). desc ()). limit ( 1 ). fetch One () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Base Query Condition ( ĊĠĠĠĠĠĠĠ Ġa : ĠT Atom , ĊĠĠĠĠĠĠĠ Ġatom Code : ĠString , ĊĠĠĠĠĠĠĠ Ġversion : ĠString , ĊĠĠĠĠĠĠĠ Ġatom Status List : ĠList < Byte >? ĊĠĠĠ Ġ): ĠMutable List < Condition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= Ġmutable ListOf < Condition >() ĊĠĠĠĠĠĠĠ Ġconditions . add ( a . ATOM _ CODE . eq ( atom Code )) ĊĠĠĠĠĠĠĠ Ġconditions . add ( a . VERSION . like ("$ version % ")) ĊĠĠĠĠĠĠĠ Ġif Ġ( atom Status List Ġ!= Ġnull Ġ&& Ġatom Status List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconditions . add ( a . ATOM _ STATUS .` in `( atom Status List )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconditions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Default Atom Condition ( ĊĠĠĠĠĠĠĠ Ġa : ĠT Atom , ĊĠĠĠĠĠĠĠ Ġatom Code : ĠString , ĊĠĠĠĠĠĠĠ Ġversion : ĠString , ĊĠĠĠĠĠĠĠ Ġatom Status List : ĠList < Byte >? ĊĠĠĠ Ġ): ĠMutable List < Condition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= Ġget Base Query Condition ( a , Ġatom Code , Ġversion , Ġatom Status List ) ĊĠĠĠĠĠĠĠ Ġconditions . add ( a . DEFAULT _ FLAG . eq ( true )) Ġ// ĠæŁ¥ é»ĺè®¤ æıĴä»¶ ï¼Ī æīĢæľī é¡¹çĽ® éĥ½ åı¯çĶ¨ ï¼ī ĊĠĠĠĠĠĠĠ Ġreturn Ġconditions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġquery Normal Atom Condition ( ĊĠĠĠĠĠĠĠ Ġa : ĠT Atom , ĊĠĠĠĠĠĠĠ Ġc : ĠT Store Project Rel , ĊĠĠĠĠĠĠĠ Ġproject Code : ĠString , ĊĠĠĠĠĠĠĠ Ġatom Code : ĠString , ĊĠĠĠĠĠĠĠ Ġversion : ĠString , ĊĠĠĠĠĠĠĠ Ġatom Status List : ĠList < Byte >? ĊĠĠĠ Ġ): ĠMutable List < Condition > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= Ġget Base Query Condition ( a , Ġatom Code , Ġversion , Ġatom Status List ) ĊĠĠĠĠĠĠĠ Ġconditions . add ( a . DEFAULT _ FLAG . eq ( false )) Ġ// ĠæŁ¥ æĻ®éĢļ æıĴä»¶ ĊĠĠĠĠĠĠĠ Ġconditions . add ( c . PROJECT _ CODE . eq ( project Code )) ĊĠĠĠĠĠĠĠ Ġconditions . add ( c . STORE _ TYPE . eq ( Store TypeEnum . ATOM . type . to Byte ())) ĊĠĠĠĠĠĠĠ Ġreturn Ġconditions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Market Atom Env Info By Atom Id ( dsl Context : ĠDSL Context , Ġatom Id : ĠString ): ĠT Atom Env Info Record ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith ( T Atom Env Info . T _ ATOM _ ENV _ INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select From ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ATOM _ ID . eq ( atom Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Market Atom Env Info ( dsl Context : ĠDSL Context , Ġatom Id : ĠString , Ġatom Env Request : ĠAtom Env Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( T Atom Env Info . T _ ATOM _ ENV _ INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Step Ġ= Ġd sl Context . update ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( PKG _ PATH , Ġatom Env Request . pkg Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . language . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( LANGUAGE , Ġatom Env Request . language ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . min Version . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( MIN _ VERSION , Ġatom Env Request . min Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . target . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( TARGET , Ġatom Env Request . target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . sha Content . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( SHA _ CONTENT , Ġatom Env Request . sha Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . pre Cmd . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( PRE _ CMD , Ġatom Env Request . pre Cmd ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! atom Env Request . pkg Name . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( PKG _ NAME , Ġatom Env Request . pkg Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . set ( UPDATE _ TIME , ĠLocalDateTime . now ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( MODI FIER , Ġatom Env Request . userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ATOM _ ID . eq ( atom Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }