Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġdata . P om Artifact Ċ import Ġdata . Response Json Ċ import Ġdata . Version Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . engine . c io .* Ċ import Ġio . ktor . client . features .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . client . statement .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . util .* Ċ import Ġio . ktor . utils . io . jvm . java io .* Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġorg . w 3 c . dom . NodeList Ċ import Ġutility . Sus pended Lazy Ċ import Ġutility . cache Ċ import Ġutility . with Retry Ċ import Ġjava . net . URL Ċ import Ġjava . util .* Ċ import Ġjavax . xml . parsers . Document BuilderFactory Ċ Ċ object ĠPackage Manager Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Url ( start : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ" https :// search . maven . org / solr search / select ? q = g : software . amazon . aw sc dk & wt = json & start =$ start " ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġart ifactory BaseUrl Ġ= ĊĠĠĠĠĠĠĠ Ġ" https :// ch ame lan ia . jfrog . io / art ifactory / maven / io / lem m / cdk / kotlin " ĊĊĠĠĠ Ġ@ Use Experimental ( K tor Experimental API :: class ) ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠHttpClient ( C IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġengine Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Timeout Ġ= Ġ 3 0 0 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( Http Timeout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġlower Bound Ġ= ĠVersion (" 1 . 1 1 8 . 0 ") ĊĠĠĠ Ġprivate Ġval Ġupper Bound Ġ= ĠVersion (" 2 . 0 . 0 ") ĊĊĠĠĠ Ġval Ġall C dk Modules Ġ= ĠS us pended Lazy Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Start Ġto Ġget Ġlist Ġof ĠC DK Ġmodules ") ĊĊĠĠĠĠĠĠĠ Ġval Ġresponses Ġ= Ġgenerate Sequence ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġto Ġj ack son ObjectMapper (). readValue < Response Json >( URL ( request Url ( 0 ))). response . docs ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ( start , Ġdocs ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġsize Ġ= Ġdocs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Start Ġ= Ġstart Ġ+ Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( request Url ( next Start )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Start Ġto Ġj ack son ObjectMapper (). readValue < Response Json >( url ). response . docs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġprintln (" Completed Ġgetting Ġlist Ġof ĠC DK Ġmodules ") ĊĊĠĠĠĠĠĠĠ Ġresponses . as Sequence (). flatMap Ġ{ Ġ(_, Ġdocs ) Ġ-> Ġdocs . as Sequence () Ġ}. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . ec . contains All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". jar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". pom " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ&& ĠVersion ( it . latest Version ) Ġ>= Ġlower Bound ĊĠĠĠĠĠĠĠ Ġ}. map Ġ{ Ġit . a Ġ}. filter Ġ{ Ġ" mon oc dk " Ġ! in Ġit Ġ}. toSet () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlatest C dk Dsl Versions Ġ= ĠS us pended Lazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġwith Context ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Start Ġto Ġget Ġlatest Ġpackage Ġversion Ġfrom ĠArt ifactory ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall C dk Modules (). map Ġ{ Ġmodule Ġ-> Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd sl Maven Metadata Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ art ifactory BaseUrl /$ module / maven - metadata . xml " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( dsl Maven Metadata Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġwith Retry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . get < HttpResponse >( dsl Maven Metadata Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . status Ġ!= ĠHttpStatusCode . OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ module Ġmay Ġnot Ġhave Ġpublished ĠC DK ĠDSL Ġversions Ġyet ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ async Ġmodule Ġto Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument BuilderFactory . newInstance (). new Document Builder (). parse ( response . content . to InputStream ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion String Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . getElementsByTagName (" latest "). item ( 0 ). textContent ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( cdk Version String , Ġd sl Version String ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion String . split ('- ') ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfully Handled Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ art ifactory BaseUrl /$ module /$ version String /$ module -$ version String . pom ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ art ifactory BaseUrl /$ module /$ version String /$ module -$ version String . module ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ art ifactory BaseUrl /$ module /$ version String /$ module -$ version String - sources . jar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ art ifactory BaseUrl /$ module /$ version String /$ module -$ version String . jar " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). all Ġ{ Ġurl Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Retry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġclient . head < HttpResponse >( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ r . status } Ġ$ url ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( r . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . OK Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttpStatusCode . NotFound Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException ( r . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Ġto ĠTrip le ( fully Handled , ĠVersion ( cdk Version String ), ĠVersion ( dsl Version String )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġversions Ġ= Ġresults . associate Ġ{ Ġit . await () Ġ} ĊĠĠĠĠĠĠĠ Ġprintln (" Completed Ġgetting Ġlatest Ġpackage Ġversion Ġfrom ĠArt ifactory ") ĊĠĠĠĠĠĠĠ Ġversions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġc dk Versions Ġ= ĊĠĠĠĠĠĠĠ ĠS us pended Lazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Start Ġto Ġget Ġversion Ġlist Ġof ĠC DK Ġmodules ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversions Ġ= Ġall C dk Modules () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmodule Ġ-> Ġasync ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc dk Maven Metadata Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// repo 1 . maven . org / maven 2 / software / amazon / aw sc dk /$ module / maven - metadata . xml " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( cdk Maven Metadata Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . get < HttpResponse >( cdk Maven Metadata Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument BuilderFactory . newInstance (). new Document Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse ( response . content . to InputStream ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Ġto Ġdoc . getElementsByTagName (" versions "). item ( 0 ). childNodes . asList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . nodeName Ġ== Ġ" version " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠVersion ( it . textContent ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ>= Ġlower Bound Ġ&& Ġit Ġ< Ġupper Bound Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ Ġit . await () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Completed Ġgetting Ġversion Ġlist Ġof ĠC DK Ġmodules ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversions ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġc dk Modules Ġ= ĠS us pended Lazy < Map < Version , ĠList < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġc dk Versions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( module , Ġversions ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions . as Sequence (). map Ġ{ Ġit Ġto Ġmodule Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy To ( TreeMap (), Ġ{ Ġit . first Ġ}) Ġ{ Ġit . second Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġunhandled C dk Modules Ġ= ĠS us pended Lazy < Map < Version , ĠList < String >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlatest C dk Dsl Versions Ġ= Ġlatest C dk Dsl Versions () ĊĊĠĠĠĠĠĠĠ Ġc dk Versions () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġ( module , Ġversions ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġsequence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest C dk Dsl Versions [ module ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġ( fully Handled , Ġhandled C dk Version ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fully Handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ> Ġhandled C dk Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ>= Ġhandled C dk Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsequence ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġto Ġmodule Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy To ( TreeMap (), Ġ{ Ġit . first Ġ}) Ġ{ Ġit . second Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġmodule Dependency Ġ= ĊĠĠĠĠĠĠĠ Ġcache Ġ{ Ġversion : ĠVersion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Start Ġto Ġget Ġdependencies Ġof ĠC DK Ġmodules ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodules Ġ= Ġc dk Modules (). get OrDefault ( version , ĠlistOf ()). also Ġ{ Ġmodules Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" version : Ġ$ version , Ġmodule Ġcount : Ġ${ modules . size }. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= Ġmodules . map Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// repo 1 . maven . org / maven 2 / software / amazon / aw sc dk /$ module /$ version /$ module -${ version }. pom " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( target Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġwith Retry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get < HttpResponse >( target Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( response . status Ġ== ĠHttpStatusCode . OK ) Ġ{ Ġ"${ response . status } Ġon Ġaccessing Ġ$ target Url " Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Blocking Method In Non Blocking Context ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument BuilderFactory . newInstance (). new Document Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse ( response . content . to InputStream ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġdoc . getElementsByTagName (" dependency "). asList (). map Ġ{ Ġnode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP om Artifact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . childNodes . asList (). single Ġ{ Ġit . nodeName Ġ== Ġ" groupId " Ġ}. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . childNodes . asList (). single Ġ{ Ġit . nodeName Ġ== Ġ" artifactId " Ġ}. textContent , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode . childNodes . asList (). single Ġ{ Ġit . nodeName Ġ== Ġ" version " Ġ}. textContent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. filter Ġ{ Ġit . groupId Ġ== Ġ" software . amazon . aw sc dk " Ġ}. map Ġ{ Ġit . artifactId Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Ġto Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . associate Ġ{ Ġit . await () Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Completed Ġgetting Ġdependencies Ġof ĠC DK Ġmodules ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Un published Modules ( cdk Version : ĠVersion , Ġc dk Dsl Version : ĠVersion ) Ġ= ĊĠĠĠĠĠĠĠ Ġc dk Modules () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get OrDefault ( cdk Version , ĠlistOf ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest C dk Dsl Versions ()[ module ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġ( fully Handled , Ġhandled C dk Version , Ġhandled C dk Dsl Version ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fully Handled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc dk Version Ġ> Ġhandled C dk Version Ġ|| Ġc dk Dsl Version Ġ> Ġhandled C dk Dsl Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc dk Version Ġ>= Ġhandled C dk Version Ġ|| Ġc dk Dsl Version Ġ>= Ġhandled C dk Dsl Version ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠNode List . asList () Ġ= ĊĠĠĠĠĠĠĠ ĠList ( length , Ġ:: item ) Ċ } Ċ