package Ġcom . github . w um o . pac man 2 sco op Ċ Ċ import Ġcom . github . w um o . http . HttpClient . client Ċ import Ġcom . github . w um o . http . HttpClient . close Client Ċ import Ġcom . github . w um o . http . HttpClient . init Client Ċ import Ġcom . github . w um o . http . Ok Http Utils . url Ċ import Ġcom . github . w um o . http . Ok Http Utils . get Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ object ĠOnline Ġ{ ĊĠ Ġval ĠbaseUrl Ġ= Ġurl (" https ", Ġ" packages . msys 2 . org ", Ġ" package ") ĊĠĠĊĠ Ġval Ġfile Url Pattern Ġ= ĠRegex (""" < dt [^ > ]+ >\ s * File :\ s *</ dt >[ \ S \ s ]* ?< a \ s + href =" ([^ "] +) """ ") ĊĠ Ġval Ġsha 2 5 6 Pattern Ġ= ĠRegex (""" < dt [^ > ]+ >\ s * SHA 2 5 6 :\ s *</ dt >[ \ S \ s ]* ?< code >( [^ < ]+ )</ code > """) ĊĠ Ġval Ġdependencies Pattern Ġ= ĠRegex (""" < dt [^ > ]+ >\ s * Dependencies :\ s *</ dt >[ \ S \ s ]* ?< dd [^ > ]+ >( [\ S \ s ]+ ? )</ dd > """) ĊĠ Ġval Ġdependency Pattern Ġ= ĠRegex (""" < a \ s + href =" ([^ "] +) """ ") ĊĠĠĊĠ Ġ@ Opt In ( Experimental Std lib Api :: class ) ĊĠ Ġfun Ġdependencies Of ( required Packages : ĠList < String >): ĠList < Package > Ġ{ ĊĠĠĠ Ġval Ġqueue Ġ= Ġrequired Packages . map To ( ArrayList ()) Ġ{ ĊĠĠĠĠĠ ĠbaseUrl . url ( it ). toString () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠ Ġval Ġpackages Ġ= Ġmutable Map Of < String , ĠPackage >() ĊĠĠĠĠĠ Ġwhile ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġqueue . remove Last () ĊĠĠĠĠĠĠĠ Ġprintln (" fetch ing Ġ$ p ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġclient . get ( p ) ĊĠĠĠĠĠĠĠ Ġvar Ġstart : ĠInt ĊĠĠĠĠĠĠĠ Ġval Ġfile Url Match Ġ= Ġfile Url Pattern . find ( result ) !! ĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġfile Url Match . range . last ĊĠĠĠĠĠĠĠ Ġval Ġfile Url Ġ= Ġfile Url Match . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġsha 2 5 6 Match Ġ= Ġsha 2 5 6 Pattern . find ( result , Ġstart ) !! ĊĠĠĠĠĠĠĠ Ġval Ġsha 2 5 6 Ġ= Ġsha 2 5 6 Match . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġpackages [ p ] Ġ= ĠPackage ( file Url , Ġfile Url , Ġsha 2 5 6 ) ĊĠĠĠĠĠĠĠ Ġstart Ġ= Ġsha 2 5 6 Match . range . last ĊĠĠĠĠĠĠĠ Ġval Ġdependencies Match Ġ= Ġdependencies Pattern . find ( result , Ġstart ) !! ĊĠĠĠĠĠĠĠ Ġval Ġdependencies Str Ġ= Ġdependencies Match . group Values [ 1 ] ĊĠĠĠĠĠĠĠ Ġdependency Pattern . findAll ( dependencies Str ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġit . group Values [ 1 ] ĊĠĠĠĠĠĠĠĠĠ Ġif ( d Ġ! in Ġpackages ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . add ( d ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġunique Package sBy File Url Ġ= Ġmutable Map Of < String , ĠPackage >() ĊĠĠĠĠĠ Ġpackages . values . forEach Ġ{ Ġunique Package sBy File Url [ it . url ] Ġ= Ġit Ġ} ĊĠĠĠĠĠ Ġunique Package sBy File Url . values . sorted By Ġ{ Ġit . url Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }