package Ġfr . ac in q . phoenix . controllers . main Ċ Ċ import Ġfr . ac in q . bitcoin . Byte Vector 3 2 Ċ import Ġfr . ac in q . lightning . Milli Sat oshi Ċ import Ġfr . ac in q . lightning . channel .* Ċ import Ġfr . ac in q . lightning . utils . sum Ċ import Ġfr . ac in q . phoenix . Ph o enix Business Ċ import Ġfr . ac in q . phoenix . controllers . App Controller Ċ import Ġfr . ac in q . phoenix . managers . Payments Manager Ċ import Ġfr . ac in q . phoenix . managers . Peer Manager Ċ import Ġfr . ac in q . phoenix . utils . local Commit ment Spec Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . kode in . log . LoggerFactory ĊĊ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ class ĠApp HomeController ( ĊĠĠĠ Ġlogger Factory : ĠLoggerFactory , ĊĠĠĠ Ġprivate Ġval Ġpeer Manager : ĠPeer Manager , ĊĠĠĠ Ġprivate Ġval Ġpayments Manager : ĠPay ments Manager Ċ ) Ġ: ĠApp Controller < Home . Model , ĠHome . Intent >( ĊĠĠĠ Ġlogger Factory Ġ= Ġlogger Factory , ĊĠĠĠ Ġfirst Model Ġ= ĠHome . empty Model Ċ ) Ġ{ ĊĠĠĠ Ġconstructor ( business : ĠP ho enix Business ): Ġthis ( ĊĠĠĠĠĠĠĠ Ġlogger Factory Ġ= Ġbusiness . logger Factory , ĊĠĠĠĠĠĠĠ Ġpeer Manager Ġ= Ġbusiness . peer Manager , ĊĠĠĠĠĠĠĠ Ġpayments Manager Ġ= Ġbusiness . payments Manager ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġvar Ġis Boot Ġ= Ġtrue ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeer Ġ= Ġpeer Manager . get Peer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboot Flow Ġ= Ġpeer . boot Channels Flow . filter NotNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannels Flow Ġ= Ġpeer . channels Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcombine ( boot Flow , Ġchannels Flow ) Ġ{ Ġboot Channels , Ġchannels Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġboot Flow Ġwill Ġfire Ġonce , Ġafter Ġthe Ġchannels Ġhave Ġbeen Ġread Ġfrom Ġthe Ġdatabase . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġchannels Flow Ġis Ġinitialized Ġwith Ġan Ġempty ĠHashMap . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Boot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Boot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboot Channels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannels ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. collect Ġ{ Ġchannels Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Balance ( channels ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayments Manager . incoming Sw aps . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( incoming Balance Ġ= Ġit . values . sum (). take If Ġ{ Ġit . ms at Ġ> Ġ 0 Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpayments Manager . payments Count . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpayments Count Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġupdate Balance ( channels : ĠMap < Byte Vector 3 2 , ĠChannel State >): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Balance Ġ= Ġchannels . values . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġchannel Ġis Ġoffline , Ġwe Ġwant Ġto Ġdisplay Ġthe Ġunderlying Ġbalance . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġalternative Ġis Ġto Ġdisplay Ġa Ġzero Ġbalance Ġwhenever Ġthe Ġuser Ġis Ġoffline . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAnd Ġif Ġthere 's Ġone Ġsure Ġway Ġto Ġmake Ġuser 's Ġf reak Ġout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġit 's Ġshowing Ġthem Ġa Ġzero Ġbalance ... ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff line Ġ-> Ġit . state ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClosing Ġ-> ĠM illi Sat oshi ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClosed Ġ-> ĠM illi Sat oshi ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAbort ed Ġ-> ĠM illi Sat oshi ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠError Information Leak Ġ-> ĠM illi Sat oshi ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġit . local Commit ment Spec ?. to Local Ġ?: ĠM illi Sat oshi ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. sum () ĊĊĠĠĠĠĠĠĠ Ġmodel Ġ{ Ġcopy ( balance Ġ= Ġnew Balance ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess ( intent : ĠHome . Intent ) Ġ{} Ċ } Ċ