package Ġnet . cord aes . ledger . event . view ers Ċ Ċ import Ġnet . cord a . core . contracts . Unique Identifier Ċ import Ġnet . cord a . core . identity . Party Ċ import Ġnet . cord aes . hash ing . Hash er Ċ import Ġnet . cord aes . ledger . event . Iss uing Event Ċ import Ġnet . cord aes . ledger . event . Ledger Event Ċ import Ġnet . cord aes . ledger . event . Typed Payload Event Ċ import Ġnet . cord aes . serializers . Serializer Ċ import Ġjava . io . File Ċ import Ġjava . lang . StringBuilder ĊĊ Ċ class ĠCanvas Viewer Ġ{ ĊĊĠĠĠ Ġfun Ġrender ( events : ĠList < Ledger Event >): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġevents . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( event To Draw Event Box ( it , Ġindex ++ )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ("\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcanvas Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< script >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstants Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrounded Rect Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Event Box Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Page Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . toString () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"</ script >" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġevent To Draw Event Box ( ev : ĠLed ger Event , Ġindex : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġparties Ġ= Ġev . participants ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . name . organisation Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. reversed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString Ġ{ Ġ"\" ${ it . name . organisation }\ "" Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġattributes Ġ= Ġwhen Ġ( ev ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTyped Payload Event < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattrs Ġ= ĠSerializer (). toMap ( ev . payload () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattrs . entries . join ToString (",") Ġ{ Ġ"[ \" ${ it . key }\ ", \" ${ it . value }\ "] Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġev . hash . substring ( 0 , 8 ) ĊĠĠĠĠĠĠĠ Ġsb . append (" draw Event Box ( ctx , Ġ${ index }, Ġ\" ${ ev . java Class . simple Name }\ ", Ġ[$ part ies ], Ġ[$ attributes ], Ġ\" ${ hash }\ "); \ n ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcanvas Ġ= Ġ""" ĊĠ Ġ< canvas Ġid =" my Canvas " Ġwidth =" 2 0 0 0 " Ġheight =" 5 0 0 " Ġstyle =" border : 1 px Ġsolid Ġ# 0 0 0 0 0 0 ;"></ canvas > ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġconstants Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġ/* Ġmake Ġa Ġconstant Ġfor Ġeverything Ġ*/ ĠĊĠĠĠĠĠĠĠ Ġvar Ġborder Ġ= Ġ"# 8 0 8 0 8 0 "; ĊĠĠĠĠĠĠĠ Ġvar Ġfont Ġ= Ġ" 1 6 px ĠArial "; ĊĠĠĠĠĠĠĠ Ġvar Ġevent Block Border Width Ġ= Ġ 2 ; ĊĠĠĠĠĠĠĠ Ġvar Ġevent Block Width Ġ= Ġ 3 0 0 ; ĊĠĠĠĠĠĠĠ Ġvar Ġevent Block Height Ġ= Ġ 1 5 0 ; ĊĠĠĠĠĠĠĠ Ġvar Ġevent Block Spacing Ġ= Ġ 3 0 ; ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġvar Ġparticipants Box Width Ġ= Ġ 7 0 ; ĊĠĠĠĠĠĠĠ Ġvar Ġparticipants Box Height Ġ= Ġ 2 5 ; ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġvar Ġparticipant Font Ġ= Ġ" 1 2 px ĠArial " ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġvar Ġattribute Font Ġ= Ġ" 1 2 px ĠArial " ĊĠĠĠĠĠĠĠ Ġvar Ġattribute Colour Ġ= Ġ" blue " ĊĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġdraw Event Box Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġfunction Ġevent Block X ( index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( event Block Width + event Block Spacing )* index Ġ+ Ġ 5 0 ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġfunction Ġdraw Event Box ( ctx , Ġindex , Ġname , Ġparticipants , Ġattributes , Ġhash ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġevent Block X ( index ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġ 1 0 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . stroke Style Ġ= Ġborder ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . lineWidth Ġ= Ġevent Block Border Width ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . stroke Rect ( x , Ġy , Ġevent Block Width , Ġevent Block Height ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . font Ġ= Ġfont ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fillStyle Ġ= Ġ" green "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . textAlign Ġ= Ġ" left "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( name , Ġx Ġ+ Ġ 2 0 , Ġy Ġ+ Ġ 3 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġ= Ġ 0 , Ġlen Ġ= Ġparticipants . length , Ġtext Ġ= Ġ""; Ġi Ġ< Ġlen ; Ġi ++) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpx Ġ= Ġx Ġ+ Ġevent Block Width Ġ- Ġparticipants Box Width Ġ- Ġ( i Ġ* Ġparticipants Box Width ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpy Ġ= Ġy Ġ+ Ġ 5 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fillStyle Ġ= Ġ"# CCC "; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . beginPath (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . rounded Rectangle ( px , Ġpy , Ġparticipants Box Width Ġ- Ġ 1 0 , Ġparticipants Box Height , Ġ 3 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . stroke (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill (); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . font Ġ= Ġparticipant Font ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fillStyle Ġ= Ġ" black "; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . textAlign Ġ= Ġ" left "; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( participants [ i ], Ġpx Ġ+ Ġ 5 , Ġpy Ġ+ Ġ 1 6 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw 1 Ġ= Ġ 5 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġw 2 Ġ= Ġ 5 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġ= Ġ 0 , Ġlen Ġ= Ġattributes . length , Ġtext Ġ= Ġ""; Ġi Ġ< Ġlen ; Ġi ++) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġctx . measure Text ( attributes [ i ][ 0 ]). width ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> Ġw 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw 1 Ġ= Ġwidth ; ĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= Ġctx . measure Text ( attributes [ i ][ 1 ]). width ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> Ġw 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw 2 Ġ= Ġwidth ; ĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġ= Ġ 0 , Ġlen Ġ= Ġattributes . length , Ġtext Ġ= Ġ""; Ġi Ġ< Ġlen ; Ġi ++) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġax Ġ= Ġx Ġ+ Ġ 2 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġay Ġ= Ġy Ġ+ Ġ 6 0 Ġ+ Ġ( i Ġ* Ġ 2 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . font Ġ= Ġ" bold Ġ" Ġ+ Ġattribute Font Ġ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fillStyle Ġ= Ġattribute Colour ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . textAlign Ġ= Ġ" left "; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( attributes [ i ][ 0 ] Ġ+ Ġ" :", Ġax , Ġay ); ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . font Ġ= Ġattribute Font ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( attributes [ i ][ 1 ], Ġax Ġ+ Ġw 1 Ġ+ Ġ 1 5 , Ġay ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ctx . font Ġ= Ġ" bold Ġ" Ġ+ Ġattribute Font Ġ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fillStyle Ġ= Ġ" orange "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ctx . textAlign Ġ= Ġ" left "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . fill Text ( hash , Ġx Ġ+ Ġ 1 0 , Ġy Ġ+ Ġevent Block Height Ġ- Ġ 2 0 ); ĊĠĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġdraw Page Ġ= Ġ""" ĊĠĠĠĠĠĠĠ Ġvar Ġcanvas Ġ= Ġdocument . getElementById (" my Canvas "); ĊĠĠĠĠĠĠĠ Ġvar Ġctx Ġ= Ġcanvas . getContext (" 2 d "); ĊĊĠĠĠĠĠĠĠ Ġctx . stroke Style = border ; ĊĊĠĠĠĠĠĠĠ Ġctx . font Ġ= Ġfont ; ĊĠĠĠĠĠĠĠ Ġctx . moveTo ( 2 2 0 , 2 2 0 ); ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġval Ġdraw Events Ġ= Ġ""" ĊĠĊĠĠĠĠĠĠĠ Ġdraw Event Box ( ctx , Ġ 0 , Ġ" IO UI ss ued ", Ġ[" Alice "," Bob "], Ġ[ [" amount ", Ġ 1 0 0 ]]); ĊĠĠĠĠĠĠĠ Ġdraw Event Box ( ctx , Ġ 1 , Ġ" IO UP ayment Re corded ", Ġ[" Alice "," Bob "], []); ĊĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġ// Ġfrom Ġhttps :// new five four . com / javascript - canvas - rounded - rectangle . html ĊĠĠĠ Ġval Ġrounded Rect Ġ= Ġ""" ĊĠĠĠĠĠĠĠ ĠCanvas Rendering Context 2 D . prototype . rounded Rectangle Ġ= Ġfunction ( x , Ġy , Ġwidth , Ġheight , Ġrounded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġradians In Circle Ġ= Ġ 2 Ġ* ĠMath . PI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġhalf Radians Ġ= Ġ( 2 Ġ* ĠMath . PI )/ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġquarter Radians Ġ= Ġ( 2 Ġ* ĠMath . PI )/ 4 ĠĠĊĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtop Ġleft Ġarc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arc ( rounded Ġ+ Ġx , Ġrounded Ġ+ Ġy , Ġrounded , Ġ- quarter Radians , Ġhalf Radians , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġline Ġfrom Ġtop Ġleft Ġto Ġbottom Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lineTo ( x , Ġy Ġ+ Ġheight Ġ- Ġrounded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbottom Ġleft Ġarc ĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arc ( rounded Ġ+ Ġx , Ġheight Ġ- Ġrounded Ġ+ Ġy , Ġrounded , Ġhalf Radians , Ġquarter Radians , Ġtrue ) ĠĠĊĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġline Ġfrom Ġbottom Ġleft Ġto Ġbottom Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lineTo ( x Ġ+ Ġwidth Ġ- Ġrounded , Ġy Ġ+ Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbottom Ġright Ġarc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arc ( x Ġ+ Ġwidth Ġ- Ġrounded , Ġy Ġ+ Ġheight Ġ- Ġrounded , Ġrounded , Ġquarter Radians , Ġ 0 , Ġtrue ) ĠĠĊĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġline Ġfrom Ġbottom Ġright Ġto Ġtop Ġright ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lineTo ( x Ġ+ Ġwidth , Ġy Ġ+ Ġrounded ) ĠĠ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtop Ġright Ġarc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arc ( x Ġ+ Ġwidth Ġ- Ġrounded , Ġy Ġ+ Ġrounded , Ġrounded , Ġ 0 , Ġ- quarter Radians , Ġtrue ) ĠĠĊĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġline Ġfrom Ġtop Ġright Ġto Ġtop Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . lineTo ( x Ġ+ Ġrounded , Ġy ) ĠĠĊĠĠĠĠĠĠĠ Ġ}; ĊĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġrender To H tl m ( f : ĠFile , Ġevents : ĠList < Ledger Event >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf Ġ= ĠFile (" demo . html ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ<! DOCTYPE Ġhtml > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< html > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< body > """. trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfooter Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ body > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ html > """. trim Indent () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġf . write Text ( header Ġ+ ĠCanvas Viewer (). render ( events ) Ġ+ Ġfooter ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ data Ġclass ĠIO U ( val Ġamount : ĠLong Ġ= Ġ 1 0 0 , Ġval Ġl ender : ĠParty Ġ= ĠParty (" Alice "), Ġval Ġborrow er : ĠParty Ġ= ĠParty (" Bob ")) Ċ class ĠIO UI ss ued ( linear Id : ĠUnique Identifier Ġ= ĠUnique Identifier (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġi ou : ĠIO U ) Ġ: ĠLed ger Event , ĠIss uing Event , ĊĠĠĠĠĠĠĠ ĠTyped Payload Event < IO U > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontact InstanceId : ĠByteArray Ġ= Ġlinear Id . toString (). toByteArray () ĊĊĠĠĠ Ġoverride Ġval Ġparticipants : ĠList < Party > Ġ= ĠlistOf ( iou . l ender , Ġi ou . borrow er ) ĊĊĠĠĠ Ġoverride Ġfun Ġpayload (): ĠIO U Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġi ou ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġhash : ĠString Ġ= ĠHash er (). hash ( payload () Ġas ĠAny ) Ċ Ċ } Ċ Ċ data Ġclass ĠIO UP ayment ( val Ġamount : ĠLong Ġ= Ġ 2 0 , Ġval Ġpay ee : ĠParty Ġ= ĠParty (" Bob "), Ġval Ġrecipient : ĠParty Ġ= ĠParty (" Alice ")) Ċ class ĠIO UP aid ( linear Id : ĠUnique Identifier Ġ= ĠUnique Identifier (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġpayment : ĠIO UP ayment ) Ġ: ĠLed ger Event , ĠIss uing Event , ĊĠĠĠĠĠĠĠ ĠTyped Payload Event < IO UP ayment > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontact InstanceId : ĠByteArray Ġ= Ġlinear Id . toString (). toByteArray () ĊĊĠĠĠ Ġoverride Ġval Ġparticipants : ĠList < Party > Ġ= ĠlistOf ( payment . pay ee , Ġpayment . recipient ) ĊĊĠĠĠ Ġoverride Ġfun Ġpayload (): ĠIO UP ayment Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpayment ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġhash : ĠString Ġ= ĠHash er (). hash ( payload () Ġas ĠAny ) Ċ } Ċ Ċ data Ġclass ĠIO U Transfer ( val Ġcurrent L ender : ĠParty Ġ= ĠParty (" Alice "), Ġval Ġnew L ender : ĠParty Ġ= ĠParty (" Char lie ")) Ċ class ĠIO U Transfer ed ( linear Id : ĠUnique Identifier Ġ= ĠUnique Identifier (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtransfer : ĠIO U Transfer ) Ġ: ĠLed ger Event , ĠIss uing Event , ĊĠĠĠĠĠĠĠ ĠTyped Payload Event < IO U Transfer > Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontact InstanceId : ĠByteArray Ġ= Ġlinear Id . toString (). toByteArray () ĊĊĠĠĠ Ġoverride Ġval Ġparticipants : ĠList < Party > Ġ= ĠlistOf ( transfer . current L ender , Ġtransfer . new L ender ) ĊĊĠĠĠ Ġoverride Ġfun Ġpayload (): ĠIO U Transfer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtransfer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġhash : ĠString Ġ= ĠHash er (). hash ( payload () Ġas ĠAny ) Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġf Ġ= ĠFile (" demo . html ") ĊĠĠĠ Ġval Ġevents Ġ= ĠlistOf ( IO UI ss ued ( iou Ġ= ĠIO U ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO UP aid ( payment Ġ= ĠIO UP ayment ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIO U Transfer ed ( transfer Ġ= ĠIO U Transfer ())) Ġas ĠList < Ledger Event > ĊĠĠĠ ĠCanvas Viewer . render To H tl m ( f , Ġevents ) Ċ } ĊĊ