package Ġnet . cord a . node api . internal . network Ċ Ċ import Ġnet . cord a . core . contracts . Contract ClassName Ċ import Ġnet . cord a . core . internal . div Ċ import Ġnet . cord a . core . internal . exists Ċ import Ġnet . cord a . core . internal . read All Lines Ċ import Ġnet . cord a . core . internal . to Multi Map Ċ import Ġnet . cord a . core . node . Network Parameters Ċ import Ġnet . cord a . core . node . services . Attachment Id Ċ import Ġnet . cord a . node api . internal . Contracts Jar Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . nio . file . Path Ċ Ċ private Ġconst Ġval ĠEX CL UDE _ WHITE LIST _ FILE _ NAME Ġ= Ġ" exclude _ whitelist . txt " Ċ private Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger (" net . cord a . node api . internal . network . Whitelist Generator ") Ċ Ċ fun Ġgenerate Whitelist ( network Parameters : ĠNetwork Parameters ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexclude Contracts : ĠList < Contract ClassName >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ord app J ars : ĠList < Contracts Jar >): ĠMap < Contract ClassName , ĠList < Attachment Id >> Ġ{ ĊĠĠĠ Ġval Ġexisting Whitelist Ġ= Ġnetwork Parameters ?. wh itelisted Contract Implement ations Ġ?: Ġempty Map () ĊĊĠĠĠ Ġif Ġ( exclude Contracts . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" Exclude Ġcontracts Ġfrom Ġwhitelist : Ġ${ exclude Contracts . join ToString () }") ĊĠĠĠĠĠĠĠ Ġexisting Whitelist . keys . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( it Ġ! in Ġexclude Contracts ) Ġ{ Ġ"$ it Ġis Ġalready Ġpart Ġof Ġthe Ġexisting Ġwhitelist Ġand Ġcannot Ġbe Ġexcluded ." Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġnew White List Ġ= Ġc ord app J ars ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġjar Ġ-> Ġ( jar . scan () Ġ- Ġexclude Contracts ). map Ġ{ Ġit Ġto Ġjar . hash Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Multi Map () ĊĊĠĠĠ Ġreturn Ġ( new White List . keys Ġ+ Ġexisting Whitelist . keys ). associate By ({ Ġit Ġ}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting Hashes Ġ= Ġexisting Whitelist [ it ] Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġval Ġnew Hashes Ġ= Ġnew White List [ it ] Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġ( existing Hashes Ġ+ Ġnew Hashes ). distinct () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġread Exclude Whitelist ( directory : ĠPath ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġfile Ġ= Ġdirectory Ġ/ ĠEX CL UDE _ WHITE LIST _ FILE _ NAME ĊĠĠĠ Ġreturn Ġif Ġ( file . exists ()) Ġfile . read All Lines (). map ( String :: trim ) Ġelse Ġempty List () Ċ }