package Ġcom . wallet connect . wallet . ui . sessions . details Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . wallet connect . sample _ common . Eth Ch ains Ċ import Ġcom . wallet connect . sample _ common . tag Ċ import Ġcom . wallet connect . wallet . domain . Wallet Delegate Ċ import Ġcom . wallet connect . wallet . domain . map Of Accounts 2 Ċ import Ġcom . wallet connect . wallet . domain . map Of All Accounts Ċ import Ġcom . wallet connect . wallet . ui . Sample Wallet Events Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Sign Ċ import Ġcom . wallet connect . wallet connect v 2 . client . Sign Client Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠSession Details ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ ui State : ĠMutable State Flow < Session Details UI ?> Ġ= ĠMutable State Flow ( null ) ĊĠĠĠ Ġval Ġui State : ĠState Flow < Session Details UI ?> Ġ= Ġ_ ui State . as State Flow () ĊĊĠĠĠ Ġprivate Ġval Ġ_ session Details : ĠMutable Shared Flow < Sample Wallet Events > Ġ= ĠMutable Shared Flow () ĊĠĠĠ Ġval Ġsession Details : ĠShared Flow < Sample Wallet Events > Ġ= Ġ_ session Details . as Shared Flow () ĊĊĠĠĠ Ġprivate Ġvar Ġselected Session Topic : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġanother Event Ġ= Ġ" some Event " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġanother Eth Method Ġ= Ġ" some Method " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠWallet Delegate . wc Event Models ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġwc Model : ĠSign . Model ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( wc Model ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSign . Model . Session Update Response . Result Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠUpdate ĠUI Ġonce Ġstate Ġsynchronization ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSample Wallet Events . No Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSign . Model . Deleted Session . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Session Topic Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ session Details . emit ( Sample Wallet Events . Disconnect ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSample Wallet Events . No Action ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Session Details ( session Topic : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= ĠSign Client . get ListOf Set tled Sessions (). find Ġ{ Ġit . topic Ġ== Ġsession Topic Ġ} ?. let Ġ{ Ġselected Session Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Session Topic Ġ= Ġsession Topic ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistOf Chain Account Info Ġ= Ġfilter And Map All Wallet Accounts To Selected Session Accounts ( selected Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Session Peer Data : ĠSign . Model . App MetaData Ġ= Ġrequire NotNull ( selected Session . metaData ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġui State Ġ= ĠSession Details UI . Content ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Ġ= Ġselected Session Peer Data . icons . first (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġselected Session Peer Data . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġselected Session Peer Data . url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġselected Session Peer Data . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Chain Account Info Ġ= ĠlistOf Chain Account Info , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethods Ġ= Ġselected Session . namespaces . values . flatMap Ġ{ Ġit . methods Ġ}. join ToString ("\ n "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ= Ġselected Session . namespaces . values . flatMap Ġ{ Ġit . events Ġ}. join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠSession Details UI . No Content ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . emit ( state ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Session Topic ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisconnect Ġ= ĠSign . Params . Disconnect ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession Topic Ġ= Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Ġ= Ġ" User Ġdisconnected ĠSession ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreason Code Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . disconnect ( disconnect ) Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( tag ( this ), Ġerror . throwable . stack Trace ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Session Topic Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ session Details . emit ( Sample Wallet Events . Disconnect ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġping () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Session Topic ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġping Ġ= ĠSign . Params . Ping ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . ping ( ping , Ġobject Ġ: ĠSign . Listeners . Session Ping Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( ping Success : ĠSign . Model . Ping . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ session Details . emit ( Sample Wallet Events . Ping Success ( ping Success . topic , ĠSystem . currentTimeMillis ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( ping Error : ĠSign . Model . Ping . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ session Details . emit ( Sample Wallet Events . Ping Error ( System . currentTimeMillis ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ session Details . emit ( Sample Wallet Events . Ping Error ( System . currentTimeMillis ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextend Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Session Topic ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextend Ġ= ĠSign . Params . Extend ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . extend ( extend ) Ġ{ Ġerror Ġ-> ĠLog . d (" Error ", Ġ" Extend Ġsession Ġerror : Ġ$ error ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// fix me : ĠNeeds Ġwhole Ġview Ġre work . ĠBase Ġview Ġon ĠJS ĠWallet ĊĠĠĠ Ġfun Ġemit Event () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRight Ġnow : ĠEmit s Ġfirst Ġalphabet ical Ġevent ĊĠĠĠĠĠĠĠ Ġ// ĠHow Ġit Ġshould Ġbe : ĠUser Ġshould Ġbe Ġable Ġto Ġemit Ġdesired Ġevent ĊĠĠĠĠĠĠĠ Ġselected Session Topic ?. let Ġ{ Ġtopic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . get ListOf Set tled Sessions (). find Ġ{ Ġit . topic Ġ== Ġtopic Ġ} ?. let Ġ{ Ġselected Session Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Approved Events With Ch ains ( selected Session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ(_, Ġchains ) Ġ-> Ġchains . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġevent With Ch ains Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent With Ch ains . keys . min OrNull ()?. let Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent With Ch ains [ event ] !!. first (). let Ġ{ Ġchain Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSign . Params . Emit ( topic , ĠSign . Model . Session Event ( event , Ġ" dummy Data "), Ġchain ). let Ġ{ Ġsession Event Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . emit ( session Event ) Ġ{ Ġerror Ġ-> ĠLog . d (" Error ", Ġ" Extend Ġsession Ġerror : Ġ$ error ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ// ĠSo Ġas Ġnot Ġto Ġlog Ġerror Ġbelow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . e ( tag ( this @ Session Details ViewModel ), Ġ" Event Ġwas Ġnot Ġemitted ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// fix me : ĠNeeds Ġwhole Ġview Ġre work . ĠBase Ġview Ġon ĠJS ĠWallet ĊĠĠĠ Ġfun Ġupdate Namespaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRight Ġnow : ĠExpand Ġfirst Ġ( right Ġnow Ġthere 's Ġonly Ġe ip 1 5 5 ) Ġnamespace Ġwith Ġanother Ġaccount , Ġevent Ġand Ġmethod . ĠWorks Ġonly Ġonce ĊĠĠĠĠĠĠĠ Ġ// ĠHow Ġit Ġshould Ġbe : ĠUser Ġcan Ġtoggle Ġevery Ġaccount , Ġmethod , Ġevent Ġand Ġthen Ġcall Ġthis Ġmethod Ġwith Ġstate Ġto Ġbe Ġupdated ĊĠĠĠĠĠĠĠ Ġselected Session Topic ?. let Ġ{ Ġtopic Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . get ListOf Set tled Sessions (). find Ġ{ Ġit . topic Ġ== Ġtopic Ġ} ?. let Ġ{ Ġselected Session Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Session . namespaces . first NotNull Of Ġ{ Ġit Ġ}. let Ġ{ Ġ( key , Ġnamespace ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecond Account Ġ= Ġnamespace . accounts . first OrNull ()?. let Ġ{ Ġaccount Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( chain Namespace , Ġchain Reference , Ġ_) Ġ= Ġaccount . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of Accounts 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( eth Chain , Ġ_) Ġ-> Ġeth Chain . chain Namespace Ġ== Ġchain Namespace Ġ&& Ġeth Chain . chain Reference Ġ== Ġchain Reference . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( eth Chain , Ġaddress ) Ġ-> Ġ"${ eth Chain . chain Namespace }:${ eth Chain . chain Reference }:${ address }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccounts : ĠMutable List < String > Ġ= Ġnamespace . accounts . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! accounts . contains ( second Account ) Ġ&& Ġsecond Account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts . add ( second Account ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethods : ĠMutable List < String > Ġ= Ġnamespace . methods . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! methods . contains ( another Eth Method )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethods . add ( another Eth Method ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevents : ĠMutable List < String > Ġ= Ġnamespace . events . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! events . contains ( another Event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . add ( another Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpanded Namespaces Ġ= Ġmap Of ( key Ġto ĠSign . Model . Namespace . Session ( accounts , Ġmethods , Ġevents , Ġnull )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Ġ= ĠSign . Params . Update Namespaces ( session Topic Ġ= Ġtopic , Ġnamespaces Ġ= Ġexpanded Namespaces ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSign Client . update ( update ) Ġ{ Ġerror Ġ-> ĠLog . d (" Error ", Ġ" Sending Ġupdate Ġerror : Ġ$ error ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . e ( tag ( this @ Session Details ViewModel ), Ġ" Update Ġwas Ġnot Ġcalled ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠOnce Ġstate Ġsync Ġis Ġcomplete , Ġreplace Ġupdating ĠUI Ġfrom ĠVM Ġwith Ġevent Ġfrom ĠWallet Delegate Ġ- ĠSession Update Response Ċ // ĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ_ ui State . emit ( updated UIState ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġfilter And Map All Wallet Accounts To Selected Session Accounts ( selected Session : ĠSign . Model . Session ): ĠList < Session Details UI . Content . Chain Account Info > Ġ= ĊĠĠĠĠĠĠĠ Ġmap Of All Accounts . values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġaccounts Map : ĠMap < Eth Ch ains , ĠString > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccounts Map ID Ġ= Ġmap Of All Accounts . entries . associate Ġ{ Ġit . value Ġto Ġit . key Ġ}. getValue ( accounts Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts Map . toList (). map Ġ{ Ġ( eth Chain , Ġaccount Address ) Ġ-> ĠTrip le ( eth Chain , Ġaccount Address , Ġaccounts Map ID ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( eth Chain : ĠE th Ch ains , Ġ_, Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistOf Parent Ch ains W Chain Id Ġ= Ġselected Session . namespaces . values . flatMap Ġ{ Ġit . accounts Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( chain Namespace , Ġchain Reference , Ġ_) Ġ= Ġit . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ chain Namespace :$ chain Reference " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ eth Chain . chain Namespace }:${ eth Chain . chain Reference }" Ġin ĠlistOf Parent Ch ains W Chain Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġ( eth Chain : ĠE th Ch ains , Ġ_, Ġ_) Ġ-> Ġeth Chain . order Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġ( eth Chain : ĠE th Ch ains , Ġ_: ĠString , Ġ_: ĠInt ) Ġ-> Ġeth Chain Ġ}. values ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit : ĠList < Triple < Eth Ch ains , ĠString , ĠInt >> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain Details : ĠE th Ch ains Ġ= Ġit . first (). first ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain Name Ġ= Ġchain Details . chain Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain Icon Ġ= Ġchain Details . icon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Chain Ġ= Ġchain Details . chain Namespace ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchain Id Ġ= Ġchain Details . chain Reference ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlistOf Accounts : ĠList < Session Details UI . Content . Chain Account Info . Account > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġ( eth Chain : ĠE th Ch ains , Ġaccount Address : ĠString , Ġaccounts Map Id : ĠInt ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Selected Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ eth Chain . chain Namespace }:${ eth Chain . chain Reference }: $ account Address " Ġin Ġselected Session . namespaces . values . flatMap Ġ{ Ġit . accounts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaddress Title Ġ= Ġ"$ account Address - Account Ġ$ accounts Map Id " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession Details UI . Content . Chain Account Info . Account ( isSelected , Ġaddress Title , Ġaccount Address ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSession Details UI . Content . Chain Account Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Name Ġ= Ġchain Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Icon Ġ= Ġchain Icon , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Namespace Ġ= Ġparent Chain , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchain Reference Ġ= Ġchain Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Accounts Ġ= ĠlistOf Accounts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall Approved Events With Ch ains ( selected Session : ĠSign . Model . Session ): ĠMap < String , ĠList < String >> Ġ= ĊĠĠĠĠĠĠĠ Ġselected Session . namespaces . values . flatMap Ġ{ Ġnamespace Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace . events . map Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġto Ġnamespace . accounts . map Ġ{ Ġget Chain From Account ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. plus ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace . extensions ?. flatMap Ġ{ Ġextension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension . events . map Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent Ġto Ġnamespace . accounts . map Ġ{ Ġget Chain From Account ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. toMap () ĊĊĠĠĠ Ġprivate Ġfun Ġget Chain From Account ( accountId : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġelements Ġ= ĠaccountId . split (": ") ĊĠĠĠĠĠĠĠ Ġif Ġ( elements . isEmpty () Ġ|| Ġelements . size Ġ!= Ġ 3 ) Ġreturn ĠaccountId ĊĠĠĠĠĠĠĠ Ġval Ġ( namespace : ĠString , Ġreference : ĠString , Ġ_: ĠString ) Ġ= Ġelements ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ namespace :$ reference " ĊĠĠĠ Ġ} Ċ }