package Ġextra . kotlin . util Ċ Ċ import Ġkotlin . random . Random Ċ Ċ data Ġclass ĠUUID ( ĊĠĠĠ Ġval Ġmost Sign ificant Bits : ĠLong , ĊĠĠĠ Ġval Ġleast Sign ificant Bits : ĠLong Ċ ) Ġ: ĠComparable < UUID > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠUUID ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( this . most Sign ificant Bits Ġ== Ġother . most Sign ificant Bits ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . least Sign ificant Bits . compareTo ( other . least Sign ificant Bits ) ĊĠĠĠĠĠĠĠ Ġelse Ġthis . most Sign ificant Bits . compareTo ( other . most Sign ificant Bits ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom UUID String ( input : ĠString ): ĠUUID Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhex Only Ġ= Ġinput . filter Ġ{ Ġit Ġin Ġ' 0 ' .. ' 9 ' Ġ|| Ġit Ġin Ġ' a ' .. ' f ' Ġ|| Ġit Ġin Ġ' A ' .. ' F ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( hex Only . length Ġ!= Ġ 3 2 ) Ġthrow ĠIllegalArgumentException (" String Ġis Ġnot Ġa ĠId , Ġshould Ġbe Ġ 3 2 Ġhex Ġcharacters ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUUID ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmost Sign ificant Bits Ġ= Ġhex Only . substring ( 0 , Ġ 1 6 ). to UL ong ( 1 6 ). to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleast Sign ificant Bits Ġ= Ġhex Only . substring ( 1 6 , Ġ 3 2 ). to UL ong ( 1 6 ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġuuid 4 (): ĠUUID Ġ= ĠUUID ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmost Sign ificant Bits Ġ= Ġ( Random . next Long () Ġand Ġ(- 1 L Ġ- Ġ 0 x 0 0 0 0 0 0 0 0 0 0 0 0 F 0 0 0 ) Ġor Ġ( 0 x 4 0 0 0 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleast Sign ificant Bits Ġ= Ġ( Random . next Long () Ġand Ġ 0 x 3 FFFFFFFF FFFFFF FL Ġor Ġ( 0 x 8 0 0 0 _ 0 0 0 0 L Ġshl Ġ 3 2 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Ġ= Ġmost Sign ificant Bits . to UL ong (). toString ( 1 6 ). pad Start ( 1 6 , Ġ' 0 ') ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġleast Sign ificant Bits . to UL ong (). toString ( 1 6 ). pad Start ( 1 6 , Ġ' 0 ') ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild String ( 3 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( first . substring ( 0 , Ġ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( first . substring ( 8 , Ġ 1 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( first . substring ( 1 2 , Ġ 1 6 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( second . substring ( 0 , Ġ 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( second . substring ( 4 , Ġ 1 6 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ