/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġapp . cash . zi pline . loader Ċ Ċ import Ġapp . cash . zi pline . EventListener Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġok io . ByteString Ċ Ċ /** Ċ Ġ* ĠP referred Ġconstruction Ġis Ġvia Ġ[ Zi pline Manifest . create ] Ċ Ġ* ĠConstructor Ġis Ġstill Ġaccessible Ġfrom Ġ. copy () Ġon Ġdata Ġclass , Ġaltern atively Ġcan Ġimplement Ġwithout Ġthe Ġdata Ġclass Ġbut Ċ Ġ* Ġwith Ġmanual Ġequals / hashCode Ġto Ġsupport Ġvalue Ġequality Ċ Ġ*/ Ċ @ Serializable Ċ data Ġclass ĠZ i pline Manifest Ġprivate Ġconstructor ( ĊĠ Ġ/** ĠThis Ġis Ġan Ġordered Ġmap ; Ġits Ġmodules Ġare Ġalways Ġtopo logic ally Ġsorted . Ġ*/ ĊĠ Ġval Ġmodules : ĠMap < String , ĠZ i pline Module > Ċ ) Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġrequire ( modules . keys . toList (). is Top o logic ally Sorted Ġ{ Ġid Ġ-> Ġmodules [ id ] !!. depends On Ids Ġ}) Ġ{ ĊĠĠĠĠĠ Ġ" Modules Ġare Ġnot Ġtopo logic ally Ġsorted Ġand Ġcan Ġnot Ġbe Ġloaded " ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġfun Ġcreate ( modules : ĠMap < String , ĠZ i pline Module >): ĠZ i pline Manifest Ġ= ĊĠĠĠĠĠ ĠZ i pline Manifest ( modules . keys ĊĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠ Ġ. topo logical Sort Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġmodules [ id ]?. depends On Ids ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Unexpected Ġ[ id =$ id ] Ġis Ġnot Ġfound Ġin Ġmodules Ġkeys ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. associate With Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġmodules [ id ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Unexpected Ġ[ id =$ id ] Ġis Ġnot Ġfound Ġin Ġmodules Ġkeys ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun ĠByte String . decode To Zi pline Manifest ( ĊĠĠĠĠĠ Ġevent Listener : ĠEvent Listener , ĊĠĠĠĠĠ Ġapplication Name : ĠString , ĊĠĠĠĠĠ Ġurl : ĠString ?, ĊĠĠĠ Ġ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠ ĠJson . decode FromString < Zi pline Manifest >( this . utf 8 ()) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġevent Listener . manifest Parse Failed ( application Name , Ġurl , Ġe ) ĊĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ