From b4c0229cccfc0dbd2bfcfff59a3264328bc73c20 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Tue, 29 Nov 2016 18:44:59 +0000 Subject: [PATCH] Regen docsite --- docs/build/doctrees/CLI-vs-IDE.doctree | Bin 0 -> 19663 bytes docs/build/doctrees/clauses.doctree | Bin 0 -> 53613 bytes .../build/doctrees/contract-catalogue.doctree | Bin 20590 -> 20595 bytes .../doctrees/corda-configuration-file.doctree | Bin 43276 -> 44182 bytes docs/build/doctrees/corda-plugins.doctree | Bin 22978 -> 24250 bytes .../build/doctrees/creating-a-cordapp.doctree | Bin 40421 -> 40373 bytes docs/build/doctrees/environment.pickle | Bin 112213 -> 138647 bytes .../getting-set-up-fault-finding.doctree | Bin 18784 -> 21954 bytes docs/build/doctrees/getting-set-up.doctree | Bin 18051 -> 20321 bytes docs/build/doctrees/index.doctree | Bin 14059 -> 14380 bytes docs/build/doctrees/oracles.doctree | Bin 31701 -> 79141 bytes docs/build/doctrees/persistence.doctree | Bin 33895 -> 33890 bytes docs/build/doctrees/release-notes.doctree | Bin 106083 -> 130785 bytes docs/build/doctrees/running-the-demos.doctree | Bin 52753 -> 80334 bytes .../setting-up-a-corda-network.doctree | Bin 21976 -> 21981 bytes .../doctrees/transaction-data-types.doctree | Bin 54190 -> 54735 bytes .../tutorial-building-transactions.doctree | Bin 0 -> 83102 bytes .../doctrees/tutorial-clientrpc-api.doctree | Bin 31158 -> 39829 bytes .../tutorial-contract-clauses.doctree | Bin 40810 -> 56656 bytes docs/build/doctrees/tutorial-contract.doctree | Bin 164175 -> 164754 bytes docs/build/doctrees/tutorial-cordapp.doctree | Bin 0 -> 170221 bytes .../tutorial-integration-testing.doctree | Bin 0 -> 26419 bytes docs/build/html/.buildinfo | 2 +- docs/build/html/CLI-vs-IDE.html | 352 ++++++ .../html/_images/allCompositionChart.png | Bin 0 -> 22693 bytes .../html/_images/anyCompositionChart.png | Bin 0 -> 14902 bytes docs/build/html/_images/commPaperClauses.png | Bin 0 -> 13269 bytes .../build/html/_images/commPaperExecution.png | Bin 0 -> 27042 bytes .../html/_images/firstCompositionChart.png | Bin 0 -> 16122 bytes .../html/_images/groupClauseVerifyChart.png | Bin 0 -> 14096 bytes docs/build/html/_images/intellij-welcome.png | Bin 0 -> 31175 bytes .../html/_images/run-config-drop-down.png | Bin 0 -> 27786 bytes .../html/_images/unlinked-gradle-project.png | Bin 0 -> 8697 bytes docs/build/html/_sources/CLI-vs-IDE.txt | 67 ++ docs/build/html/_sources/clauses.txt | 278 +++++ .../_sources/corda-configuration-file.txt | 2 +- docs/build/html/_sources/corda-plugins.txt | 12 +- .../html/_sources/creating-a-cordapp.txt | 10 +- .../_sources/getting-set-up-fault-finding.txt | 11 + docs/build/html/_sources/getting-set-up.txt | 6 + docs/build/html/_sources/index.txt | 24 +- docs/build/html/_sources/oracles.txt | 155 ++- docs/build/html/_sources/release-notes.txt | 72 ++ .../build/html/_sources/running-the-demos.txt | 119 +- .../html/_sources/transaction-data-types.txt | 2 + .../tutorial-building-transactions.txt | 321 ++++++ .../html/_sources/tutorial-clientrpc-api.txt | 57 +- .../_sources/tutorial-contract-clauses.txt | 230 ++-- .../build/html/_sources/tutorial-contract.txt | 2 + docs/build/html/_sources/tutorial-cordapp.txt | 852 ++++++++++++++ .../_sources/tutorial-integration-testing.txt | 117 ++ docs/build/html/_static/css/custom.css | 190 ++-- .../-acceptor/index.html | 4 +- .../-instigator/index.html | 8 +- .../-broadcast-transaction-flow/index.html | 4 +- .../-fetch-data-flow/index.html | 8 +- .../net.corda.flows/-finality-flow/index.html | 4 +- .../-notary-flow/-service/index.html | 4 +- docs/build/html/building-the-docs.html | 47 +- docs/build/html/clauses.html | 521 +++++++++ docs/build/html/clientrpc.html | 32 +- docs/build/html/codestyle.html | 47 +- docs/build/html/consensus.html | 30 +- docs/build/html/contract-catalogue.html | 26 +- docs/build/html/contract-irs.html | 26 +- docs/build/html/corda-configuration-file.html | 28 +- docs/build/html/corda-plugins.html | 40 +- docs/build/html/creating-a-cordapp.html | 62 +- docs/build/html/data-model.html | 49 +- docs/build/html/event-scheduling.html | 45 +- docs/build/html/flow-state-machines.html | 30 +- docs/build/html/flow-testing.html | 26 +- docs/build/html/further-notes-on-kotlin.html | 45 +- docs/build/html/genindex.html | 26 +- .../html/getting-set-up-fault-finding.html | 88 +- docs/build/html/getting-set-up.html | 38 +- docs/build/html/glossary.html | 45 +- docs/build/html/index.html | 166 ++- docs/build/html/initial-margin-agreement.html | 26 +- docs/build/html/inthebox.html | 49 +- docs/build/html/loadtesting.html | 53 +- docs/build/html/merkle-trees.html | 26 +- docs/build/html/messaging.html | 26 +- docs/build/html/network-simulator.html | 26 +- docs/build/html/node-administration.html | 26 +- docs/build/html/node-explorer.html | 26 +- docs/build/html/node-services.html | 26 +- docs/build/html/objects.inv | Bin 1262 -> 1429 bytes docs/build/html/oracles.html | 321 +++++- docs/build/html/permissioning.html | 30 +- docs/build/html/persistence.html | 26 +- docs/build/html/release-notes.html | 133 ++- docs/build/html/release-process.html | 47 +- docs/build/html/running-a-notary.html | 26 +- docs/build/html/running-the-demos.html | 163 ++- docs/build/html/search.html | 26 +- docs/build/html/searchindex.js | 2 +- docs/build/html/secure-coding-guidelines.html | 49 +- .../html/setting-up-a-corda-network.html | 48 +- docs/build/html/transaction-data-types.html | 57 +- docs/build/html/tutorial-attachments.html | 45 +- .../html/tutorial-building-transactions.html | 701 ++++++++++++ docs/build/html/tutorial-clientrpc-api.html | 91 +- .../build/html/tutorial-contract-clauses.html | 266 +++-- docs/build/html/tutorial-contract.html | 32 +- docs/build/html/tutorial-cordapp.html | 1006 +++++++++++++++++ .../html/tutorial-integration-testing.html | 429 +++++++ docs/build/html/tutorial-test-dsl.html | 51 +- docs/build/html/using-a-notary.html | 26 +- 109 files changed, 7289 insertions(+), 900 deletions(-) create mode 100644 docs/build/doctrees/CLI-vs-IDE.doctree create mode 100644 docs/build/doctrees/clauses.doctree create mode 100644 docs/build/doctrees/tutorial-building-transactions.doctree create mode 100644 docs/build/doctrees/tutorial-cordapp.doctree create mode 100644 docs/build/doctrees/tutorial-integration-testing.doctree create mode 100644 docs/build/html/CLI-vs-IDE.html create mode 100644 docs/build/html/_images/allCompositionChart.png create mode 100644 docs/build/html/_images/anyCompositionChart.png create mode 100644 docs/build/html/_images/commPaperClauses.png create mode 100644 docs/build/html/_images/commPaperExecution.png create mode 100644 docs/build/html/_images/firstCompositionChart.png create mode 100644 docs/build/html/_images/groupClauseVerifyChart.png create mode 100644 docs/build/html/_images/intellij-welcome.png create mode 100644 docs/build/html/_images/run-config-drop-down.png create mode 100644 docs/build/html/_images/unlinked-gradle-project.png create mode 100644 docs/build/html/_sources/CLI-vs-IDE.txt create mode 100644 docs/build/html/_sources/clauses.txt create mode 100644 docs/build/html/_sources/tutorial-building-transactions.txt create mode 100644 docs/build/html/_sources/tutorial-cordapp.txt create mode 100644 docs/build/html/_sources/tutorial-integration-testing.txt create mode 100644 docs/build/html/clauses.html create mode 100644 docs/build/html/tutorial-building-transactions.html create mode 100644 docs/build/html/tutorial-cordapp.html create mode 100644 docs/build/html/tutorial-integration-testing.html diff --git a/docs/build/doctrees/CLI-vs-IDE.doctree b/docs/build/doctrees/CLI-vs-IDE.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5b06afa9fe59fffc548cd4e7d248b43915a32ccb GIT binary patch literal 19663 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/clauses.doctree b/docs/build/doctrees/clauses.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b2cd0fba92c26051d1011bcf15eff2c30edb63da GIT binary patch literal 53613 zcmeHQ2b>$l)i(w=xnO$eOFv(9I%)`KV`9via$p0tK#(|hI%)4#vQE04m24ldNq~?* zNF#(K5CZAFH_`(ELV72?k{;4YB?HmYOD^|khW^ey*?HCcgj=7QbOV2v(4W%C1 zjImOs?y6eVpS?P_5Wn-IL0#nw^->TtTz}5$+}?<+)jd}^lGUk=IfY8T5dh2F)ww;8 zTBuD-)`C*KRI5fw^K{11d{8QwNC$`;g?dA|eoCj>vI@0o;Hr&oexlZ>*8TabbBjnx zbt;D0U$8p2J7TM~OF(W=y2LHk8uiIWJ@6N<&MijDSV;x-c#cJyym3`)Olp!hx~eo* za+Sa9>fD~BTvx=|;7&OpqTo&f-C|RGr4mQB+v-Mkx1a&;l z)vL9-I~>&Ws_s8-Xs7HPwo|DX`1^+bem&mo?A)l4_V?yw7h1OICOW{Io84O)s81TG zuQt|a8|Xl9UUrXIEuw^jyi|5?X&e*P*KC}Fz4_U_Z5eG%<9G|Qi`p9I5N~02_k?CS z)LWEY+|ek9dAnx!NNSS9y~Wu*4dH!gkiMuvj_`Ivp{>nvWFtGb;FT&xu-HFpz2DQ` z0Rk5?T&t%1C6NE#(0@GSU*$KM#z<#pWM`w*&^~^jH#0li#AkBHK`i>S5XYc@qO`&7 zUn{NGfBtd(Xu4v)9~~>`*UbbpyQ(*q+;?%)Ijw&JGz<>139q5q^FFD4h78?Asy@T^0#6QPN#Y zk9A!W`scE))L*A2tD*By#F@Ibo>cSvmLg0wBgAXH!RfHAL!Gjre*x=6%xk1h?W}>& z<;PWi(o6Xlg34UzUqmYZ4JubyMOg}*yc0}7TI`uRN&O}8&Dd`uWfMhb=ILY zFyIa90UW+#>mc#xa42Vrhjr$yUei-{*)dx%#Dv`2KwtE z8&3`WVK()nno=}Et}$8&CcRR1b0%Lb>gmL!Tcs2ZZ-#nG`6CeAeCUs|HV*i{CHe3R zL~GQ_f;cX}$mVr>vU7l#!&h!+;DfmNV-mF~ud4p|)ll6?&Z}{^?t8g?0n$|%1+-Y3 z$d{^6A<$LOrSp;7-3&=Al}*7{s8VhYFhU4rQd6cfnL|~&p}p^xs?@tF zzk>QtgnpGhy}%08jC}f&J=tBzBj5MN+?cZL^YX-~AgI$)?*|Z+dgwQRS~TDUln8Y3 zY+ba!QR~UU+zFs~ySkmf2_8zA6mCRRC{v}}0rJ;Wr%SeIJ zW?v__!p`1I@c@6G2L8+jyw(i<(?RMpLjQ8hj7v2$=9qH)D==gXO5+(7;$Mjz&kX&m zSTGy4sahb_E(E)cVyZGoimOuovq1B+L;q@KJ$xp(n{o6oU%-TVV8Gc>tE2T(DTjY{ zdZh6?n%-qloNJu{XQk1PYwP*Cn|4-8)WihT@M-yaK27~Pgt!&espZb41|gC5_x3uc zxnSW0C~`J=uAX&!7!I^>I;v3(91H=NFgm^cniS@&p-(v*^A)Ihzfn?dab-=)3kICE zZhaZZ3xZ{sE`zj)j^)dplO1O$Rxa;WhRjW&>xSH^0cYrxC5DB|n{;O~ z8T}*FL)L0^(0P$0`PWd!pJO$`wV2{@MF!3F+lmQFz?-|xkB4fvbSAgx5FfE>xJ#%%Gnl0Y|GNMy@EBZOi`RDNzXO|At&{EI=_$__+?P2j|o|!?rf(rdsGXVeJ$%mYv|$txyVaA3T|RDV;=!Q{TC>iKFN(RhV)QiG3-v=2g<;d2Qx zGNK0u`~-7lfsskY*F0D!kB_?;y*Tz^4T9xQGBV{lBHSn$V=2}mcAUW)#B@A-{^8ZERBt!=BQBJ z%U2Pju=*2j(-zmdyn`*lL0!1~GfVgq7heJ9x8w)vBuhsa?8aTpY-oSO0Hha?fwQSp z_pmOjj$>h{YYNiqUagqXgBh3po-Dd<>71r59XimCTDNl1HGnDB_DhQYN{HjDLjTni zx`&4fwBHOV=DhPYq5oPUqx3g-Gd~q>;-VyqrV41LD+yjr7DbP9SD*QyKaP?%UoMlx8Hx-cuk zP%>a91;cnB$@rfKnbsmJgU}Z`C4TA9p>`1ZA_t*m53>&bmmnHn4*jo?ArBWB=>M!4 zh`t*7Un9!SZhUWNrI3xo&(~YK@i#!(H$(qhKqJIYq^{~@SffL!s`_J0H_?hE}N+d6zNUI*G}j5PQ^ z0pL$V|7R>a7H=q{&GF}<{|lz>hFl%O2f8XQz-u+S=VC_R;{vTS+ zfP)N-Pa4$rwXtoD}<#cn)7Gs2JQwlr_s#`JZ7rQFp;kVyqIy$922V-&|qay1!7~5 zlJP5F0#zAj9cS72SHxNbS}WyNv0qZ4(gK;mWJ8r|jcA2{mwc6mv{AD>D57HA`iRq$ zM$H1`gJu*YtZR&1sSglU+&uSXQdn&SC2YB5oE6x@A(eS-fB^qQew;SF7TkI&&V`g^ zCl^oWK-ESIrZc$-k6*HU0ex74aQZHCLUR@uG}PR6x0=#Rf{~F`+y-CS+>%H3=DxhH zg_+#iWk77nL>_`gwQ6Mw4|lrODWUPCbyBGPM$I9L3YS1mqZ$bdnhwm@qk&>W31gIk z8M6;<>}=u!5<`qI+O(Brh)5n96b4bSutG4ir8JewSM!yr0Ev(wta`Y1!dnZ6V@sOs zF6;yTKiED0*{Q&q*0_Jk`1nxh|NF6SB1Y85x`|mW|G(}ge>VdsCtYd=Mw5g-GITfw zE47m(4(8@z1d2uwH50K{U9NUU5UO1SB;5*v!RaAAGg7kzYPNyum>;P*lG5&Qfcz|f zE)rX2NopQqP<9GIsOC#vnJ$%CPJFg;3P_F?$J;l;sRg>Qg;LleU07}hAdazTSHZp5 z;O;UFQ@cre7bfkF#DvM1+5_=m)t(4KwU=PftYVpQRvm-ikB#2jIC`tS!8NdV9|WO# z9G)CQ9%JQpOoU?HVPE0qeukU$S+uhx>Z<)EzDqYa0Ey@ZyC4teRq8*z+i5EYoTfx;vwEABM8-U0ZO+6d3|M4Ze~xX203$Yy<;?V`>>EJ$CCAXIAvg(jUv#z|+sSR0}+;3VRp~z;sRa?nR;Ekj0KiYV*3`=-fe=UbIP1d%%xXFUMNsE1?^zOavavv?(^q~O6E%V*X{Ww9W0&KZz^%}E zrpf<|#fThBbf17Xj7Jw3l@&%wgQ^Sg9y!9O3-K$_7e>*J<-y@aU4)lVU5uwJ!_j#E zeRf(Vb>pN>k1=r@`B$chnUxs*KGc(i0oPyS#r-_I8@#4VhZlF@IGX+YDa0|DyYGL3 zXKFoa3kC301fd!hc4-Ab2@=h3mH&u<EpFV_ zorK35z_7obuhd`*6e}D|O|{9sio4OpPQC1G2(0ZaL_~9;9agk-jEtnB-B}t5xyb@M zBn(}!i;Y6YX%Z9P1niX1XQI91V`x@SIjS7sKg?s=PMpRsz=ZFgcF07F7FBlm?R{%jU<&BJp z)RQ_I2H`FN>mI$;>30iLotP?F$<7K5!~Nn+ZYF`DE!EIv!3P=64Gnm5D0t-%W3`Z< z3_zW1SWPr4^%8BYy6QB$79AYTfw@(idNCs$b-_{CewE~x8laWznI&=lFt+JRPy-pJ zGMY~pm@`ADn&oyYm#w2m0AG?#Y<2PWYLO}N3hLMXW$=WDA7YTI*Wk@eF2)25zbA+x zUxXhgpsZZ6+G7nR;Kr~DgKNyZDIObYRAjq-2wggKqMd{k1Yj`dLO1+JgkKd=BD$xG zAXH;geEL6EJce-gdNXkv7a}}EL^r!iNz&Vys1Z@UmXQwi+P=@FHXt4~tsn^1gdow1 zh{eWdB7I=~HYovB)u?NNdQzj#Z8MryX83|k8D!I~+ya5=&X79N!H~qoTLWoe%0>jC z+9ZfHQ&@bQDNg`XwokFC&AN;!DdQ4dMsEA@wX*3_!Frj&%F~Vsij*UDC?MUr^faV{ zOS=L?n<7?EM-rIy3)8_Bon2QW9qif}xiH44Yw!~^KL2r*5{CGpb~}e>t|H>1$YUQ|dqH2hIlC=YJb{0^S zit1KoKdeDT`%1oc(JQY)8d&^l1fhBjo{(XBNR(L2~+sMl)JUniu$ zUX%XlBsCHs`cvmd3Y3Asrd?tU6F1 zB#yo^$uLV{p3PMsl5DYZ&9Q~3oDVaDmZ>DPA3-u?>Z1rk^)W$~E}ODQnARHbgI6CH zklQs#ZYIJt#uWm~xrrLj&&E98^{oNT#aDoZPi%Ezt7RrPdP#;Ah9$AvYAl_?M1NyR z&i>{dtWU>ffww6?B_0o4klI7Q#tYmoDCon1`wa9N2&)-64ov#=n%20DM4mZXCda1e z!C@TSHNupPOjrwJF^8o_yg_7__zq!EXM?P;4gU!N7|flAPP)T6sO|)IwC7z2LUp$k zm40N3Lft76W)<;CDexXs;50MBPYFmne>5(RZ=Xgwsrd{nt7pe3S`}`n;~o7o;v<)OE={`st1u-KxbeNd>;FD^@BMC7%%_cS*ssFIur?d?@R zL|Q9#q9J}HSvsjZ!!qDL0JP6eaS;hjY$^3)q=7R(K@h5+3Z`^f3IeNtCcoP;_mxR1 z`_|7H>dlrIrRo=mMxB3&AXLA?(@q;%iu5bo1R~|D`*jRDJ%@x}OOD^@9J%%Ab-Hn2 zW6C?##>6P>IFb1+NW)%*gF<3xvObO&I?Mp)Of)cr&_YJDPK#28>4&DqjQTA~N?_>k zgn;&HFC99|GW7S%H~1eQ@DC^moctq#P(2`IrOSqDGE1bVy=mzNiABeskPe>yS@Qlx z=M{4Xwo?QIr>(iv;I%nHKNuM62rE6GiUyg9AXGc!2@1-lD3X=f zAfpW&@vaY7aOgUvc0ndI%Phe#TVoJC*Hk*$`LP^o4q(XaxrEKm)=6p}e&tZ$jJ`NO z4ZqH{f|_EUcKIM3!?;6WBBkad9mFg^5UPa)217HzIx^C#8AnFs2p^qr<^BezcV*?6 zbS9HtSvjFMqZT16n9WLQy_uaCm7;cKEGn>A@OQ92;{0xeqZ-&9FQM8)z|&=en=~4o zELv|*N$$WlbS@RsUXsZ5)ZTat)jslD%Sva}NZjKR(e;%{3o-7?Fj2$rhZKm!{s=;K z0G?Lcv1rkD=J*AYG2R||N!b|*+F2kEHrA%f~q zgNpXkcvG>ehe=vH=bBaJwG5~#w{n|}td2k|s(B=WP#q;G^kj(zYNbBc5~F$~4oE1W zaG+O9BwMe}remWjVd#e?p=@OF@dBAPke87No&>dy>{k9_+Y8+M>6BI;JcW|4VdDn( z5pb=b{cOee-24*9=RTr_+j6>fkQmGJnm5%4LRuudY{fYvB(}3La&cDu%t>)R8ZV(b zM!?f$gOJsXi}SIP+<|TAJPO}&k~o+a*v?V%S*EfR?s_i znAG4xJ-sIy@8sGyB-TUZtaOHBc~e72a=cQ=X>Yuy9G`}Ck>f$3ewCrV@*k!i#FKsT zK6AQ|(n0yq`INacByliz=8mLOoe8Xv*Rv47mqv<6@7N+xPcj+`(J1t@rL1#ISxE|g zwWPK4LE|AS)*!u8p`VLbROLJbp*mks=&r{CrR$X=HBLKZ7pYQfHJ){XC#&(~rpXXh zQ1=Zk{HP@_ko*^#{M;Vs?alI{M=X4Dh()&M3`x)BE)wAOdM_PXXQw|G1E6eHI8VlV zsGcHO(q+L2&9y!eMPHfJkabUGsCONN7&VLtaBT!ZsPcH)(VqA<*IL&!qXJpbkh#N9 zFPzH6aD-Ey7>e|M{z~b?7uYTE;fyK*KB300py{mf1-8ax0-*Ozs?%$^yQ@fb)*OWP-~#175Z&nBP0PZ1*QB%xd;0x|pHc=C9>j zfyz5v_9iBXth@cXie%KOh9FdvEXiz7kZhS$AhVr;_yVOgR5Sz8)rAaF3~81P1gx&X z673HSNsG0C+K3qM5V1dO;_CvjKU`$nWV2+T{b34kp}ItV8~a0bDz@xWmoj@_nM4>x zCq~)JBuA`BGtZBT2${jmPFpcP4JqK!(-DN~8G`O|PbXhQ>8(y7=qOVMv*bT2?*lB2Z4x&-HYY~L% zxp-OuU@1wR@p%IId<~g98}h8Vzhwi%(cI9SsKJ2+1_*eFL<=Fh6&dTTdI1n8FzAI+ zUMGXrTLxXne1kilo)-Zx_;WpiP`y~FNS6(fWQ8<-*%%6L5U7`EsA&uZE%Mc3C}@gp z*;)u*N_2@9f@C!6WylcM2xV;*xDnB`3NYDP1x5_}%m8u|l0x-zJRt?$*6%kXIiZDK zA-OtRC~sTn7Ut_}6}T0t;PWdHgz8m-D_u54ku1&UUGRo}_G*E8jfN5p6XV+)L~};{ zS|*q0;VG&rX^~&Bw7pJX=i>?NuSXE7H!uoZpa+sHpX4GPUg;c(apFP>m*vIO(bmtm zGwO{f5sYQ!wC0NDmv0hUI(Qo```^qgR6uXROQ_x|;OVkK$ojZ5XKMWp6o`g@CxTGDOGt|-XLY3EV~g8&3*dV+VD3`1PRjy-=E|*|_xGAJ+r7p& z1&)gJBBWvFSlotKIi8ObdY9M*f;ih_-P`oXOKz_B3UM6_j+*OzNSEe%ztrV6QSkK#$jt)VuAd^kqfhZ9D2?U|KQ}XL+Ka0|1W{ys5Pbr%wm|84}K`XrvzGYNnlRk=rUd@7csO;lN-PfK$53VjCYAdFY&x5&BrED}K0 z=MaSI^MXZJi^aB8Yd_@f-Y?V_G^#HOsxN6&x#{ynm2F+qd|6O@#h_?i(|i@N$kx>T zdQI~+0d8l&(xEY{?e7JEolJcl@7T|hEa|df1P{NNh@!7dYA6)nVi;f3d>awq-FFa# z>brQ_X%z8m-nFi2z9*31*O0lx!OlT*1%o-#gF$4%RrHxYH$UmB%m(-`52zm?Lqe5* zD0n)n?Aa>+NC0%Jw-luALkcMWF@jM2M8MJ_94%ldlN1}H)=vfaX9if-G;|Z_pqJwK zbAf6nO`{_#e}Qzcl9sVf6zZ2q1$Dnd5UTqHm6l18Abd5JVXjdI0QqZy{Edc`fgjg( z8``-*;qjQ?3e4{e%+ru{y5lhz<>9?3&Of*dH^B*LS;xs1IT~49whkBM2FqhdTw3P_ zv7;}Jc3u;UcV65PoP5cz94b284eF+x-@&Hc8xFIMibUDrHP zu&R0cZRX7Cnnqn}YwOoqtJpQOhK7@Q0w-2>az5u$IO%8VwGFr)B^3H`rKst{(TSYj zOWTOhs6XJnc_QbJ_?3Jj=K-Y1iJU*-B~*XLlX`U(ns)~^VYlY%Y`XSlYj3juc5`h{ zQ?Z%YbIc4uPW}8vn7q}eek$znect=>&!m{>Yo-Wn~FSQi|Sv96%$mu!^lGd9#i7#--z)J6NAkR_&$4!#9*`8jyF3Y zPQGrTX5tO|yz*OL)z$8>t9BuRzA`B@!X+k~S&}DKs4>|@h0JEYE`GOjkOrR2MG&fa zf+<}#1(77-iA=&%0y1BNBpPiNAgz@?G1@GYES>aSVwtcA0Ct|SE8ekxD_PQI!HB_e zw?q_uWzxjHvOB|0qs<(cA7C>)TFOa zl1r?3!z|AN@vs%IN0OCsmA5cqic23n^*EH2z_ERWfKHBGW;wPW^KF|~$o3JqKMDc| z4?qyA1BI+~*-%YpiFjDE&Oriou!hR@W2TYl{~>I`9L6pWTMRo*;f@SD4iRd@&SAjW zbp7axNF9PK38tMx5lzz$ldWmz>4vAqv~w7eLUlNv92C2_W*mX!gl0QZa&8b{;QKX$>W&ofzllP(z^G^f7sQ)6Nx^wv52e zM^4QA`UU&Z8hdUPxV}z~RcZ;>_8jdErPq4;ke+OAL%PTC(Jx#wDc>AG2WVdHmQlw5 zB{)awwF--DH^)k09n6c20mm^5Z8yi`B~&K}c)Dy5lHmA~{0WlWfotoUm`9qN4jwN6ru1*hQf2fsvS)s2qYWgt+qmn>!5DvO19dmlBjoCcNi^d zC9tC9PD6m35~K*d%eupgKt0LKrlDn(ly$l(i>HiWojAUi9rg@~Y-fN*KpvclbVx3q zut^-R&cX|bA3_kSv+=a!8;j86TV!BC$Hv(ib&k%mTC%LsS#mlpBDB@AaIS!!XFyvm z3+E#i*_x_HTNc&|aC1R!CzG>-(( zJ&GVy1%XQ3EhV|l-O{3fy9Rt~c1xK*wp%*JtlPa?I!8?AJ9}fM#$Aq~E#aA!80Tei5egeRIsZJ{$WIf1 z!QAj8&nNYCl!Z2Y1_GS>m4eg%iGslw3Wc#cULnO_X^Q97${h{JvF4cq(9SuHi5m7Q zq(fwB|88l1^(-Wymd{3j?R3GSm(eU(G_A2UlI4%EsHkf+G0zcVuGPc{%OBx_TUq{G zDgJq;_$?fze7=BnXZ#D0K8kx$MMS@GSpG3sjZ$|v zSfj^F1n8w2C_AGZ89HL!PEN+WOh96FP&XpRJ6v?_O?=%|bnSJv8@^mJP}km!w@|%8 ze(N)X3ASQ&3vu+7Nl;wT-YVH*yAO<5$Ysbya) zAg|LPiRO;iBdwK0(MWHQES)4?Z&~q10NBaToA4g0H%pduSumn&z9kVwUzs$qYrd6X zr@7;8h(_h!jv!R;z|#)9EJY-v&D`-$fqa*S%w37@DosJXjgPm9?V{z16DMEbH*@7` z=o*HFm=POZ`^{@`&gb4T^?S#CIxUA|u%>bI1urFNI9Bk2aw_>)s|!otEfjXL^ajh) z_XxmXF1?LaQ13-Xui0Im^#Oy6+m&sMqVoNqB)8W{<6#Sb z2C`yYVohoaQe;iKlNhx%iMxqSYf^Vi>MrC-FelxOXquCl zY|TkG8j&>Sq)#F#RQKSCzSzy2^eH4KNd2cJSG$ZX9lFU%{b!i3t2ybjNQJC?4gt2Q z1y{OkiXvG}Rrdt}`Jx8N-6axxI`_t6e8o4`(Zx66JID55j-1Qs#l`sIS1#P6Vo5j_cKaDs(x|i0+u` zK{_sBYl%3vJ>s|}y-9lHOH##7j^1oJ`egy&VVZ__c9)+Ym)8kjpQACg^@{&~?$$zmVkaocJZu6SVZN5Dkvpk04aP793hjv(R{Z z(oH#`3#i{{1iuvoztafhc7+7ss9M&E|M!yX4<;9D*4Cvs{`^sryVvXiq@!k>{I~Q+ z^(Q2tZhuA)s=o*pT{jln*4lEpsF*UNw&Z1Z2EFhN$;q{g97*u19%)O(bD6$ zN(Hc@{}dG6EBY^_qoT*4gl#TBJ%r3)#=jBZj(yxzWJRCkw=u(-J9YwCsAg*5$lRej zC#T_D;qNRkyBHYO9v%nUCAjEfeP6-a-F}J0!*}3$!<_znjwoII=_NG_`N7!c7^sbN zvjuHCN0tuVYL(y|0nkUlwp^~73ve)D9)eJ%B(FXKw&lE_j#WjiM^Nkef?!cPU(PT2K0)7`rEn=S5FOFlkR(~3Z2Fr*m310?MyAtPgpB1+s2fCH2d@-T%eIT_P zUP84yOUAieAqPOAHasY9B;`!H+`_ zs(taaQbrQAI%)rkklIgx_t(IYlxb#LDLX)54m2>WhTVe@n;<&}3vj3GyvoXs0|2|W zIRx*aI#jZx%YqRcIxG=IUzya91&1??8+MOC1gd`|0-OfL(^jAObth{z?Dh!c5)GNV zAMJlp?89f#eJ#l|9J9C8ymPYaGRNGl(s|z~^O}z>>7|WW+L9Mk=HAh0_Ot=_yoeEP z3>}_}BRwt3I4xdg@w=AA;jQJ4WkXCMgGnSw<(9t(~)UfX5nXX$)HlJ9Jt zuk$i<-O;Gd>8*K=0IxQ{YcKzv591?x1x*25XlawsRuwbSaStSG9e`ErED~@eh@#cPC%NIF9j^jNSQeQ*4ME z<>hETMNt{vi28|zQaCTM5; z@>cIasY-{7;MQT%Znt^iSc~_qL%&Wvv_|f?YoxP@UQp-az3F~?9)2ae-=2>Yalc)Q zmr$+4llqaK^gFssb`$i6(-Ef^<1KW*ZUkA`+mW4adO~f9TkLAn_OdN@uvpJ&=~g;^ zNy@sWKcarlTPOIfU1&%49(EiKPG-d>4$)Z=`>l3}ek1397ZAtbV?Bkk`&dtTv)`Z@?PsuT_l}EPZ&8`V8ST>#71KJUQwZa$^IB!g9}-4nux zX82_Z``O{Vo*HnA0E=8WM%xRM%xhMoah<2=1<_jh6AD8;y%-@U?U1&cj`Mk_0(DC`s<|!&R^qcY=)L zCmSl7E?j)&t;9td;)Bw@zCngQ0(-px4CW5T0$~fSq@D^`NWd_HP>o2& z^wwmAlBGzPg?C=EkDBaVR-^?q~Mo|(JWsM@&6}+`-8zfW3Wa44T?o!Le+k`-NuVoeKs3m>ql7(N@0D%fmA_$c) z=yZiiO1#4J&g7{BZE0^O} z2tmIk5k+5_)KJiGWfyO^GUBybXwuZr!2b*WIj@pu0 zGHQv)5cE2!oiv1cJ>Hv!pf})GvLWb=ND)KOoA3f3Ks;#(x*7};25f7^d;3$5KtEkBy&!LWNXdXJSXyTfx2Bo zMO)gsy0Q7w9Rl_V4VE~6x>M3(ZJ_Q#jCX*{pYG=C9GO3T)3(VcB?ISA_uws5pOWAD z_7AH;#7?L_&D?!u(h#3EeMU0GN;K1^sD#flLz1uk=a2vneI7xmz94AQWm5`?X$~J> z6p$}zki^;2myy;=oQULCBugi8-?r8NDgf*t@-@7N>R!o`E(=BsB41BL(N`u-Q~=*# z*g0GJCZbWfZy^ZPxAC;i&r;fl68gn_M20G$Mtu*s5_s}`DWa1n-?cpX0rL&+5E6a}RN%so5Ws&<3Qm^|U951kiGM60KhYp< zGlZWaHlZRv6X4E@eBV~&=K!#c`wP5>>X(uwT^5XJ++QW4=qr;NHtzil<1>U`BLWrr z4T4bp7Ejx(#GllxzZ1ycYslQ;Xx27wht3Occ*oBlkRhSUe-u2ORsNx^@&f{(ds|CE z>Q6`k<$p#1=QaULzT<}!8%xVy1^90Uc=|hj{w`4Mr1h1Fj;wr;Vb?o;{()3b_fG_& z`WK#-uOvbE+IGj!Ljw744JjIvcl>DD?XK|*xPFFeCp>{I$J;8Vo1N(ihUmK3>`8vx zTWp#e#rj&G)_u-P#ol(QW40u5!_8Q};9iigG~5iVZPj|I4%?u;_-2U{W`f4V8nupR z$$Rj#b+_|U*a>+*PT%tFL(Bc>9zg-rb}xpL&S*boBR<8e^fIbwYc{|Q+GQ)bf4&U% zO1m|FTE3oNz8oL@#^P(uSdWFy2zLesgmsy6eq(+~Dw>%_GJ6_7+dQ$p7Q z`c5Rzk6^!v%6OQ4W}EuUw)K@A)K6k!x($8gk?J41Z*aVbuLtLfWN-C)@FyJR<`Ku> zW1V3K3?h$phG6-01I8oR8B_{ljQQAn1fg0W{Xm-#sPkpkZcPXa1!R#1$#Eto-YL;m zDaI-p((0;FsMFS4!{#kd%i~**_<|CRyV|g-&wp_HQXG`*1>rJ<$vEfmGh|}M<#%Q< zHY?bI@xNMYW@oe@&7{`4D5uyYV!KLB%PCR2$t%}BZ%x_yIw4dWbtzR*IT*29YNNk) zDPI$@%Q<|<4eXJ_r>KJzW!Qict1j+^EN0ZMU~)8sH|;Kqh4<|<@1;Wz*hRr^%s2R0 z+tjg{E>}H00&TN9c#ICS2ZB)TDJ_yNn+9VSkv?Ph!S)iUy){ cLd&i?ykG9Admf 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 L3|)ve)i~t8e|sUC delta 5426 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 a{mb=jKn~C~7>!bnJZODNwI5@g>i#boNFHkd delta 2868 zcmc&$X>c6H72c68Tf5e-Y{{#YCD|TiOO_Q&vVu))ViFKwK*!pNJw`s(!|YD)?ntvU zo7X+EO`-^MT2N3xb6+VcMHP?~A+3mU zqw=S>`@Qe``n}h0y7#*WwMRoZow#mbSn$e`9mxB!(LoY zz&;#1^NmI*-#P&oN~^mukw2VYkb*BN$H@r%k^)Z1v(C700g>`e`9=BW{3*ovGBV;d z?StnKWm2~Ecf>A22qwE=Or6Jc@^`*QhOe_!(z zxI*>;1)IXL99&}b64`U+m^`CDE+05^_mZ+Ar9u&2ty@r7$#b`9^|VPP zi5rytM)}@(o!U*5L<2dAe>45|j>NIgqu3K=8LbocyZ8%P+LlQyS!aCY0+BXq8+x&=j5y_-@&E+Hz?Rtd!px z>XM%wjLWx%R?W=yUPZi5_6>K)jYA(1zb5w%FOgRbt&|TB_s710D9rOg1^%Y2OAcyR zOMSRW@}w@$A8uMPz2CPHf$1*90wsN$o#zSs7PNm_hjl(cwpEL-`|$^tb{v z&IDkTBv|R5qYCzfd|=B8?Z@g9ASY@6M83UcY4b5$q1uxQ_7slOJ#)0wyY+M}_H^0* zjPgHQnlMh)w8!Lkww*NjQ#2)wXx8_I=L=@yO~>J93ilk2MhzM~tH3xsuZ%B{aX#Ny zNc*li&EoJPnp5y|axSm};ZJ+YdM_#O%j8}7pVZ09j;|=htAq$=9AOE^_c;7QS$~OR zz9U~{)Mf&}TUeN`<1sjn=A=$NeNE9`$C1J>`hX1szf$lT$2Re) z00Fd+9v--JA^Uk3`<*?G59;K4;Zl`D^ifl9f<8uokdGGcP zO_RsAH?~(*QCK!h2RWF9^Q1AK;rmR7x6frf&zOMOGO}ZNTQwo)kWxm#99l#{D!(aMq3B}n zFpsvVL0@NPgh%0oL69Z?dhHs)k}FYDwWrUX>|u}8)o?g$^CPJXbXRhuuHcP?MH z01;EhEar_vy#m+SL7`|CISXuzuHZt0w00&Y7b<5xWyFKDa0G@^PAjey=5arO45Ke% z3>pKcXq}GTF4t# z$Zn3=wbHuIv>k4xF`P=yixnk|-&YYgclN>(f>E*Tbi##lqn|3v}=wz=pwr<3Y zPonu;v%E93$%}R+HZMcl0VAAa_>Egsx8-O^8ZlKMhc185ayhgsYb`I}$83Hfz`Kh> z2im5LS~|E7znc~Eja?mDr;McodIiP1G+eiZ#Gf>t>; zbkih;eKWK8J@TqlTWc@6@b0WsK=lfT)o4sXpFEOk?fN9n4;b^n+JkkcV%cyqny}@f zDw_{)iZ!xs_mYOSv6>Arh^`=Q)O{?m;PzAq+kP% S#vH0S(oR#*&)^uOd;SgG(~krI diff --git a/docs/build/doctrees/creating-a-cordapp.doctree b/docs/build/doctrees/creating-a-cordapp.doctree index 4666893ba48125f1c74ca749b0030a668a450a32..b78077a7aec423e876764628f3ccddfeacee9327 100644 GIT binary patch delta 730 zcmaF5n`!HArU_{inxEuK7) zQF!u0#*^W~5VOJRi&E1wi%W_s3zaiCL!lA{#kxqAs$_75^1-asg;=SY!5u1qZsBAW z=JS(ZGs{ZoXNZQ1lokVBsGDAtn39vK3sJh6jYXVMKqWDhH7_w2=y2EALbnXg$-1o0 z;vgS8=NGwvee4AH@#Hqv09`=9Gc9DCEGHf%m=FN=O)$jw9;Hc}H;OtliGqy9 zkebXbA#DW;F?2l{9T8?g;lzSW{k+r?J#Z+2$W%R$ul1q6m^?>PVseXwqzE=6CU2HF zDy@&(kj=9tU)hK%CuTUsW;n!VIL2nU#um+DVqnPNm^>>?mCpyLRZmYL9^$mgJ>gP< zm=4$xZZg>-+=tPAa%;FECtQB>_VD@aJoZxSqngvVMhGqpt+L)AKLCH delta 862 zcmdnGo9XFprU_}uA`A=+rNx6v-Og&ckn!a%v?{GyaZh*(i- zdS-D+QDq@#M+6^Gs<)LI@<9T2z*qoSIRZl$lqOT9lWVGx69x z36M;3QEDPseWC)y)Ph2h$%`13CO=?2Ir#&#n2T}-XQ(hX3so|>Liu3U=|Zei&EO6d z!nAA>^LcS0m`%Egx-gscGejq!W0u>@#v;lnpr07ZnwOXhbhK-1p<9N?WNlVwF_06T z5l(c@FLFsND45*J8h}G;^BdMMex}8YlV!xCgcE`x{`M$M@`U<(^LkNdrg~AJu~;M% z;xk&k88a+1o@dx(v}M@U7JkqOWdS(~9EzBxWpqS10F6p4$kfkEEztw}OAizjdeA^9 z)&t4uLV3Et2+#$_04q2OCTB>ff_;H$?&O6MN0rS9o4mPE@|BIKN@9jnY=%Q@hGT4o zYi!XhCI*HK&dCj7s(}$eBlPqX;xTQoQXtjQ5I4UHD`9k>93QSIh~dr2jgk_RzlOo23Vm)6VK(1X9Xb5+I&>mNiIDD{BFWGR%n2(9bZN ItTcBr0GM4M<^TWy diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 7d3972573c74cddbc13b3a6e6bc291c05ede4968..52d098da5ced2c12c1920b4b852f476267be1292 100644 GIT binary patch literal 138647 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%0Dy1~qf)}x7Q5@HT_t>7QIZL-N52ui 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 literal 112213 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 diff --git a/docs/build/doctrees/getting-set-up-fault-finding.doctree b/docs/build/doctrees/getting-set-up-fault-finding.doctree index 634532cba5de2c6f9cfe76db6bc18dd346397675..5d1e4d6f5bfa7e63cfea07eaee5d082047061a15 100644 GIT binary patch literal 21954 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 AMF0Q* literal 18784 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 diff --git a/docs/build/doctrees/getting-set-up.doctree b/docs/build/doctrees/getting-set-up.doctree index 185971640cd14458b619b0f792154e5a88024c1a..d102f89a7e1c4bc1b890a55639cf072053549385 100644 GIT binary patch literal 20321 zcmeHP2Y4LC^*6?rrL!#;S_n2QqF7F>J4yn?Nt_rA0vkkvS#pFZ=hfXxv!}b;o7p|d zO0o$gAu%bW_ufeFy^-EY@4b=Udr$tq-<#blk_aRYd?9~-pFZv0?97`tZ{EB%Z|3r) z-H+#*ex#Qrdiij1aLJM-Q+^x= zjVUMcW2e>BePhLblm?C1uhoL8UNKhe!|&-Zt_2O^4I+_Dt+ooY^2&j>XLJ8WpFF^qPHw=A;ShPH4O``d_=RcmzPq z_$CU%1~6=($C@(}cn(IR*Nqhi@VSkiUcay9u8Ud|Q5?jeYuG4N{K-fklITO-!KP;- zzf||5$eRK&4;$BqyMyJHF(7!!(m)?E=H@Cs$l|fJzRj4s-fP9-B*xbWW4{z}5c!>Z36Ob0rGIT^v6Y)~uQ{`TNDs(!aGosXl{fV&d-k7ToPjLNy| zWG+T59wRarj#}yVr89A?TIH^5547EKNUe6)%%6qh)S$cE8{r%ruhzK3ZN%&hjBo}< zEG{FMfsrX)oqI$|ec&Y29|848Nc~M}y*toGNe{Q&{;~>c70^>} z9@n><&)kt;CQ)xO8*etHeBNE+_F;-J8M>gBx_xQ+NyV+0;({B22MYCI z+Ar)Db}d|VYC%X=z@mu?wsxUCRGEXkiDG@SyCU|cI9vJ@cSVYXKGn^6acqK#Rt#Ra zL!$3E?Dkh$P1cL_Y2)sSa?Oh(yq`Yq_D^`_X+usrW86KMlYXahy;W`S+~v0ZoyYZE zRG-&!mtnp6`mVc{0$941^)|IsfgX1oo=*@kY0b~+yMr9t6Mg2e%FEgw%@&MZ+h?hQ z+M-TUC#zH3<FT$ zSLpK+y%Pv1_O`t>;k72_1HjyPV8*7(>0QA1{6t?sj3*CTvgBUAqr4g40X?z6JYjaK%)SER_ikxN`MFFJ97N-?arUi{kD~b)O#NbZP zR2&~~6SW{x0zHJd%x$m5Dr`+D2SP3Az+i92Z`M4>Gp{k{gp*FJd=!<#Is|J)mUZMz z__c6$3#1vOQLW}oqDunuoLU$=z83|)A*86)Y=$Ow=D=}|KRJo_C>Kofw=)^m0K?&z zsa8<&Iq^~6+3n4746*WJfe(guyjm2Bm@^m%h7dHIrU^0PI;ew+j%R|%cPcGVFmx)x z7_ixURg)1faUH{4?}ZdjIa!#&mLfr+~1Ch8(AsNIRam%Qaf^nMlp-H?65W~Evu?B!vkVOpq`O;E=KL0J9Yu{2E>RHPQ);b zu&DQl-EyJWEzVt395=TX3bV7bd8Lc;`x8TDlurc@R3YC6$1(sDN>5Hd$$j`v`nBI#WT_S{tE#e(zJttXDvP2cpw3-$tG47ow_cmqcu3mBs#+AMZZi# zh{I?cXcI`s3#kX608%lhTOi#`qGw6EvjO-&BE#HVyYGtLyXzpq{uH;*cBmIUxfLaR`xOu!afiXV;sQnkpMV)~54@~rfNWTA49PR4yTNC&bTjcUY zUy<=j>S0)0YK7P$>ofU&rL{#Kmgt9b+zdgSXG0J>^*(fWdAB)o zRS(eA9BG4k1m?D<{UbrpMVI7O)>O?<={gtfi0mC6|OhLc*s&twc(3BZM zn<8h256>fPQXx8LH)aAfllSQc^e28SvUFy+A!K!oO*Px(Bbuz`sB&1G=~yU-~czEd=FO%`-%VUX3^h zbZ|gaxL)v7bFfI}&=yXMC}p}IWfcZ+cQDqP*O+P{xFKkZ&fVe+S<7f>3kL}N(?E{+ zB$^+487 z2mPLr=w||V(Hl<^y`i8i6t%*$68&rr>-Ip$YK5DEz&2&&{nhFeC35~b9XU_j^mEm4 zubh9LLaZ&5^KVCIx8il9pAVY8Aki-*;cn$)u^bMiF+UzM{Thn#*9xa68dznFvl zD21|uBN#S)eiir1+W&B@s)zxKbfU9+ zP4M@E^0YH_o-`hEAevdRxBJ|LU-sCyhqjDRb?}q`lKm(h7=NURXd$F<#et(dFNi}l z;WhdOgQ?`5^K2{$J}Nqez|SZeharS{jF4CmLvc02EMT<7sUkKeWZ1KZ0sXS_%hPn- z@}hRo<5}HNqdj{NN|ym;u51=VM?|fA962D?g7aDPW8%Wef!Ew6|J@ZSa{46{QZHRZ z5sYPe;AM(|gO?}z6$dzi0g?YPj<_Z@>%<~>j)~ESJ4{q4~Tr#tYM4Qc(t5<9mL@46a5Cx$tGHbH%(?!z`k+ex3!B)eSe}qKrFdIZoM4+LG*WR zx3Bu49+0W8+6MGtOh8xbk6`E@P4veAR1wnq1#MA**CqPn?CTmxLE9JIIz)bh8aA|G zPT+@=MSrEFS!+$fynr^&ETOz}5d&P^MKB4l86O)PrH){;Te97-*|1fsI5lj~ z5>MGBcQTAnFlB-!tQ+q9)3!*_%G}j0EEJD;5vP%RZ4$_j6_O3G;m19MTp9vzqw5T} zo%o^Y&}&3Pn@LpZcqb{u=3e zSKzx}D>C)6ugkpbuXns`4n}`NozUxLe^agLc-ikk_gEjd?iH=S1zLYQ(cd9K|0hOd z7hpMRs-Uqq?^P-`I}C0wcj`)e5me9V@4~jYKGEOfsE@`x{&T^mzfYi6$GNMzA?Y7* z!ToU9T>-GnGbi#*=f8jjHZ##Q1TQbY#uZjL!2C2t#`FoFY(f?4JXt|gr0HfB4@v=;%kR95;*v$u<3@wnEF+wP`fHbEW0p(1g^5G$j{4ZhQs;)?u0WM5uQ2_1 zBxXPW=Bu`|DzR(ZKPD$tR@y4XN8pLbFykn+U11l@4@yX!$cFupcBi=Ck8B|Xf0)mM z`gXTnTEmWN2aU*Uj+oYIMqNjwqN9+E`4kYT{90M}6N|=j)7v$qe zz7OJ8>>d%UXbx#Rb%tPO5M+s@d$DDZI+<;^J51vY;yGv7&rjtg#I?PNpw*TP*|c>9 z*+AH>$VvO+SxC8bM%a6h?lW|U;r-4Y#b${WNsLJL1uV8UgGo%U&RzlyrY<@$SCWIu zbx?&J75lVwGR~l-V^+y5E#!>N84IqK3Zun)gXwR+X*7fA2Hdp`i8Gp+Q5GQA4y0Hjsy{ zu&OEyu7kf`usN{3$7UE6qL^mjyG&PnK>DprhN2eBa2fL1WbD3SYUwxX}qqjxuKT?49-xfYc z$L(;k~$~bI>mE)tib&mK$`s_QUXN#*&Hzoy5O$VHR`(I;X5QCC3&*agY;B$eEg+ad z9ySuDpphBuL3(V!<0)-xf~H3hqct+$W&$4vS$I+g9k6j&hGCP2_;cN+4LoHej?W?2 zwvu|^Ox}QX!z2#+?HyfTLCU#A{JWDSCg!*uj^jRQUdRyiHqIFWD3a_VHRJ@aZmiMa zw+)4~4igq|l&!&?HP~umOJvy^CYVw&a@B!*1S4Vd7TRp+%pTIodP@PNMq-2<55F8t z2IY1_O6*0`G;?yyl85_`>_41jm~w_Qvj#CNnlKnWvoj3LGp4#AbB>b|)|))P;7u?c z!}f)wI~;;)+ME;|Mf6%V&^&5Q;Q%7*0>x}b^5$$zbT6xkUw)48!9rF$J>%k0wi`Xb zC;wmgcc1f-CZ7qpq_K3_2ftJhR|wtI2e z!0NY!Krg{ZjQ?JEB!(eZD1&O+6Orl&(o3bvy=|4^IZ$u3?dgn2+LRo5p_63$K$J1& zitj!Toy8a-*Kn*b#M$Z4%xyK70c7vEWU1aqdRjQHyJyrJXS>n=BqsL-L=c0i(23b2 z{pYJGdK|tGV}AU60&d-ONw={1nKK@0VLB%SLfJwfqjb%hyRxf=sh|#HT)xy@Fxo5& z%uKQ#J@+ZRBt}W~d~vADNP_#OS`!kSE%S`1J<*#-u?g6^P$gO^>j;Uf0%bv`yUwIp zG|kG$#5Fa%B&IHP^Hl)_gd6YC$$fm@bupZ9m z=)ZyZJ~RZ)ufiiSkHG(oV~Nya9Q#PA`6yenxCfMK3sWyfSPgl#?F0{UFw#`118Cz! zNGrtwMeyj*C1>q+Mz%R_6GyRq=N>jc7j~b`y3LFs9$IYW&7;xTB5ZrL;INRm=VomC z7`7X|WpI2f`T`vvheu)_FPP=4DdHrV@NTA!pCGlKXlpIh#!r$DT>~>uMu|F3wDD8; zx>~gH`Po39Dh;TOpN6-@JY9b0eu0B&;-0tI9Y%sbg z$YocSMZjk@QsRp1gSh z8uj8Wvg?HcYa!n4CH^9*Fj`y&PGx828WaHA7vqtbm&n(A`zv}Nj*!mSS2r(}IxkD> z90v$D0af#I)KB506z0~tc?H2N*j+cTWbGgCQ$Hzg0Q`SOgqyyju70Xy+kA|o;Z^Ja zTjb`|cuCA_hz2Yr!4hb_R(=Zs&Fkd-w^icQvt3>#B?#>Ge2(5Is^$%-2O_@_kHowQ z|1+^dB&=AOzk6=pES2A4E7PD`g3ZZvI;{7P{~kSlcO?#qHzHbTzAy>jGJZJV`*PXV?HF!K8*jw zp2rz5&W}j-{-9#7pD`cBZ`?owSlH9`?poL|n3| z9Fh5?H2V}k_T%OnO6kaa8b7WWFk;tK*Pe zW;lM00GGppGIQqZd|#bqC88lbm~XIbsoyZ)F@LP)ojHwGy|kC>&in*rnAJ6vR=rtjvv6d7igK(*8 zDHVT3(97LEyB}tLEg)si!QC@~xN7D%QhHb!w<}DSeB_DLN=T<-2+EJlZ}D-TyAeaJ zx5Yt+jY<(V5PkDIRJzJN7`Yhc_X5lgyczke3PxG4nLkMJTE>RJ$N^T0L2_(l{wU?^ zNj+RiB{%n^RQZ#@TxmV!5*Lg4vs51Bdgx;0zewqtc{67Iieh(pE1n!V!~Bi!xfB#v z(cdkkpwT_a<{zv!AWcT1V9G4P{;9jBR0$%c9fQ|-)r{dCA7kzSBn`rJlfhoIl-0Q6 zyou6mP(cpv!6@0)?+*4dsaeK~%iW950ZPmHz9PL+%k<%wI@w)A4Tn33xE?{+*sMS~ zvdU~k4{o*TN5PmoD16nS;((N{ig0!|wk~UAawxlsS!~UY@K}j5*U5wjgV)VD?1MIJ zZnHmAK<%htRVuN!*FSL$7ZYfz;sYXg_F#9^sJ zueEHvG^m($d>O=I=$`lWD7?x&%C39Z#Pr-E&^1=2^tLH;2&!Ner4u5nBQl4g5J?{d zdAO_>?7aFoER6fj{08T*Vh+d0eaN%(X4^$aponTh2-+6yw?XMxYr;KjzB0q&GO;<5 zjh4tISB87+i8%`Yht)=$13nt5(Z}PCnG@BF+JxkxV{KU6v5|rexTWd@^;LD8H8F>( zCxPYEG1Vja7*@|}x$ApwX0w`kgY>Zx|KTEUqq%gn^as1drVgg}fZ_TpTy=#D5Zr-G d(?sSNR2?@C{)@YWi@D6P_>q_){6}2j{{WGP`M&@F delta 4773 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 l))p(8)Lk?@kgiy)qDT| diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index 879d83b5fbfa801f6ee1de974bc946d8d00f7889..dfb9f2be0805686e65c2136eae215b41b5067b54 100644 GIT binary patch delta 4932 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 J1Dc)K^grtVDarr< diff --git a/docs/build/doctrees/oracles.doctree b/docs/build/doctrees/oracles.doctree index 504a4b3a872a23c67e2acb06008e3566b688eecd..50043c50af9abc9c81dc16be269aeb44154f6066 100644 GIT binary patch literal 79141 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 Wjl^euA!QXrKM_AX^CWy?o$~)$v+?Qx literal 31701 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 delta 151 zcmaFV!SuX?X+ui0QPCSF28K|vw9K5;_{_ZG)S{Bi{Ji+oyu_rO)RdyPK*^3!?xMtU zxX`=F6PraD-%noNEGPT{DDBM<%AA=}T=Wsht}XgB`9`y@@Mkdl3y{oE$k549sxA6D hS)xTt;TupSw&**M3}q`yO#^BB0ap4GNR}q)0RZknHbwvd diff --git a/docs/build/doctrees/release-notes.doctree b/docs/build/doctrees/release-notes.doctree index 75c82dcfc56178753b31892d2ae2faa2bb9e9802..2860e474e098cd8aa7c509ee9d1871870b7c47e9 100644 GIT binary patch literal 130785 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 diff --git a/docs/build/doctrees/running-the-demos.doctree b/docs/build/doctrees/running-the-demos.doctree index 05895b65801939bf9fd3443199e22b9c3b940fd9..994fe60eff153f9bec08e71036bd6bf31cf23d1e 100644 GIT binary patch literal 80334 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Π*hF+}T=DPZ}fPKe+9f!04Sa8iVC6pzKF z)pwD@8?atvFhm-_i*N$is|x~&|j zpCAbW`6&WV{Y>CeZQwvZ$uN!W=K}o;1HJu9{-r=hiPI=a->;Cq?MnVNAVB7C5P0gh zf=*X5Nr_Z49frd4|DDeJd&&C;omaeyLO=n3q1ykWWcZWGPz6@bduUcN?*g7G8*Jn%tT_LW1`$2r|L`NI2x4=Y6=oDn6Vj9w+9^6rl%3e)J8VH(! zz*92?kyZ>AA5o0vw(cyQYqsP{=v*z^x*4UDa|6HKP5cm;+2PzX>%W(_{5C z&3UOB{E_VL#^l{fX5|>idJOOBuEZ^QxZa@+`kCS`7kYasv?`EKnCX48Iqmih_z3XS z^>$Gg4Z5E1^ysNf%nNV{#$%K8U6mz>YxRsUsz| zWeiCX8;g|`n8gO>1Y@ywUQcP$Is{9U$j&m0Bb`Sv)Wf%Q&(0R1jz(@UbqoSerSR*I z5XnNsYRsn9@LP`R)H%B(=MtSW*8&244asDw03K@qwe@RleB^eSq)*LlH`0yu3ujho z#Dk9>1fE(hNVN51u@OFA9I<}8T|-wZG&d`So8vS$x!s=ZpuR&^`*>ktm0{sQNWLG( z=ame9{0f9UhWW#KD&1$2$1j8PGhL+NN5i!l?bo=4J@M;v_5g zT9WJ5hU+uI<=jfGE=~bF2DF*?KbWN-8GVHvF}N13Rgg9d~T7_xG zu_0P_vqB}_+3?G&wlmEq2+vVXZkpy3kuIkBBoWccj{^}=8N&9rS9p$zDAPx~c8VnG zl}uk})TxL>Gd~T1r~XeM^t!1J0Ue|~jUDb2xYG?BhfK{5e`tvIX0@b6Nzh10#TiJ4 zy_toqzPhS4hyxL85qRoML7;67i;LKr4%(XSYPUKIIf3$Q1fDtvzc9nO9n0Iw@jAh9 zuEDTKIF7a)@|_Wgsrfz+>EN4pF|}q_=OYEA_9KAPhM>{hv*-x-HzNCP)lSugn)-`` z`t_Rn+-^r^P^TeFxQYNtHxT@alG##P$&@y=>rNREKoMG-mmQr=k})duRhc#Za(spPw&fEv1^~#qiojDf zL6<6<(nuV{4N|#NFfJgD25Gxfpd@WOI|XO@q`3mkwZ^(&ZfMNA(uHO-P(o^?+%zIt z*PoD*Vp0p%^|uh7t4Ndh@YIt8JXJQ>NNu=DULnabY?(8u^-m`7E_Dm?fDsk;6a=1n zs+1j&MtY^fe7B%01?nmdm3so(O2px6huwm>&AT0+pr@gjHqyRYN{`7WkoMD=jncjb zAD()KfTzj^8#xF|`&vnkVauFFX>TQP-y_ZEbtnZj@Js}rx?boB$R!UgHE@GK-Ke2* zeW(HPAZZn+Ug}B8T2BY9nZCk9?#{uSLa(^%A$(fh1YB*z{46OVCYV6X&t^7?`8oLT z)N=(qRW{g2W?0P6ljIn-%-Iz4^9kIyOPIMCs36N1An?=+rO<#T651lmTLkJw8Y*{k zds)hKON1z%D0;@!+=16~uC%%pSlUSOHbEZaJCNe-%tk4`7$2T`iGZid1{(p+ zW_TrIs;EJIg`kY_8A$COq>I#EDHOcQP{3WKHmzZM6sT7dU1yo>gr)r&K^vnYvyRe! zErI)T54FhGAv@&!dIX+&gA|l18#>68FK54Bf1?22s{wQ00;9fTS8K~}@#>;eS0~)I zxB`HyYH%b6-XFmdzyv)+c+G%cBYO3KW8hd)k;7?tb78|So!E%l3q{DVT6>acuMsnv z)*I-BJXV=?s%|>4K0)gV=|QrFiwZ#{t{^Pc;LG(Uu!=f~4p81K5{TDH#vcW|h57m( z4-$GSIE4zm4S}cLE^)|FjrT#p`z4K64g>8VfH|1=tJc9iQos^M%K8pC6yx}PJB!vz!4r|~8cY*Hq0horce zX!C_nuBY>MWvm6ka>+#`U~n9l+>RKlhkKCe{5+1k$;rCkJNo05@-xqBiPlBA&R7y2$U(zRrAoxyQTsz5y{n z>%WP>Q{NJyrOHO8R5a=AsCh@hgne6}zN4Yy?#kblgpkbD_Yh+rChp4L=VwCPl`r<| z;0Ka{?#e&Jm#2Otf2ZUE{nf1(=&K(ye`lE_n6adIE&oKagvvBt%Rw1GWrn`CD1U|| z@cwfIp8AC#N|jAHB&gZZ|58AHr9pD9VUyz~($vn&+E>`cty5?WEhjXg;w8Q6*Py#q zbh0M(8(}9dx}0At|E4j^m3N#!wR87uYQV0%{3e36^#UCAchCieAp52* z$#UC2gxr`y1jD+25}tGFf8oPZ{}%96*}i8I~YACVvI>00BNw z1Lr1ClHcNXpv17BBnB5#Ux$+npV*(`YMg^WLz~uhu#gs&QFA}*5N2cRIuswCI!wS* zWrL0EgurJ5!cXkfFN+Bnh=|q65YVhl82T2cW2hfYp;KQ!bCA!3=QsS|? z#9f0LdZJ|?(&S}QOt&ef6w>7AEi;ie)QchYdaFM@YG5HPn8WeG8ER`<0LtT zEi*v9I9?J%y1NPysO}RGc|7_fjQa0_`17uQlswn3Wg|won;n98c$*9 z>+a5=SEnK;m^lpryiD-x>n=%;=q{H)A4(ne=`v22GFIy{WIgpEAcHPw`G)lK3_-lc zAb#b}>E{Ms#H!#nz(cNZW#yHx{#|3Rr@WGk`Z(2P775NnE4A7te~PIw_=jzglT&gT zJ~!&)aP|t0J`?Gp*=GsYXB)2XdGv4%rdea*26&Ee5o0=Y zIhA{zB!(K`xrl(yW)OJlJV|Y7fRv1BfaeQLzk%V^e>*ZXgW2-cg01fY$sVPyv&?cx z;DrqPa=fW!`vbE8x4H<~z{Yw6p4xz4zv+?aNYkqW_kTk})kaNZR*1Y<6Pf#OQ3K7< zb*mdcex)T`BE;nkaSe#-0wrrheA5W>X7d|sdt0;izm!c7T$9aqib?cDeiE}~tSYh9 zavd5MWlPgVnmK_^i-5~N(O1bac6qrktu6%xATcy$lWFY}gs`aktjgs5S=wdH*O&Y6 z5&lFF08Jb~;Hk@n+*H|cL*eQ{Ehngh0y3mQ+D=gOlD3@*YQblHSfDvUEePhK#=I+C zIV_+=t&nnKa%65fA|=IYC74@|5}qRn8y~n3M!-{LgN@XN4Om%{W7skU+J{X9-leV_ z6<|b#jUn(M@j0o7!sr9Q3@ zs3&VE(e(AOQ5|iC8;qVia7Tu*P9=DFbG+<(fpd((H!_t6lx>9m6e%etra@1V9a3$O%xMQSbMpy~YB5+^sVU_!A;DFelg8&{sQd+8Ph#`Bv*!?c}c>?%+4VZf^ zSoXaZ+6q7ByugPHAMTAb!I8C&vr6ceu?%hDGgKcSbGYE&6 zqdoTvgrB&WZNK|^A@lV;`uM#CbfbD-guqj`3YV#}5dy1Hs+VuzS~+a~H)00gqQ2Z5(vDF{<#QyvKvS=e}DMZHQuUadjo z0k8E|z8HEhQ(I{5@=!NVWt!)n@J=S5d+HXC7(UO5%OhR`Os!1ubrtnmDImsFU}s*( zY_!*}#|M0h1UywX*hpm9RJ>7=W7slPnu>cR(cDk9End`{00}9*8G)zXBH8pK0oxP- zxFeBJBs|-w-YS{jW-{}Ra{YMYlp<1Z2du$ic;d^A>K#N8d%RJ-lhB*C+Lhcvz&#b# z9e=RV9<$|1MiJG!h#b!^s(0hVQ|}=OcB(8Cf~5D#-y&x9KKX8xNl(jDjAcrIa(_R= zzHO4J?gI=Y{s9D@`XGM&=^+V#Qrb)H=*x`iLjwF^4IEt2psPU7nM83uB48giU_52M zvAO*%>Wf)Zueu)qt@Bgr8IVtWM*Ssxc2%|3z=#U_Is)7lB4r1p zkzT1Vf4cEaf%=w)%3TKKdZ^Ql4S2~td2#R(AEz9V+ax(mi%R<2QgTc-fuz5KbdmIT zh0yOALLZKc`}PS{-)E_vWeO);kw1{qW5i}$R^$%}{P3L8cYv}Vp%hf^j}dt4CqhrE zY{;dE{L1x*dOsDwpJ~9{uTj5T0+k)AZTOGjAl6v$sG{y6x9t=d&wzQ3IN5Nd-h6h^ zJTioLwPagCT(@O9gpnVfk>$no7zI`)n>T1zL9Xv5B$VK!t32o;TMs-~t34g1tClzv z7|d*M~doVH~ zJy_F$EpX3Mf6=-AD!KlqbG3NywF>0#0{0ICHzkeQwJxSq>YvC+f&7aI0)a^E)B^c8 zGi^g4Qx&!cE`5PO_C$b7UhwM+giJ&PaviER@GJXotGwDE2!br5lMmdUE==VYRGuw)HUYbI(! z7j4WT%%CS~Q=vW-AZR^@A@J1Uf)L&a%-2~afznY)&whk}9H~KaHhf#eJC0uPJQ2*d zQfc`0yT`Z%oJ#`Ov4aDg_{2{JPpiW3eTQCD9pa0s$x~^HUHHN){FNTX#kq~)bg9>!qc)^SQ`XPoA(shpEI0nTMyu63Q(YVD@-jSr)(fgTF zit!;7M_g`>U{3|hkV0L_mFv{$oFA%s=^K+$4e_e?{JwFq0QBVs(GVZudQu%I3p#WZ z0(gW-!Kwd5!H^4;ve}OxBNU_z1&hJ@c6ErYzLOcU(`Xy?qixVMzt>V-NR*|HDfCb+ z0f60Vx9Fx%%Gd^%GBo?Fz^jhM-w@U^1fJ@~uissf_;7bsHik7VkUbhQ$1CopZWCF& zgKB*Ei)uNtWcKt)Sz7ij?Fypu`70ap)k?(L$-KRMz*eX3hu#YPy5e61lJ@9F4dHNVu z(-<;zXdx?^EYV>aQ?iBf132A)ThZZeV!8u7K3t)r6s9c>9zd-dThD!I7MHI#^hqwaF)~sr2qd?D zV0hgTeOHg^D0r`W&BddQBuud3UQMn!rW2Rq6rivVQ1n0`7$+m##<0sG`FL=se~|lt znwJ3;OC!==@wk^YHVjX0zo+rp=xVq)AW?xxD?ALwkpX>ba26R(G-LV+*ClCnGAaf2 z740T^rLN-L#8rMbaSHSG<^ETfyHQ=9iaLSeISm24$D{^RWmCayg3TdWpMadMLALSI z%xXZi(T+1DV_Z9~@wHtic$V{3Wdh7(ACRB7ID zPA4wFAwcnOp)G=OgH`btOn69G4@EHqb!oA1;;DnXbpZ&T3Y0^3)+lBGID;pRJe^K= z1P?-R5J(w@mp{)Jo@4bFEXws0p39#X;KNfF3V7-BWNf5`$J>Z#BP;Gai zE~rrqqx|LkA)z#HDCI*lbY^I4fUpW+=7IVat}))Hg?shImrh?r(s3cDs~vh61mmPP z=`d2kcqGUj41m%JjHy~*o@udAdEe&HMoE5{qZP|rMll^QXn1_SIm`xMn^H+^ zb5QFE$Wt^(+d=J9C2c!{+M9e5uM}twYOfN^Pt%xlFAVHl+!db7qTOQXC)*q?Z8;1g z`*Ftm+J6;7uV%uQ>mjZid!8kVzx7yPT3rnqQ5_UTcx?J~Aw5xpbHXz$A^j$S`m`;3kB~j25%QAZJs=h3ZPZTIIw+@mj{)45)SE~HCaf4PX}?#HlbSovYY^$OuNCYsE%XcX>| z#E{{7B_g1euR`FdS4(P(;iCME;d+h0yw z2>VWIuzCZsf}J-a@YKEd^&1(9k2JCufP>vr;nkZo8*dgi-lEya?Y{KF>}ov;*`&7$ z?Qb)*|21TjqUTzpn$v6Mkk(^p_8GNbZx^{ln?Tcky#wiDzuqZge3ud9UmnL|gpyIG z!lv%sB9@pGGtZ$Fd5^I?d&4O@zFU(w(dp zY*nk`@ez2O;MHl@zgbjoigKZk&qN_wZ@-RV2x+y9^n{yEp-J{+$(EY{Z4I8xmCabt z$O|tqV|4K{RT@E% zRN2Uv3J8-D_rx1+RPaFfAh+BT>hplYwE7Ez;foqWWN9KhCzL}y2pC$(FA+97Lno;( z<1d-xbjN&KR%LGSYw#aW#h0hPCV!`L-$B=S7A`8SS8(bZmpxP~HJs@gYE>NV z#sbf-iHV7{z0z0vG*r6Bu8&oE{ETV-1%Iz(mmec)*a26AI-I4(x^ba|h10i1Zni(E zG~TgfS%T`V=S-XgiR!{1tDs8bc#cQ=6j)oZYF*%t`be#U>neJ&0B^7C8OGyp_R6$t zW5mP9su*b=ccW+4C31U(yM)Ww6modcbporGx;6@PkmotQ&YgAWJ3OCOivTd@JB;{ ze%`Lt8c~{mlJsb!X{yAZkq(uZ3(ce-r~W2L^tLXGjf_*})Br7?`n%5c z56SgUovY<>Qr)tI{(lM3zYS1=%_=aQqH=ln6X~FQhEPs>tM)<+Xx=VD+%9fT&!vn0!GlVuVY1#Yx04$MM>9{;?v z?qcA+fj%WK0K=*_0pBxTAtyI~W0X|IaT%oHK3;j_(?XAf?W)?ajO6mkbJw1+h9dxi ziQhDQz^kL_#F<=w<8aJem4eYEE-8os`rVnoM2D?exnGHohQSRDn`+3_7#CMM+-}gi zR>-^RF#yaP7dn?WyHrv7vV>f}M2T`67ae3pJ9E=Py*k>PNDK|F^~b3pk{Sv(4!g;g zf4#|aak$WHuk5WCc&Yh{<>?hCrSY?BdGD$dPCV`edBu2WC?Sq?yk5pXNTdtnIG9AJ z(x@#S)V@d|M8@0AAv21?Ko|bz@S-92?CCYokVrYZ{=6YngH_RwRp|?qm#)#WUmEh{ z8^#UB824g8fyy#_-K>5rkIGP<^(1b779J23FK~>g&Fwb%&G}MA-<-@}J=7joHQaS9 ze}F2~!U$f(5{>1U97MuZ5T1chzC+;n-3387KqehQqJ7Qes>=NV{Gz2iMFu}Y9XWpv%Ls`r}h;& zrpiXlR7sh_$S8O}0oh-Jjy)-mK}9CFhjOSAixvC`1QwiBsAP5($R=EASsZGHDqof zH1<-MoB!F^RvQ~_{T(8&xN_Xd+C54V`{WSzBPdLDG|E9;AAJ?>*+qU6~H5qeaQBmvVx83;ytc(okKK)C_|?k&YH2l;J5r<8y-HjYQuaUxnB zhx}muctN(xAmhW;!9aqXpCAcSbABSyLGMiDGvg0+5~4um$p~;espQv;vnb8@ET0T@ zio^lKbAe&^8@Z@cK_8eo4FSB^@k^2Kp0oyaj!6Li+g#7;6S_|~bl(dZbMT~BTRA2) z>$}>|8%w0(vCYvaoH#GoxO)AigKI80|NM0uH=en6aKpyc8_(Rp4K$7i`N{@Hr{;(~ zhPC+#S@Pw$8JlfMyD^rpcH=#dBB7Th_?Y#C#k-bjRh$En!6Oc`G)u&U1B79tUxt%% zpBaxowi`UI7Ji~i*&IBcfpqCN)(HD+ALZ<`62qgqGlicR`YPl-dX?`?K>#YPCArv-Fy-$_fJ)<2O4CXEb@%)K!;ABv(|j`?!;1!?ntwpUYL3 zA{vhfGjUNL5Us0FPHGMa|;a| zz^iiafM=Nz-Je|)@G=M*UA*Jts$t1iz;E;x0Cy6mXv~L9s3KrsJ}m^E8o{p~p+Z?l z<&X40c6tS8U@BNEltZ)G8E&ni3YNV@KXH|vMp`mkveW95<5qUsy8g2+P&V@N6sjuW zLkv_IAD-GIIH|BGpdx?7TLWof-Z6%KIX)$E4p1wUgV&RAgBZ?bcc7+l++I8=JA6yr zJWHEaRb)mxsUh&xIDY++Hwlq;VxO(M==rT8QH};+wU6WeH7JNeOn-J(sW>RBGs?x^ znLV@f!nN$GI${S@1HajMeg*2P-HbR-O)zC2to7g=Vxc~$8FAGX$u`NvSvYadi{M@L zB>dUctU7qsVhN&JOz<8c?Cz;6kX}P5!e$o*>c-tkipo__K?>;H7vui?$8bjhlZq-$za@9?Or2r`@dFc!;E zPs86^v-8KT@#bLDRaXo0`CJYfA7md4m37tAC3arD#v*+huOY(eNLQ2U8T_7C!Ly4E zXfZNkljmB-?PXQfR({OJrW5+o{Mfj<4u6vYsiZ+sQT0s3Wzb5%stZ9%8&cN`V8YH< z&}^v5>IQ;M&(1USRe03jRW}mOKD9r47^=Lc2JuW>jmKOE^`CeRvRJ|AO#sX8Lk3)A z#5D!-R=Ro?qo)_G;l`+XHZf)Q;Q>*q%p}&7Y|E;v=OF&N?BV(%<*D#LmxyMNv_f4y zkAKW_p)Xjr8r(vIrJj#C)ars_V{CjdX#1|Z8SyY<#af|M9jO`M7ii%5c<-IdgrEik zl`-`~f!&|ghDXPw_6K1WxIt&BTacKYg|zNtmLFeKFXEpItu3WG)xX|wjTCPs>gm}T zSlt^bjjG!OrPMjJdvgg#Z*f@oc8T2|FJR4b$ zn`$)Zjzi1TO8|6Tc5kb?S=}MXG~?s0)hL3?v5I=BMDK%ZJ!(*78E;kb(4)Fj;uleR zINYmeAXn`D_n?8FAIiC3Zoi#?;-2&Q5RCN4if^ui$sWpkgb! zM`J2ganXHH$?BB^n=M(oamYr!ihnN{#1UzZ8lmeV#8*q+*|0QN&BPOI>NNyoi^~rW zPLztc7UQ*u$;`^mZ&gzDIs#75ZafPly`JAQ2Q^LV4fxAml3f6^S;rPC+am;9S8qi8 z*6eI^D+cQ7UPSa~=Zju7rT8X^o$KQ2#`>VsKnLlnHzV%4>|Cl(U_9P}xU4*I$;&^u zUp78jw`)}~9z|<&51`#1^;UwR^Q_kMTLx{c5LdWLtlq}xX_Z=aRK1;_hqa0?(gxoF zkg~K5Ty{{e4L0TVPG;TpMLCDs57>uj$Bl!^+yk@^)AzL=uAkaF zQl}-$X>Pe>7x7R#1kezA^%&;Eg83u(#U(l?upj=Yl!AV^ZU5fL&i1<&SKSZL0rfHb d$_^nZ{W$*c)F<$3A32~tiBRs&$)o7>{{!C*r^f&Q diff --git a/docs/build/doctrees/setting-up-a-corda-network.doctree b/docs/build/doctrees/setting-up-a-corda-network.doctree index b304a2ef5746f3adeefd230de6ccaa4f2bfe4371..3ef82feb25eadf217683a799f9321f99501a942e 100644 GIT binary patch delta 151 zcmcbyn(^*x#tlb8jEWX9F))ORrDf)%#%JagrxulD=I6zy<|QWOq^1-t21<5>au+3* z!-bYi{um<4xO6gmsGRUJptLtbD05~?anW)hyS8Y>WQ$N|;gw+aDj=DmnPHxxU0bwz ha$l&H!Wy7RY|&aE8Om0ang-Ig4y<%NkStBo0|4H@F{%In delta 162 zcmcb+n(@YJ#tlb8oI}OZGILVnGxLg5i%K%{^WszU5|eULQ;HTbF)(z5au+3*!-WMXnh%w7p3 qGc+^IGqh`qR!yE9s->_RC=y$=21tgo6{V(uw5@w+~`Gu9HvRek`NsuiVMXEM6nN!Btkmft+abS-D%(6Syqw_Aqj~| zNJ0|QNFyP==L_kbG(tj1@4Z*jd;9+XH?ws=FOWoZ{ECl^XAPH zX6Fl)e68x0g6?vq-~=hYjyvUQ%HN~&YJYa<&*{i4D(A+X>ePf2_;W*lUPtzTS+i!1 z*Gg5dEAYn3xoS~r|Qf|CbD_8v`+p&}?mkwkXS))ftcSr2GTXiwA}N!RSTFO$L>k*6uL{R3W&_5ZJQJ!93=jl^GsKeaD-6Py1GxIdNf2xZntnP3-2i=u}?lFVz zszJABu;!w67j?R*>9ppGHaS}{MEjbdpMK5N{u!ZvCMtGW(@C|FTy3PeFnT_xBQxcn z1x(k3{#s)C2K3oF_D*_2DqAq5z|HAWPR78URgATq6u`nGl9Q=)Wi(9!8b(gn0;iDn z%IQ(BoGa(OTq&LCQ#&RqWqiw52@33987ZPOgYMKO*9n}cLez)hIL@JxE05K{e$DSAZ8`!aI_!{k4_fQ>#=ZAhj z5;C*u6mgFt87^obgMVRWo{^;kIWU-ik(vT-@Q3b1w<~OUVzEy&F~bZUo@- z4b!^Ht(zJETW*cvWI*3~;md&f<)NP?>I8I&L7kj;Md&}0HO-klYu1{y;k|ssC|*Ej zfNTbDf!(UEIA9cr_24wTIB93AgPAJ_(TjWqXO(^|Ib+~H@Na+*oFAC8f#vWeS51pE zAz(brbIee1syR%7tR|NZCY(HFKfVGK*iR*Ux+6gKt04?l53A@HN1df%<J zo!#jTWmHho$pavmeIy4iuR1awq)>wn0kp3K(TEzQGRe`Ci*t6T*8qSOx9MtySeY_q z+seWi>g$+v9j(}_rZFL=M;xaNT9gCK;GmhL%av+p3iZUT#pg+{ikUM#Jgi-NsWUn} zY)2#TCYd980f9QyQl+vPg=-V(QK^grn+ik-NIX@k0b;3yoLkV8lm)w{TriL)T`%vZ zfkNPoPn0krHRss&mlY1EzIG9AT_nvTnkiMaLA9bmIpgGYA>&hZB^46Y3QA@ch! zgEe~O3d|qDgzJ^JcIOHOqa;o^<$_lp8`=sUN%_MV$+^%UVaxVHf3yq|KTkMz(p#J? z>=!7eoQ})_K;pEYodW^QKp(R*>>bXz+OG zmnqTmY(T{_sz1?@nMocUfWMPokAuLw|}avP-wb4hZUmiA7Th%LmDoQvPGW8IKM9$FZGUMkJ*y z86|9$XdD?}jmLvE7NSHXmHn$gvL}T8)e&Pn)-c8bTbKXD+6apDlP!!gwIjs0|0LA< zz*dvVCaAms7&1$`Y&e26?@E@wF$HM@bEgTN-0lanx}x}T%0RI z-2lgq=JHTVs1D^YgR6!Sq{nMPHO{AN2J|0RvJyHE7APyz6BTV^Qg1_5Q2BydFx=UqYrLej8+-eEBVFUA)HUX! zhe%leW$2cdhyG2ZcJvW_aU(i{-2IBse{c76PNFmeHp&bC zHkABy=-xSG7{+pbkyxv||lNo4s-&NTC*;&Q=4X$Z(-c z%I~(aPH+E-k(mD;#r)yhhpzv9H2(*o|3fx$JIer@Z`(=YN1^{?mYh+r{G=6AlxBzh zbXvjkGobVH(EkO1>Ll@_q+nT(Hth&<`oBaizY6_d6ZIVh)KCRn(<}`}N|pTPA-`6s zV$t;*aQ0oH|J$g2=+*%&l=e(y@_$E;|9vardIzE&{zG#eu&#S$RW*i6UI3fwA5qVr zLjTXE9>DucE4+61E_TFUTkOA0(1x%s7*F|s1IWLJ{y#{xThJ53!xv4KX}Ge=RBDak zR;#Gelmiv5GD(f9BWb%~0>;V3x}(wWObrjON*BBUiWSEM^dv`MeL8z9jb=t2GC(kJ zP%s)ZDQal|Tgv4*uBbJcY)(yGs_~`!!cf3Xf3sR0ulaimW3Z zbkmsK>tsvGV&nx{OBBe`7zl7$rZ3IyVe5g@awJmOm%X&$-lkyol`67S;yr|U$ZapO zy>>pNIF^010nLr=?LU=`-B%O)vR(JKb+R8yqKo#&Ba{OaOxwK&1AIwlBe3N_1$K}H zMkT#rAhIBMeq) z#p*DF)dPw_Onl4>G>E0@qer;Ht&LF4fMk`!6~`kijuZ#O!xvyRnv?0pD{Oe1VJpY3 zAT8@2_H3~gu*Ivu60IX>RXQ&YR+bQr*x$mgLr(V}G!0t>*cnb&y>W*tW10hVc7F=% zj}%t5qqUL|p=z8&20-C*yWnl{0`3#{lq=<~Xww+*nZxb_H0(UA(yfO`4(lpCpDQ0- zg_S=Qz_eLScSPF<*vL&!cn%ix+`y1(XHs0d6wGp@lBbz9d;8BMUmm52ki>E{eudJZ z?~!??ftJ#VH1rLLZU%BO62vRD)C^S|!~7J)tMDU~F3sCkRA@l2d)l(?MdCvYd-yb_ zp9DH`EIwoG^x_f9arkSMgCc8*#|}hs(aPK7HRlO&PE>uOzBHq4TZpPpLb{6FleO$A zrfl{PEkX%>{jldNIhE9CFOrT)Ilfw{(oDqO{?plcr!jNi|0>1$(0cIb>3D>4hSI66 zXvs*H0-GwQ78|A7nVSDBlRx`BRPFuX*w%AOti5AP*NCE4SFin!@94#|L1?Mt9 zCC_>I5y}S5+g4O)82;x^TeiJOY=~b!pJss^BO@2!Bl`40JVF`3-$?GTj_KsiMVj;C zI43H;L|>Ybw(Ud3mm*!|&PFY}$&}6BsB-6_+V_$n*6l^MHz^-3Q|y}?+uOgEB)*)P z`yT2o%K}UE`4xDC@vg6+rTOy zxzW4Rh!&lpo;>q&Fc$D56i4&66%`uB#OSnT+lxesXpZq| z48+YiiHkJ!kB3JnMf{D%B&(WkOm5bkr8p<*AJ>;=+-);ae;MgICM#NY!j#QkqGNIg zccA#Jti4DylS4_g(q4Ya}7YrO-&7Pq0IAo)vlZ5!; z?y0^`8>}Hn9?S13==_crx09iWft+Ntv*AJdHbm~M!DOyz0OAl*GB6^H=aYi^}hf`4DMC&==! zLM5mK0Tvr|ZLN@Gk+n8RyKrz~p$+S~O9Oi^H~gGJcX|M(J)>3R6dxwj(!UZ*udz~P z1pAUx*2TBp23d_&8{L|6rODhBO=1P;C|j^(g9{RTpT@0&B5Q<29V!mic#x2MuR-0B z(iCN;x*Vl9R^Zx<5Hip06}3)AAv8YdM$HJ zneI40wi!Vn8h zM$SV-zr@T#N0my5RhQ59+9-+KW0hxiv>XXvy2$bHQ8CPC!AihB%zR^I;Zg1&E61+)a zyxGE_S4A|Rv)OOa?=v_1tw=|+=d#&Q0_1IYM^oR9M=1ZNg-uggO|q#!K#BTH%?Y|y z;Oz1WgS-Q+203oQBb0aIFGujMgmOSuo?S12FS_clG9caA-sx2AqNZyf=C zm~h&QL^HX9`-m1z;AK~Eaa|u}fxf#1eJiqn5k7`TC?8jVZADuj5ya4d+Qd!VPiU4; znk?DR;kgONNQ{dnRd61J8Xj(F0#t99ejL#QZjt(`%c*F&r~6La>(^6>W*Z-iIJ+Jx z1(oQq6&Fs?DlMTm(K&#dVmO0nPthH1%u>;rE!{PX)`Hz>pq$2$Mr?y&WzmJ+QvBif z2r|<@0c$__ZOSwa!G;-EjgbKw^Dp<>JS>CMBS?44SXo~8+$vb@*t0lj4za`%jA$52 z(OndaxO}t*GTU#^`mx@v1xDyZO-fC=aFA$fl~>M}YFMd7X1C}}PzRh);)M`!h^w38 z4xKmVl~<+Vx5@)ZPBq^R_thX>#&QG8+eQY{MZ~AHvs)SL@`#yl(+qvty&*JPxj{aS zWH8t5c!cs9&D%CZUerzovnu*$wZt8^gz-9R;w(-AWWrV-4g-lw`khDz|I<3(P+C5Z z1R(YWJVN=RLNT)eD^AV^ui5-Uv zo<_94uQ`8UbI!=OKhz8}IpVepL z`u@xUefJ3dFUW>b@>e`U`I`c5E804VXkDlIyJq=^$&$Tzw$5Uh{4a-5FVO(#F-C=< z^%7@CjJG0U0~jBczErdMjr%?$20q11vc5CPsJUU{WVmNOn z(r7sy51i5#XbgI;7q;C>>)~GbQeH%>AS>o3xgJ%gNf)-l+(e*z;Ck*IDLnbA*`{fv zv0>tTOCFIMj4F~~kaUOF4R0b~uR$lU0blLJf11KaJp@63!T|%Nz+SE`L`4@kJpS8I zQKaB`@YXIg;4&jE*VF(DAw8gaIfaWfSO8dt4hGb! z5^Szo)jyTpTG@Ok8dm?(4D};C@^5?qL;nYlQ2wi_$+J8~va!{iW`T!8*#m#MqT^w) zX}Fnl=xoi>j77V`qVB{~?igz{k2Z}4nTsT#GY=1VsVW>Z3$gO#Ec6`CLJzr-BMS`v z3l;xG2LJ3s6IZa0?OYt+kd$J)r^T4+Ma$`BS&UR$%F5OPyL$->wH#cQrOd4-IvP*< z-uojRLu8s|1cy@{vK&7`*^8CBZAHZiNbIfe%5$=h{`QN+py8ZHk*y@KefexYf-L*t zE0}M8Jm4*hzo>vyU6EB9=8KPh&=>b!iA6ckKtD*KA8eqjFYdhpQ|~p}^4b(wy9Kr% zaGF;7vX>6gOfwJ4Ly-=Wu;*Lkw>$!gpiCN%P!3Z_hB8DTIV?A!xEYo^R@Tc3gTdj7 z!4U?7?9QsKk;q4Cok!U^4Uwmrc}V1=HPg&Q?m)UFatj3ML?Vd15|2=hQAmc!L?B7z z&wZnYMRn+q+HMvk$*^HZoR^w)R-tTE-F^9-el-Cu{X;wwYP$IHZHMI4w^D zLyku>nCk>Q;OeWe4092QBy;i9pwTbnBva;OEpv(~qo)dE{liQkSSB=|Cc@sElafzmJ@Zm;mFQE<0#jZW=a8!`#F2V3FX{o{5MBTUQ z!d*Q!c13x*p#D+EN_Eh|fDmKFFG_;cy#g^?xYur72!NAO7J&#H7~BfnKVbfY-HzMw z@cX28h>BH1jA{xR)v(N5wp{wqR(9Iy+UDj?i%((68O%ou=$ZHt%2}GdE&DJe5qZEW z4XUZG(WbUgrhk;v^IA>p)5DYq0JILT;NA6jgmSi~nS+*V(il)Aoz+m!(H!U69Cs_J z&(loJ^&4nJVFS`M72!6@xICG6s)4Ee2J z8LLh_&8p0!#VTIXt zKVgC=$O2ZH!$UVy>a1hgLL8)`DWiCVGNz!+ zP$3G*p~8?wyDSTdYnth4GmEB~8ii?>ZBiq{Y}SUAY{TxJVa7Gr%nVaT`pgVdK`Iz# z0*_F91!Wk9C?pvMB5YPSa*E~*OwO!+jdABzId!0_=Be2{*Q4ZluxK7lH_~{E6F!(D zlx3~PLvt{Y2Noe;P{Ip>ntDpINDkpRq07+`(z@A3pJ>ITeu&_MaBS5GJ{p9_1d_2) z22HHb&egI7$N}$Wv)iQN+)T{g{_#lUY-PE=>_f6mQ@{;9^cXxsd91dit!Nv{F45_! zS-+=v)<{Pwc^vYf_d+fIcvC+6Jv_U+ab%uhb{Um&_3HHIN)<-~Q>k>C22fHRp0ArK znZQ|{z8EL5rqZXUySuxi^y=0Td`K8~t+Zk%(y{sUB!tdx8df(T%0SSuR(pFR<3x6> z(GbTS#~r&WZ9dbG%L#KGLmw-Y6=#=5DrGOXqO+4#quOpxe3t`W$M_V23)DY5)lKk_ z?w~I*jKc^NJ=peXUBJ?YCac`}p~;uC0$PTGd^u7gvz+`A8I zqX@AHr`yC51!n!aXEUbOWMaPSwa zHlsVhD*_(lw5fY^y>M`hu1X?gYH37z5`nZ~Pv694A3Pe8)_u6D z7qGda-sqE#ttQy)P1F~ErU5`!NoEMughodvh}W_<#pZ}?@vtcE>^4<)bjEUk(Ki;w z146C>>vKwef(`{03UW1mBN#Kr0b*mz6Y-Wy1VyZ`2cLwL=AmZe+zn}bkCZ$aSuotL z!2`!3@R!E;*W-D&V~U9n#(m~rgf?}5X~ z!dL?`OB(oFp2`%Ao^9mp41zqCopL3RYw>z*W?>W!Tb_n@UF?}jC9`PjcxiQj2>OmZ z9Z8vm8r4`ZRgb_UHO?T(YJd{?V!17 z_n3;Oq@6dWD!G*jbvO8LLLo$)tXqEDu*fBhYKR$ftV|G@x7}Ml+GBQ z&N6U=wz*YJzbaDGpQjm&W#GOOMV=2Z=!+NN5y}e{rm+m%cbHH%*l*S{@FInLqlIij zMKyK=Md*t)y}7vt5arxUkPbPw7#xr+EHA}(p#L&FLV39YF^fA^n_S$TjgmX0$K@td z$Oyn%INlUz{)N4!zrjY|3^{p}ZtNaH3s2}EFT=Cd!m z68M?0;@dMAH8(gZ2*1c8kf@ z>Vx)9O-S&&ybE74`!LGKl)BJQL^t5byOE;4XYauecd`1OJt-0c?^QtbJ$oO1h4OxV zH!d$`p~{`7dgQ7P5Jr2E=-HmvQ_vsOVhMb#k`dSQAr>%OcGH3VFp@#ZkKhr?M-^CG z(bh%8RI01x;JN?|2hZ*jsh|v87qj-qc@&MoCus+p;E5Eu!95S z4F@1r;dnHZl%%HC3 zk9_O7|3v8UMAg{s1_7$w@)dN+cCiP$KfjKC zfdKjj9-(|wd$Fx(JDEeVKAn6^vwYiR$?l7RX+nPJ*u-G5BCVlCoHLY%lWeL(hu#{| zB}15V?EN)3dL{p*Z9sT@$JVN<_R@k;PD};<7!`P+C54GAK*=nba4*FwFY^IWd z!pZX|NQVI7q+8dqeu|H1)z9z<<>v~)OrNaKOrPeWixW}oKCzPg!c_4~t>RavitK#` z*GQIME70Fqpln*qxzs1_(uA2w@>`^XB#eZh{4T%42ax0Uc;IY=mNw*IMM-inibP^; z$RAC?KWV`~n}Ql@B9W;P^}lG=zuK(#;HCCA%{FsG{*H7sWF{}Qe;^sn`X?Tt{7Ye( zW)X>Gvo2<{cJP3ff1BF>qqYCn)SlfLHN^ymDpWib6+z>iHHU591Al4IpG5mM>HN-( zNC+$_?RptuVD19p0z|JHg9cOPy@V9Myr;9wSUk{aMr(Q*DdZS+e>3efKs;mf=rRC1 zOwh2PYvHH~q8h@kLsySlwNb7W`+yxebhaYa+_CkYi#bTwwa8p;$Giu>9WtLNwHHZP zyDZbS#{xyIr6v8(rtDeB%zY0g`DGDMz!*s3fw0<&Y+KQ`g~Zi)8pgcleIj!$7$RyT z5BO<`mS1Yh>wv?4>=3MIz^52`&d~@%ip@hq%6gxMmKR z77w(u4Vgn}j{sOiz$u3)6dDN*)hv(DcXQbO!s)LBmNfE!w*ThZ1>1eI%afF7k;jy74cpMsz<_f1-2!Q(aWl(Df~ z;X!(y!dF8s)FLdD%6d640nP8diULTcUF7ZLLDltNUrPUIg(;zAGv*pMOG%z<*Q=TsJIII(CGdquZ& zpiPbB)dAnBO>HIbiz2OTCCl|atVnSTngn)Og$II6D*@VymOf+v!ww8O*sWQ5Ocp)u zl3-6>o+`&`T7rJki!Z!F_&7NZztoO)Jbt)K)sFVkh^{ASK@O1<@hg;*^xfPevn~=u zX?R!!ax#mz7l}-AWSpWU5>?xg5m#|43-syDG))j!BLx&V4UbUz6i!>wRzq~^1LAbe za)!y0Jr~QJIQ|qL`LBAQD%Hd->!7e?q)*j3%Di#8gk`cvuqnW<26i(oz=~rZuP@^Qj_$ zI1_@PjvhT|^bSj0lYw1Q>J0Uilv+w`6n275uVnmpxWbnTD|J-D8JY#%#a?QJWQr(UDm# zxEiyhSqU*f5jjr!O^FM%#D%7WhA(1jBkBX1=OUYDCe$z1^qEn=1nJYEekr~K^^JIh zvPpp$)LCs3b&V~tOAHLjm^NLeZMxjF$;8IkCGf9zKh55Zn+KP6+X}8769b=2`$$ci zx#u5+bo4wIxUs~LN8=;9eGrdOu2cx7+gY9Ic4PYHR@3&27a1~ehZSzlz}4-l?S~OJ zKQc;>D6qT*wgCviqJ(>$;r#{&d&*NNB~XP{u5gUzvIdvy!m5n**xJg78XnfUIVpM0 zij}b#R;_8Z6aW^PH1wh_2y`+rXXha2%P$m?#;S(a5G`Be-1a=NdR;C|?ABlK2*zI4%}2)W8-nMPr=@`tp{rT)^dT^I&|u(xI87d;4D(4aTc9 zLtplS9ZV>B0sw>iuf_urw6&JD9bOAs%>K3m|4CZclWkoLg%oucIrAF*-b@MufP?!f zNXOvjkt@?L@>G056SmnIe3KfT!mm7$Lf-e^U=5moR#GUgWmHLz2_VBvJVO> zac9uFX=UjP6s;Fpv`z(u?pc<09e2;tv>1ue7b)mSjPhpN8N{f8DmNnk%!0INgy)Nq ziNceaTZAVy1}>mqg2Yf>iocPk%RcyRSFyT)ewn5v*iBxJFPX*aNzTYFP%GpneA1Ql zD_DA&uB6`@37uCe1g@lS#xF!>)pv6b_hpFrPRp-Cc{K~S7l~7H9sL^3pTNMbqvHx* z%K~Px(E#st_ztFjJsxl;QYdgIV&?WDQ32oEY2=NXKwnplZ&9eN=)XOp&s$lp@4nXhHk3vq-;M_YxN2Q( zMT-iXWg3ZlH{~6gAPv}?v#%p9Y}o?k5F!9W@rlxz;Q0@5Olj> zUe3(iiZJI&tgaA$VAmU-=kz-U*9(;3ByWtbR2s}J1>N#7RKNy*Tq|m(XM2&fA=aPZ zlUmFt@gtN^Y4*0F7H=;SSvw4rk8acCW@x?r?;xm8Gjre0Ytrq24=(!*9-(|zF^Lf+ z_R3|v;crn)b-6>o7cK2Sr$z5HMYBh%p^BmUN3aB;;|CAn3dG(7jvuLatO;fn(;t=; znsa$hxTyoI`3Swo?ua#7^(Iln7RISxgL5rSUa82+WOOp*#uW(wID>MAPKUc$-UbQN zc%@*1MuU@@qTtkmr4{tLc;#pi4j|fsQO_x?;;h<)oi#t}6<@3gN2RgZ#d{NAC5FC- zgT=T42%PkJC0ldf*E#76NLNn!qEh)wmdZ!%rZPN=wuj2{Wm2%cNG?qdy00iDn+f0B ze+viQSD6`Ze!Ho>y;S}hC4jRL64^mGU0wSyRhJTz&H^m+&xk)Ju4B6opjpm6Rmy+*~GfmL?K zDpdw9gh8r)NWx~ z;*6pP6#?<2xud6c05kzb=z2h$AcWB}?iOI1LZ=uw`*If$-j8&*jBxHwBVGYcZwce+ z!1YqE4T3KMHyV&NHR510AYr2dxM9hncszDe=xuD!0^xwo@GyJz(n_hcj_AO_xl#sX zpqm$O1iKWxTqy!&r#cNM` zkP?IXw|Io|JEd#eZo1y@5eu%S5X72};RS!M)cu2{uJKy4BbqAJA2p$w-wgy#?tel$ z1TwwWw3PfAAJA!k!6THvYH4FaVMP$b@z&LP6xk6nL;hxJ{JYlp4^v}yM?r5S)<3n5 zf7v=r^o{8x7Af~{%{4RS{)2Q-j^SEbLCAlR3Np^Z1|K}e@Ha9%5QQWer%1*JOF+tO zUnE%>aDb&`u3g~mZ_)IExq~KT z%!kQ2AySjMD_{3r<_rx$jk8VU44&$s)?oZ>c-x#&6)+1&KGvKdpccgU;UNzLSKyRH zgD1@@)S(M4Y*v}b#|S!6s(QQ@B5(jq6)XqyT4glVfQmK44-c>9Q6ZSdK>-AG$Z^&- z@pbESw;nezsd|y%h%FM&qNl;^j}@qKLd5xoN)929RbNPHl&VooTclsuf)FGvQ99kD?{f<+5^ur{&}k z1lC?8y2)jGTFWQ!v&;6l!oygg@1EhWKt2qB!|@2^2!+~Kw3QOo`ZE4V&2p5> zZ^8sTJiO7t?BtxM_c7TKk~~6yiIV9&{Nr++TPtrygePttkHM+6>W+6amQ#I#)BBv^ z;#$UJh0{UM7&zI&tDuB!@Kvc~ecc<+TXWorC(#2CsGtr`>$R%xsN2w!x|TL^6*yy# zuc8XTbvCahppt-#87gHiI};SvW#`e_&{hiH9(8GlW=I76@5Bd?awQ&!G_9!(LH|iW zE8JFTo-UhbDQKB&*YGgKTDPV)BhX$X7>czXK25asdKbvC_zEO?@d)KO{Ef6&R+$uN zBXxnc6T3@}H~5^O_?&3)$v!Z3qf-+kKS?n-*u6lsPe&aa%qVmh(2}A5p*wLtZHS|hVzqx0Do7SR(e`>gzsFZT>&~3H$MGFC1 z-%`PZ8ts&5sx)gn)lsPK(KRXQVIw^evS>5*KGS`<39ko7^t-WzQ^@hJ)6E<`9^j=`mwke zMhOt)QZ2O66v`fnc5D~VyXpQtEZN;7i^~9uB-unTQPYdIIg-KG%o0Vp%Z@9#4Bs@? zo*5uG{&P9LxC^2596yLTuFr%UL96Hy4c}M%<<2%t0kb&TOn)17jN-*?NT^%KBQX}d16UIaZ|rm>B(%W7O$;Bz(3HG4dp)1lTBq29&F52?m`JENe|xG&c!!`~%u zftf88jR^^rO2sSAQoz?CuEQ#6(4tIil9Gl#z%)=mbdy!wnMNQK-B(^&t!#G62!(PE zwgTvypwVM-o`DXIBdUnePlcwDLi+sm{iYrq@lcCLeu}}hQ4*Plhc_VjtW$smC4!?# zv598HNg?_+H$S-54(Cb(E86`4hzj=f$ISLlL{@lD*od~;COu7+?y%v!VPmQxlmzqA ztpbylwgv{PQ8-X?t0cvpcLvtfOGrtNL>=f9^amP=GwxMJhVjas;QpB1RL?9bFSN2- zDq`c!njxWQmhb`GHjYOqWle3+Gs$D{5wjw*qS+>Fw$msw?>o0qO85k21t+}}4YZ<4 z${xH=BPk{u&;kY{B11Ub3kwFN=*ra#C|{H96It z>E4etD=`(Ty2P9!%vfUDmdIo9l?SFGUq)v8cQWM0=0m|fyr>+IC*uQ% zat$7c8mpy^uFq&x_6LFXEXuzT7tPP^ehZRnqj7R4qx3MVOk$9Vi9rk`QSW zx&ecaur(nr4f5;q)P#dj?+woPJfdm58cYNTE_5RRkslu;OS$kqvT6>OuGJnmq>f?B zM0KI)7)369>&+)J`Z&}URE*G`L8XkUrl>eLTTRskb$zMV8x^sU<5IWY+UI}>1ab+5Bo0e)lM=6aB-O)GyaMUE)AvfH_079!&2S;6lkS$*@+wlU zy+|IlYYtTcU#%2uA$b3CPCKt*=DzH1P6prJJ#}9TN~Dy~G&q-{|*!(OiFqy#k;Sehkq_QywtqTFr*|qAMN_ zQ<#rpw%8+qnMPa;c;A)GR{j+iPW-N4Mer`XO@9@^yOC0~ zmkqoJzi|=)f2m8aN008XZfohY7RWod!)*Pnz14!pz3i&(>8B!xijl6xr`o=HAE{it z7H`)UpN7AQDECE%wl7}Cj8RaYVp9P711W~zPpEyn`)Rv|)IIl;d;s)>^!p$lp?rw_ zWA6p#xM+~nAJ!}%F!bt|Ip@AM5*r*n&=!?gdhl;N-aZY))4BeI! zSU1?|;C2k7)Rq`4Advz*L>0s3bWjFM5xPiNo%TjGe(I!${ZxRl_rS1KWlhj)aabK3 ztGrRYKOMR#t#?lM7`=zrdSmM$kkJzEoYs*_8LJ+Gm+3W~rk~;1TR`kpIw|XRX>CMZ zrK5M$ikhMV5VGDVe2f_EkyO@IvN{coK&oRi7hZFmjhI%!(JAivq_}CTFqrr?dbO(a=xlMubXzIHME#=9&uz&WM=U@jRBl$)FU3>ZS${5j z(oaDbye*!3Wy8(9v770i+-SY~s4``%8gN*o2HdI{xbps(a`DG47n|j4#KoLWJ~1t* z_9D5T^5>I$HW9tQV{* z+5L}Y_dj?NN4{(j{fZ*`RfA~uK}M>vbH1jiechsF{4tVZlH>CmnmTg_eG}>EAogs% zsC)}w(MjLNBb4tb2-8WdGTBL()nFo&@0$GI)BN8z`Liai5#=9fjvv|_t^D*OO_>?p zA0xeypMHWbK=r41gz_^jZct@aNmP%3s=9l!Fcae4O&0QVL(yL-MSp21n%zx3vjazU z;_j#yv%A?QHVS=aX)qPwKEfdcSq)J3F%c_nPcm9V|7%Dnsr-;25p zg9F|gTLx#}^k%BeTzZrA&(6%Ha+I07Vc?vLm>W^!UY_esKL2?+}Dj!Rqvioa(46x{2Q(v|!6{bPwXx{zq2Qckh78 zpHK+H_0M>O@)refhAS~O!*x9#_=kw1#(#XsP(c2Q90M5)VK~HSXUO05%iahzSsATV zsx(IqVOtgsh<`^){~nnIY?D_A;xq8|4Ti6ahND5u0OpXW}pUgs1|z!6Blxq9`2@rr16>v+JLnL z7JKDF>atu3r}a~E7}6`U0)Im}oOv^QM?5t&0?#v2Cy*nMf`PLS?#_hs*-*j3`mz8Q z9%$WiB+>>li)A#A0)aDBlad^TZ<%(tTAc`1_w-aNl~T~{In~kbij4KpQ>{miW|l=< zfH|y3I`FG+ogx5BuVzfS zxl+|;JC51rWtLd{=++C09M632sRNmIba_RFKqwqDEsqVESH#IJl<@NeWXmjP0|FF8 z^vsD8ZznvFpXU{vk=mG?L`a$C&iDvIe+1Pj4Z@B4K~Ki_Ycq!+4DLj&Iura;2xvZ0 z%U9)8zAS4tswHa~hfgem?_=xM={&m!n~ znfY+781=?vje^uZN8D$wU$L~7wfc3xJQmQKhv1Xxm4>jI*GOG~tV80q%pqv%cq|g@ zY&2x9eO!-B*JkE8Br~Hyjpd%>lC?wzf%?zN701_ zl2=Z4vJ5cWA}!K|z#VcC->@}S8}a25X5)y2nPg4zrG2hVR=li`4OoW)Qg?9|kf@ zm9Oelq_Y9WSul>Nc*w6|S`Oq2e7iQYnCue^k4NHLCLIZn$;rv?30!{z&vpurg0rOu zxq}{g6tiI-gg?{Pq4?5Hc{D%IEmg{6GRU9pjpS<@gI6L;QO5=%6IUxkb$Si4@NC5Q z9_Ejw7!1jN&*9^>nKm=-osy$+33RQxL-v5bj35g}k?jy29f9QWaWJ#L4i)SgIJnKI zQpN!0er!PsNZpp%Q*x8>CkLM}MwcipW2rt$*tL<&e$8{a(R0RFNZob@wS2~d(9HvRek_?1q(Of7-Ac}o(ByptE-AcRX)7|acJIe~$5R#CX z^xg{z2}wv#NFj}cG(rgJy^~%@@}-jg{r_)f_xA22Fkk~F{C>9fc4y|zdvD&nc{B6o z&68&43zdAm=9Plpa;4w|DZY+71eASF07N`Ev)e2O>Eylhs;fOmbCsGJQmPJXdprIM2Mn>|%n@ zkJVg$OK!~Z=WoxZ@Uf7q<^Z1)fwl&t_8P2b_6+JHLCve71uEsCf-@TUdx!o$nI%9!aE8X6 zAOLFuf8WjieyuGPOa?V)Jj#>u_eXmj5c-cmdr590sMICz_#K%UnYjQ4_V}G`5FEue z{^iCmkAsR`o_I2 zPTxkYxbLE4`|=ejy-*%gMZ9s|Jbfp-l5S- zPRf52ICEU+9}mu`^saA6?+IX3+FkA*>K>MvquKovU6626m)o`3?cVIJ*z6v)+3nq2 zcTu~GI$hMXy0xNB&Ng(${#NKGUwMUpO6Z@8ie1)pTzw>0A89R&md|M)O!=n))6+wL z4KckAZMKfBldei-D>@IPIbF)h7^Jg?UX_yqM0iAUGMTQ7rpZ7f$mx3E6w+QfJ?fQn z<-C_Gr4wyx`$VOTZ}}QQLEI}NMKos6o7&_$ffH4T`q0V7*;R7ou{wl2Jz5b{q!~=m z>#t34azRXzzmD8oKNUA;N8CKa?cd#qJrfOkR_LG2h9%*rYs0z+X(!we`sW}aGo!%~ z_i(adpotCsxtTdeYo3>bfcb-NDn}{nj`(tZmrKdLAoMS!JW$JSR4scE0B#DSF zYyxbhHHNbZ{B0D@0QHMQ{}Q53Ko=O)DS6q@zmzr2nmJ>}nzWI{q!02N-~&ej=4=uH@yY`th!CtD#Xf^DO)NFW2mod z!gaJ_ua?HpmmYDPGI&uAFjj+Sk}g+j-6_-)Q;W|NUJYYpdU#ly_9AC=c-Zzv;7vA1 z`~m_EsHI9}3kuh(=~1bS1Dgs|2v|H>sRLrEgq&MJO3H#=Q!W_D6Rwwc(?B8c#;YX^ zz0DO@OZ7mjB#(L%Ql`E5(Njs;QIWJhrVC>BM#$)HAvykI(G50-{^Ka`yA9T8ku1iK zpz3<%ZN0fd!I*94tk4{h5bC$RG}*~ z50E(QXJ-KbI+^e2r-_`D{n72PU69O?sOFEw_F#{8K}{=E#&cd73J^mlhWUla?rf{V z!1HQX*>SaZb7n3+6SkY(549wQsD#anLQcj+1(>*&BfI zZmVqkt)Oxu^tVw&c56y(hoDWEm>!idDUe(#}1%6 zbuL+SW#~VRH7sqgC>k-yrKeBJrR^YjVZtCKO^*?88PZgWt409!%1JdeGu}W zg+k8`{pS#iY4RlSeQxMKk2$Am(&tZ$>ijZ)|ibJB4hnmqgh@P z`mZIoqmO8dm!lyl-B*YH>zKr`u#FXz@7K52h0@dl*Pt4%fi&^Ye*@}!W9VNCpgKle zos^psDL41BW&Jk+@|#2dEkyUe07_7QUFg4+;Pz4K+a-q#c-yoLcsm%d3?*C3`R@Rx z?+pESMLf7J$%BK)gS(PQ|J^A5p3r|UF}vH`32Lqn{r9oVv~BtRX-WCOlx_JzAaX!6JjmqrI{HPlLGdhTJaj#il_@70|n?wI|tiC2iI11S15d*zwq-8oP{%d=2x7_EBSH zW8R9%2FE8|gYvi_fK^vrrOd$`n$%&(E*x#~%7q|>T68#D4UD3N3!PGazg=`z4ICG# z`5#ctAG%}c`acBuKMMUHlf)e?18lx)2Z`H5|0gUttz!9UJEkbj2K(8Risk1(=NF;> zO90hD;`XFsSr3|a20Q&hDu(5HPt_&owKD^+(7VgYhHi=@{MhSbHfmlDuQ z?5cs2NbKI4*q`mWr_{+lD2XQ87mrZ(Q!pL(91QR!n~k=X{T0{&78ot`rd~*D9-)b? z)EFovr~~PCq>cNpbmAj$JrIvj4pIn4oLFHjPAKN0%KNLY%Oed|2P;--gVp_tLCky% z3S13KHF}R6qMV_P0ktZe?1plv#gRRJc=%jQMRPK>Zp8xL7A%xwOOVUz9yV;T53tp% zU>RC_(8_dP984>r7qPj8Er*D2e2)iu6g4Qr^Q?g%-PK;Og>VW(vH?kMt|zc zBr*UB=h_8ts~2#SxUXC(_e49!fX^Iu6QF6^VWsXnL`qnv==ogv$QqXTQvudBYw50N z?*O~F>8j^oCePgqsdXoHwM(rmhbennMRV1_X_U*uH4$o9j=--_j@0*PZKjEr(uFj% z4Vi8_axqfG-CAmzDpoK*74cE{5z0!<+fh_#K(A-YvYkcZLkxTQH0wSIbfgcT(RWti z5z5i{Yb}E!Yl-^~RB_Sj+ha86v2jjR{V08DMcYz{s*gjus@&tX>%WVuhrChv&wx~^TPp~#op+Xt2P**@lcuv4g zN>00AH$oBW?wmI|*;x3aW*T!~fqMDWXsI$ma}o=M(~ z&*@4;yKtYlYq@j6Sf8DJ9>%X*|h^vIYN&2xs9nWlm>nV*{HEc^)NY|YzI zRA}h_8>TGVStK^Z?;JkO>^Me72JjJWdM+NJoQJ=W-eDb6>77B%d48M|6w? zQ1OLGSG{wQmfdK|W?!Lt=fT?cvWZxC7D;bXKV%g9R$^BTtR;&tX6F6}J7t#uOSE|w zk5DdEdOC`hTsF}({rJ(E|1l(;qKvx56fanH&yp`lMWQ6Trs;T;9QFCsIbE5u|zO>?Q$wd9*NY_4D*0L2-HhZD=$(`JQQe|bGMWUJP zO1@UwisPyQZAW3|{#}Gn0N~(o4UbUjibhA#Vo8Ry_W%cm`_hKtuFEU3HOfi@9u9;u zp#ZlTfVyy%wgl6INhUQRL9jd?Uoz>0!)FgxH+otfKIJlGqnDFB0YBV@>gcq=t^!G@ zP~qz&PsFcKF4y-CbtN67E9u(Fvm;m1jJlF;h+RqLNd(wgB;poRxPZOR2!sScsH@ohV|T{!D26W`O% zvKq5C`ZVQA6S+yQhZSI>Y{irf{zq_p8n@nwtP#uUFmW))gNEdL9p;XdCaE*k-zdGY z0uN?P=V;sjq!)0CH9Dfg`87EOSno?m8#8HP_8@ znGNfQhg%HJwzfL@m=n_@n4&_i;Fn_;{*5;tty4i7eMnOQTzJtGhFKsPq=Av1z$Dc% z(8KQYnJ`;DkO8++B^iUH78=h@HqhWC+u4TITY_6Y;pDa~Pj^9((r_UK5;X@9je>wT zT-=fEu0eULQ}*cAoUYbI7f!J^ob27YR<&I_SbOgth*Zi|nxQ|N$8c~z^gwwA>Vt-O zCLWpmuz&Cb#m>z~SKjJfuT8(zhc~R-TW~ zpz;NHgz`d#Vb;f3X*{l@-~bBlL^UKYG8MmAD}ITocxPAAU?Vm=<)vEH%WPG2pH*E* z=Dl1$PS3noARRoIg))$Oc_m)Kv{&H~%B!`kVH&G2Of&nQH1yEDAJ(;;DeoFxE3W~M z(HO7ABb2N0mm3`qGaioDyLOOkbS};~UZ?DTy=A|d*t8FV>}%I(p6UDA8<38^#;vMW z0P;qpp{=jQBa}BOAk*w#1#J4EK>kP!~j+Sm_!CMu^+bj&aR7B%B z$$qJ({}_~%!Wk0d zpGgy(r=W(1n@E7^jinz)^mJQfzUp);n(pbo6F2(xNTS)p$0W|qM@m5@I%&m;Q#4CU z*iG~d;HDT3Alf5zN1A1+=)jilnniQL-ZW57<2)m_!7#JvL2D`gaC!ur>70PMADlL2 z3PP}9##v*u0FCjNdu<-3LFx{qyJf5_uX}D4%y#TS9FRjSF$E(UhEwzv#Uw5t&4JAJ z8?1iJck6*sIuS{!2^ZcGEmV2se5sC^TD0sI9SG`z2TD8<0uFI?liZ>6#=P>%G@Mp> z`pBu}d*Qnpq|2CYV0zmuU^RFX0i&mlcW` z4Onq*ak ztN#2p-qGCO!6TIKYGKpdtR~sqJnPa>0`fgm?)zHq2d12!hiT+#M*D}F^G7!4v~v4n z%`iRwwF{%_D83tqyG z`IYkF*M<-6cFb=yAt841TYSlMVnmJ>RD0qh|K?D;+<_cw%lr;M+&$Hn*&M0=-zz}c zGJn9YQ2tNfJ2Z~KrUpo{8)GGYjm;HLo90f<@^_OZd%;W{#W46^fi0XA&>cKNCH5>A=$>dHEau>8!=8X9Jdo`Tsa*NoYGcU40@;+ zYrB>9lf7`HJfEwAteBhRdQP27x>zgBRRi4v*F*0};jvfEHU*Jp4HJi3@(9~tOp%0u zq`SOccoPA8jW~e~_*ysqb18h(Lj(jE99Wz_Y z7_5U43plV%dE|I2T(t{LxJ=8-HFdy3caI@*q!35(r8xMG?DjYKkvGU|7^a74T54xTsa}ECU6#w}K|LlVkSBQ^o zT%6sI1&VRXVodX*?dY;BM5--ib!(o@y@-X{PA$t~=GNmJ&BuK2`FV~Z3e6IN!;ubI ziXWjYW2J6KQE>tid+NK&ob08)t3_habjYJfDhX_FK3mTp%RcxD;oBDvc+281D&SC8 zWR*tv;&UJL#l1&rQT8{`4^ZfjFwoT(_a1?1v>Mm)Iuux^1-376no|3+l@8QQ(|5{) zkPeox<=gbPJQ9iE%)xksl2%BDGejWSEjOXK>6SZJ*UKRWgXN0Bp$3EOuBxq>$%kp3 zhub<0lcyMY$mAn5)AUR}66u!7Z4jgjiC}U!9-*vINQTKoAj#z0z~qP4I44IL+E*&= zJ%;w|Lyyj8!Rl3N`z*B#88$pT<#4(0Y^zdv8ukPDB}Ksgo4IY75|2VhBUH ztpmWW;c*{sR+r(!jlf>QH82;u_FRXfflPM^#&$_d9ji^WeQPe<)#JskC{GW}KiXKS zE;<+xVr=+DNzl5NB47*m+N}!#a5Bas5P<`OTY>urmjAGB$L)CdebPEa#cCl&H3iLP zSY|dUmwwR7Mmt$)Zf&&q2$r0}d|UxN6+c2bO|y4oAA&5R3|ON*5VbiyAF>~)@zzMWw|De4n@{k3-t`mai-02mzw%4&D2`IfkqV0M*6gx zdIJ)H&^dU7GN6!5XCea0&U86D(*rBia;`!4JVkcUAe(&bqo8i`dU8)+pQ=^k`=x!6FyL?Kg1iSj*# z5|a<@8SR5yst_M-A*M0qxr8SWp=;pkQ^z4+-7+jY&_szP5EF$e4|mr*{MhK=M1?k- zj8w6WM_rOw1;yTYkIwh`hWkdY6Wy1F4O1-->M zQ^p=d4HNhcI%UTcmA+g}TQkNoq>EVvn-+91O1n-8yErMse(P7p>Q%pLR70KYPeV?# z@^w|SJVx2qDk-Z5yl4*mSk2I%U5$3X_xzR300a4Y93G(zDa?-h2oo|v5wO~9SRv;u zWQJ*)x=qSF=IxhBUZGN}hr&=x$HN1IHoom&WH?@Vv`D z#l#1qLrvA2^xHk`O7~MgBAf1WCjzd!xCh-I-3N6{+js7B$KhaMRs%ANo8()b#uW6P zr&F>si11i;%9TL2YJVJS?!Za%b_Z}vU4Yr$I8F-mOez}EgLPa$<1XbuOG`*Ev z1BiO=l}Lx4TLcM67M54xJJ5eM9-+KOftbl1t4&Vs&OphX(&F-3Q{~lKw5jc4RAljOeyW?+UMeV!e*D|;6j&sMgO@QxilYDy|$vX;qcsZN& zO@zu#@;Bp0C^QS92a1XsB;q=KHzw&@^>?*MM4C6r$shuI8=w8z6~NEL6yK4~C~rq8 zNY6X)2<4sl8z~~9WTYqFM2}Vn-ldt}Z8FEJ14iHzK4|aJZ0|MM+I`Tj*Mx+;%lq&p zvp1uBOsWfgHM;0V-j5XZJ^KKDxQo>H>?x5N_@Dx!@7WFb70QS7-MGA%i7I!V8j-6$ zOc%k1Mc_qOFUFsaDsOlTT=t zn@pDMv(R8?z-37Nz>Ui{)oK|5P%5$ohfXp7#35U#?-gVXW^pTebpoz_<5)W3+zn;)7;3RV!GM{holSPh(dp;E43VFw4un+`y%#PMhtDaqv$ zUTeY)1T{2xVFR~x*(4evER}b$h{c~8kGnvZL+)kZgg-9oqW>RvQ|xvGy#BBcLO^hs z9F6us5|v?*1h%e+0~kPy`_7JE*Td`$aJsufn4kd1>v>uP7?&rpKEkb?5qfvxOopzb zSPw?)SBb@qL{&V`&RzziERTaGJi%gg8?WP1_JL{9tu9;{BVfiTvPZu4+ZEeMl zqHSb$#l~>*9nJDxlO?+kI;IKvp?wpb#j3O>ia2Jd3@61@yAHiIq8o-V=Ge<`G~Rtv z;7FY`;Iln<1h-|ZkD9Rd@J+U1?aK%)(Vdtp00KvM%skW=6tM_-Qfvwb803ht(ER~3 zQ;A~-@{}1y^={mOgs#Rdd%Z!(EMsz|5og4(=Gvfss$uPW%Ch#p@$9H?d|xy4XD@+{ z-$gu?AD|AjGgsh4`H@!Gu`4Ttj-bHUsmYJE+S_flQ$`21JVN<}LNLQ8D>TFB6+odsdmM`0D^ZePnks&!Rs7miaqq!3v*kAm^tTo$ zNsA?y_QV~UFg;6thjh@!NC+zL@_T#$JN|$N&PHfy!wy!IWCx>2B>IN@(G>iX7W}g* zsG%kjnVM1mi)Q_+&3ZRpYJbyg(-U$h(m}{{UTS|wGRXP|9-;hGVHvWBM3SrvNY+m7 z(DE-+`@gmJ|CrjdyP~F;!7zo2C!!))od4BYXUx(GQ+5LMZPM|b8<9|0FxvGd!oXYv z!U>4pH3kc&%u5NWetAh}nX!0a(~Q>j&Qa(w+WuzPXLNYR=Fw>Yc9>vc!Pdf26GSz{ zx(;1E>a}LQR_q5_l+ZmCvDSud>|D%5y3R#r;YTR5A9y-s4pHhXlCeq8v$={|8zlqJ zr|y}@GW`!E`(-{*Kp$9u2f}JAvK>WB3z@6qG#2w{Ml)*ILe03yWNe=mFV=(vxv~Ub zGW)mOPTOMx>B&;0>dbfPOgek@>4m`?|Ke`Eox4!{FJrxjpF(bh)!a8g z#;T?@E!1AuaQaQNl+~%_XTTz7^knqRb!VJU$j7ql(YiQ}e;9rWC;zc7prdH{Ljf@2 zz&^8Fvm9!&=n;>Ecxte{!!#|yKRFyiWhm18~~2oYyN5Y*742Z>(bh&v*%OUN;^k&@Dt0vm;#VACrY{~WI1 zrNRpBpl}A~q8I!L;EdGpFW}5MQV!}Fo@h|*md7fW+Z*)Nk<2_wGxTTARs(=*5vcw? zHiH}oppb>*@d)Jvt)XM5)&S9^6xlhziCWJ|wjQ%R(JTnGC{}BFD=Q2j4#oXQhiG$q zB3W2Y#&-~N3Lc@Hsz8j5$Z8?g?qT-6I|k^X#K~!<#OYdMjVYnwdzjjc`dZDi&gPj8 z_4S%QJ?dv5eJa$?#CM>679I$|tUwIvtTu_d##Y!ZI)-d8G@YX~4H%kCY>3?g|3>q3 z+4o$f;ygmsnsMfDl$xaH%o8zu;g_eG2;oR?&*(jxl1^ z;QAe`s$xE}wlbmgL3Su0Oh4ZJSWiI3I{{d!aF z)Y!;lkOeG$EFPh3*8ClJksnx)Q0ObR`s1|JkS)cKVmm?|#bH>>w4!c+Q-|e{4slox zkay2789{Ckk;elep%t`|6C#+D6TSa38sjW;9aDHz3y+z?=Az8zj4|nG@m5zeZyXm{ zr^H2Ru*FkQMGNW#&;XB4%>rjmjE3sl8T7^AX%Y2S%VY4oTRq_wYVK-yL$0cBLj>+b zn`h=I2-yO-WMN6+!!>7CT|AAya2KFuoTbdg#&fg|T@%r2;Kh^S$%TRkE5r$;jI5zl z@Hex^iXsaJ#(Ih_z(VWO?YOG>eEg*+-LF61S2P*V6gUx(;f}8 zg9ghuZsZ!TGcZ97zG()Sc0t@ys>TOmK13D=;s~D)e~S1PmpCpIFx0>fSc=853-Fg$ zWaR?f2$yIWb9zFQ53LftYT(+aGX|QWKYQ*@W|Y(b7}8(IBb2RLOUF*H1r)QrZO5O` zy0+Q67z!wAE=uO4es5)k0l?1vc%-9q^T?5D7r6{yK*AI72qo0wrUSF0WCwl(%1kQ} z@6hYHC@<4@a|!juhm0mddnLWsrzx_jeA>A!km^Os5%yU#++caybi^i(brky>lJD{`tOYRa}CS& z-`iT>fYKoHjd+A|t=831w5X6QLnJPpls9RXH=8WFZelnM7kHN!PRd&}sSVR;$d&7m z-fDF?xDFLp#v{Isxpq?CicF~NZFnFWt3srv0r+?DB{NqKO>C2Q;w`gBZ^OHHF2*)o z1S0QZ!VKfqiyLkMpR4HdZhoGNFz6#*UfzS3I(SWzsLkJtXWPAu^j$O;SIYHB2U73D zBb4_uGpq#$pg0Tb5Oh0WUXILMiZ|yftgR4#VAC6!=kPlQ*8`N`Adf*AKB6=lOqBj! z`2Z>)!5`F$TKU;oByWiI4Sdpy`4E1D@?p*1QPkpy>d92IoTPH}5lwD|wrb$r1ocs7 z?%#DJeGKp+WjEphcP7OoMwHmAl<|hU1u@s<6Z*Yqd4H1@{iG?HJyI8{7^K$r=ImP_PN(xtYc}}*a0qpV-T93^UTeRv;p$l8+r+yvIrCjn#MXOB4 zCPQvq5deVG7-wj7xLf6IkSvYY2_a}+aMGnHICWrZ1-mYuIU0lmsJ39#a|$atsVDNS~|&nYKc8NX`aJ?wP1Ff-iT9_I3na{2S%7}UtEcpyrv^0uRBSx?c8 z)JW0j4!wD&WrUI2qI|GnA~WWT3h+w?Acrk7s#)75WnS6_dJBvgpX~TS5^CvK{HcVW> zcUZvKFir5ji|^pr_wWei`wFF_Xe%Kq4IAbMn&pQkOSWSsroy@zMzxts+*)oirH+lS zyMeC48jy{YtWNqoG62UJj%j+N)oIiq#B15%-u8wcvMh!Hw5AR zM|Z;r=iW5V>*Ms2FrExt5B1s{?8S4V0a;Tc4h91(wgxRQ4%iG2 zvsEvuluGM}4jg=+r;KBb1*iUppS=>wWIAkZLMH%;^|j?`O*0pIh!4uPxi7 zX;S?{6I$inK;Yp1OQb^~(`!ph$*=GMjrMCiLivrBHcKe12x>Uqx>}DSJ40v4Z%vJN zXpO%!HD-4f^k!!LUhDXSt;0m0m`Y=jbN{Egrsv!rkq*u=TuD0!`4dvX#y{f`%3l4Ze4rGh{MDfOH%0SKgJ$*tMJaAD8aB4_AS7p(^4a>Lu!jH!T8IPx*( z00FZgz7Gz07`Oqa1e%;`R-z7_XkoL;ME*t4g;LGqwFrR&U}|7F7}qMJsU}qHGW_uH zS{{|b(l|JPfCf2^+9tkiW9(LUdy}dc>5bST@hIAlWq-^-jT0XH`ztww{8f7)rBRwj zF_5Dq=?S)&LjoYq`syhKAcD7j#xrnfM(j@bXymT&Ecs|Ie2M(lrShW_lG=t=*pq9OkV6QFPYgGVU;RgQH0 zPjdu%gqp*Sk~83F0S8h1<&v1WP^!H%QSHyvJgwqpfN{W_g>Bh0}g zl(`DXD1BC+RQg|}(tl|6T$yKxpRdF(FvMpcf`rC`m6({Pl<0+q==O>EB27rhlq|-V zOh>|bY_bPyer^y?)0ZHFPScm-hdWQF>7R)--ZF*9Y5Jb{70O=v-jO|!8c-&ywF)k| zsk)QtBe;_2a$0Go?RyhgXOZY8r|tV_`2>D;+8$T9FAMbFJ^cNU4;^5CJVH4@p>`B) zr9`zcjemq@=`dNcw*c`?7=VX|H#!)doU`>lBHKffF7y~Ena;y6F6X)R@)krm;@0sP z{99}8crRlaH3m4n&lujWWeiq09RrJjgRQ+SX=N%|U+>1V*Bo=)@$>)$DyW0QdcCGQ z>NfPE&ZSLU0gjmCD`^67p3SiQG!k$zL8Z)TXM)2z?d()S+c|u5)T9S$hD6Z&gYW^Y zd?X&B9IUBLLGQ^xtK8C>=MbA`33!>LYj~JyZMmklBG6eR7^<~H`83hS8%-dG;VY0h z91jGJ#@}fBj8!HT+DJp8?ZW1gBMm-Xichz}Cwu?YjYdtde1&3gl*PbAac%G|7A10i zrDmF*^F2rh=QXH#Ec_ON^db=r(1!;+WEGMbQHVgY0oI@a?z7;^(Wbg%w7O$Wb=jQ) zI%Z#F);~(?IL_8_GtfuJRS%HZg&b!;RDU@gZFi+0L1HJUY^=qOD0=$er9u+g3f*|PZ95R&q|U2-}fwggRDa!+eO@fn| zi@M=CCZ{2nI@;a6Aj#>-8}AxN(Vq-$)Yog6Z0>ezs!P@)0Zp|I4+Nsd-$-SXTGbdD zw*vzlj*80}`muGl8?g%+1W(RHD)@939`FUmUmDMcgS;K;3hu!Jd)U^%j_F(jR5kz% zId%@gMVu*GYGnXlGmDj?9^38YTzu0|bf*9GZkF>1V?J!6V>V+5>^IRkK=dHKhjKpt z5>c!a%wT6U;$W;bY9F)NtX>}%Xx6UHav^@GmsC!JG0H`F&ynjZHlq<_BVMs9Z_+kt znhC}=KkC34eC%>*l3k2npv5W8$Yja#>L<0a44f&OFk0LQ`g#np&8p2BWSIYRvd$@e zJlNCU))b*x#=r=v=4&mZn9I0M)+xgsCU1e69TyFm2#ZU#FOFKk6(X*~+Hf$kOz4i1 zMh3trQ9$sImE5>SoDki1UQw%Tamt7kawc{P;%n$}+=2d&*k~pQo>#)kNg;jC`T0!su(lj0Se5hsP<)Z824PCR@s4XkK$1RyHd@*gw1 zKM`BuTww#gDouLsD&1wHU1JHVjz|m4ORo!zX-W;&vqs@x$(@uGH|804Qt#*_F^M|R zC}1}jdC=j{tV6cOq)c9VyjH(zPTE&EpP?0`*vkEDGJ9!AHG7o%wb4YN92ma|g$Jp5Qc24<6+shoEv5fDn{hXpi)LvlQbNh zZKmpidd4*Bjf&X7YN?y9IeJwCMq5Gp3P(k-0R|Enl)8s51i6Gk5=U)#i88OXCpDrr zycFrW5%@CY^~)dTHKS>mM!HL0%PYva&LU;h&NeTHF$*bTIFd+(XyPP3YD(^RCce{T(2{^vJ6mjcC^IIxl(j@1l;Rik36kr z`!!mwy~Xy4%=S01kcmSv9o#n}3(&n5k5JyE06U7NvLdllT#J{%pAG}}n>E*4Os;Gh zYV9sAN?KjX9Xkz~Dm%XM1Uojp?vPwIhzAG5sx(=f@Mo-i?gOk*LTB08T6vpNIyb zy>Xqkg^GZ@6~7yi`rn4PsU!8j9VtZ{i~k+?jaaAnOIvz9T6Cv1TU(p8LEg0uX6tWn ztu{RFVN>l$I~CbgjCL(P&9>FM$mQa8yj@jn2?Aey2EG=b$&7kJ6d`hpE%DtCpc;NR zq4q!APCL}4?!KMmJ>Vy_-+S>0<$AV{y*8KqqDfP~PqVz=WXVpVr4Xx67x1ta6fbuL zk-}prQ26W8a>F&>xb=fePgdTU##NeFHztZ#opM<>GN_TDhZ+kzDLCQUr7AeI!iNS& zaSilnfsJONs=l~id8qhO69$wwuh6SGfpyb59lVmUD77`l3P_{?4?(wZcN>hsQiLuN zR;RsD4KF(3VY?Mz>@_K*s;mimYYeM{-<3D2*Nejzp^!ldH&z=+ zrOc`xVteT=mZqKI_gg?{Qu;9KZfbo*J*lI2)QXy-0#LHvC|r;j3z1ybS+e>RjXWI&H%Xy}6m`zTCWe_W>2kb~E6R z$PD(${D%t#(vH2f3jU%@hL_e>H-f9rdKEOydH_jIn zwc9Le#$6++CfPr~sHxL8(3g;o24c%LiprPq6^-;2JVN=Zf-sH5DwBtH z>ze-?CV$qXHKY7Z&G9Xpqg|f9ttr!^`yHe=%hPx91*m=x4;=W>;s#Y#l|=P0n5qvC z7G^-atHDBkU^x0i<>-$LN3#!e&+Nd_oVY9Q#o}(ZiH$*@SrSYJxUO#qF-QYAfXI)* zRrb!?mAeRJFsFpAxDvLx)tHx`;Cs=>pB&DAYv>vGPArjyQ>D4MC13*@IjXgevThFyMe!)t#zZfuCHTJFHa9~L~6$`UWB8&^lADWtWGb_ zsg1h4m-zis3$}GfSEm-gVkQ0e45<7Xh0tApgGVU8Rq&>}5>wM%*WrPG2tR1t%ZCgH z^srVLtyF4UjvT_aERGfa9w`HRWag13uMo%|@Q#xh_}k^q zEiRn}%;y!C;MJX9JeQ9JZjYOC&vO?RFN2K@5;tkBQ zXYmd`_A2rqB)7%nj|7y?aYB$;2!pd6z`(}psr(5EgPFxKj_~3L| zG?2gQ$G`F8vS4z2q*5A+N(FK!K5v%4GjY!*nibwZH1(fM-KVAKkY@OoX81QVEI_j> z3j_I&e*G{0Qg||pBBoQ!WCnJP1~Yrbv_t|N$R0@9EHm+!*z+hS=$xh5=X(X)3bXMJ zQC*xwHjp`5bS{f7j_@!T&cnA*<}+m(T%q)S!yzM`fh^EsDJIV6)-+r&16hdIL?8ng z(3s(r3#p59C7fVS$s(jzWHJ7RvV?gvdqw;l8i6+!sN53BQlvmy_QrjRaL5`eIG9uw z;MM|DQbs$*&fKg`gL)w!YU&i_aneLTy>h1 z{rP)wbV(En;#|Z5{5I1m%Om(>fgXjZ<;JVhfp-$1jWncsMmq5g4YLTO;+Q{gzeG@y z12tpH&6R34+d<4WC$re%SK|IcAdh4|_r$@>foSrI41rNNdRZPDGOq|DTPWe@!N`_b zMgjs9L`2DIi8t1z`FT#k8L5xSA%v7!=8TUZ97a%^)WFQRGjch;UzIrsQDUq0+H~*_ zC7`)PEnkzv__7#2y*0$Y7}~~uCx_!3T6JlmK3*M)MHpdB@g2RfP|5S;j?H|e$-HC& zmsF4zz;$xt(xrL#WwY@(3tN8(iX5as-n)^A%lDjW&*7^cRge{Y-4nsHY83xkJ+NFn zilFCY=E9#~)EkqP3R2rVUmN124f9Fq(XadFF>Bm11V2TuG=wRvMz0E_7m3?52Z7Y_ zSRFLPXvkaz*oRD4Wo9|$t+Gmi8N$sKB15<`P>$Bm%gkluL%K)A3(e&i{k|8u2ajef zzJgH0!ebTYLZg5Yu%x_29;KO=usY21GvwDX76q~%->%9mqWHwh;|zSuq$A}qF)`6w#g!=V_NMYEI9vOW zJLr=$nGItAoOrek#TPlsS^PY^R4I?i+5CB6Gy7Wl;09zVYTrPNp;~3A!LM^zc&1m7 z0sdHm&X8>PbMf)2OsDDhPRUWd1iseXA$#au&O;XTBHJL^I|3QR$IY4jw5wpL+`$bu zl`=XoHz5mhK2o=57D{d+{&WF8p^q+BUdCGeLc*?(WcF@l&5$NSkY6fU9IUW1;Xm~xd7y1sADQ-6-&1N{yD0Ua)FIF{lXuO2-82qh|^!`7SnFoac diff --git a/docs/build/doctrees/tutorial-building-transactions.doctree b/docs/build/doctrees/tutorial-building-transactions.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3d2f94419bf472c1c43bac13f426da9cefc6652e GIT binary patch literal 83102 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 CI{X#@ literal 164175 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 u#;i1RCi&40HU7?z75+cf>K{e` diff --git a/docs/build/doctrees/tutorial-cordapp.doctree b/docs/build/doctrees/tutorial-cordapp.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0912907e18a35483b515e135214d27628568538f GIT binary patch literal 170221 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 Fe*?)^Vh#WR literal 0 HcmV?d00001 diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo index 6c71bb6975..4e8710d66d 100644 --- a/docs/build/html/.buildinfo +++ b/docs/build/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: ad4aa434cfebd269fdbb85815bc6eb43 +config: caa85c0cfb7660f75ff8985c07fa3b0c tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/build/html/CLI-vs-IDE.html b/docs/build/html/CLI-vs-IDE.html new file mode 100644 index 0000000000..5c7d9233ee --- /dev/null +++ b/docs/build/html/CLI-vs-IDE.html @@ -0,0 +1,352 @@ + + + + + + + + + + + CLI vs IDE — R3 Corda latest documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + +
+ + + + + + +
+
+ + + + + + +
+ +
+
+
+
+ +
+

CLI vs IDE

+

We have tried to make every demo, example, tutorial and sample to be both usuable via the command line and also the IntelliJ IDE. +Most developers will find writing, editing and debugging code more easily done via tools such as an IDE, but when code needs +to be deployed to run as nodes, control must be done via the command line - no organisations allow their systems to be running via +a developer environment.

+
+

IDE - IntelliJ

+

IntelliJ (the preferred IDE in R3) integrates well with gradle (our chosed build, deploy and CLI tool). IntelliJ understands gradle +tasks and dependencies, automatically loading them in the background when a project is first loaded or the gradle +project changes. Occasionally, however, you may need to refresh the gradle project manually - but this is hinted to you +by the IDE. It’s a good idea to do this before carrying on with other work (and in fact you may find it is essential to pick +up new libraries etc).

+

There are some great resources about how to get started using IntelliJ. As opposed to trying to repeat them here, we advise +you to go to the IntelliJ docs here.

+
+
+

Command Line

+
+

Windows vs Mac / Unix

+

Due to the nature of their respective command interfaces, gradle is typically ran in windows with the command gradle.bat +(or gradlew.bat if using the wrapper) and in Mac / Unix environments it is ran via ./gradlew. For brevity, the +simple windows syntax gradle is used for the majority of the documentation.

+

As well as including the most significant run and build configurations in the IDE, we also provide gradle tasks to build, install +and run significant parts of Corda demos and tools. Gradle is highly extensible and we use it for downloading required resources, +building components, installing those built components into shared areas, configuring the scripts that run nodes, starting +up demonstration API calls amongst other things. It is exceptionally good at deriving dependency maps and therefore performing +the preceeding tasks required in order to do the requested task. However, when confusing build errors manifest, then sometimes +a gradle clean may be required in order to clear out any build areas that have an inconsistent state. The total build time +from downloading / cloaning the repo to a complete build should be only a few minutes, obviously slightly longer if the +unit tests are run.

+
+
+

Frequently Used Gradle Tasks

+

Note that the list of tasks can be ran for any gradle project can be displayed by running the task tasks. Also note that +gradle is hierachical and therefore tasks in child directories can be run using a colon seperator - ie if you want to run +the sample attachment-demo runSender you would use the command gradle samples:attachment-demo:runSender

+

The most frequent gradle tasks you will probably be running are build and install. The build command also executes the +unit tests as well. If you want to build without this level of verification, then use the assemble command - but we do +not recommend this. After running build, the install tasks copies over the built jars into the local maven repository +which will then makes these available for either the sample code or use with the CorDapp template.

+
+
+
+

Debugging

+

Tasks and processes that are run directly via the IDE (including via the usage of the driver DSL) can be remotely debugged. +We do not have java debugging currently enabled in the runnodes scripts generated by a process we refer to as ‘cordformation’ +but we will be implementing that shortly.

+
+

Via the IDE

+

To debug: From the IDE, configure the debug connectivity option by the “Edit Configurations” and choosing “+” and then “Remote”. +The debug port start at 5005 and increments for each additional node that starts, the order given by the list in the main +driver configuration (which is primarily listed in the main function of Main.kt for each sample. Look for the string +Listening for transport dt_socket at address:5xxx in the log output to determine the exact port for that node. If the log +messages are mixed from several nodes to the same console, then (as earlier stated), the port numbers increment in the order +they are listed in the driver DSL configuration.

+
+
+
+ + +
+
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/_images/allCompositionChart.png b/docs/build/html/_images/allCompositionChart.png new file mode 100644 index 0000000000000000000000000000000000000000..e33304d8db84591dae06a8eb22b8c50de865adc4 GIT binary patch literal 22693 zcmd4(d0f)j_Xm!fmf4uvs+n8MlunCg<}PZP*{)49rsa~EODduwDk73CI%R52izbR& zla#sd3t(ANZfK&Y2)Lvqh^PpNDEwYnGoSbG_t)>A@8j|HpI+Sc+;i_e=XuV#rw1+< zom76=`HP&KoXVNgCx4fdQy|O9tyxe~1WJaPerP#4w~#X@kN*)f#G!fr6>=?JPq5PM zJoDu40ilCdB?|*%$QqzZ5Raf}iK4t&k56-M@ zo2yna-hZ7~xZ%l$*0Az$@$Sd(1rA51Ho%qc3};+liqKom9j=9cANF=$Sz3F1!-GWSIC~m1(*H_Tbki|p`s{j0K)!X_lKCgc}4LLdcT-R-mxr%bPH>_hd zN`+e;FYR|-8zd*U3A^2KGj`2?^>PVUFKtWM`J)18FSj-bs9*R0KudsM|IP)>ap`}F zkxPjEG|!QWYPs~46lv6Kzy$I^)B}Ngw3ciMKrOMIDWyn7o6aYmpi@wS0Nv`#VkpS< z-lt`;!5lM&Qz>0RS!X=ffR%vfzYrF^H9`xNfa9~v#ktDKlsbA>`h8(A!AhQ&?i@dR z>9J(iPVB7bl`PdgflZzDV87%v2L3zKor!~X^LvFp<{uzcj^5qZ)UhV#okacKD@GXY z@dD{QMOR)NZ70g6V>oz<_$)*83GXY=+j`@QWxBB+)*Q8!i~64Du}bw)Ut6?f(5}7| zwU)jNT|4%t0&Lo(3PRgYFHHOtL)tiBFYTWF{(Y(#G@>WPNhLnE(Rf`kWt@rM{5wy3 zT=4{>TM$#M`X|>q-GVVdKnv@L0{Ak1ba>w^2#!+~r9w-%c9Fh&gvp#r+j20qMBY@k zWJ1^%x%Bsk5ihA>HHTaRK0j)<6ySn)Ju351fO^gzs{Qgc0vQ_# zFvd;^75XJ7IE*CtLfI2S!3gp8o=Lrw`=5vGJ?}<}CDj*#kvGs5Y0N5|y^5Ti5?Rab z(II(v>tl_a_nzCZd*cGEQ#t#JmGkUNd zwb(AiOsx9WWZuI~Svax-^GKC}`*6qi*u)m5_)|ay_ON=&p-sT?luKAzcQ%nZq(DvV zG)}O(%jmx2@1PtFQ#j}u;0)Eu3>xUbFm{@WKLkrWl5W;=%fEX>#KWmu8RpuEz;#@| z1S|GejlZZ`x|+-4(2Lq*Z%1X!Q6iWA9o725@3 z*aqOBl{FL?wS{q@6R1hw-XXM?_OZX%ttFEj zT=Q#G-3=k_V?YDn*W`J93rTlu`7jR3Cog>yA7-tnugVnFa|5Jdd!>HLfAw+pDD^k@OFR&7_uBg#q=fCD*1WIHCh1T=*&?B3<9q?` zMq^AdD749JTPP1Xw!D-WMhq^$kQGhFaqGK!s2CW@*J(!yvAxVQ4Gn%-T1)*FCGwcc z6LP7L9=2@v&Xdjv#ZwD`AR#vBB!uI~<#Br1tA+<)1xHeKdK+eoL!G=)PJfQxd>*hdHw| zN?(~YNyig)K(Wa5O-eB0pVEe@(xJmH2Or90h0*@l95(M2ggLsj>EFo>^l3u%oz~yH zZv7m%4v>G>_YrC0 z`=1R>*8`=Gpq6UAwY)HZn{tQ3hu#0$2zb92EkaDACzg%Cf{)0Kr zJqG-G_Z{22T6@siDB>?FZRU zixA$yGDx?>=!y{Ey$$#}(iJX@uM?jCvDkopz)_Tw+l$LinyURlQ9IEu`_^h7<|~BV zu=wPUmX@d`*VPGP(s}mCe|`gcU2lq$EQoX|bAevn@k7qyTXu4CW>I<7YNVW0Xj&dy zgC>j}f}F)Awspo)lSTMS1&MB;9j9=mih-}Yyv>ijZY0;}<9zz)v)Cgy=Bjw2b)&DP zg<+<40$Zc**DF;yg5G%XQ2d9KeBef2gVJ%_;sF>D81(m8gg1WvdFe26h3!oce=kUz zv6U>2H#*yjZu&d`-=GfY3pk00@UBTN2)0TXCt8UUjgk=JS0LLR;iJF>jDyrMN{mjM zv14OzjP04d##rj7)e=@XjU+qia;RtcBMVn;=!iV;Eqb!-w2bB)f%PlF*44`}klExy z{j}~2#^ZFnsNEY+7)jQBk*?0&%-znl>`^}Vv-!vWno~taA1ZaM3U_!d)^JiD(4SJa zaB024yc%j}-s7JHVmbP&SFdbEIZcNZZeg@r+Gq5ulZP8UsH6 z1Y3yvP|MarezMn;;MCpO12X->Rp9pp-=B)Aa-Sd_nCBnm0^B{ z6+o*+&1ivy;i?=wpT}+7@FeHlvZLObbfT0DOyNiwU4SQPJk6(Lo!E=SS~ z@3@3&pi(I}&;$ClMJ-)Kd_YJ#7flV&8RL%OA{Z7I@lMuBRwr(RULk=b9tyW+G&mY4 z4PuAT!|Yz%V7)EVW^9GZ*%Q-B;tvOjjfTwW1+?1!gI%Qud)Kn?ro)rLB4iP<$b9pB zQBXhNw7ZNU(!i9dDm4$5*1n`uE`01wsFS2G`3)`usF{`SX|oIoy|O}p=U@*7NUZt!tVW|#n7Xb5CAJHsw$1i-^R!4Vfq^Hs$DV7acx zTNALQNewe-+yl)D9@Fn&avGduASDL+3lRH&+nSBET;TNi;0V{6PmJXE9go21)T`026;%gMNp@?TtP9GUxw06?(}D1 zM*R|E4F>u~r!+UF_l5VI9jE=>N6vxj@)I3q81zk=tQ0PSD?s$rg70yc>TeEkl*!4u zS6*=45%1W{t3nd#h#eO@zF*_(R&0Vpv}>%YmsJ%5DW)>;)_+_Q&cJya{_nQVCp4(8 z?{dsLI&xS!$bs1DSj+Ml+xdvt6u@}=?ZSFi4emwXoTU%E!_2qKH^jgzfRUw~%_}JQ z7Qi32r_OyUZ$|VmtQ)l7Z)*uL-aY@Xl3?@luPB?6HBr zDU;058m;mAL-|#r^FPHfBVLiUbMi(VWNot`{M;NA`71epd{X}MrFr)cBJAs(X23-j zTxD+hHe8cP+E^T}3s>dTPnz*9kZC*szt?gv>1pL00) z`QdKiO${HSsU{fiOU6rl-xzRBO^s|CI_P=)Wt z?Cz8Ynf$A=8uhRR`p4v*8BM)Pr}&~?q)%8+TbqMe4X4Z8G#cJxoQ?}XG?h~)EsJBb z@>bM!xb@5i7W^Buj!LSbMP(z|%!B+#JS}JWgwzOsX>L;}YodI1@Ji>kp`s z>wLcrZqIIBldv&2~4GF&z6ItRu zuu61Xe;M)MPh2wc6PILE@n+`U7Nt)xcUGl)eVk^oYK%Y5(i)?!O|>iCIj;Y0^IDdQ zjlP%}FM^aToM--dR$I6)4Hf8jjq{RQ`F)TA(C)7d<7()ObB2;XZqAE+K}AYL%xeUL zWK62I?G9;5jvWBcoT#5Z-CRa4*DlRO6U5z@=lP{5WD!#r+*iYUHe}RgS|c90tES7* z0>52pt!6msAs5OZRldtj#a8EWD?=zE{1Nzm>ucXkzCh28YA8DV$rh2ld_R8 z-MC9ST}fiu;EUI@To|Yz4n^_(vZzJPjvRk($VmRWt<`BUh%3J0D2A1m84UbEHBx|O zL6_;l?FXwE`}J~6MfNK#c1wMY<|tOcIu=Op(x#ljb9`+8T9h(T+MC~&PJ)K|KGi7P z@;cwT?&iW*vRBV{(dV+i9gc_%Kl4r;lg^mR!S5>H(6dLf&3^nC*=s;7F{4=cfl!9o8k?aq{@X z$(a$2=ViZFp4Y}?X?!c)j149Y0Xt&&d7Q+N)MpE{DDj+>q>X2(naS3Df+7dpUYpjG zzuvW*DewWFpt=aC!~d+9)gKv5UdP&4Y`3CJ2-l0@;o`rmNz28XwvHZ<7HfpOR zylKeLmrbn+kZ9-J!Z;z~2hHFu`-Vcki?>TVMZGfINlV>G24nHw`N8y@ntCMehf%t9(=Iy-?CW z-gGJ#6C|D>!Bk_+^~?yJUTpvHsxNCFC^VvRc z6#I7OM%adW(@f$h^y!+L89G++-f|ssw0?aDj~ddz?U%dDL(_5n@R>m^4^m~nF*Vjb zwjld7&DRz(!9~$9@1ar&;-M}j@EoVMZiVH-UB>I2&843N=2S2F&{4ZVxRL#obz2vO3!CrTXVZWo1V zSMI{oisIz5rX3*~AGct=3s-I^1$ksZtj}}Li6_FS!>_4h`8NUnYqLBdw%P!p3&K)J zBe-*YPEc;BgJ0rXM{2*Q59xO)cSd>Imjv!$G2qL_4zI5i13Yvm6&!4-2u=&m9v{A< ze)yYNq{H=TV`!rv(bL>T$X_(FB5WLSV2F*)&jAXp(_#iM)b3X5XVQeaY1@-OdT?*# zc3IwQ*S*{uU5*P*Sc;BkM(?M^!|pGDlctb?1XsheHN`%>%OQjq9GbK{HK+0>30yT= zGgPYhA+Y@oN?NnhShj)eB-X}O5-ZVa44s{Po039b06Mmm8>m}{ znogegMqRR%dxTV1^u_X( z%uQx)0#g^rm{=TU_;RzWIkJ;-AcQepng2$63(?mGeLF@+!(z&W7o@7%qoj`qp zYmpsDy?NXNK|9)~+!GVMjHU~q-Do%++ON;y=^x0AgFXJ zmgfeWU<(!<5@Owv5j~|=(e;M8FN!jV;*Z9`YGDXyURQ7zuj3Pa-q^KBkyTE7r`$4O z*?*tPx&dxyiL>&?0D;QLD$@N2LxLWIv+fMoviO)hfoAAbEu?(0o;k^bL5+iT<7t+shyeO$J{wn089ZD21A&&f1fbbIg zVZYQ9HV58dfNd)RSsY3mSb%)KaG}~eWGjO(Y$s_f#!S6YWKGwHB&~P)3%IK+s##8W zR$h7Hml%)&tVvf~BW6P1LZwzG5#NUsz4TabQpYEGRqQ#QhzQS8iWObWa?V0@F;l`a zNReIRtqiBSq68a3@o}S}-E7JgVk}1Vh!Yn{$v;AimXJXH(>Ww15;3+qA@)3y%9{#K z6F@s^9@M1N1d)tL`s_{AZ{Zr9MjC(}(z3F*wnnr(jC=yZ{lJpZ&75eH`v43qvb`9> zNCu2l%kn*o{jvLmXOM!TpMH-(u_xf-mBkjcE0SlPtMfA(D4EtpD}a9vk~G9Ukqg8i z6LyX~&W7#9B)46ze_QgiW0*L51G#P6xej>hk(J+*&%sBRF?$jJ{BT~a zAO7iQTF-4VNekQOCmE^#Z~7meY3-(`%b%9M=;zd3_1H6nT~7Oc@+S(dTUi_A$38yW znX@z)!1>{sS*d3%ISKbk4#}K3=*V78K^-fM_&-jq3TndA73m!J2jtKX*8do;YU(Cy z94%dZXM_^9uL5lr#@6sB7zeCMV4gw+zO!V|J8r-zwh$$A86{E12!Kl-9X9OFiF)G? zqx$}9hRE~x=cH)+7-7d)=wZ*`*x?jbSN8lOHRCA%cW>w3urgcix9ELlttkHbJb%LF&)EkAwU77(q8Ay z=^wLcX}e)_W#(@}O_##5o2kLT?KctyG9?c`;tS(*w%Tlk}9@4jIO$hH3g# z;dR&4&1g}p#jUn;x-dpe+Dh)^v1sl0mfP7zd-t<9^gn zmZ$!L+>LtnF3n!0`E|#_*GDtiFMm1%0rSE9($Q_Fu&LLtw!j3F{)_EkRupU?LZy52 z9^b~DkN0}`lV-c|b6)k3#37}ka){t)t$0%8_qcczr?Sjn9`lHodCVl$i;&RtQ45m! z&~DN`1z6&ug{$B?5aNM6!|N^&UB>XYVAph?!&&1@el9xtYOa^%aFxT~(9f`YT}rPU zMvVkTVt?y?-NB7%NZcoWMmOesM-At!TAI4$xJ{Zj3Guzv9^|DsH{=T-bSZf7x{-}j4+@HZ9Q|8%39(O=pYZP!%c(cjA{4*mp5N znwsR!(V^=SyKHLca9hn!0V4A-m%2sN@$z+9j?|lvJDVFrb5l1p1?84FV1plXw1Q+_ zE1JC<`Em~P39n5Y`(8Zh0o<0RXS^5{)R&|+5sg~ph2)ZHWN*BV* z+@)4*_zPJR4@Fy%8gx;8_B6^?&!jsPOENNTxXqES3X87-NVP6$6m=6xw&Lj#!~F$a ze%SHq|Jbp#@2uii4^e~d(F4p=%onKg&@0p~U6xJl(vG6(dfly9wn;v( z{5s&}Xc{IM#=hWeqfQ=RfV;b#P&)I&w*chZsGDdTKl^@tG-G8ZT5a;iQPxh_OurTj z`+v@K{zFn;NkaL-w7MYXFSVr5R0?Z6&ucHByY9}kLH}XzZFb#2<|iJ1Vbh;4V%>GUPW<;xNw%RsvV?LCw_b&&Xn zulK~62t6JA0P#*FBn!LT97{5>rh z6$51j@SkiO;X~xB_a2hC3S+jzWkET^$#L(f7G-*NI)!Aa0hA=o1nNG9G!lDN=?fv( za#|#(dV%<681`Z#k+%eC{DdQI#+SC&=x1&MB8d)1*_f`U`03V8rXBE3z~4K%9~eSz zMDC-_R4uI+{#=jc`X3uzgq4TM3`yM}_!TF(c9Zz-HRfu6_Syc9E zx4H9DNITO-<2P&G6QH21-Cs8G<`D1TfojJ#pk&|{@j^@|{A(%BAmc~DnayrS4TZc{ z0oIYJ>c0UY&Fh6(uu?nc*h9(Bfazvg{xq=E!+NM=T;d%BBvAW z%sk@_0~p`7O6B@JiTly|IQP}z2B3x6@UKRnR%;M}{V(-bzOF94%&Frky~I60w$R&W zOq`eaS`#;D*1en;-kp`R)zO0(EA}=GN{R zzFoR@1ge)qPf2;n{d_f5wMr$rn9dPB0uhG0K0K0>TOW5EMPECm6bd=kdGUUK?9=gm zo*fKd_b+f7)uPa0F{G4?DC`QD7EMGIT}-m%4418y%V?^@7AdE`)WO@$%4wWz?CH1GBSjDLvfcW19k}JEZ9nZI z+~tU}BGU@Z4pF&Hg)8jH%-T+-m%@UhQ1ajx_An5(A6a)d1O8PEy?hg${48YyS@THf z*Y6l_FarZQN;_SJZ2ooZR#? zJp5}wrr%e8nn3+Gt*uz9y=k!gt;CF)D>$R7Vg5AQ=QT~*`PuBV(3Z8~aV16=ir5E1 z(8ZA>HbqajtW86&%uJ%}*c*~+K|a#A`j3HCGeJ3|9-B>G&vJM+X|bV-9`C~5g}xVl z3mUN=jvk+Qr;R#~h}=t1F7#_GnAdHW=ijP-6aI&75jw%1*3XXnl9E)^^%x>|J6qY4 zV>6Wu91vuAv141SBCBBk&52I*MqP(d6NNK~rk&4HHORc0K~$f>+WYtPr|bBHYxDF% z1u^DXn5~xPTBA&RGcy-b!vt;$?whZ(A9-xkQQ|^JnhLpAfr;Wj;!Z$?MWt%%Sb6qw z#@%#t1@N*f05#7VW=iY5BGFTw^{kHY*b7&Tw0G64*rKC`L7s0!Z+Tf{WK{}4&sr8c zfda|AUXRrlPE(?J*Rh8pj;bA{fW(KDZ!&|Mq7#c9FCX+*@Zkl05v8h-J$d3>2xflb z7nn!XyFY=Dc;b+6NG@J`@jU&|2C_qfFmeQ1?>2WT0YDE$_Y(1WiAd?)olBzn8M8?3 zoKc>kZcX)`8L}%KbU{ zCdBq2AV*zDZ6f?(CZhUO?#$V2NNnhbZ{{zi z0H$#va1*wWx%`r2;9>^@BoPvOu_4{_Rmj$arOscZn57zPwz^unrvOq=3T{=b;DrJ& zx^_bphYTV6b%kq-8|1E-9=jsEF(OS#z9YHClXmfD;A!zJ>;BgYFmT$E$kWcmMNOr} z+w5CoHWfss1K|7VljLU}hKo7f`{ns_0OkGQlJvmo`{9Nm(5eJq6%I9ec|3IP$XLNX zj`1YVLO0we>S%tv{$9gBhL+Cn2DX`qJ2`nq@3lE?+^fk`nOvQ|SZB#C+MI_iF+^6~ zl;+ucD!5aFkyRtO0EL9*DlK8mYbpi_IeV?@IJ-i>nG|cw7%!2AUjuhHP3s!H`jd2! z%B#}ydNvJyGoIml_!qJ{Nr~)BEzr`Oc5Wz4PEK)u7Sdl_V=xF+sMa@TgmCVm|W}cmx_*_va^niwgB@ zj0o|%uC3-l?h{zBZ?)i`KctHO=B)F`-nv}#MtsRxix$}eote-7USZiam%2WP_e%2@ zJc)BF?u$JQmgcnG(~QCB-AvSKM44}D)`2Qi!}}Xcb`r;Y?s#M*J^?;oauk95lZ0>x-D3pH2!oJop|q9xr%UuDe}< zyKqsnLcbGl-Wkt#$439-#q5M<39_8Lwfe$PmunEcp!n38l63$F+`n;tIS!!$ZsAK} zE<5hqT%tg)at9R{V6d0pI@0%-eKw)e5Uu6rOO0{0MQ`+VQohsg$V0pln0Y@x6907> zW38za$-H3S)#K?z!j2F4@{v*eI$s4CKENB1C9EQ55Wnb{N}U^JQgnvOeT#^@OPHx; z<=^z|Es>kOk=j_uYfsb-n9H)Ksd`#xa-%OB4ll{WsL8SYJi9()4UB`d7iof$7R=kx z@h(|RLR-1|I+i=>(-IYv{Hh2e`2Hg96cV(;2|(j$l!*@|Mn^hgyNbE3?=J~s+(rO* zTWJjbZbAcqbl!MxSXf5Dzc{v;!7!!e(w>7k;vQu%p)EYkJf>;<0TL25g;*qlIzDHoD?Q?CX06-hcEON+6_W(fZ?FT!z{%S-~BJ1xpvJc*5 zvonU<`y^p0@OW5zb2{#+dFQ7HZ#CG9f+xhGKXPZT*-zd$;})vGpHg1Ssy#Op_#G5b zx&xaA+|u`+(UWH?Gt;lG4%#r2sQ2VgL}?mE6Wa*yZqigLfW+Pz=^j62xLzJ6miQ*B zQ{YcvFfuxz$_McdcnVROfGj<=mX(KAt`x;rZkOi++oA;$>~9-9xQ=Bt^ugvP^5P(jWemmZh3^|$C;WQj-`Z8j9 zNpfXk5q4S>GJ>QwTTi;7HrJj$AAJS$=?Q$dMmGgTJ zQI*J(XL`Y-*8TwYysaRN(zSWvxp5L|mB!p%jI3b}+&+dT1ZbD)9Dw&}Gh=jBOEWo8 z>>?aG+zz)igcUiYR$dWumgN^KwBkGZ-jPL3h#`gQw(=pXn&ip}9>)1a2*M-O0Ki5X zr-P|`QMMd-sUrtvJfGDll0Y=7E@7ZxV!=8hbuI7J;Qm!30g(s5{N9)Pol*E`_1}C? zBMNrN$wi&DcD71d*1FSP5mY~)ly<8=RfsiWPVS+h}`{?PU@T@oxhu7a#Wj^~A zE{xp#@hJw$9@pmWIMoZ-N!7VGFvl*3UBVXzWcmgtSfPxvV9t6RjrXzrxEyx;AP?>t z$wj;=J*PA?DV_|j+>&9`hG_bYI{X|Q^w^F|w>!RvAzRmZkGM?zPBNK0eI6Qe*o87W zGzg8ORdOy=dLp1R@APLU0~)@&0l1fV8e_(Eb^5BUmZc>p7jh5&^}KuI>6cpe)D2|Q zZ8=dZxMp+E`^7qh-TI}b<(c}co3H`2I%b+M`x;UQu&j2T?0D+02k=dt(7@i%#HoBw zy*}KPfIparxRh(lZUrIY3@l{q3?X;h+{&1b9@^vAsD({iZ<|xOIbrG5wc@0!xr%Zl zj;r=b?83l$_1~y8`)qTY&`dBrRf)VibjefL1eunek~Q0>()m>I$W;J9n-Z;&UrUSETU>%U;KJbQ~E1ls1 zo!oaDzg_9XJCMq}qPm#0I?F-erF&WL001 zCwM_=2(wu)ecmQy4@k!cYCCIPf<*RD3 znR$Ere#g^9A6QlE>Z9E+Hn-fSvCCTZobyPa?ymW&!M;g7_X_f6Z}lWl)N<^Y^H4#; zbz|AFZcccJVI~7s+SJR}2|b4Ggq+KrfFUY2a@7xIp1D@O15Va_MXN}qVVEX=P#nmxXV}V~jMvwDoeU+qQ!`}rEG-JKGp@Q5< zZdO#gUXm~7n9B+cv&+-z9Wej#dsB`Fg_-&)RfZb(rVc@5;zB(As$LF1wShW$M&V7# z0`6T?p9jEnXa=5Buaw$s!(L*ZQT`fMm%2Va;Lw5i0Ki3a#K)>lN&&nN;7?w=vH-n9 zItI8X#5boOckW<;Re$Zanrc-O<9mQ{w6A8Qjv2c(@97aQPyNN%cd8EP@8V;X6svG3 z0x&Nid56<8H^|+7qs7ZW*K{1yI`Sc(9z=QtT#JzpkWHDD|wq|-BY(o)IHQ;KxRPGmPDoq;SDQE^z(>$BS8eQDCK`?^3w z-+@O-bG7l}K9U3A)06eKXtrNjFZrxTKuMLV9H`42)CyPE(57Fd2{m6BKXV4z?%4T( zH}L7}m7H`Xx63o(DP}_-%f}D{@pi4csHZ?IA9(o%q);f4h5KTKV=Jghqm{M~UIPP@ z`XuRxA+8WDZI`YXZ2OeMTN&rRR^PFX^=Y3i;{vjzr+qlu#Q(et{Tm$cJXFgPKIHiY zbS6WrK;TM9Nb2(EH0j3`vvldKx9wmw?eX6U@x3kKM9j5?y3$@YU6Ezc?_wQlgg3eh?nJnP-RwSIc|Xx0SW@c~-V0ourpD)$D}zH?|&7ZYnP zjcK>8W&07i;`oJZgm@690IKD%=Ope)7XHhYXAvfQLSNs^?L6uq8ZC|&LCMCp>2VA{ zPG7w9e1-!t*{+u3M%v4I+N%?U^R|B6*sQU-2^ns=T|N}#nnMm}4VRy_5cb~tcEVZn zJgaPO=hrbVv@S-4Tn>?Fi(BX7XEdZk1;XH@Y@?l-7#t1BbZzkt)!=3)Kb(j%b?Iw3 zWlffQL7fl<=!_4DhANsZCl@)wy-6SnloaMkLWbmaA;&G|K%Yt0Ct}5zYEO1N5EPH? z-92=WjSGBsV&xG_-gi*IkFm_p*Db|3;VidOo$9(`2?Cp7jm00kv{ji5bBm@rq`&_S zA+8YCa^8msNiKt3jiE`W1Kir-edQ>v@2oI}V@uumKsX+Tw%~3I0~q8=)p|KvBk-?1 zZYm(f`agaLnu865d+Q7xmC;zh9p)(>SE==t=Xa+(Q_2W`7nf#Hh>zl&dbH!aGTGAv zxr^jGsJ-H-Jk&Qk9NlEh@6y^2f!hQoPtZAExu&{E>;FCl6&>+e|Lf{sw|DO#E3j zn2u+6bmbnZsX#M`;%IJ}C=b&~^<<3KCp737(rd0!7F?Lj%HZVD`hU0ZdT!U_OF$fB zw%U!zw2|!ooVc;FmMSdjW3R_nhF+P1k&zSugg}z z4z!5A_YUvVt|>2$O{lDLzyr@os9`zp<9qV|^zAw<VcN=-LGAm|nqlGY**B)$}DgY<@Qx}N z-zU!>=<7(5htX|rF@+|D^2S`Wq19ak2}VsBFBJm^u_^zjIh~+hOUh=HhFnt>eWjSf-c8 zwxUu>S=RBR%u~^wV;(RpbQy^ecH6LHF|@zo9JDIgy>OWhGIyakeyO1I5!XMPi??A3 z%Si7A@lu-P!TXA~xqN-A4^RP+?Iw5I9@M>cz&7)ZQPZikfO}}A-QcpeuzsNjdnwj7 zxdHOe#6~K|dT0R`M(dgVW3T9#MD)B8ikQ z7$%nQ-P8{y1)Q!0qtgc4mOkbL2R@<{WCuSECHaIjsv^@_AA&igb}z`eetq^}e*l&? zG)^Hkphsi4dPA(mo~jK0MY|-+=L}-#&UAB z-f|C+Xrp?HB&d}vINN0Efj^teQlWR94j=`YkCp!pBmnMpDb>Id#ArgSUarX@r@GXY zF{V=A>Va^6_3a2ZbiJ<6D_~RxDQOed#6G~KYs+ryvui_F^`^edjnH5uMwSSqL^i5y z6S@qf-qzlibUWZW5X}0K<(+wV13B4MB>5g}$3ODTT4J-U2}mmck(E9<0-T@S4Ab){ zv5|Dy!CunFmG1seBX7ngomJ&X7D+jFv6GR7N&jl<&DiwyERUW>9eGUY>LwLWBX?Y@ zN$Kld7qpgj^+rZ?ziA7s16Pt~6+Z41_Ncr`6^m&-xY zfw@EMcGRK~7ZF%cSOY=F^z%P4mN>x6(qZ<15RKyI&{kFzed=~Q3V573U{^CmHJ50k zG^igfRk9(Vbb(v-MR=A0lKT?$b&g>->m*rRi7vvNTY&<3)_4c-CALXb@t*&5|JFmB zXX9m>zaRiBq3bOog=@-G?@PY$2(#bZi{`GXFzUH!%Ztu7viBBpJ6j6b?9C0-`nEZI z_@m+dUPbS%B*W2$my%))!Pyn$*go#>jh?FOxS5vZISKHHaD|<6ci8AeWU=!y{Cnd4 z|C#rI=0%fD{kt+j?=*Ko(G8x&$7;N;lx{Om#?!}VWGa#G>Uy^l** z*A6KmH?J))uSN^s)rec;VT|RFptK0>Lbm&FjUayp9(dx-4P%H-J@B1iZ;oul&_`l$ zs`Wrt1yd|6UZUYK#1d`}_*P$70uXs#1$vkm&8@TQ_djpUbpYWn-EfPh^d3ZmDBvSO z%pFX`$NI_olO%ox^b37NX>g8d)wEonUfsEA3ACC2e%ePn@%s1-klIh{3MZ z!Tnc0b(IYX2fs;>X$350G6!+@gh*-`P43l_|WR0ry}riqe{t@M+*GiV1-Mq_p@P2=-;+>-94=eU8v zb2O0er3$=#R&s7NU-q9lBwUqc>n6meom2Jg>cj3mUyCaqY(%G(y*+qMc=%)W#oUsj zI3dnSbq(-;4S1N^2)LQV*iWdv8AhzUuI6mz3jVqg;AUtscX0dg1Yj-73QN{l z==J`|u8x4cQcr+T!CT zIe*e-Od|2glPKoi<|S5NG#>6HinXS24QT|HtctB-K-~q1*pE62QTb zh1-9C|L2^w1#UYoT$71TS<3Zo;91%KbX}E^%47*{&5sHoDH>=52!Pd!AA2eL{uiOk zGBkc3>gs$TodOtDMee**W~O{vhi8x;qJY4UvYF#0j}h??qXh_Z{{QheUA7lCjJ8@j z)VCS1PRquP+6FZy=944%j`i1ELMN$Ns7v(ohwf#)u%f48$3LB9#~A0Q*8Y=PxK;TU ziP-o%u~I|;toxDs*&RmBrRg5;j1JcFl0}{yG4O(spiZk(@Wz6? zLkzlIQd-C@Jv%ervS1XvMC|z=IIA3#~#kSd^*Qe_+diNM|4ys&g8|BWaRZm+SSz z3HD}Mzht-*vBZ3oiGqJL2FMslBtn%A?{Q%Ye&x9-&S5+d!4kz6OqeW$*AB< zNq(?LsKz-+9a|3^&Z6i7?iq`lt?Obu%1}%+YHntxHXb}NFY=Z?7u)x4wb`qkMfhC~ z@l{L5XYUUh{+?{BkQ5wd}HNRPMnF!?Srua^O?z~$7r`m4lnREXbP%&!dh5M@V zH_z;J>1Cq99K=#`L3oetStono@O10((M!($3j-kYlSaQ_dM@{Se1;T7PoI%XrsJ^V zQ2EJ z{S^K>4a#di5(cECkK91-t~_i^sGQP4JZOeDaOC>wHi4|gEeR&-Z%QyKj{IeYoO*0IrugNx0<%C%@e*;-yrL8J6lAVuxSY9G?slQZj2bk=_u{0P zf}6Kdfbb{|#pEZx4wS|F=G;KPE0k=vo>g-oB=U16d5NxUAFyI_HT zsBxGr(0#O_6yB1n*yaCywgHr74QfybX504 zE$~An#j6vKm=E*;z|vOE-JbU0%~Xh0byNTnq>uE zstBk+0)zn)s$xSV!Ceaystr)82mw+6QDPy05<^J?A_)?DAR#2cJG%eC`|15QzdL8< zp5NR%_n!0I=Q&qC?Rt=&s|bm`ndo?d;mwBEo}DTqShx(<4Air1e8X*~=eJ$qx94Wn z+;>srCwAAEs_poW1rL7t5py+s)OR!kpNdL^ZkpV~$u@8@T zMwOn89?BcN5h15pHNCd{17&;2LTnve?NM~^*B(2&0~Vv(Dr z4PTY}I^}bfVo%{y5S8+t@;H*cFnTtlYF06Qp)>OLt9ShfD&+nXm`Vws-+SfaW)0x> z>;hd_@jxGvnMQyqJQXN9x_(IOod%gCDwFx}`3LOcMNi4%$>1Jga+4PM{=!jLuK1h|Q5$xv!W*!f#89^ib{>{G^SCExg7US9Hf zxxM{ELAw)AxzC_2Q2{cj^MFZ7#^nf;xXZ&i>STn=hu*Ix<;{~z@7$^#2dM_TJTy}( zcz1Q~3IFqjG)rv#-akIzLHe{Jq|V|nV4PdNVV z=i<9+zqTh%4Ol=Rr;=KGHpUw~`?>lf&W>f1=y+8yy7wwk1594BZy)oz+G~lJP z1zbPh+i{O3)3!*;iW$v$xFh#aE;0}nu_9I;VRu_{j)A9{E!I!Yk3?@czLsWhaX6TJ zdXRNAAA7)1;OCm2dU#0L??w|Aq>s1??8tO{>&3bm!5|?9yVX|`;Z7*?*@CZ#TqAwk zIP>A=W?Zi#BxIqc_0ZWrYv55~DSkS%GS2zZnov{`Z#-^0jh)+CYjryL)a6$5;l>`; z7${#IF__kbxm!&&0^Q(VAqkm?c)f321((tLS;XWE@?lYr_Sh2q!1UToLueSKy~H|Q zwEcEw^MX(ZgnWrJ3_}-u=l!#KpNZ8+0#jBQdhvy$=kA5w{)yfaJKQP?hsE{paH5{+ z3I7us z75am4;`0|*Ux(-T#hlYkxbL*My3QE}x<|WSbh86bQ}w%cj#M}72)Nspu(D@hEhu^n zRpm-%#w410BOet@kG-;SPfr9)*94p$--B|^3KhP$MFCTv8D7f(1&zC3^HIgQ@NI{M z&jt8R{rDQ*KG8RwjgtXtt=HcG+fA8AOM@h+?lR6a?J;0I%PmmzUl=I~vtwlW>yW`V9e}U*P z9XP^FP>R5ee+Bh_E521_qeIhkYfade*fR!W47E^DO9#&WdQfuv+fqJW*R-$N_G^kZ zcYxJa?Zq)f&xDb`*C$e%Gz~4qOA;6*QTdlP07}iOVQ3TM(He?)__AG(?S@EloF?jG zLk+NZu8+mMaKlhN@S`2-HmrWHpG>a{&9`+sg2kJ}j2LYW1=8cD@U>vf=JD(CrtIE0 zAL8@}!$}W%L)zB>knn{mqBeZ5);0A{qcQ#qSSa925$}<``IzvLJ3t)Vol?a-!af@$ zs`pzWH4w;Tv}WjIad(r#Q-=%!A^H(kc%9bj>wmwA0{CY9hid2K&>MM5(3DM$h#5nH zgcWinc=fz^9!UUeZf!zGgGUz$>@x(uH!ILQ#)A0_ix;)a5Zhldzs52LYic7gY@^AQ zLIHqLXPOMp7gfOAcOE0S-rzN2!hUfD)U&V$20Rs#5z-DGx8crP8e`Q^C#InX)fA``2eXu6$NEdV`DJtE9Q(iZJ0@7 z{aw7WAbnL4asVio8NNBUj8-!fI&MMhoUl(yGwzH?=?^(|YFlC@o!Se~92Vi^i?Ngc zE|;WU=c;bwRrWGc70u=uwRuSnMc>COO8^#C>*sLF!fH}u8e_?bqiZYv{==um5^`vuu9v<&GgD;=T0~$;h*g>R=)`C^;X~ zRL|9WgM4?V2As*$hr8CC38QYr#4@_uz$K{UA~p^s5{wf4byAoO24EodV<+QGg=y~B znMD$wkZn6z zkRu6@PpoN$%BzhaBAlHi4kVaHE&F>IAe&Q*q#*XuGqa4uB zB2ijvriI9-;jGB#*wBrQg9Vv?1BE~eU7Nee>fr+p!{r7?XfA=}F;Gb;Cj%v-@?L_e zn|+G*$%4#y23_=wnH4l?sxVI3lWvTuJTbfYg~EaCBlp8RpuOU8<-T^BF=)R(MeF2t zrMq(nf>S@_`2Y6P-UfsQrcwn{E}2yJZm0<0lE&V1A)mq8PVHs+smJtm9hn6Q8Z+-Q z7rd!vHJ6M8q|zh|5&_Ar;C(GOn(*)6r9sQ_>oDqDwNjQr`TCB9f3UvYhLu+0I8E;7Zle%awSjy zSd!l>uCv6Aw-k)!X6?RE{97f@4c1Y{rFqZhm;w&?AFV-PYv;jhX1RvhT34QPkx(Zv4wy-W@(fRGA{yzv<|Jwt=&W~_ zN@G#y_dVYC;ldp+LE9-Xl?`#|X0w)p>Nka&UI?m9=8YgW!_7CV+o`)XPu-Hf6n3qGXxvLM(=> z>S0^Dh`P^tg&$aRmabwM0y`zo%{r9D?<|}Tq{Q{94z(>tZ3Fr0iR2fTt@&m550Eb* zgJ*NI0=E>>)UpIhw8gqXR?Ws9{`C&KoU?G2&0u5u5UO*e#aZ-(5jVhJhrv{9R#%iD zBYn^>-m74s8NKJVZ~qqYH+^T(9~IbG!WPu?6ohV-eS$dD2;oq3QAaVd&=s9PAC%7K z6wdgM+@3v&>I`8AF=3)vdCzU5Z0=9<#Im3Ix0`H$WJ<5iKW>*6l&!E~l)o%kCDuxq zcWA;c_;=?jc+su^>tVZ85vKY%niElLWRv2q8$J2SXHO$`9(nGDyKcbdevq|JcT)>v z2F2JY`dUYeO)(vwALnO{-@c;ZRX*W|==0B*^3CsY7@M&CnZrU58B$f_yaAJ@c69%} zGC9)_&;+85;>25XP;h8IrjA8X#2yEO(1Y((l^sL1WjQks~aI+TX=_Xc>6xIfwx4w@4H1SfjyQ zm#X<-^|M`XdAB)?oNp6QW5=K!j+z{a>BH)!YfQ zoDnUNz3jL=Euc=aI1`@7x#or~W;sk8pOwF~b1%&v?b=|n(&!Qq4CR_X52J_qK*R9G zM%}~zNQV`wBz$M(-sRidzgRl*Oaa!lyoWiPI86eb^{z3lKRwhB%HtxuZgTj0K}^YJ zucg;w^xoteZ>ytiLmhTTy~5PaUzkhbK#Sm#CguEh(EOMIW<-%fVqxh-p0dg zdD+1r(V>n!g0|h6%IPN9azAO3f4v(HMgC5oKlcbA>H1KaC#iv|pFUoRWXwk#g<9-CYZCHuEkkBV$~L%itMGfzf4F%bt#Jvt F@?Y(DR22XK literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/anyCompositionChart.png b/docs/build/html/_images/anyCompositionChart.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee61cf0011b2fa11ab06856c2e5bc81fd289d17 GIT binary patch literal 14902 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 W>dW9^$1YL#dPDb?PT@7XkpByL199^J literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/commPaperClauses.png b/docs/build/html/_images/commPaperClauses.png new file mode 100644 index 0000000000000000000000000000000000000000..19f22cbdfecd4d2796565d55fd9687eb3a909c71 GIT binary patch literal 13269 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 T!^?pGsj9B5qg1Z&HuQf0v|^{! literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/commPaperExecution.png b/docs/build/html/_images/commPaperExecution.png new file mode 100644 index 0000000000000000000000000000000000000000..1921e59e916308de5eb41483838198cd386d82b9 GIT binary patch literal 27042 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[Sm;%loZ3x-mU7k{%T-9K`pKGvjL1slL7K5-)e88 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/intellij-welcome.png b/docs/build/html/_images/intellij-welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..4c3192b54745ddac65919fdbfda7faf21944f302 GIT binary patch literal 31175 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%0DUnE%fP>F?sodzE2C>TNMB(FGy4`S|*BY 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 VX>f#?{`^xwR!T{-Ox(!t{{SCnz?1+0 literal 0 HcmV?d00001 diff --git a/docs/build/html/_sources/CLI-vs-IDE.txt b/docs/build/html/_sources/CLI-vs-IDE.txt new file mode 100644 index 0000000000..0b58c86c88 --- /dev/null +++ b/docs/build/html/_sources/CLI-vs-IDE.txt @@ -0,0 +1,67 @@ +CLI vs IDE +========== + +We have tried to make every demo, example, tutorial and sample to be both usuable via the command line and also the IntelliJ IDE. +Most developers will find writing, editing and debugging code more easily done via tools such as an IDE, but when code needs +to be deployed to run as nodes, control must be done via the command line - no organisations allow their systems to be running via +a developer environment. + +IDE - IntelliJ +-------------- + +IntelliJ (the preferred IDE in R3) integrates well with gradle (our chosed build, deploy and CLI tool). IntelliJ understands gradle +tasks and dependencies, automatically loading them in the background when a project is first loaded or the gradle +project changes. Occasionally, however, you may need to refresh the gradle project manually - but this is hinted to you +by the IDE. It's a good idea to do this before carrying on with other work (and in fact you may find it is essential to pick +up new libraries etc). + +There are some great resources about how to get started using IntelliJ. As opposed to trying to repeat them here, we advise +you to go to the `IntelliJ docs here `_. + +Command Line +------------ + +Windows vs Mac / Unix +********************* + +Due to the nature of their respective command interfaces, gradle is typically ran in windows with the command ``gradle.bat`` +(or ``gradlew.bat`` if using the wrapper) and in Mac / Unix environments it is ran via ``./gradlew``. For brevity, the +simple windows syntax ``gradle`` is used for the majority of the documentation. + +As well as including the most significant run and build configurations in the IDE, we also provide gradle tasks to build, install +and run significant parts of Corda demos and tools. Gradle is highly extensible and we use it for downloading required resources, +building components, installing those built components into shared areas, configuring the scripts that run nodes, starting +up demonstration API calls amongst other things. It is exceptionally good at deriving dependency maps and therefore performing +the preceeding tasks required in order to do the requested task. However, when confusing build errors manifest, then sometimes +a ``gradle clean`` may be required in order to clear out any build areas that have an inconsistent state. The total build time +from downloading / cloaning the repo to a complete build should be only a few minutes, obviously slightly longer if the +unit tests are run. + +Frequently Used Gradle Tasks +**************************** + +Note that the list of tasks can be ran for any gradle project can be displayed by running the task ``tasks``. Also note that +gradle is hierachical and therefore tasks in child directories can be run using a colon seperator - ie if you want to run +the sample attachment-demo ``runSender`` you would use the command ``gradle samples:attachment-demo:runSender`` + +The most frequent gradle tasks you will probably be running are ``build`` and ``install``. The ``build`` command also executes the +unit tests as well. If you want to build without this level of verification, then use the ``assemble`` command - but we do +not recommend this. After running build, the ``install`` tasks copies over the built jars into the local maven repository +which will then makes these available for either the sample code or use with the CorDapp template. + +Debugging +--------- + +Tasks and processes that are run directly via the IDE (including via the usage of the ``driver`` DSL) can be remotely debugged. +We do not have java debugging currently enabled in the ``runnodes`` scripts generated by a process we refer to as 'cordformation' +but we will be implementing that shortly. + +Via the IDE +*********** + +To debug: From the IDE, configure the debug connectivity option by the "Edit Configurations" and choosing "+" and then "Remote". +The debug port start at 5005 and increments for each additional node that starts, the order given by the list in the main +driver configuration (which is primarily listed in the ``main`` function of ``Main.kt`` for each sample. Look for the string +``Listening for transport dt_socket at address:5xxx`` in the log output to determine the exact port for that node. If the log +messages are mixed from several nodes to the same console, then (as earlier stated), the port numbers increment in the order +they are listed in the driver DSL configuration. \ No newline at end of file diff --git a/docs/build/html/_sources/clauses.txt b/docs/build/html/_sources/clauses.txt new file mode 100644 index 0000000000..9e55fc1e4c --- /dev/null +++ b/docs/build/html/_sources/clauses.txt @@ -0,0 +1,278 @@ +Clauses key concepts +==================== + +Basic clause structure +---------------------- + +A clause is a small building block for assembling contract verification logic, reusable and ready to test in separation. +To see clauses in action go to: :doc:`tutorial-contract-clauses`. +Let's take a look at a simplified structure of the ``Clause`` class: + +.. container:: codeset + + .. sourcecode:: kotlin + + abstract class Clause { + + /** Determine whether this clause runs or not */ + open val requiredCommands: Set> = emptySet() + + @Throws(IllegalStateException::class) + abstract fun verify(tx: TransactionForContract, + inputs: List, + outputs: List, + commands: List>, + groupingKey: K?): Set + ... + } + +Basic clause structure contains two important components: ``requiredCommands`` and ``verify`` function. +A clause is triggered when all ``requiredCommands`` are present in transaction's command set (opposite inclusion doesn't have to hold). +Then the ``verify`` function is run, which checks if transaction meets conditions specified by this clause. Verification +is no different than normal contract verification but using clauses it's split into smaller generic code blocks with single verify method. + +When writing a contract you need to override the contract's ``verify`` function which should call ``verifyClause``. See: :ref:`verify_ref`. + +.. note:: A clause ``verify`` function returns the set of processed commands, at the end of ``verifyClause`` execution + there is a check if all of transaction's commands were matched. If not then an exception is raised. This is done to + enforce that spurious commands cannot be included in a transaction, ensuring that the transaction is as clear as + possible. As an example imagine a transaction with two commands: ``Move`` and ``Issue`` included, with verification written + using ``FirstComposition`` on clauses that require single command set. Thus only one of transaction's commands will match + leaving the second unprocessed. It should raise an error - we want to ensure that commands set is minimal to simplify + analysis of intent of a transaction. + +An example ``verify`` from ``Obligation`` contract: + +.. container:: codeset + + .. sourcecode:: kotlin + + override fun verify(tx: TransactionForContract) = verifyClause(tx, FirstComposition( + Clauses.Net(), + Clauses.Group

() + ), tx.commands.select()) + +It takes transaction to be verified, and passes it along with a top-level clause and commands to the ``verifyClause`` +function. As you can see above we have used ``FirstComposition`` which is a special type of clause, which extends the +``CompositeClause`` abstract class (in that particular case, it ensures that either ``Net`` or ``Group`` will run - for explanation see `FirstComposition`_). +It's a type of clause that adds support for encapsulating multiple clauses and defines common behaviour for that composition. +There is also a ``GroupClauseVerifier`` special clause, which specifies how to group transaction input/output states +together and passes them to adequate clause for further processing. + +Composition clauses +------------------- + +One of the most important concepts of clauses - composition clauses which extend ``CompositeClause`` abstract class, +providing a range of ways of assembling clauses together. They define a logic of verification execution specifying which clauses +will be run. + +AllComposition +~~~~~~~~~~~~~~ + +**Description** + +Composes a number of clauses, such that all of the clauses must run for verification to pass. + +.. image:: resources/allCompositionChart.png + +Short description: + +- ``AllComposition`` holds clauses *Cl1,..,Cl5*. +- Check if all clauses that compose ``AllComposition`` have associated commands in a command set - if not, verification fails. +- After successful check runs verification logic specific for every clause *Cl1,..,Cl5* from that composition. + +**Usage** + +See code in `GroupClauseVerifier`_. + +AnyComposition +~~~~~~~~~~~~~~ + +**Description** + +Composes a number of clauses, such that 0 or more of the clauses can be run. + +.. image:: resources/anyCompositionChart.png + +Short description: + +- Checks if zero or more clauses that compose AnyComposition have associated commands in a command set. +- After success runs verification logic specific for every *matched* (in this case *Cl2, Cl4, Cl5*) clause from composition. + +**Usage** + +Example from ``CommercialPaper.kt``: + +.. container:: codeset + + .. sourcecode:: kotlin + + class Group : GroupClauseVerifier>( + AnyComposition( + Redeem(), + Move(), + Issue())) { + override fun groupStates(tx: TransactionForContract): List>> + = tx.groupStates> { it.token } + } + +FirstComposition +~~~~~~~~~~~~~~~~ + +**Description** + +Composes a number of clauses, such that the first match is run, and it errors if none is run. + +.. image:: resources/firstCompositionChart.png + +Short description: + +- Takes first clause that matches and if none found throws an exception. +- If successful runs verification on the clause that matched (in this case *Cl4*). + +**Usage** + +See code in `GroupClauseVerifier`_. + + +Other types of clauses +---------------------- + +There are certain types of clauses that are specialized in particular types of contracts (like ``AbstractIssue``) or generally +should be used as helpers in building parts of logic (the most important one is ``GroupClauseVerifier``). + +GroupClauseVerifier +~~~~~~~~~~~~~~~~~~~ + +**Description** + +Groups input and output states according to ``groupStates`` function. Runs the top-level clause verification on each +group in turn. + +.. image:: resources/groupClauseVerifyChart.png + +Short description: + +``GroupClauseVerifier`` wraps clause *Cl1*. After grouping relevant states together with ``groupStates`` into three groups +*Gr1, Gr2, Gr3* runs *Cl1.verify(Gr1), Cl1.verify(Gr2), Cl1.verify(Gr3)*. + +For more detailed example head to :ref:`state_ref`. + +**Usage** + +You need to extend ``GroupClauseVerifier`` clause and define ``groupStates`` function which takes transaction and returns +grouped input and output states with a grouping key used for each group. Example from ``Obligation.kt`` contract: + +.. container:: codeset + + .. sourcecode:: kotlin + + class Group

: GroupClauseVerifier, Commands, Issued>>( + AllComposition( + NoZeroSizedOutputs, Commands, Terms

>(), + FirstComposition( + SetLifecycle

(), + AllComposition( + VerifyLifecycle, Commands, Issued>, P>(), + FirstComposition( + Settle

(), + Issue(), + ConserveAmount() + ) + ) + ) + ) + ) { + override fun groupStates(tx: TransactionForContract): List, Issued>>> + = tx.groupStates, Issued>> { it.amount.token } + } + +Usually it's convenient to use ``groupStates`` function defined on ``TransactionForContract`` class. Which given a type and a +selector function, that returns a grouping key, associates inputs and outputs together so that they can be processed as one. +The grouping key is any arbitrary object that can act as a map key (so must implement equals and hashCode). + +AbstractConserveAmount +~~~~~~~~~~~~~~~~~~~~~~ + +**Description** + +Standardised clause for checking input/output balances of fungible assets. Requires that a +Move command is provided, and errors if absent. Conserve amount clause can only be used on grouped states. + +**Usage** + +.. container:: codeset + + .. sourcecode:: kotlin + + /** + * Generic move/exit clause for fungible assets + */ + class ConserveAmount

: AbstractConserveAmount, Commands, Terms

>() + +See code in `GroupClauseVerifier`_. + +AbstractIssue +~~~~~~~~~~~~~ + +**Description** + +Standard issue clause for contracts that issue fungible assets. + +**Usage** + +Example from ``CommercialPaper.kt``: + +.. container:: codeset + + .. sourcecode:: kotlin + + class Issue : AbstractIssue( + { map { Amount(it.faceValue.quantity, it.token) }.sumOrThrow() }, + { token -> map { Amount(it.faceValue.quantity, it.token) }.sumOrZero(token) }) { + override val requiredCommands: Set> = setOf(Commands.Issue::class.java) + + override fun verify(tx: TransactionForContract, + inputs: List, + outputs: List, + commands: List>, + groupingKey: Issued?): Set { + val consumedCommands = super.verify(tx, inputs, outputs, commands, groupingKey) + ... + +First function in constructor converts a list of states into an amount of the token. Must error if there are no states in the list. +Second function converts a list of states into an amount of the token, and returns zero if there are no states in the list. +Takes in an instance of the token definition for constructing the zero amount if needed. + +NoZeroSizedOutputs +~~~~~~~~~~~~~~~~~~ + +**Description** + +Clause for fungible asset contracts, which enforces that no output state should have a balance of zero. + +**Usage** + +See code in `GroupClauseVerifier`_. + +FilterOn +~~~~~~~~ + +**Description** + +Filter the states that are passed through to the wrapped clause, to restrict them to a specific type. + +``FilterOn`` narrows the scope of the states being verified. +Let's take a transaction with multiple cash states of different currencies, we want to run a clause that focuses +on only GBP cash states rather than all cash states. + +**Usage** + +.. container:: codeset + + .. sourcecode:: kotlin + + FilterOn(clause, { states -> states.filter { it.amount.token == GBP} }) + + +Takes ``filterStates`` function that limits states passed to ``clause`` verification. diff --git a/docs/build/html/_sources/corda-configuration-file.txt b/docs/build/html/_sources/corda-configuration-file.txt index 77faacb2cc..4da238dfc5 100644 --- a/docs/build/html/_sources/corda-configuration-file.txt +++ b/docs/build/html/_sources/corda-configuration-file.txt @@ -78,7 +78,7 @@ Fields .. note:: If HTTPS is enabled then the browser security checks will require that the accessing url host name is one of either the machine name, fully qualified machine name, or server IP address to line up with the Subject Alternative Names contained within the development certificates. This is addition to requiring the ``/config/dev/corda_dev_ca.cer`` root certificate be installed as a Trusted CA. -:extraAdvertisedServiceIds: A list of ServiceType id strings to be advertised to the NetworkMapService and thus be available when other nodes query the NetworkMapCache for supporting nodes. This can also include plugin services loaded from .jar files in the plugins folder. +:extraAdvertisedServiceIds: A list of ServiceType id strings to be advertised to the NetworkMapService and thus be available when other nodes query the NetworkMapCache for supporting nodes. This can also include plugin services loaded from .jar files in the plugins folder. Optionally, a custom advertised service name can be provided by appending it to the service type id: ``"corda.notary.validating|Notary A"`` :notaryNodeAddress: The host and port to which to bind the embedded Raft server. Required only when running a distributed notary service. A group of Corda nodes can run a distributed notary service by each running an embedded Raft server and joining them to the same cluster to replicate the committed state log. Note that the Raft cluster uses a separate transport layer for communication that does not integrate with ArtemisMQ messaging services. diff --git a/docs/build/html/_sources/corda-plugins.txt b/docs/build/html/_sources/corda-plugins.txt index 92e200f63c..6bff41d4aa 100644 --- a/docs/build/html/_sources/corda-plugins.txt +++ b/docs/build/html/_sources/corda-plugins.txt @@ -65,8 +65,14 @@ extensions to be created, or registered at startup. In particular: d. The ``servicePlugins`` property returns a list of classes which will be instantiated once during the ``AbstractNode.start`` call. These classes must provide a single argument constructor which will receive a - ``PluginServiceHub`` reference. These singleton instances are regarded - as trusted components and can be used for a number of purposes. + ``PluginServiceHub`` reference. They must also extend the abstract class + ``SingletonSerializeAsToken`` which ensures that if any reference to your + service is captured in a flow checkpoint (i.e. serialized by Kryo as + part of Quasar checkpoints, either on the stack or by reference within + your flows) it is stored as a simple token representing your service. + When checkpoints are restored, after a node restart for example, + the latest instance of the service will be substituted back in place of + the token stored in the checkpoint. i. Firstly, they can call ``PluginServiceHub.registerFlowInitiator`` and register flows that will be initiated locally in response to remote flow @@ -79,7 +85,7 @@ extensions to be created, or registered at startup. In particular: to the service plugin when initiated (as defined by the ``registerFlowInitiator`` call). The flow can then call into functions on the plugin service singleton. Note, care should be taken to not allow - flows to hold references to plugin services, or fields which are not + flows to hold references to fields which are not also ``SingletonSerializeAsToken``, otherwise Quasar suspension in the ``StateMachineManager`` will fail with exceptions. An example oracle can be seen in ``NodeInterestRates.kt`` in the irs-demo sample. diff --git a/docs/build/html/_sources/creating-a-cordapp.txt b/docs/build/html/_sources/creating-a-cordapp.txt index 9f2d279382..742e3bc988 100644 --- a/docs/build/html/_sources/creating-a-cordapp.txt +++ b/docs/build/html/_sources/creating-a-cordapp.txt @@ -1,5 +1,5 @@ -Creating a CorDapp -================== +CorDapps Background +=================== A Cordapp is an application that runs on the Corda platform using the platform APIs and plugin system. They are self contained in separate JARs from the node server JAR that are created and distributed. @@ -21,7 +21,7 @@ specific details of the implementation, but you can extend the server in the fol Services -------- -Services are classes which are constructed after the node has started. It is provided a `ServiceHubInternal`_ which +Services are classes which are constructed after the node has started. It is provided a `PluginServiceHub`_ which allows a richer API than the `ServiceHub`_ exposed to contracts. It enables adding flows, registering message handlers and more. The service does not run in a separate thread, so the only entry point to the service is during construction, where message handlers should be registered and threads started. @@ -93,8 +93,8 @@ The name and column layout of the internal node tables is in a state of flux and at the present time, and should certainly be treated as read-only. .. _CordaPluginRegistry: api/net.corda.core.node/-corda-plugin-registry/index.html -.. _ServiceHubInternal: api/net.corda.node.services.api/-service-hub-internal/index.html -.. _ServiceHub: api/net.corda.node.services.api/-service-hub/index.html +.. _PluginServiceHub: api/net.corda.core.node/-plugin-service-hub/index.html +.. _ServiceHub: api/net.corda.core.node/-service-hub/index.html Building against Corda ---------------------- diff --git a/docs/build/html/_sources/getting-set-up-fault-finding.txt b/docs/build/html/_sources/getting-set-up-fault-finding.txt index e6cfebadc5..54f4716bcb 100644 --- a/docs/build/html/_sources/getting-set-up-fault-finding.txt +++ b/docs/build/html/_sources/getting-set-up-fault-finding.txt @@ -4,6 +4,17 @@ Getting Set Up : Faultfinding IntelliJ issues --------------- +Run configurations are missing +****************************** + +If you opened the Corda project using "Import" from the IntelliJ splash screen rather than using "Open" and then +importing the Gradle build system from the popup bubble, then a bug in IntelliJ will cause it to wipe and recreate +the ``.idea`` directory where the run configurations are stored. The fix is simple and doesn't require you to +re-import the project: just undelete the files! You can do that by either: + +1. Running ``git checkout .idea/runConfigurations`` to restore that part of the tree to its normal state. +2. Using the "Version Control" pane in IntelliJ to undelete the files via the GUI. + If IntelliJ complains about lack of an SDK ****************************************** diff --git a/docs/build/html/_sources/getting-set-up.txt b/docs/build/html/_sources/getting-set-up.txt index 2faa6f160e..d4cd8cb4de 100644 --- a/docs/build/html/_sources/getting-set-up.txt +++ b/docs/build/html/_sources/getting-set-up.txt @@ -20,6 +20,12 @@ We strongly recommend the use of IntelliJ's Development Environment known as IDE `JetBrains `_. The primary reason we recommend this particular IDE is that it integrates very well with our choice of language for Corda, "Kotlin", as Jetbrains also support the development of Kotlin. +.. warning:: When opening the Corda project for the first time from the IntelliJ splash screen, please use "Open" + and then agree to import the Gradle project from the popup bubble. Don't pick "Import" on the splash screen, + because a bug in IntelliJ will cause the pre-packaged run configurations to be erased. If you see this warning + too late, it's no problem, just use ``git checkout .idea/runConfiguration`` or the version control tab in IntelliJ + to undelete the files. + Kotlin ------ diff --git a/docs/build/html/_sources/index.txt b/docs/build/html/_sources/index.txt index 4469b53b4d..1a220e1bac 100644 --- a/docs/build/html/_sources/index.txt +++ b/docs/build/html/_sources/index.txt @@ -1,5 +1,5 @@ -Welcome to the Corda! -===================== +Welcome to the Corda documentation! +=================================== .. warning:: This build of the docs is from the *master branch*, not a milestone release. It may not reflect the current state of the code. @@ -29,7 +29,9 @@ Read on to learn: inthebox getting-set-up + getting-set-up-fault-finding running-the-demos + CLI-vs-IDE .. toctree:: :maxdepth: 2 @@ -39,6 +41,14 @@ Read on to learn: transaction-data-types merkle-trees consensus + clauses + +.. toctree:: + :maxdepth: 2 + :caption: CorDapps + + creating-a-cordapp + tutorial-cordapp .. toctree:: :maxdepth: 2 @@ -54,21 +64,16 @@ Read on to learn: node-explorer permissioning -.. toctree:: - :maxdepth: 2 - :caption: CorDapps - - creating-a-cordapp - .. toctree:: :maxdepth: 2 :caption: Tutorials - where-to-start tutorial-contract tutorial-contract-clauses tutorial-test-dsl + tutorial-integration-testing tutorial-clientrpc-api + tutorial-building-transactions flow-state-machines flow-testing running-a-notary @@ -96,6 +101,7 @@ Read on to learn: :caption: Appendix loadtesting + setting-up-a-corda-network secure-coding-guidelines release-process release-notes diff --git a/docs/build/html/_sources/oracles.txt b/docs/build/html/_sources/oracles.txt index 06f5843818..80fe2a1643 100644 --- a/docs/build/html/_sources/oracles.txt +++ b/docs/build/html/_sources/oracles.txt @@ -75,8 +75,6 @@ Here's a quick way to decide which approach makes more sense for your data sourc Asserting continuously varying data ----------------------------------- -.. note:: A future version of the platform will include a complete tutorial on implementing this type of oracle. - Let's look at the interest rates oracle that can be found in the ``NodeInterestRates`` file. This is an example of an oracle that uses a command because the current interest rate fix is a constantly changing fact. @@ -93,15 +91,15 @@ So the way we actually implement it is like this: 1. The creator of the transaction that depends on the interest rate asks for the current rate. They can abort at this point if they want to. 2. They insert a command with that rate and the time it was obtained into the transaction. -3. They then send it to the oracle for signing, along with everyone else in parallel. The oracle checks that the command - has correct data for the asserted time, and signs if so. +3. They then send it to the oracle for signing, along with everyone else, potentially in parallel. The oracle checks that + the command has the correct data for the asserted time, and signs if so. This same technique can be adapted to other types of oracle. The oracle consists of a core class that implements the query/sign operations (for easy unit testing), and then a separate class that binds it to the network layer. -Here is an extract from the ``NodeService.Oracle`` class and supporting types: +Here is an extract from the ``NodeInterestRates.Oracle`` class and supporting types: .. sourcecode:: kotlin @@ -112,13 +110,31 @@ Here is an extract from the ``NodeService.Oracle`` class and supporting types: data class Fix(val of: FixOf, val value: BigDecimal) : CommandData class Oracle { - fun query(queries: List): List + fun query(queries: List, deadline: Instant): List - fun sign(wtx: WireTransaction): DigitalSignature.LegallyIdentifiable + fun sign(ftx: FilteredTransaction, merkleRoot: SecureHash): DigitalSignature.LegallyIdentifiable } -Because the fix contains a timestamp (the ``forDay`` field), there can be an arbitrary delay between a fix being -requested via ``query`` and the signature being requested via ``sign``. +Because the fix contains a timestamp (the ``forDay`` field), that identifies the version of the data being requested, +there can be an arbitrary delay between a fix being requested via ``query`` and the signature being requested via ``sign`` +as the Oracle can know which, potentially historical, value it is being asked to sign for. This is an important +technique for continously varying data. + +The ``query`` method takes a deadline, which is a point in time the requester is willing to wait until for the necessary +data to be available. Not every oracle will need this. This can be useful where data is expected to be available on a +particular schedule and we use scheduling functionality to automatically launch the processing associated with it. +We can schedule for the expected announcement (or publish) time and give a suitable deadline at which the lack of the +information being available and the delay to processing becomes significant and may need to be escalated. + +Hiding transaction data from the oracle +--------------------------------------- + +Because the transaction is sent to the oracle for signing, ordinarily the oracle would be able to see the entire contents +of that transaction including the inputs, output contract states and all the commands, not just the one (in this case) +relevant command. This is an obvious privacy leak for the other participants. We currently solve this with +``FilteredTransaction``-s and the use of Merkle Trees. These reveal only the necessary parts of the transaction to the +oracle but still allow it to sign it by providing the Merkle hashes for the remaining parts. See :doc:`merkle-trees` for +more details. Pay-per-play oracles -------------------- @@ -132,3 +148,124 @@ contract could in theory include a transaction parsing and signature checking li would be conclusive evidence of intent to disobey the rules of the service (*res ipsa loquitur*). In an environment where parties are legally identifiable, usage of such a contract would by itself be sufficient to trigger some sort of punishment. + +Implementing an oracle with continuously varying data +===================================================== + +Implement the core classes +-------------------------- + +The key is to implement your oracle in a similar way to the ``NodeInterestRates.Oracle`` outline we gave above with +both ``query`` and ``sign`` methods. Typically you would want one class that encapsulates the parameters to the ``query`` +method (``FixOf`` above), and a ``CommandData`` implementation (``Fix`` above) that encapsulates both an instance of +that parameter class and an instance of whatever the result of the ``query`` is (``BigDecimal`` above). + +The ``NodeInterestRates.Oracle`` allows querying for multiple ``Fix``-es but that is not necessary and is +provided for the convenience of callers who might need multiple and can do it all in one query request. Likewise +the *deadline* functionality is optional and can be avoided initially. + +Let's see what parameters we pass to the constructor of this oracle. + +.. sourcecode:: kotlin + + class Oracle(val identity: Party, private val signingKey: KeyPair, val clock: Clock) = TODO() + +Here we see the oracle needs to have its own identity, so it can check which transaction commands it is expected to +sign for, and also needs a pair of signing keys with which it signs transactions. The clock is used for the deadline +functionality which we will not discuss further here. + +Assuming you have a data source and can query it, it should be very easy to implement your ``query`` method and the +parameter and ``CommandData`` classes. + +Let's see how the ``sign`` method for ``NodeInterestRates.Oracle`` is written: + +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 + +Here we can see that there are several steps: + +1. Ensure that the transaction we have been sent is indeed valid and passes verification, even though we cannot see all + of it. +2. Check that we only received commands as expected, and each of those commands expects us to sign for them and is of + the expected type (``Fix`` here). +3. Iterate over each of the commands we identified in the last step and check that the data they represent matches + exactly our data source. The final step, assuming we have got this far, is to generate a signature for the + transaction and return it. + +Binding to the network via CorDapp plugin +----------------------------------------- + +.. note:: Before reading any further, we advise that you understand the concept of flows and how to write them and use + them. See :doc:`flow-state-machines`. Likewise some understanding of Cordapps, plugins and services will be helpful. + See :doc:`creating-a-cordapp`. + +The first step is to create a service to host the oracle on the network. Let's see how that's implemented: + +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/api/NodeInterestRates.kt + :language: kotlin + :start-after: DOCSTART 2 + :end-before: DOCEND 2 + +This may look complicated, but really it's made up of some relatively simple elements (in the order they appear in the code): + +1. Accept a ``PluginServiceHub`` in the constructor. This is your interface to the Corda node. +2. Ensure you extend the abstract class ``SingletonSerializeAsToken`` (see :doc:`corda-plugins`). +3. Create an instance of your core oracle class that has the ``query`` and ``sign`` methods as discussed above. +4. Register your client sub-flows (in this case both in ``RatesFixFlow``. See the next section) for querying and + signing as initiating your service flows that actually do the querying and signing using your core oracle class instance. +5. Implement your service flows that call your core oracle class instance. + +The final step is to register your service with the node via the plugin mechanism. Do this by +implementing a plugin. Don't forget the resources file to register it with the ``ServiceLoader`` framework +(see :doc:`corda-plugins`). + +.. sourcecode:: kotlin + + class Plugin : CordaPluginRegistry() { + override val servicePlugins: List> = listOf(Service::class.java) + } + +Providing client sub-flows for querying and signing +--------------------------------------------------- + +We mentioned the client sub-flow briefly above. They are the mechanism that clients, in the form of other flows, will +interact with your oracle. Typically there will be one for querying and one for signing. Let's take a look at +those for ``NodeInterestRates.Oracle``. + +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 + +You'll note that the ``FixSignFlow`` requires a ``FilterFuns`` instance with the appropriate filter to include only +the ``Fix`` commands. You can find a further explanation of this in :doc:`merkle-trees`. + +Using an oracle +=============== + +The oracle is invoked through sub-flows to query for values, add them to the transaction as commands and then get +the transaction signed by the the oracle. Following on from the above examples, this is all encapsulated in a sub-flow +called ``RatesFixFlow``. Here's the ``call`` method of that flow. + +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/flows/RatesFixFlow.kt + :language: kotlin + :start-after: DOCSTART 2 + :end-before: DOCEND 2 + +As you can see, this: + +1. Queries the oracle for the fact using the client sub-flow for querying from above. +2. Does some quick validation. +3. Adds the command to the transaction containing the fact to be signed for by the oracle. +4. Calls an extension point that allows clients to generate output states based on the fact from the oracle. +5. Requests the signature from the oracle using the client sub-flow for signing from above. +6. Adds the signature returned from the oracle. + +Here's an example of it in action from ``FixingFlow.Fixer``. + +.. literalinclude:: ../../samples/irs-demo/src/main/kotlin/net/corda/irs/flows/FixingFlow.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 \ No newline at end of file diff --git a/docs/build/html/_sources/release-notes.txt b/docs/build/html/_sources/release-notes.txt index 77a8fd17a0..a7e5e5e5ba 100644 --- a/docs/build/html/_sources/release-notes.txt +++ b/docs/build/html/_sources/release-notes.txt @@ -3,6 +3,78 @@ Release notes Here are brief summaries of what's changed between each snapshot release. +Milestone 6 +----------- + +* Added the `Corda technical white paper <_static/corda-technical-whitepaper.pdf>`_. Note that its current version + is 0.5 to reflect the fact that the Corda design is still evolving. Although we expect only relatively small tweaks + at this point, when Corda reaches 1.0 so will the white paper. + +* Major documentation restructuring and new content: + + * More details on Corda node internals. + * New CorDapp tutorial. + * New tutorial on building transactions. + * New tutorials on how to run and use a notary service. + +* An experimental version of the deterministic JVM sandbox has been added. It is not integrated with the node and will + undergo some significant changes in the coming releases before it is integrated, as the code is finished, as bugs are + found and fixed, and as the platform subset we choose to expose is finalised. Treat this as an outline of the basic + approach rather than something usable for production. + +* Developer experience: + + * Samples have been merged back into the main repository. All samples can now be run via command line or IntelliJ. + + * Added a Client RPC python example. + + * Node console output now displays concise startup information, such as startup time or web address. All logging to + the console is suppressed apart from errors and flow progress tracker steps. It can be re-enabled by passing + ``--log-to-console`` command line parameter. Note that the log file remains unchanged an will still contain all + log entries. + + * The ``runnodes`` scripts generated by the Gradle plugins now open each node in separate terminal windows or (on macOS) tabs. + + * A much more complete template app. + + * JARs now available on Maven Central. + +* Data model: A party is now identified by a composite key (formerly known as a "public key tree") instead of a single public key. + Read more in :ref:`composite-keys`. This allows expressing distributed service identities, e.g. a distributed notary. + In the future this will also allow parties to use multiple signing keys for their legal identity. + +* Decentralised consensus: A prototype RAFT based notary composed of multiple nodes has been added. This implementation + is optimised for high performance over robustness against malicious cluster members, which may be appropriate for + some financial situations. See :ref:`notary-demo` to try it out. A BFT notary will be added later. + +* Node explorer app: + + * New theme aligned with the Corda branding. + * The New Transaction screen moved to the Cash View (as it is used solely for cash transactions) + * Removed state machine/flow information from Transaction table. A new view for this will be created in a future release. + * Added a new Network View that displays details of all nodes on the network. + * Users can now configure the reporting currency in settings. + * Various layout and performance enhancements. + +* Client RPC: + + * Added a generic ``startFlow`` method that enables starting of any flow, given sufficient permissions. + * Added the ability for plugins to register additional classes or custom serialisers with Kryo for use in RPC. + * ``rpc-users.properties`` file has been removed with RPC user settings moved to the config file. + +* Configuration changes: It is now possible to specify a custom legal name for any of the node's advertised services. + +* Added a load testing framework which allows stress testing of a node cluster, as well as specifying different ways of + disrupting the normal operation of nodes. See :doc:`loadtesting`. + +* Improvements to the experimental contract DSL, by Sofus Mortensen of Nordea Bank (please give Nordea a shoutout too). + +API changes: + +* The top level package has been renamed from ``com.r3corda`` to ``net.corda``. +* Protocols have been renamed to "flows". +* ``OpaqueBytes`` now uses ``bytes`` as the field name rather than ``bits``. + Milestone 5 ----------- diff --git a/docs/build/html/_sources/running-the-demos.txt b/docs/build/html/_sources/running-the-demos.txt index fe1fb1bdf7..a1a3939591 100644 --- a/docs/build/html/_sources/running-the-demos.txt +++ b/docs/build/html/_sources/running-the-demos.txt @@ -16,15 +16,21 @@ so far. We have: .. note:: If any demos don't work please jump on our mailing list and let us know. + +Important : Common Instructions for all demos +--------------------------------------------- + The demos can be run either from the command line, or from inside IntelliJ. Running from the command line is recommended if you are just wanting to see them run, using IntelliJ can be helpful if you want to debug or -develop the demos themselves. +develop the demos themselves. For more details about running via the command line or within IntelliJ - see :doc:`CLI-vs-IDE`. + +*For all demos:* The ``install`` gradle task is automatically ran if required; this no longer needs to be run independently. Trader demo ----------- This demo brings up three nodes: Bank A, Bank B and a notary/network map node that they both use. Bank A will -be the buyer, and self-issues some cash in order to acquire the commercial paper from Bank B, the seller. +be the buyer, and self-issues some cash in order to acquire commercial paper from Bank B, the seller. To run from the command line: @@ -54,7 +60,7 @@ on a simulated clock passes. To run from the command line: -1. Run ``./gradlew samples:irs-demo:deployNodes samples:irs-demo:installDist`` to install configs and a command line tool under ``samples/irs-demo/build``. +1. Run ``./gradlew samples:irs-demo:deployNodes`` to install configs and a command line tool under ``samples/irs-demo/build``. 2. Change to the ``samples/irs-demo/build`` directory. 3. Run ``./nodes/runnodes`` (or ``runnodes.bat`` on Windows) to open up three new terminals with the three nodes. 4. Run ``./install/irs-demo/bin/irs-demo --role UploadRates`` (or use ``irs-demo.bat`` on Windows). You should see a @@ -104,19 +110,6 @@ Or you can run them from inside IntelliJ, but when done this way, all the node o In the "Attachment Demo: Run Nodes" window you should see some log lines scroll past, and within a few seconds the message "File received - we're happy!" should be printed. -SIMM and Portfolio demo ------------------------ - -.. note:: Read more about this demo at :doc:`initial-margin-agreement`. - -To run the demo run: - -1. Open the Corda project in IntelliJ and run the "Install" configuration -2. Open the Corda samples project in IntelliJ and run the "Simm Valuation Demo" configuration - -Now open http://localhost:10005/web/simmvaluationdemo and http://localhost:10007/web/simmvaluationdemo to view the two nodes that this -will have started respectively. You can now use the demo by creating trades and agreeing the valuations. - .. _notary-demo: Distributed Notary demo @@ -161,4 +154,96 @@ by using the H2 web console: You can use the string on the right to connect to the h2 database: just paste it in to the `JDBC URL` field and click *Connect*. You will be presented with a web application that enumerates all the available tables and provides an interface for you to query them using SQL. - The committed states are stored in the ``NOTARY_COMMITTED_STATES`` table. Note that the raw data is not human-readable, - but we're only interested in the row count for this demo. \ No newline at end of file + but we're only interested in the row count for this demo. + +SIMM and Portfolio Demo - aka the Initial Margin Agreement Demo +--------------------------------------------------------------- + +Background and SIMM Introduction +******************************** + +This app is a demonstration of how Corda can be used for the real world requirement of initial margin calculation and +agreement; featuring the integration of complex and industry proven third party libraries into Corda nodes. + +SIMM is an acronym for "Standard Initial Margin Model". It is effectively the calculation of a "margin" that is paid +by one party to another when they agree a trade on certain types of transaction. This margin is +paid such that, in the event of one of the counterparties suffering a credit event +(a financial term and a polite way to say defaulting, not paying the debts that are due, or potentially even bankruptcy), +then the party that is owed any sum already has some of the amount that it should have been paid. This payment to the +receiving party is a preventative measure in order to reduce the risk of a potentially catastrophic default domino +effect that caused the `Great Financial Crisis `_, +as it means that they can be assured that if they need to pay another party, they will have a proportion of the funds +that they have been relying on. + +To enact this, in September 2016, the ISDA committee - with full backing from various governing bodies - +`issued a ruling on what is known as the ISDA SIMM ™ model `_, +a way of fairly and consistently calculating this margin. Any parties wishing to trade a financial product that is +covered under this ruling would, independently, use this model and calculate their margin payment requirement, +agree it with their trading counterparty and then pay (or receive, depending on the results of this calculation) +this amount. In the case of disagreement that is not resolved in a timely fashion, this payment would increase +and so therefore it is in the parties' interest to reach agreement in as short as time frame as possible. + +To be more accurate, the SIMM calculation is not performed on just one trade - it is calculated on an aggregate of +intermediary values (which in this model are sensitivities to risk factors) from a portfolio of trades; therefore +the input to a SIMM is actually this data, not the individual trades themselves. + +Also note that implementations of the SIMM are actually protected and subject to license restrictions by ISDA +(this is due to the model itself being protected). We were fortunate enough to technically partner with +`OpenGamma `_ who allowed us to demonstrate the SIMM process using their proprietary model. +In the source code released, we have replaced their analytics engine with very simple stub functions that allow +the process to run without actually calculating correct values, and can easily be swapped out in place for their real libraries. + + +Open the Corda samples project in IntelliJ and run the "Simm Valuation Demo" configuration + +Now open http://localhost:10005/web/simmvaluationdemo and http://localhost:10007/web/simmvaluationdemo to view the two +nodes that this will have started respectively. You can now use the demo by creating trades and agreeing the valuations. +Also see the README located in samples/simm-valuation-demo. + + +What happens in the demo (notionally) +************************************* + +Preliminaries + - Ensure that there are a number of live trades with another party financial products that are covered under the + ISDA SIMM agreement (if none, then use the demo to enter some simple trades as described below). + +Initial Margin Agreement Process + - Agree that one will be performing the margining calculation against a portfolio of trades with another party, and agree the trades in that portfolio. In practice, one node will start the flow but it does not matter which node does. + - Individually (at the node level), identify the data (static, reference etc) one will need in order to be able to calculate the metrics on those trades + - Confirm with the other counterparty the dataset from the above set + - Calculate any intermediary steps and values needed for the margin calculation (ie sensitivities to risk factors) + - Agree on the results of these steps + - Calculate the initial margin + - Agree on the calculation of the above with the other party + - In practice, pay (or receive) this margin (omitted for the sake of complexity for this example) + + +Demo execution (step by step) +***************************** + +The demonstration can be run in two ways - via IntelliJ (which will allow you to add breakpoints, debug, etc), or via gradle and the command line. + +Run with IntelliJ + + 1. Open the ``corda`` project with IntelliJ + 2. Run the shared run configuration "SIMM Valuation Demo" + +Run via CLI + + 1. Navigate to the ``samples/simm-valuation-demo`` directory in your shell + 2. Run the gradle target ``deployNodes`` (ie; ``./gradlew deployNodes`` for Unix or ``gradlew.bat`` on Windows) + + a. Unix: ``cd simm-valuation-demo/build/nodes && ./runnodes`` + b. Windows: ``cd simm-valuation-demo/build/nodes & runnodes.bat`` + +Then (for both) + 3. Browse to http://localhost:10005/web/simmvaluationdemo + 4. Select the other counterparty (ie Bank B) + 5. Enter at least 3 trades - via the "Create New Trade" tab. + 6. On the "Agree Valuations" tab, click the "Start Calculations" button. + + +Additionally, you can confirm that these trades are not visible from `Bank C's node `_. + +Please note that any URL text after `simmvaluationdemo` should not be bookmarked or navigated directly to as they are only for aesthetics. \ No newline at end of file diff --git a/docs/build/html/_sources/transaction-data-types.txt b/docs/build/html/_sources/transaction-data-types.txt index 7c855883d8..752071c8fe 100644 --- a/docs/build/html/_sources/transaction-data-types.txt +++ b/docs/build/html/_sources/transaction-data-types.txt @@ -145,6 +145,8 @@ that has been signed by a set of parties. .. note:: These types are provisional and will change significantly in future as the identity framework becomes more fleshed out. +.. _composite-keys: + Multi-signature support ----------------------- diff --git a/docs/build/html/_sources/tutorial-building-transactions.txt b/docs/build/html/_sources/tutorial-building-transactions.txt new file mode 100644 index 0000000000..f157a3056d --- /dev/null +++ b/docs/build/html/_sources/tutorial-building-transactions.txt @@ -0,0 +1,321 @@ +Building Transactions +===================== + +Introduction +------------ + +Understanding and implementing transactions in Corda is key to building +and implementing real world smart contracts. It is only through +construction of valid Corda transactions containing appropriate data +that nodes on the ledger can map real world business objects into a +shared digital view of the data in the Corda ledger. More importantly as +the developer of new smart contracts it is the code which determines +what data is well formed and what data should be rejected as mistakes, +or to prevent malicious activity. This document details some of the +considerations and APIs used to when constructing transactions as part +of a flow. + +The Basic Lifecycle Of Transactions +----------------------------------- + +Transactions in Corda are constructed in stages and contain a number of +elements. In particular a transaction’s core data structure is the +``net.corda.core.transactions.WireTransaction``, which is usually +manipulated via a +``net.corda.core.contracts.General.TransactionBuilder`` and contains: + +1. A set of Input state references that will be consumed by the final +accepted transaction. + +2. A set of Output states to create/replace the consumed states and thus +become the new latest versions of data on the ledger. + +3. A set of ``Attachment`` items which can contain legal documents, contract +code, or private encrypted sections as an extension beyond the native +contract states. + +4. A set of ``Command`` items which give a context to the type of ledger +transition that is encoded in the transaction. Also each command has an +associated set of signer keys, which will be required to sign the +transaction. + +5. A signers list, which is populated by the ``TransactionBuilder`` to +be the union of the signers on the individual Command objects. + +6. A notary identity to specify the Notary node which is tracking the +state consumption. (If the input states are registered with different +notary nodes the flow will have to insert additional ``NotaryChange`` +transactions to migrate the states across to a consistent notary node, +before being allowed to mutate any states.) + +7. Optionally a timestamp that can used in the Notary to time bound the +period in which the proposed transaction stays valid. + +Typically, the ``WireTransaction`` should be regarded as a proposal and +may need to be exchanged back and forth between parties before it can be +fully populated. This is an immediate consequence of the Corda privacy +model, which means that the input states are likely to be unknown to the +other node. + +Once the proposed data is fully populated the flow code should freeze +the ``WireTransaction`` and form a ``SignedTransaction``. This is key to +the ledger agreement process, as once a flow has attached a node’s +signature it has stated that all details of the transaction are +acceptable to it. A flow should take care not to attach signatures to +intermediate data, which might be maliciously used to construct a +different ``SignedTransaction``. For instance in a foreign exchange +scenario we shouldn't send a ``SignedTransaction`` with only our sell +side populated as that could be used to take the money without the +expected return of the other currency. Also, it is best practice for +flows to receive back the ``DigitalSignature.WithKey`` of other parties +rather than a full ``SignedTransaction`` objects, because otherwise we +have to separately check that this is still the same +``SignedTransaction`` and not a malicious substitute. + +The final stage of committing the transaction to the ledger is to +notarise the ``SignedTransaction``, distribute this to all appropriate +parties and record the data into the ledger. These actions are best +delegated to the ``FinalityFlow``, rather than calling the inidividual +steps manually. However, do note that the final broadcast to the other +nodes is asynchronous, so care must be used in unit testing to +correctly await the Vault updates. + +Gathering Inputs +---------------- + +One of the first steps to forming a transaction is gathering the set of +input references. This process will clearly vary according to the nature +of the business process being captured by the smart contract and the +parameterised details of the request. However, it will generally involve +searching the Vault via the ``VaultService`` interface on the +``ServiceHub`` to locate the input states. + +To give a few more specific details consider two simplified real world +scenarios. First, a basic foreign exchange Cash transaction. This +transaction needs to locate a set of funds to exchange. A flow +modelling this is implemented in ``FxTransactionBuildTutorial.kt``. +Second, a simple business model in which parties manually accept, or +reject each other's trade proposals which is implemented in +``WorkflowTransactionBuildTutorial.kt``. To run and explore these +examples using the IntelliJ IDE one can run/step the respective unit +tests in ``FxTransactionBuildTutorialTest.kt`` and +``WorkflowTransactionBuildTutorialTest.kt``, which drive the flows as +part of a simulated in-memory network of nodes. When creating the +IntelliJ run configuration for these unit test set the workspace +points to the root ``r3prototyping`` folder and add +``-javaagent:lib/quasar.jar`` to the VM options, so that the ``Quasar`` +instrumentation is correctly configured. + +For the Cash transaction let’s assume the cash resources are using the +standard ``CashState`` in the ``:financial`` Gradle module. The Cash +contract uses ``FungibleAsset`` states to model holdings of +interchangeable assets and allow the split/merge and summing of +states to meet a contractual obligation. We would normally use the +``generateSpend`` method on the ``VaultService`` to gather the required +amount of cash into a ``TransactionBuilder``, set the outputs and move +command. However, to elucidate more clearly example flow code is shown +here that will manually carry out the inputs queries using the lower +level ``VaultService``. + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 + +As a foreign exchange transaction we expect an exchange of two +currencies, so we will also require a set of input states from the other +counterparty. However, the Corda privacy model means we do not know the +other node’s states. Our flow must therefore negotiate with the other +node for them to carry out a similar query and populate the inputs (See +the ``ForeignExchangeFlow`` for more details of the exchange). Having +identified a set of Input ``StateRef`` items we can then create the +output as discussed below. + +For the trade approval flow we need to implement a simple workflow +pattern. We start by recording the unconfirmed trade details in a state +object implementing the ``LinearState`` interface. One field of this +record is used to map the business workflow to an enumerated state. +Initially the initiator creates a new state object which receives a new +``UniqueIdentifier`` in its ``linearId`` property and a starting +workflow state of ``NEW``. The ``Contract.verify`` method is written to +allow the initiator to sign this initial transaction and send it to the +other party. This pattern ensures that a permanent copy is recorded on +both ledgers for audit purposes, but the state is prevented from being +maliciously put in an approved state. The subsequent workflow steps then +follow with transactions that consume the state as inputs on one side +and output a new version with whatever state updates, or amendments +match to the business process, the ``linearId`` being preserved across +the changes. Attached ``Command`` objects help the verify method +restrict changes to appropriate fields and signers at each step in the +workflow. In this it is typical to have both parties sign the change +transactions, but it can be valid to allow unilateral signing, if for instance +one side could block a rejection. Commonly the manual initiator of these +workflows will query the Vault for states of the right contract type and +in the right workflow state over the RPC interface. The RPC will then +initiate the relevant flow using ``StateRef``, or ``linearId`` values as +parameters to the flow to identify the states being operated upon. Thus +code to gather the latest input state would be: + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 1 + :end-before: DOCEND 1 + +.. container:: codeset + + .. sourcecode:: kotlin + + // Pull in the latest Vault version of the StateRef as a full StateAndRef + val latestRecord = serviceHub.latest(ref) + + +Generating Commands +------------------- + +For the commands that will be added to the transaction, these will need +to correctly reflect the task at hand. These must match because inside +the ``Contract.verify`` method the command will be used to select the +validation code path. The ``Contract.verify`` method will then restrict +the allowed contents of the transaction to reflect this context. Typical +restrictions might include that the input cash amount must equal the +output cash amount, or that a workflow step is only allowed to change +the status field. Sometimes, the command may capture some data too e.g. +the foreign exchange rate, or the identity of one party, or the StateRef +of the specific input that originates the command in a bulk operation. +This data will be used to further aid the ``Contract.verify``, because +to ensure consistent, secure and reproducible behaviour in a distributed +environment the ``Contract.verify``, transaction is the only allowed to +use the content of the transaction to decide validity. + +Another essential requirement for commands is that the correct set of +``CompositeKeys`` are added to the Command on the builder, which will be +used to form the set of required signers on the final validated +transaction. These must correctly align with the expectations of the +``Contract.verify`` method, which should be written to defensively check +this. In particular, it is expected that at minimum the owner of an +asset would have to be signing to permission transfer of that asset. In +addition, other signatories will often be required e.g. an Oracle +identity for an Oracle command, or both parties when there is an +exchange of assets. + +Generating Outputs +------------------ + +Having located a set of ``StateAndRefs`` as the transaction inputs, the +flow has to generate the output states. Typically, this is a simple call +to the Kotlin ``copy`` method to modify the few fields that will +transitioned in the transaction. The contract code may provide a +``generateXXX`` method to help with this process if the task is more +complicated. With a workflow state a slightly modified copy state is +usually sufficient, especially as it is expected that we wish to preserve +the ``linearId`` between state revisions, so that Vault queries can find +the latest revision. + +For fungible contract states such as ``Cash`` it is common to distribute +and split the total amount e.g. to produce a remaining balance output +state for the original owner when breaking up a large amount input +state. Remember that the result of a successful transaction is always to +fully consume/spend the input states, so this is required to conserve +the total cash. For example from the demo code: + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 2 + :end-before: DOCEND 2 + +Building the WireTransaction +---------------------------- + +Having gathered all the ingredients for the transaction we now need to +use a ``TransactionBuilder`` to construct the full ``WireTransaction``. +The initial ``TransactionBuilder`` should be created by calling the +``TransactionType.General.Builder`` method. (The other +``TransactionBuilder`` implementation is only used for the ``NotaryChange`` flow where +``ContractStates`` need moving to a different Notary.) At this point the +Notary to associate with the states should be recorded. Then we keep +adding inputs, outputs, commands and attachments to fill the +transaction. Examples of this process are: + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 2 + :end-before: DOCEND 2 + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/FxTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 3 + :end-before: DOCEND 3 + +Completing the SignedTransaction +-------------------------------- + +Having created an initial ``WireTransaction`` and converted this to an +initial ``SignedTransaction`` the process of verifying and forming a +full ``SignedTransaction`` begins and then completes with the +notarisation. In practice this is a relatively stereotypical process, +because assuming the ``WireTransaction`` is correctly constructed the +verification should be immediate. However, it is also important to +recheck the business details of any data received back from an external +node, because a malicious party could always modify the contents before +returning the transaction. Each remote flow should therefore check as +much as possible of the initial ``SignedTransaction`` inside the ``unwrap`` of +the receive before agreeing to sign. Any issues should immediately throw +an exception to abort the flow. Similarly the originator, should always +apply any new signatures to its original proposal to ensure the contents +of the transaction has not been altered by the remote parties. + +The typical code therefore checks the received ``SignedTransaction`` +using the ``verifySignatures`` method, but excluding itself, the notary +and any other parties yet to apply their signature. The contents of the +``WireTransaction`` inside the ``SignedTransaction`` should be fully +verified further by expanding with ``toLedgerTransaction`` and calling +``verify``. Further context specific and business checks should then be +made, because the ``Contract.verify`` is not allowed to access external +context. For example the flow may need to check that the parties are the +right ones, or that the ``Command`` present on the transaction is as +expected for this specific flow. An example of this from the demo code is: + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 3 + :end-before: DOCEND 3 + +After verification the remote flow will return its signature to the +originator. The originator should apply that signature to the starting +``SignedTransaction`` and recheck the signatures match. + +Committing the Transaction +-------------------------- + +Once all the party signatures are applied to the SignedTransaction the +final step is notarisation. This involves calling ``NotaryFlow.Client`` +to confirm the transaction, consume the inputs and return its confirming +signature. Then the flow should ensure that all nodes end with all +signatures and that they call ``ServiceHub.recordTransactions``. The +code for this is standardised in the ``FinalityFlow``, or more explictly +an example is: + +.. literalinclude:: example-code/src/main/kotlin/net/corda/docs/WorkflowTransactionBuildTutorial.kt + :language: kotlin + :start-after: DOCSTART 4 + :end-before: DOCEND 4 + +Partially Visible Transactions +------------------------------ + +The discussion so far has assumed that the parties need full visibility +of the transaction to sign. However, there may be situations where each +party needs to store private data for audit purposes, or for evidence to +a regulator, but does not wish to share that with the other trading +partner. The tear-off/Merkle tree support in Corda allows flows to send +portions of the full transaction to restrict visibility to remote +parties. To do this one can use the +``WireTransaction.buildFilteredTransaction`` extension method to produce +a ``FilteredTransaction``. The elements of the ``SignedTransaction`` +which we wish to be hide will be replaced with their secure hash. The +overall transaction txid is still provable from the +``FilteredTransaction`` preventing change of the private data, but we do +not expose that data to the other node directly. A full example of this +can be found in the ``NodeInterestRates`` Oracle code from the +``irs-demo`` project which interacts with the ``RatesFixFlow`` flow. +Also, refer to the :doc:`merkle-trees` documentation. diff --git a/docs/build/html/_sources/tutorial-clientrpc-api.txt b/docs/build/html/_sources/tutorial-clientrpc-api.txt index 67ef519769..a4cdcd85bd 100644 --- a/docs/build/html/_sources/tutorial-clientrpc-api.txt +++ b/docs/build/html/_sources/tutorial-clientrpc-api.txt @@ -32,9 +32,12 @@ We start generating transactions in a different thread (``generateTransactions`` :start-after: interface CordaRPCOps :end-before: } +.. warning:: This API is evolving and will continue to grow as new functionality and features added to Corda are made available to RPC clients. + The one we need in order to dump the transaction graph is ``verifiedTransactions``. The type signature tells us that the RPC will return a list of transactions and an Observable stream. This is a general pattern, we query some data and the -node will return the current snapshot and future updates done to it. +node will return the current snapshot and future updates done to it. Observables are described in further detail in +:doc:`clientrpc` .. literalinclude:: example-code/src/main/kotlin/net/corda/docs/ClientRpcTutorial.kt :language: kotlin @@ -66,7 +69,7 @@ The RPC we need to initiate a Cash transaction is ``startFlowDynamic`` which may Finally we have everything in place: we start a couple of nodes, connect to them, and start creating transactions while listening on successfully created ones, which are dumped to the console. We just need to run it!: -.. sourcecode:: bash +.. code-block:: text # Build the example ./gradlew docs/source/example-code:installDist @@ -97,3 +100,53 @@ See more on plugins in :doc:`creating-a-cordapp`. .. warning:: We will be replacing the use of Kryo in RPC with a stable message format and this will mean that this plugin customisation point will either go away completely or change. + +Security +-------- +RPC credentials associated with a Client must match the permission set configured on the server Node. +This refers to both authentication (username and password) and role-based authorisation (a permissioned set of RPC operations an +authenticated user is entitled to run). + +.. note:: Permissions are represented as *String's* to allow RPC implementations to add their own permissioning. + Currently the only permission type defined is *StartFlow*, which defines a list of whitelisted flows an authenticated use may execute. + +In the instructions above the server node permissions are configured programmatically in the driver code: + +.. code-block:: text + + driver(driverDirectory = baseDirectory) { + val user = User("user", "password", permissions = setOf(startFlowPermission())) + val node = startNode("Alice", rpcUsers = listOf(user)).get() + +When starting a standalone node using a configuration file we must supply the RPC credentials as follows: + +.. code-block:: text + + rpcUsers : [ + { user=user, password=password, permissions=[ StartFlow.net.corda.flows.CashFlow ] } + ] + +When using the gradle Cordformation plugin to configure and deploy a node you must supply the RPC credentials in a similar manner: + +.. code-block:: text + + rpcUsers = [ + ['user' : "user", + 'password' : "password", + 'permissions' : ["StartFlow.net.corda.flows.CashFlow"]] + ] + +You can then deploy and launch the nodes (Notary and Alice) as follows: + +.. code-block:: text + + # to create a set of configs and installs under ``docs/source/example-code/build/nodes`` run + ./gradlew docs/source/example-code:deployNodes + # to open up two new terminals with the two nodes run + ./docs/source/example-code/build/nodes/runnodes + # followed by the same commands as before: + ./docs/source/example-code/build/install/docs/source/example-code/bin/client-rpc-tutorial Print + ./docs/source/example-code/build/install/docs/source/example-code/bin/client-rpc-tutorial Visualise + +See more on security in :doc:`secure-coding-guidelines`, node configuration in :doc:`corda-configuration-file` and +Cordformation in :doc:`creating-a-cordapp` diff --git a/docs/build/html/_sources/tutorial-contract-clauses.txt b/docs/build/html/_sources/tutorial-contract-clauses.txt index 9b4b24438a..01d1f68a5e 100644 --- a/docs/build/html/_sources/tutorial-contract-clauses.txt +++ b/docs/build/html/_sources/tutorial-contract-clauses.txt @@ -9,43 +9,63 @@ Writing a contract using clauses This tutorial will take you through restructuring the commercial paper contract to use clauses. You should have already completed ":doc:`tutorial-contract`". +As before, the example is focused on basic implementation of commercial paper, which is essentially a simpler version of a corporate +bond. A company issues CP with a particular face value, say $100, but sells it for less, say $90. The paper can be redeemed +for cash at a given date in the future. Thus this example would have a 10% interest rate with a single repayment. +Whole Kotlin code can be found in ``CommercialPaper.kt``. + +What are clauses and why to use them? +------------------------------------- Clauses are essentially micro-contracts which contain independent verification logic, and can be logically composed -together to form a contract. Clauses are designed to enable re-use of common logic, for example issuing state objects +together to form a contract. Clauses are designed to enable re-use of common verification parts, for example issuing state objects is generally the same for all fungible contracts, so a common issuance clause can be inherited for each contract's issue clause. This cuts down on scope for error, and improves consistency of behaviour. By splitting verification logic into smaller chunks, they can also be readily tested in isolation. -Clauses can be composed of subclauses, for example the ``AllClause`` or ``AnyClause`` clauses take list of clauses -that they delegate to. Clauses can also change the scope of states and commands being verified, for example grouping -together fungible state objects and running a clause against each distinct group. +How clauses work? +----------------- -The commercial paper contract has a ``Group`` outermost clause, which contains the ``Issue``, ``Move`` and ``Redeem`` -clauses. The result is a contract that looks something like this: +We have different types of clauses, the most basic are the ones that define verification logic for particular command set. +We will see them later as elementary building blocks that commercial paper consist of - ``Move``, ``Issue`` and ``Redeem``. +As a developer you need to identify reusable parts of your contract and decide how they should be combined. It is where +composite clauses become useful. They gather many clause subcomponents and resolve how and which of them should be checked. - 1. Group input and output states together, and then apply the following clauses on each group: - a. If an ``Issue`` command is present, run appropriate tests and end processing this group. - b. If a ``Move`` command is present, run appropriate tests and end processing this group. - c. If a ``Redeem`` command is present, run appropriate tests and end processing this group. +For example, assume that we want to verify a transaction using all constraints defined in separate clauses. We need to +wrap classes that define them into ``AllComposition`` composite clause. It assures that all clauses from that combination +match with commands in a transaction - only then verification logic can be executed. +It may be a little confusing, but composite clause is also a clause and you can even wrap it in the special grouping clause. +In ``CommercialPaper`` it looks like that: + +.. image:: resources/commPaperClauses.png + +The most basic types of composite clauses are ``AllComposition``, ``AnyComposition`` and ``FirstComposition``. +In this tutorial we will use ``GroupClauseVerifier`` and ``AnyComposition``. It's important to understand how they work. +Charts showing execution and more detailed information can be found in :doc:`clauses`. + +.. _verify_ref: Commercial paper class ---------------------- -To use the clause verification logic, the contract needs to call the ``verifyClause`` function, passing in the -transaction, a clause to verify, and a collection of commands the clauses are expected to handle all of. This list of -commands is important because ``verifyClause`` checks that none of the commands are left unprocessed at the end, and -raises an error if they are. The top level clause would normally be a composite clause (such as ``AnyComposition``, -``AllComposition``, etc.) which contains further clauses. The following examples are trimmed to the modified class -definition and added elements, for brevity: +We start from defining ``CommercialPaper`` class. As in previous tutorial we need some elementary parts: ``Commands`` interface, +``generateMove``, ``generateIssue``, ``generateRedeem`` - so far so good that stays the same. The new part is verification and +``Clauses`` interface (you will see them later in code). Let's start from the basic structure: .. container:: codeset .. sourcecode:: kotlin - class CommercialPaper : Contract { - override val legalContractReference: SecureHash = SecureHash.sha256("https://en.wikipedia.org/wiki/Commercial_paper") + class CommercialPaper : Contract { + override val legalContractReference: SecureHash = SecureHash.sha256("https://en.wikipedia.org/wiki/Commercial_paper") - override fun verify(tx: TransactionForContract) = verifyClause(tx, Clauses.Group(), tx.commands.select()) + override fun verify(tx: TransactionForContract) = verifyClause(tx, Clauses.Group(), tx.commands.select()) + + interface Commands : CommandData { + data class Move(override val contractHash: SecureHash? = null) : FungibleAsset.Commands.Move, Commands + class Redeem : TypeOnlyCommandData(), Commands + data class Issue(override val nonce: Long = random63BitValue()) : IssueCommand, Commands + } .. sourcecode:: java @@ -60,88 +80,135 @@ definition and added elements, for brevity: ClauseVerifier.verifyClause(tx, new Clauses.Group(), extractCommands(tx)); } -Clauses -------- + public interface Commands extends CommandData { + class Move implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Move; } + } -We'll tackle the inner clauses that contain the bulk of the verification logic, first, and the clause which handles -grouping of input/output states later. The clauses must extend the ``Clause`` abstract class, which defines -the ``verify`` function, and the ``requiredCommands`` property used to determine the conditions under which a clause -is triggered. Composite clauses should extend the ``CompositeClause`` abstract class, which extends ``Clause`` to -add support for wrapping around multiple clauses. + class Redeem implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Redeem; } + } -The ``verify`` function defined in the ``Clause`` interface is similar to the conventional ``Contract`` verification -function, although it adds new parameters and returns the set of commands which it has processed. Normally this returned -set is identical to the ``requiredCommands`` used to trigger the clause, however in some cases the clause may process -further optional commands which it needs to report that it has handled. + class Issue implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Issue; } + } + } -The ``Move`` clause for the commercial paper contract is relatively simple, so we will start there: +As you can see we used ``verifyClause`` function with ``Clauses.Group()`` in place of previous verification. +It's an entry point to running clause logic. ``verifyClause`` takes the transaction, a clause (usually a composite one) +to verify, and a collection of commands the clause is expected to handle all of. This list of commands is important because +``verifyClause`` checks that none of the commands are left unprocessed at the end, and raises an error if they are. + +Simple Clauses +-------------- + +Let's move to constructing contract logic in terms of clauses language. Commercial paper contract has three commands and +three corresponding behaviours: ``Issue``, ``Move`` and ``Redeem``. Each of them has a specific set of requirements that must be satisfied - +perfect material for defining clauses. For brevity we will show only ``Move`` clause, rest is constructed in similar manner +and included in the ``CommercialPaper.kt`` code. .. container:: codeset .. sourcecode:: kotlin - class Move: Clause>() { - override val requiredCommands: Set> - get() = setOf(Commands.Move::class.java) + interface Clauses { + class Move: Clause>() { + override val requiredCommands: Set> + get() = setOf(Commands.Move::class.java) - override fun verify(tx: TransactionForContract, + override fun verify(tx: TransactionForContract, inputs: List, outputs: List, commands: List>, groupingKey: Issued?): Set { - val command = commands.requireSingleCommand() - val input = inputs.single() - requireThat { - "the transaction is signed by the owner of the CP" by (input.owner in command.signers) - "the state is propagated" by (outputs.size == 1) - // Don't need to check anything else, as if outputs.size == 1 then the output is equal to - // the input ignoring the owner field due to the grouping. + val command = commands.requireSingleCommand() + val input = inputs.single() + requireThat { + "the transaction is signed by the owner of the CP" by (input.owner in command.signers) + "the state is propagated" by (outputs.size == 1) + // Don't need to check anything else, as if outputs.size == 1 then the output is equal to + // the input ignoring the owner field due to the grouping. + } + return setOf(command.value) } - return setOf(command.value) } - } + ... .. sourcecode:: java - class Move extends Clause { - @NotNull - @Override - public Set> getRequiredCommands() { - return Collections.singleton(Commands.Move.class); - } - - @NotNull - @Override - public Set verify(@NotNull TransactionForContract tx, - @NotNull List inputs, - @NotNull List outputs, - @NotNull List> commands, - @NotNull State groupingKey) { - AuthenticatedObject cmd = requireSingleCommand(tx.getCommands(), Commands.Move.class); - // There should be only a single input due to aggregation above - State input = single(inputs); - - if (!cmd.getSigners().contains(input.getOwner())) - throw new IllegalStateException("Failed requirement: the transaction is signed by the owner of the CP"); - - // Check the output CP state is the same as the input state, ignoring the owner field. - if (outputs.size() != 1) { - throw new IllegalStateException("the state is propagated"); + public interface Clauses { + class Move extends Clause { + @NotNull + @Override + public Set> getRequiredCommands() { + return Collections.singleton(Commands.Move.class); + } + + @NotNull + @Override + public Set verify(@NotNull TransactionForContract tx, + @NotNull List inputs, + @NotNull List outputs, + @NotNull List> commands, + @NotNull State groupingKey) { + AuthenticatedObject cmd = requireSingleCommand(tx.getCommands(), Commands.Move.class); + // There should be only a single input due to aggregation above + State input = single(inputs); + + if (!cmd.getSigners().contains(input.getOwner())) + throw new IllegalStateException("Failed requirement: the transaction is signed by the owner of the CP"); + + // Check the output CP state is the same as the input state, ignoring the owner field. + if (outputs.size() != 1) { + throw new IllegalStateException("the state is propagated"); + } + // Don't need to check anything else, as if outputs.size == 1 then the output is equal to + // the input ignoring the owner field due to the grouping. + return Collections.singleton(cmd.getValue()); } - // Don't need to check anything else, as if outputs.size == 1 then the output is equal to - // the input ignoring the owner field due to the grouping. - return Collections.singleton(cmd.getValue()); } - } + ... + +We took part of code for ``Command.Move`` verification from previous tutorial and put it into the verify function +of ``Move`` class. Notice that this class must extend the ``Clause`` abstract class, which defines +the ``verify`` function, and the ``requiredCommands`` property used to determine the conditions under which a clause +is triggered. In the above example it means that the clause will run verification when the ``Commands.Move`` is present in a transaction. + +.. note:: Notice that commands refer to all input and output states in a transaction. For clause to be executed, transaction has + to include all commands from ``requiredCommands`` set. + +Few important changes: + +- ``verify`` function returns the set of commands which it has processed. Normally this returned set is identical to the + ``requiredCommands`` used to trigger the clause, however in some cases the clause may process further optional commands + which it needs to report that it has handled. + +- Verification takes new parameters. Usually inputs and outputs are some subset of the original transaction entries + passed to the clause by outer composite or grouping clause. ``groupingKey`` is a key used to group original states. + +As a simple example imagine input states: + +1. 1000 GBP issued by Bank of England +2. 500 GBP issued by Bank of England +3. 1000 GBP issued by Bank of Scotland + +We will group states by Issuer so in the first group we have inputs 1 and 2, in second group input number 3. Grouping keys are: +'GBP issued by Bank of England' and 'GBP issued by Bank of Scotland'. + +How the states can be grouped and passed in that form to the ``Move`` clause? That leads us to the concept of ``GroupClauseVerifier``. Group clause ------------ -We need to wrap the move clause (as well as the issue and redeem clauses - see the relevant contract code for their -full specifications) in an outer clause that understands how to group contract states and objects. For this we extend -the standard ``GroupClauseVerifier`` and specify how to group input/output states, as well as the top-level to run on -each group. As with the top level clause on a contract, this is normally a composite clause that delegates to subclauses. - +We may have a transaction with similar but unrelated state evolutions which need to be validated independently. It +makes sense to check ``Move`` command on groups of related inputs and outputs (see example above). Thus, we need to collect +relevant states together. +For this we extend the standard ``GroupClauseVerifier`` and specify how to group input/output states, as well as the top-level +clause to run on each group. In our example a top-level is a composite clause - ``AnyCompostion`` that delegates verification to +it's subclasses (wrapped move, issue, redeem). Any in this case means that it will take 0 or more clauses that match transaction commands. .. container:: codeset @@ -174,17 +241,20 @@ each group. As with the top level clause on a contract, this is normally a compo } } -For the ``CommercialPaper`` contract, this is the top level clause for the contract, and is passed directly into -``verifyClause`` (see the example code at the top of this tutorial). +For the ``CommercialPaper`` contract, ``Group`` is the main clause for the contract, and is passed directly into +``verifyClause`` (see the example code at the top of this tutorial). We used ``groupStates`` function here, it's worth reminding +how it works: :ref:`state_ref`. Summary ------- In summary the top level contract ``CommercialPaper`` specifies a single grouping clause of type ``CommercialPaper.Clauses.Group`` which in turn specifies ``GroupClause`` implementations for each type of command -(``Redeem``, ``Move`` and ``Issue``). This reflects the flow of verification: In order to verify a ``CommercialPaper`` +(``Redeem``, ``Move`` and ``Issue``). This reflects the flow of verification: in order to verify a ``CommercialPaper`` we first group states, check which commands are specified, and run command-specific verification logic accordingly. +.. image:: resources/commPaperExecution.png + Debugging --------- diff --git a/docs/build/html/_sources/tutorial-contract.txt b/docs/build/html/_sources/tutorial-contract.txt index 2db18bdf4f..87f5e17c97 100644 --- a/docs/build/html/_sources/tutorial-contract.txt +++ b/docs/build/html/_sources/tutorial-contract.txt @@ -321,6 +321,8 @@ The second line does what the code suggests: it searches for a command object th ``CommercialPaper.Commands`` supertype, and either returns it, or throws an exception if there's zero or more than one such command. +.. _state_ref: + Using state groups ------------------ diff --git a/docs/build/html/_sources/tutorial-cordapp.txt b/docs/build/html/_sources/tutorial-cordapp.txt new file mode 100644 index 0000000000..2097ac4267 --- /dev/null +++ b/docs/build/html/_sources/tutorial-cordapp.txt @@ -0,0 +1,852 @@ +.. highlight:: kotlin +.. raw:: html + + + + +The CorDapp Template +==================== + +This guide covers how to get started with the `cordapp-template`. Please note there are two Corda repositories: + +* ``corda`` which contains the core platform code and sample CorDapps. +* ``cordapp-template`` which contains a template CorDapp you can use to bootstrap your own CorDapps. It is the subject + of this tutorial and should help you understand the basics of building a CorDapp. + +We recommend you read the non-technical white paper and technical white paper before you get started with Corda: + +1. `The Introductory white paper `_ describes the + motivating vision and background of the project. It is the kind of document your boss should read. It describes why the + project exists and briefly compares it to alternative systems on the market. +2. `The Technical white paper `_ describes the entire + intended design from beginning to end. It is the kind of document that you should read, or at least, read parts of. Note + that because the technical white paper describes the intended end state, it does not always align with the implementation. + +Getting started +--------------- + +There are two ways to get started with the CorDapp template. You can either work from a milestone release of Corda or a +SNAPSHOT release of Corda. + +**Using a monthly Corda milestone release.** If you wish to develop your CorDapp using the most recent milestone release +then you can get started simply by cloning the ``cordapp-template`` repository. Gradle will grab all the required dependencies +for you from our `public Maven repository `_. + +**Using a Corda SNAPSHOT build.** Alternatively, if you wish to work from the master branch of the Corda repo which contains +the most up-to-date Corda feature set then you will need to clone the ``corda`` repository and publish the latest master +build (or previously tagged releases) to your local Maven repository. You will then need to ensure that Gradle +grabs the correct dependencies for you from Maven local by changing the ``corda_version`` in ``build.gradle``. This will be +covered below in `Using a SNAPSHOT release`_. + +Firstly, follow the :doc:`getting set up ` page to download the JDK, IntelliJ and git if you didn't +already have it. + +Working from milestone releases +------------------------------- + +If you wish to build a CorDapp against a milestone release then please use these instructions. + +The process for developing your CorDapp from a milestone release is the most simple way to get started and is the preferred +approach. + +We publish all our milestone releases to a public Maven repository on a monthly basis. As such, Gradle will automatically +grab the appropriately versioned (specified in the ``cordapp-template``'s ``build.gradle`` file) dependencies for you from Maven. +All you have to do is check out the release tag of the template version you wish to use. + +By default, the ``master`` branch of the ``cordapp-template`` points to a SNAPSHOT release of Corda, this is because it is +being constantly updated to reflect the changes in the master branch of the `corda` repository. + +.. note:: If you wish to use a SNAPSHOT release then follow the instructions below: `Using a SNAPSHOT release`_. + +To clone the ``cordapp-template`` repository, use the following command: + +``git clone https://github.com/corda/cordapp-template`` + +Now change directories to the freshly cloned repo: + +``cd cordapp-template`` + +To enumerate all the tagged releases. Use: + +``git tag`` + +To checkout a specific tag, use: + +``git checkout -b [local_branch_name] tags/[tag_name]`` + +where ``local_branch_name`` is a name of your choice and ``tag_name`` is the name of the tag you wish to checkout. + +Gradle will handle all the dependencies for you. Now you are now ready to get started `building the CorDapp Template`_. + +Using a SNAPSHOT release +------------------------ + +If you wish to build a CorDapp against the most current version of Corda, follow these instructions. + +The Corda repository comprises the following folders: + +* **buildSrc** contains necessary gradle plugins to build Corda. +* **client** contains the RPC client framework. +* **config** contains logging configurations and the default node configuration file. +* **core** containing the core Corda libraries such as crypto functions, types for Corda's building blocks: states, + contracts, transactions, attachments, etc. and some interfaces for nodes and protocols. +* **docs** contains the Corda docsite in restructured text format as well as the built docs in html. The docs can be + accessed via ``/docs/index.html`` from the root of the repo. +* **finance** defines a range of elementary contracts (and associated schemas) and protocols, such as abstract fungible + assets, cash, obligation and commercial paper. +* **gradle** contains the gradle wrapper which you'll use to execute gradle commands. +* **gradle-plugins** contains some additional plugins which we use to deploy Corda nodes. +* **lib** contains some dependencies. +* **node** contains anything specifically required for creating, running and managing nodes (eg: node driver, servlets, + node services, messaging, persistence). +* **samples** contains all our Corda demos and code samples. +* **test-utils** contains some utilities for unit testing contracts ( the contracts testing DSL) and protocols (the + mock network) implementation. +* **tools** contains the explorer which is a GUI front-end for Corda. + +Firstly navigate to the folder on your machine you wish to clone the Corda repository to. Then use the following command +to clone the Corda repository: + +``git clone https://github.com/corda/corda.git`` + +Now change directories: + +``cd corda`` + +Once you've cloned the ``corda`` repository and are in the repo directory you have the option to remain on the master +branch or checkout a specific branch. Use: + +``git branch --all`` + +to enumerate all the branches. To checkout a specific branch, use: + +``git checkout -b [local_branch_name] origin/[remote_branch_name]`` + +where ``local_branch_name`` is a name of your choice and ``remote_branch_name`` is the name of the remote branch you wish +to checkout. + +.. note:: When working with ``master`` you will have access to the most up-to-date feature set. However you will be + potentially sacrificing stability. We will endeavour to keep the ``master`` branch of the ``cordapp-template`` repo in sync + with the ``master`` branch of ``corda`` repo. A milestone tagged release would be more stable for CorDapp development. + +The next step is to publish the Corda JARs to your local Maven repository. By default the Maven local repository can be +found: + +* ``~/.m2/repository`` on Unix/Mac OS X +* ``%HOMEPATH%\.m2`` on windows. + +Publishing can be done with running the following Gradle task from the root project directory: + +Unix/Mac OSX: ``./gradlew install`` + +Windows: ``gradlew.bat install`` + +This will install all required modules, along with sources and JavaDocs to your local Maven repository. The ``version`` +and ``groupid`` of Corda installed to Maven local is specified in the ``build.gradle`` file in the root of the ``corda`` +repository. You shouldn't have to change these values unless you want to publish multiple versions of a SNAPSHOT, e.g. +if you are trying out new features, in this case you can change ``version`` for each SNAPSHOT you publish. + +.. note:: **A quick point on corda version numbers used by Gradle.** + + In the ``build.gradle`` file for your CorDapp, you can specify the ``corda_version`` to use. It is important that when + developing your CorDapp that you use the correct version number. For example, when wanting to work from a SNAPSHOT + release, the release numbers are suffixed with 'SNAPSHOT', e.g. if the latest milestone release is M6 then the + SNAPSHOT release will be 0.7-SNAPSHOT, and so on. As such, you will set your ``corda_version`` to ``'0.7-SNAPSHOT'`` + in the ``build.gradle`` file in your CorDapp. Gradle will automatically grab the SNAPSHOT dependencies from your local + Maven repository. Alternatively, if working from a milestone release, you will use the version number only, for example + ``0.6`` or ``0.7``. + + Lastly, as the Corda repository evolves on a daily basis up until the next milestone release, it is worth nothing that + the substance of two SNAPSHOT releases of the same number may be different. If you are using a SNAPSHOT and need help + debugging an error then please tell us the **commit** you are working from. This will help us ascertain the issue. + +As additional feature branches are merged into Corda you can ``git pull`` the new changes from the ``corda`` repository. +If you are feeling inquisitive, you may also wish to review some of the current feature branches. All new features are +developed on separate branches. To enumerate all the current branches use: + +``git branch --all`` + +and to check out an open feature branch, use: + +``git checkout -b [local_branch_name] origin/[branch_name]`` + +.. note:: Publishing Corda JARs from unmerged feature branches might cause some unexpected behaviour / broken CorDapps. + It would also replace any previously published SNAPSHOTS of the same version. + +.. warning:: If you do modify Corda after you have previously published it to Maven local then you must republish your + SNAPSHOT build such that Maven reflects the changes you have made. + +Once you have published the Corda JARs to your local Maven repository, you are ready to get started building your +CorDapp using the latest Corda features. + +Opening the CorDapp Template with IntelliJ +------------------------------------------ + +For those familiar with IntelliJ, you can skip this section. + +As noted in the getting started guide, we recommend using the IntelliJ IDE. Assuming you have already downloaded and +installed IntelliJ, lets now open the CorDapp Template with IntelliJ. + +**For those completely new to IntelliJ** + +Firstly, load up IntelliJ. A dialogue will appear: + +.. image:: resources/intellij-welcome.png + :width: 400 + +Click open, then navigate to the folder where you cloned the ``cordapp-template`` and click OK. + +Next, IntelliJ will show a bunch of pop-up windows. One of which requires our attention: + +.. image:: resources/unlinked-gradle-project.png + :width: 400 + +Click the 'import gradle project' link. A dialogue will pop-up. Press OK. Gradle will now begin obtianing all the +project dependencies and perform some indexing. It usually takes a minute or so. If you miss the 'import gradle project' +dialogue, simply close and re-open IntelliJ again to see it again. + +**Alternative approach** + +Alternatively, one can instruct IntelliJ to create a new project through cloning a repository. From the IntelliJ welcome +dialogue (shown above), opt to 'check out from version control', then select git and enter the git url for the CorDpp tempalte +(https://github.com/corda/cordapp-template). You'll then need to import the Gradle project when prompted, as explained above. + +**If you already have IntelliJ open** + +From the ``File`` menu, navigate to ``Open ...`` and then navigate to the directory where you cloned the ``cordapp-template``. +Alternatively, if you wish to clone from github directly then navigate to ``File > New > Project from existing sources ...`` +and enter the URL to the CorDapp Template (specified above). When instructed, be sure to import the Gradle project when prompted. + +**The Gradle plugin** + +IntelliJ can be used to run Gradle tasks through the Gradle plugin which can be found via ``View > Tool windows > Gradle``. +All the Gradle projects are listed in the window on the right hand side of the IDE. Click on a project, then 'tasks' to +see all available Gradle tasks. + +* For the CorDapp Template repo there will only be one Gradle project listed. +* For the Corda repo there will be many project listed, the root project ``corda`` and associated sub-projects: ``core``, + ``finance``, ``node``, etc. + +.. note:: It's worth noting that when you change branch in the CorDapp template, the ``corda_version`` will change to + reflect the version of the branch you are working from. + +To execute a task, double click it. The output will be shown in a console window. + +Building the CorDapp template +============================= + +**From the command line** + +Firstly, return to your terminal window used above and make sure you are in the ``cordapp-template`` directory. + +To build the CorDapp template use the following command: + +Unix/Mac OSX: ``./gradlew deployNodes`` + +Windows: ``gradlew.bat deployNodes`` + +Building straight away will build the example CorDapp defined the the CorDapp template source. For more information on the example +CorDapp see "The Example CorDapp" section below. Gradle will then grab all the dependencies for you and build the +example CorDapp. + +The ``deployNodes`` Gradle task allows you easily create a formation of Corda nodes. In the case of the example CorDapp +we are creating ``four`` nodes. + +After the building process has finished to see the newly built nodes, you can navigate to the ``/build/nodes`` folder +located in the ``cordapp-template`` root directory. You can ignore the other folders in ``/build`` for now. The ``nodes`` +folder has the following structure: + +.. sourcecode:: none + + . nodes + ├── controller + │   ├── corda.jar + │   ├── dependencies + │   ├── node.conf + │   └── plugins + ├── nodea + │   ├── corda.jar + │   ├── dependencies + │   ├── node.conf + │   └── plugins + ├── nodeb + │   ├── corda.jar + │   ├── dependencies + │   ├── node.conf + │   └── plugins + ├── nodec + │   ├── corda.jar + │   ├── dependencies + │   ├── node.conf + │   └── plugins + ├── runnodes + └── runnodes.bat + +There will be one folder generated for each node you build (more on later when we get into the detail of the +``deployNodes`` Gradle task) and a ``runnodes`` shell script (batch file on Widnows). + +Each node folder contains the Corda JAR, a folder for dependencies and a folder for plugins (or CorDapps). There is also +a node.conf file. See :doc:`Corda configuration files `. + +**Building from IntelliJ** + +Open the Gradle window by selecting ``View > Tool windows > Gradle`` from the main menu. You will see the Gradle window +open on the right hand side of the IDE. Expand `tasks` and then expand `other`. Double click on `deployNodes`. Gradle will +start the build process and output progress to a console window in the IDE. + +Running the Sample CorDapp +========================== + +Running the Sample CorDapp from the command line +------------------------------------------------ + +To run the sample CorDapp navigate to the ``build/nodes`` folder and execute the ``runnodes`` shell script with: + +Unix: ``./runnodes`` or ``sh runnodes`` + +Windows: ``runnodes.bat`` + +The ``runnodes`` scripts should create a terminal tab for each node. In each terminal tab, you'll see the Corda welcome +message and some pertinent config information, see below: + +.. sourcecode:: none + + ______ __ + / ____/ _________/ /___ _ + / / __ / ___/ __ / __ `/ Computer science and finance together. + / /___ /_/ / / / /_/ / /_/ / You should see our crazy Christmas parties! + \____/ /_/ \__,_/\__,_/ + + --- DEVELOPER SNAPSHOT ------------------------------------------------------------ + + Logs can be found in : /Users/rogerwillis/Documents/Corda/cordapp-template/build/nodes/nodea/logs + Database connection url is : jdbc:h2:tcp://10.18.0.196:50661/node + Node listening on address : localhost:10004 + Loaded plugins : com.example.plugin.ExamplePlugin + Embedded web server is listening on : http://10.18.0.196:10005/ + Node started up and registered in 39.0 sec + +You'll need to refer to the above later on for the JDBC connection string and port numbers. + +Depending on the speed of your machine, it usually takes around 30 seconds for the nodes to finish starting up. If you +want to double check all the nodes are running you can query the 'status' end-point located at +``http://host:post/api/status``. + +When booted up, the node will generate a bunch of files and directories in addition to the ones covered above: + +.. sourcecode:: none + + . + ├── artemis + ├── attachments + ├── cache + ├── certificates + ├── corda.jar + ├── dependencies + ├── identity-private-key + ├── identity-public + ├── logs + ├── node.conf + ├── persistence.mv.db + └── plugins + +Notably: + +* **artemis** contains the internal files for Artemis MQ, our message broker. +* **attachments** contains any persisted attachments. +* **certificates** contains the certificate store. +* **identity-private-key** is the node's private key. +* **identity-public** is the node's public key. +* **logs** contains the node's log files. +* **persistence.mv.db** is the h2 database where transactions and other data is persisted. + +Additional files and folders are added as the node is running. + +Running CorDapps on separate machines +------------------------------------- + +Corda nodes can be run on separate machines with little additional configuration to the above instructions. + +When you have successfully run the ``deployNodes`` gradle task, choose which nodes you would like to run on separate +machines. Copy the folders for those nodes from ``build/nodes`` to the other machines. Make sure that you set the +``networkMapAddress`` property in ``node.conf`` to the correct hostname:port where the network map service node is +hosted. + +The nodes can be run on each machine with ``java -jar corda.jar`` from the node's directory. + +Running the example CorDapp via IntelliJ +---------------------------------------- + +To run the example CorDapp via IntelliJ you can use the ``Run Example CorDapp`` run configuration. Select it from the drop +down menu at the top right-hand side of the IDE and press the green arrow to start the nodes. See image below: + +.. image:: resources/run-config-drop-down.png + :width: 400 + +The node driver defined in ``/src/main/kotlin/com/example/Main.kt`` allows you to specify how many nodes you would like +to run and the various configuration settings for each node. With the example CorDapp, the Node driver starts four nodes +and sets up an RPC user for all but the "Controller" node (which hosts the notary Service and network map service): + +.. sourcecode:: kotlin + + fun main(args: Array) { + // No permissions required as we are not invoking flows. + val user = User("user1", "test", permissions = setOf()) + driver(dsl = { + startNode("Controller", setOf(ServiceInfo(ValidatingNotaryService.type))) + startNode("NodeA", rpcUsers = listOf(user)) + startNode("NodeB", rpcUsers = listOf(user)) + startNode("NodeC", rpcUsers = listOf(user)) + waitForAllNodesToFinish() + }, isDebug = true) + } + +To stop the nodes, press the red "stop" button at the top right-hand side of the IDE. + +The node driver can also be used to as a basis for `debugging your CorDapp`_ + +Using the sample CorDapp +======================== + +Background +---------- + +The Example CorDapp implements a basic scenario where a buyer wishes to submit purchase orders to a seller. The scenario +defines four nodes: + +* **Controller** which hosts the network map service and validating notary service. +* **NodeA** who is the buyer. +* **NodeB** who is the seller. +* **NodeC** an unrelated third party. + +NodeA can generate purchase orders for lists and quantities of items and associated metadata such as delivery address +and delivery date. The flows used to facilitate the agreement process always results in an agreement with the seller as +long as the purchase order meets the contract constraints which are defined in ``PurchaseOrderContract.kt``. + +All agreed purchase orders between NodeA and NodeB become "shared facts" between NodeA and NodeB. But note that NodeC +won't see any of these transactions or have copies of any of the resulting ``PurchaseOrderState`` objects. This is +because data is only propagated on a need-to-know basis. + +Interfaces +---------- + +The CorDapp defines a few HTTP API end-points and also serves some static web content. The end-points allow you to +list purchase orders and add purchase orders. + +The nodes can be found using the following port numbers, defined in build.gradle and the respective node.conf file for +each node found in `build/nodes/NodeX`` etc: + +* Controller: ``localhost:10003`` +* NodeA: ``localhost:10005`` +* NodeB: ``localhost:10007`` +* NodeC: ``localhost:10009`` + +Note that the ``deployNodes`` Gradle task is used to generate the ``node.conf`` files for each node. + +As the nodes start-up they should tell you which host and port the embedded web server is running on. The API endpoints +served are as follows: + +* ``/api/example/me`` +* ``/api/example/peers`` +* ``/api/example/purchase-orders`` +* ``/api/example/{COUNTERPARTY}/create-purchase-order`` + +The static web content is served from ``/web/example``. + +A purchase order can be created via accessing the ``api/example/create-purchase-order`` end-point directly or through the +the web form hosted at ``/web/example``. + + .. warning:: **The content in ``web/example`` is only available for demonstration purposes and does not implement any + anti-XSS, anti-XSRF or any other security techniques. Do not copy such code directly into products meant for production use.** + +**Submitting a purchase order via HTTP API:** + +To create a purchase order from NodeA to NodeB, use: + +.. sourcecode:: bash + + echo '{"orderNumber": "1","deliveryDate": "2018-09-15","deliveryAddress": {"city": "London","country": "UK"},"items" : [{"name": "widget","amount": "3"},{"name": "thing","amount": "4"}]}' | curl -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-purchase-order + +Note the port number ``10005`` (NodeA) and NodeB referenced in the API end-point path. This command instructs NodeA to +create and send a purchase order to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will +have a signed, notarised copy of the purchase order. + +**Submitting a purchase order via web/example:** + +Navigate to the "create purchase order" button at the top left of the page, enter in the purchase order details e.g. + +.. sourcecode:: none + + Counter-party: Select from list + Order Number: 1 + Delivery Date: 2018-09-15 + City: London + Country Code: UK + Item name: Wow such item + Item amount: 5 + +and click submit (note you can add additional item types and amounts). Upon pressing submit, the modal dialogue should close. +To check what validation is performed over the purchase order data, have a look at the ``PurchaseOrderContract.Place`` class in +``PurchaseOrderContract.kt`` which defines the following contract constraints (among others not included here): + +.. sourcecode:: kotlin + + // Purchase order specific constraints. + "We only deliver to the UK." by (out.po.deliveryAddress.country == "UK") + "You must order at least one type of item." by (out.po.items.size > 0) + "You cannot order zero or negative amounts of an item." by (out.po.items.map(Item::amount).all { it > 0 }) + "You can only order up to 10 items at a time." by (out.po.items.map(Item::amount).sum() <= 10) + val time = tx.timestamp?.midpoint + "The delivery date must be in the future." by (out.po.deliveryDate.toInstant() > time) + +**Once a purchase order has been submitted:** + +Inspect the terminal windows for the nodes. Assume all of the above contract constraints are met, you should see some +activity in the terminal windows for NodeA and NodeB (note: the green ticks are only visible on unix/mac): + +*NodeA:* + +.. sourcecode:: none + + ✅ Constructing proposed purchase order. + ✅ Sending purchase order to seller for review. + ✅ Received partially signed transaction from seller. + ✅ Verifying signatures and contract constraints. + ✅ Signing transaction with our private key. + ✅ Obtaining notary signature. + ✅ Requesting signature by Notary service + ✅ Validating response from Notary service + ✅ Recording transaction in vault. + ✅ Sending fully signed transaction to seller. + ✅ Done + +*NodeB:* + +.. sourcecode:: none + + ✅ Receiving proposed purchase order from buyer. + ✅ Generating transaction based on proposed purchase order. + ✅ Signing proposed transaction with our private key. + ✅ Sending partially signed transaction to buyer and wait for a response. + ✅ Verifying signatures and contract constraints. + ✅ Recording transaction in vault. + ✅ Done + +*NodeC:* + +.. sourcecode:: none + + You shouldn't see any activity. + +Next you can view the newly created purchase order by accessing the vault of NodeA or NodeB: + +*Via the HTTP API:* + +For NodeA. navigate to http://localhost:10005/api/example/purchase-orders. For NodeB, +navigate to http://localhost:10007/api/example/purchase-orders. + +*Via web/example:* + +Navigate to http://localhost:10005/web/example the refresh button in the top left-hand side of the page. You should +see the newly created agreement on the page. + +**Accessing the h2 database via h2 web console:** + +You can connect to the h2 database to see the current state of the ledger, among other data such as the current state of +the network map cache. Firstly, navigate to the folder where you downloaded the h2 web console as part of the pre-requisites +section, above. Change directories to the bin folder: + +``cd h2/bin`` + +Where there are a bunch of shell scripts and batch files. Run the web console: + +Unix: + +``sh h2.sh`` + +Windows: + +``h2.bat`` + +The h2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each +node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, +look for the following string: + +``Database connection url is : jdbc:h2:tcp://10.18.0.150:56736/node`` + +you can use the string on the right to connect to the h2 database: just paste it in to the JDBC URL field and click Connect. +You will be presented with a web application that enumerates all the available tables and provides an interface for you to +query them using SQL. + +**Using the Example RPC client:** + +The ``/src/main/kotlin/com/example/client/ExampleClientRPC.kt`` file is a simple utility which uses the client RPC library +to connect to a node and log the 'placed' purchase orders. It will log any existing purchase orders and listen for any future +purchase orders. If you haven't placed any purchase orders when you connect to to one of the Nodes via RPC then the client will log +and future purchase orders which are agreed. + +To build the client use the following gradle task: + +``./gradlew runExampleClientRPC`` + +*To run the client, via IntelliJ:* + +Select the 'Run Example RPC Client' run configuration which, by default, connects to NodeA (Artemis port 10004). Click the +Green Arrow to run the client. You can edit the run configuration to connect on a different port. + +*Via command line:* + +Run the following gradle task: + +``./gradlew runExampleClientRPC localhost:10004`` + +To close the application use ``ctrl+C``. For more information on the client RPC interface and how to build an RPC client +application see: + +* :doc:`Client RPC documentation ` +* :doc:`Client RPC tutorial ` + +CorDapp-template Project Structure +---------------------------------- + +The CorDapp template has the following directory structure: + +.. sourcecode:: none + + . cordapp-template + ├── README.md + ├── LICENSE + ├── build.gradle + ├── config + │   ├── ... + ├── gradle + │   └── ... + ├── gradle.properties + ├── gradlew + ├── gradlew.bat + ├── lib + │   ├── ... + ├── settings.gradle + └── src + ├── main +    │   ├── java +    │   ├── kotlin +    │   │   └── com +    │   │   └── example +    │   │   ├── Main.kt +    │   │   ├── api +    │   │   │   └── ExampleApi.kt +    │   │   ├── client +    │   │   │   └── ExampleClientRPC.kt +    │   │   ├── contract +    │   │   │   ├── PurchaseOrderContract.kt +    │   │   │   └── PurchaseOrderState.kt +    │   │   ├── model +    │   │   │   └── PurchaseOrder.kt +    │   │   ├── plugin +    │   │   │   └── ExamplePlugin.kt +    │   │   └── flow +    │   │   └── ExampleFlow.kt +    │   │   └── service +    │   │   └── ExampleService.kt + │   ├── python + │   └── resources + │   ├── META-INF + │   │   └── services + │   │   └── net.corda.core.node.CordaPluginRegistry + │   ├── certificates + │   │   ├── readme.txt + │   │   ├── sslkeystore.jks + │   │   └── truststore.jks + │   └── exampleWeb + │   ├── index.html + │   └── js + │   └── example.js + └── test + ├── java + ├── kotlin + │   └── com + │   └── example + │   └── ExampleTest.kt +    └── resources + +In the file structure above, the most important files and directories to note are: + +* The **root directory** contains some gradle files, a README and a LICENSE. +* **config** contains log4j configs. +* **gradle** contains the gradle wrapper, which allows the use of Gradle without installing it yourself and worrying + about which version is required. +* **lib** contains the Quasar.jar which is required for runtime instrumentation of classes by Quasar. +* **src/main/kotlin** contains the source code for the example CorDapp. +* **src/main/python** contains a python script which accesses nodes via RPC. +* **src/main/resources** contains the certificate store, some static web content to be served by the nodes and the + PluginServiceRegistry file. +* **src/test/kotlin** contains unit tests for protocols, contracts, etc. + +Some elements are covered in more detail below. + +The build.gradle File +--------------------- + +It is usually necessary to make a couple of changes to the ``build.gradle`` file. Here will cover the most pertinent bits. + +**The buildscript** + +The buildscript is always located at the top of the file. It determines which plugins, task classes, and other classes +are available for use in the rest of the build script. It also specifies version numbers for dependencies, among other +things. + +If you are working from a Corda SNAPSHOT release which you have publish to Maven local then ensure that +``corda_version`` is the same as the version of the Corda core modules you published to Maven local. If not then change the +``kotlin_version`` property. Also, if you are working from a previous milestone release, then be sure to ``git checkout`` +the correct version of the CorDapp template from the ``cordapp-template`` repo. + +.. sourcecode:: groovy + + buildscript { + ext.kotlin_version = '1.0.4' + ext.corda_version = '0.5-SNAPSHOT' // Ensure this version is the same as the corda core modules you are using. + ext.quasar_version = '0.7.6' + ext.jersey_version = '2.23.1' + + repositories { + ... + } + + dependencies { + ... + } + } + +**Project dependencies** + +If you have any additional external dependencies for your CorDapp then add them below the comment at the end of this +code snippet.package. Use the standard format: + +``compile "{groupId}:{artifactId}:{versionNumber}"`` + +.. sourcecode:: groovy + + dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + testCompile group: 'junit', name: 'junit', version: '4.11' + + // Corda integration dependencies + compile "net.corda:client:$corda_version" + compile "net.corda:core:$corda_version" + compile "net.corda:contracts:$corda_version" + compile "net.corda:node:$corda_version" + compile "net.corda:corda:$corda_version" + compile "net.corda:test-utils:$corda_version" + + ... + + // Cordapp dependencies + // Specify your cordapp's dependencies below, including dependent cordapps + } + +For further information about managing dependencies with `look at the Gradle docs `_. + +**CordFormation** + +This is the local node deployment system for CorDapps, the nodes generated are intended to be used for experimenting, +debugging, and testing node configurations but not intended for production or testnet deployment. + +In the CorDapp build.gradle file you'll find a ``deployNodes`` task, this is where you configure the nodes you would +like to deploy for testing. See further details below: + +.. sourcecode:: groovy + + task deployNodes(type: com.r3corda.plugins.Cordform, dependsOn: ['build']) { + directory "./build/nodes" // The output directory. + networkMap "Controller" // The artemis address of the node to be used as the network map. + node { + name "Controller" // Artemis name of node to be deployed. + dirName "controller" // Directory to which the node will + nearestCity "London" // For use with the network visualiser. + advertisedServices = ["corda.notary.validating"] // A list of services you wish the node to offer. + artemisPort 10002 + webPort 10003 // Usually 1 higher than the Artemis port. + cordapps = [] // Add package names of CordaApps. + } + node { // Create an additional node. + name "NodeA" + dirName "nodea" + nearestCity "London" + advertisedServices = [] + artemisPort 10004 + webPort 10005 + cordapps = [] + } + ... + } + +You can add any number of nodes, with any number of services / CorDapps by editing the templates in ``deployNodes``. The +only requirement is that you must specify a node to run as the network map service and one as the notary service. + +.. note:: CorDapps in the current cordapp-template project are automatically registered with all nodes defined in + ``deployNodes``, although we expect this to change in the near future. + +.. warning:: Make sure that there are no port clashes! + +When you are finished editing your *CordFormation* the changes will be reflected the next time you run ``./gradlew deployNodes``. + +Service Provider Configuration File +----------------------------------- + +If you are building a CorDapp from scratch or adding a new CorDapp to the CorDapp-template project then you must provide +a reference to your sub-class of ``CordaPluginRegistry`` in the provider-configuration file in located in the the +``resources/META-INF/services`` directory. + +Re-Deploying Your Nodes Locally +------------------------------- + +If you need to create any additional nodes you can do it via the ``build.gradle`` file as discussed above in +``the build.gradle file`` and in more detail in the "cordFormation" section. + +You may also wish to edit the ``/build/nodes//node.conf`` files for your nodes. For more information on +doing this, see the :doc:`Corda configuration file ` page. + +Once you have made some changes to your CorDapp you can redeploy it with the following command: + +Unix/Mac OSX: ``./gradlew deployNodes`` + +Windows: ``gradlew.bat deployNodes`` + +Debugging your CorDapp +---------------------- + +Debugging is done via IntelliJ and can be done using the following steps. + +1. Set your breakpoints. +2. Edit the node driver code in ``Main.kt`` to reflect how many nodes you wish to start along with any other + configuration options. For example, the below starts 4 nodes, with one being the network map service / notary and + sets up RPC credentials for 3 of the nodes. + +.. sourcecode:: kotlin + + fun main(args: Array) { + // No permissions required as we are not invoking flows. + val user = User("user1", "test", permissions = setOf()) + driver(dsl = { + startNode("Controller", setOf(ServiceInfo(ValidatingNotaryService.type))) + startNode("NodeA", rpcUsers = listOf(user)) + startNode("NodeB", rpcUsers = listOf(user)) + startNode("NodeC", rpcUsers = listOf(user)) + waitForAllNodesToFinish() + }, isDebug = true) + } + +3. Select and run the “Run Example CorDapp” run configuration in IntelliJ. +4. IntelliJ will build and run the CorDapp. Observe the console output for the remote debug ports. The “Controller” + node will generally be on port 5005, with NodeA on port 5006 an so-on. + +.. sourcecode:: none + + Listening for transport dt_socket at address: 5008 + Listening for transport dt_socket at address: 5007 + Listening for transport dt_socket at address: 5006 + +5. Edit the “Debug CorDapp” run configuration with the port of the node you wish to connect to. +6. Run the “Debug CorDapp” run configuration. + diff --git a/docs/build/html/_sources/tutorial-integration-testing.txt b/docs/build/html/_sources/tutorial-integration-testing.txt new file mode 100644 index 0000000000..4cca59f009 --- /dev/null +++ b/docs/build/html/_sources/tutorial-integration-testing.txt @@ -0,0 +1,117 @@ +Integration Test Tutorial +========================= + +Integration testing involves bringing up nodes locally and testing +invariants about them by starting flows and inspecting their state. + +In this tutorial we will bring up three nodes Alice, Bob and a +Notary. Alice will issue Cash to Bob, then Bob will send this Cash +back to Alice. We will see how to test some simple deterministic and +nondeterministic invariants in the meantime. + +(Note that this example where Alice is self-issuing Cash is purely for +demonstration purposes, in reality Cash would be issued by a bank and +subsequently passed around.) + +In order to spawn nodes we will use the Driver DSL. This DSL allows +one to start up node processes from code. It manages a network map +service and safe shutting down of nodes in the background. + +.. literalinclude:: example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt + :language: kotlin + :start-after: START 1 + :end-before: END 1 + +The above code creates a ``User`` permissioned to start the +``CashFlow`` protocol. It then starts up Alice and Bob with this user, +allowing us to later connect to the nodes. + +Then the notary is started up. Note that we need to add +``ValidatingNotaryService`` as an advertised service in order for this +node to serve notary functionality. This is also where flows added in +plugins should be specified. Note also that we won't connect to the +notary directly, so there's no need to pass in the test ``User``. + +The ``startNode`` function returns a future that completes once the +node is fully started. This allows starting of the nodes to be +parallel. We wait on these futures as we need the information +returned; their respective ``NodeInfo`` s. + +.. literalinclude:: example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt + :language: kotlin + :start-after: START 2 + :end-before: END 2 + +Next we connect to Alice and Bob respectively from the test process +using the test user we created. Then we establish RPC links that allow +us to start flows and query state. + +Note that Driver nodes start up with test server certificiates, so +it's enough to pass in ``configureTestSSL()`` for the clients. + +.. literalinclude:: example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt + :language: kotlin + :start-after: START 3 + :end-before: END 3 + +We will be interested in changes to Alice's and Bob's vault, so we +query a stream of vault updates from each. + +Now that we're all set up we can finally get some Cash action going! + +.. literalinclude:: example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt + :language: kotlin + :start-after: START 4 + :end-before: END 4 + +The first loop creates 10 threads, each starting a ``CashFlow`` flow +on the Alice node. We specify that we want to issue ``i`` dollars to +Bob, using the Notary as the notary responsible for notarising the +created states. Note that no notarisation will occur yet as we're not +spending any states, only entering new ones to the ledger. + +We started the flows from different threads for the sake of the +tutorial, to demonstrate how to test non-determinism, which is what +the ``expectEvents`` block does. + +The Expect DSL allows ordering constraints to be checked on a stream +of events. The above code specifies that we are expecting 10 updates +to be emitted on the ``bobVaultUpdates`` stream in unspecified order +(this is what the ``parallel`` construct does). We specify a +(otherwise optional) ``match`` predicate to identify specific updates +we are interested in, which we then print. + +If we run the code written so far we should see 4 nodes starting up +(Alice,Bob,Notary + implicit Network Map service), then 10 logs of Bob +receiving 1,2,...10 dollars from Alice in some unspecified order. + +Next we want Bob to send this Cash back to Alice. + +.. literalinclude:: example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt + :language: kotlin + :start-after: START 5 + :end-before: END 5 + +This time we'll do it sequentially. We make Bob pay 1,2,..10 dollars +to Alice in order. We make sure that a the ``CashFlow`` has finished +by waiting on ``startFlow`` 's ``returnValue``. + +Then we use the Expect DSL again, this time using ``sequence`` to test +for the updates arriving in the order we expect them to. + +Note that ``parallel`` and ``sequence`` may be nested into each other +arbitrarily to test more complex scenarios. + +That's it! We saw how to start up several corda nodes locally, how to +connect to them, and how to test some simple invariants about +``CashFlow``. + +To run the complete test you can open +``example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt`` +from IntelliJ and run the test, or alternatively use gradle: + + +.. sourcecode:: bash + + # Run example-code integration tests + ./gradlew docs/source/example-code:integrationTest -i diff --git a/docs/build/html/_static/css/custom.css b/docs/build/html/_static/css/custom.css index d680f9cc32..7dfbdc74cf 100644 --- a/docs/build/html/_static/css/custom.css +++ b/docs/build/html/_static/css/custom.css @@ -1,12 +1,15 @@ @import "theme.css"; + /* Highlights */ .highlight .k, .highlight .kd { - color: #263673; + color: #263673; } - /* Text */ + +/* Text */ + body, h1, h2, @@ -16,106 +19,108 @@ h4, h5, h6, legend, -input{ - color:#010101; - letter-spacing:0.3px +input { + color: #010101; + letter-spacing: 0.3px } p { - font-size: 100%; /* Get rid of RTD rule that assumes nobody changes their browser font size */ -} - - /* Links */ -a{ - color: #263673 -} -a:hover{ - color: #005CAB -} -a:visited{ - color:#ADAFB3 -} - - /* Side navigation bar */ - -.wy-side-nav-search{ - background-color:#010101; - -} - -.wy-side-nav-search a.icon-home{ - color:transparent; - background-image:url('../images/fg002_corda_w3.png'); - background-repeat:no-repeat; - background-size: Auto 20px; - background-position:center top; - background-origin:content box; - height:20px; - width:100% - -} - -.wy-side-nav-search input[type=text]{ - border-radius:5px -} - -.wy-menu-vertical a:hover{ - background-color: #ADAFB3; - color:#FFF -} - -.wy-nav-content{ - background-color:#fff - max-width: 1000px; -} - -.wy-nav-side{ - background:#010101 -} - /* Navigation headers */ -.rst-content tt.literal, .rst-content tt.literal, .rst-content code.literal -{ - color:#EC1D24; - text-transform:none; + font-size: 100%; /* Get rid of RTD rule that assumes nobody changes their browser font size */ } -.wy-menu-vertical header, .wy-menu-vertical p.caption -{ - font-size:1.1em; - color:#EC1D24; - text-transform:none; - background-color: #3C3C3E; - padding: 0 0.5em; - margin-top: 0.5em; +/* Links */ + +a { + color: #263673 } - /* Code snippets */ +a:hover { + color: #005CAB +} + +a:visited { + color: #ADAFB3 +} + + +/* Side navigation bar */ + +.wy-side-nav-search { + background-color: #252627; +} + +.wy-side-nav-search a.icon-home { + color: transparent; + background-image: url('../images/fg002_corda_w3.png'); + background-repeat: no-repeat; + background-size: Auto 20px; + background-position: center top; + background-origin: content box; + height: 20px; + width: 100% +} + +.wy-side-nav-search input[type=text] { + border-radius: 5px +} + +.wy-menu-vertical a:hover { + background-color: #ADAFB3; + color: #FFF +} + +.wy-nav-content { + background-color: #fff max-width: 1000px; +} + +.wy-nav-side { + background-color: #252627; +} + + +/* Navigation headers */ + +.rst-content tt.literal, +.rst-content tt.literal, +.rst-content code.literal { + color: #EC1D24; + text-transform: none; +} + +.wy-menu-vertical header, +.wy-menu-vertical p.caption { + color: #EC1D24; +} + + +/* Code snippets */ .codesnippet-widgets { - min-width: 100%; - display: block; - background: #005CAB; - color: white; - padding: 10px 0; - margin: 0 0 -1px 0; + min-width: 100%; + display: block; + background: #005CAB; + color: white; + padding: 10px 0; + margin: 0 0 -1px 0; } .codesnippet-widgets > span { - padding: 10px; - cursor: pointer; + padding: 10px; + cursor: pointer; } .codesnippet-widgets > .current { - background: #263673; + background: #263673; } .codeset > .highlight-java { - display: none; + display: none; } /* Notification boxes */ + .wy-alert.wy-alert-warning .wy-alert-title, .rst-content .wy-alert-warning.note .wy-alert-title, .rst-content .attention .wy-alert-title, @@ -132,16 +137,16 @@ a:visited{ .rst-content .wy-alert.wy-alert-warning .admonition-title, .rst-content .wy-alert-warning.note .admonition-title, .rst-content .attention .admonition-title, -.rst-content .caution .admonition-title, .rst-content -.wy-alert-warning.danger .admonition-title, +.rst-content .caution .admonition-title, +.rst-content .wy-alert-warning.danger .admonition-title, .rst-content .wy-alert-warning.error .admonition-title, .rst-content .wy-alert-warning.hint .admonition-title, .rst-content .wy-alert-warning.important .admonition-title, .rst-content .wy-alert-warning.tip .admonition-title, .rst-content .warning .admonition-title, .rst-content .wy-alert-warning.seealso .admonition-title, -.rst-content .admonition-todo .admonition-title{ - background-color: #263673 +.rst-content .admonition-todo .admonition-title { + background-color: #263673 } .wy-alert, @@ -155,7 +160,22 @@ a:visited{ .rst-content .tip, .rst-content .warning, .rst-content .seealso, -.rst-content .admonition-todo{ - background-color:#d9e5ef +.rst-content .admonition-todo { + background-color: #d9e5ef } + +/* Mobile view */ + +.wy-nav-top { + background-color: #252627; +} + +.wy-nav-top a { + color: transparent; + background-image: url('../images/fg002_corda_w3.png'); + background-repeat: no-repeat; + background-size: Auto 19px; + background-position: center top; + background-origin: content box; +} diff --git a/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html b/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html index 62b2362eaf..6157f42f0b 100644 --- a/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html +++ b/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-acceptor/index.html @@ -143,8 +143,8 @@ will do as long as the other side registers with it.

sendAndReceive -fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> diff --git a/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html b/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html index 194c97332b..bbcd10bf4d 100644 --- a/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html +++ b/docs/build/html/api/net.corda.flows/-abstract-state-replacement-flow/-instigator/index.html @@ -133,8 +133,8 @@ will do as long as the other side registers with it.

receive -fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> @@ -146,8 +146,8 @@ will do as long as the other side registers with it.

sendAndReceive -fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
-fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> diff --git a/docs/build/html/api/net.corda.flows/-broadcast-transaction-flow/index.html b/docs/build/html/api/net.corda.flows/-broadcast-transaction-flow/index.html index 26122ec185..96b82e72e6 100644 --- a/docs/build/html/api/net.corda.flows/-broadcast-transaction-flow/index.html +++ b/docs/build/html/api/net.corda.flows/-broadcast-transaction-flow/index.html @@ -127,8 +127,8 @@ will do as long as the other side registers with it.

receive -fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> diff --git a/docs/build/html/api/net.corda.flows/-fetch-data-flow/index.html b/docs/build/html/api/net.corda.flows/-fetch-data-flow/index.html index d2db1e192d..7052513a21 100644 --- a/docs/build/html/api/net.corda.flows/-fetch-data-flow/index.html +++ b/docs/build/html/api/net.corda.flows/-fetch-data-flow/index.html @@ -179,8 +179,8 @@ will do as long as the other side registers with it.

receive -fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
-fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> @@ -192,8 +192,8 @@ will do as long as the other side registers with it.

sendAndReceive -fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T>
-fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> sendAndReceive(otherParty: Party, payload: Any, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> sendAndReceive(otherParty: Party, payload: Any): UntrustworthyData<T> diff --git a/docs/build/html/api/net.corda.flows/-finality-flow/index.html b/docs/build/html/api/net.corda.flows/-finality-flow/index.html index 24d1f1b0ad..c96c55930c 100644 --- a/docs/build/html/api/net.corda.flows/-finality-flow/index.html +++ b/docs/build/html/api/net.corda.flows/-finality-flow/index.html @@ -131,8 +131,8 @@ will do as long as the other side registers with it.

receive -fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
-fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> diff --git a/docs/build/html/api/net.corda.flows/-notary-flow/-service/index.html b/docs/build/html/api/net.corda.flows/-notary-flow/-service/index.html index 5a7011870a..5623016901 100644 --- a/docs/build/html/api/net.corda.flows/-notary-flow/-service/index.html +++ b/docs/build/html/api/net.corda.flows/-notary-flow/-service/index.html @@ -130,8 +130,8 @@ will do as long as the other side registers with it.

receive -fun <T : Any> receive(otherParty: Party): UntrustworthyData<T>
-fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T> +fun <T : Any> receive(otherParty: Party, receiveType: Class<T>): UntrustworthyData<T>
+fun <T : Any> receive(otherParty: Party): UntrustworthyData<T> diff --git a/docs/build/html/building-the-docs.html b/docs/build/html/building-the-docs.html index c3e9096fa1..be28bde88a 100644 --- a/docs/build/html/building-the-docs.html +++ b/docs/build/html/building-the-docs.html @@ -89,14 +89,26 @@

Key concepts

+

CorDapps

+

The Corda node

-

CorDapps

-

Tutorials

Other

Component library

Appendix

  • Load testing
  • +
  • Introduction - What is a corda network?
  • +
  • Setting up your own network
  • Secure coding guidelines
  • Release process
  • Steps to cut a release
  • @@ -260,7 +277,7 @@ following to see a list of all available formats:

    - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

    diff --git a/docs/build/html/clauses.html b/docs/build/html/clauses.html new file mode 100644 index 0000000000..656a6e6e57 --- /dev/null +++ b/docs/build/html/clauses.html @@ -0,0 +1,521 @@ + + + + + + + + + + + Clauses key concepts — R3 Corda latest documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    + + + + + + +
    +
    + + + + + + +
    + +
    +
    +
    +
    + +
    +

    Clauses key concepts

    +
    +

    Basic clause structure

    +

    A clause is a small building block for assembling contract verification logic, reusable and ready to test in separation. +To see clauses in action go to: Writing a contract using clauses. +Let’s take a look at a simplified structure of the Clause class:

    +
    +
    abstract class Clause<in S : ContractState, C : CommandData, in K : Any> {
    +
    +    /** Determine whether this clause runs or not */
    +    open val requiredCommands: Set<Class<out CommandData>> = emptySet()
    +
    +    @Throws(IllegalStateException::class)
    +    abstract fun verify(tx: TransactionForContract,
    +                inputs: List<S>,
    +                outputs: List<S>,
    +                commands: List<AuthenticatedObject<C>>,
    +                groupingKey: K?): Set<C>
    +    ...
    +}
    +
    +
    +
    +

    Basic clause structure contains two important components: requiredCommands and verify function. +A clause is triggered when all requiredCommands are present in transaction’s command set (opposite inclusion doesn’t have to hold). +Then the verify function is run, which checks if transaction meets conditions specified by this clause. Verification +is no different than normal contract verification but using clauses it’s split into smaller generic code blocks with single verify method.

    +

    When writing a contract you need to override the contract’s verify function which should call verifyClause. See: Commercial paper class.

    +
    +

    Note

    +

    A clause verify function returns the set of processed commands, at the end of verifyClause execution +there is a check if all of transaction’s commands were matched. If not then an exception is raised. This is done to +enforce that spurious commands cannot be included in a transaction, ensuring that the transaction is as clear as +possible. As an example imagine a transaction with two commands: Move and Issue included, with verification written +using FirstComposition on clauses that require single command set. Thus only one of transaction’s commands will match +leaving the second unprocessed. It should raise an error - we want to ensure that commands set is minimal to simplify +analysis of intent of a transaction.

    +
    +

    An example verify from Obligation contract:

    +
    +
    override fun verify(tx: TransactionForContract) = verifyClause<Commands>(tx, FirstComposition<ContractState, Commands, Unit>(
    +    Clauses.Net<Commands, P>(),
    +    Clauses.Group<P>()
    +), tx.commands.select<Obligation.Commands>())
    +
    +
    +
    +

    It takes transaction to be verified, and passes it along with a top-level clause and commands to the verifyClause +function. As you can see above we have used FirstComposition which is a special type of clause, which extends the +CompositeClause abstract class (in that particular case, it ensures that either Net or Group will run - for explanation see FirstComposition). +It’s a type of clause that adds support for encapsulating multiple clauses and defines common behaviour for that composition. +There is also a GroupClauseVerifier special clause, which specifies how to group transaction input/output states +together and passes them to adequate clause for further processing.

    +
    +
    +

    Composition clauses

    +

    One of the most important concepts of clauses - composition clauses which extend CompositeClause abstract class, +providing a range of ways of assembling clauses together. They define a logic of verification execution specifying which clauses +will be run.

    +
    +

    AllComposition

    +

    Description

    +

    Composes a number of clauses, such that all of the clauses must run for verification to pass.

    +_images/allCompositionChart.png +

    Short description:

    +
      +
    • AllComposition holds clauses Cl1,..,Cl5.
    • +
    • Check if all clauses that compose AllComposition have associated commands in a command set - if not, verification fails.
    • +
    • After successful check runs verification logic specific for every clause Cl1,..,Cl5 from that composition.
    • +
    +

    Usage

    +

    See code in GroupClauseVerifier.

    +
    +
    +

    AnyComposition

    +

    Description

    +

    Composes a number of clauses, such that 0 or more of the clauses can be run.

    +_images/anyCompositionChart.png +

    Short description:

    +
      +
    • Checks if zero or more clauses that compose AnyComposition have associated commands in a command set.
    • +
    • After success runs verification logic specific for every matched (in this case Cl2, Cl4, Cl5) clause from composition.
    • +
    +

    Usage

    +

    Example from CommercialPaper.kt:

    +
    +
    class Group : GroupClauseVerifier<State, Commands, Issued<Terms>>(
    +    AnyComposition(
    +        Redeem(),
    +        Move(),
    +        Issue())) {
    +    override fun groupStates(tx: TransactionForContract): List<TransactionForContract.InOutGroup<State, Issued<Terms>>>
    +            = tx.groupStates<State, Issued<Terms>> { it.token }
    +}
    +
    +
    +
    +
    +
    +

    FirstComposition

    +

    Description

    +

    Composes a number of clauses, such that the first match is run, and it errors if none is run.

    +_images/firstCompositionChart.png +

    Short description:

    +
      +
    • Takes first clause that matches and if none found throws an exception.
    • +
    • If successful runs verification on the clause that matched (in this case Cl4).
    • +
    +

    Usage

    +

    See code in GroupClauseVerifier.

    +
    +
    +
    +

    Other types of clauses

    +

    There are certain types of clauses that are specialized in particular types of contracts (like AbstractIssue) or generally +should be used as helpers in building parts of logic (the most important one is GroupClauseVerifier).

    +
    +

    GroupClauseVerifier

    +

    Description

    +

    Groups input and output states according to groupStates function. Runs the top-level clause verification on each +group in turn.

    +_images/groupClauseVerifyChart.png +

    Short description:

    +

    GroupClauseVerifier wraps clause Cl1. After grouping relevant states together with groupStates into three groups +Gr1, Gr2, Gr3 runs Cl1.verify(Gr1), Cl1.verify(Gr2), Cl1.verify(Gr3).

    +

    For more detailed example head to Using state groups.

    +

    Usage

    +

    You need to extend GroupClauseVerifier clause and define groupStates function which takes transaction and returns +grouped input and output states with a grouping key used for each group. Example from Obligation.kt contract:

    +
    +
    class Group<P> : GroupClauseVerifier<State<P>, Commands, Issued<Terms<P>>>(
    +    AllComposition(
    +        NoZeroSizedOutputs<State<P>, Commands, Terms<P>>(),
    +        FirstComposition(
    +            SetLifecycle<P>(),
    +            AllComposition(
    +                VerifyLifecycle<State<P>, Commands, Issued<Terms<P>>, P>(),
    +                FirstComposition(
    +                    Settle<P>(),
    +                    Issue(),
    +                    ConserveAmount()
    +                )
    +            )
    +        )
    +    )
    +) {
    +    override fun groupStates(tx: TransactionForContract): List<TransactionForContract.InOutGroup<Obligation.State<P>, Issued<Terms<P>>>>
    +            = tx.groupStates<Obligation.State<P>, Issued<Terms<P>>> { it.amount.token }
    +}
    +
    +
    +
    +

    Usually it’s convenient to use groupStates function defined on TransactionForContract class. Which given a type and a +selector function, that returns a grouping key, associates inputs and outputs together so that they can be processed as one. +The grouping key is any arbitrary object that can act as a map key (so must implement equals and hashCode).

    +
    +
    +

    AbstractConserveAmount

    +

    Description

    +

    Standardised clause for checking input/output balances of fungible assets. Requires that a +Move command is provided, and errors if absent. Conserve amount clause can only be used on grouped states.

    +

    Usage

    +
    +
    /**
    + * Generic move/exit clause for fungible assets
    + */
    +class ConserveAmount<P> : AbstractConserveAmount<State<P>, Commands, Terms<P>>()
    +
    +
    +
    +

    See code in GroupClauseVerifier.

    +
    +
    +

    AbstractIssue

    +

    Description

    +

    Standard issue clause for contracts that issue fungible assets.

    +

    Usage

    +

    Example from CommercialPaper.kt:

    +
    +
    class Issue : AbstractIssue<State, Commands, Terms>(
    +        { map { Amount(it.faceValue.quantity, it.token) }.sumOrThrow() },
    +        { token -> map { Amount(it.faceValue.quantity, it.token) }.sumOrZero(token) }) {
    +    override val requiredCommands: Set<Class<out CommandData>> = setOf(Commands.Issue::class.java)
    +
    +    override fun verify(tx: TransactionForContract,
    +                        inputs: List<State>,
    +                        outputs: List<State>,
    +                        commands: List<AuthenticatedObject<Commands>>,
    +                        groupingKey: Issued<Terms>?): Set<Commands> {
    +        val consumedCommands = super.verify(tx, inputs, outputs, commands, groupingKey)
    +        ...
    +
    +
    +
    +

    First function in constructor converts a list of states into an amount of the token. Must error if there are no states in the list. +Second function converts a list of states into an amount of the token, and returns zero if there are no states in the list. +Takes in an instance of the token definition for constructing the zero amount if needed.

    +
    +
    +

    NoZeroSizedOutputs

    +

    Description

    +

    Clause for fungible asset contracts, which enforces that no output state should have a balance of zero.

    +

    Usage

    +

    See code in GroupClauseVerifier.

    +
    +
    +

    FilterOn

    +

    Description

    +

    Filter the states that are passed through to the wrapped clause, to restrict them to a specific type.

    +

    FilterOn narrows the scope of the states being verified. +Let’s take a transaction with multiple cash states of different currencies, we want to run a clause that focuses +on only GBP cash states rather than all cash states.

    +

    Usage

    +
    +
    FilterOn(clause, { states -> states.filter { it.amount.token == GBP} })
    +
    +
    +
    +

    Takes filterStates function that limits states passed to clause verification.

    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/clientrpc.html b/docs/build/html/clientrpc.html index 0714fff846..1b615bf516 100644 --- a/docs/build/html/clientrpc.html +++ b/docs/build/html/clientrpc.html @@ -32,7 +32,7 @@ - + @@ -89,7 +89,9 @@

    Key concepts

    +

    CorDapps

    +

    The Corda node

    -

    CorDapps

    -

    Tutorials

    @@ -152,6 +162,8 @@

    Appendix

    • Load testing
    • +
    • Introduction - What is a corda network?
    • +
    • Setting up your own network
    • Secure coding guidelines
    • Release process
    • Steps to cut a release
    • @@ -284,7 +296,7 @@ This is likely to change in a future release.

      In the present implementation of the node we use Kryo to generate the on the wire representation of contracts states or any other classes that form part of the RPC arguments or response. To avoid the RPC interface being wide open to all classes on the classpath, Cordapps will currently have to register any classes or custom serialisers they require with Kryo -if they are not one of those registered by default in RPCKryo via the plugin architecture. See Creating a CorDapp. +if they are not one of those registered by default in RPCKryo via the plugin architecture. See CorDapps Background. This will require some familiarity with Kryo. An example is shown in Client RPC API tutorial.

      Warning

      @@ -304,7 +316,7 @@ customisation point will either go away completely or change.

      Next - Previous + Previous
      @@ -313,7 +325,7 @@ customisation point will either go away completely or change.

      - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

      diff --git a/docs/build/html/codestyle.html b/docs/build/html/codestyle.html index d370852165..9106797182 100644 --- a/docs/build/html/codestyle.html +++ b/docs/build/html/codestyle.html @@ -89,14 +89,26 @@

      Key concepts

      +

      CorDapps

      +

      The Corda node

      -

      CorDapps

      -

      Tutorials

      Other

      Component library

      Appendix

      +

      CorDapps

      +

      The Corda node

      -

      CorDapps

      -

      Tutorials

      @@ -152,6 +162,8 @@

      Appendix

      • Load testing
      • +
      • Introduction - What is a corda network?
      • +
      • Setting up your own network
      • Secure coding guidelines
      • Release process
      • Steps to cut a release
      • @@ -348,7 +360,7 @@ clocks at the US Naval Observatory. This time feed is extremely accurate and ava @@ -776,7 +788,7 @@ reporting logic, or anything else that might be required as part of a communicat

        - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

        diff --git a/docs/build/html/flow-testing.html b/docs/build/html/flow-testing.html index 1c0dd7ef13..f0d46aa6e2 100644 --- a/docs/build/html/flow-testing.html +++ b/docs/build/html/flow-testing.html @@ -89,7 +89,9 @@

        Key concepts

        +

        CorDapps

        +

        The Corda node

        -

        CorDapps

        -

        Tutorials

        @@ -143,6 +153,8 @@

        Appendix

        • Load testing
        • +
        • Introduction - What is a corda network?
        • +
        • Setting up your own network
        • Secure coding guidelines
        • Release process
        • Steps to cut a release
        • @@ -313,7 +325,7 @@ here.

          - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

          diff --git a/docs/build/html/further-notes-on-kotlin.html b/docs/build/html/further-notes-on-kotlin.html index 61c6056d1c..10c53a0656 100644 --- a/docs/build/html/further-notes-on-kotlin.html +++ b/docs/build/html/further-notes-on-kotlin.html @@ -87,14 +87,26 @@

          Key concepts

          +

          CorDapps

          +

          The Corda node

          -

          CorDapps

          -

          Tutorials

          Other

          Component library

          Appendix

          +

          CorDapps

          +

          The Corda node

          -

          CorDapps

          -

          Tutorials

          @@ -148,6 +158,8 @@

          Appendix

          • Load testing
          • +
          • Introduction - What is a corda network?
          • +
          • Setting up your own network
          • Secure coding guidelines
          • Release process
          • Steps to cut a release
          • @@ -315,7 +327,7 @@ all of them. This issue will be handled after implementing partial signatures.

            - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

            diff --git a/docs/build/html/messaging.html b/docs/build/html/messaging.html index bf7b4f353e..cdc2877d21 100644 --- a/docs/build/html/messaging.html +++ b/docs/build/html/messaging.html @@ -89,7 +89,9 @@

            Key concepts

            +

            CorDapps

            +

            The Corda node

            -

            CorDapps

            -

            Tutorials

            @@ -147,6 +157,8 @@

            Appendix

            • Load testing
            • +
            • Introduction - What is a corda network?
            • +
            • Setting up your own network
            • Secure coding guidelines
            • Release process
            • Steps to cut a release
            • @@ -266,7 +278,7 @@ The code simply picks the first registered node that supports the required servi

              - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

              diff --git a/docs/build/html/network-simulator.html b/docs/build/html/network-simulator.html index b221ec4d16..d018165ce2 100644 --- a/docs/build/html/network-simulator.html +++ b/docs/build/html/network-simulator.html @@ -89,7 +89,9 @@

              Key concepts

              +

              CorDapps

              +

              The Corda node

              -

              CorDapps

              -

              Tutorials

              @@ -147,6 +157,8 @@

              Appendix

              • Load testing
              • +
              • Introduction - What is a corda network?
              • +
              • Setting up your own network
              • Secure coding guidelines
              • Release process
              • Steps to cut a release
              • @@ -279,7 +291,7 @@ of the window.

                - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                diff --git a/docs/build/html/node-administration.html b/docs/build/html/node-administration.html index 728dffab7b..a59353c922 100644 --- a/docs/build/html/node-administration.html +++ b/docs/build/html/node-administration.html @@ -89,7 +89,9 @@

                Key concepts

                +

                CorDapps

                +

                The Corda node

                -

                CorDapps

                -

                Tutorials

                @@ -150,6 +160,8 @@

                Appendix

                • Load testing
                • +
                • Introduction - What is a corda network?
                • +
                • Setting up your own network
                • Secure coding guidelines
                • Release process
                • Steps to cut a release
                • @@ -323,7 +335,7 @@ EURIBOR 2016-03-15 2M = 0.111

                  - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                  diff --git a/docs/build/html/node-explorer.html b/docs/build/html/node-explorer.html index e3cdfc743a..7f946e4b2e 100644 --- a/docs/build/html/node-explorer.html +++ b/docs/build/html/node-explorer.html @@ -89,7 +89,9 @@

                  Key concepts

                  +

                  CorDapps

                  +

                  The Corda node

                  -

                  CorDapps

                  -

                  Tutorials

                  @@ -148,6 +158,8 @@

                  Appendix

                  • Load testing
                  • +
                  • Introduction - What is a corda network?
                  • +
                  • Setting up your own network
                  • Secure coding guidelines
                  • Release process
                  • Steps to cut a release
                  • @@ -315,7 +327,7 @@ The map provides a intuitive way of visualizing the Corda network and the partic

                    - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                    diff --git a/docs/build/html/node-services.html b/docs/build/html/node-services.html index 247f733fe3..5d1c593a5b 100644 --- a/docs/build/html/node-services.html +++ b/docs/build/html/node-services.html @@ -89,7 +89,9 @@

                    Key concepts

                    +

                    CorDapps

                    +

                    The Corda node

                    -

                    CorDapps

                    -

                    Tutorials

                    @@ -181,6 +191,8 @@

                    Appendix

                    • Load testing
                    • +
                    • Introduction - What is a corda network?
                    • +
                    • Setting up your own network
                    • Secure coding guidelines
                    • Release process
                    • Steps to cut a release
                    • @@ -575,7 +587,7 @@ tables. To enable these features the contract state must implement the

                      - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                      diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index f004c7fe32863159f1572a277e7d608d9876ba58..a4e0d9a8197475ba2c3b05c54ae64ce471294130 100644 GIT binary patch delta 1322 zcmV+_1=afQ36%?we1DBsU2oke5Pj!Yu%^+SDJ5qqwKf&l?e zdjI_n4A{o@jrPr+Gw1LzFf&|zz7@|w++N@C5c{{i?YQ`hU(MD(ALFRgKYtD!|Cw|S zOs{@rcP$@4CxS9P{K~#>e&_Ft3wxN9?v)utd<22gVLiqUq<^746f;LNNAom-i83l{ zSf}L_pb;siGRuNL!I^i~bl_q@l0pIRx|UXqm6(3{*ZV8h*&aeXYiQi7vAE+eC#PXj zJs@dx)+7n79=!DDi<>ihit2f_<&s)Z5d(z*PHG#TV;@relA_gsMbznOP$uk^3PAMl zcnq(SnUk5Hyd2@h`X`ccF1&ITka?Y4Smy!9#?ziAnty4{xI46NC(-!_**y*3PNru$ z>^Vkjg~dwDYy2;fgy(eLLiY&$q|?n>(Y6?oZ<3WSR(8_%MFhNtAV%3eD%0M=1DJ$< zdX<)y9RjID4De1$8#i$oQQT_gId2GfZim5pUEka|@Y>0ev8?rb_yz+S1O~2XG z*Zf-HZz%l3@wfbA@+mHC&^Cmc$*N|t6@K|^U5~H9?7M7r(Om8FPtch9fJd8iKV7<} z0{n)2JQz~rG4psAg&aJT(^C)q zJGQPg7nhGtVs`qpu1(s?{@^~W%rx$2H1J|!Blsr`BI3N8OSra|)U^}~WJ@pX=@gKU zp%^wp&c>26A*KwMoTTX&lwn3WxGnB1DnR@@i-`luy)h()@o;z?{j=(zrMH9QaVf*| zJAdi$cxJ||64W?p8LeMWe+M?p;NPm58O(@6_9LE=5UCn8I(v9kL|TBf;Fr_ZgWsuC zV8y>FCSsPY2s>s4N0raJW@6tj2IfJ73_zt}&1wMReI*lBika!W#YG-+3)HfUk=5;&f+ExiY_Ot0RxWvE zlq;}{?vt<&;s(*)`n}^)046VkPpI|~db*SBVY#(a;{r&Ci%64%) z7F-8;PGfR@iR@*>!ISf%(p^z!fGyTMLDEZre}~awDT74@O9Kq$)pO8H zyymw&y9$8v`2705+t%bS`k)VmD|m7J$zj%d?X^?~4lHlkVa{xk<|uFTAox}o@f`~c&Kftj?&?HTy4*&oF delta 1153 zcmV-{1b+LK3+@S!e1CmcO^@6t5WVv&SnW!CBGO)SiLx`vD#|81$|TB}wyWJ}Fj#zK zrvLpG6xhag&#if{-UAmz^!^5zmo{reyMeFO4!g0tcXo#u@6pfQL$wI4>lkR%+JLgDIBk#6abTb}|kG@?(0qYWK%!rH8NfVsx zg6L$B+75BE{w+JZWSr0VVx*iuv_PE1pG*LUY2i)=ob6do9@Vaw0%Ol=h%Rq{IIC?k zk7LO7Yszgy7Jt)8$3YptcPa$QzvKSjC72V;&rXi;Y~2&tOp|}*45IQrg|N;6&W*<` zEi}uTd3S6{XTiCwPOQhoio8W@g9RnwJ&wyp!mo5Ve0PC9>g2VOZ8;KuNGM-WcGmV; zcs%|fM%i7IfhKDQG#UMLDz82TcybB2znev@@x6{G27krT;Z1bHSR4!7;3pe!ZH>=y z2w8q4l4p`z!#`(|4Pf$ywR>36dM@!NMuxI-=>qgOH@(D(8uw4DV>1sy#O4&V49z{O zA@DeD#NsTY4tUm0zsc!qajo$q8vmI1TmCV{ln^#(>wPUd)w5tlUq)@{@hzBRmsA(e zRhEB(#(!D{JlI@w^PT$*6?hb+#)IYX@(DROfH5D>waIZz-M!3mV)@K^^u~!!cC#SD z%9<`R{OJ+wbnKyj$DZJtYDouExP9$0NX$W>R|=-B><@0h3Z{AgMSvHCjo_X%h=A*E zuH70hwaQ83v7};+L$!3mp3ffjnEYWg<(>Y$aklj8v?)AKKK!ULHVvx`?_)G}DNUjB}3K7&72m>H~rLiQt` z5g(}hH$HoM^=h;PdBMx1tpm4nsl-bEp+KZ8sqi~xB}(Vv6r9sJbePk!mvkje?h;Bc zdVgX;xr!b}+h*5AW9EhiSzoh!pFTyMVya4CvzjNKS$u|dyRHJY<(R-_1vXdI+t>cT z#Ip(9sJzGT*c`!zX!oz7l7q*kgXv(SuP~_}7Jxa>AU)7yuvRq$>An#}Z^NvdoW+kk z)E25$7m(HTOF=u-7;L!WKqx-)RZ*_MZht3_yxMJ^&2rzGVCJzBbeDFY2qVQK@egtU zjP0TWtX{b#&b_GKKKHj`s#{_?v3z0Cnw}(lj!Ks!$}MiqZ$-^L;&LxUF3?SULpI;#At&b0BN?w^Ig)Plq8nUp|Q;|EYaGly*97n8rusmiVVl7Hflnenoqo~mGEz|7X_EtY*Rm5l8Qir%U TX_?xBAeLT$jIsX#PsVa*?W9Qb diff --git a/docs/build/html/oracles.html b/docs/build/html/oracles.html index 64af003278..5a5efe625c 100644 --- a/docs/build/html/oracles.html +++ b/docs/build/html/oracles.html @@ -32,7 +32,7 @@ - + @@ -89,14 +89,26 @@

                      Key concepts

                      +

                      CorDapps

                      +

                      The Corda node

                      -

                      CorDapps

                      -

                      Tutorials

                      Other

                      Component library

                      Appendix

                      • Load testing
                      • +
                      • Introduction - What is a corda network?
                      • +
                      • Setting up your own network
                      • Secure coding guidelines
                      • Release process
                      • Steps to cut a release
                      • @@ -262,10 +285,6 @@ attachment.

                        Asserting continuously varying data

                        -
                        -

                        Note

                        -

                        A future version of the platform will include a complete tutorial on implementing this type of oracle.

                        -

                        Let’s look at the interest rates oracle that can be found in the NodeInterestRates file. This is an example of an oracle that uses a command because the current interest rate fix is a constantly changing fact.

                        The obvious way to implement such a service is like this:

                        @@ -281,13 +300,13 @@ So the way we actually implement it is like this:

                      • The creator of the transaction that depends on the interest rate asks for the current rate. They can abort at this point if they want to.
                      • They insert a command with that rate and the time it was obtained into the transaction.
                      • -
                      • They then send it to the oracle for signing, along with everyone else in parallel. The oracle checks that the command -has correct data for the asserted time, and signs if so.
                      • +
                      • They then send it to the oracle for signing, along with everyone else, potentially in parallel. The oracle checks that +the command has the correct data for the asserted time, and signs if so.
                      • This same technique can be adapted to other types of oracle.

                        The oracle consists of a core class that implements the query/sign operations (for easy unit testing), and then a separate class that binds it to the network layer.

                        -

                        Here is an extract from the NodeService.Oracle class and supporting types:

                        +

                        Here is an extract from the NodeInterestRates.Oracle class and supporting types:

                        /** A [FixOf] identifies the question side of a fix: what day, tenor and type of fix ("LIBOR", "EURIBOR" etc) */
                         data class FixOf(val name: String, val forDay: LocalDate, val ofTenor: Duration)
                         
                        @@ -295,14 +314,30 @@ class that binds it to the network layer.

                        data class Fix(val of: FixOf, val value: BigDecimal) : CommandData class Oracle { - fun query(queries: List<FixOf>): List<Fix> + fun query(queries: List<FixOf>, deadline: Instant): List<Fix> - fun sign(wtx: WireTransaction): DigitalSignature.LegallyIdentifiable + fun sign(ftx: FilteredTransaction, merkleRoot: SecureHash): DigitalSignature.LegallyIdentifiable }
                        -

                        Because the fix contains a timestamp (the forDay field), there can be an arbitrary delay between a fix being -requested via query and the signature being requested via sign.

                        +

                        Because the fix contains a timestamp (the forDay field), that identifies the version of the data being requested, +there can be an arbitrary delay between a fix being requested via query and the signature being requested via sign +as the Oracle can know which, potentially historical, value it is being asked to sign for. This is an important +technique for continously varying data.

                        +

                        The query method takes a deadline, which is a point in time the requester is willing to wait until for the necessary +data to be available. Not every oracle will need this. This can be useful where data is expected to be available on a +particular schedule and we use scheduling functionality to automatically launch the processing associated with it. +We can schedule for the expected announcement (or publish) time and give a suitable deadline at which the lack of the +information being available and the delay to processing becomes significant and may need to be escalated.

                        +
                        +
                        +

                        Hiding transaction data from the oracle

                        +

                        Because the transaction is sent to the oracle for signing, ordinarily the oracle would be able to see the entire contents +of that transaction including the inputs, output contract states and all the commands, not just the one (in this case) +relevant command. This is an obvious privacy leak for the other participants. We currently solve this with +FilteredTransaction-s and the use of Merkle Trees. These reveal only the necessary parts of the transaction to the +oracle but still allow it to sign it by providing the Merkle hashes for the remaining parts. See Transaction tear-offs for +more details.

                        Pay-per-play oracles

                        @@ -316,6 +351,236 @@ would be conclusive evidence of intent to disobey the rules of the service ( where parties are legally identifiable, usage of such a contract would by itself be sufficient to trigger some sort of punishment.

                        + +
                        +

                        Implementing an oracle with continuously varying data

                        +
                        +

                        Implement the core classes

                        +

                        The key is to implement your oracle in a similar way to the NodeInterestRates.Oracle outline we gave above with +both query and sign methods. Typically you would want one class that encapsulates the parameters to the query +method (FixOf above), and a CommandData implementation (Fix above) that encapsulates both an instance of +that parameter class and an instance of whatever the result of the query is (BigDecimal above).

                        +

                        The NodeInterestRates.Oracle allows querying for multiple Fix-es but that is not necessary and is +provided for the convenience of callers who might need multiple and can do it all in one query request. Likewise +the deadline functionality is optional and can be avoided initially.

                        +

                        Let’s see what parameters we pass to the constructor of this oracle.

                        +
                        class Oracle(val identity: Party, private val signingKey: KeyPair, val clock: Clock) = TODO()
                        +
                        +
                        +

                        Here we see the oracle needs to have its own identity, so it can check which transaction commands it is expected to +sign for, and also needs a pair of signing keys with which it signs transactions. The clock is used for the deadline +functionality which we will not discuss further here.

                        +

                        Assuming you have a data source and can query it, it should be very easy to implement your query method and the +parameter and CommandData classes.

                        +

                        Let’s see how the sign method for NodeInterestRates.Oracle is written:

                        +
                                fun sign(ftx: FilteredTransaction, merkleRoot: SecureHash): DigitalSignature.LegallyIdentifiable {
                        +            if (!ftx.verify(merkleRoot)){
                        +                throw MerkleTreeException("Rate Fix Oracle: Couldn't verify partial Merkle tree.")
                        +            }
                        +
                        +            // Reject if we have something different than only commands.
                        +            val leaves = ftx.filteredLeaves
                        +            require(leaves.inputs.isEmpty() && leaves.outputs.isEmpty() && leaves.attachments.isEmpty())
                        +
                        +            val fixes: List<Fix> = ftx.filteredLeaves.commands.
                        +                    filter { identity.owningKey in it.signers && it.value is Fix }.
                        +                    map { it.value as Fix }
                        +
                        +            // Reject signing attempt if we received more commands than we should.
                        +            if (fixes.size != ftx.filteredLeaves.commands.size)
                        +                throw IllegalArgumentException()
                        +
                        +            // Reject this signing attempt if there are no commands of the right kind.
                        +            if (fixes.isEmpty())
                        +                throw IllegalArgumentException()
                        +
                        +            // For each fix, verify that the data is correct.
                        +            val knownFixes = knownFixes // Snapshot
                        +            for (fix in fixes) {
                        +                val known = knownFixes[fix.of]
                        +                if (known == null || known != fix)
                        +                    throw UnknownFix(fix.of)
                        +            }
                        +
                        +            // It all checks out, so we can return a signature.
                        +            //
                        +            // Note that we will happily sign an invalid transaction, as we are only being presented with a filtered
                        +            // version so we can't resolve or check it ourselves. However, that doesn't matter much, as if we sign
                        +            // an invalid transaction the signature is worthless.
                        +            return signingKey.signWithECDSA(merkleRoot.bytes, identity)
                        +        }
                        +
                        +
                        +

                        Here we can see that there are several steps:

                        +
                          +
                        1. Ensure that the transaction we have been sent is indeed valid and passes verification, even though we cannot see all +of it.
                        2. +
                        3. Check that we only received commands as expected, and each of those commands expects us to sign for them and is of +the expected type (Fix here).
                        4. +
                        5. Iterate over each of the commands we identified in the last step and check that the data they represent matches +exactly our data source. The final step, assuming we have got this far, is to generate a signature for the +transaction and return it.
                        6. +
                        +
                        +
                        +

                        Binding to the network via CorDapp plugin

                        +
                        +

                        Note

                        +

                        Before reading any further, we advise that you understand the concept of flows and how to write them and use +them. See Writing flows. Likewise some understanding of Cordapps, plugins and services will be helpful. +See CorDapps Background.

                        +
                        +

                        The first step is to create a service to host the oracle on the network. Let’s see how that’s implemented:

                        +
                            class Service(val services: PluginServiceHub) : AcceptsFileUpload, SingletonSerializeAsToken() {
                        +        val oracle: Oracle by lazy {
                        +            val myNodeInfo = services.myInfo
                        +            val myIdentity = myNodeInfo.serviceIdentities(type).first()
                        +            val mySigningKey = services.keyManagementService.toKeyPair(myIdentity.owningKey.keys)
                        +            Oracle(myIdentity, mySigningKey, services.clock)
                        +        }
                        +
                        +        init {
                        +            // Note: access to the singleton oracle property is via the registered SingletonSerializeAsToken Service.
                        +            // Otherwise the Kryo serialisation of the call stack in the Quasar Fiber extends to include
                        +            // the framework Oracle and the flow will crash.
                        +            services.registerFlowInitiator(RatesFixFlow.FixSignFlow::class) { FixSignHandler(it, this) }
                        +            services.registerFlowInitiator(RatesFixFlow.FixQueryFlow::class) { FixQueryHandler(it, this) }
                        +        }
                        +
                        +        private class FixSignHandler(val otherParty: Party, val service: Service) : FlowLogic<Unit>() {
                        +            @Suspendable
                        +            override fun call() {
                        +                val request = receive<RatesFixFlow.SignRequest>(otherParty).unwrap { it }
                        +                send(otherParty, service.oracle.sign(request.ftx, request.rootHash))
                        +            }
                        +        }
                        +
                        +        private class FixQueryHandler(val otherParty: Party, val service: Service) : FlowLogic<Unit>() {
                        +            companion object {
                        +                object RECEIVED : ProgressTracker.Step("Received fix request")
                        +                object SENDING : ProgressTracker.Step("Sending fix response")
                        +            }
                        +
                        +            override val progressTracker = ProgressTracker(RECEIVED, SENDING)
                        +
                        +            init {
                        +                progressTracker.currentStep = RECEIVED
                        +            }
                        +
                        +            @Suspendable
                        +            override fun call(): Unit {
                        +                val request = receive<RatesFixFlow.QueryRequest>(otherParty).unwrap { it }
                        +                val answers = service.oracle.query(request.queries, request.deadline)
                        +                progressTracker.currentStep = SENDING
                        +                send(otherParty, answers)
                        +            }
                        +        }
                        +
                        +
                        +

                        This may look complicated, but really it’s made up of some relatively simple elements (in the order they appear in the code):

                        +
                          +
                        1. Accept a PluginServiceHub in the constructor. This is your interface to the Corda node.
                        2. +
                        3. Ensure you extend the abstract class SingletonSerializeAsToken (see The Corda plugin framework).
                        4. +
                        5. Create an instance of your core oracle class that has the query and sign methods as discussed above.
                        6. +
                        7. Register your client sub-flows (in this case both in RatesFixFlow. See the next section) for querying and +signing as initiating your service flows that actually do the querying and signing using your core oracle class instance.
                        8. +
                        9. Implement your service flows that call your core oracle class instance.
                        10. +
                        +

                        The final step is to register your service with the node via the plugin mechanism. Do this by +implementing a plugin. Don’t forget the resources file to register it with the ServiceLoader framework +(see The Corda plugin framework).

                        +
                        class Plugin : CordaPluginRegistry() {
                        +     override val servicePlugins: List<Class<*>> = listOf(Service::class.java)
                        +}
                        +
                        +
                        +
                        +
                        +

                        Providing client sub-flows for querying and signing

                        +

                        We mentioned the client sub-flow briefly above. They are the mechanism that clients, in the form of other flows, will +interact with your oracle. Typically there will be one for querying and one for signing. Let’s take a look at +those for NodeInterestRates.Oracle.

                        +
                            class FixQueryFlow(val fixOf: FixOf, val oracle: Party) : FlowLogic<Fix>() {
                        +        @Suspendable
                        +        override fun call(): Fix {
                        +            val deadline = suggestInterestRateAnnouncementTimeWindow(fixOf.name, oracle.name, fixOf.forDay).end
                        +            // TODO: add deadline to receive
                        +            val resp = sendAndReceive<ArrayList<Fix>>(oracle, QueryRequest(listOf(fixOf), deadline))
                        +
                        +            return resp.unwrap {
                        +                val fix = it.first()
                        +                // Check the returned fix is for what we asked for.
                        +                check(fix.of == fixOf)
                        +                fix
                        +            }
                        +        }
                        +    }
                        +
                        +    class FixSignFlow(val tx: TransactionBuilder, val oracle: Party, val filterFuns: FilterFuns) : FlowLogic<DigitalSignature.LegallyIdentifiable>() {
                        +        @Suspendable
                        +        override fun call(): DigitalSignature.LegallyIdentifiable {
                        +            val wtx = tx.toWireTransaction()
                        +            val partialMerkleTx = FilteredTransaction.buildMerkleTransaction(wtx, filterFuns)
                        +            val rootHash = wtx.id
                        +
                        +            val resp = sendAndReceive<DigitalSignature.LegallyIdentifiable>(oracle, SignRequest(rootHash, partialMerkleTx))
                        +            return resp.unwrap { sig ->
                        +                check(sig.signer == oracle)
                        +                tx.checkSignature(sig)
                        +                sig
                        +            }
                        +        }
                        +    }
                        +
                        +
                        +

                        You’ll note that the FixSignFlow requires a FilterFuns instance with the appropriate filter to include only +the Fix commands. You can find a further explanation of this in Transaction tear-offs.

                        +
                        +
                        +
                        +

                        Using an oracle

                        +

                        The oracle is invoked through sub-flows to query for values, add them to the transaction as commands and then get +the transaction signed by the the oracle. Following on from the above examples, this is all encapsulated in a sub-flow +called RatesFixFlow. Here’s the call method of that flow.

                        +
                            @Suspendable
                        +    override fun call() {
                        +        progressTracker.currentStep = progressTracker.steps[1]
                        +        val fix = subFlow(FixQueryFlow(fixOf, oracle))
                        +        progressTracker.currentStep = WORKING
                        +        checkFixIsNearExpected(fix)
                        +        tx.addCommand(fix, oracle.owningKey)
                        +        beforeSigning(fix)
                        +        progressTracker.currentStep = SIGNING
                        +        val signature = subFlow(FixSignFlow(tx, oracle, filterFuns))
                        +        tx.addSignatureUnchecked(signature)
                        +    }
                        +
                        +
                        +

                        As you can see, this:

                        +
                          +
                        1. Queries the oracle for the fact using the client sub-flow for querying from above.
                        2. +
                        3. Does some quick validation.
                        4. +
                        5. Adds the command to the transaction containing the fact to be signed for by the oracle.
                        6. +
                        7. Calls an extension point that allows clients to generate output states based on the fact from the oracle.
                        8. +
                        9. Requests the signature from the oracle using the client sub-flow for signing from above.
                        10. +
                        11. Adds the signature returned from the oracle.
                        12. +
                        +

                        Here’s an example of it in action from FixingFlow.Fixer.

                        +
                                    fun filterCommands(c: Command) = oracleParty.owningKey in c.signers && c.value is Fix
                        +            val filterFuns = FilterFuns(filterCommands = ::filterCommands)
                        +            val addFixing = object : RatesFixFlow(ptx, filterFuns, oracleParty, fixOf, BigDecimal.ZERO, BigDecimal.ONE) {
                        +                @Suspendable
                        +                override fun beforeSigning(fix: Fix) {
                        +                    newDeal.generateFix(ptx, StateAndRef(txState, handshake.payload.ref), fix)
                        +
                        +                    // And add a request for timestamping: it may be that none of the contracts need this! But it can't hurt
                        +                    // to have one.
                        +                    ptx.setTime(serviceHub.clock.instant(), 30.seconds)
                        +                }
                        +            }
                        +            subFlow(addFixing)
                        +
                        +
                        @@ -328,7 +593,7 @@ punishment.

                        Next - Previous + Previous @@ -337,7 +602,7 @@ punishment.

                        - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                        diff --git a/docs/build/html/permissioning.html b/docs/build/html/permissioning.html index 84b0c0ab9d..5f12441116 100644 --- a/docs/build/html/permissioning.html +++ b/docs/build/html/permissioning.html @@ -31,7 +31,7 @@ - + @@ -89,7 +89,9 @@

                        Key concepts

                        +

                        CorDapps

                        +

                        The Corda node

                          @@ -115,23 +127,21 @@
                      -

                      CorDapps

                      -

                      Tutorials

                      @@ -148,6 +158,8 @@

                      Appendix

                      • Load testing
                      • +
                      • Introduction - What is a corda network?
                      • +
                      • Setting up your own network
                      • Secure coding guidelines
                      • Release process
                      • Steps to cut a release
                      • @@ -281,7 +293,7 @@ You can also specify the location of - Next + Next Previous @@ -293,7 +305,7 @@ You can also specify the location of

                        - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                        diff --git a/docs/build/html/persistence.html b/docs/build/html/persistence.html index 79b4cfb33e..eb549b9c63 100644 --- a/docs/build/html/persistence.html +++ b/docs/build/html/persistence.html @@ -89,7 +89,9 @@

                        Key concepts

                        +

                        CorDapps

                        +

                        The Corda node

                        -

                        CorDapps

                        -

                        Tutorials

                        @@ -147,6 +157,8 @@

                        Appendix

                        • Load testing
                        • +
                        • Introduction - What is a corda network?
                        • +
                        • Setting up your own network
                        • Secure coding guidelines
                        • Release process
                        • Steps to cut a release
                        • @@ -388,7 +400,7 @@ to initialise the ORM layer.

                          - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                          diff --git a/docs/build/html/release-notes.html b/docs/build/html/release-notes.html index 542510e47d..8dcf1d94ba 100644 --- a/docs/build/html/release-notes.html +++ b/docs/build/html/release-notes.html @@ -89,14 +89,26 @@

                          Key concepts

                          +

                          CorDapps

                          +

                          The Corda node

                          -

                          CorDapps

                          -

                          Tutorials

                          Other

                          Component library

                          Appendix

                          • Load testing
                          • +
                          • Introduction - What is a corda network?
                          • +
                          • Setting up your own network
                          • Secure coding guidelines
                          • Release process
                          • Steps to cut a release
                          • Release notes +
                            +

                            SIMM and Portfolio Demo - aka the Initial Margin Agreement Demo

                            +
                            +

                            Background and SIMM Introduction

                            +

                            This app is a demonstration of how Corda can be used for the real world requirement of initial margin calculation and +agreement; featuring the integration of complex and industry proven third party libraries into Corda nodes.

                            +

                            SIMM is an acronym for “Standard Initial Margin Model”. It is effectively the calculation of a “margin” that is paid +by one party to another when they agree a trade on certain types of transaction. This margin is +paid such that, in the event of one of the counterparties suffering a credit event +(a financial term and a polite way to say defaulting, not paying the debts that are due, or potentially even bankruptcy), +then the party that is owed any sum already has some of the amount that it should have been paid. This payment to the +receiving party is a preventative measure in order to reduce the risk of a potentially catastrophic default domino +effect that caused the Great Financial Crisis, +as it means that they can be assured that if they need to pay another party, they will have a proportion of the funds +that they have been relying on.

                            +

                            To enact this, in September 2016, the ISDA committee - with full backing from various governing bodies - +issued a ruling on what is known as the ISDA SIMM ™ model, +a way of fairly and consistently calculating this margin. Any parties wishing to trade a financial product that is +covered under this ruling would, independently, use this model and calculate their margin payment requirement, +agree it with their trading counterparty and then pay (or receive, depending on the results of this calculation) +this amount. In the case of disagreement that is not resolved in a timely fashion, this payment would increase +and so therefore it is in the parties’ interest to reach agreement in as short as time frame as possible.

                            +

                            To be more accurate, the SIMM calculation is not performed on just one trade - it is calculated on an aggregate of +intermediary values (which in this model are sensitivities to risk factors) from a portfolio of trades; therefore +the input to a SIMM is actually this data, not the individual trades themselves.

                            +

                            Also note that implementations of the SIMM are actually protected and subject to license restrictions by ISDA +(this is due to the model itself being protected). We were fortunate enough to technically partner with +OpenGamma who allowed us to demonstrate the SIMM process using their proprietary model. +In the source code released, we have replaced their analytics engine with very simple stub functions that allow +the process to run without actually calculating correct values, and can easily be swapped out in place for their real libraries.

                            +

                            Open the Corda samples project in IntelliJ and run the “Simm Valuation Demo” configuration

                            +

                            Now open http://localhost:10005/web/simmvaluationdemo and http://localhost:10007/web/simmvaluationdemo to view the two +nodes that this will have started respectively. You can now use the demo by creating trades and agreeing the valuations. +Also see the README located in samples/simm-valuation-demo.

                            +
                            +
                            +

                            What happens in the demo (notionally)

                            +
                            +
                            Preliminaries
                            +
                              +
                            • Ensure that there are a number of live trades with another party financial products that are covered under the +ISDA SIMM agreement (if none, then use the demo to enter some simple trades as described below).
                            • +
                            +
                            +
                            Initial Margin Agreement Process
                            +
                              +
                            • Agree that one will be performing the margining calculation against a portfolio of trades with another party, and agree the trades in that portfolio. In practice, one node will start the flow but it does not matter which node does.
                            • +
                            • Individually (at the node level), identify the data (static, reference etc) one will need in order to be able to calculate the metrics on those trades
                            • +
                            • Confirm with the other counterparty the dataset from the above set
                            • +
                            • Calculate any intermediary steps and values needed for the margin calculation (ie sensitivities to risk factors)
                            • +
                            • Agree on the results of these steps
                            • +
                            • Calculate the initial margin
                            • +
                            • Agree on the calculation of the above with the other party
                            • +
                            • In practice, pay (or receive) this margin (omitted for the sake of complexity for this example)
                            • +
                            +
                            +
                            +
                            +
                            +

                            Demo execution (step by step)

                            +

                            The demonstration can be run in two ways - via IntelliJ (which will allow you to add breakpoints, debug, etc), or via gradle and the command line.

                            +

                            Run with IntelliJ

                            +
                            +
                              +
                            1. Open the corda project with IntelliJ
                            2. +
                            3. Run the shared run configuration “SIMM Valuation Demo”
                            4. +
                            +
                            +

                            Run via CLI

                            +
                            +
                              +
                            1. Navigate to the samples/simm-valuation-demo directory in your shell

                              +
                            2. +
                            3. Run the gradle target deployNodes (ie; ./gradlew deployNodes for Unix or gradlew.bat on Windows)

                              +
                              +
                                +
                              1. Unix: cd simm-valuation-demo/build/nodes && ./runnodes
                              2. +
                              3. Windows: cd simm-valuation-demo/build/nodes & runnodes.bat
                              4. +
                              +
                              +
                            4. +
                            +
                            +
                            +
                            Then (for both)
                            +
                              +
                            1. Browse to http://localhost:10005/web/simmvaluationdemo
                            2. +
                            3. Select the other counterparty (ie Bank B)
                            4. +
                            5. Enter at least 3 trades - via the “Create New Trade” tab.
                            6. +
                            7. On the “Agree Valuations” tab, click the “Start Calculations” button.
                            8. +
                            +
                            +
                            +

                            Additionally, you can confirm that these trades are not visible from Bank C’s node.

                            +

                            Please note that any URL text after simmvaluationdemo should not be bookmarked or navigated directly to as they are only for aesthetics.

                            +
                            +
                            @@ -368,10 +473,10 @@ but we’re only interested in the row count for this demo.

                            @@ -380,7 +485,7 @@ but we’re only interested in the row count for this demo.

                            - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                            diff --git a/docs/build/html/search.html b/docs/build/html/search.html index ba715326d6..255c43c318 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -87,7 +87,9 @@

                            Key concepts

                            +

                            CorDapps

                            +

                            The Corda node

                            -

                            CorDapps

                            -

                            Tutorials

                            @@ -141,6 +151,8 @@

                            Appendix

                            • Load testing
                            • +
                            • Introduction - What is a corda network?
                            • +
                            • Setting up your own network
                            • Secure coding guidelines
                            • Release process
                            • Steps to cut a release
                            • @@ -214,7 +226,7 @@

                              - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                              diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 387e1b6ca4..b0d10c7eb8 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["building-the-docs","clientrpc","codestyle","consensus","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","data-model","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","initial-margin-agreement","inthebox","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","transaction-data-types","tutorial-attachments","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-test-dsl","using-a-notary","where-to-start"],objects:{},objnames:{},objtypes:{},terms:{"00z":39,"0_xx":15,"10000l":20,"1000l":37,"17t16":39,"1mb":11,"300px":[],"5000l":20,"8u45":[],"_before_":11,"_do_":11,"_foo":2,"abstract":[9,11,26,29,30,39,40],"boolean":[9,12,20,30,38,39],"break":[11,27,31],"byte":[2,9,11,41],"case":[2,3,6,7,8,9,11,12,14,18,20,27,29,30,36,37,39,40],"catch":[2,11,14,34],"class":[],"default":[1,2,4,6,7,8,11,14,16,18,20,21,23,24,25,26,28,30,34,35,36,39],"enum":[30,38],"export":[11,24,29,43],"fa\u00e7ad":24,"final":[3,5,7,9,11,12,15,21,30,33,35,38,39,41],"float":[4,5,10],"function":[],"import":[2,9,10,11,15,29,30,35,36,39,40,41,43],"instanceof":39,"int":[2,20,29,39,42],"long":[2,4,7,9,10,20,29,39],"new":[2,3,5,6,7,8,9,11,13,22,23,24,25,26,28,30,31,33,36,37,38,39,40,41,42,43],"null":[6,10,12,20,29,37,39,42],"public":[2,6,8,9,11,16,19,22,24,26,28,30,33,35,36,39,40,41],"return":[1,2,3,5,7,10,11,12,20,24,26,29,30,34,37,38,39,40,41,42,43],"short":[10,18,31],"static":[7,8,9,11,18,27,39,41,43],"super":[2,40],"switch":[11,30,39],"throw":[1,2,11,20,21,38,39,40,42],"transient":11,"true":[3,6,9,12,16,20,27,28,35,38,39],"try":[1,2,9,11,15,30,32,38,43],"var":[12,29,38],"void":[39,40,41],"while":[23,36,38],abil:[9,23],abl:[3,6,8,9,11,18,21,24,25,26,27,28,30,33,39,42],abort:[3,27],about:[],abov:[2,5,9,11,18,21,24,35,39,40,41],absent:6,absolut:[3,6,9],abstractnod:[7,26],abstractstatereplacementprotocol:30,acccess:7,accept:[2,3,4,9,14,16,33,39],acceptablepric:11,access:[],accid:11,accident:[2,34],accompani:[2,39],accord:43,accordingli:[35,40],account:[9,20,30,36],accrual:5,accur:[3,18],accuraci:9,achiev:[3,9,35,36],achiv:21,ack:30,acknowledg:[11,26],acquir:33,acronym:18,across:[4,6,9,20,26,29,30,33,37],act:[3,6,9,11,26,27],action:[10,20,26,32,39,43],activ:[5,6,7,10,14,20,23,26,29,30,33,39],actor:[2,9,11],actual:[3,5,11,18,20,26,27,34,37,39,40,41,42],adapt:[2,11,27],add:[2,8,9,11,16,18,20,21,22,24,26,32,34,37,38,39,40,41,42],addattach:[12,37],addcommand:[11,39,42],addedg:38,adding:[],addinputst:[11,39],addit:[2,3,6,8,9,26,29,30,36,38,39],addition:[9,11,13,14,29,31],addmessagehandl:30,addnod:38,addoutputst:[11,39,42],address:[3,6,8,9,11,22,25,26,30,35,39],addvaulttransactionnot:38,adjust:[2,5,31,39,43],admin:[25,26,28],administr:[],advanc:[4,5],advantag:9,adventur:43,advertis:[1,6,26,32,38,39,42],advertisedservic:[8,38],advic:31,affect:[15,27,35],affinityexecutor:2,afraid:2,after:[3,4,5,8,10,11,12,13,15,16,20,21,26,27,39],again:[5,9,11,12,20,26,27,39,42],against:[],agent:[20,24,26],agentlib:8,aggreg:[9,18,39,40],agre:[5,10,11,16,18,33,34],agree:[5,18],agreement:[],ahead:[11,39],aid:30,aim:[2,9,20],aka:16,albeit:30,albertsen:30,alert:15,algorithm:[9,19,30,36,39],alia:6,alice:[16,25,36,38,39,42],alice_key:37,aliceparti:42,align:17,aliv:11,all:[0,1,2,3,4,5,6,7,8,9,11,12,13,15,16,20,21,24,25,26,27,29,30,31,33,34,35,36,37,38,39,40,42,43],allclaus:40,allcomposit:40,allevi:3,alloc:33,allow:[1,2,3,4,5,6,7,8,9,10,11,16,18,20,22,26,27,29,30,34,36,39,41,43],allpartysignedtx:11,almost:39,along:[3,11,12,14,27,39,42],alongsid:39,alreadi:[2,8,10,11,17,18,21,27,30,37,39,40,41,42],alright:11,also:[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,18,20,21,22,23,24,25,26,28,29,30,33,36,37,39,40,41,42,43],alter:[6,11,24],altern:[0,2,6,17,22,23,24,25,36,39],although:[5,6,9,11,14,15,25,26,37,39,40,43],alwai:[2,9,10,11,17,24,29,35,36,39],amount:[],amqp:[22,30],analysi:9,analyt:18,andresen:9,ani:[1,2,3,4,5,7,9,10,11,12,14,16,18,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,42,43],annot:[1,2,7,11,29],announc:31,anonym:[9,26],anonymis:26,anoth:[1,2,3,8,9,11,15,16,18,24,26,27,30,33,37,39,41,42],answer:[2,27],anticip:2,any:[1,4,10,18,24,26,38],anybodi:9,anyclaus:40,anycomposit:40,anyon:[3,39],anyth:[3,9,11,12,34,36,39,40],anytim:28,anywher:[27,30,39],apach:22,apart:3,api:[],app:[],appear:[15,33,39],append:[11,24],appendix:17,apple:14,appli:[2,4,5,8,9,20,25,39,40],applic:[7,8,9,16,22,26,27,30,33,34,39,43],applicat:16,applyfix:5,appoint:3,approach:[],appropri:[2,22,26,29,32,40],approv:[9,10,11,28],approxim:3,april:30,arbitrari:[2,9,11,27,34,36,38],arbitrarili:9,architectur:[1,17,27],area:29,aren:[1,10,19,39,43],arg:[8,30,38],argument:[1,2,7,9,11,20,38,39],aris:[9,14],around:[3,9,11,12,21,30,31,36,38,39,40],arrai:[9,38],arrang:11,arriv:[11,16,27],arrow:[5,15],art:36,artemi:[8,16,22,35],artemisaddress:[6,35,38],artemismq:[6,26],artemisport:8,articl:[3,9,10,11,27,30,39,43],artifact:8,ascertain:33,ask:[2,11,27,39],aspect:[11,43],assembl:[9,21,39],assemblesharedtx:11,assert:[],assertequ:[12,37],asset:[],assetforsal:11,assetmismatchexcept:11,assettosel:11,assettypenam:11,assign:[9,12,17,27],assist:[10,11,29,36],associ:[3,9,10,22,29,30,35,36,39],assum:[3,9,11,17,20,21,34,38,39,42],assume:[11,21],assumpt:11,assur:18,asynchron:20,atom:[3,9,11,30,33,39],attach:[],attachment:[],attachmentdemo:37,attachmentstorag:26,attack:[3,34],attch:21,attempt:[9,15,34],attent:11,attest:3,attribut:2,audit:9,authent:[1,3,26,30,38],authenticatedobject:[36,39,40],author:[2,3,14,26,31,42,43],authoris:[6,11,26,36],auto:[2,39],autoclos:1,autom:[9,10,39,43],automat:[0,1,3,6,8,10,11,22,23,26,29,30,37,39,42,43],auxiliari:26,avail:[0,3,5,6,8,10,11,14,23,24,26,30,31,33,34,37,39,42],avoid:[1,2,9,11,29],awai:[1,9,11,38],await:8,awar:[1,2,10,11,26,30,39],awg:31,awkward:[2,11],axi:5,back:[1,2,9,11,18,26,27,30,33,34,36,39],backend:30,background:[1,2,9,17],backoff:22,backport:31,backward:[11,31],bad:[2,11,39,41],balanc:[3,4,9,25,39,41],banana:36,bananast:36,banco:30,band:11,bandwidth:2,banish:16,bank:[5,6,9,30,33,35,36,37,39,42,43],bankrupt:39,bankruptci:[3,9,18,27],banner:35,bar:15,barreca:30,barrel:30,base:[2,3,5,6,8,9,10,11,16,20,22,24,26,28,30,33,35,36,39,42],basedir:[6,8,35],basedirectori:38,basi:[5,10,14,23,24,26],basic:[],bat:[8,18,23,25,28,33],batch:20,bbva:30,bear:11,becaus:[2,3,9,10,11,15,17,24,26,27,36,39,40,41,42],becom:[2,5,9,10,11,31,36],been:[3,5,6,9,11,14,16,18,27,28,30,31,36,39,40,42],befor:[3,5,8,9,10,11,12,20,26,30,31,32,36,37,39,40],begin:[2,9,17,26,39,43],behav:39,behaviour:[3,4,6,20,24,40,41],behind:[11,16,22,39],believ:30,belong:21,below:[2,5,8,9,10,11,14,18,21,26,36,39,43],beneath:16,beneficiari:4,benefit:[3,11],best:[2,43],bet:27,better:[2,13,30,39],between:[2,3,5,9,10,11,16,22,23,26,27,29,30,31,33,34,36,38,39],beyond:9,big:[2,9,11,30,39],bigdecim:[27,36],bilater:[4,5,30],bill:39,bin:[33,38],binari:[9,21,26,27,38],bind:[3,6,9,23,24,27,35],bip:9,bit:[36,39,41,42,43],bitbucket:[],bitcoinj:11,blah:2,blank:[2,24,25,28,39],block:[1,2,3,8,9,11,26,27,30,33,34],blockchain:[9,11,19,21,39],bloom:2,bloomfilt:2,blotter:33,blue:[5,21],bob:[16,25,36,39],bodi:[2,18],boil:[9,20],boilerpl:8,bond:39,bookkeep:39,boost:19,bootstrap:[6,8],bore:39,boss:17,both:[3,4,5,9,11,12,13,16,20,23,27,29,30,33,34,35,36,39],bottom:15,bounc:12,bound:[3,11,30,35,39],box:43,branch:[17,21,30,31],breach:9,bread:43,breakpoint:18,breviti:40,bridg:26,brief:[],briefli:[17,22],bring:[9,20,33],broadcast:[9,39,42],broadcasttransactionflow:42,broadcasttransactionprotocol:[],broader:35,broke:2,broken:30,broker:[6,22,26],brows:[18,24],browser:[6,33],buffer:1,bug:[2,30,31],bugfix:31,bui:[11,43],buildcertsigningrequestutilityjar:28,buildcordajar:[6,28,35],builder:[11,12,30,34,37,42],buildmerkletransact:21,buildscript:[8,16],built:[6,8,11,21,30,34,39],bulk:[9,40],bullet:2,bundl:9,busi:[9,10,11,16,19,27,29,30,36,39,43],businesscalendar:36,butter:43,button:33,buyer:[],bytearrai:29,bytecod:[9,11,39],cach:[22,37,42],calcul:[3,5,10,11,18,21,34,36,39],calculateoursignatur:11,calendar:[5,27,36],call:[1,2,3,5,7,9,11,13,24,26,30,31,33,34,36,37,38,39,40,41,42],callback:[1,2,11,26,30],caller:[39,42],came:11,camel:2,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,43],candid:29,cannnot:7,cannot:[3,4,9,16,23,27,30,34,36,39,42],capabl:39,capit:2,capitan:0,capsul:23,capsule_cache_dir:8,captur:10,cardon:30,care:[2,3,7,9,11,12,34,41],carefulli:13,carri:26,cash_stat:29,cashcommand:[20,38],cashflow:38,cashkt:39,cashprotocol:[6,35],cashschema:29,cashschemav1:29,cashsigningpubkei:11,cashstat:[],cast:1,catastroph:18,categori:35,caught:1,caus:[2,16,18,33,39],cbc:20,ccy_cod:29,cent:36,center:39,central:[36,39,42],ceo:36,cer:6,certain:[2,7,18,30,39],certainli:8,certainti:3,certif:[6,17,20,26,30],certificatesigningservic:[6,28,35],certificatespath:38,certsigningrequestutil:[28,35],cev:28,chain:[],chaincash:41,chaincashdoublespend:41,chaincashdoublespendfailswith:41,challeng:9,chanc:[2,11],chang:[],changenotari:3,channel:11,charact:[2,6],characterist:16,charg:27,charli:36,check:[],checkabl:[27,30],checknotnul:39,checkpoint:[26,30],checkstat:39,checksufficientsignatur:[11,36,42],child:[11,36],children:[11,36],childrenfor:11,choic:[2,3,9,14,39],choos:[3,25,39,42],choreographi:16,chosen:[3,9,11,20,42],chronolog:10,chunk:[39,40,43],circl:23,claim:[9,39],clarifi:39,clash:[2,29],classic:39,classpath:[1,7,8,9],claus:[],clauseverifi:40,clean:[11,30],cleaner:30,cleanup:30,clear:[1,11,20,34,36],cleardatabasebeforerun:20,clearer:11,clearli:2,cli:[],click:[15,25,33],clock:[3,9,10,11,33],clone:[2,15,39],close:[1,3,4],closeabl:1,closer:3,closur:[2,41],cloud:24,cluster:[],cmd:[21,39,40],coars:9,code:[],codebas:[2,29],cognit:9,coin:9,collabor:30,collaps:20,colleagu:2,collect:[1,2,16,20,24,29,30,32,39,40],collector:[2,11,24],collis:2,column:[8,24,29],com:[0,14,15,28],combin:[9,16,36,39],come:[1,9,11,12,30,31,34,39],command:[],commanddata:[27,39,40],commercial_pap:[39,40],commercialpap:[4,29,39,40],commercialpaperlegaci:39,commit:[3,6,10,12,26,31,32,33,42],committe:18,common:[4,5,7,9,11,26,29,30,36,39,40,41],commonleg:5,commun:[6,11,16,26,30,34,35],compani:[27,28],companion:[11,39,40],compar:[9,17,21,33,39],compat:[1,16,31],compel:3,compet:9,complementari:10,complet:[1,9,10,11,26,27,28,30,33,36,37,38,39,40,41],complex:[2,4,9,12,18,29,36,37,39],complic:[11,39,40],compon:[7,8,10,16,17,22,26,30],compos:[11,30,36,39,40],composit:[],compositeclaus:40,compositekei:[11,26,36],compound:30,compris:5,comput:[5,16,27],computeoursignatur:11,concaten:21,concept:[3,4,9,10,11,17,21,27,30,39],concern:[9,11,39],concis:30,conclus:[9,27],concret:[7,26],concurr:20,concurrenthashmap:2,condit:[3,7,20,26,27,30,40,41],conf:[6,8,26,28,35],confgur:29,config:[6,8,20,24,28,33,38],configur:[],configurationfil:24,confirm:[3,15,16,18],conflict:[3,9,20,42],confus:11,connect:[1,6,8,19,20,24,25,26,28,33],consid:[2,5,9,10,16,27,30,31,36,39],consider:39,consist:[5,6,9,11,16,18,20,26,27,30,35,40],consol:[24,33,35,38],consortium:16,constant:[2,29,39],constantli:27,constraint:[11,27,30,39],construct:[],constructor:[7,10,11],consum:[1,3,9,10,16,26,30,33,36,39,42],consumingtx:42,consumpt:[10,27],contact:[11,26,30],contain:[3,5,6,7,8,9,11,16,21,22,24,25,26,27,28,30,31,33,36,37,39,40,41,42,43],content:[2,3,7,8,9,10,12,15,24,27,36],context:[2,9,24,26,27,36,42],continu:[],contract:[],contractreject:41,contractst:[3,10,21,29,30,36,38,39],contrast:[9,11,27],contribut:36,control:2,conveni:[2,9,36,39],convent:[5,11,40],convers:[25,36],convert:[3,4,5,12,26,29,30,36,39],convinc:[11,21,36],coordin:6,copi:[2,9,11,22,24,26,37,39,41,42,43],copycat:32,copyonwritearraylist:2,copyright:2,copyvault:20,corda:[],corda_dev_ca:6,corda_gradle_plugins_vers:8,corda_vers:8,cordacadevpass:[6,35,38],cordapluginregistri:[7,8,38],cordarpccli:[1,38],cordarpcop:[1,11,38],cordarpcopsimpl:26,core:[4,7,8,9,11,15,20,24,26,27,29,30,36,37,39,41],corner:15,correct:[4,9,11,15,27,30,31,39,41],correctli:[9,11,15,16,26,27,30,39],correspond:[1,16,20,33,36,39],correspondingli:[2,37],cost:[1,27,39],could:[2,3,4,9,11,20,27,34,36,39],couldn:21,count:[5,33],countabl:30,counter:[2,11],counterparti:[4,5,16,18,33,34],countri:[27,36],coupl:[11,12,20,38],cours:[11,20,24,27,29,39,43],coven:39,cover:[3,4,9,11,18,27,36,39,43],cpu:20,crash:[11,26],creat:[],createcommand:42,createdummyirs:5,createsomenod:12,creation:[5,9,21,39],creator:27,credenti:25,credit:[18,30],crisi:18,crisp:39,criteria:4,critic:[9,31],crop:9,crypto:30,cryptograph:[16,21,36],cryptographi:[],csr:30,curl:24,currenc:[4,5,11,20,25,29,30,36,39],current:[1,2,3,5,6,8,9,10,11,17,19,20,21,22,23,25,26,27,28,29,30,31,32,34,36,38,39,41,42],currenti:23,currentstep:11,currenttim:11,currentwallet:[],curv:5,custodi:[12,36],custom:[1,3,7,11,24,26,29,30,33,36],customis:[1,29,38,43],cut:[],cutoff:20,cycl:[2,11,39],dai:[3,5,11,24,27,31,36],daniel:30,danks:30,dashboard:[24,25],data:[],databas:[],databaseschema:29,databasetransact:12,dataset:[5,18],datasourc:[6,35],datasourceclassnam:[6,35],datasourceproperti:[6,35],datastructur:20,date:[],dateoffset:30,daterollconvent:36,david:30,dcapsul:8,dead:22,deadlin:36,deal:[2,11,27,33,36,39],dealstat:36,debt:[4,18],debugg:8,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:24,decd:24,decentralis:[9,27,30],decid:[15,21,27,29,39],decis:[3,9,39],declar:[2,6,7,26,41],dedic:2,dedupl:[26,30],defaultissu:39,defin:[2,3,7,9,11,12,19,20,24,26,29,30,36,38,39,40,41,43],definit:[3,11,16,30,36,39,40],delai:[5,27],deleg:[40,42],delet:[2,9,11,26,30,39],deliber:[9,41],deliv:[4,12,26,36],deliveri:[11,19,22,33],demand:[3,9,11,30],demo:[],demonstr:[14,18,30,33,43],denial:3,denot:21,dens:2,depend:[2,3,8,9,10,11,12,14,15,16,18,27,30,35,39],dependson:8,deploi:[8,16],deploy:[8,16,23],deploynod:[6,8,18,33],deployvisualis:23,deposit:[39,41],deprec:30,deregist:22,deriv:[5,11,16,29,30,36,39],describ:[2,3,9,10,11,17,18,20,21,26,34,36,38,39,42],descript:2,deserv:[20,31],design:[2,3,9,13,16,17,27,30,34,39,40,43],desir:[7,11,36],desktop:24,despit:[11,37,39],destroi:[4,9,39],destructur:39,detail:[],detect:2,determin:[4,5,10,15,16,39,40],determinist:[1,20],dev:[6,20,24],develop:[2,6,8,9,11,13,14,17,26,28,29,30,31,33,39],devic:[6,9],devis:9,devmod:[6,28,35],diagnos:35,diagram:[5,39],diamond:16,did:21,didn:[2,11,21,31,39],differ:[2,3,4,5,6,7,8,9,10,11,14,20,25,27,29,30,33,36,38,39,41],differenti:42,difficult:11,difficulti:40,digest:3,digit:[9,11,27,30,39],digitalsignatur:[11,27,42],dir:[28,35],direct:[2,16,26,29],directli:[1,2,11,12,16,22,24,26,30,36,38,39,40,42],directori:[0,6,8,15,18,20,24,26,28,33,35,43],directthreadexecutor:2,dirnam:8,dirti:39,disabl:[26,36],disadvantag:9,disagr:18,disambigu:29,discard:34,discov:9,discoveri:23,discuss:[9,11,36],disk:[11,22,30,36],disobei:27,displai:[3,33,38],disput:[3,5,39],disrupt:[20,22],disruptionpattern:20,disruptionspec:20,distinct:[2,35,40],distribut:[3,6,7,8,9,11,16,17,19,27,30,32],distrust:[3,11],divid:3,divis:36,dlog4j:24,doc:[0,1,2,17,30,38],docker:24,docsit:[0,31],doe:[2,3,4,5,6,8,9,10,11,12,17,18,19,24,26,27,28,29,34,39,41,42,43],doesn:[2,3,9,11,12,15,19,24,34,39,41,42],dokka:0,dollar:[36,39,41],dollars:[39,41],domain:[16,30,36,39],domicil:39,domino:18,don:[1,2,9,11,13,15,20,25,27,31,33,34,36,39,40,41],done:[0,1,9,11,12,14,20,21,28,30,33,38,39],dot:[5,21],doubl:[9,11,19,25,26,35,39],doubt:2,down:[2,6,9,11,20,25,37,39,40],download:[],downsid:[2,9],drain:[1,11],draw:[30,38],drawn:38,drive:[9,43],driven:33,driver:[6,24,29,30,38,43],driverdirectori:38,drm:27,dsl:[8,16,30,41],dt_socket:8,due:[2,3,5,9,10,11,13,14,18,26,29,39,40],dummi:[4,12,41],dummy1:12,dummy2:12,dummy_cash_issuer:41,dummy_notary_key:12,dummy_pubkey_1:[39,41],dummy_pubkey_2:41,dummycontract:[12,42],dump:38,duplic:[11,21],durat:[10,27],durationsecond:20,dure:[2,5,6,7,8,11,23,24,26,30,39],dynam:[7,9,30,39,43],each:[1,2,3,5,6,7,8,9,10,11,16,20,21,23,26,27,29,30,31,33,35,36,38,39,40,41,43],earli:[2,4,26,43],earlier:34,earliest:[5,10],easi:[2,9,13,27,30,39],easier:[2,8,11,14,30,39],easiest:[1,39],easili:[2,11,18,39],econom:5,ed25519:30,edg:38,edge:38,edit:[24,35],edition:[],editor:15,effect:[5,6,9,11,12,18,29,41],effort:14,either:[1,2,3,4,5,6,9,11,15,16,20,21,29,33,36,38,39,41,43],elbonia:36,element:[2,9,16,21,39,40],elimin:[19,30],els:[3,8,9,11,12,26,27,36,38,39,40,42],elsewher:7,email:11,emailaddress:28,embed:[6,7,9,19,21,24,27,30],embedd:22,emit:[1,30],emoji:37,empti:[6,30,39,41],emptyledg:41,emptyset:37,enabl:[6,7,8,26,37,40],enact:18,enc:20,encapsul:[2,36],enclos:2,encod:27,encount:[10,26],encourag:[29,37],encrypt:28,encumb:39,encumberedst:39,encumbr:[29,39],encumbranc:[],end:[2,3,5,9,11,17,20,26,27,31,40,43],endpoint:[8,22,24],enforc:[2,9,39],enforceverifyorfail:41,engin:18,english:[2,39],enjoy:30,enorm:11,enough:[2,11,12,18,39,43],ensur:[2,3,9,11,15,16,21,26,28,30,31,34,36,39,40],ensure:[3,15,18],enter:[8,18,41,43],entir:[3,5,9,11,17,26,27,39],entireti:5,entiti:[3,9,21,27,29,36,39],entri:[5,6,8,9,11,29,34,39],enumer:[5,29,33],environ:[2,8,11,14,27],envisag:39,equal:[3,11,30,36,39,40,41],equiti:29,equival:[2,5,25,26,32,36,39],especi:36,essenti:[24,26,27,39,40],establish:[10,14,22,33,35],etc:[2,3,4,5,11,16,18,19,25,27,30,31,35,36,39,40],euribor:[24,27],euro:36,evalu:[5,24,27,40],even:[1,3,9,11,13,18,21,26,27,29,30,39,41],event:[],eventu:[20,26,35],eventual:[3,31],ever:[2,9],everi:[1,3,7,9,11,20,21,22,26,27,29,30,31,33,34,36,39,43],everybodi:9,everyon:[3,27,39],everyth:[3,34,38,39,43],evid:27,evolut:9,evolv:[29,35,39,43],exact:3,exactli:[9,26,36,39],examin:[2,8,9,12,39],exampl:[],examplerpccordapluginregistri:38,examplerpcvalu:38,exce:20,excel:27,except:[1,2,7,11,34,39],exception:[2,11],excess:2,exchang:[5,11,16,26,36],exclud:[6,29],exclus:4,execut:[3,8,9,10,11,16,20,23,25,26,30,36,37,39],executor:2,exhaust:[26,30],exist:[2,3,4,5,6,8,9,10,17,23,26,28,29,30,36,38,39,41,43],exit:[4,6,12,25,26,28,30,38,39],exitcash:38,expand:25,expect:[1,2,4,6,10,11,20,26,28,29,30,31,33,34,36,37,39,40,41],expectedtypenam:11,expens:[1,2],experi:[8,14,30,31,43],experienc:9,experiment:[2,30],expir:28,explain:[2,10,11,20,23,28,30],explan:[2,23,38],explicit:[2,9,11,39],explicitli:[2,7,9,41],explor:[2,9,12,15,19,24,25,30,39,43],explorer:[],expos:[2,7,8,9,10,11,24,26,29,30,36,38,42],expose:36,exposur:[4,5,16],expound:14,express:[3,5,9,16,30,36,39,41],ext:8,extend:[2,3,7,8,11,13,25,26,30,36,39,40],extens:[2,7,11,16,23,24,26,30,34,36,39],extent:9,extern:[6,11,26,35,37,43],extraadvertisedserviceid:[6,26,32,35],extract:[9,24,27,33,36,39],extractcommand:40,extrem:[3,9,13,16,20],face:39,facevalu:39,facil:[16,26],fact:[2,3,5,9,11,16,27,35,39,41],factor:[5,9,18],fail:[7,37,39,40,41],failswith:41,failur:[11,16,37,41],fairli:[2,12,18],fake:43,fals:[2,6,11,12,27,35,36,39,42],famili:29,familiar:[1,9,39,42],famou:[9,30],fanci:39,far:[11,33,39],fashion:[2,18,29],fast:[9,12],fault:11,faultfind:[],fear:16,featur:[],fed:23,feed:[3,27],feedback:30,feel:[39,43],fetch:[22,24,26,27,37],fetchtransactionsflow:37,fetchtransactionsprotocol:[],few:[2,11,13,24,27,31,33,39],fiber:[11,26],field:[],file:[],fill:[2,11,33,39],filter:[2,20,21,29,30],filtercommand:21,filteredleav:21,filteredtransact:21,filterfun:21,filterisinst:39,finalis:[5,11,30],finalisetransact:[],finalityflow:[37,42],finalityprotocol:[],financ:[8,11,30,43],financi:[9,10,11,16,18,30,36],find:[0,9,11,12,13,14,17,19,24,34],fine:[1,9,41],finish:[11,30],fire:11,firewal:[],first:[1,2,3,5,6,8,10,11,12,13,14,15,16,22,24,27,28,29,30,33,36,37,38,39,40,42,43],firstli:[7,33,39],fit:[2,9],fix:[],fixabledealst:36,fixedleg:5,fixedlegpaymentschedul:5,fixedratepaymentev:5,fixingroledecid:10,fixingsessioninitiationhandl:10,fixof:[21,27],flag:[6,24,28,43],flat:29,flesh:36,flexibl:[3,9,36],flight:[1,9],floatingleg:[5,10],floatinglegpaymentschedul:5,floatingratepaymentev:5,flow:2,flowhandl:[11,38],flowlog:[10,11,26,38],flowlogicreffactori:[7,10],flowstatemachineimpl:26,flowtrack:11,flux:[8,43],fly:11,focu:21,fold:[2,38],folder:[0,6,8,26,28,33],follow:[0,2,3,6,8,9,10,11,14,15,20,23,24,25,26,28,32,33,39,40,41,42],font:2,foo:[2,38],foobrokenexcept:2,foot:34,fooutil:39,forc:[9,24,30,39,41],fordai:[10,27],foreach:38,forev:31,forget:[11,39],form:[1,3,8,9,10,11,21,26,33,39,40],format:[],former:38,formula:30,forth:[1,11],fortun:18,forward:[11,22,26,27,31,33],found:[6,11,14,15,24,27,31,36,43],four:[35,39],fourpmtimelock:39,fraction:36,frame:[2,11,18,26],framework:[],free:[3,9,11,14],freed:1,freeli:27,frequenc:5,frequent:39,fresh:[27,39,41],freshkei:11,freshli:36,friend:35,friendli:26,from:[0,2,27,30,31],fromcountri:36,front:39,frontend:19,frustrat:9,ftx:21,fulfil:[4,9],full:[2,3,4,6,7,11,18,21,22,23,26,38,39,40],fulli:[2,3,6,7,9,11,16,23,26,29,30,35,36],fullnodeconfigur:38,fullysign:11,fun:[3,10,11,12,20,21,27,29,37,38,39,40,41,42],fund:[9,18,39],fundament:[3,9,39],fungibl:[4,16,36,39,40],fungibleasset:[],further:[],futur:[],futuretransact:38,fuzz:30,gain:19,garbag:[1,2,11,24],gather:[20,39],gatherfrequ:20,gatherremotest:20,gavin:9,gcd:9,gear:31,gener:[],generatecount:20,generateiniti:12,generateirsandfixsom:5,generateissu:39,generatemappedobject:29,generatemov:39,generateredeem:39,generatespend:[11,39],generatetransact:38,genuin:2,get:[],getamount:41,getanynotari:42,getbefor:39,getbloomfilters:2,getclass:39,getcommand:[39,40],getcontract:39,getdummy_cash_issuer:41,getdummy_pubkey_1:41,getdummy_pubkey_2:41,getencumbr:39,getfacevalu:39,getfix:5,getflowtrack:11,getinput:[30,39],getinstat:30,getissuanc:39,getkei:39,getlegalcontractrefer:[39,40],getmaturityd:39,getmega_corp:41,getmega_corp_pubkey:41,getnotari:42,getnotarysignatur:11,getorthrow:12,getoutput:[30,39],getoutst:30,getowner:[39,40],getparticip:39,getprotocoltrack:[],getprotocolvers:1,getrequiredcommand:40,getresourceasstream:37,getresultorthrow:20,getsign:[39,40],getter:[29,39],gettimestamp:39,gettransact:12,getvalu:[39,40],getvaulttransactionnot:38,git:[],github:[0,6,14,15],giusepp:30,give:[3,8,9,12,22,26,30,37,39],given:[3,7,9,11,21,27,29,32,36,38,39,42],givenpric:11,glanc:25,global:[2,3,9,30,36],glue:11,gnu:0,goal:[2,9,16,19,31],goe:1,gone:[11,30,39],good:[2,11,12,21,39,41,43],got:[11,21,24],gover:39,govern:18,gps:3,grade:36,gradl:[],gradlew:[8,15,18,20,23,25,28,33,35,38],grain:1,grammar:2,granular:9,graph:[1,9,12,19,24,29,30,38],graphit:24,graphstream:38,great:[18,30],greater:2,greatest:9,green:15,grip:14,groom:9,group:[],groupclaus:40,groupclauseverifi:40,groupingkei:40,groupstat:[39,40],guarante:[16,31,36],guava:[2,39],gui:11,guidelin:[],hack:[9,30],had:[3,11,12,30,36,39],hand:[10,11,14,23,26,35,39],handa:30,handi:12,handler:[8,10,11,26],happen:[],happi:[33,37],hard:[2,9,11,31],harder:[9,34,39],hardwar:6,hase:5,hash:[3,9,11,12,16,19,21,24,27,30,36,38,39],hashcod:39,hashmap:20,haskel:30,hasn:20,hassl:11,hat:31,have:[1,2,3,4,5,7,8,9,10,11,12,14,15,16,17,18,19,20,21,22,24,25,26,27,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],haven:39,head:38,heap:11,hearn:9,heart:39,heavi:31,heavili:9,hedg:[4,5],heirarchi:2,held:[26,29,39],hell:11,hello:11,help:[2,9,10,11,23,33,39],helper:[5,7,11,26,36,39,42],henc:[3,5,9,26],her:39,here:[2,3,6,8,9,11,12,13,15,16,17,21,23,24,27,29,30,36,38,39,41,43],herself:38,hidden:[22,26],hide:[],hierarch:11,hierarchi:11,high:[9,11],higher:[1,2,3,24],highest:17,highli:30,highlight:30,histori:32,hit:[9,37],hoc:30,hocon:6,hold:[7,9,20,21,26,30],holder:[2,9,39],holidai:[5,27,36],home:[15,33],homepath:8,hood:41,hope:26,hopefulli:43,hospit:11,host1:20,host2:20,host:[6,8,20,23,26,28,35],hostandport:6,hostil:34,hostnam:35,hotspot:2,hour:11,hous:25,how:[],howev:[3,4,5,6,9,11,21,26,27,28,29,32,36,37,39,40,41],html:[0,2],http:[0,6,14,15,18,24,26,27,28,33,35,37,39,40,43],https:6,hub:[11,16],human:[3,6,9,11,27,33],hundr:11,hurt:11,icon:14,ide:[13,14,15,24,30],idea:[2,9,11,14,19,43],ideal:[11,39],ident:[3,6,9,11,12,16,17,20,21,22,27,30,36,41],identicon:30,identifi:[5,7,9,11,16,18,21,22,24,26,27,29,36],identiti:[],identityless:9,identityservic:26,ifmatch:30,ifnotmatch:30,ignor:[6,11,38,39,40],iii:7,illegalargumentexcept:[2,11,38,39,40,41],illegalstateexcept:[2,39,40],illustr:[23,36,39],illustrat:2,imag:21,imagin:[2,11,39],immedi:[1,9,26],immut:[2,5,9,27,39],immutabl:[2,9],immutablelist:39,imper:2,implement:[],impli:[11,29],implic:[3,9,11],implicitli:5,important:31,importattach:37,impos:[27,39],imposs:[9,21,27],improv:[30,31,39,40],improve:9,improvement:30,inact:26,inadvert:39,includ:[],include:7,inclus:21,incom:[26,30],incompat:41,incomplet:20,inconveni:39,incorpor:[14,27],increas:[2,18],increment:1,indent:2,independ:[3,18,27,29,33,40],index:[5,9,10,15,29,31,39,42],indexsourc:10,indic:[1,2,5,6,10,11,30,35,39],indicat:20,individu:[],indivis:36,industri:[13,14,16,18,24],inf:7,infer:41,influenc:24,info:[11,12,29,38],inform:[2,3,6,7,9,11,12,15,25,26,28,30,36,37,39],infrastructur:[1,9,12,19,24,26,30,39],inher:9,inherit:[2,39,40],initi:[3,7,11,15,18,20,26,30,33,35,38,43],initial:[],initialis:[12,23,26,29,42],inlin:11,inmemorynetworkmapservic:26,inner:40,inoutgroup:[39,40],input:[3,4,9,11,16,18,20,21,25,27,30,32,37,38,39,40,41,42],inputcash:41,inputindex:42,inputst:42,insert:[2,3,12,24,26,27,29],insid:[1,7,9,11,12,21,26,33,34,39],inspect:20,instal:[0,6,8,10,14,15,30,33,38,39],installdist:[33,38],instanc:[],instance:41,instant:[2,10,11,36,39],instanti:[7,9,10,11,24,30],instat:41,instead:[2,9,11,12,19,22,26,30,36,39,42,43],instigat:3,institut:9,instruct:[14,15,16,24,37,39],instrument:[4,5,10,26],insuffici:9,insufficientbalanceexcept:39,integ:[1,30,36,39,42],integer:39,integr:[2,6,9,11,14,15,18,21,24,27,29,30,37],intellig:2,intend:[2,4,8,9,11,12,17,24,25,26,27,29,34,36,41],intent:[7,23,27,30,39],intention:2,inter:30,interact:[1,2,9,11,12,22,27,30,39],interchang:[16,36],interest:[],interest_r:[6,35],interfac:[],interior:30,interleav:20,interledg:30,intermediari:[18,36],intern:[2,7,8,11,22,24,26,29,30,36,39],internalis:2,interop:[13,30,39],interoper:26,interpol:36,interpret:[2,9,20],intersect:39,interv:[20,36],intervent:26,intesa:30,introduc:[2,3,10,16,27,30,39],introductori:17,intuit:[2,25],invalid:[3,11,27,36,39],invari:[20,39],investig:11,invoc:[1,11],invoic:37,invok:[1,2,7,9,10,11,24,26,30],invoke:11,invokeflowasync:[],invokeprotocolasync:[],involv:[3,4,9,11,26,32,36,39,42,43],ipsa:27,irrelev:10,irs:[],irsdemo:[6,21,33],irsexport:5,irstest:5,irsutil:5,isbefor:39,isconsist:20,isda:[18,30],isempti:39,isinstanc:11,isn:[1,2,9,11,34,36,39,43],isnotari:38,isnotempti:37,isol:40,issu:[],issuanc:[4,36,39,40],issue:[4,16,20,38,39,40],issuecash:[20,38],issuedbi:41,issuer:[4,9,11,12,25,36,39,41],issuer_kei:29,issuer_ref:29,issueref:38,issuerparti:29,issuerref:29,issuetransact:42,item:[16,39],iter:[11,30,31,39],iterabl:[29,38],itself:[1,3,5,6,9,10,11,18,22,24,26,27,29,30,35,37,38,39,41],jar:[0,6,7,8,9,23,24,28,30,35,37],jarandsourc:8,java:[1,2,7,8,9,10,11,13,14,16,24,26,28,29,30,35,36,37,38,39,40,41,43],javaclass:[11,29],javacommercialpap:39,javadoc:[2,8],javadocjar:8,javafx:30,javatesthelp:41,javax:29,jax:7,jdbc:[6,8,24,29,30,33,35],jdbcdatasourc:[6,35],jdbcx:[6,35],jdk1:15,jdk:[14,15,30,36,39],jdwp:8,jetbrain:[13,14,15],jms:22,jmx2graphit:24,jmx:24,jmxtran:24,job:[11,20,43],jobs:20,johann:30,join:[6,22,29,30,39],jolokia:24,jpa:29,json:[6,24,26,43],judgement:2,jump:33,just:[1,2,9,11,15,18,20,22,24,30,33,34,36,37,38,39,41,42,43],jvm:[],kdoc:2,keep:[9,11,39],kei:[],kept:[11,28,42],keymanagementservic:[11,26],keypair:[11,26,39,42],keystor:[6,26,28],keystorepassword:[6,35,38],keyword:[2,41],kick:11,kill:20,kind:[9,11,17,27,34,36,39,43],knob:20,know:[1,3,9,10,11,12,13,21,27,33,34,39,40,41,42],knowledg:27,known:[5,9,12,14,16,18,21,26,31],koan:14,korea:39,kotlin:[],kryo:[],label:[11,41],lack:[],lambda:[11,24,41],land:5,lang:[7,41],languag:[1,2,8,9,11,13,14,15,16,30,36,39,43],larg:[9,11,22,27,30,33,36,37,39,43],larger:[2,9,34],last:[11,20,31,41],lateinit:12,latenc:3,later:[1,2,11,12,14,19,27,29,30,34,35,36,38,39,40],latest:[2,14,15,30],latex:30,latter:[2,38,39],launch:10,layer:[6,9,11,12,22,26,27,29,30,32],layout:[8,23],lazili:24,ldap:30,lead:[2,9],leader:6,leaf:[16,21],leak:[1,3,9,11],learn:[9,11,12,13,17,33,36,39,43],least:[6,17,20,37,39],leav:[2,11,21,25,36],ledger:[3,4,5,9,11,16,17,24,27,29,30,33,35,36,37,39,41],ledgertransact:[11,30,36],leewai:34,left:[11,23,28,33,40,41],leg:[5,10],legaci:26,legal:[3,6,9,26,27,28,36,39,42],legalcontractrefer:[39,40],legalident:[12,38,42],legalidentitykei:42,legallyidentifi:[11,27],less:[11,30,37],lesser:39,let:[2,9,10,11,12,20,21,22,24,27,30,33,36,37,38,39,41,42],letmein:[6,35],letter:[2,22],level:[2,3,5,7,11,15,17,18,20,21,22,24,25,26,34,36,39,40,41],lib:[0,8,23,28,35],liber:2,libor:[5,24,27],librari:[1,2,6,11,16,17,18,24,26,27,30,36,38,39],licens:[2,18],life:[11,39,43],lifecycl:[],lifecyl:4,lifetim:[5,7],lightweight:[12,16],like:[1,2,3,5,9,10,11,12,14,20,21,22,23,24,27,30,31,36,38,39,40,43],likewis:39,limit:[4,9,16,20,39,42],line:[],linear:[26,36],linearst:36,liner:2,link:[2,9,11,27,30,35,36],linkabl:9,linkag:9,linux:[8,24,30],list:[0,6,7,9,11,20,21,26,27,29,30,31,32,33,36,38,39,40,42],listen:[2,26,38],listenablefutur:[],listof:[12,29,38,39],liter:9,littl:[2,11,39,41],live:[5,7,11,18,26,30],livelock:9,lizard:16,llc:28,load:[],loadtest:20,loan:[4,5,27],local:[0,6,7,8,9,11,15,16,20,23,24,26,29,30,41],localcertificatesbasedirectori:20,locald:27,localhost:[6,18,24,25,33,35],localtunnelstartingport:20,lock:[2,4,6,29,39],log4j2:[24,35],log4j:30,log:[],log_sender:37,logger:[11,24],loggerfor:24,logic:[3,9,10,11,12,16,22,29,30,34,36,37,39,40,43],logictyp:38,login:[8,25,38],loglevel:24,london:[6,8,28,35,37],longer:[2,5,6,11,28,30],longrang:20,look:[2,5,11,12,20,22,24,27,31,33,36,37,39,40,41,43],lookup:6,loop:[2,5,20,38,39],loquitur:27,loss:27,lot:[2,5,9,14,30,33,34,39,43],low:[3,11],lower:2,lowest:[17,22],lurch:11,mac:[15,24,33],machin:[],macos:8,made:[2,5,9,11,26,30,31,36],magicnumb:42,mai:[1,2,3,8,9,11,14,15,16,17,20,22,23,24,26,27,29,30,31,34,35,36,38,39,40,41,43],mail:[31,33],mailbox:26,main:[6,10,11,14,20,22,26,28,30,37,38,43],mainstream:19,maintain:[3,9,16,39,42],maintan:27,mainten:22,major:[11,31],make:[],maker:13,maketransact:12,malici:[11,34],manag:[],mandatori:39,mani:[2,3,8,9,10,11,12,20,27,30,36,37,39],manipul:36,manner:[9,11,30,39],manual:[8,10,11,23,42],map:[],mapchang:38,mappabl:39,mappedschema:29,mappedtyp:29,margin:[],mark:[1,2,4,11,16,29,39],markdown:2,marker:[11,34],market:17,marshal:1,master:[17,31],match:[1,9,11,21,34,36,37,40],math:[],mathemat:36,matter:[11,18,39],matur:[3,4,5,23,24,27,39],maturityd:39,maven:[8,15,30,39],mavenloc:8,mavenpubl:8,maximis:9,maximum:9,maybestx:11,maybetraderequest:11,mbean:24,mean:[1,2,3,7,9,10,11,12,14,16,18,20,21,27,36,38],meandref:38,meaning:[3,4],meaningfulli:37,meant:[11,20],meanwhil:38,measur:[5,18],mechan:[7,16,30],meet:[26,39],mega_corp:[12,41],mega_corp_key:12,mega_corp_pubkey:41,megacorp:12,member:[5,6,30,33],memori:[11,12,22,26],menlo:2,mention:[10,11,14,39],menu:14,mere:5,merg:[9,30,36,39],mergeabl:39,merkl:[],merkleroot:21,merkletreeexcept:21,mess:11,messag:[],messagingserveraddress:[6,26],messagingservic:[22,26],met:[7,36],meta:7,metadata:[37,42],method:[1,2,3,6,7,10,11,12,20,24,26,29,30,34,35,36,39,42],metric:[18,24],micro:[30,40],mid:3,middl:[2,11],middlewar:[16,26],might:[2,5,9,11,15,27,29,34,39],mike:9,mileston:[],min:38,mind:[2,11,27],mine:9,miner:9,mini_corp_pubkey:12,minim:[9,11],minimis:[3,4,9,22],minimum:[1,5,9,36],minor:[30,31],minu:39,minut:[11,13,27],mismatch:[9,39,41],miss:[2,6,11,15,29,39,41,42,43],missingsig:[],mission:24,mistak:[30,34],mix:[2,30],mock:12,mocknetwork:[12,23],mocknod:[12,26],mockservic:36,mode:[6,23,28,30],model:[],modest:9,modif:[26,36,39],modifi:[3,4,5,7,8,11,15,16,36,39,40],modul:[2,6,12,30,39],moment:[11,12,30],monei:[27,39],monitor:[],month:[5,11,31],more:[1,2,3,4,5,6,8,9,11,12,13,14,15,16,18,21,23,24,26,27,28,29,30,32,33,36,37,38,39,42],moreexecutor:2,mortensen:30,most:[2,5,9,11,14,23,24,35,39],mostli:39,motiv:17,move:[4,7,9,11,12,25,30,31,33,38,39,40,41,42],movement:[11,39],movetransact:42,movetransactionbuild:42,much:[2,9,11,13,29,30,33,34,39,43],multi:[],multigraph:38,multilater:[4,30],multipl:[],multipli:5,must:[1,2,3,4,6,7,8,9,10,11,24,26,27,29,30,34,35,36,37,39,40,43],mustafa:30,mutabl:[2,9,36,39],mutat:[9,26],mutual:[3,4,11,34],myfil:24,myident:42,myinfo:42,mykei:36,mykeypair:11,mylegalnam:[6,28,35],mypublickei:11,mysigningkei:42,mysql:19,nail:2,namedbyhash:[],nameserv:6,namespac:11,narrow:[2,25],nativ:[11,14],natixi:30,natur:39,naval:3,navig:[8,18,33],navistar:3,nearestc:[6,8,28,35],neat:41,necessari:[2,3,16,30,31],necessarili:[29,36],nee:30,need:[0,2,3,5,7,9,10,11,12,14,15,16,18,20,21,24,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],neg:36,negoti:[9,36],neither:11,nest:11,net:[4,5,6,7,8,11,12,24,26,28,29,30,32,35,37,39,41],network:[],networkmap:8,networkmapaddress:[6,8,35],networkmapcach:[6,7,11,26,38,42],networkmapservic:[],networkmapupd:38,neutral:19,never:[2,3,9,16,39],newli:[10,42],newnotari:3,newowner:[39,42],newsecurerandom:30,next:[2,5,10,12,15,21,23,30,34,39,42],nextdoubl:38,nextfixingof:10,nextlong:38,nextscheduledact:10,nfinal:37,nice:[27,39],nio:2,noddi:24,node:[],node_dir:8,node_directory:35,nodea:[6,8,35],nodeb:8,nodefilt:20,nodehandl:20,nodehost:20,nodeident:38,nodeinfo:[6,11,26,38],nodeinterestr:[7,27],nodeservic:27,nodesslconfigur:38,nodisruptionwindowm:20,non:[],none:[10,11,18,21,29,40],nonemptyset:30,nordea:30,normal:[1,4,5,7,8,11,20,21,23,26,30,36,37,39,40,42],north:39,notabl:2,notaris:[3,9,11,17,30,33,36,39],notary:11,notary_committed_states:33,notarychang:30,notarychangeflow:3,notarychangeprotocol:[],notaryclusteraddress:[6,26],notaryexcept:42,notaryflow:[11,26,42],notaryident:[11,12,38],notarynod:[11,12],notarynodeaddress:6,notaryprotocol:[],notaryservic:[],notarysig:11,notarysignatur:[11,42],notarytous:36,note:[],noth:[2,9,10,11,30,34,39],notic:[2,33],notif:[20,22,26,37],notifi:[22,23,42],notion:[5,9,30,39],notnul:[39,40],now:[2,8,9,11,12,17,21,24,30,33,35,36,38,39,41,42,43],nugget:39,nullabl:39,nullpublickei:39,number:[2,4,5,7,9,12,16,18,20,25,26,27,29,31,33,35,36,39],numer:[7,9],obj:39,object:[],oblig:[4,5,30,36],obligor:4,observ:[1,3,5,9,10,11,20,23,30,38],observatori:3,obsolet:[10,30],obtain:[],obviou:[2,3,9,27],obvious:[5,16,23],occasion:[14,15],occur:[3,10,11,26,39],occurr:3,odd:39,off:[],offer:[11,15,26,29],offlin:22,offset:5,often:[2,4,5,9,11,15,27,39],oftenor:27,oil:[30,41],old:[3,11,16,30,39,42],omit:[10,18],onc:[1,2,3,7,11,16,28,31,36,39],once:[0,5,8,10,11,16,23,28,29,33,35,36,37,39,43],onchainasset:4,one:[3,15,21,33],ongo:1,onledgerasset:39,onli:[1,2,3,5,6,8,9,10,11,13,16,21,22,23,24,25,26,27,28,30,31,33,34,35,36,39,40,42,43],only:[11,26,35],onto:[1,2,11,39],opaquebyt:38,open:[1,3,8,9,11,15,18,24,26,30,33],openattach:37,opengamma:[18,30],openjdk:[],openssl:20,oper:[5,6,10,11,14,16,24,26,27,30,34,35,36,39,42],opt:[8,20],optim:2,option:[0,2,5,6,10,11,16,20,23,28,29,30,39,40,42,43],oracl:[],orchestr:[19,30,43],ordain:5,order:[0,1,2,3,4,5,9,11,15,18,19,20,23,26,27,29,30,33,35,36,37,38,39,40],ordinari:[9,11,30,39],org:[0,6,35,39,40],organis:29,orient:[],origin:[21,29,30,36,37,39],originalst:3,orm:29,otc:29,other:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,23,25,26,27,28,29,30,33,34,35,36,37,39,41],otherparti:11,othersid:[11,37],otherwis:[1,2,6,7,8,10,11,26,34,38,39],our:[2,3,9,10,11,12,13,14,20,21,26,30,31,33,36,38,39,41,42],ournotari:42,ourselv:[11,39,42,43],oursignatur:11,out:[2,3,4,9,10,11,14,18,21,22,24,26,27,30,31,32,34,36,38,39,40,42],outcom:11,outer:40,outermost:40,outlin:[9,11],outpoint:9,output:[3,4,8,9,11,16,21,25,27,30,33,37,38,39,40,41,42],outref:12,outsid:[8,9,11,26,27,35,43],outstand:4,over:[2,3,5,6,8,9,11,12,16,20,21,22,24,27,29,33,36,39],overal:[3,10,41],overdu:10,overflow:2,overidden:[6,8],overload:[11,36],overlord:16,overnight:36,overrid:[7,10,11,20,29,38,39,40],overridden:7,overutilis:20,overwhelm:9,own:[2,3,4,8,10,11,14,20,23,24,25,26,27,29,30,31,36,41,43],ownablest:[11,36,39],ownedquant:38,owner:[10,11,29,36,39,40,41,42],owner_kei:29,ownership:[11,12,39,42],owningkei:[11,21,39,42],ozturk:30,p2p:30,pack:39,packag:[7,14,29,30,36],packet:9,page:[15,27,31,33],pai:[],paid:[4,5,9,18,39],pair:[9,11,12,26,28,36,38,39],paragraph:20,parallel:[1,9,20,27],parallelis:9,param:[20,29,42],paramet:[1,2,7,10,11,20,24,36,39,40],parameteris:[9,20],parent:[11,16],pars:[6,27,36,39,43],part:[1,2,3,4,8,9,10,11,17,20,21,26,28,29,30,33,34,35,36,39,43],parti:[],partial:[3,9,11,21,34,39,41],partialtx:[11,21],particip:[3,9,25,26,30,39,42,43],particular:[],partner:18,partyandrefer:[2,38,39],partynod:12,partyrefer:[2,39],pascal:2,pass:[7,11,20,21,24,26,29,33,37,39,40,42],password:[1,6,8,24,25,28,30,35,38],past:[2,33,39,43],patch:[2,30],path:[2,6,7,8,10,15,20,22,24,30,38,39],path_to_loadtest_conf:20,pattern:[2,9,38],paus:[8,23],paycash:38,paye:9,payer:[5,9],payment:[4,5,9,10,11,16,18,27,33,39],pdf:[27,37],peer:[11,19,21,25,26,27,39],penni:[29,36,39],peopl:[2,9,11,13,16,39],per:[],perform:[2,3,5,9,10,11,14,16,18,20,27,30,33,36,37,39,40],perhap:[2,9,22,35,39],period:[5,28,33],perman:[11,37,39],permiss:[1,6,17,19,30],persist:[],persistentcashst:29,persistentst:29,perspect:[9,11,26,39],phase:30,phrase:27,physic:[3,26,30,35],pick:[11,22,30,31,39,43],piec:[2,3,9,11,16,20,35,36,39,41],pip:0,pki:[9,30],place:[0,2,5,9,10,11,14,18,19,21,22,27,30,31,33,36,38,39,43],plai:[],plain:6,plan:[9,11,27,30],platform:[3,5,7,8,9,10,11,13,14,21,27,33,34,36,39],pleas:[2,9,29,30,33,37],ploadtest:20,plu:[6,26,36],pluggabl:30,plugin:[],pluginservicehub:[7,11,26,30],point:[1,2,3,4,7,8,9,11,16,20,24,26,27,29,31,34,38,39],pointer:[3,11,36],pointless:2,polish:30,polit:18,poll:[20,28],pool:[2,9],poor:9,pop:15,popul:26,popular:13,popup:15,port:[6,8,20,25,26,30,31,35],portfolio:[],posess:11,posit:[2,9,11,39,42],possess:[3,42],possibl:[9,11,14,18,20,26,27,28,37,39],post:26,postgr:19,potenti:[2,3,11,13,18,39],pound:[36,39],power:[6,9,26],practic:[6,9,18,30,39],pre:[0,5,11,12,28,39,41,43],preced:39,precis:[3,9,19],precondit:[2,39],predict:20,predominantli:14,prefer:[2,15,25,29],prefix:[2,29],preliminari:18,prepar:[9,30,39],prescrib:35,present:[1,3,4,5,6,7,8,11,19,20,23,29,30,32,33,36,39,40,42],preserv:[3,9],press:14,pretend:[24,36],pretti:[9,11],prevent:[18,34,39],previou:[9,11,20,30,36,41,42],previous:[5,10,27,30,42],price:[9,11,27],primari:[14,27],primarili:4,primit:[36,41],print:[1,24,30,33,34,35,38],println:[37,38],printorvisualis:38,prior:42,priv:[],privaci:[2,3,9,11,19,30,39],privat:[2,6,7,9,11,12,28,29,35,37,39,43],privatefoo:2,privatekei:[11,26],probabl:[39,43],problem:[3,9,11,14,15,27,35],proce:11,procedur:[11,28,39],process:[],processor:[9,20],produc:[0,10,23,39,41],product:[2,8,10,13,14,18,19,30,31,35,36],profound:9,program:[1,2,9,24,26,30,33,36,39,43],progress:[],progresstrack:11,project:[8,14,15,17,18,26,28,30,33,39],prolif:30,promis:30,prompt:14,proof:[4,9,21],propag:[1,11,24,39,40],properli:[11,26,34],properti:[],proport:18,propos:[11,17,26,34],proprietari:[18,30],prose:[27,36,39],prospectus_hash:37,protect:[11,18,26,28],protocolhandl:[],protocollog:[],protocollogicreffactori:[],protocoltrack:[],protocolvers:1,prototyp:[2,19,27,30,32,39],prove:[3,9,39],proven:18,provid:[0,1,2,3,4,5,6,7,8,9,11,12,14,16,20,21,22,23,24,25,26,27,29,30,32,33,34,35,36,39,42,43],provision:36,proxi:[1,38],pseudo:27,pseudonom:36,ptx:[11,37],pubkei:41,publicfoo:2,publickei:[],publickeytre:[],publish:8,pull:15,punish:27,purchas:[11,33],pure:[4,9,27],purpos:[3,4,7,11,16,29,32,36,38,39],push:[1,31],put:[],python:0,qualifi:[6,7,29],quantiti:[9,20,36,38,39],quasar:[7,8,11,16,26],quasarscan:[],queri:[1,5,6,7,10,26,27,29,30,33,35,38],queryablest:[26,29],question:[2,3,10,15,27,36],queu:[16,22],queue:[1,2,11,22,26],quick:27,quickcheck:30,quickli:[9,16,28,34,39],quit:[1,2,3,11,14,39],r3cev:20,r3corda:8,r3dlg:31,r3prototyp:0,r3repositori:[],raft:[6,26,30,32,33],rais:[3,40],random:[9,10,20,30,33,36,38,42],randomis:30,randomli:[20,38],rang:[3,29],rapid:[2,8,19,31],rare:[6,36],rate:[],ratesfixflow:21,ratesfixprotocol:[],rather:[2,9,11,22,23,30,35,38,39],raw:[22,24,33],rdbms:[29,30],rdms:30,reach:[3,5,9,10,18,27],reachabl:11,react:20,reactiv:30,read:[2,6,8,9,11,13,17,19,21,24,26,30,33,39,43],readabl:[6,11,13,33],readi:[31,39],readili:[36,40],readme:2,real:[2,18,23,27,28,30,36,39,43],realis:11,realist:36,realiti:5,realli:[2,3,9,11,21,39],reason:[2,3,5,9,11,14,20,30,34,36,39],reassign:39,recal:5,receipt:26,receiv:[1,4,5,7,9,11,16,18,20,26,27,30,31,33,34,37,39],receiveandcheckproposedtransact:11,receiveandvalidatetraderequest:11,receiving:11,recent:[14,30],recipi:[4,9,33,37,39],recognis:[7,9,11,14,39],recommend:[2,14,22,32,33,43],record:[3,10,12,16,26,29,37,38,42],recordtransact:[12,26,42],recreat:11,red:[5,21],redeem:[4,39,40],redempt:39,redesign:30,redirect:35,reduc:[2,8,18],redund:2,ref:[11,12,36,38,41],refactor:30,refer:[2,3,4,5,6,7,9,10,11,14,16,18,26,27,30,32,36,37,39,41,42],referenc:[3,37],refin:30,reflect:[11,17,20,30,39,40],refresh:[14,30],refus:15,regard:[3,7,14,35],regardless:11,regener:[5,31],regist:[],registerflowiniti:[7,11],registerprotocoliniti:[],registerrpckryotyp:[7,38],registr:[7,26],registri:7,regul:39,regular:[11,16,24,33,35,36,39],reissu:39,reissuanc:9,reject:[26,39],rel:[6,8,9,13,14,40],relabelablestep:11,relai:37,relat:[],relationship:[26,39],relax:[20,30],releas:[],relev:[7,8,9,10,16,17,26,30,36,39,40,42],reli:[1,8,9,18,30,34],reliabl:26,relianc:9,relic:24,religi:2,remain:[8,10,11,39],remeb:[],rememb:[2,10,15,34],remind:[11,34],remot:[6,7,8,15,20,23,26,35,37],remotemessagingport:20,remotenodedirectori:20,remotesystemdservicenam:20,remov:[11,21,30,31,38,39],renam:[11,30],render:[2,11,23,25,30],renderifsupport:37,repeat:[2,5,11],replac:[1,3,5,14,18,24,30,31,36,38,39],replai:30,replic:[6,9,32,33],repoint:3,report:[11,25,40],repositori:[2,8,14,15,30,31,33],repres:[2,4,5,9,11,20,26,27,29,30,36,38,39],represent:[1,5,29],request:[1,3,6,7,9,11,17,20,22,26,27,30,34,37],requestingparti:42,requiredcommand:[30,40],requiredflow:7,requiresinglecommand:[39,40],requirethat:[39,40],research:30,resel:27,resend:26,resent:26,reset:[5,23],reshap:9,resid:26,resolut:[9,11,42],resolv:[2,11,12,18,35,36,39],resolvefromtwohash:[],resolvetransactionsflow:[11,12,37],resolvetransactionsflowtest:12,resolvetransactionsprotocol:[],resolvetransactionsprotocoltest:[],resourc:[1,6,7,9,11,20],respect:[2,9,11,33],respend:9,respond:[11,26],respons:[1,3,7,9,10,11,22,26,29,38,42],rest:[3,7,9,11,19,24,30,43],restart:[11,26,28],restor:[11,16],restrict:[2,18,23],restructur:40,restructuredtext:0,result:[2,3,5,6,9,11,12,18,25,26,27,28,29,30,34,38,39,40,42],resultfutur:12,resum:[11,26,28,30],resurrect:11,resync:14,retain:22,rethrown:1,retri:[11,19,22],retriev:[5,11,28,32,37,38],retrieveoutput:41,reus:[1,9,41],reusabl:[16,27,30,37,39],reveal:[3,9,11,21,30],revers:[11,26],revert:4,review:[2,30,31],revis:[5,15],rewrit:11,richer:8,right:[2,11,14,15,24,30,31,33,34,43],rightmost:21,rigid:9,rigidli:2,risk:[11,18],robert:30,robust:30,role:[9,10,26,33,37,43],roll:[5,11,30,33],rollov:[36,39],root:[6,8,21,26,28,31,35],rotat:[24,30],roughli:[3,31],rout:[11,12,14,22,30],row:[24,25,29,33,36,39],rpcexception:1,rpckryo:1,rpcreturnsobserv:[1,38],rpcsincevers:1,rpcuser:[6,25,35,38],rui:30,ruin:41,rule:[2,11,18,26,27,30,39],run:[],runbuy:33,rundemonod:[25,30],runnetwork:12,runnod:[8,18,33],runparamet:20,runrecipi:[33,37],runsel:33,runsend:[33,37],runshellcommandgetoutput:20,runtim:[2,11],safe:[1,2,7,9,11,28,34,38],sai:[2,3,9,14,18,20,33,35,39,42],sake:18,sale:[33,39],same:[1,2,3,4,5,6,8,9,10,11,20,26,27,30,36,39,40,41],sampl:[7,8,11,18,23,30,33],sanction:39,sandbox:[9,10,19,30,34],saniti:11,santiago:30,sate:42,satisfi:[33,36,39],save:[2,11,30,39],scala:[13,39],scalabl:[2,9],scale:[5,34],scan:[],scenario:[9,23,26,36,43],scene:[11,39],schedul:[],schedulablest:[10,26],scheduledact:10,schedulerservic:26,schema:[],schemafamili:29,schemaopt:29,schemaservic:29,scheme:[21,26],scope:[7,9,25,40],scotiabank:30,scrape:24,scratch:[36,39,43],screen:[2,15,25,30,39],script:[0,8,9,33],scroll:33,scrub:11,seamless:13,search:[25,26,39],second:[5,7,11,12,20,33,36,39],secondari:11,secp256r1:30,secret:6,section:[6,9,17,20,30,31,42],securehash:[12,21,36,38,39,40,42],securerandom:30,see:[0,1,2,3,4,5,6,8,10,11,12,14,15,20,21,23,27,28,29,30,32,33,35,36,37,38,39,40,43],seed:11,seek:[9,30],seem:9,seemless:14,seemlessli:14,seen:[2,5,7,11,27,39],segment:8,select:[3,14,15,29,30,39,40],selectschema:29,self:[8,20,30,33],selfissuecommand:20,selfissuest:20,selfissuetest:20,sell:[11,39,43],seller:[],sellerownerkei:11,sellersig:11,sellertradeinfo:11,semi:9,send:[2,3,9,11,12,21,22,24,26,27,30,31,33,37,39,41,42],sendandrec:11,sender:[9,11,33,37],sendsignatur:11,sens:[5,27,39],sensit:[10,18,21,34],sent:[10,11,30,36,39],separ:[3,6,7,8,9,11,21,22,24,27,33,36,39],septemb:18,sequenc:[9,26,30],sequenti:11,seri:11,serial:[1,19,26,39],serialis:[1,2,7,9,11,16,19,39],seriou:[9,31],serious:43,serv:8,server:[1,6,7,8,19,22,24,26,28,30,43],servicehub:[7,8,11,22,26,37,42],servicehubintern:[8,30],serviceinfo:38,serviceload:7,serviceplugin:7,servicetyp:[6,26,42],session:[10,22,26,30],sessionid:10,set:[],setof:[11,12,37,38,40,42],setter:[29,39],settim:[11,36],settl:[4,12,36,37],settlement:[4,11],setup:[8,10,12,23,28,35],sever:[6,8,9,11,26,29,32,33,35,38,39,41,43],sha256:[21,36,39,40],sha256sum:24,sha:[9,24],shape:9,share:[4,5,9,11,16,18,26,27,30,34,37,39,43],shasum:24,she:39,shell:[18,20],shoot:34,shortcut:19,shorthand:41,should:[2,3,4,7,8,9,10,11,15,17,18,19,20,21,26,28,29,30,33,34,35,36,38,39,40,41,43],shoulder:2,shouldn:[11,21,39],show:[9,13,15,23,25,26,30,33,39],shown:[1,6,11,12,23,36],shut:37,shutdown:[11,26],side:[1,9,10,11,14,23,27,33,34,36,37],sidebar:23,sidenot:35,sig:[30,39],sign:[3,5,6,9,11,12,16,17,19,21,22,26,27,30,34,36,41],signal:16,signatureexcept:[],signaturesfromsel:11,signedtransact:[11,12,36,38,39,42],signer:[21,27,33,39,40],signfirsttx:12,signific:[9,30],significantli:[5,20,36,37],signing:11,signoff:3,signwith:[11,12,36,37,39,42],signwithecdsa:11,signwithourkei:11,silver:2,similar:[2,9,11,30,39,40],similarli:29,simm:[],simmvaluationdemo:[18,33],simpl:[1,2,4,5,6,7,9,11,12,14,18,19,20,24,26,30,32,33,36,37,38,39,40,42],simplecash:41,simplecashdoesntcompil:41,simplecashfailswith:41,simplecashsuccess:41,simplecashtweaksuccess:41,simplecashtweaksuccesstopleveltransact:41,simplenam:29,simplenotaryservic:[],simpler:[9,13],simplest:[9,11,35,39,43],simpli:[2,8,9,11,12,20,22,26,29,30,32,36,39,41],simplif:30,simplifi:[2,4,9,26,32,36,39,43],simul:[],simultan:[9,11,36,39],sinc:39,singl:[],singlemessagerecipi:22,singleownerst:42,singleton:[7,11,39,40],singletonserializeastoken:7,site:[2,30,31],situat:[2,9,21],size:[2,5,9,11,38,39,40],skeleton:12,skip:[11,36,39],sl4j:24,sleep:[20,37,38],slf4j:11,slightli:[32,39],slip:31,slot:30,slow:[2,9,20],slowest:9,small:[1,9,10,11,27,33,34,39],smaller:[30,40],smallest:36,smart:[],smooth:39,snake:41,snapshot:[9,30,31,38],snide:0,snippet:11,socket:24,softwar:[9,11,31,34,43],sofu:30,sold:[11,36],solut:11,solv:[9,11,27],solvenc:27,some:[1,2,3,4,7,9,10,11,12,14,18,19,20,21,24,26,27,29,30,33,35,36,38,39,40,41,42,43],somed:39,somehow:20,someon:[3,9,39,42],someth:[1,2,5,9,11,30,33,39,40,43],sometim:[9,11,16,24,36],someusernam:20,somewhat:[1,9,11,20,30],somewher:39,soon:[30,39],sophist:9,sort:[11,27,30],sound:[2,11,39],sourc:[],sourcejar:8,sourceset:24,sparingli:2,spawn:7,speak:30,spec:30,special:[1,3,9,11,41],specif:[1,3,4,7,8,9,10,11,14,16,20,22,24,26,30,36,37,39,40],specifi:[0,1,2,3,4,6,8,9,11,16,19,20,21,28,29,30,35,36,39,40,41,42,43],speed:[9,11,13],spend:[9,11,12,19,26,34,35,39],spent:[9,39,41],sphinx:0,sphinx_rtd_them:0,spin:20,spirit:30,spline:36,split:[9,21,22,30,36,39,40],splittabl:39,splittablerandom:[20,38],spot:30,spread:[3,11],spreadsheet:27,sql:[19,29,30,33],src:[6,11,26,37,43],ssh:20,sshuser:20,ssl:[6,30],sslconfig:38,sslkeystor:[6,28],stabilis:31,stabl:[1,7,31,38],stack:[11,26],stage:[2,4,11,36,39,43],stai:[9,26,39],stake:9,standalon:[23,27,30],standard:[2,7,8,11,14,16,18,23,24,26,30,33,35,36,38,39,40],standardis:[9,36],start:[],startflow:[11,12,37,38],startflowdynam:[11,38],startflowpermiss:38,startnod:38,startprotocol:[6,35],startprotocoldynam:[],startprotocolpermiss:[],startup:[6,7,24,30],startwith:38,state:[],stateandref:[3,11,36,38,39,42],statehistori:42,stateless:9,statemachineinfo:38,statemachinemanag:[],statemachinerecordedtransactionmap:38,statemachinerunid:11,statemachinesandupd:38,statemachinetransactionmap:38,statemachineupd:38,statement:[2,9,11,27,39],stateref:[9,10,21,29,36,42],statesoftyp:39,staticservedir:7,statist:24,status:9,stem:39,step:[],still:[3,9,10,11,15,23,27,30,39,43],stock:[9,27],stone:20,stood:29,stop:[2,11,26,37],stopnod:12,storag:[],storageservic:37,store:[3,6,8,11,12,24,26,28,30,32,33,36,37,39,42],stori:[2,30],straightforward:[11,39],strain:20,straincpu:20,stream:[1,11,22,23,30,38],stress:[2,20],strictli:[5,7,9],string:[6,11,20,27,29,33,36,38,39,42],strip:39,strong:13,strongli:14,structur:[2,7,9,11,15,16,19,21,27,30,36,39],stub:[18,30],studi:39,stuff:2,stx1:12,stx2:12,stx:[11,36],sub:2,subclass:[4,11,29,36,39],subclaus:40,subdirectori:24,subflow:[3,7,11,26,42],subfold:[7,26],subgroup:9,subject:[6,8,16,18],submiss:27,submit:[2,3,11,20,22,28,30,33],subproject:[],subprotocol:[],subscrib:[1,22,30,37,38],subsequ:[16,28,33,39,41],subset:[4,21],substitut:6,subsystem:[7,22],subtask:11,subtl:[2,9],subtract:36,subvert:34,success:37,successfulli:[35,38],successor:[3,10,13],succinct:2,sudo:0,suffer:[9,18],suffic:11,suffici:[9,27,31,33,36,38],suggest:[8,14,22,39],suggestinterestrateannouncementtimewindow:10,suit:[30,37],suitabl:[10,22,26,31],sukrit:30,sum:[18,20,38,39,41],sumcashbi:[11,39],summari:[],summaris:9,sun:2,superclass:[4,30,36],superior:2,supersed:9,supertyp:39,suppli:[4,20],support:[],supportedschema:29,suppos:[11,39],suppress:[2,30],suppresswarn:2,sure:[3,30,31,34,37,39,43],surfac:11,surround:2,surviv:11,suspend:[],suspens:[7,26],swapping_signatures:11,swapsignatureswithsel:11,symbol:[],sync:[26,39],synchronis:[2,3,9,26,33],syntax:[13,39],system:[1,3,6,8,9,11,14,17,19,20,21,24,25,26,29,30,37,39],systemd:[20,35],tab:[2,8,14,15,33],tabl:[8,24,25,26,29,30,33],tableprefix:29,tackl:[30,40],tag:[1,2,16,31],take:[2,5,7,10,11,12,19,20,21,24,28,30,31,33,34,36,39,40,41],taken:[7,39],talk:12,tamper:11,target:[0,2,6,9,12,13,18,23,24],task:[6,8,9,10,11,14],tcp:[8,24,33],team:[],tear:[],teardown:12,techniqu:[2,9,19,27],technolog:17,tediou:[],tell:[0,11,38],templat:[],temporari:[8,11],temporarili:[11,31],tempt:[34,39],ten:39,tend:16,tenor:[5,24,27,36],term:[4,6,9,10,16,18,22,35,36,40],termin:[5,8,11,24,26,33],terminolog:9,test:[],testnam:20,testnet:[6,8,28,30,35],testtimelock:39,text:[2,15,24,30,41],than:[1,2,3,8,9,11,22,23,24,30,36,39],thank:30,thedao:30,thei:[1,2,3,4,5,7,8,9,10,11,16,18,20,21,23,24,26,27,29,30,31,33,34,36,37,39,40],them:[1,2,5,6,7,9,10,11,12,14,15,19,20,21,22,24,26,29,30,31,33,35,36,37,38,39,40,41,42,43],theme:34,themselv:[1,11,12,20,22,23,26,27,33,34,36,38,39],theori:[],therefor:[1,7,8,9,11,15,16,18,19,26,31,34,39],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,20,21,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43],thin:22,thing:[],think:[2,9,11,15,22,34,39],third:[9,18,21,30],thisstateref:10,thorough:11,those:[1,3,9,10,11,18,24,34,39],though:[11,21,24,39],thought:[9,13],thousand:41,threadsaf:2,three:[8,11,21,25,33,36,39],threshold:[16,24,26,30,36],through:[1,5,7,9,10,11,14,22,23,24,26,30,37,39,40,41,43],throughput:[3,9],throwifsignaturesaremiss:[],thrown:[1,11,34,39],thu:[2,3,6,9,10,24,26,27,30,36,39],ticket:11,tidi:12,tighten:39,tightli:11,time:[],timelin:39,timem:39,timeout:1,timestamp:[],titl:15,tls1:26,tls:[22,30],todo:[2,11,39],togeth:[4,7,9,14,21,30,33,39,40],token:[11,36,40],told:2,toledgertransact:36,toler:[3,10],too:[2,11,39],took:11,tool:[11,13,14,16,20,22,23,24,25,29,30,33],toolbar:15,top:[2,7,9,11,15,20,22,25,30,33,38,40],topic:[22,39,43],topicsess:[22,30],toplevel:41,topriv:11,torn:30,tosignedtransact:[11,12,36,37,39,42],tostr:[2,11,29,39],tostringsshort:[],total:[9,20,36],toward:[30,31],towiretransact:[21,36],trace:[11,24,40],track:[],tracker:11,trade:[],tradeoff:[],trader:[],traderdemo:43,traderequest:11,tradit:9,traffic:[6,9,23],transac:16,transact:[],transactionbuild:[11,30,36,37,39,42],transactionforcontract:[39,40],transactionforverif:39,transactionst:[3,21,30,36],transactionstorag:26,transactiontyp:[11,30,37,42],transactionverificationexcept:41,transfer:[34,39,41,42],transit:[26,34,36,39,43],translat:26,transmit:[],transport:[6,8],travel:39,treat:[8,34,39],tree:[],tri:[9,14,30,39],tricki:[9,11],trigger:[4,10,11,20,26,27,33,40],trim:40,trivial:[2,9,37],troubl:15,trust:[4,6,7,9,26,28,34],trustpass:[6,35,38],truststor:[6,26,35],truststorepassword:[6,35,38],truth:11,tunnel:35,tupl:2,ture:9,turn:[9,11,36,39,40,41,43],tutori:[],tweak:[20,30,41],twice:41,two:[],twopartydealflow:10,twopartydealprotocol:[],twopartytradeflow:11,twopartytradeprotocol:[],txb:36,txbit:[],txhash:[9,11,38,39,42],txnid:38,txnnote:38,txt:24,type:[],typenam:11,typeonlycommanddata:39,typesaf:6,typetobui:11,typic:[7,9,10,11,22,24,26,29,34,36,37,39,43],ugli:11,ultim:26,ultimat:24,unaccept:11,unacceptablepriceexcept:11,unavoid:11,unclutt:11,unconsum:[26,29],under:[0,8,18,20,26,30,31,33,36,39,40,41,43],underli:[4,5,9,11,30,36],underscor:2,understand:[9,23,24,39,40,43],unencrypt:6,unexpect:[11,34],unfinish:11,unfortun:[11,34,39],unicredit:30,unifi:[30,43],uniform:10,unindex:15,uniqu:[3,9,11,26,27,30,36,37],uniqueidentifi:[],uniquenessprovid:26,unit:[],univers:30,unix:[8,18,24,33],unknow:3,unknown:36,unless:[2,11,27,31,39,43],unlik:[26,39],unlike:[4,7],unlink:15,unlock:6,unnatur:9,unpack:[8,26,39],unprocess:40,unqiu:10,unread:11,unrecognis:39,unrel:39,unschedul:10,unserialis:11,unset:5,unspent:[9,16],unstarted:11,unsubscrib:1,unsubscript:1,unsupportedoperationexcept:[1,39],until:[1,3,5,9,10,11,12,26,30,31,33,35,41,43],untrust:11,untrustworthydata:[11,30,34],unverifiedtransact:41,unwrap:[11,30],upcom:[10,30],updat:[1,7,8,9,11,15,20,22,26,30,31,37,38,39],update:[14,38],upgrad:[11,15,29,30,39],upgrade:30,uphold:39,upload:[],uploadrat:33,upon:[5,8,11,16,26,39],upward:31,urandom:20,url:[6,8,24,28,30,33,35],usabl:[30,31,39],usag:[],usage:38,usd:[20,25,38],use:[2,4,9],used:16,usehttps:[6,35],useless:39,user1:[6,25,35],user:[0,1,2,6,8,9,11,17,19,20,25,27,30,33,35,38],usernam:[1,6,24,25],usr:0,usual:[2,8,9,33,39],usualli:31,utc:10,util:[3,6,8,12,14,17,24,26,30,36],utilis:[23,38],utiliti:28,uuid:[30,36],vagu:2,val:[2,3,10,11,12,20,21,27,29,36,37,38,39,40,41,42],valid:[],validatedtransact:[12,37],validatingnotaryservic:[],validfrom:39,valu:[2,3,4,5,6,7,9,11,18,21,25,26,27,30,32,33,39,40,41],valuabl:27,valuat:[5,18,30,33],valueof:38,vanilla:[4,5],vararg:38,vari:[],variabl:[2,5,8,9,11,39],variant:[26,39],variou:[2,7,9,11,18,24,26,34,39],vault:[],vaultandupdat:38,vaultservic:[7,11,26],vaultsselfissu:20,vcs:14,vega:30,vehicl:9,vendor:[19,24],verbos:39,veri:[2,4,9,11,14,16,18,26,27,34,39,41,43],verif:[],verifi:[],verifiedtransact:38,verifyclaus:40,verifying:11,verifypropos:30,verifysignatur:11,versa:[4,5,9,11,36],versu:11,vertic:2,vet:34,via:[0,2],vice:[4,5,9,11,36],view:[],virtual:[7,9,16,34],visibl:[3,9,21,25,26,38],vision:17,visual:[25,30],visualis:[22,23,38],vital:11,vpn:35,wai:[1,2,3,8,9,10,11,15,16,18,20,21,22,24,25,27,29,30,33,35,39,41,43],wait:[10,11,12,15,20,26,30,33],waitforallnodestofinish:38,wake:30,wallet:[9,10,11,16,30,39],walletservic:[],want:[1,2,9,11,15,20,21,24,27,30,33,34,36,39,41,42,43],warn:[],watch:34,weak:[27,36],wear:31,web:[6,7,8,18,19,24,26,27,30,33],webaddress:[6,35],webapi:7,webapp:30,webport:8,webserv:35,websit:[14,15],websocket:[],week:13,weekend:5,weight:36,well:[0,2,3,5,7,9,10,11,14,16,19,21,24,26,29,30,37,38,39,40],went:2,were:[2,9,11,18,26,27,39],what:[],whatev:[2,11,23,26,36],when:[1,2,3,4,5,6,7,8,9,10,11,12,15,18,20,22,23,24,25,26,27,28,29,30,33,34,36,37,38,39,41],whenev:[2,14],where:[],wherea:[5,15],wherev:24,whether:[1,3,4,11,20,26,27,35,36,39,40],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,18,19,20,21,22,23,24,26,27,29,30,31,33,35,36,37,38,39,40,41,42,43],whilst:[9,11,23,26,27,30,34,39],white:[7,17,30],whitelist:[4,7,8,10,11],who:[2,6,9,11,13,18,30,36,39],whole:[21,26,32,41],whom:[4,9],whose:[4,24,36],why:[2,9,13,17],wide:[1,2,21],widescreen:2,widespread:2,widget:25,width:2,wiki:[9,39,40],wikipedia:[39,40],window:[3,8,9,11,15,18,23,24,25,28,33],wiretransact:[11,21,27,36],wish:[8,9,11,17,18,27,29,30,36,39,43],wit:35,withattach:12,within:[0,2],withitem:[36,39],withkei:11,withnewown:[11,39],without:[],withoutissu:[11,39],withoutown:[39,40],withowner:39,won:[11,22,25,27,30,38,39,41],word:[2,3,6],work:[1,2,3,5,6,8,9,10,11,14,19,20,23,24,26,27,28,30,32,33,36,37,38,39,42],worker:2,workflow:7,workspac:[6,7,8,26,28],world:[6,9,11,18,23,25,27,35,39,41],worn:39,worri:[2,11,39],worst:9,worth:[2,34,39],worthless:27,would:[1,2,4,5,7,8,9,11,14,16,18,19,23,24,27,34,36,37,39,40,42,43],wouldn:27,wrap:[2,11,22,24,26,30,34,36,39,40,43],wrapper:[2,3,11,38],write:[],written:[0,1,5,9,13,14,30,39],wrong:[1,2,11,41],wrote:9,wtx:[11,21,27],www:0,xcode:14,xml:24,xterm:8,year:[5,11],yet:[2,5,9,11,16,19,23,25,28,30,36],yield:9,york:8,you:[0,1,2,8,9,10,11,12,13,14,15,17,18,19,20,21,22,23,24,25,27,28,29,30,32,33,34,35,36,38,39,40,41,43],your:[],your_usernam:[],yourself:[9,10,34,36],zero:[9,16,39],zip:[9,24,33,37],zone:10,zoneddatetim:10},titles:["Building the documentation","Client RPC","Code style guide","Consensus model","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","Creating a CorDapp","Data model","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Getting Set Up : Faultfinding","Glossary","Welcome to the Corda!","Initial margin agreements","What’s included?","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","Introduction - What is a corda network?","Data types","Using attachments","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","Writing a contract test","Using a notary service","Where to start"],titleterms:{"class":[1,38,39,40],"function":[11,39],about:15,access:24,adding:39,administr:24,adopt:9,against:8,agreement:18,amount:36,api:[38,39],app:[8,18],approach:27,artemismessagingserv:26,assert:27,assertion:2,asset:39,assign:42,attach:[24,37],attachment:[33,37],basic:27,bitcoin:9,brief:26,build:[0,8,28],buyer:11,cash:[4,36],catalogu:4,certif:[28,35],chain:41,chang:3,check:39,claus:[39,40],cli:15,client:[1,38],cluster:20,code:[2,14,34,39],command:39,comment:2,commerci:[4,39,40],commod:4,comparison:9,compil:2,complain:15,composit:36,con:9,configur:[6,20,35],connect:35,consensu:3,construct:39,continu:27,contract:[4,34,39,40,41],control:14,corda:[7,8,14,17,21,35],cordapp:[8,38],cordform:8,creat:[5,8],cryptographi:36,cut:31,data:[9,21,27,36],databas:24,date:36,dbcheckpointstorag:26,dbtransactionmappingstorag:26,dbtransactionstorag:26,debug:[8,40],demo:[25,33,37,43],detail:5,distribut:33,document:0,download:24,e2etestkeymanagementservic:26,encumbranc:39,error:[1,2],ethereum:9,event:[10,26],exampl:[6,10,21],explorer:25,faultfind:15,featur:11,field:6,file:6,fix:24,flow:[11,12,26,34],format:6,framework:[7,26],from:38,fungibleasset:36,further:13,futur:11,gener:[2,39],get:[14,15],git:14,glossari:16,gradl:[8,14,15],group:[39,40],guid:2,guidelin:34,handl:1,happen:39,hibernateobserv:26,hide:21,how:[10,20,39],ident:26,identiti:[],implement:[10,11,26],includ:19,individu:20,initial:18,inmemoryidentityservic:26,inmemorynetworkmapcach:26,inmemorystatemachinerecordedtransactionmappingstorag:26,inmemoryuniquenessprovid:26,install:8,installat:15,instanc:5,intellij:[14,15],interest:[4,5,24],interfac:[23,25],introduct:[10,11,18,26,27,35],irs:33,issu:15,jvm:14,kei:[26,36],kotlin:[13,14,15],kryo:[1,38],lack:15,length:2,lifecycl:[5,36],line:2,load:20,locat:6,log:[24,35],machin:[],make:39,manag:26,map:[22,29],margin:18,math:36,merkl:21,messag:[22,26],mileston:30,model:[3,9],monitor:24,multi:[36,39],multipl:3,name:2,namedbyhash:36,network:[22,23,26,28,35],networkmapservic:26,node:[6,8,24,25,26,35],nodeattachmentservic:26,nodemessagingcli:26,nodeschedulerservic:26,nodeschemaservic:26,nodevaultservic:26,non:39,notari:[3,26,32,33,42],notaris:42,notaryservic:26,note:[13,30],object:29,obligat:4,observabl:1,obtain:[],off:21,oracl:27,orient:39,overview:9,own:35,pai:27,paper:[4,39,40],parti:[11,36,39],particular:39,per:27,permiss:28,persist:[8,26,29],persistentkeymanagementservic:26,persistentnetworkmapservic:26,persistentuniquenessprovid:26,plai:27,plugin:[7,8],portfolio:33,pro:9,process:[18,31],progress:11,properti:2,protocol:1,publickei:36,put:39,raftuniquenessprovid:26,raftvalidatingnotaryservic:26,rate:[4,5,24],rational:9,regist:[1,38],relat:[26,29],releas:[30,31],request:28,requir:[0,39],rpc:[1,38],run:[18,20,25,28,32,33],safeti:1,schedul:[10,26],schema:29,sdk:15,secur:[1,34],seller:11,servic:[8,22,26,27,32,42],set:[14,15,35],sign:28,signatur:36,simm:[18,33],simplenotaryservic:26,simul:23,singl:41,smart:39,sourc:14,space:2,start:[8,11,35,39,43],state:[8,36,39],statemachinemanag:26,step:[18,31],storag:26,storageserviceimpl:26,style:[2,9],sub:11,subprotocol:[],summari:40,support:36,suspend:11,swap:[4,5],tear:21,technic:5,templat:8,test:[12,20,39,41],theori:11,thing:39,thread:[1,2],time:39,timestamp:3,track:11,trade:11,tradeoff:9,trader:[33,43],transact:[21,36,39,41,42],transmit:39,tree:21,troubleshoot:14,tutori:38,two:[11,27],type:[22,36],uniqueidentifi:36,unit:[],upload:24,usag:21,using:[8,37,39,42],util:28,utxo:9,valid:3,validatingnotaryservic:26,vari:27,vault:26,verif:36,verifi:39,version:[1,11,14],via:[14,15],view:8,warn:2,welcom:17,what:[19,23,35],where:[39,43],wire:1,within:[15,26],without:15,write:[11,12,20,27,39,40,41],your:[8,11,24,35,38,39]}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["CLI-vs-IDE","building-the-docs","clauses","clientrpc","codestyle","consensus","contract-catalogue","contract-irs","corda-configuration-file","corda-plugins","creating-a-cordapp","data-model","event-scheduling","flow-state-machines","flow-testing","further-notes-on-kotlin","getting-set-up","getting-set-up-fault-finding","glossary","index","initial-margin-agreement","inthebox","loadtesting","merkle-trees","messaging","network-simulator","node-administration","node-explorer","node-services","oracles","permissioning","persistence","release-notes","release-process","running-a-notary","running-the-demos","secure-coding-guidelines","setting-up-a-corda-network","transaction-data-types","tutorial-attachments","tutorial-building-transactions","tutorial-clientrpc-api","tutorial-contract","tutorial-contract-clauses","tutorial-cordapp","tutorial-integration-testing","tutorial-test-dsl","using-a-notary"],objects:{},objnames:{},objtypes:{},terms:{"00z":42,"0_xx":17,"10000l":22,"1000l":39,"100l":45,"17t16":42,"1mb":13,"300px":[],"5000l":22,"5xxx":0,"8u45":[],"___":44,"____":44,"______":44,"_________":44,"_before_":13,"_do_":13,"_foo":4,"abstract":[2,9,11,13,28,29,31,32,42,43,44],"boolean":[11,14,22,32,41,42,43],"break":[13,29,33,40],"byte":[4,11,13,29,32,46],"case":[2,4,5,8,9,10,11,13,14,16,20,22,29,31,32,35,38,39,42,43,44],"catch":[4,13,16,36],"class":[],"default":[3,4,6,8,9,10,13,16,18,20,22,23,25,26,27,28,30,32,35,36,37,38,42,44],"enum":[32,41],"export":[13,26,31],"fa\u00e7ad":26,"final":[5,7,9,11,13,14,17,23,29,32,35,37,40,41,42,45,46],"float":[6,7,12],"function":[],"import":[2,4,11,12,13,16,17,29,31,32,37,38,40,42,43,44,46],"instanceof":[42,43],"int":[4,22,31,42,47],"long":[4,6,9,11,12,22,31,40,42,43,44],"new":[0,4,5,7,8,9,10,11,13,15,24,25,26,27,28,30,32,33,35,38,39,40,41,42,43,44,45,46,47],"null":[8,12,14,22,29,31,39,40,42,43,47],"public":[4,8,10,11,13,18,21,24,26,28,30,32,35,37,38,42,43,44,46],"return":[2,3,4,5,7,9,12,13,14,22,26,28,29,31,32,36,39,40,41,42,43,44,45,46,47],"short":[2,12,20,33,35],"static":[9,10,11,13,20,29,35,42,44,46],"super":[2,4,43],"switch":[13,32,42],"throw":[2,3,4,13,22,23,29,40,41,42,43,47],"transient":13,"true":[5,8,11,14,18,22,29,30,37,41,42,44],"try":[0,3,4,11,13,17,32,34,41,44],"var":[14,31,40,41],"void":[42,43,46],"while":[25,38,41],abil:[11,25,32],abl:[5,8,10,11,13,20,23,26,27,28,29,30,32,35,42,47],abort:[5,29,40],about:[],abov:[2,4,7,11,13,20,23,26,29,35,37,41,42,43,44,45,46],absent:[2,8],absolut:[5,8,11],abstractnod:[9,28],abstractstatereplacementprotocol:32,acccess:9,accept:[4,5,6,11,16,18,29,35,40,42],acceptablepric:13,acceptsfileupload:29,access:[],accid:13,accident:[4,36,40],accompani:[4,42],accord:[2,40],accordingli:[37,43],account:[11,22,32,38],accrual:7,accur:[5,20,35],accuraci:11,achiev:[5,11,37,38],achiv:23,ack:32,acknowledg:[13,28],acquir:35,acronym:[20,35],across:[6,8,11,22,28,31,32,35,39,40],act:[2,5,8,11,13,28,29],action:[2,12,22,28,29,34,40,42,45],activ:[7,8,9,12,16,22,25,28,31,32,35,40,42,44],actor:[4,11,13],actual:[5,7,13,20,22,28,29,35,36,39,42,43,46,47],adapt:[4,13,29],add:[2,4,10,11,13,18,20,22,23,24,26,28,29,34,35,36,39,40,41,42,44,45,46,47],addattach:[14,39],addcommand:[13,29,40,42,47],added:32,addedg:41,addfix:29,adding:[],addinputst:[13,42],addit:[0,4,5,8,10,11,28,31,32,38,40,41,42,44],addition:[11,13,15,16,31,33,35,44],addmessagehandl:32,addnod:41,addoutputst:[13,42,47],address:[0,5,8,10,11,13,24,27,28,32,37,42,44,45],addsignatureuncheck:29,addvaulttransactionnot:41,adequ:2,adjust:[4,7,33,42],admin:[27,28,30],administr:[],advanc:[6,7],advantag:11,adventur:[],advertis:[3,8,28,32,34,41,42,45,47],advertisedservic:[10,41,44,45],advic:33,advis:[0,29],aesthet:35,affect:[17,29,37],affinityexecutor:4,afraid:4,after:[0,2,5,6,7,9,10,12,13,14,15,17,18,22,23,28,29,35,40,42,44],again:[7,11,13,14,22,28,29,42,44,45,47],against:[],agent:[22,26,28],agentlib:10,aggreg:[11,20,35,42,43],agre:[7,12,13,16,18,20,35,36,40,44],agree:[7,20,35],agreement:[],ahead:[13,42],aid:[32,40],aim:[4,11,22],aka:[18,19],albeit:32,albertsen:32,alert:17,algorithm:[11,21,32,38,42],alia:8,alic:45,alice:[18,27,38,41,42,45,47],alice_key:39,alicecli:45,alicefutur:45,aliceparti:47,aliceproxi:45,alicevaultupd:45,align:[19,32,40,44],aliv:13,all:[1,2,3,4,5,6,7,8,9,10,11,13,14,15,17,18,19,22,23,26,27,28,29,31,32,33],allclaus:[],allcomposit:[],allevi:5,alloc:35,allow:[0,3,4,5,6,7,8,9,10,11,12,13,18,20,22,24,28,29,31,32,35,36,38,40,41,42,44,45,46],allpartysignedtx:[13,40],almost:42,along:[2,5,13,14,16,29,42,44,47],alongsid:42,alreadi:[4,10,12,13,19,20,23,29,32,35,39,40,42,43,44,46,47],alright:13,also:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,20,22,23,24,25,26,27,28,29,30,31,32,35,38,39,40,42,43,44,45,46,47],alter:[8,13,26,40],altern:[1,4,8,19,24,25,26,27,38,42,44,45],although:[7,8,11,13,16,17,27,28,32,39,42,44],alwai:[4,11,12,13,19,26,31,37,38,40,42,44],amend:40,among:44,amongst:0,amount:[],amountrequir:40,amqp:[24,32],analysi:[2,11],analyt:[20,35],andresen:11,ani:[0,2,3,4,5,6,7,9,11,12,13,14,16,18,20,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,44,45,47],annot:[3,4,9,13,31],announc:[29,33],anonym:[11,28],anonymis:28,anoth:[3,4,5,10,11,13,17,18,20,26,28,29,32,35,39,42,46,47],another:40,answer:[4,29],anti:44,anticip:4,any:[2,3,6,12,20,26,28,35,40,41,43],anybodi:11,anyclaus:[],anycomposit:[],anycompost:43,anyon:[5,42],anyth:[5,11,13,14,36,38,42,43,44],anytim:30,anywher:[29,32,42],apach:24,apart:[5,32,40],api:[],app:[],appear:[17,29,35,42,44],append:[8,13,26],appendix:19,apple:16,appli:[4,6,7,10,11,22,27,40,42],applic:[9,10,11,18,24,28,29,32,35,36,42,44],applicat:18,applyfix:7,appoint:5,approach:[],appropri:[4,24,28,29,31,32,34,40,44],approv:[11,12,13,30,40],approxim:5,april:32,arbitrari:[2,4,11,13,29,36,38,41],arbitrarili:[11,45],architectur:[3,19,29],area:[0,31],aren:[3,12,21,42],arg:[10,32,41,44],argument:[3,4,9,11,13,22,41,42],aris:[11,16],around:[5,11,13,14,23,32,33,38,40,41,42,44,45],arrai:[11,41,44],arrang:13,arraylist:29,arriv:[13,18,29,45],arrow:[7,17,44],art:38,artemi:[10,18,24,37,44],artemisaddress:[8,37,41],artemismessagingcompon:45,artemismq:[8,28],artemisport:[10,44],articl:[5,11,12,13,29,32,42],artifact:10,artifactid:44,ascertain:[35,44],ask:[4,13,29,42],aspect:13,assembl:[0,2,11,23,42],assemblesharedtx:13,assert:[],assertequ:[14,39,45],asset:[],assetforsal:13,assetmismatchexcept:13,assettosel:13,assettypenam:13,assign:[],assist:[12,13,31,38],associ:[2,5,11,12,24,29,31,32,37,38,40,41,42,44],assum:[5,11,13,19,22,23,29,36,40,41,42,43,47],assume:[13,23,29,44],assumpt:13,assur:[20,35,43],asynchron:[22,40],atom:[5,11,13,32,35,42],attach:[],attachment:[],attachmentdemo:39,attachmentstorag:28,attack:[5,36],attch:23,attempt:[11,17,29,36],attent:[13,44],attest:5,attribut:4,audit:[11,40],authent:[3,5,28,32,41],authenticatedobject:[2,38,42,43],author:[4,5,16,28,33,47],authoris:[8,13,28,38,41],auto:[4,42],autoclos:3,autom:[11,12,42],automat:[0,1,3,5,8,10,12,13,24,25,28,29,31,32,35,39,42,44,47],auxiliari:28,avail:[0,1,5,7,8,10,12,13,16,25,26,28,29,32,33,35,36,39,41,42,44,47],avoid:[3,4,11,13,29,31],awai:[3,11,13,41,44],await:[10,40],awar:[3,4,12,13,28,32,42],awg:33,awkward:[4,13],axi:7,back:[3,4,9,11,13,20,28,29,32,35,36,38,40,42,45],backend:32,background:[0,3,4,9],backoff:24,backport:33,backward:[13,33],bad:[4,13,42,46],balanc:[2,5,6,11,27,40,42,46],banana:38,bananast:38,banco:32,band:13,bandwidth:4,banish:18,bank:[7,8,11,32,35,37,38,39,42,43,45,47],bankrupt:42,bankruptci:[5,11,20,29,35],banner:37,bar:17,barreca:32,barrel:32,base:[4,5,7,8,10,11,12,13,18,22,24,26,28,29,30,32,35,37,38,41,42,44,47],basedir:[8,10,37],basedirectori:41,basi:[7,12,16,25,26,28,44],basic:[],bat:[0,10,20,25,27,30,35,44],batch:[22,44],bbva:32,bear:13,becaus:[4,5,11,12,13,16,17,19,26,28,29,38,40,42,43,44,46,47],becom:[4,7,11,12,13,29,33,38,40,43,44],been:[5,7,8,11,13,16,18,20,29,30,32,33,35,38,40,42,43,44,47],befor:[0,5,7,10,11,12,13,14,22,28,29,32,33,34,38,39,40,41,42,43,44],beforesign:29,begin:[4,11,19,28,40,42,44],behav:42,behaviour:[2,5,6,8,22,26,40,43,44,46],behind:[13,18,24,42],believ:32,belong:23,below:[4,7,10,11,12,13,16,20,23,28,35,38,40,42,44],beneath:18,beneficiari:6,benefit:[5,13],best:[4,40],bet:29,better:[4,15,32,42],between:[4,5,7,11,12,13,18,24,25,28,29,31,32,33,35,36,38,40,41,42,44],beyond:[11,40],bft:32,big:[4,11,13,32,42],bigdecim:[29,38],bilater:[6,7,32],bill:42,bin:[35,41,44],binari:[11,23,28,29,41],bind:[5,8,11,19,25,26],bip:11,bit:[32,38,42,44,46,47],bitbucket:[],bitcoinj:13,blah:4,blank:[4,26,27,30,42],block:[2,3,4,5,10,11,13,28,29,32,35,36,40,43,44,45],blockchain:[11,13,21,23,42],bloom:4,bloomfilt:4,blotter:35,blue:[7,23],bob:[18,27,38,42,45],bobclient:45,bobfutur:45,bobproxi:45,bobvaultupd:45,bodi:[4,20,35],boil:[11,22],boilerpl:10,bond:[42,43],bookkeep:42,bookmark:35,boost:21,boot:44,bootstrap:[8,10,44],bore:42,boss:[19,44],both:[0,5,6,7,11,13,14,15,18,22,25,29,31,32,35,36,37,38,40,41,42,44],bottom:17,bounc:14,bound:[5,13,32,37,40,42],box:[],branch:[19,23,32,33,44],branch_nam:44,brand:32,breach:11,bread:[],breakpoint:[20,35,44],breviti:[0,43],bridg:28,brief:[],briefli:[19,24,29,44],bring:[11,22,35,45],broadcast:[11,40,42,47],broadcasttransactionflow:47,broadcasttransactionprotocol:[],broader:37,broke:4,broken:[32,44],broker:[8,24,28,44],brought:40,brows:[20,26,35],browser:[8,35,44],bubbl:[16,17],buffer:3,bug:[4,16,17,32,33],bugfix:33,bui:13,buildcertsigningrequestutilityjar:30,buildcordajar:[8,30,37],builder:[13,14,32,36,39,40,47],buildfilteredtransact:40,buildmerkletransact:[23,29],buildscript:[10,18,44],buildsrc:44,buildtradepropos:40,built:[0,8,10,13,23,32,36,42,44],bulk:[11,40],bullet:4,bunch:44,bundl:11,busi:[11,12,13,18,21,29,31,32,38,40,42],businesscalendar:38,butter:[],button:[35,44],buyer:[],bytearrai:31,bytecod:[11,13,42],cach:[24,39,44,47],calcul:[5,7,12,13,20,23,35,36,38,42],calculateoursignatur:13,calendar:[7,29,38],call:[0,2,3,4,5,7,9,11,13,15,26,28,29,32,33,35,36,38,39,40,41,42,46,47],callback:[3,4,13,28,32],caller:[29,40,42,47],came:13,camel:4,can:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,20,21,22,23,24,25,26,27,28,29,30,31,32,34,35,36,37,38,39,40,41,42,43,44,45,46,47],candid:31,cannnot:9,cannot:[2,5,6,11,18,25,29,32,36,38,40,42,44,47],capabl:42,capit:4,capitan:1,capsul:25,capsule_cache_dir:10,captur:[9,12,40],cardon:32,care:[4,5,9,11,13,14,36,40,46],carefulli:15,carri:[0,28,40],cash_stat:31,cashcommand:[22,41,45],cashflow:[41,45],cashflowresult:45,cashkt:42,cashprotocol:[8,37],cashschema:31,cashschemav1:31,cashsigningpubkei:13,cashstat:40,cast:3,catastroph:[20,35],categori:37,caught:3,caus:[4,16,17,18,20,35,42,44],cbc:22,ccy_cod:31,cent:38,center:42,central:[32,38,42,47],ceo:38,cer:8,certain:[2,4,9,20,32,35,40,42],certainli:10,certainti:5,certif:[],certificatesigningservic:[8,30,37],certificatespath:41,certifici:45,certsigningrequestutil:[30,37],cev:30,chain:[],chaincash:46,chaincashdoublespend:46,chaincashdoublespendfailswith:46,challeng:11,chanc:[4,13],chang:[],changenotari:5,channel:13,charact:[4,8],characterist:18,charg:29,charli:38,chart:43,check:[],checkabl:[29,32],checkfixisnearexpect:29,checknotnul:42,checkout:[16,17,44],checkpoint:[9,28,32],checksignatur:29,checkstat:42,checksufficientsignatur:[13,38,40,47],child:[0,13,38],children:[13,38],childrenfor:13,choic:[4,5,11,16,42,44],choos:[0,5,27,32,42,44,47],choreographi:18,chose:0,chosen:[5,11,13,22,47],christma:44,chronolog:12,chunk:[42,43],circl:25,citi:44,cl1:2,cl2:2,cl4:2,cl5:2,claim:[11,42],clarifi:42,clash:[4,31,44],classic:42,classpath:[3,9,10,11],claus:[],clauseverifi:43,clean:[0,13,32],cleaner:32,cleanup:32,clear:[0,2,3,13,22,36,38],cleardatabasebeforerun:22,clearer:13,clearli:[4,40],cli:[],click:[17,27,35,44],cloan:0,clock:[5,11,12,13,29,35,40],clone:[4,17,42,44],close:[3,5,6,44],closeabl:3,closer:5,closur:[4,46],cloud:26,cluster:[],cmd:[23,42,43],coars:11,code:[],codebas:[4,31],cognit:11,coin:11,collabor:32,collaps:22,colleagu:4,collect:[3,4,18,22,26,31,32,34,40,42,43],collector:[4,13,26],collis:4,colon:0,column:[10,26,31],com:[1,16,17,30,32,44],combin:[11,18,38,42,43],come:[3,11,13,14,32,33,36,42],command:[],commanddata:[2,29,42,43],commercial_pap:[42,43],commercialpap:[2,6,31,42,43],commercialpaperlegaci:42,commit:[5,8,12,14,19,28,33,34,35],committe:[20,35],common:[2,6,7,9,11,13,19,28,31,32],commonleg:7,commonli:40,commun:[8,13,18,28,32,36,37],compani:[29,30,43],companion:[13,29,42,43],compar:[11,19,23,35,42,44],compat:[3,18,33],compel:5,compet:11,complementari:12,complet:[0,3,11,12,13,19,28,30,32,35,38,39],completetx:40,complex:[4,6,11,14,20,31,35,38,39,42,45],complic:[13,29,40,42,43],compon:[0,2,9,10,12,18,19,24,28,32],compos:[2,13,32,38,42,43],composit:[],compositeclaus:2,compositekei:[13,28,38,40],compound:32,compris:[7,44],comput:[7,18,29,44],computeoursignatur:13,concaten:23,concept:[],concern:[11,13,42],concis:32,conclus:[11,29],concret:[9,28],concurr:22,concurrenthashmap:4,condit:[2,5,9,22,28,29,32,43,46],conf:[8,10,28,30,37,44],confgur:31,config:[8,10,22,26,30,32,35,41,44,45],configur:[],configurationfil:26,configuretestssl:45,confirm:[5,17,18,20,35,40],conflict:[5,11,22,47],confus:[0,13,43],connect:[],consequ:40,conserv:[2,40],conserveamount:2,consid:[4,7,11,12,18,29,32,33,38,40,42],consider:[40,42],consist:[7,8,11,13,18,20,22,28,29,32,35,37,40,43],consol:[0,26,32,35,37,41,44],consortium:18,constant:[4,31,42],constantli:[29,44],constraint:[13,29,32,42,43,44,45],construct:[],constructor:[2,9,12,13,29],consum:[3,5,11,12,18,28,32,35,38,40,42,47],consumedcommand:2,consumingtx:47,consumpt:[12,29,40],contact:[13,28,32],contain:[2,5,7,8,9,10,11,13,18,23,24,26,27,28,29,30,32,33,35,38,39,40,42,43,44,46,47],content:[4,5,9,10,11,12,14,17,26,29,32,38,40,44],context:[4,11,26,28,29,38,40,47],contin:29,continu:[],contract:[],contracthash:43,contractreject:46,contractst:[2,5,12,23,31,32,38,40,41,42],contractu:40,contrast:[11,13,29],contribut:38,control:[],conveni:[2,4,11,29,38,40,42],convent:[7,13],convers:[27,38],convert:[2,5,6,7,14,28,31,32,38,40,42],convinc:[13,23,38],coordin:8,copi:[0,4,11,13,24,26,28,39,40,42,44,46,47],copycat:34,copyonwritearraylist:4,copyright:4,copyvault:22,corda:[],corda_dev_ca:8,corda_gradle_plugins_vers:10,corda_vers:[10,44],cordaapp:44,cordacadevpass:[8,37,41],cordapluginregistri:[9,10,29,41,44],cordarpccli:[3,41,45],cordarpcop:[3,13,41],cordarpcopsimpl:28,cordpp:44,core:[6,9,10,11,13,17,19,22,26,28],corner:17,corpor:43,correct:[6,11,13,17,29,32,33,35,40,42,44,46],correctli:[11,13,17,18,28,29,32,40,42],correspond:[3,18,22,35,38,42,43],correspondingli:[4,39],cost:[3,29,42],could:[4,5,6,11,13,22,29,36,38,40,42],couldn:[23,29],count:[7,35],countabl:32,counter:[4,13,44],counterparti:[6,7,18,20,35,36,40],counterparty:44,countri:[29,38,44],coupl:[13,14,22,41,44],cours:[13,22,26,29,31,42],coven:42,cover:[5,6,11,13,20,29,35,38,42,44],cpu:22,crash:[13,28,29],crazi:44,creat:[],createcommand:47,createdummyirs:7,createsomenod:14,creation:[7,11,23,42],creator:29,credenti:[27,41,44],credit:[20,32,35],crisi:[20,35],crisp:42,criteria:6,critic:[11,33],crop:11,crypto:[32,44],cryptograph:[18,23,38],cryptographi:[],csr:32,ctrl:44,curl:[26,44],currenc:[2,6,7,13,22,27,31,32,38,40,42],current:[0,3,4,5,7,8,10,11,12,13,19,21,22,23,24,25,27,28,29,30,31,32,33,34,36,38,41,42,44,46,47],currenti:25,currentstep:[13,29],currenttim:13,currentvault:40,currentwallet:[],curv:7,custodi:[14,38],custom:[3,5,8,9,13,26,28,31,32,35,38],customis:[3,31,41],cut:[],cutoff:22,cycl:[4,13,42],dai:[5,7,13,26,29,33,38],daili:44,daniel:32,danks:32,dashboard:[26,27],data:[],databas:[],databaseschema:31,databasetransact:14,dataset:[7,20,35],datasourc:[8,37],datasourceclassnam:[8,37],datasourceproperti:[8,37],datastructur:22,date:[],dateoffset:32,daterollconvent:38,david:32,dcapsul:10,dead:24,deadlin:[29,38],deal:[4,13,29,35,38,42],dealstat:38,debt:[6,20,35],debugg:10,decd098666b9657314870e192ced0c3519c2c9d395507a238338f8d003929de9:26,decd:26,decentralis:[11,29,32],decid:[17,23,29,31,40,42,43],decis:[5,11,40,42],declar:[4,8,9,28,46],dedic:4,dedupl:[28,32],defaultissu:42,defens:40,defin:[2,4,5,9,11,13,14,21,22,26,28,31,32,38,41,42,43,44,46],definit:[2,5,13,18,32,38,42],delai:[7,29],deleg:[40,43,47],delet:[4,11,13,28,32,42],deliber:[11,46],deliv:[6,14,28,38,44],deliveri:[13,21,24,35,44],deliveryaddress:44,deliveryd:44,demand:[5,11,13,32],demo:[],demonstr:[0,16,20,32,35,44,45],denial:5,denot:23,dens:4,depend:[0,4,5,10,11,12,13,14,16,17,18,20,29,32,35,37,40,42,44],dependson:[10,44],deploi:[0,10,18,19,41],deploy:[10,18,25,44],deploynod:[8,10,20,35,41,44],deployvisualis:25,deposit:[42,46],deprec:32,deregist:24,deriv:[0,7,13,18,31,32,38,42],describ:[4,5,11,12,13,19,20,22,23,28,35,36,38,41,42,44,47],descript:[2,4],deserv:[22,33],design:[4,5,11,15,18,19,29,32,36,42,43,44],desir:[9,13,38],desktop:26,despit:[13,39,42],destroi:[6,11,40,42],destructur:42,detail:[],detect:4,determin:[0,2,6,7,12,17,18,40,42,43,44,45],determinist:[3,22,32,45],dev:[8,22,26],develop:[0,4,8,10,11,13,15,16,19,28,30,31,32,33,35,40,42,43,44],developer:44,devic:[8,11],devis:11,devmod:[8,30,37],diagnos:37,diagram:[7,42],dialogu:44,diamond:18,did:23,didn:[4,13,23,33,42,44],differ:[2,4,5,6,7,8,9,10,11,12,13,16,22,27,29,31,32,35,38,40,41,42,43,44,45,46],differenti:47,difficult:13,difficulti:43,digest:5,digit:[11,13,29,32,40,42],digitalsignatur:[13,29,40,47],dir:[30,37],direct:[4,18,28,31],directli:[0,3,4,13,14,18,24,26,28,32,35,38,40,41,42,43,44,45,47],directori:[0,1,8,10,17,20,22,26,28,30,35,37,44],directthreadexecutor:4,dirnam:[10,44],dirti:42,disabl:[28,38],disadvantag:11,disagr:[20,35],disambigu:31,discard:36,discov:11,discoveri:25,discuss:[11,13,29,38,40,44],disk:[13,24,32,38],disobei:29,displai:[0,5,32,35,41],disput:[5,7,42],disrupt:[22,24,32],disruptionpattern:22,disruptionspec:22,distinct:[4,37],distribut:[],distrust:[5,13],divid:5,divis:38,dlog4j:26,doc:[0,1,3,4,19,32,41,44,45],docker:26,docsit:[1,33,44],doe:[4,5,6,7,8,10,11,12,13,14,19,20,21,26,28,29,30,31,35,36,40,42,44,45,46,47],doesn:[2,4,5,11,13,14,17,21,26,29,36,42,46,47],dokka:1,dollar:[38,42,45,46],dollars:[42,45,46],domain:[18,32,38,42],domicil:42,domino:[20,35],don:[3,4,11,13,15,16,17,22,27,29,33,35,36,38,42,43,46],done:[0,1,2,3,11,13,14,16,22,23,30,32,35,41,42,44],dot:[7,23],doubl:[11,13,21,27,28,37,42,44],doubt:4,down:[4,8,11,13,22,27,39,40,42,43,44,45],download:[],downsid:[4,11],drain:[3,13],draw:[32,41],drawn:41,drive:[11,40],driven:35,driver:[0,8,26,31,32,41,44,45],driverdirectori:41,drm:29,drop:44,dsl:[0,10,18,32,44,45,46],dt_socket:[0,10,44],due:[0,4,5,7,11,12,13,15,16,20,28,31,35,42,43],dummi:[6,14,46],dummy1:14,dummy2:14,dummy_cash_issuer:46,dummy_notary_key:14,dummy_pubkey_1:[42,46],dummy_pubkey_2:46,dummycontract:[14,47],dump:41,duplic:[13,23],durat:[12,29,40],durationsecond:22,dure:[4,7,8,9,10,13,25,26,28,32,42],dynam:[9,11,32,42],each:[0,2,3,4,5,7,8,9,10,11,12,13,18,22,23,25,28,29,31,32,33,35,37,38,40,41,42,43,44,45,46],earli:[4,6,28],earlier:[0,36],earliest:[7,12],easi:[4,11,15,29,32,42],easier:[4,10,13,16,32,42],easiest:[3,42],easili:[0,4,13,20,35,42,44],echo:44,econom:7,ed25519:32,edg:41,edge:41,edit:[0,26,37,44],edition:[],editor:17,effect:[7,8,11,13,14,20,31,35,46],effort:16,either:[0,2,3,4,5,6,7,8,9,11,13,17,18,22,23,31,35,38,41,42,44,46],elbonia:38,element:[4,11,18,23,29,40,42,44],elementari:[43,44],elimin:[21,32],els:[5,10,11,13,14,28,29,38,40,41,42,43,47],elsewher:9,elucid:40,email:13,emailaddress:30,embed:[8,9,11,21,23,26,29,32,44],embedd:24,emit:[3,32,45],emoji:39,empti:[8,32,42,46],emptyledg:46,emptyset:[2,39],enabl:[0,8,9,10,28,32,39,43],enact:[20,35],enc:22,encapsul:[2,4,29,38],enclos:4,encod:[29,40],encount:[12,28,40],encourag:[31,39],encrypt:[30,40],encumb:42,encumberedst:42,encumbr:[31,42],encumbranc:[],end:[2,4,5,7,11,13,19,22,28,29,33,40,43,44],endeavour:44,endpoint:[10,24,26,44],enforc:[2,4,11,42],enforceverifyorfail:46,engin:[20,35],england:43,english:[4,42],enhanc:32,enjoy:32,enorm:13,enough:[4,13,14,20,35,40,42,45],ensur:[2,4,5,9,11,13,17,18,23,28,30,32,33,36,38,40,42,43,44],ensure:[5,17,20,29,35,44],enter:[10,20,35,44,45,46],entir:[5,7,11,13,19,28,29,42,44],entireti:7,entiti:[5,11,23,29,31,38,42],entitl:41,entri:[7,8,10,11,13,31,32,36,42,43],enumer:[7,31,35,40,44],environ:[0,4,10,13,16,29,40],envisag:42,equal:[2,5,13,32,38,40,42,43,46],equiti:31,equival:[4,7,27,28,34,38,40,42],eras:16,escal:29,especi:[38,40],essenti:[0,26,28,29,40,42,43],establish:[12,16,24,35,37,45],etc:[0,4,5,6,7,13,18,20,21,27,29,32,33,35,37,38,42,43,44],euribor:[26,29],euro:38,evalu:[7,26,29,43],even:[3,5,11,13,15,20,23,28,29,31,32,35,42,43,46],event:[],eventu:[22,28,37],eventual:[5,33],ever:[4,11],everi:[0,2,3,5,9,11,13,22,23,24,28,29,31,32,33,35,36,38,42],everybodi:11,everyon:[5,29,42],everyth:[5,36,41,42],evid:[29,40],evolut:[11,43],evolv:[31,32,37,41,42,44],exact:[0,5],exactli:[11,28,29,38,42],examin:[4,10,11,14,42],exampl:[],exampleapi:44,exampleclientrpc:44,exampleflow:44,exampleplugin:44,examplerpccordapluginregistri:41,examplerpcvalu:41,exampleservic:44,exampletest:44,exampleweb:44,exce:22,excel:29,except:[2,3,4,9,13,36,40,42],exception:[0,4,13],excess:4,exchang:[7,13,18,28,38,40],exclud:[8,31,40],exclus:6,execut:[0,2,5,10,11,12,13,18,22,25,27,28,32],executor:4,exhaust:[28,32],exist:[4,5,6,7,8,10,11,12,19,25,28,30,31,32,38,41,42,44,46],exit:[2,6,8,14,27,28,30,32,41,42],exitcash:41,expand:[27,40,44],expect:[3,4,6,8,12,13,22,28,29,30,31,32,33,35,36,38,39,40,42,43,44,45,46],expectedtypenam:13,expectev:45,expens:[3,4],experi:[10,16,32,33,44],experienc:11,experiment:[4,32],expir:30,explain:[4,12,13,22,25,30,32,44],explan:[2,4,25,29,41],explicit:[4,11,13,40,42],explicitli:[4,9,11,46],explictli:40,explor:[4,11,14,17,21,26,27,32,40,42,44],explorer:[],expos:[4,9,10,11,12,13,26,28,31,32,38,40,41,47],expose:38,exposur:[6,7,18],expound:16,express:[5,7,11,18,32,38,42,46],ext:[10,44],extend:[2,4,5,9,10,13,15,27,28,29,32,38,42,43],extens:[0,4,9,13,18,25,26,28,29,32,36,38,40,42],extent:11,extern:[8,13,28,37,39,40,44],extraadvertisedserviceid:[8,28,34,37],extract:[11,26,29,35,38,40,42],extractcommand:43,extrem:[5,11,15,18,22],face:[42,43],facevalu:[2,42],facil:[18,28],facilit:44,fact:[0,4,5,7,11,13,18,29,32,37,42,44,46],factor:[7,11,20,35],fail:[2,9,39,42,43,46],failswith:46,failur:[13,18,39,46],fairli:[4,14,20,35],fake:[],fals:[4,8,13,14,29,37,38,40,42,47],famili:31,familiar:[3,11,42,44,47],famou:[11,32],fanci:42,far:[13,29,35,40,42,43,45],fashion:[4,20,31,35],fast:[11,14],fault:13,faultfind:[],fear:18,featur:[],fed:25,feed:[5,29],feedback:32,feel:[42,44],fetch:[24,26,28,29,39],fetchtransactionsflow:39,fetchtransactionsprotocol:[],few:[0,4,13,15,26,29,33,35,40,42,43,44],fiber:[13,28,29],field:[],file:[],fill:[4,13,35,40,42],filter:[2,4,22,23,29,31,32,40],filtercommand:[23,29],filteredleav:[23,29],filteredtransact:[23,29,40],filterfun:[23,29],filterisinst:42,filterst:2,finalis:[7,13,32],finalisetransact:[],finalityflow:[39,40,47],finalityprotocol:[],financ:[10,13,32,44],financi:[11,12,13,18,20,32,35,38,40],find:[0,1,11,13,14,15,16,19,21,26,29,36,40,44],fine:[3,11,46],finish:[13,32,44,45],fire:13,firewal:[],first:[0,2,3,4,5,7,8,10,12,13,14,15,16,17,18,24,26,29,30,31,32,35,38,39,40,41,42,43,44,45,47],firstli:[9,35,42,44],fit:[4,11],fix:[],fixabledealst:38,fixedleg:7,fixedlegpaymentschedul:7,fixedratepaymentev:7,fixer:29,fixingflow:29,fixingroledecid:12,fixingsessioninitiationhandl:12,fixof:[23,29],fixqueryflow:29,fixqueryhandl:29,fixsignflow:29,fixsignhandl:29,flag:[8,26,30],flat:31,flesh:38,flexibl:[5,11,38],flight:[3,11],floatingleg:[7,12],floatinglegpaymentschedul:7,floatingratepaymentev:7,flow:[],flowhandl:[13,41,45],flowlog:[12,13,28,29,41],flowlogicreffactori:[9,12],flowstatemachineimpl:28,flowtrack:13,flux:10,fly:13,focu:23,focus:[2,43],fold:[4,41],folder:[1,8,10,28,30,35,40,44],follow:[1,4,5,8,10,11,12,13,16,17,22,25,26,27,28,29,30,34,35,40,41,42,44,46,47],font:4,foo:[4,41],foobrokenexcept:4,foot:36,fooutil:42,forc:[11,26,32,42,46],fordai:[12,29],foreach:41,foreign:40,foreignexchangeflow:40,forev:33,forget:[13,29,42],form:[3,5,10,11,12,13,23,28,29,35,40,42,43,44],format:[],former:41,formerli:32,formula:32,forth:[3,13,40],fortun:[20,35],forward:[13,24,28,29,33,35],found:[2,8,13,16,17,26,29,32,33,38,40,43,44],four:[37,42,44],fourpmtimelock:42,fraction:38,frame:[4,13,20,28,35],framework:[],free:[5,11,13,16],freed:3,freeli:29,freez:40,frequenc:7,frequent:[],fresh:[29,42,46],freshkei:13,freshli:[38,44],friend:37,friendli:28,from:[],fromcountri:38,front:[42,44],frontend:21,frustrat:11,ftx:[23,29],fulfil:[6,11],full:[4,5,6,8,9,13,20,23,24,25,28,35,40,41,42],fulli:[4,5,8,9,11,13,18,25,28,31,32,37,38,40,44,45],fullnodeconfigur:41,fullysign:13,fun:[2,5,12,13,14,22,23,29,31,39,40,41,42,43,44,46,47],fund:[11,20,35,40,42],fundament:[5,11,42],fungibl:[2,6,18,38,40,42,43,44],fungibleasset:[],further:[],futur:[],futuretransact:41,fuzz:32,fxrespons:40,fxtransactionbuildtutori:40,fxtransactionbuildtutorialtest:40,gain:21,garbag:[3,4,13,26],gather:[19,22],gatherfrequ:22,gatherourinput:40,gatherremotest:22,gave:29,gavin:11,gbp:[2,43],gcd:11,gear:33,gener:[],generatecount:22,generatefix:29,generateiniti:14,generateirsandfixsom:7,generateissu:[42,43],generatemappedobject:31,generatemov:[42,43],generateredeem:[42,43],generatespend:[13,40,42],generatetransact:41,generatexxx:40,genuin:4,get:[],getamount:46,getanynotari:47,getbefor:42,getbloomfilters:4,getclass:42,getcommand:[42,43],getcontract:42,getdummy_cash_issuer:46,getdummy_pubkey_1:46,getdummy_pubkey_2:46,getencumbr:42,getfacevalu:42,getfix:7,getflowtrack:13,getinput:[32,42],getinstat:32,getissuanc:42,getkei:42,getlegalcontractrefer:[42,43],getmaturityd:42,getmega_corp:46,getmega_corp_pubkey:46,getnotari:47,getnotarysignatur:13,getorthrow:14,getoutput:[32,42],getoutst:32,getowner:[42,43],getparticip:42,getprotocoltrack:[],getprotocolvers:3,getrequiredcommand:43,getresourceasstream:39,getresultorthrow:22,getsign:[42,43],getter:[31,42],gettimestamp:42,gettransact:[14,40],getvalu:[42,43],getvaulttransactionnot:41,git:[],github:[1,8,16,17,44],giusepp:32,give:[5,10,11,14,24,28,29,32,39,40,42],given:[0,2,5,9,11,13,23,29,31,32,34,38,41,42,43,47],givenpric:13,glanc:27,global:[4,5,11,32,38],glue:13,gnu:1,goal:[4,11,18,21,33],goe:3,gone:[13,32,42],good:[0,4,13,14,23,42,43,46],got:[13,23,26,29,45],gover:42,govern:[20,35],gps:5,gr1:2,gr2:2,gr3:2,grab:44,grade:38,gradl:[],gradlew:[0,10,17,20,22,25,27,30,35,37,41,44,45],grain:3,grammar:4,granular:11,graph:[3,11,14,21,26,31,32,41],graphit:26,graphstream:41,great:[0,20,32,35],greater:4,greatest:11,green:[17,44],grip:16,groom:11,group:[],groupclaus:43,groupclauseverifi:[],groupid:44,groupingkei:[2,43],groupstat:[2,42,43],grow:41,guarante:[18,33,38],guava:[4,42],gui:[13,17,44],guidelin:[],hack:[11,32],had:[5,13,14,32,38,42],hand:[12,13,16,25,28,37,40,42,44],handa:32,handi:14,handler:[10,12,13,28],handshak:29,happen:[],happi:[35,39],happili:29,hard:[4,11,13,33],harder:[11,36,42],hardwar:8,hase:7,hash:[5,11,13,14,18,21,23,26,29,32,38,40,41,42],hashcod:[2,42],hashmap:22,haskel:32,hasn:22,hassl:13,hat:33,have:[0,2,3,4,5,6,7,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,26,27,28,29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47],haven:[42,44],head:[2,41],heap:13,hearn:11,heart:42,heavi:33,heavili:11,hedg:[6,7],heirarchi:4,held:[28,31,42],hell:13,hello:13,help:[4,11,12,13,25,29,35,40,42,44],helper:[2,7,9,13,28,38,40,42,47],henc:[5,7,11,28],her:42,here:[0,4,5,8,10,11,13,14,15,17,18,19,23,25,26,29,31,32,38,40,41,42,43,44,46],herself:41,hidden:[24,28],hide:[],hierach:0,hierarch:13,hierarchi:13,high:[11,13,32],higher:[3,4,5,26,44],highest:19,highli:[0,32],highlight:32,hint:0,histor:29,histori:34,hit:[11,39],hoc:32,hocon:8,hold:[2,9,11,22,23,28,32,40],holder:[4,11,42],holidai:[7,29,38],home:[17,35],homepath:[10,44],hood:46,hope:28,hopefulli:[],hospit:13,host1:22,host2:22,host:[8,10,22,25,28,29,30,37,44,45],hostandport:8,hostil:36,hostnam:[37,44],hotspot:4,hour:13,hous:27,how:[],howev:[0,5,6,7,8,11,13,23,28,29,30,31,34,38,39,40,42,43,44,46],html:[1,4,44],http:[1,8,16,17,20,26,28,29,30,35,37,39,42,43,44],https:8,hub:[13,18],human:[5,8,11,13,29,35],hundr:13,hurt:[13,29],icon:16,ide:[],idea:[0,4,11,13,16,17,21],ideal:[13,42],ident:[],identicon:32,identifi:[7,9,11,13,18,20,23,24,26,28,29,31,32,35,38,40,43,45],identiti:[],identityless:11,identityservic:28,ifmatch:32,ifnotmatch:32,ignor:[8,13,41,42,43,44],iii:9,illegalargumentexcept:[4,13,29,41,42,43,46],illegalstateexcept:[2,4,40,42,43],illustr:[25,38,42],illustrat:4,imag:[23,44],imagin:[2,4,13,42,43],immedi:[3,11,28,40],immut:[4,7,11,29,42],immutabl:[4,11],immutablelist:42,imper:4,implement:[],impli:[13,31],implic:[5,11,13],implicit:45,implicitli:7,important:[19,33],importantli:40,importattach:39,impos:[29,42],imposs:[11,23,29],improv:[32,33,42,43],improve:11,improvement:32,inact:28,inadvert:42,includ:[],include:9,inclus:[2,23],incom:[28,32],incompat:46,incomplet:22,inconsist:0,inconveni:42,incorpor:[16,29],increas:[4,20,35],increment:[0,3],inde:29,indent:4,independ:[5,20,29,31,35,43],index:[7,11,12,17,31,33,40,42,44,47],indexsourc:12,indic:[3,4,7,8,12,13,32,37,40,42],indicat:22,individu:[],indivis:38,industri:[15,16,18,20,26,35],inf:[9,44],infer:46,influenc:26,info:[13,14,31,41],inform:[4,5,8,9,11,13,14,17,27,28,29,30,32,38,39,42,43,44,45],infrastructur:[3,11,14,21,26,28,32,42],ingredi:40,inher:11,inherit:[4,42,43],inidividu:40,init:29,initi:[5,9,13,17,20,22,28,29,32,35,37,40,41],initial:[],initialis:[14,25,28,31,47],inlin:[13,40],inmemorynetworkmapservic:28,inner:[],inoutgroup:[2,42,43],input:[2,5,6,11,13,18,19,20,22,23,27,29,32,34,35,39],inputcash:46,inputindex:47,inputslist:40,inputst:47,inquisit:44,insert:[4,5,14,26,28,29,31,40],insid:[3,9,11,13,14,23,28,35,36,40,42],inspect:[22,44,45],instal:[0,1,8,10,12,16,17,32,35,41,42,44],installdist:41,instanc:[],instance:46,instant:[4,12,13,29,38,40,42],instanti:[9,11,12,13,26,32],instat:46,instead:[4,11,13,14,21,24,28,32,38,42,47],instigat:5,institut:11,instruct:[16,17,18,26,39,41,42,44],instruction:19,instrument:[6,7,12,28,40,44],insuffici:[11,40],insufficientbalanceexcept:42,integ:[3,32,38,42,47],integer:42,integr:[0,4,8,11,13,16,17,20,23,26,29,31,32,35,39,44,45],integrat:19,integrationtest:45,integrationtestingtutori:45,intellig:4,intend:[4,6,10,11,13,14,19,26,27,28,29,31,36,38,44,46],intent:[2,9,25,29,32,42],intention:4,inter:32,interact:[3,4,11,13,14,24,29,32,40,42],interchang:[18,38,40],interest:[],interest_r:[8,37],interfac:[],interior:32,interleav:22,interledg:32,intermedi:40,intermediari:[20,35,38],intern:[4,9,10,13,24,26,28,31,32,38,42,44],internalis:4,interop:[15,32,42],interoper:28,interpol:38,interpret:[4,11,22],intersect:42,interv:[22,38],intervent:28,intesa:32,introduc:[4,5,12,18,29,32,42],introductori:[19,44],intuit:[4,27],invalid:[5,13,29,38,42],invari:[22,42,45],investig:13,invoc:[3,13],invoic:39,invok:[3,4,9,11,12,13,26,28,29,32,44],invoke:13,invokeflowasync:[],invokeprotocolasync:[],involv:[5,6,11,13,28,34,38,40,42,45,47],ipsa:29,irrelev:12,irs:[],irsdemo:[8,23,35],irsexport:7,irstest:7,irsutil:7,isbefor:42,isconsist:22,isda:[20,32,35],isdebug:44,isempti:[29,40,42],isinstanc:13,isn:[3,4,11,13,36,38,42],isnotari:41,isnotempti:39,isol:43,issu:[],issuanc:[6,38,42,43],issue:[2,6,18,22,41,42,43],issuecash:[22,41,45],issuecommand:43,issuedbi:[45,46],issuer:[6,11,13,14,27,38,40,42,43,46],issuer_kei:31,issuer_ref:31,issueref:[41,45],issuerparti:31,issuerref:31,issuetransact:47,item:[18,40,42,44],iter:[13,32,33,42],iterabl:[31,41],iterat:[29,40],itself:[3,5,7,8,11,12,13,20,24,26,28,29,31,32,35,37,39,40,41,42,46],jar:[0,1,8,9,10,11,25,26,30,32,37,39,40,44],jarandsourc:10,java:[0,2,3,4,9,10,11,12,13,15,16,18,26,28,29,30,31,32,37,38,39,41,42,43,44,46],javaag:40,javaclass:[13,31],javacommercialpap:42,javadoc:[4,10,44],javadocjar:10,javafx:32,javatesthelp:46,javax:31,jax:9,jdbc:[8,10,26,31,32,35,37,44],jdbcdatasourc:[8,37],jdbcx:[8,37],jdk1:17,jdk:[16,17,32,38,42,44],jdwp:10,jersey_vers:44,jetbrain:[15,16,17,44],jms:24,jmx2graphit:26,jmx:26,jmxtran:26,job:[13,22],jobs:22,johann:32,join:[8,24,31,32,42],jolokia:26,jpa:31,json:[8,26,28,44],judgement:4,jump:35,junit:44,just:[3,4,11,13,16,17,20,22,24,26,29,32,35,36,38,39,40,41,42,44,46,47],jvm:[],kdoc:4,keep:[11,13,40,42,44],kei:[],kept:[13,30,47],keymanagementservic:[13,28,29],keypair:[13,28,29,42,47],keystor:[8,28,30],keystorepassword:[8,37,41],keyword:[4,46],kick:13,kill:22,kind:[11,13,19,29,36,38,42,44],knob:22,know:[3,5,11,12,13,14,15,23,29,35,36,40,42,43,44,46,47],knowledg:29,known:[7,11,14,16,18,20,23,28,29,32,33,35],knownfix:29,koan:16,korea:42,kotlin:[],kotlin_vers:44,kryo:[],label:[13,46],lack:[],lambda:[13,26,46],land:7,lang:[9,46],languag:[3,4,10,11,13,15,16,17,18,32,38,42,43],larg:[11,13,24,29,32,35,38,39,40,42],larger:[4,11,36],last:[13,22,29,33,46],lastli:44,late:16,lateinit:14,latenc:5,later:[3,4,13,14,16,21,29,31,32,36,37,38,41,42,43,44,45],latest:[4,9,16,17,32,40,44],latestrecord:40,latex:32,latter:[4,41,42],launch:[12,29,41],layer:[8,11,13,14,24,28,29,31,32,34],layout:[10,25,32],lazi:29,lazili:26,ldap:32,lead:[4,11,43],leader:8,leaf:[18,23],leak:[3,5,11,13,29],learn:[11,13,14,15,19,35,38,42],least:[8,19,22,35,39,42,44],leav:[2,4,13,23,27,29,38],ledger:[5,6,7,11,13,18,19,26,29,31,32,35,37,38,39,40,42,44,45,46],ledgertransact:[13,32,38],leewai:36,left:[13,25,30,35,43,44,46],leg:[7,12],legaci:28,legal:[5,8,11,28,29,30,32,38,40,42,47],legalcontractrefer:[42,43],legalident:[14,40,41,45,47],legalidentitykei:[40,47],legallyidentifi:[13,29],less:[13,32,39,43],lesser:42,let:[2,4,11,12,13,14,22,23,24,26,29,32,35,38,39,40,41,42,43,44,46,47],letmein:[8,37],letter:[4,24],level:[0,2,4,5,7,9,13,17,19,20,22,23,24,26,27,28,32,35,36,38,40,42,43,46],lib:[1,10,25,30,37,40,44],liber:4,libor:[7,26,29],librari:[0,3,4,8,13,18,19,20,26,28,29,32,35,38,41,42,44],licens:[4,20,35],license:44,life:[13,42],lifecycl:[],lifecyl:6,lifetim:[7,9],lightweight:[14,18],like:[2,3,4,5,7,11,12,13,14,16,22,23,24,25,26,29,32,33,38,40,41,42,43,44],likewis:[29,42],limit:[2,6,11,18,22,42,47],line:[],linear:[28,38],linearhead:40,linearheadsoftyp:40,linearid:40,linearst:[38,40],liner:4,link:[4,11,13,29,32,37,38,44,45],linkabl:11,linkag:11,linux:[10,26,32],list:[0,1,2,8,9,11,13,22,23,28,29,31,32,33,34,35,38,40,41,42,43,44,47],listen:[0,4,28,41,44],listenablefutur:[],listof:[14,29,31,40,41,42,44,45],liter:11,littl:[4,13,42,43,44,46],live:[7,9,13,20,28,32,35],livelock:11,lizard:18,llc:30,load:[],loadtest:22,loan:[6,7,29],local:[0,1,8,9,10,11,13,17,18,19,22,25,26,28,31,32],local_branch_nam:44,localcertificatesbasedirectori:22,locald:29,localhost:[8,20,26,27,35,37,44],localtunnelstartingport:22,lock:[4,6,8,31,42],log4j2:[26,37],log4j:[32,44],log:[],log_sender:39,logger:[13,26],loggerfor:26,logic:[2,5,11,12,13,14,18,24,31,32,36,38,39,40,42,43],logictyp:41,login:[10,27,41],loglevel:26,london:[8,10,30,37,39,44],longer:[0,4,7,8,13,30,32,35],longrang:22,look:[0,2,4,7,13,14,22,24,26,29,33,35,38,39,42,43,44,46],lookup:8,loop:[4,7,22,41,42,45],loquitur:29,loss:29,lot:[4,7,11,16,32,35,36,42],low:[5,13],lower:[4,40],lowest:[19,24],lurch:13,mac:[],machin:[],macos:[10,32],made:[4,7,11,13,28,29,32,33,38,40,41,44],magicnumb:47,mai:[0,3,4,5,10,11,13,16,17,18,19,22,24,25,26,28,29,31,32,33,36,37,38,40,41,42,43,44,45,46],mail:[33,35],mailbox:28,main:[0,8,12,13,16,22,24,28,30,32,39,41,43,44],mainstream:21,maintain:[5,11,18,42,47],maintan:29,mainten:24,major:[0,13,32,33],make:[],maker:15,maketransact:14,malici:[13,32,36,40],manag:[],mandatori:42,mani:[4,5,10,11,12,13,14,22,29,32,38,39,42,43,44],manifest:0,manipul:[38,40],manner:[11,13,32,41,42,43],manual:[0,10,12,13,25,40,47],map:[],mapchang:41,mappabl:42,mappedschema:31,mappedtyp:31,margin:[],mark:[3,4,6,13,18,31,42],markdown:4,marker:[13,36],market:[19,44],marshal:3,master:[19,33,44],match:[2,3,11,13,23,29,36,38,39,40,41,43,45],materi:43,math:[],mathemat:38,matter:[13,20,29,35,42],matur:[5,6,7,25,26,29,42],maturityd:42,maven:[0,10,17,32,42,44],mavenloc:10,mavenpubl:10,maximis:11,maximum:11,maybestx:13,maybetraderequest:13,mbean:26,mean:[3,4,5,9,11,12,13,14,16,18,20,22,23,29,35,38,40,41,43],meandref:41,meaning:[5,6],meaningfulli:39,meant:[13,22,44],meantim:45,meanwhil:41,measur:[7,20,35],mechan:[9,18,29,32],meet:[2,28,40,42,44],mega_corp:[14,46],mega_corp_key:14,mega_corp_pubkey:46,megacorp:14,member:[7,8,32,35],memori:[13,14,24,28,40],menlo:4,mention:[12,13,16,29,42],menu:[16,44],mere:7,merg:[11,32,38,40,42,44],mergeabl:42,merkl:[],merkleroot:[23,29],merkletreeexcept:[23,29],mess:13,messag:[],messagingserveraddress:[8,28],messagingservic:[24,28],met:[9,38,44],meta:[9,44],metadata:[39,44,47],method:[2,3,4,5,8,9,12,13,14,22,26,28,29,31,32,36,37,38,40,42,47],metric:[20,26,35],micro:[32,43],mid:5,middl:[4,13],middlewar:[18,28],midpoint:44,might:[4,7,11,13,17,29,31,36,40,42,44],migrat:40,mike:11,mileston:[],min:41,mind:[4,13,29],mine:11,miner:11,mini_corp_pubkey:14,minim:[2,11,13],minimis:[5,6,11,24],minimum:[3,7,11,38,40],minor:[32,33],minu:42,minut:[0,13,15,29,44],mismatch:[11,42,46],miss:[4,8,13],missingsig:[],mission:26,mistak:[32,36,40],mix:[0,4,32],mock:[14,44],mocknetwork:[14,25],mocknod:[14,28],mockservic:38,modal:44,mode:[8,25,30,32],model:[],modest:11,modif:[28,38,40,42],modifi:[5,6,7,9,10,13,17,18,38,40,42,44],modul:[4,8,14,32,40,42,44],moment:[13,14,32],monei:[29,40,42],monitor:[],month:[7,13,33],monthli:44,more:[0,2,3,4,5,6,7,8,10,11,13,14,15,16,17,18,20,23,25,26,28,29,30,31,32,34,35,38,39,40,41,42,43,44,45,47],moreexecutor:4,mortensen:32,most:[0,2,4,7,11,13,16,25,26,37,42,43,44],mostli:42,motiv:[19,44],move:[2,6,9,11,13,14,27,32,33,35,40,41,42,43,46,47],movement:[13,42],movetransact:47,movetransactionbuild:47,much:[4,11,13,15,29,31,32,35,36,40,42],multi:[],multigraph:41,multilater:[6,32],multipl:[],multipli:7,must:[0,2,3,4,5,6,8,9,10,11,12,13,26,28,29,31,32,36,37,38,39,40,41,42,43,44],mustafa:32,mutabl:[4,11,38,42],mutablelistof:40,mutat:[11,28,40],mutual:[5,6,13,36],myfil:26,myident:[29,47],myinfo:[29,40,47],mykei:38,mykeypair:13,mylegalnam:[8,30,37],mynodeinfo:29,mypublickei:13,mysigningkei:[29,47],mysql:21,nail:4,namedbyhash:[],nameserv:8,namespac:13,narrow:[2,4,27],nativ:[13,16,40],natixi:32,natur:[0,40,42],naval:5,navig:[10,20,35,44],navistar:5,nearestc:[8,10,30,37,44],neat:46,necessari:[4,5,18,29,32,33,44],necessarili:[31,38],nee:32,need:[0,1,2,4,5,7,9,11,12,13,14,16,17,18,20,22,23,26,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],neg:[38,44],negoti:[11,38,40],neither:13,nest:[13,45],net:[2,6,7,8,9,10,13,14,26,28,30,31,32,34,37,39,40,41,42,44,45,46],network:[],networkmap:[10,44],networkmapaddress:[8,10,37,44],networkmapcach:[8,9,13,28,41,47],networkmapservic:[],networkmapupd:41,neutral:21,never:[4,5,11,18,42],newdeal:29,newli:[12,44,47],newnotari:5,newowner:[42,47],newsecurerandom:32,newstat:40,next:[4,7,12,14,17,23,25,29,32,36,42,44,45,47],nextdoubl:41,nextfixingof:12,nextlong:41,nextscheduledact:12,nfinal:39,nice:[29,42],nio:4,noddi:26,node:[],node_dir:10,node_directory:37,nodea:[8,10,37,44],nodeb:[10,44],nodec:44,nodefilt:22,nodehandl:22,nodehost:22,nodeident:41,nodeinfo:[8,13,28,41,45],nodeinterestr:[9,29,40],nodeservic:[],nodesslconfigur:41,nodex:44,nodisruptionwindowm:22,non:[],nonc:43,nondeterminist:45,none:[2,12,13,20,23,29,31,35,43],nonemptyset:32,nordea:32,normal:[2,3,6,7,9,10,13,17,22,23,25,28,32,38,39,40,42,43,47],north:42,notabl:[4,44],notaris:[],notary:13,notary_committed_states:35,notarychang:[32,40],notarychangeflow:5,notarychangeprotocol:[],notaryclusteraddress:[8,28],notaryexcept:47,notaryflow:[13,28,40,47],notaryfutur:45,notaryident:[13,14,41,45],notarynod:[13,14],notarynodeaddress:8,notaryprotocol:[],notaryservic:[],notarysig:13,notarysignatur:[13,47],notarytous:38,note:[],noth:[4,11,12,13,32,36,42,44],notic:[4,35,43],notif:[22,24,28,39],notifi:[24,25,47],notion:[7,11,32],notnul:[42,43],now:[4,10,11,13,14,19,23,26,32,35,37,38,40,41,42,44,45,46,47],nugget:42,nullabl:42,nullpublickei:42,number:[0,2,4,6,7,11,14,18,20,22,27,28,29,31,33,35,37,38,40,42,43,44],numer:[9,11],obj:[42,43],object:[],oblig:[6,7,32,38,40,44],obligor:6,observ:[3,5,7,11,12,13,22,25,32,41,44],observatori:5,obsolet:[12,32],obtain:[],obtian:44,obviou:[4,5,11,29],obvious:[0,7,18,25],occasion:[0,16,17],occur:[5,12,13,28,42,45],occurr:5,odd:42,off:[],offer:[13,17,28,31,44],offlin:24,offset:7,ofsecond:40,often:[4,6,7,11,13,17,29,40,42],oftenor:29,oil:[32,46],old:[5,13,18,32,40,42,47],omit:[12,20,35],onc:[3,4,5,9,13,18,30,33,38,40,42,45],once:[1,7,10,12,13,18,25,30,31,35,37,38,39,40,42,44],onchainasset:6,one:[2,5,17,23,29,35,40,44],ongo:3,onledgerasset:42,onli:[0,2,3,4,5,7,8,10,11,12,13,15,18,23,24,25,26,27,28,29,30,32,33,35,36,37,38,40,41,42,43,44,45,47],only:[13,28,37],onto:[3,4,13,42],opaquebyt:[32,41,45],open:[2,3,5,10,11,13,16,17,20,26,28,32,35,41,44,45],openattach:39,opene:19,opengamma:[20,32,35],openjdk:[],openssl:22,oper:[7,8,12,13,16,18,26,28,29,32,36,37,38,40,41,42,47],oppos:0,opposit:2,opt:[10,22,44],optim:4,optimis:32,option:[0,1,4,7,8,12,13,18,22,25,29,30,31,32,40,42,43,44,45,47],optional:[8,40],oracl:[],oracleparti:29,orchestr:[21,32],ordain:7,order:[0,1,3,4,5,6,7,11,13,17,20,21,22,25,28,29,31,32,35,37,38,39,41,42,43,44,45],ordernumb:44,ordinari:[11,13,32,42],ordinarili:29,org:[1,8,37,42,43,44],organis:[0,31],orient:[],origin:[23,31,32,38,39,40,42,43,44],originalst:5,orm:31,osx:44,otc:31,other:0,otherparti:[13,29],othersid:[13,39],otherwis:[3,4,8,9,10,12,13,28,29,36,40,41,42,45],our:[0,4,5,11,12,13,14,15,16,22,23,28,29,32,33,35,38,40,41,42,43,44,46,47],ourkei:40,ournotari:47,ourselv:[13,29,42,47],oursign:40,oursignatur:13,ourstat:40,out:[0,2,4,5,6,11,12,13,16,20,23,24,26,28,29,32,33,34,35,36,38,40,41,42,43,44,47],outcom:13,outer:43,outermost:[],outlin:[11,13,29,32],outpoint:11,output:[0,2,5,6,10,11,13,18,19,23,27,29,32,35,39],outref:[14,40],outsid:[10,11,13,28,29,37],outstand:6,over:[0,4,5,7,8,10,11,13,14,18,22,23,24,26,29,31,32,35,38,40,42,44],overal:[5,12,40,46],overdu:12,overflow:4,overidden:[8,10],overload:[13,38],overlord:18,overnight:38,overrid:[2,9,12,13,22,29,31,41,42,43],overridden:9,overutilis:22,overwhelm:11,own:[],ownablest:[13,38,42],ownedquant:41,owner:[12,13,31,38,40,42,43,46,47],owner_kei:31,ownership:[13,14,42,47],owningkei:[13,23,29,40,42,47],ozturk:32,p2p:32,pack:42,packag:[9,16,31,32,38,44],packet:11,page:[17,29,33,35,44],pai:[],paid:[6,7,11,20,35,42],pair:[11,13,14,28,29,30,38,40,41,42],pane:17,paragraph:22,parallel:[3,11,22,29,45],parallelis:11,param:[22,31,47],paramet:[3,4,9,12,13,22,26,29,32,38,40,42,43],parameteris:[11,22,40],parent:[13,18],pars:[8,29,38,42],part:[0,2,3,4,5,6,9,10,11,12,13,17,19,22,23,28,29,30,31,32,35,36,37,38,40,42,43,44],parti:[],partial:[5,11,13,19,23,29,36],partialmerkletx:29,partialtx:[13,23],particip:[5,11,27,28,29,32,42,47],particular:[],partner:[20,35,40],partyandrefer:[4,41,42],partynod:14,partyrefer:[4,42],pascal:4,pass:[2,9,13,22,23,26,28,29,31,32,35,39,40,42,43,45,47],password:[3,8,10,26,27,30,32,37,41],past:[4,35,42,44],patch:[4,32],path:[4,8,9,10,12,17,22,24,26,32,40,41,42,44],path_to_loadtest_conf:22,pattern:[4,11,40,41],paus:[10,25],paycash:[41,45],paye:11,payer:[7,11],payload:29,payment:[6,7,11,12,13,18,20,29,35,42],pdf:[29,39],peer:[13,21,23,27,28,29,42,44],penni:[31,38,42],peopl:[4,11,13,15,18,42],per:[],perfect:43,perform:[0,4,5,7,11,12,13,16,18,20,22,29,32,35,38,39,42,43,44],perhap:[4,11,24,37,42],period:[7,30,35,40],perman:[13,39,40,42],permiss:[],persist:[],persistentcashst:31,persistentst:31,perspect:[11,13,28,42],pertin:44,phase:32,phrase:29,physic:[5,28,32,37],pick:[0,13,16,24,32,33,42],piec:[4,5,11,13,18,22,37,38,42,46],pip:1,pki:[11,32],place:[1,4,7,9,11,12,13,16,20,21,23,24,29,32,33,35,38,41,42,43,44],plai:[],plain:8,plan:[11,13,29,32],platform:[5,7,9,10,11,12,13,15,16,23,32,35,36,38,42,44],pleas:[4,11,16,31,32,35,39,44],ploadtest:22,plu:[8,28,38],pluggabl:32,plugin:[],pluginservicehub:[9,10,13,28,29,32],pluginserviceregistri:44,point:[3,4,5,6,9,10,11,13,18,22,26,28,29,31,32,33,36,40,41,42,43,44],pointer:[5,13,38],pointless:4,polish:32,polit:[20,35],poll:[22,30],pool:[4,11],poor:11,pop:[17,44],popul:[28,40],popular:15,popup:[16,17],port:[0,8,10,22,27,28,32,33,37,44],portfolio:[],portion:40,posess:13,posit:[4,11,13,42,47],possess:[5,47],possibl:[2,11,13,16,20,22,28,29,30,32,35,39,40,42],post:[28,44],postgr:21,potenti:[4,5,13,15,20,29,35,42,44],pound:[38,42],power:[8,11,28],practic:[8,11,20,32,35,40,42],pre:[1,7,13,14,16,30,42,44,46],preced:42,preceed:0,precis:[5,11,21],precondit:[4,42],predic:45,predict:22,predominantli:16,prefer:[0,4,17,27,31,44],prefix:[4,31],preliminari:[20,35],prepar:[11,32,42],prescrib:37,present:[2,3,5,6,7,8,9,10,13,21,22,25,29,31,32,34,35,38,40,42,43,44,47],preserv:[5,11,40],press:[16,44],pretend:[26,38],pretti:[11,13],prevent:[20,35,36,40,42],previou:[11,13,22,32,38,43,44,46,47],previous:[7,12,29,32,44,47],price:[11,13,29],primari:[16,29],primarili:[0,6],primit:[38,46],print:[3,26,32,35,36,37,41,45],println:[39,41,45],printorvisualis:41,prior:47,priv:[],privaci:[4,5,11,13,21,29,32,40,42],privat:[4,8,9,11,13,14,29,30,31,37,39,40,42,44],privatefoo:4,privatekei:[13,28],probabl:[0,42],problem:[5,11,13,16,17,29,37],proce:13,procedur:[13,30,42],process:[],processor:[11,22],produc:[1,12,25,40,42,45,46],product:[4,10,12,15,16,20,21,32,33,35,37,38,40,44],profound:11,program:[3,4,11,26,28,32,35,38,42],programmat:41,progress:[],progresstrack:[13,29],project:[0,10,16,17,19,20,28,30,32,35,40,42],prolif:32,promis:32,prompt:[16,44],proof:[6,11,23],propag:[3,13,26,42,43,44],properli:[13,28,36],properti:[],proport:[20,35],propos:[13,19,28,36,40,44],proprietari:[20,32,35],prose:[29,38,42],prospectus_hash:39,protect:[13,20,28,30,35],protocolhandl:[],protocollog:[],protocollogicreffactori:[],protocoltrack:[],protocolvers:3,prototyp:[4,21,29,32,34,42],provabl:40,prove:[5,11,42],proven:[20,35],provid:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,16,18,19,22,23,24,25,26,27,28],provision:38,proxi:[3,41,45],pseudo:29,pseudonom:38,ptx:[13,29,39],pubkei:46,publicfoo:4,publickei:[],publickeytre:[],publish:[10,29,44],pull:[17,40,44],punish:29,purchas:[13,35,44],purchaseord:44,purchaseordercontract:44,purchaseorderst:44,pure:[6,11,29,45],purpos:[5,6,13,18,31,34,38,40,41,42,44,45],push:[3,33],put:[],python:[1,32,44],qualifi:[8,9,31],qualiti:40,quantiti:[2,11,22,38,40,41,42,44,45],quasar:[9,10,13,18,28,29,40,44],quasar_vers:44,quasarscan:[],queri:[3,7,8,9,12,19,28],queryablest:[28,31],queryrequest:29,question:[4,5,12,17,29,38],queu:[18,24],queue:[3,4,13,24,28],quick:[29,44],quickcheck:32,quickli:[11,18,30,36,42],quit:[3,4,5,13,16,42],r3cev:22,r3corda:[10,32,44],r3dlg:33,r3prototyp:[1,40],r3repositori:[],raft:[8,28,32,34,35],rais:[2,5,43],ran:[0,35],random63bitvalu:43,random:[11,12,22,32,35,38,40,41,47],randomis:32,randomli:[22,41],rang:[2,5,31,44],rapid:[4,10,21,33],rare:[8,38],rate:[],ratesfixflow:[23,29,40],ratesfixprotocol:[],rather:[2,4,11,13,17,24,25,32,37,40,41,42],raw:[24,26,35],rdbms:[31,32],rdms:32,reach:[5,7,11,12,20,29,32,35],reachabl:13,react:22,reactiv:32,read:[4,8,10,11,13,15,19,21,23,26,28,29,32,42,44],readabl:[8,13,15,35],readi:[2,33,42,44],readili:[38,43],readm:44,readme:[4,35,44],real:[4,20,25,29,30,32,35,38,40,42],realis:13,realist:38,realiti:[7,45],realli:[4,5,11,13,23,29,42],reason:[4,5,7,11,13,16,22,32,36,38,42],reassign:42,recal:7,receipt:28,receiv:[3,6,7,9,11,13,18,20,22,28,29,32,33,35,36,39,40,42,44,45],receiveandcheckproposedtransact:13,receiveandvalidatetraderequest:13,received:29,receiving:13,recent:[16,32,44],recheck:40,recipi:[6,11,35,39,42,45],recognis:[9,11,13,16,42],recommend:[0,4,16,24,34,35,44],record:[5,12,14,18,28,31,39,40,41,44,47],recordtransact:[14,28,40,47],recreat:[13,17],red:[7,23,44],redeem:[2,6,42,43],redempt:42,redeploi:44,redesign:32,redirect:37,reduc:[4,10,20,35],redund:4,ref:[13,14,29,38,40,41,45,46],refactor:32,refer:[0,4,5,6,7,8,9,11,12,13,16,18,20,28,29,32,34,35,38,39,40,41,42,43,44,46,47],referenc:[5,39,44],refin:32,reflect:[13,19,22,32,40,42,43,44],refresh:[0,16,32,44],refus:17,regard:[5,16,37,40],regardless:13,regener:[7,33],regist:[],registerflowiniti:[9,13,29],registerprotocoliniti:[],registerrpckryotyp:[9,41],registr:[9,28],registri:9,regul:[40,42],regular:[13,18,26,35,37,38,42],reifi:40,reissu:42,reissuanc:11,reject:[28,29,40,42],rel:[8,10,11,15,16,29,32,40],relabelablestep:13,relai:39,relat:[],relationship:[28,42],relax:[22,32],releas:[],relev:[2,9,10,11,12,18,19,28,29,32,38,40,42,43,47],reli:[3,10,11,20,32,35,36],reliabl:28,relianc:11,relic:26,religi:4,remain:[10,12,13,29,32,40,42,44],remeb:[],rememb:[4,12,17,36,40],remind:[13,36,43],remot:[0,8,9,10,17,22,25,28,37,39,40,44],remote_branch_nam:44,remotemessagingport:22,remotenodedirectori:22,remotesystemdservicenam:22,remov:[13,23,32,33,41,42],renam:[13,32],render:[4,13,25,27,32],renderifsupport:39,repay:43,repeat:[0,4,7,13],replac:[3,5,7,16,20,26,32,33,35,38,40,41,42,44],replai:32,replic:[8,11,34,35],repo:[0,44],repoint:5,report:[13,27,32,43],repositori:[0,4,10,16,17,32,33,35,44],repres:[4,6,7,9,11,13,22,28,29,31,32,38,40,41,42],represent:[3,7,31],reproduc:40,republish:44,request:[],requestingparti:47,requiredcommand:[2,32,43],requiredflow:9,requiresinglecommand:[42,43],requirethat:[42,43],requisit:44,research:32,resel:29,resend:28,resent:28,reset:[7,25],reshap:11,resid:28,residu:40,residualamount:40,residualoutput:40,resolut:[11,13,47],resolv:[4,13,14,20,29,35,37,38,42,43],resolvefromtwohash:[],resolvetransactionsflow:[13,14,39],resolvetransactionsflowtest:14,resolvetransactionsprotocol:[],resolvetransactionsprotocoltest:[],resourc:[0,3,8,9,11,13,22,29,40,44],resp:29,respect:[0,4,11,13,35,40,44,45],respend:11,respond:[13,28],respons:[3,5,9,11,12,13,24,28,29,31,40,41,44,45,47],rest:[5,9,11,13,21,26,32,43,44],restart:[9,13,28,30],restor:[9,13,17,18],restrict:[2,4,20,25,35,40],restructur:[32,43,44],restructuredtext:1,result:[4,5,7,8,11,13,14,20,27,28,29,30,31,32,35,36,40,41,42,44,47],resultfutur:14,resum:[13,28,30,32],resurrect:13,resync:16,retain:24,rethrown:3,retri:[13,21,24],retriev:[7,13,30,34,39,41],retrieveoutput:46,returnvalu:45,reus:[3,11,46],reusabl:[2,18,29,32,39,42,43],reveal:[5,11,13,23,29,32],revers:[13,28],revert:6,review:[4,32,33,44],revis:[7,17,40],rewrit:13,richer:10,right:[4,13,16,17,26,29,32,33,35,36,40,44],rightmost:23,rigid:11,rigidli:4,risk:[13,20,35],robert:32,robust:32,rogerwilli:44,role:[11,12,28,35,39,41],roll:[7,13,32,35],rollov:[38,42],root:[8,10,23,28,30,33,37,40,44],roothash:29,rotat:[26,32],roughli:[5,33],rout:[13,14,16,24,32],row:[26,27,31,35,38,42],rpcexception:3,rpckryo:3,rpcreturnsobserv:[3,41],rpcsincevers:3,rpcuser:[8,27,37,41,44,45],rui:32,ruin:46,rule:[4,13,20,28,29,32,35,42],run:[],runbuy:35,runconfigur:[16,17],rundemonod:[27,32],runexampleclientrpc:44,runnetwork:14,runnod:[0,10,20,32,35,41,44],runparamet:22,runrecipi:[35,39],runsel:35,runsend:[0,35,39],runshellcommandgetoutput:22,runtim:[4,13,44],sacrif:44,safe:[3,4,9,11,13,30,36,41,45],sai:[4,5,11,16,20,22,35,37,42,43,47],sake:[20,35,45],sale:[35,42],same:[0,3,4,5,6,7,8,10,11,12,13,22,28,29,32,38,40,41,42,43,44,46],sampl:[0,9,10,13,19,20,25,32,35],sanction:42,sandbox:[11,12,21,32,36],saniti:13,santiago:32,sate:47,satisfi:[35,38,42,43],save:[4,13,32,42],saw:45,scala:[15,42],scalabl:[4,11],scale:[7,36],scan:[],scenario:[11,25,28,38,40,44,45],scene:[13,42],schedul:[],schedulablest:[12,28],scheduledact:12,schedulerservic:28,schema:[],schemafamili:31,schemaopt:31,schemaservic:31,scheme:[23,28],scienc:44,scope:[2,9,11,27,43],scotiabank:32,scotland:43,scrape:26,scratch:[38,42,44],screen:[4,16,17,27,32,42],script:[0,1,10,11,32,35,44],scroll:35,scrub:13,seamless:15,search:[27,28,40,42],sec:44,second:[2,7,9,13,14,22,29,35,38,40,42,43,44,45],secondari:13,secp256r1:32,secret:8,section:[8,11,19,22,29,32,33,40,44,47],securehash:[14,23,29,38,41,42,43,47],securerandom:32,see:[1,2,3,4,5,6,7,8,10,12,13,14,16,17,22,23,25,29,30,31,32,34,35,37,38,39,40,41,42,43,44,45],seed:13,seek:[11,32],seem:11,seemless:16,seemlessli:16,seen:[4,7,9,13,29,42],segment:10,select:[2,5,16,17,31,32,35,40,42,43,44],selector:2,selectschema:31,self:[10,22,32,35,45],selfissuecommand:22,selfissuest:22,selfissuetest:22,selfsignedtx:40,sell:[13,40,42,43],sellamount:40,seller:[],sellerownerkei:13,sellersig:13,sellertradeinfo:13,semi:11,send:[4,5,11,13,14,23,24,26,28,29,32,33,35,39,40,42,44,45,46,47],sendandrec:[13,29],sender:[11,13,35,39],sending:29,sendsignatur:13,sens:[7,29,42,43],sensit:[12,20,23,35,36],sent:[12,13,29,32,38,40,42],separ:[2,5,8,9,10,11,13,19,23,24,26,29,32,35,38,40,42,43],seper:0,septemb:[20,35],sequenc:[11,28,32,45],sequenti:[13,45],seri:13,serial:[3,9,21,28,42],serialis:[3,4,9,11,13,18,21,29,32,42],seriou:[11,33],serious:[],serv:[10,44,45],server:[3,8,9,10,21,24,26,28,30,32,41,44,45],servicehub:[9,10,13,24,28,29,39,40,47],servicehubintern:32,serviceident:29,serviceinfo:[41,44,45],serviceload:[9,29],serviceplugin:[9,29],servicetyp:[8,28,47],servlet:44,session:[12,24,28,32],sessionid:12,set:[],setlifecycl:2,setof:[2,13,14,39,40,41,43,44,45,47],setter:[31,42],settim:[13,29,38,40],settl:[2,6,14,38,39],settlement:[6,13],setup:[10,12,14,25,30,37],sever:[0,8,10,11,13,28,29,31,34,35,37,41,42,45,46],sha256:[23,38,42,43],sha256sum:26,sha:[11,26],shape:11,share:[0,6,7,11,13,18,20,28,29,32,35,36,39,40,42,44],shasum:26,she:42,shell:[20,22,35,44],shoot:36,shortcut:21,shorthand:46,shortli:0,should:[0,2,4,5,6,9,10,11,12,13,17,19,20,21,22,23,28,29,30,31,32,35,36,37,38,40,41,42,43,44,45,46],shoulder:4,shouldn:[13,23,40,42,44],shoutout:32,show:[11,15,17,25,27,28,32,35,42,43,44],shown:[3,8,13,14,25,38,40,44],shut:[39,45],shutdown:[13,28],side:[3,11,12,13,16,25,29,35,36,38,39,40,44],sidebar:25,sidenot:37,sig:[29,32,42],sign:[],signal:[18,40],signatori:40,signatureexcept:[],signaturesfromsel:13,signedtransact:[13,14,19,38],signer:[23,29,35,40,42,43],signfirsttx:14,signific:[0,11,29,32],significantli:[7,22,38,39],signing:[13,29],signingkei:29,signoff:5,signrequest:29,signwith:[13,14,38,39,40,42,47],signwithecdsa:[13,29],signwithourkei:13,silver:4,similar:[4,11,13,29,32,40,41,42,43],similarli:[31,40],simm:[],simmvaluationdemo:[20,35],simpl:[0,3,4,6,7,8,9,11,13,14,16,17,19,20,21,22,26,28,29,32,34,35,38,39,40,41,42],simplecash:46,simplecashdoesntcompil:46,simplecashfailswith:46,simplecashsuccess:46,simplecashtweaksuccess:46,simplecashtweaksuccesstopleveltransact:46,simplenam:31,simplenotaryservic:[],simpler:[11,15,43],simplest:[11,13,37,42],simpli:[4,10,11,13,14,22,24,28,31,32,34,38,42,44,46],simplic:40,simplif:32,simplifi:[2,4,6,11,28,34,38,40,42],simul:[],simultan:[11,13,38,42],sinc:42,singl:[],singlemessagerecipi:24,singleownerst:47,singleton:[9,13,29,42,43],singletonserializeastoken:[9,29],site:[4,32,33],situat:[4,11,23,32,40],size:[4,7,11,13,29,41,42,43,44],skeleton:14,skip:[13,38,42,44],sl4j:26,sleep:[22,39,41],slf4j:13,slightli:[0,34,40,42],slip:33,slot:32,slow:[4,11,22],slowest:11,small:[2,3,11,12,13,29,32,35,36,42],smaller:[2,32,43],smallest:38,smart:[],smooth:42,snake:46,snapshot:[11,19,29,32,33,41],snapshots:44,snide:1,snippet:[13,44],socket:26,softwar:[11,13,33,36],sofu:32,sold:[13,38],sole:32,solut:13,solv:[11,13,29],solvenc:29,some:[0,3,4,5,6,9,11,12,13,14,16,20,21,22,23,26,28,29,31,32,35,37,38,40,41,42,43,44,45,46,47],somed:42,somehow:22,someon:[5,11,42,47],someth:[3,4,7,11,13,29,32,35,42],sometim:[0,11,13,18,26,38,40],someusernam:22,somewhat:[3,11,13,22,32],somewher:42,soon:[32,42],sophist:11,sort:[13,29,32],sound:[4,13,42],sourc:[],sourcejar:10,sourcenotari:40,sourceset:26,sparingli:4,spawn:[9,45],speak:32,spec:32,special:[2,3,5,11,13,43,46],specif:[2,3,5,6,9,10,11,12,13,16,18,22,24,26,28,32,38,39,40,42,43,44,45],specifi:[1,2,3,4,5,6,8,10,11,13,18,21,22,23,30,31,32,37,38,40,42,43,44,45,46,47],speed:[11,13,15,44],spend:[11,13,14,21,28,36,37,40,42,45],spent:[11,42,46],sphinx:1,sphinx_rtd_them:1,spin:22,spirit:32,splash:[16,17],spline:38,split:[2,11,23,24,32,38,40,42,43],splittabl:42,splittablerandom:[22,41],spot:32,spread:[5,13],spreadsheet:29,spuriou:2,sql:[21,31,32,35,44],src:[8,13,28,39,44,45],ssh:22,sshuser:22,ssl:[8,32],sslconfig:41,sslkeystor:[8,30,44],stabil:44,stabilis:33,stabl:[3,9,33,41,44],stack:[9,13,28,29],stage:[4,6,13,38,40,42],stai:[11,28,40,42,43],stake:11,standalon:[25,29,32,41],standard:[2,4,9,10,13,16,18,20,25,26,28,32,35,37,38,40,41,42,43,44],standardis:[2,11,38,40],start:[],startflow:[13,14,32,39,41,45],startflowdynam:[13,41],startflowpermiss:[41,45],startnod:[41,44,45],startprotocol:[8,37],startprotocoldynam:[],startprotocolpermiss:[],startup:[8,9,26,32],startwith:41,state:[],stateandref:[5,13,29,38,40,41,42,47],statehistori:47,stateless:11,statemachineinfo:41,statemachinemanag:[],statemachinerecordedtransactionmap:41,statemachinerunid:13,statemachinesandupd:41,statemachinetransactionmap:41,statemachineupd:41,statement:[4,11,13,29,42],stateref:[11,12,23,31,38,40,47],statesoftyp:[40,42],staticservedir:9,statist:26,statu:[40,44],status:11,stdlib:44,stem:42,step:[],stereotyp:40,still:[5,11,12,13,17,25,29,32,40,42],stock:[11,29],stone:22,stood:31,stop:[4,13,28,39,44],stopnod:14,storag:[],storageservic:[39,40],store:[5,8,9,10,13,14,17,26,28,30,32,34,35,38,39,40,42,44,47],stori:[4,32],straight:44,straightforward:[13,42],strain:22,straincpu:22,stream:[3,13,24,25,32,41,45],stress:[4,22,32],strictli:[7,9,11],string:[0,8,13,22,29,31,35,38,41,42,44,47],strip:42,strong:15,strongli:16,structur:[],stub:[20,32,35],studi:42,stuff:4,stx1:14,stx2:14,stx:[13,38],sub:[],subclass:[6,13,31,38,42,43],subclaus:[],subcompon:43,subdirectori:26,subflow:[5,9,13,28,29,40,47],subfold:[9,28],subgroup:11,subject:[8,10,18,20,35,44],submiss:29,submit:[4,5,13,22,24,30,32,35,44],subproject:[],subprotocol:[],subscrib:[3,24,32,39,41],subsequ:[18,30,35,40,42,45,46],subset:[6,23,32,43],substanc:44,substitut:[8,9,40],subsystem:[9,24],subtask:13,subtl:[4,11],subtract:38,subvert:36,success:[2,39,40,45],successfulli:[37,41,44],successor:[5,12,15],succinct:4,sudo:1,suffer:[11,20,35],suffic:13,suffici:[11,29,32,33,35,38,40,41],suffix:44,suggest:[10,16,24,42],suggestinterestrateannouncementtimewindow:[12,29],suit:[32,39],suitabl:[12,24,28,29,33],suitablecashst:40,sukrit:32,sum:[20,22,35,40,41,42,44,46],sumcashbi:[13,42],summari:[],summaris:11,sumorthrow:2,sumorzero:2,sun:4,superclass:[6,32,38],superior:4,supersed:11,supertyp:42,suppli:[6,22,41],support:[],supportedschema:31,suppos:[13,42],suppress:[4,32],suppresswarn:4,sure:[5,32,33,36,39,42,44,45],surfac:13,surround:4,surviv:13,suspend:[],suspens:[9,28],swapping_signatures:13,swapsignatureswithsel:13,symbol:[],sync:[28,42,44],synchronis:[4,5,11,28,35],syntax:[0,15,42],system:[0,3,5,8,10,11,13,16,17,19,21,22,23,26,27,28,31,32,39,42,44],systemd:[22,37],tab:[4,10,16,17,32,35,44],tabl:[10,26,27,28,31,32,35,44],tableprefix:31,tackl:32,tag:[3,4,18,33,44],tag_nam:44,take:[2,4,7,9,12,13,14,21,22,23,26,29,30,32,33,35,36,38,40,42,43,44,46],taken:[9,42],talk:14,tamper:13,target:[1,4,8,11,14,15,20,25,26,35],task:[],tcp:[10,26,35,44],team:[],tear:[],teardown:14,techniqu:[4,11,21,29,44],technolog:19,tediou:[],tell:[1,13,41,44],tempalt:44,templat:[],temporari:[10,13],temporarili:[13,33],tempt:[36,42],ten:42,tend:18,tenor:[7,26,29,38],term:[2,6,8,11,12,18,20,24,35,37,38,43],termin:[7,10,13,26,28,32,35,41,44],terminolog:11,test:[],testcompil:44,testnam:22,testnet:[8,10,30,32,37,44],testpassword:45,testtimelock:42,testuser:45,text:[4,17,26,32,35,44,46],than:[2,3,4,5,10,11,13,17,24,25,26,29,32,38,40,42,44],thank:32,thedao:32,thei:[0,2,3,4,5,6,7,9,10,11,12,13,18,20,22,23,25,26,28,29,31,32,33,35,36,38,39,40,42,43,44],theirsign:40,theirstat:40,them:[0,2,3,4,7,8,9,11,12,13,14,16,17,19,21,22,23,24,26,28,29,31,32,33,35,37,38,39,40,41,42],theme:[32,36],themselv:[3,13,14,22,24,25,28,29,35,36,38,41,42],theori:[],therefor:[0,3,9,10,11,13,17,18,20,21,28,33,35,36,40,42],thi:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,19,20,22,23,25,26,27,28,29,30,31,32,33,35,36,37,38,39,40,41,42,43,44,45,46,47],thin:24,thing:[],think:[4,11,13,17,24,36,42],third:[11,20,23,32,35,44],thisstateref:12,thorough:13,those:[0,3,5,11,12,13,20,26,29,35,36,42,44],though:[13,23,26,29,42],thought:[11,15],thousand:46,threadsaf:4,three:[2,10,13,23,27,35,38,42,43,45],threshold:[18,26,28,32,38],through:[2,3,7,9,11,12,13,16,24,25,26,28,29,32,39,40,42,43,44,46],throughput:[5,11],throwifsignaturesaremiss:[],thrown:[3,13,36,42],thu:[2,4,5,8,11,12,26,28,29,32,38,40,42,43],tick:44,ticket:13,tidi:14,tighten:42,tightli:13,time:[],timelin:42,timem:42,timeout:3,timestamp:[],titl:17,tls1:28,tls:[24,32],toblock:45,todo:[4,13,29,42],togeth:[2,6,9,11,16,23,32,35,42,43,44],tohostandport:45,toinstant:44,token:[2,9,13,38,40,43],tokeypair:29,told:4,toledgertransact:[38,40],toler:[5,12],tolist:40,too:[4,13,16,32,40,42],took:[13,43],tool:[0,13,15,16,18,22,24,25,26,27,31,32,35,44],toolbar:17,top:[2,4,9,11,13,17,22,24,27,32,35,41,43,44],topic:[24,42],topicsess:[24,32],toplevel:46,topriv:13,torn:32,toset:40,tosignedtransact:[13,14,38,39,40,42,47],tostateandref:40,tostr:[4,13,31,42],tostringsshort:[],total:[0,11,22,38,40],totypedarrai:40,toward:[32,33],towiretransact:[23,29,38],trace:[13,26,43],track:[],tracker:[13,32],trade:[],tradeapprovalcontract:40,tradeoff:[],trader:[],traderdemo:[],traderequest:13,tradit:11,traffic:[8,11,25],transac:18,transact:[],transactionbuild:[13,29,32,38,39,40,42,47],transactionforcontract:[2,42,43],transactionforverif:42,transactionst:[5,23,32,38],transactionstorag:28,transactiontyp:[13,32,39,40,47],transactionverificationexcept:46,transfer:[36,40,42,46,47],transferedfundsoutput:40,transit:[28,36,38,40,42],translat:28,transmit:[],transport:[0,8,10,44],travel:42,treat:[10,32,36,42],tree:[],tri:[0,11,16,32,42],tricki:[11,13],trigger:[2,6,12,13,22,28,29,35,43],trim:[],trivial:[4,11,39],troubl:17,trust:[6,8,11,28,30,36,40],trustpass:[8,37,41],truststor:[8,28,37,44],truststorepassword:[8,37,41],truth:13,tunnel:37,tupl:4,ture:11,turn:[2,11,13,38,42,43,46],tutori:[],tweak:[22,32,46],twice:46,two:[],twopartydealflow:12,twopartydealprotocol:[],twopartytradeflow:13,twopartytradeprotocol:[],txb:38,txbit:[],txhash:[11,13,40,41,42,47],txid:40,txnid:41,txnnote:41,txstate:29,txt:[26,44],type:[],typenam:13,typeonlycommanddata:[42,43],typesaf:8,typetobui:13,typic:[0,9,11,12,13,24,26,28,29,31,36,38,39,40,42],ugli:13,ultim:[28,40],ultimat:26,unaccept:13,unacceptablepriceexcept:13,unavoid:13,unchang:32,unclutt:13,unconfirm:40,unconsum:[28,31],undelet:[16,17],under:[1,10,20,22,28,32,33,35,38,41,42,43,46],undergo:32,underli:[6,7,11,13,32,38],underscor:4,understand:[0,11,25,26,29,40,42,43,44],unencrypt:8,unexpect:[13,36,44],unfinish:13,unfortun:[13,36,42],unicredit:32,unifi:32,uniform:12,unilater:40,unindex:17,union:40,uniqu:[5,11,13,28,29,32,38,39],uniqueidentifi:[],uniquenessprovid:28,unit:[],univers:32,unix:[],unknow:5,unknown:[38,40],unknownfix:29,unless:[4,13,29,33,42,44],unlik:[28,42],unlike:[6,9],unlink:17,unlock:8,unmerg:44,unnatur:11,unpack:[10,28,42],unprocess:[2,43],unqiu:12,unread:13,unrecognis:42,unrel:[42,43,44],unschedul:12,unserialis:13,unset:7,unspecifi:45,unspent:[11,18],unstarted:13,unsubscrib:3,unsubscript:3,unsupportedoperationexcept:[3,42],until:[3,5,7,11,12,13,14,28,29,32,33,35,37,44,46],untrust:13,untrustworthydata:[13,32,36],unverifiedtransact:46,unwrap:[13,29,32,40],upcom:[12,32],updat:[3,9,10,11,13,17,22,24,28,32,33,39,40,41,42,44,45],update:[16,41,45],upgrad:[13,17,31,32,42],upgrade:32,uphold:42,upload:[],uploadrat:35,upon:[7,10,13,18,28,40,42,44],upward:33,urandom:22,url:[8,10,26,30,32,35,37,44],usabl:[32,33,42],usag:[],usage:[2,41],usd:[22,27,41],use:[4,6,11,44],used:[],usehttps:[8,37],useless:42,user1:[8,27,37,44],user:[1,3,4,8,10,11,13,19,21,22,27,29,32,35,37,41,44,45],usernam:[3,8,26,27,41],usr:1,usuabl:0,usual:[4,10,11,35,40,42,43,44],usualli:[2,33,43,44],utc:12,util:[],utilis:[25,41],utiliti:30,uuid:[32,38],vagu:4,val:[2,4,5,12,13,14,22,23,29,31,38,39,40,41,42,43,44,45,46,47],valid:[],validatedtransact:[14,39,40],validatingnotaryservic:[],validfrom:42,valu:[4,5,6,7,8,9,11,13,20,23,27,28,29,32,34,35,40,42,43,44,46],valuabl:29,valuat:[7,20,32,35],valueof:41,vanilla:[6,7],vararg:41,vari:[],variabl:[4,7,10,11,13,42],variant:[28,42],variou:[4,9,11,13,20,26,28,32,35,36,42,44],vault:[],vaultandupdat:[41,45],vaultservic:[9,13,28,40],vaultsselfissu:22,vcs:16,vega:32,vehicl:11,vendor:[21,26],verbos:42,verdict:40,veri:[4,6,11,13,16,18,20,28,29,35,36,42,46],verif:[],verifi:[],verifiedtransact:41,verifyclaus:[2,43],verifying:13,verifylifecycl:2,verifypropos:32,verifysignatur:[13,40],versa:[6,7,11,13,38],versionnumb:44,versu:13,vertic:4,vet:36,via:[],vice:[6,7,11,13,38],view:[],virtual:[9,11,18,36],visibl:[5,11,19,23,27,28,35],vision:[19,44],visual:[27,32],visualis:[24,25,41,44],vital:13,vpn:37,wai:[2,3,4,5,10,11,12,13,17,18,20,22,23,24,26,27,29,31,32,35,37,40,42,44,46],wait:[12,13,14,17,22,28,29,32,35,44,45],waitforallnodestofinish:[41,44],wake:32,wallet:[11,12,13,18,32,42],walletservic:[],want:[0,2,3,4,11,13,17,22,23,26,29,32,35,36,38,42,43,44,45,46,47],warn:[],watch:36,weak:[29,38],wear:33,web:[8,9,10,20,21,26,28,29,32,35,44],webaddress:[8,37],webapi:9,webapp:32,webport:[10,44],webserv:37,websit:[16,17],websocket:[],week:15,weekend:7,weight:38,well:[0,1,4,5,7,9,11,12,13,16,18,21,23,26,28,31,32,39,40,41,42,43,44],went:4,were:[2,4,11,13,20,28,29,35,40,42],what:[],whatev:[4,13,25,28,29,38,40],when:[0,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,20,22,24,25,26,27,28,29,30,31,32,35,36,38,39,40,41,42,43,44,46],whenev:[4,16],where:[],wherea:[7,17],wherev:26,whether:[2,3,5,6,13,22,28,29,37,38,42,43],which:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17,18,20,21,22,23,24,25,26,28,29,31,32,33,35,37,38,39,40,41,42,43,44,45,46,47],whilst:[11,13,25,28,29,32,36,42],white:[9,19,32,44],whitelist:[6,9,10,12,13,41],who:[4,8,11,13,15,20,29,32,35,38,42,44],whole:[23,28,34,43,46],whom:[6,11],whose:[6,26,38],why:[4,11,15,19],wide:[3,4,23],widescreen:4,widespread:4,widget:[27,44],widnow:44,width:4,wiki:[11,42,43],wikipedia:[42,43],window:[],wipe:17,wiretransact:[13,19,23,38],wish:[10,11,13,19,20,29,31,32,35,38,40,42,44],wit:37,withattach:14,within:[],withitem:[38,40,42],withkei:[13,40],withnewown:[13,42],without:[],withoutissu:[13,42],withoutown:[42,43],withowner:42,won:[13,24,27,29,32,41,42,44,45,46],word:[4,5,8],work:[0,3,4,5,7,8,10,11,12,13,16,19,21,22,25,26,28,29,30,32,34,35,38,39,41,42],worker:4,workflow:[9,40],workflowtransactionbuildtutori:40,workflowtransactionbuildtutorialtest:40,working:29,workspac:[8,9,10,28,30,40],world:[8,11,13,20,25,27,29,35,37,40,42,46],worn:42,worri:[4,13,42,44],worst:11,worth:[4,36,42,43,44],worthless:29,would:[0,3,4,6,7,9,10,11,13,16,18,20,21,25,26,29,35,36,38,39,40,42,43,44,45,47],wouldn:29,wow:44,wrap:[2,4,13,24,26,28,32,36,38,42,43],wrapper:[0,4,5,13,41,44],write:[],written:[1,2,3,7,11,15,16,29,32,40,42,45],wrong:[3,4,13,46],wrote:11,wtx:[13,23,29,40],www:1,xcode:16,xml:26,xsrf:44,xss:44,xterm:10,year:[7,13],yet:[4,7,11,13,18,21,25,27,30,32,38,40,45],yield:11,york:10,you:[0,1,2,3,4,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,29,30,31,32,34,35,36,37,38,41,42,43,44,45,46],your:[],your_usernam:[],yourself:[11,12,36,38,44],zero:[2,11,18,29,42,44],zip:[11,26,35,39],zone:12,zoneddatetim:12},titles:["CLI vs IDE","Building the documentation","Clauses key concepts","Client RPC","Code style guide","Consensus model","Contract catalogue","Interest rate swaps","Node configuration","The Corda plugin framework","CorDapps Background","Data model","Event scheduling","Writing flows","Writing flow tests","Further notes on Kotlin","Getting set up","Getting Set Up : Faultfinding","Glossary","Welcome to the Corda documentation!","Initial margin agreements","What’s included?","Load testing","Transaction tear-offs","Networking and messaging","Network Simulator","Node administration","Node Explorer","Brief introduction to the node services","Writing oracle services","Network permissioning","Persistence","Release notes","Release process","Running a notary service","Running the demos","Secure coding guidelines","Introduction - What is a corda network?","Data types","Using attachments","Building Transactions","Client RPC API tutorial","Writing a contract","Writing a contract using clauses","The CorDapp Template","Integration Test Tutorial","Writing a contract test","Using a notary service"],titleterms:{"class":[3,29,41,42,43],"function":[13,42],about:17,abstractconserveamount:2,abstractissu:2,access:26,adding:42,administr:26,adopt:11,against:10,agreement:[20,35],aka:35,all:35,allcomposit:2,amount:38,anycomposit:2,api:[41,42],app:[10,20],approach:29,artemismessagingserv:28,assert:29,assertion:4,asset:42,assign:47,attach:[26,39],attachment:[35,39],background:[10,35,44],basic:[2,29,40],bind:29,bitcoin:11,brief:28,build:[1,10,30,40,44],buyer:13,cash:[6,38],catalogu:6,certif:[30,37],chain:46,chang:5,check:42,claus:[2,42,43],cli:[0,17],client:[3,29,41],cluster:22,code:[4,16,36,42],command:[0,40,42,44],comment:4,commerci:[6,42,43],commit:40,commod:6,common:35,comparison:11,compil:4,complain:17,complet:40,composit:[2,38],con:11,concept:2,configur:[8,17,22,37,44],connect:37,consensu:5,construct:42,continu:29,contract:[6,36,42,43,46],control:16,corda:[9,10,16,19,23,37],cordapp:[10,29,41,44],cordform:10,core:29,creat:7,cryptographi:38,cut:33,data:[11,23,29,38],databas:26,date:38,dbcheckpointstorag:28,dbtransactionmappingstorag:28,dbtransactionstorag:28,debug:[0,10,43,44],demo:[27,35,39],deploi:44,detail:7,distribut:35,document:[1,19],download:26,e2etestkeymanagementservic:28,encumbranc:42,error:[3,4],ethereum:11,event:[12,28],exampl:[8,12,23,44],execut:35,explorer:27,faultfind:17,featur:13,field:8,file:[8,44],filteron:2,firstcomposit:2,fix:26,flow:[13,14,28,29,36],format:8,framework:[9,28],frequent:0,from:[29,41,44],fungibleasset:38,further:15,futur:13,gather:40,gener:[4,40,42],get:[16,17,44],git:16,glossari:18,gradl:[0,10,16,17,44],group:[42,43],groupclauseverifi:2,guid:4,guidelin:36,handl:3,happen:[35,42],hibernateobserv:28,hide:[23,29],how:[12,22,42,43],ide:0,ident:28,identiti:[],implement:[12,13,28,29],important:35,includ:21,individu:22,initial:[20,35],inmemoryidentityservic:28,inmemorynetworkmapcach:28,inmemorystatemachinerecordedtransactionmappingstorag:28,inmemoryuniquenessprovid:28,input:40,install:10,installat:17,instanc:7,instruction:35,integrat:45,intellij:[0,16,17,44],interest:[6,7,26],interfac:[25,27,44],introduct:[12,13,20,28,29,35,37,40],irs:35,issu:17,jvm:16,kei:[2,28,38],kotlin:[15,16,17],kryo:[3,41],lack:17,length:4,lifecycl:[7,38,40],line:[0,4,44],load:22,local:44,locat:8,log:[26,37],mac:0,machin:44,make:42,manag:28,map:[24,31],margin:[20,35],math:38,merkl:23,messag:[24,28],mileston:[32,44],miss:17,model:[5,11],monitor:26,multi:[38,42],multipl:5,name:4,namedbyhash:38,network:[24,25,28,29,30,37],networkmapservic:28,node:[8,10,26,27,28,37,44],nodeattachmentservic:28,nodemessagingcli:28,nodeschedulerservic:28,nodeschemaservic:28,nodevaultservic:28,non:42,notari:[5,28,34,35,47],notaris:47,notaryservic:28,note:[15,32],notion:35,nozerosizedoutput:2,object:31,obligat:6,observabl:3,obtain:[],off:23,opene:44,oracl:29,orient:42,other:2,output:40,overview:11,own:37,pai:29,paper:[6,42,43],parti:[13,38,42],partial:40,particular:42,per:29,permiss:30,persist:[10,28,31],persistentkeymanagementservic:28,persistentnetworkmapservic:28,persistentuniquenessprovid:28,plai:29,plugin:[9,10,29],portfolio:35,pro:11,process:[20,33],progress:13,project:44,properti:4,protocol:3,provid:[29,44],publickei:38,put:42,queri:29,raftuniquenessprovid:28,raftvalidatingnotaryservic:28,rate:[6,7,26],rational:11,regist:[3,41],relat:[28,31],releas:[32,33,44],request:30,requir:[1,42],rpc:[3,41],run:[17,20,22,27,30,34,35,44],safeti:3,sampl:44,schedul:[12,28],schema:31,sdk:17,secur:[3,36,41],seller:13,separ:44,servic:[10,24,28,29,34,44,47],set:[16,17,37],sign:[29,30],signatur:38,signedtransact:40,simm:[20,35],simpl:43,simplenotaryservic:28,simul:25,singl:46,smart:42,snapshot:44,sourc:16,space:4,start:[10,13,37,42,44],state:[10,38,42],statemachinemanag:28,step:[20,33,35],storag:28,storageserviceimpl:28,structur:[2,44],style:[4,11],sub:[13,29],subprotocol:[],summari:43,support:38,suspend:13,swap:[6,7],task:0,tear:23,technic:7,templat:[10,44],test:[14,22,42,45,46],them:43,theori:13,thing:42,thread:[3,4],time:42,timestamp:5,track:13,trade:13,tradeoff:11,trader:35,transact:[23,29,38,40,42,46,47],transmit:42,tree:23,troubleshoot:16,tutori:[41,45],two:[13,29],type:[2,24,38],uniqueidentifi:38,unit:[],unix:0,upload:26,usag:23,used:0,using:[10,29,39,42,44,47],util:30,utxo:11,valid:5,validatingnotaryservic:28,vari:29,vault:28,verif:38,verifi:42,version:[3,13,16],via:[0,16,17,29,44],view:10,visibl:40,warn:4,welcom:19,what:[21,25,35,37,43],where:42,why:43,window:0,wire:3,wiretransact:40,within:[17,28],without:17,work:[43,44],write:[13,14,22,29,42,43,46],your:[10,13,26,37,41,42,44]}}) \ No newline at end of file diff --git a/docs/build/html/secure-coding-guidelines.html b/docs/build/html/secure-coding-guidelines.html index a6d9b8f3f5..d52c50f208 100644 --- a/docs/build/html/secure-coding-guidelines.html +++ b/docs/build/html/secure-coding-guidelines.html @@ -32,7 +32,7 @@ - + @@ -89,14 +89,26 @@

                              Key concepts

                              +

                              CorDapps

                              +

                              The Corda node

                              -

                              CorDapps

                              -

                              Tutorials

                              Other

                              Component library

                              Appendix

                              • Load testing
                              • +
                              • Introduction - What is a corda network?
                              • +
                              • Setting up your own network
                              • Secure coding guidelines

                                Appendix

                                -
                                  + +

                                  CorDapps

                                  +

                                  The Corda node

                                  -

                                  CorDapps

                                  -

                                  Tutorials

                                  Other

                                  Component library

                                  Appendix

                                  • Load testing
                                  • +
                                  • Introduction - What is a corda network?
                                  • +
                                  • Setting up your own network
                                  • Secure coding guidelines
                                  • Release process
                                  • Steps to cut a release
                                  • @@ -344,11 +359,11 @@ fleshed out.

                                    -

                                    Multi-signature support

                                    +

                                    Multi-signature support

                                    Corda supports scenarios where more than one key or party is required to authorise a state object transition, for example: “Either the CEO or 3 out of 5 of his assistants need to provide signatures”.

                                    -
                                    -

                                    Composite Keys

                                    +
                                    +

                                    Composite Keys

                                    This is achieved by public key composition, using a tree data structure CompositeKey. A CompositeKey is a tree that stores the cryptographic public key primitives in its leaves and the composition logic in the intermediary nodes. Every intermediary node specifies a threshold of how many child signatures it requires.

                                    @@ -400,7 +415,7 @@ splines. These can be found in the - Next + Next Previous @@ -412,7 +427,7 @@ splines. These can be found in the

                                    - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                                    diff --git a/docs/build/html/tutorial-attachments.html b/docs/build/html/tutorial-attachments.html index 23e0e04e8b..a76b9054c7 100644 --- a/docs/build/html/tutorial-attachments.html +++ b/docs/build/html/tutorial-attachments.html @@ -89,14 +89,26 @@

                                    Key concepts

                                    +

                                    CorDapps

                                    +

                                    The Corda node

                                    -

                                    CorDapps

                                    -

                                    Tutorials

                                      -
                                    • Where to start
                                    • Writing a contract
                                    • Writing a contract using clauses
                                    • Writing a contract test
                                    • -
                                    • Client RPC API Tutorial
                                    • +
                                    • Integration Test Tutorial
                                    • +
                                    • Client RPC API tutorial
                                    • +
                                    • Building Transactions
                                    • Writing flows
                                    • Writing flow tests
                                    • +
                                    • Running a notary service
                                    • +
                                    • Using a notary service
                                    • Writing oracle services
                                    • +
                                    • Implementing an oracle with continuously varying data
                                    • +
                                    • Using an oracle
                                    • Using attachments @@ -132,17 +146,18 @@

                                      Other

                                      Component library

                                      Appendix

                                      • Load testing
                                      • +
                                      • Introduction - What is a corda network?
                                      • +
                                      • Setting up your own network
                                      • Secure coding guidelines
                                      • Release process
                                      • Steps to cut a release
                                      • @@ -305,7 +320,7 @@ transaction and send it to the recipient node:

                                        - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                                        diff --git a/docs/build/html/tutorial-building-transactions.html b/docs/build/html/tutorial-building-transactions.html new file mode 100644 index 0000000000..1410b4d6a8 --- /dev/null +++ b/docs/build/html/tutorial-building-transactions.html @@ -0,0 +1,701 @@ + + + + + + + + + + + Building Transactions — R3 Corda latest documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        + + + + +
                                        + + + + + + +
                                        +
                                        + + + + + + +
                                        + +
                                        +
                                        +
                                        +
                                        + +
                                        +

                                        Building Transactions

                                        +
                                        +

                                        Introduction

                                        +

                                        Understanding and implementing transactions in Corda is key to building +and implementing real world smart contracts. It is only through +construction of valid Corda transactions containing appropriate data +that nodes on the ledger can map real world business objects into a +shared digital view of the data in the Corda ledger. More importantly as +the developer of new smart contracts it is the code which determines +what data is well formed and what data should be rejected as mistakes, +or to prevent malicious activity. This document details some of the +considerations and APIs used to when constructing transactions as part +of a flow.

                                        +
                                        +
                                        +

                                        The Basic Lifecycle Of Transactions

                                        +

                                        Transactions in Corda are constructed in stages and contain a number of +elements. In particular a transaction’s core data structure is the +net.corda.core.transactions.WireTransaction, which is usually +manipulated via a +net.corda.core.contracts.General.TransactionBuilder and contains:

                                        +

                                        1. A set of Input state references that will be consumed by the final +accepted transaction.

                                        +

                                        2. A set of Output states to create/replace the consumed states and thus +become the new latest versions of data on the ledger.

                                        +

                                        3. A set of Attachment items which can contain legal documents, contract +code, or private encrypted sections as an extension beyond the native +contract states.

                                        +

                                        4. A set of Command items which give a context to the type of ledger +transition that is encoded in the transaction. Also each command has an +associated set of signer keys, which will be required to sign the +transaction.

                                        +

                                        5. A signers list, which is populated by the TransactionBuilder to +be the union of the signers on the individual Command objects.

                                        +

                                        6. A notary identity to specify the Notary node which is tracking the +state consumption. (If the input states are registered with different +notary nodes the flow will have to insert additional NotaryChange +transactions to migrate the states across to a consistent notary node, +before being allowed to mutate any states.)

                                        +

                                        7. Optionally a timestamp that can used in the Notary to time bound the +period in which the proposed transaction stays valid.

                                        +

                                        Typically, the WireTransaction should be regarded as a proposal and +may need to be exchanged back and forth between parties before it can be +fully populated. This is an immediate consequence of the Corda privacy +model, which means that the input states are likely to be unknown to the +other node.

                                        +

                                        Once the proposed data is fully populated the flow code should freeze +the WireTransaction and form a SignedTransaction. This is key to +the ledger agreement process, as once a flow has attached a node’s +signature it has stated that all details of the transaction are +acceptable to it. A flow should take care not to attach signatures to +intermediate data, which might be maliciously used to construct a +different SignedTransaction. For instance in a foreign exchange +scenario we shouldn’t send a SignedTransaction with only our sell +side populated as that could be used to take the money without the +expected return of the other currency. Also, it is best practice for +flows to receive back the DigitalSignature.WithKey of other parties +rather than a full SignedTransaction objects, because otherwise we +have to separately check that this is still the same +SignedTransaction and not a malicious substitute.

                                        +

                                        The final stage of committing the transaction to the ledger is to +notarise the SignedTransaction, distribute this to all appropriate +parties and record the data into the ledger. These actions are best +delegated to the FinalityFlow, rather than calling the inidividual +steps manually. However, do note that the final broadcast to the other +nodes is asynchronous, so care must be used in unit testing to +correctly await the Vault updates.

                                        +
                                        +
                                        +

                                        Gathering Inputs

                                        +

                                        One of the first steps to forming a transaction is gathering the set of +input references. This process will clearly vary according to the nature +of the business process being captured by the smart contract and the +parameterised details of the request. However, it will generally involve +searching the Vault via the VaultService interface on the +ServiceHub to locate the input states.

                                        +

                                        To give a few more specific details consider two simplified real world +scenarios. First, a basic foreign exchange Cash transaction. This +transaction needs to locate a set of funds to exchange. A flow +modelling this is implemented in FxTransactionBuildTutorial.kt. +Second, a simple business model in which parties manually accept, or +reject each other’s trade proposals which is implemented in +WorkflowTransactionBuildTutorial.kt. To run and explore these +examples using the IntelliJ IDE one can run/step the respective unit +tests in FxTransactionBuildTutorialTest.kt and +WorkflowTransactionBuildTutorialTest.kt, which drive the flows as +part of a simulated in-memory network of nodes. When creating the +IntelliJ run configuration for these unit test set the workspace +points to the root r3prototyping folder and add +-javaagent:lib/quasar.jar to the VM options, so that the Quasar +instrumentation is correctly configured.

                                        +

                                        For the Cash transaction let’s assume the cash resources are using the +standard CashState in the :financial Gradle module. The Cash +contract uses FungibleAsset states to model holdings of +interchangeable assets and allow the split/merge and summing of +states to meet a contractual obligation. We would normally use the +generateSpend method on the VaultService to gather the required +amount of cash into a TransactionBuilder, set the outputs and move +command. However, to elucidate more clearly example flow code is shown +here that will manually carry out the inputs queries using the lower +level VaultService.

                                        +
                                        // This is equivalent to the VaultService.generateSpend
                                        +// Which is brought here to make the filtering logic more visible in the example
                                        +private fun gatherOurInputs(serviceHub: ServiceHub,
                                        +                            amountRequired: Amount<Issued<Currency>>,
                                        +                            notary: Party?): Pair<List<StateAndRef<Cash.State>>, Long> {
                                        +    // Collect cash type inputs
                                        +    val cashStates = serviceHub.vaultService.currentVault.statesOfType<Cash.State>()
                                        +    // extract our key identity for convenience
                                        +    val ourKey = serviceHub.myInfo.legalIdentity.owningKey
                                        +    // Filter down to our own cash states with right currency and issuer
                                        +    val suitableCashStates = cashStates.filter {
                                        +        val state = it.state.data
                                        +        (state.owner == ourKey)
                                        +                && (state.amount.token == amountRequired.token)
                                        +    }
                                        +    require(!suitableCashStates.isEmpty()) { "Insufficient funds" }
                                        +    var remaining = amountRequired.quantity
                                        +    // We will need all of the inputs to be on the same notary.
                                        +    // For simplicity we just filter on the first notary encountered
                                        +    // A production quality flow would need to migrate notary if the
                                        +    // the amounts were not sufficient in any one notary
                                        +    val sourceNotary: Party = notary ?: suitableCashStates.first().state.notary
                                        +
                                        +    val inputsList = mutableListOf<StateAndRef<Cash.State>>()
                                        +    // Iterate over filtered cash states to gather enough to pay
                                        +    for (cash in suitableCashStates.filter { it.state.notary == sourceNotary }) {
                                        +        inputsList += cash
                                        +        if (remaining <= cash.state.data.amount.quantity) {
                                        +            return Pair(inputsList, cash.state.data.amount.quantity - remaining)
                                        +        }
                                        +        remaining -= cash.state.data.amount.quantity
                                        +    }
                                        +    throw IllegalStateException("Insufficient funds")
                                        +}
                                        +
                                        +
                                        +

                                        As a foreign exchange transaction we expect an exchange of two +currencies, so we will also require a set of input states from the other +counterparty. However, the Corda privacy model means we do not know the +other node’s states. Our flow must therefore negotiate with the other +node for them to carry out a similar query and populate the inputs (See +the ForeignExchangeFlow for more details of the exchange). Having +identified a set of Input StateRef items we can then create the +output as discussed below.

                                        +

                                        For the trade approval flow we need to implement a simple workflow +pattern. We start by recording the unconfirmed trade details in a state +object implementing the LinearState interface. One field of this +record is used to map the business workflow to an enumerated state. +Initially the initiator creates a new state object which receives a new +UniqueIdentifier in its linearId property and a starting +workflow state of NEW. The Contract.verify method is written to +allow the initiator to sign this initial transaction and send it to the +other party. This pattern ensures that a permanent copy is recorded on +both ledgers for audit purposes, but the state is prevented from being +maliciously put in an approved state. The subsequent workflow steps then +follow with transactions that consume the state as inputs on one side +and output a new version with whatever state updates, or amendments +match to the business process, the linearId being preserved across +the changes. Attached Command objects help the verify method +restrict changes to appropriate fields and signers at each step in the +workflow. In this it is typical to have both parties sign the change +transactions, but it can be valid to allow unilateral signing, if for instance +one side could block a rejection. Commonly the manual initiator of these +workflows will query the Vault for states of the right contract type and +in the right workflow state over the RPC interface. The RPC will then +initiate the relevant flow using StateRef, or linearId values as +parameters to the flow to identify the states being operated upon. Thus +code to gather the latest input state would be:

                                        +
                                        // Helper method to access the StorageService and expand a StateRef into a StateAndRef
                                        +fun <T : ContractState> ServiceHub.toStateAndRef(ref: StateRef): StateAndRef<T> {
                                        +    return storageService.validatedTransactions.getTransaction(ref.txhash)!!.tx.outRef<T>(ref.index)
                                        +}
                                        +
                                        +// Helper method to locate the latest Vault version of a LinearState from a possibly out of date StateRef
                                        +inline fun <reified T : LinearState> ServiceHub.latest(ref: StateRef): StateAndRef<T> {
                                        +    val linearHeads = vaultService.linearHeadsOfType<T>()
                                        +    val original = toStateAndRef<T>(ref)
                                        +    return linearHeads.get(original.state.data.linearId)!!
                                        +}
                                        +
                                        +
                                        +
                                        +
                                        // Pull in the latest Vault version of the StateRef as a full StateAndRef
                                        +val latestRecord = serviceHub.latest<TradeApprovalContract.State>(ref)
                                        +
                                        +
                                        +
                                        +
                                        +
                                        +

                                        Generating Commands

                                        +

                                        For the commands that will be added to the transaction, these will need +to correctly reflect the task at hand. These must match because inside +the Contract.verify method the command will be used to select the +validation code path. The Contract.verify method will then restrict +the allowed contents of the transaction to reflect this context. Typical +restrictions might include that the input cash amount must equal the +output cash amount, or that a workflow step is only allowed to change +the status field. Sometimes, the command may capture some data too e.g. +the foreign exchange rate, or the identity of one party, or the StateRef +of the specific input that originates the command in a bulk operation. +This data will be used to further aid the Contract.verify, because +to ensure consistent, secure and reproducible behaviour in a distributed +environment the Contract.verify, transaction is the only allowed to +use the content of the transaction to decide validity.

                                        +

                                        Another essential requirement for commands is that the correct set of +CompositeKeys are added to the Command on the builder, which will be +used to form the set of required signers on the final validated +transaction. These must correctly align with the expectations of the +Contract.verify method, which should be written to defensively check +this. In particular, it is expected that at minimum the owner of an +asset would have to be signing to permission transfer of that asset. In +addition, other signatories will often be required e.g. an Oracle +identity for an Oracle command, or both parties when there is an +exchange of assets.

                                        +
                                        +
                                        +

                                        Generating Outputs

                                        +

                                        Having located a set of StateAndRefs as the transaction inputs, the +flow has to generate the output states. Typically, this is a simple call +to the Kotlin copy method to modify the few fields that will +transitioned in the transaction. The contract code may provide a +generateXXX method to help with this process if the task is more +complicated. With a workflow state a slightly modified copy state is +usually sufficient, especially as it is expected that we wish to preserve +the linearId between state revisions, so that Vault queries can find +the latest revision.

                                        +

                                        For fungible contract states such as Cash it is common to distribute +and split the total amount e.g. to produce a remaining balance output +state for the original owner when breaking up a large amount input +state. Remember that the result of a successful transaction is always to +fully consume/spend the input states, so this is required to conserve +the total cash. For example from the demo code:

                                        +
                                            // Gather our inputs. We would normally use VaultService.generateSpend
                                        +    // to carry out the build in a single step. To be more explicit
                                        +    // we will use query manually in the helper function below.
                                        +    // Putting this into a non-suspendable function also prevents issues when
                                        +    // the flow is suspended.
                                        +    val (inputs, residual) = gatherOurInputs(serviceHub, sellAmount, request.notary)
                                        +
                                        +    // Build and an output state for the counterparty
                                        +    val transferedFundsOutput = Cash.State(sellAmount, request.counterparty.owningKey, null)
                                        +
                                        +    if (residual > 0L) {
                                        +        // Build an output state for the residual change back to us
                                        +        val residualAmount = Amount(residual, sellAmount.token)
                                        +        val residualOutput = Cash.State(residualAmount, serviceHub.myInfo.legalIdentity.owningKey, null)
                                        +        return FxResponse(inputs, listOf(transferedFundsOutput, residualOutput))
                                        +    } else {
                                        +        return FxResponse(inputs, listOf(transferedFundsOutput))
                                        +    }
                                        +
                                        +
                                        +
                                        +
                                        +

                                        Building the WireTransaction

                                        +

                                        Having gathered all the ingredients for the transaction we now need to +use a TransactionBuilder to construct the full WireTransaction. +The initial TransactionBuilder should be created by calling the +TransactionType.General.Builder method. (The other +TransactionBuilder implementation is only used for the NotaryChange flow where +ContractStates need moving to a different Notary.) At this point the +Notary to associate with the states should be recorded. Then we keep +adding inputs, outputs, commands and attachments to fill the +transaction. Examples of this process are:

                                        +
                                                // Modify the state field for new output. We use copy, to ensure no other modifications.
                                        +        // It is especially important for a LinearState that the linearId is copied across,
                                        +        // not accidentally assigned a new random id.
                                        +        val newState = latestRecord.state.data.copy(state = verdict)
                                        +
                                        +        // We have to use the original notary for the new transaction
                                        +        val notary = latestRecord.state.notary
                                        +
                                        +        // Get and populate the new TransactionBuilder
                                        +        // To destroy the old proposal state and replace with the new completion state.
                                        +        // Also add the Completed command with keys of all parties to signal the Tx purpose
                                        +        // to the Contract verify method.
                                        +        val tx = TransactionType.
                                        +                General.
                                        +                Builder(notary).
                                        +                withItems(
                                        +                        latestRecord,
                                        +                        newState,
                                        +                        Command(TradeApprovalContract.Commands.Completed(),
                                        +                                listOf(serviceHub.myInfo.legalIdentity.owningKey, latestRecord.state.data.source.owningKey)))
                                        +        tx.setTime(serviceHub.clock.instant(), Duration.ofSeconds(60))
                                        +        // We can sign this transaction immediately as we have already checked all the fields and the decision
                                        +        // is ultimately a manual one from the caller.
                                        +        tx.signWith(serviceHub.legalIdentityKey)
                                        +        // Convert to SignedTransaction we can pass around certain that it cannot be modified.
                                        +        val selfSignedTx = tx.toSignedTransaction(false)
                                        +
                                        +
                                        +
                                            private fun buildTradeProposal(ourStates: FxResponse, theirStates: FxResponse): SignedTransaction {
                                        +        // This is the correct way to create a TransactionBuilder,
                                        +        // do not construct directly.
                                        +        // We also set the notary to match the input notary
                                        +        val builder = TransactionType.General.Builder(ourStates.inputs.first().state.notary)
                                        +
                                        +        // Add the move commands and key to indicate all the respective owners and need to sign
                                        +        val ourSigners = ourStates.inputs.map { it.state.data.owner }.toSet()
                                        +        val theirSigners = theirStates.inputs.map { it.state.data.owner }.toSet()
                                        +        builder.addCommand(Cash.Commands.Move(), (ourSigners + theirSigners).toList())
                                        +
                                        +        // Build and add the inputs and outputs
                                        +        builder.withItems(*ourStates.inputs.toTypedArray())
                                        +        builder.withItems(*theirStates.inputs.toTypedArray())
                                        +        builder.withItems(*ourStates.outputs.toTypedArray())
                                        +        builder.withItems(*theirStates.outputs.toTypedArray())
                                        +
                                        +        // We have already validated their response and trust our own data
                                        +        // so we can sign
                                        +        builder.signWith(serviceHub.legalIdentityKey)
                                        +        // create a signed transaction, but pass false as parameter, because we know it is not fully signed
                                        +        val signedTransaction = builder.toSignedTransaction(checkSufficientSignatures = false)
                                        +        return signedTransaction
                                        +    }
                                        +
                                        +
                                        +
                                        +
                                        +

                                        Completing the SignedTransaction

                                        +

                                        Having created an initial WireTransaction and converted this to an +initial SignedTransaction the process of verifying and forming a +full SignedTransaction begins and then completes with the +notarisation. In practice this is a relatively stereotypical process, +because assuming the WireTransaction is correctly constructed the +verification should be immediate. However, it is also important to +recheck the business details of any data received back from an external +node, because a malicious party could always modify the contents before +returning the transaction. Each remote flow should therefore check as +much as possible of the initial SignedTransaction inside the unwrap of +the receive before agreeing to sign. Any issues should immediately throw +an exception to abort the flow. Similarly the originator, should always +apply any new signatures to its original proposal to ensure the contents +of the transaction has not been altered by the remote parties.

                                        +

                                        The typical code therefore checks the received SignedTransaction +using the verifySignatures method, but excluding itself, the notary +and any other parties yet to apply their signature. The contents of the +WireTransaction inside the SignedTransaction should be fully +verified further by expanding with toLedgerTransaction and calling +verify. Further context specific and business checks should then be +made, because the Contract.verify is not allowed to access external +context. For example the flow may need to check that the parties are the +right ones, or that the Command present on the transaction is as +expected for this specific flow. An example of this from the demo code is:

                                        +
                                                // First we receive the verdict transaction signed by their single key
                                        +        val completeTx = receive<SignedTransaction>(source).unwrap {
                                        +            // Check the transaction is signed apart from our own key and the notary
                                        +            val wtx = it.verifySignatures(serviceHub.myInfo.legalIdentity.owningKey, it.tx.notary!!.owningKey)
                                        +            // Check the transaction data is correctly formed
                                        +            wtx.toLedgerTransaction(serviceHub).verify()
                                        +            // Confirm that this is the expected type of transaction
                                        +            require(wtx.commands.single().value is TradeApprovalContract.Commands.Completed) {
                                        +                "Transaction must represent a workflow completion"
                                        +            }
                                        +            // Check the context dependent parts of the transaction as the
                                        +            // Contract verify method must not use serviceHub queries.
                                        +            val state = wtx.outRef<TradeApprovalContract.State>(0)
                                        +            require(state.state.data.source == serviceHub.myInfo.legalIdentity) {
                                        +                "Proposal not one of our original proposals"
                                        +            }
                                        +            require(state.state.data.counterparty == source) {
                                        +                "Proposal not for sent from correct source"
                                        +            }
                                        +            it
                                        +        }
                                        +
                                        +
                                        +

                                        After verification the remote flow will return its signature to the +originator. The originator should apply that signature to the starting +SignedTransaction and recheck the signatures match.

                                        +
                                        +
                                        +

                                        Committing the Transaction

                                        +

                                        Once all the party signatures are applied to the SignedTransaction the +final step is notarisation. This involves calling NotaryFlow.Client +to confirm the transaction, consume the inputs and return its confirming +signature. Then the flow should ensure that all nodes end with all +signatures and that they call ServiceHub.recordTransactions. The +code for this is standardised in the FinalityFlow, or more explictly +an example is:

                                        +
                                                // Run the FinalityFlow to notarise and distribute the completed transaction.
                                        +        subFlow(FinalityFlow(allPartySignedTx,
                                        +                setOf(latestRecord.state.data.source, latestRecord.state.data.counterparty)))
                                        +
                                        +
                                        +
                                        +
                                        +

                                        Partially Visible Transactions

                                        +

                                        The discussion so far has assumed that the parties need full visibility +of the transaction to sign. However, there may be situations where each +party needs to store private data for audit purposes, or for evidence to +a regulator, but does not wish to share that with the other trading +partner. The tear-off/Merkle tree support in Corda allows flows to send +portions of the full transaction to restrict visibility to remote +parties. To do this one can use the +WireTransaction.buildFilteredTransaction extension method to produce +a FilteredTransaction. The elements of the SignedTransaction +which we wish to be hide will be replaced with their secure hash. The +overall transaction txid is still provable from the +FilteredTransaction preventing change of the private data, but we do +not expose that data to the other node directly. A full example of this +can be found in the NodeInterestRates Oracle code from the +irs-demo project which interacts with the RatesFixFlow flow. +Also, refer to the Transaction tear-offs documentation.

                                        +
                                        +
                                        + + +
                                        +
                                        + + +
                                        +
                                        + +
                                        + +
                                        + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/tutorial-clientrpc-api.html b/docs/build/html/tutorial-clientrpc-api.html index 7c06f65f37..d203b54d09 100644 --- a/docs/build/html/tutorial-clientrpc-api.html +++ b/docs/build/html/tutorial-clientrpc-api.html @@ -31,8 +31,8 @@ - - + + @@ -89,7 +89,9 @@

                                        Key concepts

                                        +

                                        CorDapps

                                        +

                                        The Corda node

                                        -

                                        CorDapps

                                        -

                                        Tutorials

                                        @@ -146,6 +157,8 @@

                                        Appendix

                                    +
                                    +

                                    Warning

                                    +

                                    This API is evolving and will continue to grow as new functionality and features added to Corda are made available to RPC clients.

                                    +

                                    The one we need in order to dump the transaction graph is verifiedTransactions. The type signature tells us that the RPC will return a list of transactions and an Observable stream. This is a general pattern, we query some data and the -node will return the current snapshot and future updates done to it.

                                    +node will return the current snapshot and future updates done to it. Observables are described in further detail in +Client RPC

                                            val (transactions: List<SignedTransaction>, futureTransactions: Observable<SignedTransaction>) = proxy.verifiedTransactions()
                                     
                                    @@ -351,9 +369,9 @@ latter.

                                    Then in a loop we generate randomly either an Issue, a Pay or an Exit transaction.

                                    The RPC we need to initiate a Cash transaction is startFlowDynamic which may start an arbitrary flow, given sufficient permissions to do so. We won’t use this function directly, but rather a type-safe wrapper around it startFlow that type-checks the arguments for us.

                                    Finally we have everything in place: we start a couple of nodes, connect to them, and start creating transactions while listening on successfully created ones, which are dumped to the console. We just need to run it!:

                                    -
                                    # Build the example
                                    +
                                    # Build the example
                                     ./gradlew docs/source/example-code:installDist
                                    -# Start it
                                    +# Start it
                                     ./docs/source/example-code/build/install/docs/source/example-code/bin/client-rpc-tutorial Print
                                     
                                    @@ -400,13 +418,56 @@ requests or responses with the Kryo instance RPC uses. Here’ }
                                    -

                                    See more on plugins in Creating a CorDapp.

                                    +

                                    See more on plugins in CorDapps Background.

                                    Warning

                                    We will be replacing the use of Kryo in RPC with a stable message format and this will mean that this plugin customisation point will either go away completely or change.

                                    +
                                    +

                                    Security

                                    +

                                    RPC credentials associated with a Client must match the permission set configured on the server Node. +This refers to both authentication (username and password) and role-based authorisation (a permissioned set of RPC operations an +authenticated user is entitled to run).

                                    +
                                    +

                                    Note

                                    +

                                    Permissions are represented as String’s to allow RPC implementations to add their own permissioning. +Currently the only permission type defined is StartFlow, which defines a list of whitelisted flows an authenticated use may execute.

                                    +
                                    +

                                    In the instructions above the server node permissions are configured programmatically in the driver code:

                                    +
                                    driver(driverDirectory = baseDirectory) {
                                    +    val user = User("user", "password", permissions = setOf(startFlowPermission<CashFlow>()))
                                    +    val node = startNode("Alice", rpcUsers = listOf(user)).get()
                                    +
                                    +
                                    +

                                    When starting a standalone node using a configuration file we must supply the RPC credentials as follows:

                                    +
                                    rpcUsers : [
                                    +    { user=user, password=password, permissions=[ StartFlow.net.corda.flows.CashFlow ] }
                                    +]
                                    +
                                    +
                                    +

                                    When using the gradle Cordformation plugin to configure and deploy a node you must supply the RPC credentials in a similar manner:

                                    +
                                    rpcUsers = [
                                    +        ['user' : "user",
                                    +         'password' : "password",
                                    +         'permissions' : ["StartFlow.net.corda.flows.CashFlow"]]
                                    +]
                                    +
                                    +
                                    +

                                    You can then deploy and launch the nodes (Notary and Alice) as follows:

                                    +
                                    # to create a set of configs and installs under ``docs/source/example-code/build/nodes`` run
                                    +./gradlew docs/source/example-code:deployNodes
                                    +# to open up two new terminals with the two nodes run
                                    +./docs/source/example-code/build/nodes/runnodes
                                    +# followed by the same commands as before:
                                    +./docs/source/example-code/build/install/docs/source/example-code/bin/client-rpc-tutorial Print
                                    +./docs/source/example-code/build/install/docs/source/example-code/bin/client-rpc-tutorial Visualise
                                    +
                                    +
                                    +

                                    See more on security in Secure coding guidelines, node configuration in Node configuration and +Cordformation in CorDapps Background

                                    +
                                    @@ -416,10 +477,10 @@ customisation point will either go away completely or change.

                                    @@ -428,7 +489,7 @@ customisation point will either go away completely or change.

                                    - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                                    diff --git a/docs/build/html/tutorial-contract-clauses.html b/docs/build/html/tutorial-contract-clauses.html index 833b02e788..c21067907f 100644 --- a/docs/build/html/tutorial-contract-clauses.html +++ b/docs/build/html/tutorial-contract-clauses.html @@ -89,7 +89,9 @@

                                    Key concepts

                                    +

                                    CorDapps

                                    +

                                    The Corda node

                                    -

                                    CorDapps

                                    -

                                    Tutorials

                                    @@ -150,6 +162,8 @@

                                    Appendix

                                    • Load testing
                                    • +
                                    • Introduction - What is a corda network?
                                    • +
                                    • Setting up your own network
                                    • Secure coding guidelines
                                    • Release process
                                    • Steps to cut a release
                                    • @@ -208,44 +222,51 @@

                                      Writing a contract using clauses

                                      This tutorial will take you through restructuring the commercial paper contract to use clauses. You should have -already completed “Writing a contract”.

                                      +already completed “Writing a contract”. +As before, the example is focused on basic implementation of commercial paper, which is essentially a simpler version of a corporate +bond. A company issues CP with a particular face value, say $100, but sells it for less, say $90. The paper can be redeemed +for cash at a given date in the future. Thus this example would have a 10% interest rate with a single repayment. +Whole Kotlin code can be found in CommercialPaper.kt.

                                      +
                                      +

                                      What are clauses and why to use them?

                                      Clauses are essentially micro-contracts which contain independent verification logic, and can be logically composed -together to form a contract. Clauses are designed to enable re-use of common logic, for example issuing state objects +together to form a contract. Clauses are designed to enable re-use of common verification parts, for example issuing state objects is generally the same for all fungible contracts, so a common issuance clause can be inherited for each contract’s issue clause. This cuts down on scope for error, and improves consistency of behaviour. By splitting verification logic into smaller chunks, they can also be readily tested in isolation.

                                      -

                                      Clauses can be composed of subclauses, for example the AllClause or AnyClause clauses take list of clauses -that they delegate to. Clauses can also change the scope of states and commands being verified, for example grouping -together fungible state objects and running a clause against each distinct group.

                                      -

                                      The commercial paper contract has a Group outermost clause, which contains the Issue, Move and Redeem -clauses. The result is a contract that looks something like this:

                                      -
                                      -
                                        -
                                      1. -
                                        Group input and output states together, and then apply the following clauses on each group:
                                        -
                                          -
                                        1. If an Issue command is present, run appropriate tests and end processing this group.
                                        2. -
                                        3. If a Move command is present, run appropriate tests and end processing this group.
                                        4. -
                                        5. If a Redeem command is present, run appropriate tests and end processing this group.
                                        6. -
                                        -
                                        -
                                        -
                                      2. -
                                      -
                                      +
                                      +
                                      +

                                      How clauses work?

                                      +

                                      We have different types of clauses, the most basic are the ones that define verification logic for particular command set. +We will see them later as elementary building blocks that commercial paper consist of - Move, Issue and Redeem. +As a developer you need to identify reusable parts of your contract and decide how they should be combined. It is where +composite clauses become useful. They gather many clause subcomponents and resolve how and which of them should be checked.

                                      +

                                      For example, assume that we want to verify a transaction using all constraints defined in separate clauses. We need to +wrap classes that define them into AllComposition composite clause. It assures that all clauses from that combination +match with commands in a transaction - only then verification logic can be executed. +It may be a little confusing, but composite clause is also a clause and you can even wrap it in the special grouping clause. +In CommercialPaper it looks like that:

                                      +_images/commPaperClauses.png +

                                      The most basic types of composite clauses are AllComposition, AnyComposition and FirstComposition. +In this tutorial we will use GroupClauseVerifier and AnyComposition. It’s important to understand how they work. +Charts showing execution and more detailed information can be found in Clauses key concepts.

                                      +
                                      -

                                      Commercial paper class

                                      -

                                      To use the clause verification logic, the contract needs to call the verifyClause function, passing in the -transaction, a clause to verify, and a collection of commands the clauses are expected to handle all of. This list of -commands is important because verifyClause checks that none of the commands are left unprocessed at the end, and -raises an error if they are. The top level clause would normally be a composite clause (such as AnyComposition, -AllComposition, etc.) which contains further clauses. The following examples are trimmed to the modified class -definition and added elements, for brevity:

                                      +

                                      Commercial paper class

                                      +

                                      We start from defining CommercialPaper class. As in previous tutorial we need some elementary parts: Commands interface, +generateMove, generateIssue, generateRedeem - so far so good that stays the same. The new part is verification and +Clauses interface (you will see them later in code). Let’s start from the basic structure:

                                      class CommercialPaper : Contract {
                                           override val legalContractReference: SecureHash = SecureHash.sha256("https://en.wikipedia.org/wiki/Commercial_paper")
                                       
                                           override fun verify(tx: TransactionForContract) = verifyClause(tx, Clauses.Group(), tx.commands.select<Commands>())
                                      +
                                      +    interface Commands : CommandData {
                                      +        data class Move(override val contractHash: SecureHash? = null) : FungibleAsset.Commands.Move, Commands
                                      +        class Redeem : TypeOnlyCommandData(), Commands
                                      +        data class Issue(override val nonce: Long = random63BitValue()) : IssueCommand, Commands
                                      +    }
                                       
                                      public class CommercialPaper implements Contract {
                                      @@ -258,85 +279,132 @@ definition and added elements, for brevity:

                                      public void verify(@NotNull TransactionForContract tx) throws IllegalArgumentException { ClauseVerifier.verifyClause(tx, new Clauses.Group(), extractCommands(tx)); } + + public interface Commands extends CommandData { + class Move implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Move; } + } + + class Redeem implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Redeem; } + } + + class Issue implements Commands { + @Override + public boolean equals(Object obj) { return obj instanceof Issue; } + } + }
                                      +

                                      As you can see we used verifyClause function with Clauses.Group() in place of previous verification. +It’s an entry point to running clause logic. verifyClause takes the transaction, a clause (usually a composite one) +to verify, and a collection of commands the clause is expected to handle all of. This list of commands is important because +verifyClause checks that none of the commands are left unprocessed at the end, and raises an error if they are.

                                      -
                                      -

                                      Clauses

                                      -

                                      We’ll tackle the inner clauses that contain the bulk of the verification logic, first, and the clause which handles -grouping of input/output states later. The clauses must extend the Clause abstract class, which defines -the verify function, and the requiredCommands property used to determine the conditions under which a clause -is triggered. Composite clauses should extend the CompositeClause abstract class, which extends Clause to -add support for wrapping around multiple clauses.

                                      -

                                      The verify function defined in the Clause interface is similar to the conventional Contract verification -function, although it adds new parameters and returns the set of commands which it has processed. Normally this returned -set is identical to the requiredCommands used to trigger the clause, however in some cases the clause may process -further optional commands which it needs to report that it has handled.

                                      -

                                      The Move clause for the commercial paper contract is relatively simple, so we will start there:

                                      +
                                      +

                                      Simple Clauses

                                      +

                                      Let’s move to constructing contract logic in terms of clauses language. Commercial paper contract has three commands and +three corresponding behaviours: Issue, Move and Redeem. Each of them has a specific set of requirements that must be satisfied - +perfect material for defining clauses. For brevity we will show only Move clause, rest is constructed in similar manner +and included in the CommercialPaper.kt code.

                                      -
                                      class Move: Clause<State, Commands, Issued<Terms>>() {
                                      -    override val requiredCommands: Set<Class<out CommandData>>
                                      -        get() = setOf(Commands.Move::class.java)
                                      +
                                      interface Clauses {
                                      +    class Move: Clause<State, Commands, Issued<Terms>>() {
                                      +        override val requiredCommands: Set<Class<out CommandData>>
                                      +            get() = setOf(Commands.Move::class.java)
                                       
                                      -    override fun verify(tx: TransactionForContract,
                                      +        override fun verify(tx: TransactionForContract,
                                                               inputs: List<State>,
                                                               outputs: List<State>,
                                                               commands: List<AuthenticatedObject<Commands>>,
                                                               groupingKey: Issued<Terms>?): Set<Commands> {
                                      -        val command = commands.requireSingleCommand<Commands.Move>()
                                      -        val input = inputs.single()
                                      -        requireThat {
                                      -            "the transaction is signed by the owner of the CP" by (input.owner in command.signers)
                                      -            "the state is propagated" by (outputs.size == 1)
                                      +            val command = commands.requireSingleCommand<Commands.Move>()
                                      +            val input = inputs.single()
                                      +            requireThat {
                                      +                "the transaction is signed by the owner of the CP" by (input.owner in command.signers)
                                      +                "the state is propagated" by (outputs.size == 1)
                                      +                // Don't need to check anything else, as if outputs.size == 1 then the output is equal to
                                      +                // the input ignoring the owner field due to the grouping.
                                      +            }
                                      +            return setOf(command.value)
                                      +        }
                                      +    }
                                      +    ...
                                      +
                                      +
                                      +
                                      public interface Clauses {
                                      +    class Move extends Clause<State, Commands, State> {
                                      +        @NotNull
                                      +        @Override
                                      +        public Set<Class<? extends CommandData>> getRequiredCommands() {
                                      +            return Collections.singleton(Commands.Move.class);
                                      +        }
                                      +
                                      +        @NotNull
                                      +        @Override
                                      +        public Set<Commands> verify(@NotNull TransactionForContract tx,
                                      +                                       @NotNull List<? extends State> inputs,
                                      +                                       @NotNull List<? extends State> outputs,
                                      +                                       @NotNull List<? extends AuthenticatedObject<? extends Commands>> commands,
                                      +                                       @NotNull State groupingKey) {
                                      +            AuthenticatedObject<Commands.Move> cmd = requireSingleCommand(tx.getCommands(), Commands.Move.class);
                                      +            // There should be only a single input due to aggregation above
                                      +            State input = single(inputs);
                                      +
                                      +            if (!cmd.getSigners().contains(input.getOwner()))
                                      +                throw new IllegalStateException("Failed requirement: the transaction is signed by the owner of the CP");
                                      +
                                      +            // Check the output CP state is the same as the input state, ignoring the owner field.
                                      +            if (outputs.size() != 1) {
                                      +                throw new IllegalStateException("the state is propagated");
                                      +            }
                                                   // Don't need to check anything else, as if outputs.size == 1 then the output is equal to
                                                   // the input ignoring the owner field due to the grouping.
                                      -        }
                                      -        return setOf(command.value)
                                      -    }
                                      -}
                                      -
                                      -
                                      -
                                      class Move extends Clause<State, Commands, State> {
                                      -    @NotNull
                                      -    @Override
                                      -    public Set<Class<? extends CommandData>> getRequiredCommands() {
                                      -        return Collections.singleton(Commands.Move.class);
                                      -    }
                                      -
                                      -    @NotNull
                                      -    @Override
                                      -    public Set<Commands> verify(@NotNull TransactionForContract tx,
                                      -                                   @NotNull List<? extends State> inputs,
                                      -                                   @NotNull List<? extends State> outputs,
                                      -                                   @NotNull List<? extends AuthenticatedObject<? extends Commands>> commands,
                                      -                                   @NotNull State groupingKey) {
                                      -        AuthenticatedObject<Commands.Move> cmd = requireSingleCommand(tx.getCommands(), Commands.Move.class);
                                      -        // There should be only a single input due to aggregation above
                                      -        State input = single(inputs);
                                      -
                                      -        if (!cmd.getSigners().contains(input.getOwner()))
                                      -            throw new IllegalStateException("Failed requirement: the transaction is signed by the owner of the CP");
                                      -
                                      -        // Check the output CP state is the same as the input state, ignoring the owner field.
                                      -        if (outputs.size() != 1) {
                                      -            throw new IllegalStateException("the state is propagated");
                                      +            return Collections.singleton(cmd.getValue());
                                               }
                                      -        // Don't need to check anything else, as if outputs.size == 1 then the output is equal to
                                      -        // the input ignoring the owner field due to the grouping.
                                      -        return Collections.singleton(cmd.getValue());
                                           }
                                      -}
                                      +    ...
                                       
                                      +

                                      We took part of code for Command.Move verification from previous tutorial and put it into the verify function +of Move class. Notice that this class must extend the Clause abstract class, which defines +the verify function, and the requiredCommands property used to determine the conditions under which a clause +is triggered. In the above example it means that the clause will run verification when the Commands.Move is present in a transaction.

                                      +
                                      +

                                      Note

                                      +

                                      Notice that commands refer to all input and output states in a transaction. For clause to be executed, transaction has +to include all commands from requiredCommands set.

                                      +
                                      +

                                      Few important changes:

                                      +
                                        +
                                      • verify function returns the set of commands which it has processed. Normally this returned set is identical to the +requiredCommands used to trigger the clause, however in some cases the clause may process further optional commands +which it needs to report that it has handled.
                                      • +
                                      • Verification takes new parameters. Usually inputs and outputs are some subset of the original transaction entries +passed to the clause by outer composite or grouping clause. groupingKey is a key used to group original states.
                                      • +
                                      +

                                      As a simple example imagine input states:

                                      +
                                        +
                                      1. 1000 GBP issued by Bank of England
                                      2. +
                                      3. 500 GBP issued by Bank of England
                                      4. +
                                      5. 1000 GBP issued by Bank of Scotland
                                      6. +
                                      +

                                      We will group states by Issuer so in the first group we have inputs 1 and 2, in second group input number 3. Grouping keys are: +‘GBP issued by Bank of England’ and ‘GBP issued by Bank of Scotland’.

                                      +

                                      How the states can be grouped and passed in that form to the Move clause? That leads us to the concept of GroupClauseVerifier.

                                      Group clause

                                      -

                                      We need to wrap the move clause (as well as the issue and redeem clauses - see the relevant contract code for their -full specifications) in an outer clause that understands how to group contract states and objects. For this we extend -the standard GroupClauseVerifier and specify how to group input/output states, as well as the top-level to run on -each group. As with the top level clause on a contract, this is normally a composite clause that delegates to subclauses.

                                      +

                                      We may have a transaction with similar but unrelated state evolutions which need to be validated independently. It +makes sense to check Move command on groups of related inputs and outputs (see example above). Thus, we need to collect +relevant states together. +For this we extend the standard GroupClauseVerifier and specify how to group input/output states, as well as the top-level +clause to run on each group. In our example a top-level is a composite clause - AnyCompostion that delegates verification to +it’s subclasses (wrapped move, issue, redeem). Any in this case means that it will take 0 or more clauses that match transaction commands.

                                      class Group : GroupClauseVerifier<State, Commands, Issued<Terms>>(
                                           AnyComposition(
                                      @@ -366,15 +434,17 @@ each group. As with the top level clause on a contract, this is normally a compo
                                       
                                      -

                                      For the CommercialPaper contract, this is the top level clause for the contract, and is passed directly into -verifyClause (see the example code at the top of this tutorial).

                                      +

                                      For the CommercialPaper contract, Group is the main clause for the contract, and is passed directly into +verifyClause (see the example code at the top of this tutorial). We used groupStates function here, it’s worth reminding +how it works: Using state groups.

                                      Summary

                                      In summary the top level contract CommercialPaper specifies a single grouping clause of type CommercialPaper.Clauses.Group which in turn specifies GroupClause implementations for each type of command -(Redeem, Move and Issue). This reflects the flow of verification: In order to verify a CommercialPaper +(Redeem, Move and Issue). This reflects the flow of verification: in order to verify a CommercialPaper we first group states, check which commands are specified, and run command-specific verification logic accordingly.

                                      +_images/commPaperExecution.png

                                      Debugging

                                      @@ -404,7 +474,7 @@ performing the validation. To enable this, ensure trace level logging is enabled

                                      - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                                      diff --git a/docs/build/html/tutorial-contract.html b/docs/build/html/tutorial-contract.html index 761572a028..d0ee4d7af8 100644 --- a/docs/build/html/tutorial-contract.html +++ b/docs/build/html/tutorial-contract.html @@ -32,7 +32,7 @@ - + @@ -89,7 +89,9 @@

                                      Key concepts

                                      +

                                      CorDapps

                                      +

                                      The Corda node

                                      -

                                      CorDapps

                                      -

                                      Tutorials

                                      -

                                      Using state groups

                                      +

                                      Using state groups

                                      The simplest way to write a smart contract would be to say that each transaction can have a single input state and a single output state of the kind govered by that contract. This would be easy for the developer, but would prevent many important use cases.

                                      @@ -953,7 +965,7 @@ frequently needed chunks of logic “clauses”, and they can simplify d Next - Previous + Previous
                                      @@ -962,7 +974,7 @@ frequently needed chunks of logic “clauses”, and they can simplify d

                                      - © Copyright 2016, Distributed Ledger Group, LLC. + © Copyright 2016, R3 Limited.

                                      diff --git a/docs/build/html/tutorial-cordapp.html b/docs/build/html/tutorial-cordapp.html new file mode 100644 index 0000000000..d4dcb052c1 --- /dev/null +++ b/docs/build/html/tutorial-cordapp.html @@ -0,0 +1,1006 @@ + + + + + + + + + + + The CorDapp Template — R3 Corda latest documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      + + + + +
                                      + + + + + + +
                                      +
                                      + + + + + + +
                                      + +
                                      +
                                      +
                                      +
                                      + + +
                                      +

                                      The CorDapp Template

                                      +

                                      This guide covers how to get started with the cordapp-template. Please note there are two Corda repositories:

                                      +
                                        +
                                      • corda which contains the core platform code and sample CorDapps.
                                      • +
                                      • cordapp-template which contains a template CorDapp you can use to bootstrap your own CorDapps. It is the subject +of this tutorial and should help you understand the basics of building a CorDapp.
                                      • +
                                      +

                                      We recommend you read the non-technical white paper and technical white paper before you get started with Corda:

                                      +
                                        +
                                      1. The Introductory white paper describes the +motivating vision and background of the project. It is the kind of document your boss should read. It describes why the +project exists and briefly compares it to alternative systems on the market.
                                      2. +
                                      3. The Technical white paper describes the entire +intended design from beginning to end. It is the kind of document that you should read, or at least, read parts of. Note +that because the technical white paper describes the intended end state, it does not always align with the implementation.
                                      4. +
                                      +
                                      +

                                      Getting started

                                      +

                                      There are two ways to get started with the CorDapp template. You can either work from a milestone release of Corda or a +SNAPSHOT release of Corda.

                                      +

                                      Using a monthly Corda milestone release. If you wish to develop your CorDapp using the most recent milestone release +then you can get started simply by cloning the cordapp-template repository. Gradle will grab all the required dependencies +for you from our public Maven repository.

                                      +

                                      Using a Corda SNAPSHOT build. Alternatively, if you wish to work from the master branch of the Corda repo which contains +the most up-to-date Corda feature set then you will need to clone the corda repository and publish the latest master +build (or previously tagged releases) to your local Maven repository. You will then need to ensure that Gradle +grabs the correct dependencies for you from Maven local by changing the corda_version in build.gradle. This will be +covered below in Using a SNAPSHOT release.

                                      +

                                      Firstly, follow the getting set up page to download the JDK, IntelliJ and git if you didn’t +already have it.

                                      +
                                      +
                                      +

                                      Working from milestone releases

                                      +

                                      If you wish to build a CorDapp against a milestone release then please use these instructions.

                                      +

                                      The process for developing your CorDapp from a milestone release is the most simple way to get started and is the preferred +approach.

                                      +

                                      We publish all our milestone releases to a public Maven repository on a monthly basis. As such, Gradle will automatically +grab the appropriately versioned (specified in the cordapp-template‘s build.gradle file) dependencies for you from Maven. +All you have to do is check out the release tag of the template version you wish to use.

                                      +

                                      By default, the master branch of the cordapp-template points to a SNAPSHOT release of Corda, this is because it is +being constantly updated to reflect the changes in the master branch of the corda repository.

                                      +
                                      +

                                      Note

                                      +

                                      If you wish to use a SNAPSHOT release then follow the instructions below: Using a SNAPSHOT release.

                                      +
                                      +

                                      To clone the cordapp-template repository, use the following command:

                                      +

                                      git clone https://github.com/corda/cordapp-template

                                      +

                                      Now change directories to the freshly cloned repo:

                                      +

                                      cd cordapp-template

                                      +

                                      To enumerate all the tagged releases. Use:

                                      +

                                      git tag

                                      +

                                      To checkout a specific tag, use:

                                      +

                                      git checkout -b [local_branch_name] tags/[tag_name]

                                      +

                                      where local_branch_name is a name of your choice and tag_name is the name of the tag you wish to checkout.

                                      +

                                      Gradle will handle all the dependencies for you. Now you are now ready to get started building the CorDapp Template.

                                      +
                                      +
                                      +

                                      Using a SNAPSHOT release

                                      +

                                      If you wish to build a CorDapp against the most current version of Corda, follow these instructions.

                                      +

                                      The Corda repository comprises the following folders:

                                      +
                                        +
                                      • buildSrc contains necessary gradle plugins to build Corda.
                                      • +
                                      • client contains the RPC client framework.
                                      • +
                                      • config contains logging configurations and the default node configuration file.
                                      • +
                                      • core containing the core Corda libraries such as crypto functions, types for Corda’s building blocks: states, +contracts, transactions, attachments, etc. and some interfaces for nodes and protocols.
                                      • +
                                      • docs contains the Corda docsite in restructured text format as well as the built docs in html. The docs can be +accessed via /docs/index.html from the root of the repo.
                                      • +
                                      • finance defines a range of elementary contracts (and associated schemas) and protocols, such as abstract fungible +assets, cash, obligation and commercial paper.
                                      • +
                                      • gradle contains the gradle wrapper which you’ll use to execute gradle commands.
                                      • +
                                      • gradle-plugins contains some additional plugins which we use to deploy Corda nodes.
                                      • +
                                      • lib contains some dependencies.
                                      • +
                                      • node contains anything specifically required for creating, running and managing nodes (eg: node driver, servlets, +node services, messaging, persistence).
                                      • +
                                      • samples contains all our Corda demos and code samples.
                                      • +
                                      • test-utils contains some utilities for unit testing contracts ( the contracts testing DSL) and protocols (the +mock network) implementation.
                                      • +
                                      • tools contains the explorer which is a GUI front-end for Corda.
                                      • +
                                      +

                                      Firstly navigate to the folder on your machine you wish to clone the Corda repository to. Then use the following command +to clone the Corda repository:

                                      +

                                      git clone https://github.com/corda/corda.git

                                      +

                                      Now change directories:

                                      +

                                      cd corda

                                      +

                                      Once you’ve cloned the corda repository and are in the repo directory you have the option to remain on the master +branch or checkout a specific branch. Use:

                                      +

                                      git branch --all

                                      +

                                      to enumerate all the branches. To checkout a specific branch, use:

                                      +

                                      git checkout -b [local_branch_name] origin/[remote_branch_name]

                                      +

                                      where local_branch_name is a name of your choice and remote_branch_name is the name of the remote branch you wish +to checkout.

                                      +
                                      +

                                      Note

                                      +

                                      When working with master you will have access to the most up-to-date feature set. However you will be +potentially sacrificing stability. We will endeavour to keep the master branch of the cordapp-template repo in sync +with the master branch of corda repo. A milestone tagged release would be more stable for CorDapp development.

                                      +
                                      +

                                      The next step is to publish the Corda JARs to your local Maven repository. By default the Maven local repository can be +found:

                                      +
                                        +
                                      • ~/.m2/repository on Unix/Mac OS X
                                      • +
                                      • %HOMEPATH%\.m2 on windows.
                                      • +
                                      +

                                      Publishing can be done with running the following Gradle task from the root project directory:

                                      +

                                      Unix/Mac OSX: ./gradlew install

                                      +

                                      Windows: gradlew.bat install

                                      +

                                      This will install all required modules, along with sources and JavaDocs to your local Maven repository. The version +and groupid of Corda installed to Maven local is specified in the build.gradle file in the root of the corda +repository. You shouldn’t have to change these values unless you want to publish multiple versions of a SNAPSHOT, e.g. +if you are trying out new features, in this case you can change version for each SNAPSHOT you publish.

                                      +
                                      +

                                      Note

                                      +

                                      A quick point on corda version numbers used by Gradle.

                                      +

                                      In the build.gradle file for your CorDapp, you can specify the corda_version to use. It is important that when +developing your CorDapp that you use the correct version number. For example, when wanting to work from a SNAPSHOT +release, the release numbers are suffixed with ‘SNAPSHOT’, e.g. if the latest milestone release is M6 then the +SNAPSHOT release will be 0.7-SNAPSHOT, and so on. As such, you will set your corda_version to '0.7-SNAPSHOT' +in the build.gradle file in your CorDapp. Gradle will automatically grab the SNAPSHOT dependencies from your local +Maven repository. Alternatively, if working from a milestone release, you will use the version number only, for example +0.6 or 0.7.

                                      +

                                      Lastly, as the Corda repository evolves on a daily basis up until the next milestone release, it is worth nothing that +the substance of two SNAPSHOT releases of the same number may be different. If you are using a SNAPSHOT and need help +debugging an error then please tell us the commit you are working from. This will help us ascertain the issue.

                                      +
                                      +

                                      As additional feature branches are merged into Corda you can git pull the new changes from the corda repository. +If you are feeling inquisitive, you may also wish to review some of the current feature branches. All new features are +developed on separate branches. To enumerate all the current branches use:

                                      +

                                      git branch --all

                                      +

                                      and to check out an open feature branch, use:

                                      +

                                      git checkout -b [local_branch_name] origin/[branch_name]

                                      +
                                      +

                                      Note

                                      +

                                      Publishing Corda JARs from unmerged feature branches might cause some unexpected behaviour / broken CorDapps. +It would also replace any previously published SNAPSHOTS of the same version.

                                      +
                                      +
                                      +

                                      Warning

                                      +

                                      If you do modify Corda after you have previously published it to Maven local then you must republish your +SNAPSHOT build such that Maven reflects the changes you have made.

                                      +
                                      +

                                      Once you have published the Corda JARs to your local Maven repository, you are ready to get started building your +CorDapp using the latest Corda features.

                                      +
                                      +
                                      +

                                      Opening the CorDapp Template with IntelliJ

                                      +

                                      For those familiar with IntelliJ, you can skip this section.

                                      +

                                      As noted in the getting started guide, we recommend using the IntelliJ IDE. Assuming you have already downloaded and +installed IntelliJ, lets now open the CorDapp Template with IntelliJ.

                                      +

                                      For those completely new to IntelliJ

                                      +

                                      Firstly, load up IntelliJ. A dialogue will appear:

                                      +_images/intellij-welcome.png +

                                      Click open, then navigate to the folder where you cloned the cordapp-template and click OK.

                                      +

                                      Next, IntelliJ will show a bunch of pop-up windows. One of which requires our attention:

                                      +_images/unlinked-gradle-project.png +

                                      Click the ‘import gradle project’ link. A dialogue will pop-up. Press OK. Gradle will now begin obtianing all the +project dependencies and perform some indexing. It usually takes a minute or so. If you miss the ‘import gradle project’ +dialogue, simply close and re-open IntelliJ again to see it again.

                                      +

                                      Alternative approach

                                      +

                                      Alternatively, one can instruct IntelliJ to create a new project through cloning a repository. From the IntelliJ welcome +dialogue (shown above), opt to ‘check out from version control’, then select git and enter the git url for the CorDpp tempalte +(https://github.com/corda/cordapp-template). You’ll then need to import the Gradle project when prompted, as explained above.

                                      +

                                      If you already have IntelliJ open

                                      +

                                      From the File menu, navigate to Open ... and then navigate to the directory where you cloned the cordapp-template. +Alternatively, if you wish to clone from github directly then navigate to File > New > Project from existing sources ... +and enter the URL to the CorDapp Template (specified above). When instructed, be sure to import the Gradle project when prompted.

                                      +

                                      The Gradle plugin

                                      +

                                      IntelliJ can be used to run Gradle tasks through the Gradle plugin which can be found via View > Tool windows > Gradle. +All the Gradle projects are listed in the window on the right hand side of the IDE. Click on a project, then ‘tasks’ to +see all available Gradle tasks.

                                      +
                                        +
                                      • For the CorDapp Template repo there will only be one Gradle project listed.
                                      • +
                                      • For the Corda repo there will be many project listed, the root project corda and associated sub-projects: core, +finance, node, etc.
                                      • +
                                      +
                                      +

                                      Note

                                      +

                                      It’s worth noting that when you change branch in the CorDapp template, the corda_version will change to +reflect the version of the branch you are working from.

                                      +
                                      +

                                      To execute a task, double click it. The output will be shown in a console window.

                                      +
                                      +
                                      +
                                      +

                                      Building the CorDapp template

                                      +

                                      From the command line

                                      +

                                      Firstly, return to your terminal window used above and make sure you are in the cordapp-template directory.

                                      +

                                      To build the CorDapp template use the following command:

                                      +

                                      Unix/Mac OSX: ./gradlew deployNodes

                                      +

                                      Windows: gradlew.bat deployNodes

                                      +

                                      Building straight away will build the example CorDapp defined the the CorDapp template source. For more information on the example +CorDapp see “The Example CorDapp” section below. Gradle will then grab all the dependencies for you and build the +example CorDapp.

                                      +

                                      The deployNodes Gradle task allows you easily create a formation of Corda nodes. In the case of the example CorDapp +we are creating four nodes.

                                      +

                                      After the building process has finished to see the newly built nodes, you can navigate to the /build/nodes folder +located in the cordapp-template root directory. You can ignore the other folders in /build for now. The nodes +folder has the following structure:

                                      +
                                      . nodes
                                      +├── controller
                                      +│   ├── corda.jar
                                      +│   ├── dependencies
                                      +│   ├── node.conf
                                      +│   └── plugins
                                      +├── nodea
                                      +│   ├── corda.jar
                                      +│   ├── dependencies
                                      +│   ├── node.conf
                                      +│   └── plugins
                                      +├── nodeb
                                      +│   ├── corda.jar
                                      +│   ├── dependencies
                                      +│   ├── node.conf
                                      +│   └── plugins
                                      +├── nodec
                                      +│   ├── corda.jar
                                      +│   ├── dependencies
                                      +│   ├── node.conf
                                      +│   └── plugins
                                      +├── runnodes
                                      +└── runnodes.bat
                                      +
                                      +
                                      +

                                      There will be one folder generated for each node you build (more on later when we get into the detail of the +deployNodes Gradle task) and a runnodes shell script (batch file on Widnows).

                                      +

                                      Each node folder contains the Corda JAR, a folder for dependencies and a folder for plugins (or CorDapps). There is also +a node.conf file. See Corda configuration files.

                                      +

                                      Building from IntelliJ

                                      +

                                      Open the Gradle window by selecting View > Tool windows > Gradle from the main menu. You will see the Gradle window +open on the right hand side of the IDE. Expand tasks and then expand other. Double click on deployNodes. Gradle will +start the build process and output progress to a console window in the IDE.

                                      +
                                      +
                                      +

                                      Running the Sample CorDapp

                                      +
                                      +

                                      Running the Sample CorDapp from the command line

                                      +

                                      To run the sample CorDapp navigate to the build/nodes folder and execute the runnodes shell script with:

                                      +

                                      Unix: ./runnodes or sh runnodes

                                      +

                                      Windows: runnodes.bat

                                      +

                                      The runnodes scripts should create a terminal tab for each node. In each terminal tab, you’ll see the Corda welcome +message and some pertinent config information, see below:

                                      +
                                         ______               __
                                      +  / ____/     _________/ /___ _
                                      + / /     __  / ___/ __  / __ `/         Computer science and finance together.
                                      +/ /___  /_/ / /  / /_/ / /_/ /          You should see our crazy Christmas parties!
                                      +\____/     /_/   \__,_/\__,_/
                                      +
                                      +--- DEVELOPER SNAPSHOT ------------------------------------------------------------
                                      +
                                      +Logs can be found in                    : /Users/rogerwillis/Documents/Corda/cordapp-template/build/nodes/nodea/logs
                                      +Database connection url is              : jdbc:h2:tcp://10.18.0.196:50661/node
                                      +Node listening on address               : localhost:10004
                                      +Loaded plugins                          : com.example.plugin.ExamplePlugin
                                      +Embedded web server is listening on     : http://10.18.0.196:10005/
                                      +Node started up and registered in 39.0 sec
                                      +
                                      +
                                      +

                                      You’ll need to refer to the above later on for the JDBC connection string and port numbers.

                                      +

                                      Depending on the speed of your machine, it usually takes around 30 seconds for the nodes to finish starting up. If you +want to double check all the nodes are running you can query the ‘status’ end-point located at +http://host:post/api/status.

                                      +

                                      When booted up, the node will generate a bunch of files and directories in addition to the ones covered above:

                                      +
                                      .
                                      +├── artemis
                                      +├── attachments
                                      +├── cache
                                      +├── certificates
                                      +├── corda.jar
                                      +├── dependencies
                                      +├── identity-private-key
                                      +├── identity-public
                                      +├── logs
                                      +├── node.conf
                                      +├── persistence.mv.db
                                      +└── plugins
                                      +
                                      +
                                      +

                                      Notably:

                                      +
                                        +
                                      • artemis contains the internal files for Artemis MQ, our message broker.
                                      • +
                                      • attachments contains any persisted attachments.
                                      • +
                                      • certificates contains the certificate store.
                                      • +
                                      • identity-private-key is the node’s private key.
                                      • +
                                      • identity-public is the node’s public key.
                                      • +
                                      • logs contains the node’s log files.
                                      • +
                                      • persistence.mv.db is the h2 database where transactions and other data is persisted.
                                      • +
                                      +

                                      Additional files and folders are added as the node is running.

                                      +
                                      +
                                      +

                                      Running CorDapps on separate machines

                                      +

                                      Corda nodes can be run on separate machines with little additional configuration to the above instructions.

                                      +

                                      When you have successfully run the deployNodes gradle task, choose which nodes you would like to run on separate +machines. Copy the folders for those nodes from build/nodes to the other machines. Make sure that you set the +networkMapAddress property in node.conf to the correct hostname:port where the network map service node is +hosted.

                                      +

                                      The nodes can be run on each machine with java -jar corda.jar from the node’s directory.

                                      +
                                      +
                                      +

                                      Running the example CorDapp via IntelliJ

                                      +

                                      To run the example CorDapp via IntelliJ you can use the Run Example CorDapp run configuration. Select it from the drop +down menu at the top right-hand side of the IDE and press the green arrow to start the nodes. See image below:

                                      +_images/run-config-drop-down.png +

                                      The node driver defined in /src/main/kotlin/com/example/Main.kt allows you to specify how many nodes you would like +to run and the various configuration settings for each node. With the example CorDapp, the Node driver starts four nodes +and sets up an RPC user for all but the “Controller” node (which hosts the notary Service and network map service):

                                      +
                                      fun main(args: Array<String>) {
                                      +    // No permissions required as we are not invoking flows.
                                      +    val user = User("user1", "test", permissions = setOf())
                                      +    driver(dsl = {
                                      +        startNode("Controller", setOf(ServiceInfo(ValidatingNotaryService.type)))
                                      +        startNode("NodeA", rpcUsers = listOf(user))
                                      +        startNode("NodeB", rpcUsers = listOf(user))
                                      +        startNode("NodeC", rpcUsers = listOf(user))
                                      +        waitForAllNodesToFinish()
                                      +    }, isDebug = true)
                                      +}
                                      +
                                      +
                                      +

                                      To stop the nodes, press the red “stop” button at the top right-hand side of the IDE.

                                      +

                                      The node driver can also be used to as a basis for debugging your CorDapp

                                      +
                                      +
                                      +
                                      +

                                      Using the sample CorDapp

                                      +
                                      +

                                      Background

                                      +

                                      The Example CorDapp implements a basic scenario where a buyer wishes to submit purchase orders to a seller. The scenario +defines four nodes:

                                      +
                                        +
                                      • Controller which hosts the network map service and validating notary service.
                                      • +
                                      • NodeA who is the buyer.
                                      • +
                                      • NodeB who is the seller.
                                      • +
                                      • NodeC an unrelated third party.
                                      • +
                                      +

                                      NodeA can generate purchase orders for lists and quantities of items and associated metadata such as delivery address +and delivery date. The flows used to facilitate the agreement process always results in an agreement with the seller as +long as the purchase order meets the contract constraints which are defined in PurchaseOrderContract.kt.

                                      +

                                      All agreed purchase orders between NodeA and NodeB become “shared facts” between NodeA and NodeB. But note that NodeC +won’t see any of these transactions or have copies of any of the resulting PurchaseOrderState objects. This is +because data is only propagated on a need-to-know basis.

                                      +
                                      +
                                      +

                                      Interfaces

                                      +

                                      The CorDapp defines a few HTTP API end-points and also serves some static web content. The end-points allow you to +list purchase orders and add purchase orders.

                                      +

                                      The nodes can be found using the following port numbers, defined in build.gradle and the respective node.conf file for +each node found in build/nodes/NodeX` etc:

                                      +
                                        +
                                      • Controller: localhost:10003
                                      • +
                                      • NodeA: localhost:10005
                                      • +
                                      • NodeB: localhost:10007
                                      • +
                                      • NodeC: localhost:10009
                                      • +
                                      +

                                      Note that the deployNodes Gradle task is used to generate the node.conf files for each node.

                                      +

                                      As the nodes start-up they should tell you which host and port the embedded web server is running on. The API endpoints +served are as follows:

                                      +
                                        +
                                      • /api/example/me
                                      • +
                                      • /api/example/peers
                                      • +
                                      • /api/example/purchase-orders
                                      • +
                                      • /api/example/{COUNTERPARTY}/create-purchase-order
                                      • +
                                      +

                                      The static web content is served from /web/example.

                                      +

                                      A purchase order can be created via accessing the api/example/create-purchase-order end-point directly or through the +the web form hosted at /web/example.

                                      +
                                      +
                                      +

                                      Warning

                                      +

                                      The content in ``web/example`` is only available for demonstration purposes and does not implement any +anti-XSS, anti-XSRF or any other security techniques. Do not copy such code directly into products meant for production use.

                                      +
                                      +
                                      +

                                      Submitting a purchase order via HTTP API:

                                      +

                                      To create a purchase order from NodeA to NodeB, use:

                                      +
                                      echo '{"orderNumber": "1","deliveryDate": "2018-09-15","deliveryAddress": {"city": "London","country": "UK"},"items" : [{"name": "widget","amount": "3"},{"name": "thing","amount": "4"}]}' | curl -T - -H 'Content-Type: application/json' http://localhost:10005/api/example/NodeB/create-purchase-order
                                      +
                                      +
                                      +

                                      Note the port number 10005 (NodeA) and NodeB referenced in the API end-point path. This command instructs NodeA to +create and send a purchase order to NodeB. Upon verification and completion of the process, both nodes (but not NodeC) will +have a signed, notarised copy of the purchase order.

                                      +

                                      Submitting a purchase order via web/example:

                                      +

                                      Navigate to the “create purchase order” button at the top left of the page, enter in the purchase order details e.g.

                                      +
                                      Counter-party: Select from list
                                      +Order Number:  1
                                      +Delivery Date: 2018-09-15
                                      +City:          London
                                      +Country Code:  UK
                                      +Item name:     Wow such item
                                      +Item amount:   5
                                      +
                                      +
                                      +

                                      and click submit (note you can add additional item types and amounts). Upon pressing submit, the modal dialogue should close. +To check what validation is performed over the purchase order data, have a look at the PurchaseOrderContract.Place class in +PurchaseOrderContract.kt which defines the following contract constraints (among others not included here):

                                      +
                                      // Purchase order specific constraints.
                                      +"We only deliver to the UK." by (out.po.deliveryAddress.country == "UK")
                                      +"You must order at least one type of item." by (out.po.items.size > 0)
                                      +"You cannot order zero or negative amounts of an item." by (out.po.items.map(Item::amount).all { it > 0 })
                                      +"You can only order up to 10 items at a time." by (out.po.items.map(Item::amount).sum() <= 10)
                                      +val time = tx.timestamp?.midpoint
                                      +"The delivery date must be in the future." by (out.po.deliveryDate.toInstant() > time)
                                      +
                                      +
                                      +

                                      Once a purchase order has been submitted:

                                      +

                                      Inspect the terminal windows for the nodes. Assume all of the above contract constraints are met, you should see some +activity in the terminal windows for NodeA and NodeB (note: the green ticks are only visible on unix/mac):

                                      +

                                      NodeA:

                                      +
                                      ✅  Constructing proposed purchase order.
                                      +✅  Sending purchase order to seller for review.
                                      +✅  Received partially signed transaction from seller.
                                      +✅  Verifying signatures and contract constraints.
                                      +✅  Signing transaction with our private key.
                                      +✅  Obtaining notary signature.
                                      +    ✅  Requesting signature by Notary service
                                      +    ✅  Validating response from Notary service
                                      +✅  Recording transaction in vault.
                                      +✅  Sending fully signed transaction to seller.
                                      +✅  Done
                                      +
                                      +
                                      +

                                      NodeB:

                                      +
                                      ✅  Receiving proposed purchase order from buyer.
                                      +✅  Generating transaction based on proposed purchase order.
                                      +✅  Signing proposed transaction with our private key.
                                      +✅  Sending partially signed transaction to buyer and wait for a response.
                                      +✅  Verifying signatures and contract constraints.
                                      +✅  Recording transaction in vault.
                                      +✅  Done
                                      +
                                      +
                                      +

                                      NodeC:

                                      +
                                      You shouldn't see any activity.
                                      +
                                      +
                                      +

                                      Next you can view the newly created purchase order by accessing the vault of NodeA or NodeB:

                                      +

                                      Via the HTTP API:

                                      +

                                      For NodeA. navigate to http://localhost:10005/api/example/purchase-orders. For NodeB, +navigate to http://localhost:10007/api/example/purchase-orders.

                                      +

                                      Via web/example:

                                      +

                                      Navigate to http://localhost:10005/web/example the refresh button in the top left-hand side of the page. You should +see the newly created agreement on the page.

                                      +

                                      Accessing the h2 database via h2 web console:

                                      +

                                      You can connect to the h2 database to see the current state of the ledger, among other data such as the current state of +the network map cache. Firstly, navigate to the folder where you downloaded the h2 web console as part of the pre-requisites +section, above. Change directories to the bin folder:

                                      +

                                      cd h2/bin

                                      +

                                      Where there are a bunch of shell scripts and batch files. Run the web console:

                                      +

                                      Unix:

                                      +

                                      sh h2.sh

                                      +

                                      Windows:

                                      +

                                      h2.bat

                                      +

                                      The h2 web console should start up in a web browser tab. To connect we first need to obtain a JDBC connection string. Each +node outputs its connection string in the terminal window as it starts up. In a terminal window where a node is running, +look for the following string:

                                      +

                                      Database connection url is              : jdbc:h2:tcp://10.18.0.150:56736/node

                                      +

                                      you can use the string on the right to connect to the h2 database: just paste it in to the JDBC URL field and click Connect. +You will be presented with a web application that enumerates all the available tables and provides an interface for you to +query them using SQL.

                                      +

                                      Using the Example RPC client:

                                      +

                                      The /src/main/kotlin/com/example/client/ExampleClientRPC.kt file is a simple utility which uses the client RPC library +to connect to a node and log the ‘placed’ purchase orders. It will log any existing purchase orders and listen for any future +purchase orders. If you haven’t placed any purchase orders when you connect to to one of the Nodes via RPC then the client will log +and future purchase orders which are agreed.

                                      +

                                      To build the client use the following gradle task:

                                      +

                                      ./gradlew runExampleClientRPC

                                      +

                                      To run the client, via IntelliJ:

                                      +

                                      Select the ‘Run Example RPC Client’ run configuration which, by default, connects to NodeA (Artemis port 10004). Click the +Green Arrow to run the client. You can edit the run configuration to connect on a different port.

                                      +

                                      Via command line:

                                      +

                                      Run the following gradle task:

                                      +

                                      ./gradlew runExampleClientRPC localhost:10004

                                      +

                                      To close the application use ctrl+C. For more information on the client RPC interface and how to build an RPC client +application see:

                                      + +
                                      +
                                      +

                                      CorDapp-template Project Structure

                                      +

                                      The CorDapp template has the following directory structure:

                                      +
                                      . cordapp-template
                                      +├── README.md
                                      +├── LICENSE
                                      +├── build.gradle
                                      +├── config
                                      +│   ├── ...
                                      +├── gradle
                                      +│   └── ...
                                      +├── gradle.properties
                                      +├── gradlew
                                      +├── gradlew.bat
                                      +├── lib
                                      +│   ├── ...
                                      +├── settings.gradle
                                      +└── src
                                      +    ├── main
                                      +    │   ├── java
                                      +    │   ├── kotlin
                                      +    │   │   └── com
                                      +    │   │       └── example
                                      +    │   │           ├── Main.kt
                                      +    │   │           ├── api
                                      +    │   │           │   └── ExampleApi.kt
                                      +    │   │           ├── client
                                      +    │   │           │   └── ExampleClientRPC.kt
                                      +    │   │           ├── contract
                                      +    │   │           │   ├── PurchaseOrderContract.kt
                                      +    │   │           │   └── PurchaseOrderState.kt
                                      +    │   │           ├── model
                                      +    │   │           │   └── PurchaseOrder.kt
                                      +    │   │           ├── plugin
                                      +    │   │           │   └── ExamplePlugin.kt
                                      +    │   │           └── flow
                                      +    │   │               └── ExampleFlow.kt
                                      +    │   │           └── service
                                      +    │   │               └── ExampleService.kt
                                      +    │   ├── python
                                      +    │   └── resources
                                      +    │       ├── META-INF
                                      +    │       │   └── services
                                      +    │       │       └── net.corda.core.node.CordaPluginRegistry
                                      +    │       ├── certificates
                                      +    │       │   ├── readme.txt
                                      +    │       │   ├── sslkeystore.jks
                                      +    │       │   └── truststore.jks
                                      +    │       └── exampleWeb
                                      +    │           ├── index.html
                                      +    │           └── js
                                      +    │               └── example.js
                                      +    └── test
                                      +        ├── java
                                      +        ├── kotlin
                                      +        │   └── com
                                      +        │       └── example
                                      +        │           └── ExampleTest.kt
                                      +        └── resources
                                      +
                                      +
                                      +

                                      In the file structure above, the most important files and directories to note are:

                                      +
                                        +
                                      • The root directory contains some gradle files, a README and a LICENSE.
                                      • +
                                      • config contains log4j configs.
                                      • +
                                      • gradle contains the gradle wrapper, which allows the use of Gradle without installing it yourself and worrying +about which version is required.
                                      • +
                                      • lib contains the Quasar.jar which is required for runtime instrumentation of classes by Quasar.
                                      • +
                                      • src/main/kotlin contains the source code for the example CorDapp.
                                      • +
                                      • src/main/python contains a python script which accesses nodes via RPC.
                                      • +
                                      • src/main/resources contains the certificate store, some static web content to be served by the nodes and the +PluginServiceRegistry file.
                                      • +
                                      • src/test/kotlin contains unit tests for protocols, contracts, etc.
                                      • +
                                      +

                                      Some elements are covered in more detail below.

                                      +
                                      +
                                      +

                                      The build.gradle File

                                      +

                                      It is usually necessary to make a couple of changes to the build.gradle file. Here will cover the most pertinent bits.

                                      +

                                      The buildscript

                                      +

                                      The buildscript is always located at the top of the file. It determines which plugins, task classes, and other classes +are available for use in the rest of the build script. It also specifies version numbers for dependencies, among other +things.

                                      +

                                      If you are working from a Corda SNAPSHOT release which you have publish to Maven local then ensure that +corda_version is the same as the version of the Corda core modules you published to Maven local. If not then change the +kotlin_version property. Also, if you are working from a previous milestone release, then be sure to git checkout +the correct version of the CorDapp template from the cordapp-template repo.

                                      +
                                      buildscript {
                                      +    ext.kotlin_version = '1.0.4'
                                      +    ext.corda_version = '0.5-SNAPSHOT' // Ensure this version is the same as the corda core modules you are using.
                                      +    ext.quasar_version = '0.7.6'
                                      +    ext.jersey_version = '2.23.1'
                                      +
                                      +    repositories {
                                      +      ...
                                      +    }
                                      +
                                      +    dependencies {
                                      +      ...
                                      +    }
                                      +}
                                      +
                                      +
                                      +

                                      Project dependencies

                                      +

                                      If you have any additional external dependencies for your CorDapp then add them below the comment at the end of this +code snippet.package. Use the standard format:

                                      +

                                      compile "{groupId}:{artifactId}:{versionNumber}"

                                      +
                                      dependencies {
                                      +    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
                                      +    testCompile group: 'junit', name: 'junit', version: '4.11'
                                      +
                                      +    // Corda integration dependencies
                                      +    compile "net.corda:client:$corda_version"
                                      +    compile "net.corda:core:$corda_version"
                                      +    compile "net.corda:contracts:$corda_version"
                                      +    compile "net.corda:node:$corda_version"
                                      +    compile "net.corda:corda:$corda_version"
                                      +    compile "net.corda:test-utils:$corda_version"
                                      +
                                      +    ...
                                      +
                                      +    // Cordapp dependencies
                                      +    // Specify your cordapp's dependencies below, including dependent cordapps
                                      +}
                                      +
                                      +
                                      +

                                      For further information about managing dependencies with look at the Gradle docs.

                                      +

                                      CordFormation

                                      +

                                      This is the local node deployment system for CorDapps, the nodes generated are intended to be used for experimenting, +debugging, and testing node configurations but not intended for production or testnet deployment.

                                      +

                                      In the CorDapp build.gradle file you’ll find a deployNodes task, this is where you configure the nodes you would +like to deploy for testing. See further details below:

                                      +
                                      task deployNodes(type: com.r3corda.plugins.Cordform, dependsOn: ['build']) {
                                      +    directory "./build/nodes"                            // The output directory.
                                      +    networkMap "Controller"                              // The artemis address of the node to be used as the network map.
                                      +    node {
                                      +        name "Controller"                                // Artemis name of node to be deployed.
                                      +        dirName "controller"                             // Directory to which the node will
                                      +        nearestCity "London"                             // For use with the network visualiser.
                                      +        advertisedServices = ["corda.notary.validating"] // A list of services you wish the node to offer.
                                      +        artemisPort 10002
                                      +        webPort 10003                                    // Usually 1 higher than the Artemis port.
                                      +        cordapps = []                                    // Add package names of CordaApps.
                                      +    }
                                      +    node {                                               // Create an additional node.
                                      +        name "NodeA"
                                      +        dirName "nodea"
                                      +        nearestCity "London"
                                      +        advertisedServices = []
                                      +        artemisPort 10004
                                      +        webPort 10005
                                      +        cordapps = []
                                      +    }
                                      +    ...
                                      +}
                                      +
                                      +
                                      +

                                      You can add any number of nodes, with any number of services / CorDapps by editing the templates in deployNodes. The +only requirement is that you must specify a node to run as the network map service and one as the notary service.

                                      +
                                      +

                                      Note

                                      +

                                      CorDapps in the current cordapp-template project are automatically registered with all nodes defined in +deployNodes, although we expect this to change in the near future.

                                      +
                                      +
                                      +

                                      Warning

                                      +

                                      Make sure that there are no port clashes!

                                      +
                                      +

                                      When you are finished editing your CordFormation the changes will be reflected the next time you run ./gradlew deployNodes.

                                      +
                                      +
                                      +

                                      Service Provider Configuration File

                                      +

                                      If you are building a CorDapp from scratch or adding a new CorDapp to the CorDapp-template project then you must provide +a reference to your sub-class of CordaPluginRegistry in the provider-configuration file in located in the the +resources/META-INF/services directory.

                                      +
                                      +
                                      +

                                      Re-Deploying Your Nodes Locally

                                      +

                                      If you need to create any additional nodes you can do it via the build.gradle file as discussed above in +the build.gradle file and in more detail in the “cordFormation” section.

                                      +

                                      You may also wish to edit the /build/nodes/<node name>/node.conf files for your nodes. For more information on +doing this, see the Corda configuration file page.

                                      +

                                      Once you have made some changes to your CorDapp you can redeploy it with the following command:

                                      +

                                      Unix/Mac OSX: ./gradlew deployNodes

                                      +

                                      Windows: gradlew.bat deployNodes

                                      +
                                      +
                                      +

                                      Debugging your CorDapp

                                      +

                                      Debugging is done via IntelliJ and can be done using the following steps.

                                      +
                                        +
                                      1. Set your breakpoints.
                                      2. +
                                      3. Edit the node driver code in Main.kt to reflect how many nodes you wish to start along with any other +configuration options. For example, the below starts 4 nodes, with one being the network map service / notary and +sets up RPC credentials for 3 of the nodes.
                                      4. +
                                      +
                                      fun main(args: Array<String>) {
                                      +    // No permissions required as we are not invoking flows.
                                      +    val user = User("user1", "test", permissions = setOf())
                                      +    driver(dsl = {
                                      +        startNode("Controller", setOf(ServiceInfo(ValidatingNotaryService.type)))
                                      +        startNode("NodeA", rpcUsers = listOf(user))
                                      +        startNode("NodeB", rpcUsers = listOf(user))
                                      +        startNode("NodeC", rpcUsers = listOf(user))
                                      +        waitForAllNodesToFinish()
                                      +    }, isDebug = true)
                                      +}
                                      +
                                      +
                                      +
                                        +
                                      1. Select and run the “Run Example CorDapp” run configuration in IntelliJ.
                                      2. +
                                      3. IntelliJ will build and run the CorDapp. Observe the console output for the remote debug ports. The “Controller” +node will generally be on port 5005, with NodeA on port 5006 an so-on.
                                      4. +
                                      +
                                      Listening for transport dt_socket at address: 5008
                                      +Listening for transport dt_socket at address: 5007
                                      +Listening for transport dt_socket at address: 5006
                                      +
                                      +
                                      +
                                        +
                                      1. Edit the “Debug CorDapp” run configuration with the port of the node you wish to connect to.
                                      2. +
                                      3. Run the “Debug CorDapp” run configuration.
                                      4. +
                                      +
                                      +
                                      + + +
                                      +
                                      + + +
                                      +
                                      + +
                                      + +
                                      + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/tutorial-integration-testing.html b/docs/build/html/tutorial-integration-testing.html new file mode 100644 index 0000000000..0a70a0a1fa --- /dev/null +++ b/docs/build/html/tutorial-integration-testing.html @@ -0,0 +1,429 @@ + + + + + + + + + + + Integration Test Tutorial — R3 Corda latest documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      + + + + +
                                      + + + + + + +
                                      +
                                      + + + + + + +
                                      + +
                                      +
                                      +
                                      +
                                      + +
                                      +

                                      Integration Test Tutorial

                                      +

                                      Integration testing involves bringing up nodes locally and testing +invariants about them by starting flows and inspecting their state.

                                      +

                                      In this tutorial we will bring up three nodes Alice, Bob and a +Notary. Alice will issue Cash to Bob, then Bob will send this Cash +back to Alice. We will see how to test some simple deterministic and +nondeterministic invariants in the meantime.

                                      +

                                      (Note that this example where Alice is self-issuing Cash is purely for +demonstration purposes, in reality Cash would be issued by a bank and +subsequently passed around.)

                                      +

                                      In order to spawn nodes we will use the Driver DSL. This DSL allows +one to start up node processes from code. It manages a network map +service and safe shutting down of nodes in the background.

                                      +
                                              driver {
                                      +            val testUser = User("testUser", "testPassword", permissions = setOf(startFlowPermission<CashFlow>()))
                                      +            val aliceFuture = startNode("Alice", rpcUsers = listOf(testUser))
                                      +            val bobFuture = startNode("Bob", rpcUsers = listOf(testUser))
                                      +            val notaryFuture = startNode("Notary", advertisedServices = setOf(ServiceInfo(ValidatingNotaryService.type)))
                                      +            val alice = aliceFuture.get()
                                      +            val bob = bobFuture.get()
                                      +            val notary = notaryFuture.get()
                                      +
                                      +
                                      +

                                      The above code creates a User permissioned to start the +CashFlow protocol. It then starts up Alice and Bob with this user, +allowing us to later connect to the nodes.

                                      +

                                      Then the notary is started up. Note that we need to add +ValidatingNotaryService as an advertised service in order for this +node to serve notary functionality. This is also where flows added in +plugins should be specified. Note also that we won’t connect to the +notary directly, so there’s no need to pass in the test User.

                                      +

                                      The startNode function returns a future that completes once the +node is fully started. This allows starting of the nodes to be +parallel. We wait on these futures as we need the information +returned; their respective NodeInfo s.

                                      +
                                                  val aliceClient = CordaRPCClient(
                                      +                    host = ArtemisMessagingComponent.toHostAndPort(alice.nodeInfo.address),
                                      +                    config = configureTestSSL()
                                      +            )
                                      +            aliceClient.start("testUser", "testPassword")
                                      +            val aliceProxy = aliceClient.proxy()
                                      +            val bobClient = CordaRPCClient(
                                      +                    host = ArtemisMessagingComponent.toHostAndPort(bob.nodeInfo.address),
                                      +                    config = configureTestSSL()
                                      +            )
                                      +            bobClient.start("testUser", "testPassword")
                                      +            val bobProxy = bobClient.proxy()
                                      +
                                      +
                                      +

                                      Next we connect to Alice and Bob respectively from the test process +using the test user we created. Then we establish RPC links that allow +us to start flows and query state.

                                      +

                                      Note that Driver nodes start up with test server certificiates, so +it’s enough to pass in configureTestSSL() for the clients.

                                      +
                                                  val bobVaultUpdates = bobProxy.vaultAndUpdates().second
                                      +            val aliceVaultUpdates = aliceProxy.vaultAndUpdates().second
                                      +
                                      +
                                      +

                                      We will be interested in changes to Alice’s and Bob’s vault, so we +query a stream of vault updates from each.

                                      +

                                      Now that we’re all set up we can finally get some Cash action going!

                                      +
                                                  val issueRef = OpaqueBytes.of(0)
                                      +            for (i in 1 .. 10) {
                                      +                thread {
                                      +                    aliceProxy.startFlow(::CashFlow, CashCommand.IssueCash(
                                      +                            amount = i.DOLLARS,
                                      +                            issueRef = issueRef,
                                      +                            recipient = bob.nodeInfo.legalIdentity,
                                      +                            notary = notary.nodeInfo.notaryIdentity
                                      +                    ))
                                      +                }
                                      +            }
                                      +
                                      +            bobVaultUpdates.expectEvents {
                                      +                parallel(
                                      +                        (1 .. 10).map { i ->
                                      +                            expect(
                                      +                                    match = { update: Vault.Update ->
                                      +                                        (update.produced.first().state.data as Cash.State).amount.quantity == i * 100L
                                      +                                    }
                                      +                            ) { update ->
                                      +                                println("Bob vault update of $update")
                                      +                            }
                                      +                        }
                                      +                )
                                      +            }
                                      +
                                      +
                                      +

                                      The first loop creates 10 threads, each starting a CashFlow flow +on the Alice node. We specify that we want to issue i dollars to +Bob, using the Notary as the notary responsible for notarising the +created states. Note that no notarisation will occur yet as we’re not +spending any states, only entering new ones to the ledger.

                                      +

                                      We started the flows from different threads for the sake of the +tutorial, to demonstrate how to test non-determinism, which is what +the expectEvents block does.

                                      +

                                      The Expect DSL allows ordering constraints to be checked on a stream +of events. The above code specifies that we are expecting 10 updates +to be emitted on the bobVaultUpdates stream in unspecified order +(this is what the parallel construct does). We specify a +(otherwise optional) match predicate to identify specific updates +we are interested in, which we then print.

                                      +

                                      If we run the code written so far we should see 4 nodes starting up +(Alice,Bob,Notary + implicit Network Map service), then 10 logs of Bob +receiving 1,2,...10 dollars from Alice in some unspecified order.

                                      +

                                      Next we want Bob to send this Cash back to Alice.

                                      +
                                                  for (i in 1 .. 10) {
                                      +                val flowHandle = bobProxy.startFlow(::CashFlow, CashCommand.PayCash(
                                      +                        amount = i.DOLLARS.issuedBy(alice.nodeInfo.legalIdentity.ref(issueRef)),
                                      +                        recipient = alice.nodeInfo.legalIdentity
                                      +                ))
                                      +                assert(flowHandle.returnValue.toBlocking().first() is CashFlowResult.Success)
                                      +            }
                                      +
                                      +            aliceVaultUpdates.expectEvents {
                                      +                sequence(
                                      +                        (1 .. 10).map { i ->
                                      +                            expect { update: Vault.Update ->
                                      +                                println("Alice got vault update of $update")
                                      +                                assertEquals((update.produced.first().state.data as Cash.State).amount.quantity, i * 100L)
                                      +                            }
                                      +                        }
                                      +                )
                                      +            }
                                      +        }
                                      +    }
                                      +}
                                      +
                                      +
                                      +

                                      This time we’ll do it sequentially. We make Bob pay 1,2,..10 dollars +to Alice in order. We make sure that a the CashFlow has finished +by waiting on startFlow ‘s returnValue.

                                      +

                                      Then we use the Expect DSL again, this time using sequence to test +for the updates arriving in the order we expect them to.

                                      +

                                      Note that parallel and sequence may be nested into each other +arbitrarily to test more complex scenarios.

                                      +

                                      That’s it! We saw how to start up several corda nodes locally, how to +connect to them, and how to test some simple invariants about +CashFlow.

                                      +

                                      To run the complete test you can open +example-code/src/integration-test/kotlin/net/corda/docs/IntegrationTestingTutorial.kt +from IntelliJ and run the test, or alternatively use gradle:

                                      +
                                      # Run example-code integration tests
                                      +./gradlew docs/source/example-code:integrationTest -i
                                      +
                                      +
                                      +
                                      + + +
                                      +
                                      + + +
                                      +
                                      + +
                                      + +
                                      + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/build/html/tutorial-test-dsl.html b/docs/build/html/tutorial-test-dsl.html index b538cbf75e..21df8a39c5 100644 --- a/docs/build/html/tutorial-test-dsl.html +++ b/docs/build/html/tutorial-test-dsl.html @@ -31,7 +31,7 @@ - + @@ -89,14 +89,26 @@

                                      Key concepts

                                      +

                                      CorDapps

                                      +

                                      The Corda node

                                      -

                                      CorDapps

                                      -

                                      Tutorials

                                      Other

                                      Component library

                                      Appendix

                                      @@ -147,6 +157,8 @@

                                      Appendix

kd(YnyJtf(Az4Z4m+n;(;x)cub^9HHX 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/tutorial-clientrpc-api.doctree b/docs/build/doctrees/tutorial-clientrpc-api.doctree index 481a51391ece87aafc1fdf582054dd75edd223e9..829e8aba011f81856588708722fc3ea15a197e58 100644 GIT binary patch literal 39829 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 UPjf!G4`7^#ABbbYXLTg=|IFQW8UO$Q delta 8599 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 Yhr2hUk@vg!qX6EGf#6&4O!O`JFWtCXLI3~& diff --git a/docs/build/doctrees/tutorial-contract-clauses.doctree b/docs/build/doctrees/tutorial-contract-clauses.doctree index 070c9f335aeddbca5bdabbfebe03445d796ee78a..497e021f5a221fbc3e2ef41b97cae7b2ad4c9373 100644 GIT binary patch literal 56656 zcmeHQ2YejG)weNjhi!UqivzMutdqf1feglAAO=IQ4=zQKPIoKq$yc7B;L5i_b5~yP?-%;>dNYeFxw2cEo^%6$|InY`n_V(z&YW>mtxr1n zQm!7j{(?=}#rRfmN9*I`#mcz9a8uU7hbdF6;nm4G`D&$Ra`~E55BNdz1^%K<*&_g# zua?WM$rp1aXEHbG8m0$R69ru`+GvMIc7b4_t0F_pg69>-y%PS{O1a8-%D)$+@8r-w z1=447QnxOxhHT~d!A=eMF z4*C_kAFWw65VZ#9tTd)gQ1e%27S?j(Y!Ls{%+e;R{Cj6oxmwK>N9#2-`l`_H>&@&> zdb0~q{?=-(RIFqU#2*(8>=`%ks-?o^=bnE0nl)#izIx4B=bU-Q*=L`5&g!#MnR#sP z^iXEeXfD4M%nbZ~ycFt_EIII34`migTjBR};|368pEo9mzFrH8!!A#e4NciNB#u6S!U?&m2N z{PSD6umx32`Gb2)<^8ocUhiKJ`WK=>GIPL+v+AR{_O=V$Jk>_ZUx)U)DD>Ay;1TB* zS_uDQa_^E}%MGw4J>+ljj>&;B{-xfc9J#Y7;?8Bgt?Yq%E4eBEaujo)(BDWgalrrU zcBZ%`?>;j+dd(iP7AfCnACUMe_VZkwCRm5iG!OcMi)Qq3(m%LmXy2Sy?qVtq5RJe^t> zIHNAa-CZTcy4!PN%0TiMEO3C_)rvEk3yOJ1j2vyU*b%2X)<)ziSg&H5(heX@%u7>jCTW!1)M&L*NIUC<CytvJ+I0X>p6f44!u{v7CC5Aehk!>0AXe#D8GM={j6y&J6Y)OZe zib$uM0pGy5leuX!FP*v$+SqkAik3!|3utVmX{=g@1AuZzM%Ks8e>MG(^w!$QNID_t zi(`TFucfeG*Gbq@QD@8cLfUUYXW9#7(Z3%$)cr&M0qh@p2~A+^7HGa!S76eu6wrFZ z+hG?|{sYmkheH2Br28oFvRkL}hl$QAq$Nol{s@~Y*PB@ggfx5EdBB6d>5s~%shp|! z`5o{ykeoB)Zp|-<fL!kO$x<<2tlbowq|5?*W)W`oXcX3l zDRP(mF{vOYsq;(lKgcD&?2Wp#h_H(^hbz1x zVyr;?=s>rX?pGlUlcDberP!b%v@5Lf0xi-vqHK}-wz+fW?9*0zr?&C~G-56E>+Bi( z8fxz~D^|_XT~Ca(OGQ|%Tq)&mL-(Ev{q1Z<4u(5hA@=*}c56eGho1gm^wmR$3O1d-=Z)Sn@jVZT%;BSZJ$jjs3H==`f7G6xn5>E0+}~RI$7mn-c)1PF0h^$ z2jwsla4HHeO%WUrI$_1JVqU$tQgytTUnMgS)(ep@;AORgGa0=Bac(4^G$X6$o1lO3VQ6|DkHq~u#UV$hm1~s>m zpJwG@7IWK*m<>of7fm|>%ydm=q?))PtWUv>tU5s%_2LASSFdbEZBS*n^zajNB~(lt z*j%AVUcli*1=z+xwIq$2_HRxIs`!Ub=_II!MIGX)5Y&CLwNJKYC0n;ZPdzR4pH4kR zIeU`msYp5B8v3^(MVz@N<@}5$3G|=o9Vg29Szbz%^RbaEK3kRZb3*^QRC#n8FKe53 zeIClaHK~Z7--O*N;uz-(Am5!4y%3doQRu&zl_ApSG?ea3LjR?t;FmB#*SRvbb_&I@ zF%0pbL}eOUw3_N;9X^+<82#yJne)2TQ`HKTL5=1G)3$J4MrJH3u4?xpO$p|+F|e%%qUc4H z6E`L{ptqvw3RVQO&wzJ0e=d5=PFFySfyPlV1*8AVYn(Qif!SniBBkM7LDoNAo5m#B=jo zK}SNcL~*{XlVBYm3G2%_u>KPLhyOkS@n3|RgV8Az`Qy1 z-@;<_Q=!7C5l^Waxj2?D!3A?1sh|0IoDF67;>;%_&&G98GRjZ6_y` zv4&d-u#C&eWL?SSFn~TcQs6+tOBZV^j&XpwSDBJkD-om}sB3G;Qd5|P` zXIgyBUc2+v66y9O#8q7k@Qnd=V zq=Y3=;llvLAoAbD%znCEx2)N?JTkMNp_zRq6vy5xBmQU6yFVBDpQkwQ-K2u|pR`8r z3!(o-63i)^b}6UQ|5AIyAUn<9m(eB+erWC+{#U?qnvgW0KPiNGXQ_Y+Ge1BZMdA{{&|7r=kBd;y4ur zrPEk=MasZ{jAai~Xs9~| z|Ch;lhD-|jzfj~_XyE@U^nab1d#d-#z>cj~THS07`ENr1x1@M2I`|fth{Qm+F;cb` zv@xpV7`a{Ta74PUGL0s|>|3u(x3v^n@f9$_DA?4j%Yh|XEL!6Y%j?njm0?Qh)OwGTmmEV*(Fm#yrb9y5 zGM3cggJANtB(rmzHq{wdYqI0TUR_626B@`OZSSPxd`K zl==r?{u%oJV$tzXDx&G%q5q!*O)a8?K4IoSOuLa~<{~kotSPVA4=FcZZ|304np%2NWP0Y}MoRx;EafJ9J!5c0S7 z6te_rpnWMGp;;zag!T!Roh1K6ZiYz;ej19pthe+N-ZQdiL${qVE zYkio2b*c5?NJOov|2rTsM<5v$KN64793_af;-ny1@kYBHtyyS-LvyTV>DX?^3B>Uh z!uEkCnGpkIP7sJL^q+{t&hq9U1*D&ZM`)G{4kexCCP}Ze&F&86W$vXUo-8Duq9kVT zHgc?dAymWk2t_L_MRZh~6|Lz-65;JMG93l8lHhIO8Rk@i=684niR-nhdiF6Gp6f|; z#i{J0_a-hxQkYfv5t=@h==DqpHJ~6Z?;3D=@4gOj+I>GW(X5y#{eBolNIYWTYRN#2Y70RiDo1%d!DRUN}QH!%B>p3DbfYtN|8)&G|?R&7kB~ z{VOXCnWGW@g2h6HSaXs-?-qtfr-vD`YUr1Q<^m#JIzgHP?^IbdHWvz-MAtOy%>^0MWty`!x|l4h3ZQCAq76AK(zG@UVocXt@|L$Tqhu{v??x&CiMzLv%_f1+z&~h@cwv&<^h67?HmhF z+PMo*&D|6&^FS?ZND8A=(^cF9h@06qEa*opdTvzFUZOJ1w#`XecYci`9sJ^Y1iLab znmoRNQ3X6g;|c<06pKqTiUlS+jv3ROrYDJE~H_BQ#Y(qE%tB$*QP(ZzdJq7kH!avFo1{*gzm^7J|#Z z4YI9{Al-EV=uY=Gq=W9I$RDW_$!(^P0K&K95t?biqJ*>H4un5g;U6OK4^{Y%gogt0 zFbkp1WK?vd$w>Lb1)@9Uk3c#or_0lv-CU0pkp4(KLUV(lQPNp-lJv`vcTXuz^C&I# zMk)2tT55Jrme4G=kCAeA*m4e#_K(#z`FE2fb?4t>kq-WG3zyAj9*0k0+~e^G%@ZWQ zGLD5M8Mm2?iw)KuGY#g6O2CtZfF~;f**mGQn4KNGKQ8NIeZ@5?b2F%bOY;;V>8X~a zNh|}x0n}M08b3^1>3*bC%Hcop3!H{;BC}Y|0KV9Lc@I%I!eU+37zPd?+#dn`<2fwC zDAYBPhd1DC#>$6rFJlD%VB#emc)8QhJgaxPSF2411O5GOB|TN#TAXwX#ay~-#{2o! z-ymdol7aTiS6Vuo%13yaU3%)RZ69#9G!~z*AQ92D66LGkt5O5dRZ(zUS_Y=QD-k8K zJ)O7OJdF(ta97WdwENoLmC4c@QWOCQo5T`aoU7%W1gA(XChBAbCkPyB=iVmnvE8`s zk$g(>>;e#7sh3JCfqR1uqFaZhuv$7QG)-ivh$XtwIxJILQRamaFz@(CO z?wmJ4uPD}Lf-6<{?*q;iRrr^K*icbHwEJ0WE-Kcp<<<{y3dKn_i@Z}QVJg)si`-!* zEj(EtMWlQeag2AmU=K>0TwZvU70ZYf7F9wJ5iNN|M{(_4+1zTz#paSqQfyJ3$y^1q zh<8|k&x`0n_1Q-F*NxfosZ4Tl#1fyLh-j>esP)+IyA6sWMy@O^lg(X;-|#7{Kj^EFkN4Z@I*Fl{K59an)_i)4D=qBh`l`$S!4`0T>v- zXW|i>XE6f?65R2pO-UKl@VhQH4$^RUnYXy;yV|mK=(Du_oqB7+KHL@dtf~La-jpS% z-1An9qD}uwr+_j`n*`82n<|OECLi0jM6^2wVqQIFK z<8L%iO?`?XRef~AD%h6@$V(L@d(*r*bMBz?*6aq|QMc{R^VzIB(2>kL&sAG5Aq0EO zPm@aAF%L~u@T}akW*+TX$1L{BnoPpZT(Uh&QL8i7LeuQrusussivvbCw%I;SLh(AK;hSz&ATb@JXlJ09ED$y-KWEgi~EVeISV+zHee zWl1MDuRy1SseUCMp?MWMw?^hn&@zju=E^MMxy`EuJWh-fso#6!mmZPCmCAh?cL;^7|{NyiI{g2nD-W$-gr**GT0WY@GaS%pu= zsBu%TR2pH*h(*Sh*EE(1TS(xkEV>+sIfy8_9HHo(Bw{RCZylRR^*ob&9Lk36T`RFa z*3P2n9#G_{Vv0oT18M=S(cN72v&gW#sEf$Doyx-m7ecieG+rI!N+i-t*gne2#@X== z0%}9kup^38VNJ578nTng2BBjXP531RM^rHCu7ndNoO%U&RS{0eQ(mwfN+8UhXdMtm z&wzL`lbc(eqU@ML=snIti3i*~ImwfS%GXMhx6Y}r*;t4M)UOi&U8w9L6Xx}Rftx8XZz zdpjPXd50j;6#y2STmj(vW{WhNcWUN$N#=KJW?2Yr0c@_&dj$Nw7Tm79+IUYppRCbE z?-P*jb$UP2Q72h>ZO(5#fFxAwgLs7ILxM-E#ln--y00#5?Ab18KCH!mM2i2Y7N5OS zifU%<$E3iI+XB1E$|oefJ6}JE^iHz!DSQW0KaEFdJ|jq!sVp|h)VGnT_e`~8KC6}d zoK*7jTFLA^xI)bW@&&2Z7j3n=3CNcuy}N+W0Cp0Pui!fbKJLDm-R9oQNpG>svy|x0R5#z2xRQl91rL`7XYA$8$%y`5u2B zAe+i3BJ1;g$-oG#AK+JLekkufvPQmHoW5u&!u*KYS4@zCWaQP4B}bx28+jEM@e^jy zRreN*KSc^!`)7EB=I4T^XTlaka?s$`efouf{8B-(w165oROX5WoD9ruYq*ejGttVF z?gWE-gni-VKs*N3^4Kb_bAULcBc6hcxcFn@9Iip`?zxn57dAI1IMC_{qyi9bn6%nAK~71CK)WB6pid- zw=PS$&Mou|$*L8Du_9cPz7!T_$KXz3XB(=>-7|=$*A0FRw+_K(+#NQ`P_x=}ya|BO z`MQNJ+SF@3uvOenA$!hau1cUj&#Ei(pgFi~T<2z`ij{n+UeIKENo@gday}avSPY=d2D8sVci(GU-24VqLXLlnM`(U0B=_vyB%>d*OIZi;_d@s| zEa9#Dtj!-Kp|zD113kk(Asro@QQ{){=5~AlKmLqIX#P)fs}^TLNiA+8nEs;he--$@ zDSRUkC_(7o1>zqTqGdz6`KNsEPUpXn4mzWq>E_>f2burD0~;SeOEh|8F-bBT@$Yj1 zg)IBw5t@0LB^m#o3j zpNyv1+q8^1K&f9M)Gt-)vwI_@&7EVJ(0ibzw^im2lJDIc@nEDUW$qBXqX`ei1DiJ_ zvo;}%NjBknad5<3?T$h=hiidHNP$Ocf!RHTyqQr)NfAfeB4#`%%^V|8-Pv|5(!n-{ z`ZWx+tQNzdnB$NNCLWJRXigAR%0!ZoWFq^H8Xt3_=5Zv?Nt#FcR&1P9&%n`|xEcK) z9?^1vy_bc33IgU@gJzlnxDxAJ*2_o)Cg_Yg-2trXO7i)ed5l*hI%kze?G(=6LT6>>^@{!R6;yaptT2&Pb!RYcV6;@(+PHC}5D@##Ljz z5fTY$8W<2_)0~%1hFuXuOv0>|$5*wNna51uHH8ZE0&;+m7{SvsrS$`G~Nz zZOP3*Tykwo#575ZKo;6LNo>MF;8ISe^+erHz_yGn4DL@zWwJGv(|=3M?=jBbo>@1l z2g~7fH=HV@ZYz!;Uhd#~uN0luBnj&maRezi?al-p=w_Kx7NUQ6m~enO%j#qfXBN2y zMQK|ZI3DaegM-d#U9j}`I~P|gD{9e+6*?Y-vptP%uiST93edmcU1N%_4JUnXJ+wiS zNQgu%VK~vwY!Z#)$Rg!As)r-$Q3yY2?ctK+r0D`q#>0SwpCfTex8qBMIuSMh+0|3+ zkXAU-XyiJkQ5C}eP2^4dOsCT`1ob&i`@-W)N(xi3HeRfYt`g!i`E;6$ld;>&QD; ztgs{QhS1t=CY22BL`_74s$VBxE-=*xnS4@iK^!Sg5C}ft=M}KYDW4u ztGe!8i5P5&5)7`tY_7%@W%BK+ynUCN;fw2G2e6!gk$hXPa0e zcF$iYqDU_*!#ca_Rsgzq>35NXzT3X}U8kM)ka9|B6lj~-_~DvE|Edz=T!F5N#KB&t zibhEUdvP{GXAEWx_X;?tdT-(z+^2eK-Ce(Zsz-*}Gfx%lQ$27G?}QnFy+!qyRZtX| z3+=-LXQWW&*bp@OFqjK%M2q(e$Z7@2ZiF`4$(%sLw`mN_XFDAbjZouZNBbne9v%PB z=vzjkv(6*3#HfE4slF43`4J_1W`w^JY`Z$R?}o0Ei?(OR^>K+h$W8ckt%I;mG&Hq8 zW)=4AXdbFyj}7FtdXcX<;~0MThwnQbrrs$dcd+Zu9<=YmczvflnB`Et*@r|O?}C}> zJ!FGsRGnRi<+E~uPouHf<^2wirvrRCvcdu0XQp%lq-jfZqzz|jT=$tNE-*F>Q7048 zNR5oe9hrWP8ph7W?lV&k*WPw>mU*WtdY_rY}ZzhD7^> z7<@X)s~->~Dv;4l#Ci)vfN)kuZEC>)j&>XAUKdSlotFj}*DPFvXj0j;1nP01Gs0GQ zixcx;5vd^OQwP{egHxjILVsOWMb=2VX8Y(sg)Q*1|~B-m{FLR-7VYV_yZS zj6L-{L2O)VW-_ivQY>*>1W{v1gaPg)$Cf7qC^TIn(O5ocY}h$RTD&zhY0bvhMKP)8 z3c#S;8rxMQ%mAPuXy@S(n)4+~&&*k{ltG!ZF`0vsajng$arV|U*@|(c;{r)&|PEEX(Z};=}o##YO|ztXTcVvg9V(w)@&w&FJQv8c!cIU$*xRb zQAsA;i%i(L1~Lry1;YCY!uu=2>?|`kSM~vd;(->0RyI;^>@q`=(!H_|Lb|Q2W;4V1 z0@_CKz~PjVT`S9?l9lC7v<@27j4Fb>ASfsTIhDHuaC2o`$uefM=<(<6>X_9U7nttV z@{o>dQIWJFFh!)Hf)jY)*h)d96=dO$n;) ziYmL)Y;kqrXSE(9RjJn8l$i!9MBhGG@IJ)ieGSM-D$%?h)MB{~M_M!Djyr^P;*6e^ zPHAc=h@7k5b&PtJ&^}&MY~%}cKlo~b!n^m z#y8Vjd88x`W^dU`8{6Cf0?~UOg-2*^6l#0+T58eLC_mPpe6-N~7)$d^mSl&(v^J3< zV=LW+^lp~qu}A}h9*0M09xsSgy|DPCdXX(P>?h_4n&pX-7%)!(2)NL?>+GqLv$cY2Hoh(L@NZ#0JuAKo=BEJy z^?W)Wp}AG?^-S2}NS+Yes@_I%h@@K^=II3~a~q)0!=E7-o~anPpEE&i=72;F^DMwn zc|4o2nFX3;o`bh6#-?-nk~b9DEtv0!D)e0DX(fkr4C5-_gp=^*C$c!cH!1ZLP1 z&~_LZ+5ia-%n)6tn-yc7sF%p%T03rPgrlHmC~(w@OMdi%a@Z7|amKDeX2-i;nVUzH z40J8f;^>ABS~VJK+L5CUG)0B4;sr#wj}M12;PP=EoS)C>rG@dS61@7)(gUZSc^ z_vj+mFojq-Lpa3qN! zQY*yblZ|pS8)a|PE9RX_{=0PdF;N zL242k;b39ZphRa2VZ#z|LiNL7$rXA;5^oT&P&@!Bv2p`{9wsX1Y{kXuk*G*=qkM@d z4_XYuL}UftCwyp?P_<*qOgO+VS`Cnlhgopx@ROcTO9<;G+<9n!tKP-uZ z+1K9V7-T*I(xI3>ibrTZCiUpK2i5~EMp?Bw{o_)bPuSYK+OZd!!pguNM+-|;yx6IshJch|Ez=9bQzR!d?dhT*&5s~rMRPzIVUVyvH zM~iv$L%i?`vJXZ)`4K+!M#kvJcnQr<_z8oWvG%#;5hU3fBQ9;us)zZ6lf zddwiAQK4o(z@uPNoaEg+LDN?1#t)Ns`!mnrtc#craByz{9-&z%hwn zeSlQ7oz)+W6wwmq8~iU~#8OlU0Se$@0qaNVdINHh)f?OAO|Z*_R$c9%k+}y zXinbV_AG({B`o0(>a&YPV7>*R73Ii*PliFj3%>v%w}8MsBbcV)^@+OU9KL7U^S(}$s8bwlhhYUfR4 zPE@pxpgl>^iYGH`6wQ@hE{N`B5gmz!>LLYnKu#90?mRdJ>8KIcbVaY|%C`<=aq?>q zlEIP{c!Z``a4AbjM3N=Y8FH2EN`X98A!W*zYed>)(4SPHyu$U~0=7!Q=uLTYg==&v zYo8<}s5WVQ@s5%M{`&cIfgJGn=}2r>O9meBcN%_$=5%@Qk&qCnm*urt!^|rtSiaS9 zSCUO<2z;VIJGUGca3(Woh)EN^v+x}ZIvbDBoFiCzCTt-jrJ*X$6_5c1$vzeK3|4~^ zwqgXD7Vcn7YF>O0-6+DR>J{Ub=#<)R-|n_*sm^JJzy=-3ZK}`@SmVQHs3NW<0c;Ub zNs~Cz7qbPWY2FW=D$5zih!WBjK{;9yO2i)EXD7IEUY?pBIZQArxWkM^FOPJN9DWIG z!d<6Zyn2A}D|^8!NV10^r+~=amP34!wU4zbHuPeKI-TOdeG=t`T#4u|z*P!4!$So- z$R=his7(W0`CA+V7pZq~yDN>On$-TL)loSjWy;0!sof@Dt4{WTAh(oitdKI`3YB+x zaG_uV)9|Hk8nr|rHXj^ohetg}b1W83AIM!7-2u)f0--XoUO@eM{!7cnvN(vPD7V96 zrI=wfNbj98xk=nq=kVZ1I0SUyc|2CZb<5x|u+vGwi>dFgqZf@``LU+c}tzk_qrhv}I zwF1z+sjovintCZ(swub0A_0wjKRiNnf5D=S%z~4R{7N?RJ;vym2WY(>DD@iBdS&lf zb%+H49&U89;)A3ntazfF3r~p*0DKTfo$_O3qs<`)us)3 zPPFl>0p7mfJv#7C&Y^5?R^`%K^{%bdL}+KadbZ^_N4uM|Sps?mpPogwN;jts3~(rg zfq)$EmE0y22?IK=dc4V_l}4n`iiS2h{B9hrG>W&*M=Rx-CpucGfS1s?{DisA4HzBo zq2AprD-B6$7mC*QZ|%uukuRHW=- z5pYL z=q_)F{~>#01zFJ>_lW{z=$<7Cri!LRx1Yo#G(JVZc6;`6>GshAnh}sdL9z#<+v^OV zi>WjA=)|?zm^{OB2j;5swN*$JRiLp-Tuv+Frf)m9C0kVatpUzaF6QWLj8p;ljN~y7 zim5Y9xkVwrs#bte<}#T-n$P5I9?`XEnDf&Up@A;i+KP!d%yvnvl#K*YcLunk?WGP+ zKE?bUr}w51VC!KH54%TsnM#WDm7J`rnyondZvb%s10w;w=wbXE=`;~n6MnT08`o^S zJ(`HC3&3EO(?=0Q%{F{Qt4!e$n(YG7(*yyN%J#4mQPTqVU<+q29cyh84q_i7Ag$CW zE_URHA{`xBE*)#mZ$c!2q=(@VnuiM>9mcZo?TGKuyykI;&K7jNcc!cIA$*rWbpd{%Rk#tJSZb_+m ztd{pUDev)GUUtvmZf4XIq=YBh5_BW32LDDqg#3Dvq<81nlaUU7wcVa~GroguPr)NJ z90*6MfyE}-#%0Id>WbzTE$V4f)YG*nS$5nlw9U-ARgm9iktbroA`L)ZJwuYa^Xi#M z2e0B-FwJY8h0kEsv+=;y?t()ljD;pywT7(PbxmWQs|7qy3V6O2kiCP*8f??HbP##n0Yb_q4^m1#A&WM`0eF)c!exGZLAnGi}AfsrQR2) zpjI$1Ajn4?3LLMas-jM;qrOqV-lSmd>!@#*goF&5x8RF+f~=#y zl|PrrI_lpd6Y@66z;)EO;}^op<-JF0zqt-y+f18xGT({`7M)x|eV2eH%CbwSG46LW z!(bDt_uvya^Ikkc^FBe)Ghy+Q0Obk;s@^XkA5f6&d%-3w%mqr3C|R0lSVsCe37)O!ay&jg`Kw>X|NPmH=ssVB8j?by^`Ka zd9oyToJnMOAg+q6F;d!DUS5YWsouu*Y4mnDu0VGBG4XwCvcd|(0y*Rrvua_+O1$N4 ztmz1Y0j?2N4bP>(x~S@MRJyHJBO@s+yCwsZq_<%WS67F%l9ob=H;QW--4%;fQ=8sr znUHTHMX%g-a``;y;fd|j^luUZBnyonl*VlrpnpWd`5^(&P{EzIzWFe~AzUB9BQzhC zyc!v~^Sq#r0%v`qj|qm4TMRS!M4u3l)*2`-YKKoE9X+6vPxL7yf!I&ufjdJ5kE(qZ zo>cp*poiiHn1vLZ&no863Fgl$=IpLwX=cb51lJcWu9HAfn^d*-6>9k}Nrvw1`7+YM z9&WClvFDku01(XjDjv8$Q?M$tNLZ3tN0V9Ida3!kqWOlP`KF?g!%MnmX=cN>B;&Vj zMs)+kO-#B>-;w0*mHsZ$QE9pXiM-}}_>3xkACJ)dKyYXkS!l9~_huDmuVBm%74eS* z@sAa8b{CN}v*9O#>ZcZ!9z~(kk$UdN&m^Tg2Y!xpaDeA-Xg2c;d_m=ZiAQLDCE2y| zEGk)f1kubvV8pK#{x<^uTZPYRS~ID?6Nukih}LEHKgjp)g#HofAT*8_`xD+l=IwZd z=FgH@$z(A}GG!YuwYd2|&GHw?@>k8$bhBPU?fgxE{%(PE>>`u6%GQ5KLU(HaiF8oQ zvL%=K7e0X8f8!CF|442nmjxxsy%1S;*UXqXU=vE4i$`eo!(TW(**$@|xkcv*{{1cf z8Fce}0qM@J1xN?GI_c(xNJ3Q>;Srj}f=3z0!jp`vfpK?-F*PZr@BpE3iBg!oyQqm9 zh|@hkf$z3d$XaH}qUpi=LZz!qddrXP8Vek?)g_=^4|Tci`k|U>joI?3AB4z4m~* zRgPQBGdhu%5y5|6&N)SQxsDl9xI>wI2g#W9167>1vBLpHf`YZ)2w^PMC5q2F#xiKY z{9X~Eg{ZWpSDbcW75}`v3MpfZ!^1RYohJmymBtACW|=I@#%yA(9wb&Bw~`wz@sPP9 z+;9YI){#}{wL_eUT+~BBC3=g9;D`x99CcK%2XqXTq_drnByqNvOB1(C()?IZ?nqT^B{+i~a$Y0h5Toa$&ty`5%p zrKGg>X+^=|=c!1CZAct&cW-=woUFnlG<}j?JsTF4^lUghNhlPP){OmcyO*>t41k`?;J@zm#K%fWL1Cx0XUBUi!pVm(=_IM z`8tTdbPF;|@^xbnN{@Y^xGHWfK5xn#64zxIGzM^K0&{_6yAXd{&!P#Y0~|yXL8i<) zz`*EUga^*2#9#F>(3BU;%j%)be3{eQIM+^aE>LF)do|(3oIaG}Grm%@(E{#FaO$ z0S;?D0+W$!*D`StPF$$L8VBY&ye3W&!ue;gquBj;E$?g#QikKds<|KjA_kMNnL}b} z8_ngnl2d_s08&8bp(qb?Uc=Eoj69|X%>$9PDYL|k<%dTRzCT z@5ceWr665&Yh&rE8SnRM^C*dFljrZH*ycH2hY%wp<_!z{wx5fwC;YLPdrHs<uGjN{uzbP`lG03)Rf8BYM=&6Ut=xYxoI2{u2o)Y7LL9?S&cyel_ljzg1I z%`gP1%89~ZebuvwjM)mX%t5R`fQ%l>FTuSrC4Qb?p!00X#FRP6#b!y0%yh{OJlCz6 z3clZzIbOGfbi-dIq6H)^Uo(?@S&E&QHEg{c-cEgGe0)Qz9$2WCCx_#%9~gu0&|-yZ zzE~NnTHru|mrdnNg>?a5H&-?_fjykfHdZW2>kmUKpem5}IubLBkk)s~>N5&v8($B0 zw-;*^|5`n;T%026`I!Y+>mDnPo9%*9+8olotr!$*Rb!^*>*4uQHMe!x#ga*BI9DiO zu!Jop=D|qZkvSe!EyrrKAx6W&BpLe<0Ns?C=T^3vhYB*S_+;SL3#eteWJ39T5Y}8U z0vHzEkE2Qg^Dy~-2)T#TOlrj%Dyl4exZpfM^%zy@R`Un}UdH~A5ajFS>wzsTW*&*p znfdkFSl>D32L4W2RP05MQcSW{DQ;wQBf%C+mOk9rY#z<`1BVO6fL=CaU6}Y7$-5Yu z#%{{rK`{2X-01LBv48{GZ^D<2i!#fah15Kjfb%n3Hh`qZ@%O@ErO7-VZ{EtxfzX;Y zL^H8Jg0VI81bp9-Sv>B-kmT4_PsE2!nPnnZ4K6-OzAg!{>{1){>#&c3c{0A;lvzUY ziIvCA_?B@Zl+li}Bw-0;8aj%5`HS<({-oI4E zu=5uFJg%92Eq(B50GW`!v5Y!+xWTWdGxL7Mg1MDHmZ38w+x<3tyeV_6_IvDv61@bz z*1Ta1v_vMK0TA>e+aS_A0`p9K9LgLaU8RU^Yld5@(6(&4f_WBFcVO8sHx+++Ha^ip z2rpx;{v6`2k7f>Uwf|~Xp36*gGV_Xsz&sDXL-Tz6?e&h*;LziBQ}od~j5-E$0LM<8 zkHN8bqCQU0#SF*0-aF2_wVpYINBE%jGK(>+{>uvl?F;c2yByD;4Stan0UNA~mo2uv so>?5(mB73hphM;*_?uaPK0-2IikHy541c{7arzgY6K8{@9Ewi=KT!{21poj5 literal 40810 zcmeHQ2YejW(Kj|OI#*0@VJ(^j(upn*wkf7L1{tsyj(~Dn-L14MU)$L|OM+|yNk||e zy;stEPYCIqG}3#or1wgCzW>a7ySIC%vt(PQe6fF^y?tfg%)EK?=FOY;_Qv^zVzp2Y z+>)QIRExHs;n%WV2{PV3-8XsjLvKNs*-^2|b}&`5eQ)2;TiBIbHgDd%F{;*UMxkWY zecM|!nCn1V(H^Ofjk%REZ}DKxK*9vM0bUKuC{!x}S%tu;`<$Ta`QDPj+(9T;sFuq% z6#Nx^YTMG)d0KI9$IRq$($TbayS z#iHs$#~pJ@_&+FFm9dO>B>M3op?4Jek*o<#x?#>U7lB9MhPTF+w8tA!mGY3PwfMvidG*4#P3t3`@r@pq0<^9YBaOt2j0=<;=meX&Uwd}%Tri+ z$C?={2*@3&2k4#SLhtx4b6>_cw+QWTs|F>vVy?s=8$IEW?K{;{apPI1oO0@^{imFC z>KSLAep-M3>1UqQpD`D3zjO_mOGd21Hew0r#!InY;Rqnrr<6xwXLHp|P$ruqT7Q zacjG!QacTw3hO#qhyu6JH}2JKn#zv*o$J^3sS@imI|HD=!_yA@GzbTs=X5$pJI9y{ zfTMSc174omWiA@6QrQY}`vOfTD3{ER$#QAHuUQcL)669`aMY&lws*SIHRN;;IVTJ` zCk{E_iqpGkzN5I{ozcvNtspVu^*>OE_s+ceChx4!8$gGc^T3Le>LXTb-}!cd$9Kj% z8~wL7^wveiBhD?>CA{^_y>q%WH^7#zA@5x0U<-`#&U2Pn%$+3>ch2u>W)JjG$7O0=hk{F+Lhn-G<8V_K zOv@!G18a<|nv?M^0|A4fx0wle5eV4oxV{mMbz{OUm5jjJW*bx0x`Dx2t&ced1S+6< zA*d6p_rS5C@tbveGzA1z%mOGNbBCWbt^phj@Or6eIM#MMW0lCZic<`sR zgboZxIK=v9xHFsJT}MoVcRBO#is|^5iTdx#E-;XX@dJQ7ZwvZpYv`HG@&^b`VC*0U zQ}gUnvnxe(aefl2Hsf6dQMo$wa*X#O;AOjh@~&ZUTE>?pVR#SYuDZ6%TnvD$NplMT z2i@&mCrJ|)RlK2FFnJ-{qA@%09-i9|MOuVGiWIA53sc8DrPs`*sAW&qN^ZdoZjH5^ zxd_SJL_T-ubdcgXdYDIi1~YT!qZ2_8vzFjp;zS5bq$kZYpL@_F{Lq=yfNoG zo0Tk7Eo;~{&eaUjf%r{Jhvz~V#zSu#K#E!`V8BAbFH%i;!MW;D1>M-tkS~42e zVAeN;cFAtR~y2j*2>|R-zUG$FL_Y)(?j3`*l`2Jkz4+$T;-9 zpMlC6vnw_UF07Aym;>CtffQr3UKw+_fyg-XdknuSn3cf8$Ga9JY> z0+!|x8@9)DlYTv_ku^lEz_#{{Vs)Zo0H|N6))WdhQI!hy|AL}}8AM~iPrUyHZyP*MNwUg3S0+H&K3WI`j6jTjs45}B%+pJ}ZAj7R-`7AIKMvoe;*H1TE z_m4*F4Q%Q3W3o^zf~rxvdba%b9)a!*L+_E?Z@U2pf-u=?og6u zp!lt!_XKX6*G!zK&~+HCCx+f_3A7r*#%MjMEm}{G(26Q}PeD6R4ZWvDXgyKTauhcA zaKrxt((64PTzE$4J(F4bze2QAEW!$M6owhsK`dz@bHy((YDLO!x=4SY^Sho;MYq541$Dh z20&1irD}DX57P(^KzNzPj1qi8$Z`Dv5R|eQp3^!EdN&;$>7eJb4mxI*)Oyc@fIL6+ zUcfAxZ6)CIEDUNMt}hI|7jacq2{Gq*sJ^%rN7P~say!slh~mO#?_7!b>GfjKJI4BJg$~urEq;S??WyeMjiM zGiv`W$@ZDyBA4EsDE6+8AS4o7vy`xu1&uF(5< zL>mU?AXbb^6NS7_Ft4l`*s#``gP^`6lC3HR!?(8zmm zpnE@s=J}o`VqZ3?yq_`BKW~flFEE|#X{3IM`Quli_iHe~VFd5N9M!7&8!XRwzX8jB z8+yNsht}^~31C9O^*=bQzW*3{e~JtLxywnZZ6{XO&KJxKG$pUhYL4aog%$O08OmR~ z9M;G8hTh+}n{w!;J*6+bzjKfLV>*KV$f*2N+?)Rjy?-;m{tgW9RUN7p#s6uo*t_X) zuJ~UzM%gq_nA1FHkehF!eeeirKK?RgjeG$9m$EErffU(S7g6?Q!z!bNlA$)!k`CX0 zp;cOhOtj19jZ~q@wACZcdv}41>|a zZtISCCa2{>7t0T=kk(h~*00iiG4~TAtwIwJBic`zYV8`9BwEdd;GLrV@gt-Iq^vP6 zb=QnDt_i`S10}l|RPUxE7}PJlI9w8kn*~-Xe>4TSHoEz2hb(j=7 zTo-Dxx#3N#+lv%PP8N@l`XoCovrLhe*^{Ku$+}R>3XM*YoaUz2j57$9 z+Ee+NT&mG&NI~nT;}Oys_^T$YHRIgWo|D^t)$EzlEc>T<8kl3nC{))+QgUlUORj8M zYtcYND#s{A_B5R>samtHY-EU`O>3h%dO$$^j%zsRD}+DLI+O@$J^pHz#y%X5eV}tB zBhgiKE>fIBI0Ays{#036#y7c!VNxyy=m-S zGADR98UBE%P?ulFz6hM7YV${DgP(AEX4KX}D$THiLbkivSvp!LAS3aHU;$!Lwx*l} zdW%_c8R2S(Xp!A%Ca_#BVj~>ykQX0;lkp%Gp9G@ukcBNK4yMF*EbkYOkiFdvrr84xjAF2^IJD+IhTci=%I4>CPPTq%ug(T%La zq})7ImRlsIs+NpW~J zi^GFM$x%TORTQFZMO5xVL_k^qMum(qO~z``2fT%!)Yz;M94XOW1YG1p1Xch*x;l*` z2STt7kB~|NMhO8oofHDu@W@bEm9I$osw%HGLo#X9Yf^&U&}F zk5ErlrvN!Xy^cpn+Xak5otsXgejCW{c>v98G@&q`6wId-=D7zNmT`B&if(o`b2J#D zE^Nxs^*|q%;tfK}BQ!0G7R;NM&0;&0&kt}!_P~Ilg4Ht_!%&uh0a4J087`Nz3Qv45FV?=JzHn!u)1IM92fK-_)5wM7`{DM7TY_V}*!M?=u9b;YMCF?uZDW{*& z)#(I5%^&FNvn$yNcbi+Yi>{Te(pVqA^)=AQ%h7_)Zox6tI_5%cadrih1IE^dReDjC zB8ewIBkGSH zh2J=Yp$;(6jd-&X;jr=kBi+Pxnunwg*vZRQW`-V(G8mSR!6T%{as_B%cF2hpKJ(bS z9|vCC^nEw#&`Yeq)H>T-p5i6l%sJ?)$1xX8L`Lyp8=oGJ*IUgcd>E&Wvr}{n-V>*C zoYS1fp%HUMe5@yr*leF}Md7eyW7}C$cBcx|?hpR}k zaUQ`kq+xyHKXJ-FOG-VvQ7Y|}eU4-#Ruc4Fq&SC(Q}%iMbE!CG&y9RV&zB19lzjny zh4eysH{>j>qSPlAA&4h8o%F)KSc)dv(q7mY_U&AuKLzR~NCK@d#UrGb2>@eU!)FA9 zTyeX;T#CFx70LY#&#Ud@*>{SQoA6n(SIw=!`es{@-El~<5a+0ja>*X4m$tDhl#7ZP z({vJL)WyluIPyos(M~_*8TB&~>BFHpfFnUfedz$A65@Gq>ViFi5gz3_2Vzg+a0c9e zNFN?nd>lqtCC(qq!Df{8;pkH*XT%$bzV@!@zaf?cZ3$c@ZLU*M}8!`y8b5!$X-rVVQJS-Uhn zQK=aSQ*6TG{Y9}xf z6Sg$pAUVxltU&Pe_D1AGxp3r#szz@@3i$PAJVJVlR9C(bZVHOUIY!6MAB{S*7>o2) z1@LVG@a+mcIq|* zppPIA1b!5ckUl1W6oK4)l0aet?{h6kcPacnF8F;y;g`FAa7lO1Ck3NVX^gl>p?{k- zHuuh_rAYhUxf}WDot1#lRG&VBEOgFi@d)X20!MWYH=gXAqquXXpZ22Jfj+N*eL;YI zQ31=%qGFotFG=+;>*}rgKdn!`h7=I_bv#1)hE!KXa#KknPiG=`WoDyq zswTcAO?+E5k=tc(F+#xU6g0P>HtF5;g`7xFKu+_Ji7TPR`gkFly5% z?tA$mgov6Q(-mua1&ej+)|jVlm5A^#Nl={f3WNI~O2$0MX)NOd)UxT)j- z;)C_^9Mvp~^h*WiR|4kO3XGh^Z(Aiz*l(obZ*|31&G0+PX;0Yik)PHKe?STd`y(D9 z{Yk1T!nmm9Zf@sbq)ES5Ao1dfU7x%eo*bn-3H)91+7tf| z*|6h27^lt&6$miygw)Ze@8ai0x8qJ!}mo#I(%B2Y$5W{@r&>XX|VuO9nZ}tJN{|h@eeeGN=p>_9fE#F zp`Uv|q8fK@G?OnCoR?{w3t%rR@c6u@S}MzOnx{>kaMD+#MVpG44atVn!bJ!bZiRkvJY%6+-VWW z3#`CezdmCm|6xlOfY-4hxOucIYC9{44WPSx+;IkPcw@Udv0Xl^t+SqVd&#!>xA^@0 z0pn6cMJf)gpP`2G5AIZz$UfA~oL9&26N43Dnw#Z{n#T6{OwC6Q%T4ywK)Q#{>DGML z9k@Q(UrZ}^l|}^|kC4jh-rE8fUCGux5aS~~fxb_3ks+xgm+LeKvwXg>WH%Sou(z`7 zHnqdf_!vefD>HaZqwrU?1d(fhM${Qi+?E5gTswI;T;6FQy-S+Tsw`OSni8OZn&da( z8n+`yLb(O@CE!90FkgYwJ&O9*+s3+e#>vw_=<72ss8)^-u%J<1SP2!wdS(hM68JXl zl8>>2MGGQYTi~&}l~7-u#Yn)>3npSwDU3+|K~u~Y#b1zwTNUN#C_-+98Hh8*(xF2Su%!Ie!e^R%8~aGLTBar`uPUPW4iY9+05vZ8Sskqw5? z2-Yx+okl$#h{~roi+!pYbWcJ|B4m{2YVb#MTifVMBF4s^;R~z zqRR~t$X>0$M6+O|vF6m{T@Pz(Y>fCqB97j%Mljhnh6@8z6h<0Yt6tUR5Z-iID5S16 zpoVeYqBLYzH^Q?dxXstP6nUFjxgayt>M$ U)0rkk>!@47B#mx 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 diff --git a/docs/build/doctrees/tutorial-contract.doctree b/docs/build/doctrees/tutorial-contract.doctree index 460138e34e2aa41f9a5b04be4f0d1ac80af6e2aa..62cb14cfac2632843f591b7ccc60309a49aa984e 100644 GIT binary patch literal 164754 zcmeEv2Yg(`@xN&Xj?e>v)Q2HK64nVrkclt`BbsB*cCZBpiDRAao^*FUUD`rT^1=ufO!(d;6ug|Mxqy`|e$nC0wvUd=kIYd%Lr}WOM-gF z)C=V)ub%h4Y-M`dH`zj_ds*SogTWR1k+NvG8 zK7AOzvTmlF3u=e0PalfE3uS;V*K3F0nC{1))0u7B3jPhee5P9U%U-7LWzZ53$TmtD zH1X?gvq0<+{ma>$M}+r&rkm(~VNSFh~fq9zK=>d@oeWftLZM zS^TJ*Mz-$fJYc2;rVDlaUAxoz^ise8ifEvA%CJ1>=)Lg4&7e8)L@?jftRMsDp|}5q+aTAuM(ohsJAbFKRs0;|xxqNk4T9%@Q^a$F;5jW|dG0>>BgdA? zxCFJ+^GA&>>*TjV;Wt9D{MMI0dhAXu+}58zX6$$pOL=WD;dF(jhu|dIm(DGO^f5O<|`i2}fls|Fo zWXE4JkS+XmW&`4awLFJ;P8iQ3taS@#WV z=Rjte%#7u-;jtxSOTms{yxPkAfgq)F-?{1Y!S6$3fp3DL>B2UDXp?*xy7KHH@MJDC z1YsBqY3U(wI3{rB*woG&OJwSGQx*=Mgj>&&x<&pqe9D_5R#?wKnSV+WD- zS8o|RY$B802FeAs3-Cv-QDw_P?ZPcWdPtz4wr0!NA^P^BEe*5>@U>CQpu?PGuU(u! zFu!6;W1?O3gJOx=C7|G?VePWM{BZh_AkV5GYYNr6NAZ9Dvbw*cK2*$X&*2)ro}w;KYO!4O&6uF=+X7^Y_b-j2#3VYnSIi%e8%D zOD8L4I#W*{3^eog>C)KYJElt`K{W%(a{sZzs-UQEw)?ep`PEzU7i`I2xFx@4OCD6o zkFGl~uT-dA(N2ZU=whOl+E+SXTmR@AY8%4ZMhwW<5|HB3#zdxb>;hlbjYRDM7{4pS z+9p@rQSMM%qPCgT8|$;w09jUVsa=&{o&jNMSLY#rL7l@Kb<%z9e19U|3gTiEu4TiUkc5w*BApXvp09F)j}wF$JDC-7^#QUVh_ zGi5T>e4>^GlDV+v6UmnX$<6sf;JJD1%@j%{ub$cFb18)ugH>=U?{%)A%ROBzGhR@b zu9mtfJ67s?8R!pX&)<<@xnyEfs}A55%HAmD3bdH*(1$SPeQ%pT>-i;JP)BN$F`6A7 z^`tgMy5+mkE#XG00J`lTeJo-aw}rJ5hmrlwbsffuMycf2x0VV4X5%ylvK-bbs3LQ~ zvDFc=Qnf0HRD)R1mo<|<0AoJTW%3{Ch!%9PH{07aIJAJ$W2@(%Jaqf%Fr?+7lhH z$F?B-q_Fm6B2B$@)NUgZ?dU$GOOp}0PZe~Z7S^6lINXjnIJIX0(39f0KeG#5hia&xGk7uKH77N-uRSfWh9zN0b;O}};H;89}XyWhrq zGxzYYV1~*{`SGGHZ4?c!i@=G}nI}E-k`MD|I zEcdh_Q9c;yP&UP8bFe>+C1&sQI@SIXR27pcC2B9ln)0%+b~8tst6?OVsCvA- zbEX3t7p_-ek{^QNBE@R21iQQ{ti2jQM9q2`RxND04z;b+Zo%S}O5cp~`+>Nty#~E` zZCHC9NwS~dtb^=ygx80)HxPMab%ewNv3kB9KSyQ;?W7$%RSCEjF{An*U30Bi`tl-LW zA?KPI0l^wvHiqvW?wm2_Wl|rnriRKEIfi^OQ^sb*ZQ49ZohsJh=}MWsQiW!+QEve6J|Y0CK?57sS!xu1KNiz644ZgW z_Fz&-usN7g3}MjFi6wX@>0uq5b-lDY)uaz=Ci*#D+3x51*=mNC9Mr7Lz+B4(8+*9A zszfotgC2-M9GFNaO~UwDzpx$Mfl)3O5FgvNDo`b$X}rE@2--RzXvOFbqeL3p0M^__LsQ)kMy_QQdgM9!Aqj{ z|DYMXFRZSz@D&ufte@b-Rv( zvqD++xp*}RF0)%?Sxsg#v$C^?W!mR)Bsfy-h*c~MG=e7+n=77O2C?ReL32hnm@wO8 z`7M=ZaU#nvwyxj>D;ELyUe#1+>hb!PVWXD=$~eZ-Ps^}4ss#XLwimF*aFc2coC)1Y zb5-SB(p4nqC%rW#2!S#zW7~Z+OzSH6!Yg7{IV3aQ{c(tZv!Pk&C9Ziamt|V?OK6k& z49}fl*r*iLsxZ;ONl+q~4S<~2mx2kkyxhCYWO5~cx#!ojKouz9d^86`155!pC(hvj zY?c;{@$s@>PfG9juRn5TGL22UuES}L5V4;wVBxQmOl2I>V#OuuP;78UNnmP95KREX ziC#}vat+`wV@Fj4ASN;a)>0mRp*@aubbrUsB_zhm)Z}2*AK(mkJ#YqPei%zs0p3K0+cmB`SVp*#!oclgfy4q8)r78^gI`XzUYf<0 zG4OI&#S+wpmU~#5u?>WqjlzexU9gOq>dl^U;-Q_#@;vGX(z(fK5S7XgQ?dax4aO z+hwb6&}I&`$QtN*PK!N%_ZGcLQ&bGtMMUOj;afh2_~VCj}XXrQpo9rLWz;# zNC9+|1*F{96g#BA(ekYa1&+Z-%Y&|#ITr8G`Qz{i&GAxOJI}V_ou4E>?iImi?yNYS zAUK_+#h*ox}4lpbfO0sg}>jdoa zu3;Wk(Cm=(9D49&&TfN=B7nUC+RubvpYf@SU_quef6Awu`K0f|iE>J899YT|wj050 zxt`g<1%F%6zIvNeg%<7eVRYR&b^$l1Nr6=Q;@w0nb8i5|gt`wNp*dZk5AQbU`ISYE zv99~3Pul3WZP4YOtAE#_qA(tig6*_Wh)@X38TbzIa01|Tg<_VY0J=7aM`)4)O=SfU ziOY(o1B9+j`xJASA??7K(t#D)f%HC#Y&6uE-0c=+s{I-0?>MhI3%%&S!JI8!y07ih zE!gb9ysQq>90J&w)y+AP@I1TYX&Ym21h!0jVtGAF@jslW83Su0w*h*h;>uj<ZEgmNTv{<#F=WH;2Kv1ScLLbF;o=Q_{jN75e}sud zJ89@gEp1jC6F4O8L7!-g7jz-ig&QoTTw4}Yj5ZKr6r80F3ih=jZBIa(Rg<7mHB*MH z-UXVH9QY62*B@Rll($z3IY;c?g!bw?+R&!s?u?v#kClT)wTcaxpWA@tLbhp_?8y36 z?$`P-z7_)=4=iEWaIJ@b!{HHMn{&X)lv%^V(IT_VO8ka6@?SW+7k zMa!y}N|DR7NcvhlZ>6+qo%gp^PVG4%WhGQsG;ft`TA*NRpA|(n4K63`i^Bay;d#cp zaP4T}_+lG}UqTLFi>l!8#Zl{<_lmOcQ8V`kl`)yt;SriEI9h7SDst|~WO5s&loVO7 zMbcN|c?s6Hb#~h3!;W6mO zHG%>~gkxJG72j4dDBCibc_6-_(u1VZ7Of;v+qOV!_Z}?8w%TId3`gVgt#@BC_>R8N zV2rUxh;(1SnZP^Xki{c3IRT*iK{gjh{6R!~4^9Q+D<+eI$&_M}-qWo{ByQI=;j@9+ zRtOR%4^*IL76h-N#p|x1M(@c>#@Z$&dk;nl-!T{`0Z`k7jf8-iMi~rF8IRCZ1fUKM zk&(d}JIo`rMAk(y65tT>kf9(xJc;RD1TWT(LnU`WsnKo{IjIpxbX8T)+N7C5Te_=~ zSlxq(j@iMN;H_Cfq@A}$qutYWEQiP_b3J~9<{?sixTr9T>`W{a%Y^c|1KPT)DgPeI z!m0G$=<>tR6qx1Vc!cH#K`O$T9Rb73|DnH4; z@wf;!XMB2u`MIQd6!2}1s)P=iM@t_%$$yPoQy;@h8Y-|q^zpGk7sGfX9-+BOIyYR@ zju$y<%`tqO6nVTBN#BH7wW$JcY6Qv!h`bY9P10Krg9P-gvafoO`iEJ)#hFRrmkrg* z8xZ%u0eA2m#o4J^gmZuK9v8>$AYZ78s*|V|pb_z>b&(fP9g5Er1j)`pdXO8WCrW`- zdi5^%!aNC}K)@&C5t^q6+~M5-7s8GN$8OZFXit>}o@N`MVqytM5%Y9;-QHmZLAme@ zdRQgjA4hYzmNzS!x1mtn$2|Yx z(EJbH!L_`|Z_c}X($W#K;w-!dmT$)+H1EK_)Zi|`?xWoRA3K|n&|)>h3J>=syykyA zg`lWqeDjF65spx^Ys$IkC}MfMY-A;6C6U{xA@==s{%lK07NBF-RSd%!@zzX3{i?58 zD=}EBMkT~LJG**yM;#ZubTNFIMzF&NlOtUhuK}#9<@|k}1^hgXeckORi?Wv@(yA7s`p~07hvS zJ9YsUU1(Z0h3#~n?_h_BRiXojsHo!uWsHvRy;z{hCLLAm@J9h*WQyiNmb0=_491Up zLeCo-l2~?xxgn=f;X3tcbBx?luXhKRH#u8-w7e%5H@ncn&(R#~){l;ZoknfW9Om|Sgqr<3jzIh{%MIFv>nnB6vFPs&*jn%u)xEGNassWg6A0{*S>7TvR?94o zCZPiw8|i3vHRTIQ8|$C6u)2?3?U<-N`|rTcr}y2uAN8(HI@8!mp-SN$p93+RJ2 zFiwAMA1=#VYu%9-t0yayx;X3fh#>=t(se=iwQwCNo`c;5w=(aPU54!L%)9Wr=`Zqb z{MFrG&tAJI`h$F=1se<}98x(l82 zFuy?a)%yuAwa6Py&%phZH_QhxlCZRV5RcG&h&*8(1}Fu@%;Lntho#6zv`BgunSHF% zMU`MdJJx6q+HSpwRwR{kQMpLt6)D*Iv8Ngvts$-Don9Ij8df>7{SlQZ63%n(Pg`p2 z`ORrJ+~dk-%Qh~y=10p$Y-fkhF=}#wmf8{3@ICt7RzFTU6pR0o%db;g$uuRdcd9?TL+NtV4Ti*V#(wP6mX=v9{ZO)1vAWz;2_qF`9G$;uf>( zqYaCN5M!ZMTzXDRK)bZ-?$SbRW4czTZUO*Es@JB{!s*GCJ7*5JbCeyJ-BCvJfHTE5 zv6C&NW5x|}+lS@9dF&kLvu)fRdq$aj_8_7AhH-E07Wd>RM6LAouuKeA5uhk1ow}Fb@EgW226vU8=zn%+d$7aycJZ|Ldy2>nM z18A9M=es|3&h4Vnf0U}(f}L}BP@n%8szRS%RO%?*<7!J^=bGvk&E0k4;MTM_J1#19 zv=v+X(Y&YIqEg4Sk&ZtXl{!6bveS7{scSt2SXAnGM3Riu3a1$KGX5_rb?%gCQK_4^ zRevE$o%uMFFqq;#fk$XQNoCHO;%IpjQ=E(4`IHp-v=&KU1jFssF7;olds)nLgpRe% z%s8^?8;_@SGM@ps=s+H+d}b6)Di(4~0Y(_^bF16`09rT56mB#Rnk!H9SJ| zb%COunQR!t66IMt0##%Afy_6w;y0z@x3prqtx(hzH?-fD(%-SAPr{Q<%X17Ij1h7T z9#cHhVcsUk1RqHFj_V7?TBA>3=0nJnGNy)D#cs<0lO(e43|$X=3iZG*O-lHdI@haZ z4pu+JipfnMY}H0Pd%0QM_XT5csgltgmCZcgNJzy@nlOei?cy79S4O(KKm)YcjdF6;R8_l zIUb?;g+Nh0W5aPiV{llL&w7u)`K3bql|cNpLX_aJ`P6Rh{BH!tZ!HXF-)-YAPO;y~ z=iXiaJ-(ysoB}Z5InFeHz-x5;k9dUUPXa?b&PL-M{{lOHJL6*Wf7<&$OYi@py-(jB zdm1s66Lo);F8|GT`4kK;Rxt@Uon*G%$pWqblKk`hE1mw=fA z1)9EE=9=5ojgKRxBBs2JbF~ptxVVSuKfEXyBirsL z&id+79#n8W4^Jy+ljab#0cx@r);FG)YMG_dbO$w~_^3l!jqy>3;Rh15N%7&Lg+}z_ z@lgr++yQOf7by*okdMfYYVL$zp*d3ic6t1oy(U^mbp^DtNGu5JXg)PQ(^WLb;2nnY zSUf^=9R79V#OC6%WgW=8J4t)IHhgDk_ylb@y_*}s(6R3lUSaP}Gbc)ecd-p}=@=gu zg`J#39nfxvdDow0y+V>Jdxe(j^-+`;3(H+jSehBE#kd0G(Bk!4-bKh!h3l*|`YQ$z z-a1&cdDUnJQ4Gjgk63A51SJu?DGfzJNH!9K%C)tF$WARet>nZPX|i#PMgWB% z>0Mr#@u4x`-otVUx1z?{Mu>`Jz4l89L0m$TpxF@Z66(O?9YIORdWlrw@Xk{Kf?%=? z3NUb+iANcX;qsObYNc3b0pBlgFYwM_XglTEL|?TM1ceDC>6)$t^?vFs5_gV-oO-W^ zg9S|oE_{eNL`U3ZWy=K1A(@C~89tQ6&zWdjjc1w6$|3o88Lr`o6^JsTGMTtIdm~Y4 z)IL?A_Bni#a6rebi{>!X!pj`Kt1!&n78&La#xN8VaWQ>&;eZZ?S@$K1)_cfDis^ge zS7`1ff4l3QtbC!2_PRn@StOSc&?$Us+?&)g%kTmM`cynZa~l420-6oQ1vIx&ixLd6 zVz)~PW|*8Bd~hG(gVU7{(u-p*YVYlI%&}@wEVQUEeKP+2cKi<#^(8XVit@_~GGJ{)}t#zaBBSDwDMFTnkuFohJFpp?`fLE&xZlgxPYdRBwQ>JOvpsuVdw%6w; z5du%$d#X{&Adh*byp0ND78(w&y|aJw?vG|pPpC0S9>eQ7^lCJEIMD#YEIZS<5iG%* z%&F6iAR*1jIN+4+-HwBFxgF%^V7%M%J|Gn8kk--ieg?kF^1fUMI=D#CHiDAT;>%xB zDAYmFbzkGEH6$Oo{GEwkp;;k+>jlN*<1zl^5_ncuNGppR2?9Ht&y?JZ7}YfQ#Y>34 zbMQdMKm6;KK{gm)1{pC9w!Mly9Xs$91Gc%G8AZz9YTgHx{F=YpDhAh-?$}7WPv}J55UbDdzA=23E(mD^iU7uNx zPmTPjiii#Pqdf^y0ee9`j3L((ZP4c(2Yc})u*uf;Q8N=@) zyX(g?e6B2#-jpI&@u_!%b?>XW8YM9M(s+dC8vN@-3h|KHH?~wUG}r1I2#Zu2OYV{+ z>OD~EJxJ^6+lVz_!E^S8EmG{kw%Geod3-$X$>P>*=jF1>rNRYq5gm)PZ6zPqU`-D( zi(udnojb%2Lz!wp-VD_X)BcdHoXpp!ORLAXxoXD{*37J&gEvmoXZ$w z5JGiCiBFh}nZ+3fbG_kmGp_z#6$T7sG|`I!USk#r=y zJfA7K)FaMQrhxZg(IOtm6o!8tYqQz-!qQwVOIl@Gs+6@#%WBCsJJU>4I7p7?gsGqa zdR7$(H47odp6yQFCRuoODZ~Iy(tOEhXW@%X!sUl1!1wfpXn9xXlBokyOGXQ(5pL4I z!Oy8U4rV)Ef%G$Ygk}f+b)+X5|7Y43jdNud%9IiDYr9o2R4ruBpzdtpbbdQ*C9-?!-+C= zQvKw`kUWltM7F2M$Z;c*SJKl&Wod$)@k=F5=Q%!3C4C$x)s-C1Gq7vJ)`&3dH3#|_gh7{ABp~9BVb83h0n9@#d~~Q@*;F??Xx8&X;EW5HAXM~5O5ltu zDW~*=8hbkA3TZiL#7$QT*sJ9dMYLqEx7?mV!U`rLv4-@DDNGfR6wRwhAb8S)6C;4x z8yHC>WaYwr5Q42_J9FRA&rP@*6ZsF|mgR1GoWx0bsesaQZZ7*%mvGwAE1ulV=U_KVfmC`uX4dXyFLM(>V=g@okI+0`+8N#h?O^tB zrr5356Qs2#+SZsn)Ui1w&y(bRJ2?~pSHLIZJ0vjEEOTy{r{HgN;i-6p=4nz{w^VE< zzVh`!k6WBaa%1XF=aG53QuP@^)n_VI(~A_Gza(m9`DY0opKa-=%3rIbBI`d#zV~MR z=i<9n{^FI*^Y9*1;Q4rj<^=*orvRIcPl2am((H30(Y#R6f03a7Vnsi_Pof$Ps$2hG zA~?U);#>!LH)FYwEfOX<(uu1bWAOPHAo)+T#b+h2r&QGK3e&kk`m$P0feVgI^3bYT# zeI*{Dd6i&0T(q4bX~DbAOo^|SQnzTS&P<7~kq@!Xn%Ck@ewk!Sd>wxtCYcg{>N@{= zslZH$Z@{n6yixuhw$~qO1~c;}R$N(R+jh^#E6UBArEIJ*n=3H_{uWknS1DRpZ^b+G z_HB3|OP)X&F4_i&g7j8)&2N_?@6aOYek@#MDp}^qC9!eRK2h(i`cVU(alYVvo}_svsMb1SG8f(@#OxfgpF4JV zH|wPqi4EG%pV;pK(ZJI0#RK_Kgv7%|I|5|lCQH9hio9Qoq)){Ymo%xaTx}S*ks$lE z^>yP(5H?Kkb=fe9K_)AJrz>P7m$a9>29qWBRro?K1dnG*xSC$d%3b!ZsBo9d6bi5j zv5`f7VOl!~D%k?&1@6A3N3NW54bTynA=Q2`kn}FXeFtDkv7Yfq#Ok+u7Z1{blT&gR!)Hi48)Y_CY%`Md zQKo|RGD5Rk?E`7j=#`G{aXykB6Bk>QMP z=6?RDbm3#R3%pDsK7Y7oeq6q_kDS8c#_kjN4gs7%)g~{PPvR{o^eH?-^JxL0x-A&>FQRZ45&R{A(LRw!*Zt9n;4iaYDm||@zJjut-(STeH2*7*hl{ph zqAVJOOB($(DfM+Nm98B$XVPd{Zs<=Cr8$)w`(#bMm^wq0xidqqM-zp0&V1yX{4ya!UIEY|IRhSf@HNOMj;6DqiM>3a*VmyprYdE7TEX2?d zfCOBtp;Hh6jn}rt#io&fyUK!)I#9c7xg*u5J$%A-;#c#-r z6p3KIiQmlxi{HXu-4iT+n{`|!weR4M(0rG#aG3LM2&Z|@-UUzHTQP67%6um+DMUG? z=7K1>;P<4v7eGU~N$&}qXL7;6P&N8K;idL-x|koJ7ZCM7#3M96B0X$0FGpYH{0Qg+ zgUpYm$WOFL`aC?lP4!4D%~RBMgRwI?*D2%{D&g#z(wyQ=Wt$aj-O${*RNGUCwhObJ zqPkNVwx=*{6I~9`9`o_1WUd9L2Kp~&4zSF}41{K!ek3)7$_^)F~`%S!j!u@^T)7;|dYqo5BTjc{*{^GG$NwaVx7Y zXB}d;8-Y7I#VY;W#>bUK^tX^=d_0NQU9@bR){AK_@0Y4HI5+Az>#xryCdEz&_`FPX zhG+m6Lwi}d;!My1ucKEBmMFL9!HW$RC%zH;pWIIh-v$_U(@?FCHe7wL7_pZZpL8?YIX&+~E5+4XleS>$Mc37`|BV*XHbxNIdfZIF$ zR!XGOFMY}Fq4_8N zrTVMiTG9NMl=!zTK^s|fY7x=@$d}%T{ukeYD3wl~k!A^Y&uIDpJVJ9I{&nJqO?5%_ zAT58els`nvcSUunlsMFuKvHC&YG*z%Jxo6I#`JJ}2d4B>lv*Z%7eMp~JVJ9PsjW0+ zL+ywrJ#(a%KT66Ut>p#Lq}NK*W2D5fw!~co(XMidXdfrVdZT?jz60&!0i_EJb7y=; zCr-d4G$#ry?F5mCcjEH^a66NO<}TX#lce(}Yv$}T`7+aZp;7xu&POb0BpU3djI(5%zfw-5{;IXxbU!gfg{vKA&!vX{;#Pd;P&c{Jg zrEHcF2;$24I9IYT$O-nTQZ3f7o?yosI*m0fM|XjHZ+r$v-v^J-oG#FYi?%Uh2BroH zm=mE-iu7xd^a`jin*k3>gt6zh!8Ct50~NVnmvULtak3{}k^nVch0YTvsx?^f8675v z(Sg^O@dje&zytO^bVmjNO{k(Yf}?Hd4%C8herT;`QBXP+C^jAgrQVzHLgf1ho=X>m zmwH$otHBDymF zBZhKYt@}xbM{I{*0$C-e=P}L@Uo6=jP2(D&0&aE27NOdJ{{c2cZ~*2{5l`X-4XR7p@qAWK2x!X2HL(dNQi ziRtJv3+oEB2Y-j829g+o5pXP1<1lt3tDbw-Ofb69x-7No3YtGqtT=TdltaK1Je}Y@ zlXM4H7iU_)z6V=rlX;*6JW+CPG%P42h}EtGr;0~C=9Gvh+R zz7JO8(%jzXr!AIfYj)pWDdZd*bY}q&J;nu+(0*-sL!&Otuu4W^x!yUr8W)_ALwb!= zQcjj^;kIFm&fwNGKqaJ%0{{3qy-(5I54zgRPLn*{NCF;~>k*YexG}MLgssi?pBD+u z_)*@d%o-7!=3@MA9_3wvzq%jgUCKJ{DDN`-5t_^S3bqWUGQD*(?6#O*w{C9TCKGGn zvugKEDKHL2Y}*OvTH%5PpKzwmIDl&S{RuF&$S-?J5Z{*kV%A}Bv3g&DM`%*y6MNJ_ zVWCU6J^5WPMK)-W^k1;CY6|IFBcb=Kc;2J3xyuyWNV+Wa&@y$7Ot1%_E+*I=m!#%O zPyk%G36IchCMhi!lIesC-7auUid>~d(t}vTa1?`053E#B_8I{dH0mzM_{;TOwXZ1J z)I~pI1BZh)d&)*d20nJyDu)mYv0zDcLc`WC11D?AKKn*@YI4nDM=#)*p506zGCJ^u~uCzwCvoC zt%`PIOlZ;v20amTzB{$eH7J4sycUnpJW$FH&ru#|a3JkL&x54a7F)~aYmSc|jYSWZ z&+TX`9IjGZ@f|qQSQHz1Gmh6lEQ3dACIp5Wi`b|bi|nz_VPGX2fagZw4$CDbt5nMg z)qJH|dXYl1;VQ!kkn>0x*vX|yA=Q*6)i1z>*wMk9BzrF=Yr(z^LO?>kD4)b`6f~x$ z{GcAt@Qtz=gIJUxiXGD}mWJm;QeX#IC}Wq19QU4!Q%Nw_eyh>N?XMv7kmue<>f|bo zN|13r_KeusIrDg-zMR{=E(UML^|L4s@~`s^WQozJMj%1Um9OXUS>3>NlPP(jL;GYM zOb$j~br6fk&%CJ=xs3yDr#7UltEZ*h;QD^?A`YP({U-kTUiLxZ_o zybed~I2fA|Y<5^|jsiVkr`jqj`BqqaM^LA^jus!vBYX_ftdy5jUCrcNhoF2RXRgDy z{16WeFLsllc@%lQH1`l~u6YzWcCzN6W|NqXuomaGPRwp)t{oFfm4_1Q2}PnC;BJr2 z#NuHBCdMk};qoS#AM$aOXl{_d?wmitCpMP}He+|`+7j@71WJeIk@z=1WZMC|JxXBk zsPobC{W0?QaQZk| zKOT?JJVAgB7j0X_OEgD0=zO9Sd6E`MFTq+b;#u5NVK$?B2lL+yge#12UfZeXOr=rE z(e#EQ0ZURAi-kX?wuyO84j&lDM+=ym;8pz-0i3}(r+kQ?ML4|>Cki>ZaKT#XVsUBm zbCChC4?=~D5JARqoFj|$rn?yuh*u!$H7;EXA(J;wQR|uu9NnxKxbN2)C`el$jyueg zL5$Wh5q0n>LZi+xS?jpgJe3twi$o+5p9Wfh1D}pZXr3XY8!lSPlINNn_)IDCEG?4G zSPrBz0agldgxWVgpzs@d~(_r${} zoNxg-?u;@>W)JlxX`T&gcVY48$RKpGcq(G?=dxmIag_GTC_N9v#vFP+9>|d*V>4W| zL&sUuoI@{^A}`V+=`~n&Ar@(t0~>+WB@saY-&8ovVyzSwcWfm4XOY6(KU*fkp)dEd z5a}{8u+hhUc>tDxDO{Z34_G}I!QIAB)DbdH2E}=lnEV+w4fd2}K-i7;2e2LV>udor z>}5=ZwgQq-^SBKQ-y@jF!c{3r!e(?r&`CIKu>NRNH|072RT@)y znGVb?fwc)?+vTB*H-SllAZ>e#g`Ejl1*A;Y6oRS{0k?tMhxZO(L6jz#ed%={=We1euR6T9QnNl420@T={ zl%lOa6fLiMKRrn6s zNq=3(yXMt+hYsC>M`&In0CeZU#$@NwblKshWs5WK_CNE?Yn3TpCrt5rWs3CT=-*-F zu8JLJKzoC*!5b|bypoc&f^`emC@}yA0v{JLQBPLagh)4DvvIAvMUr-Uh<7Gof*-0L z?=!oM{8BT%b?=I)%&3GVD83;J5Kx14CBO=+yFQyBMiw6|Zv`Y-;?fVDLzK)n0p%{M z$eX1n?P78?b#=6gyoD80>HVmyZw1B><8Q+QX|kk)NR!2GtSoZ;nwr|%rN}$9Ncwz? z=BV|$Rb>cTPGyE`xOo0De=0(jqT4NGy^iffM$9|4k@ltfUD7}&k*|%2{BBlE?FJ0q z13>8ed+|U%C21G=ln8xgk-gQv^Pau;Ns;$!5gK#i8iw4n_W}9V^PaubgCg`lC?$E( z-iHM0hZSnNkIVAFT6#AQ42*ctrOsM@=9y08rpK7vZXf_Pc$ zi`<;|QGwM#yy#kvkFh+x#6ON7q4|UqA1+#G#K%Gtt?85UxdR&e0;S+n{Mw#c8Of56 z$2MU;jgM&NGkApNvjRtNYl?bEz2kH8p}m2XMPkP$KF_C(P9a^)7w`fj_C-8G^CkT2 z4i(vuC>>)<6$SHUd4t;b0$q1T&aa>_;C>Ykz!}nvn0GWS+M`(VEf8Fr0A=Me%hiy)J z{Y>HgT;Tme;kjX(t0HJj99xF%mjdKh7D#{FWaR#%b=)qhOo;bf-$niA*QnKH+efic!6>I8y=zgJN|X!#)jI)&C}^NH^Kg)0RJff|D^yWgAFF?oHapZ zV%ais{}w3!u~2m6;2~(`XeYQxj$-8gi&|YqZV6%x`>ehHf-THY&&2f28Fv7_%g7yw zAE7x&iVqhpG$Irqxr4hyOKp{rJA_}|$SoCkhblbD&NVRL`a+3$SXWRhi^PLNcQ~IK zd8pM)0&g&ON8o{gKK$#(j!m_Vol3m9DR!j7J4)akt?=xeo3kRQOe9-I?ic}btOe3O za;L30r^l3A)6Z)%+84j$1Wv~UiKg4}_%4HXXKD5X+pJ1xN8}N#ySt4YgMfI`+MLXRU7_y~K4brKdkhcrHmk&!zh`ZkG0Q?9_p zeQudD-tvwBv4zsQW;ZiTFFRv%eX?u1i5kHsN@$)mr(u9Fg6(?vy=B}w`FbK!Wbea@ zsr2H&(hR&04(#a|9|(s&JVMhi!#P~Eqs_Sq`Cwy42c*auS|t4edys{^5nZD);z1CR z8=iHRV_X9!cr#;i1D-Gv$H18(E-@uc6S&SXV}v!)OHxxmp+TbJN7skx&Djta6f}4j zG;qpOo3jLYal#86WP4>Q3DmS;Tf$5y7%(AWBE0cf++;Ed@$4H!{!6XW?`9!_!(i{W z4uzO$659)eU_+P|e>^Qu6Lv-?6y+5%w^BSsS3O&sgNQWrMUJ(Y-4!nqG7H5B?xv~8 zMw@p-38E1kHi(QjI5JT!sUnqai?NeLd~y5jZZ`1cGQ6D=dMcXGgHl2hENlielf(;f z&=4M>Ia9t4OZo+Vh0Gw|SofC|QsyjM<~~?!=Epu%YR;Bg?U*Teu6y^zcL0^R@s5$MRZQ}6Q3B!x5(NH-9)pE%dsvZ^&nKC#x(UC=NwISC32aj?Y9qV zAAPp1gzOi+2$to_3=RPks`f~7a(c)x!8a~dvXWI+2oG^{_L3;QV+bZo`c3H46Bn{c zb3VG#MM+vMJ#3d;qp4CPQ!ik}RQh&6f(y|T$kjD?gytgY_;AtEh2z~+Cq|{n#abjy zSIEoZ0wub=yU_MhsozQ4N<`bsSTVKp1};ZAV7?ZQ(A;0Z4i{~! z#8ohN;jHVV)D>DP%@jj(gtIajjeh@NE7hyXmp!6jHf9QD)kZ`$%wFkS{}3f;4dkm= zuVygjTp@7?gM?b5vDwK@63{TX+9T9H#D(G(iVCuGP{&H@_9W?)fqo=$1#E7k`Y>m> z8-o5L1`_;$M$*p>l;R(YwM5@8QTJlIgF<~<3v{gP{4MIn#?kM8fm1ZsqH1Hhpf+p>P4$}2UlV&&!i<4zSW>RSBQ#fY1Z;F0 z8C=&B8)M1+67E0NBIz19ejgHU!q&S>vc=_;T{2=~rd6!P%kEsJ-FksG$Go|gL$cuT z&WFmZc_8Xy)+~;ut~q;kG|huRe9XNqcp!$5qiE+Ir<%+?w+-1UMaH#Anl~xXaM2z| zire9k|J2=C%4H8cfP zOSmKfKBuurQC<3Bk&Q#9Nmtw&%Qn@Cn3H13x7%)*)kpzmTT9r~si>csnlk3CWi<=)$CQuO>NB`LNp+H#6AconDYjyRa{Db>m8*p;Z(>Dn6BaUFawCVA z+^;k&v60=s42J_*F_ai7&^-lHB&I^?qM=tWhTFYyx{n4MB$IZ{0L-y^=%= zqc70axQ&JHE?tAg{}ea2;R73Ri1D`-aB94>>ao2@%Ub=Ns;uc<${d~Qc!Wsz`b(kt-U8QNRKYoM_W4+Qk#UpKYcD5f^zp){jwg|@rJiMux^u9?=s zDa+tgba2v(1CiU?5)|8j*mSJQaMbK@&_&xxSen+2yze~^1ANCk#J@`@mQ5YMFaaBQ zgl0SbbrX=y#3vvV`1TOtW=4VR5FoP(Bt1uk)(%}K)vmYI7^m5~Ca_x%k*~eG72-R( zMNjwUa$+8ex9Hr%@CePr1%#dqu*rDmPK9(?TzYo8^q3ozppOuOK2iyqUL@Xp*KM7} zPFa1FQ1Q{0icHwN8M=dM@Iqtig3u&XA*>>A2$in5q7l>9piRM#K{DUYh}qS}uEq{i zn?BS$RTYhuSpl4{1e7aH5}-yx`WQeBArh4=R27ZrV-z11TU=Aih(Cn2DnjlaSpYG< z4c`Oq(@FCf^er+gNpfUyGkvUdxqUK^rk)z9D>t%YN|IRL-e__Yx(1o_I6Ol0c%j5_ z(GrRrA^REeT6%&Md7>6ce^f-94vaOWLt^nPg=g1Mye1CWsfY6f1Y=;2t@Vl}B%Sa} zxT9E)JKRp8VkCf$+IC_Bt}WZBz2XEPCnI*-z)g%jWs$9s>>UtA+DxF@vW>x6&azm- zM%~2(Tr>G|*@$@(dent0o-7^hc~ba%(L;kX@GtX{_1XkelF`c1N8IoM`)hUS1>?dh*`9&v;m$Ri#Dt53#8G7TV#1+ zYWBB3f`U}NG{9Lcb7W?&(rqoCw?pbWR^rD0Bh=>v{@B1tKX5yi~N<>`iG zz2^xalKfP7nRmj4S0S{Y6|h`Wh+{36>==;Tl;FGtTTrH5)VX#E;-@5~K;NEA&(hhM4~~D3XI%71Y#7*nB>SbYnMW3R525dbW}SJB@I>dr_R?r! zd##j6rN4|Bcst}8^E&hov*`7Bgys#>+2Px3XCde)3astyjnd^e*)AW0@ok?%+}*xe zzPEFT0;2KkE%**m$7{di^Uu5$??KnM;el8_0iyd`HVf$#Skw8=AeDOnpU+Mj;4-q3kE1+V)D~diV z{rQ~srqgmvlqW_i3vF2_1u4Z#zV~x~Kpnn~Oz?0v=BQ)O> zn8QWeB(W4#Np`j0k|N*MBIyt~uaRW+NTOumSMSzbo0w2maIV3!#l#{$Bl}wVYq#f6 zk`huLCnvn43ESdnpOy;Nx3oZ9Ef05~4pmXoAyK+}YrMUZ9r- zM4x2KDXs+za5s~?Ci`3hO6Y41Kjw_aP)lfH%!3FeE=cnJKYDOo@7$JHfd6qfCueWK zNzdStnxPGM6KIL(U&{lVc^29MhozR0Q({&#Vt`R(1AwO63AM|!6Eg{N;Sh%+nfT_!%BOK2sqdI-udTyE4o60@6p8-T3488 zSnV?q0hkBw!i*Bn5Yy>uu5p6U^5-GjWy$X*;<(2kcHRW6b zR8-rbvkXNyPY??K)BA(!=UUKH#&zed2_Mqg z_vXP|M1%2-yNk6V@gx>xuj*HLr5B`w<^-hpZ@K#lv5}a-8tw(Q$Mu6iMRTk1XUDXa zakSJCd5ZlwdMeOGYBLT%voNbXR)*6WNfu*olZd^9TQh_hnGM^{-6 z+4&r88yR3LcR5p_BPc`HCUgc<3vqSo!z7C!nvclVb#CI=2+NW2b%f(^1*jlvSL&YA zbB;;lV?pCQ*_oIeL-PJ?WvYy{cgRblJkXSl(!gA1?#)i3Mxt77{E1$}g&MpEB95Ym zAW|6?tD$N183YtA6@94Plxpqcd(}zY4H9srajA^O1;#+JuMO6UfivqzilUUZ zcP7QW(j{S&eCxw4Omvgqr0P^(f0Cg@u$BgPk;S(SGtjj9`f&@>!d19fqc}u$t;yPh zlMt6R6-1$z7WL6?H(`l>+NQq7x}ahr5LFI9smxhaWlC^L$8^A^V?U)^G*9=Wf`>+S zQLzg>nV7pkLe=%U5pjK`P7_EUCET>PtgF%!1w)W#%4IP3a-)Ju|eE(32JfASrnWT*YBv&t*a*?+^ue>cYkfrvvOYjr7BB|51Y{yY$V1APSHuKGiQ^7 zFLnBkakJ~J)W#oRTx?+ddX|sA!1q1t+ez^|38sN!I9VvmHOA2btHM9p^~cW}e{sMo5=9heh^TrDNvz$tXslJn4v@98sWVEF26|uFG{WC-g zh1DFJXW}K?v6G$i+}nqR3*1|^XO?EV2}^-C?+x=_5vH8;yKAf5RD__c2w?mZA6u20 zof`-Aw7F5_n!XF$b_2+7-`(r+bM;VK^=--aPli!nzSz z<`n1xJ1RP#&2YOEZxOx(*CDVYE^^$o7iREIxmZMdCliw=v;*J@*ORX1z3$wzXZF2w zGfyO9_SBAdnWczG!@alNb`P= zwW|m%8@)wsMvbSsP1ec1GvjYp;T`AVMQsL~4dm&WkNw`M6^q&o6WH#=Y=6hoX3TG( zdceEkw|Io+chq962QCdQ>e^tvnSU=u{-8zDH^T!gGS=TJ8~%a}`05|bw z(xUvgUVn31@tbF!@uS~G`QLFA3;A#U58@j7{h#p&&0i?@t$t5+Ui5nxVfR-l@;5D# zUJlRk&6;|=Qss#lH6tYD_iZk6YoT*#XOrgds2CmjHiOasA@DjKz5f|GdjFFZQwwkK zU#N$k{Tq+a{70G@E?O+um!?nrf2GJ0>{xha{95T5!_EwxI}ymaWu7iZn*dy{ zAgO_1H^4+~y5dV}4g{S#=Rj|)j3V_$8Pf;RvN3OY**Mbd5KLEik+0+hLmD+iw&Df@ zdfFv)F3yO@e?C*KGJD%(voCV#$@n<4F4NBkZl#>r44}o-YA><&B)%{@Q| z2)BFU5t@4mQHJm6M1gqV%(mgto{;7gOPb@sFI{98#l|uz(#~)Siwn}J_>KjM$qCzL zia8CRFbem^BQ*CBI2ta?#<9LcLDH<;CMV75TDeau_iJTorLACVw+5v68Me4~t3%+j zTg#4{NbYE%h9NQW*^l!!@6jP7;+}dp5|4D_J86af!gah|9^5ip(t34!@a4<=wft3tO z7#yY|_jYlBr?w1*pfxN7X?4WWU5)fqio3heH{fX+^PmTCxxs=dJb0}IA`y@pNtSH1 zu9ti9%rS~Dlskju6jBmyBrqMI=9FNFK#mN1bq%z4U<`YGA?pnwY}PMJ{xSVJpqs2F zM5_RyJQPcl19>J)#>^s1J?=uIiHM0PNsnVz_<57Fz6>QK-G6`g@MZR5VKH4wa zRlA9kE21Vd(}hw2MQkDtq*1xFQW>ikO3-R}Cxfw{HE4eneKYC$~|ilu02Qh>QxCT8o1V?lUZt7?@OHGNnn zMY{kQO&xk*{^GnW#w(>nD*X$H0U~&Zm^S8I^cvFfet3jtL`X1v$07j)DdnbJXwMTu ztg?h)B9XXc;Zk(Id~4?<1;Q0}HNImhV!lx)lFS8o2P$8PM`+dv09}LFTzn0>Gite+ z6c=CSB84z25H3~->0YIyE*0~-xxPfIU23ZxhekT(A^Ucjl<3{J%kdq3V|tc$d1}_; z8~S*EJVLWh0BIlDxb(4D1va2_D*Y||Sd_oFTls6QP+mw0FRWKySR8byC%5lKSLLWP zLvN7L-)Kkwb1?X=htQDBBx;;-%4Lh0glXwpQ%N-Q@Q8{;15w5>xjwBl)CeRP4c1-8 zHaZ(`Q!!0Qd_vN@$fhx46@=;5VLqA`OHZbRJaGun6#EqO$BHo#rE-O-LLH9vL`P!$ z11L49#+YU5AZ3_$aKY(>KZW2&1O@xq22(67haHHS(o~&-9f_Go0|n18P-uCqFX*B( zvF@?&xVG2z0Xf^)LtaS0kWSTwVkRX`H7B+&>OBeSQus`53RuFRlp7%$4D+@L=QLkG zTSqEvoaN){PYL)6lFftirv5DY<7EvfqS{iMiLg|uY=i0uovvO-sCp%*&5073@djeP zmIEY~-Vvbv(W<4wHtNK zX-wq>Q876NxVF`1)(Du-6&y1OP%vD}1}EMj4+Y0iUD3=L$04eT#l8H+)xCeH8d>O_9 zpw*$%-+?TCh{mpzxpkuUubDu=(?}gT8ZVQ_$W?9G3>irk^ zo350Sz7h928|w2a+d&#+sWNL;rT0$T9fYq75)F&Q-N>)KwKsC_b}8C>7-sMt!@w+&Jpq{=D12j!DPTxNI7BN-+r8rT4sPyn*wuid1^j4Y4QV*B1y;9?69A{{4#_+V1whPa;}M$Y2s9-o z5s4G?btL9~w3{-|)t)_1diH$nS$co#MZ_G=2=)T$&I@gKHe*ntU0*!|^M^C{;M#&} zrk=+k7p_6{VV2>}A6{0@S|kT|_LPsdE$&0@MFE8%XHLx5o zA_;~9`&JGGL8r*X)v;xfAThOTh-QR)D&=sKRu63CM*tLeF}VX<+U_bdw6(!*=fhyD z#y+G#5G7uWIeu;m+kbB}>=7<)tM#RIrbL`HGbJb%eQSov`LJQ&{8dse<{0mZvr#c7 z&|HQzfH>~NA+z3En1in=-ny$i;}$~80kRM4W`KC5kgs#V?;Z{KtE5Cq)`e~aHm^nj zjMy!BgyuC;dbnq4@Epg@ZpmINbzW!d@C3{a7iHh;<$XJD3V_?MH{d&15q9Dw9AooF z{0&6jga7}TslrbN~ z8zA!`JVNtf{OckU*i?L?u0Wl(i8>D|eni24RKR~s!KZH(D2#;?0xZz(DD9V#KH9(< zo!d&wd%}DiEn!*ugf#m}ZI-tZ#1`4HquXkkPoW%%_-U3OTN*SbCks2wXYkk90m=O8 zE%^(!zyLM26pIf(e3l=UC!=sbvv&d;xFz z@^v8hMf?iQm*nr^^vxje)q2ac94g?DAXj6gTF4_=;$>^8uRQM zERFEY{bNwgH-RpMz_;)S&9|jz!$sS1j+!WX)b+@>-;q+^)l%sZbdkzb>}WH}*RHPn zWF<}ePI=Li{3>a_2QXcD>iYt{gSrt<{eacTQ$NIy(ELb>4;L*oVi+H*AIs+sXsOd= ztbW4Msa@^JPXPra{23mh`MES0;X@=_NcamW^-C=!W*Cx?T5(I7a7h6>fWxr?O!Zjq zT&A-TN6i?~M|hm*a>lCi3suyfrHZD@BW;dFxsuT6Pt~ib3qzJbs6m&t$Eo6=36Y=z zhL&8MCQ>KH|9xEIHi0AKD4{Zac9F8Y%P9UzI@m$?XcT{q?=p(N5qkXA(&K}crS@xj zfE*m`qx2@)V+lbe=lEC>ATL^d-Der1E2j7kI?){>J0Cs4p1S18x!u7;QyrZ zpKWD4mI#wknEypyw&SP(DA@jr@0ctHp$_=c{0)Bso4?}`ntw=LRrA?|Xb(-lv6rFF zzR$B|3+uKd?_<)Iimcp+d5n}shjw#a#;N}q1P zw?MQ9hyo}SkQ3tT<8Ii6AEiqS4P6?ZGVmK|`flLfWojGN-~DZBJRgrHO9xUfL^zXsi~9VcCZ>~h*?EE%~6zI z9duH*ZX|TzhG#}LpHM*JjUxUOv^GGwq6a(u8gMlvy*)&H5_4x^h@8(YBD_H|2Rw*E zJWn=b%0z(La_X!DPjB_K5Pu2H@&Syk(Z_m4P#CjwOfm`Efb(3EVGyIQIQX+fOwPLm zp{mT$B*7gLUF+ey5A{y{H=2G)aAC*An!Ieq4olY8yJSFYfJS|}PTNvTmxRC@sF(rk z7VkFxCl;Rq#bBYZ*tPxDzhLldoR9M8nnQ{E)}NX ztfh`P8quf@M~ojOWn|saJ8jV z4_n_L76$U-5#+kq&GfSbJF?Ex?a@?Uv~M^-N~C1(wBYG$4n%Fp>4WeH&A|d{_|}1f zjG;WS`_V%L;8F{a2d6EPf-B0Q^09M8Ar!7Chv7R`6kdTC$ry7uUIO0)9-%oxAn3Zn z24!8z-vSg;>41yM-j_$_PKw}>g5Xh#;BAFW>yR8RC>>)_;(1dy;mMIXR?74qnd9&s zB&Nf7yYw~3;~NI(&Ul381OcQ2#OC7zRObNQ29nyGs2JWwFg!^yOy5@6v<}h9g410s zPC7)L>k5bHZc?WA5ZxW$?GUvCF!#VW4ADLDKwzc-(jj8=@gedsL_1r=jHl2}5opU4 zT6#V;Tf2U$)IZJER|A$?9@*i0%a`6Az7M{m!}xcJRx_vLH@ew}M`-%-uQOn=sdzVe z$>#pE0-FKt*BR2U<=QW~D0KhnLp1bm<1r|mN!rfvuz-pN$9+iN^&a;#@g3uSAgWZ1 zS%JSW=4as%nzN;h`=uHgYgtFp7G%Iq#x#@ts&;v5-?VI7I|BFXox_NWS& z+up4d+MjD_|6R-S-ph z+o%6%YDJ{~j!21A`YyfuXU;&#BQzIFZ52{%D84W~3{_$$E4Rgvm`fDdO9k1> z6xsAXfLJs{j@vI64A)u=e*xhxyYJ?vk`YKe!jl8~=BAFXBr4u*v)vWR?(|=`X&qc& zDopy>*=&i4qsjz>`4r!P;8$&l7K0M1_{g>S{`Ko%t&n6zfS7O%``kvoEttIQeeg96^1T+M7O(4 zfdh*QEw}a-SwNNSH-4E`lccxNH?Y(r%tMcdR3cAxaU5 zU`T!*B5jl+56~j%M?)O1(TF9?^LoW@UTG83qf>-`wfGJ&K^DzI2%0J(zz}D#U|CEc zz-S=JSpn9cMiu$a)Ha2~;}U|-JP0X7yoo$ca1v1kp}@ABp&V zGb^U{p`MHZA&kXUc!cI^!GE}DyGQEFSWv`20K>uEU1+Y+QarWKUulm~Hgl_Rt$c`e z-#id+^7qc*9Ns*LKaa@p%zbr4jxAE-8i0NuTRP4%)DJE-!R@b)bp}4xc>H30-$lL+>lQVCN&Z3x-<4mW!+^o!}&ygtV|)J3$ZoK3x@+rE*H*1 z+klE#;!2BXU_|{Qa!=-wth1bAg)*?fIb{I=bZG$0G8;QR=dp_uG6B(1wkk^)1{S@M z8HvR#f;5pq#4GA0rn#sQHbN(>c8&(y3RSE@lm1N7o{F5F!cnsjpaB@uTUR!rS7i58&m;IKL#p=k)IhKrVxc5T13tVHd}^r z9EKE~7(*3vy&{$li9Nxoif*c$h_(WU`n<6xWhf3oQ zvyC&1v==?i!%@iASH+-sIbcvXxPjHj4uy(GrBS>jFev5`cwJnFGB*~lz`yBZ0lj0K z#tug{i_#K)@ z6PNsOQLqJWkCDG+w9RAryEsNL#LcH?BU+>)v$9A^5af+~rn)0*Zo)?l+2imC&ExT} zv%0f!@PB@!cr6hW9XpkV(y}Cp@=uWRPt@}IHW~@2e@+8@k`#Ng7VFdipCTV(jBB2X zH~BL}1AH2P9xEDPDq`fPOATs(&%m$HJX8K2PWJ(?H8}~`$UuL9)}g1+l;6;eS{1@) z5%S6+k&7#Y&lXrQY^*}qZ2dW`ky=<|&qW;&?0I;E=K0dZaM5DGJ~U;_3#7;kwMcpj zq#kuA>@G#zzyLkN1_s=M1>MFjB~D+{v~P>^L30a|1H*pc7YwpvNb-+0&I}_sa5ZyH(ZK}Dc2fX4;B;mfhz&wiVE~rQd;uOR zcDb`A%Zf=%S76Hrj`5|EH~~qRQ>Kya!7%>>-8!%?23{Y`p!!=4G-jHHQgpdm6{ofp zBP&=Pp0paKqhz5K31J>CCk(=4DcJSY}{HQ8dnhhXDKZK{D%amO3xDbr`?lMxB!B74p6vF@?d&{z`lYi}FZ@ ztYTh;zk$fB@d(W=Qdy0cY)0qzm(i}A!M_ZZA`aPSIm^68yYyP=((ANK>ev-A;J!L5 znuBd~!o6NP@dn$86FJyjCk}`HjZ&)j(7y@aG4wo!?gqoW8Q;MQZ^0upZxvw53PeI# zA<7N+ECAUzC#!jzcH@7f8*kTcr1xEXqak;O?{^5|@3e?N7K`g;&Gm|T^{w9$MHeGj z)b^~#X@3W9Q7FM&01<721l$rqLu>|qZFcDWO$=cC|LvUzoSbKI|83mQwrp%nHLwU{ zpM-8D8~cRMRhI2o$SWCJi`RfSukKd2x7xcsp50TyEF~nw{u5G2NC+e(B!mEIgp!03 zdhaFlUP3RShyMTmW}dg~?wu^ja)a|nzUSTded;{(%ri63JTn{-MRT@9C!F|EZJQcl zC~u=Cxn`o?!vCyliavbk#5Torpurg^Dx$gM6zvvlux&`TdQzQf&EuAby&%u%(=#*k9g*k}vy7tvHqKNck)Dd!Iov&#pH4}?5U@`x47(lO3Nu4%%}U__ z0PMue)pVJqG`faad4N*Y)7x<+Rvg+Q`#AOyh9S32jPtZJ&swvF%?O9?tM#;V zc`ZPkb`B3wJ1C}IP>}p+f?zc2OTdv+U|5&PH`L)SsWdiu3vH7Hy=7}cUGTdZsKuoQ zl4dd*aA46XTQmof#0K^^J3U})^$UtCt)G0-CdXmlT*npvnVLWKL93l`c8_kk?y9#K zEwW0>oVS_Ca>;aOqBT9c&^Gu=!_t0|v%a(?-3DJ}IZBm{5R8L}$Kln~3$c0)NjLnL zH8Ogz8)0c`F~(!V*IHAri%p5OA6QJH!mqas{UGt0v;n_??@(cx(Df|E@J2o`qBoIr z!<(%ZC%SQQ-Y-s6-oEg3GFC_4>?h%9LJdQ9^xATlFgf3> zt#DRw8@lI-gbk2HEUrvu17pS^emOUyV%t~!If$mu0DqRv^H#>PXI_FRW;H&K7_amy!dFX*#Tc2-*CeL4QZks3eTzKIs z2pCtLxDKWWTVsU{W<%InrPc=jgW6hH4r^=0SYb#H zid@B^pZV??j%mB-AcUAM)}IyDZZ}2NP3XnXVT!bQf61oI&^7!I&*h`E*&twtFY~LK z)5&Ld>A%94MvMgiRi3-yYy4#ouk4`K+jVyLd1`NkdA-diRWquE7ten#h*SD?O-4SV zGrte<QLD{S&FZWzoQ`b6Ke)FE>nc59)ILce zBtx~NTd1_K;*{Qp$V`*ElIX^wbWt9%hh=^mxnMdp)L;MwoY-46ZuvdvhQz${r)sQp zCn(6+%`C*zYp`e-2WdTbXNT4;@IO{GVNL4TT$fT;Mb8HU0!m9K=Qc}XQFuk8kl^UBABJ15Q|zK=6~FPbI8>NxVE`*j zE90*_yX5#Q^@NbHMi#`VpAY`7q0Jz7(oDIN?^%vgWhKO639-akYDzTA35&51VukMm zHrDSCNV?&N2E)-M7z%Sa1>H9ovYUyvMUCc<43a;NkksMQ!i!f-%>P-geysNDq}Kci z-`Ud?wP$f9pM|GWxEKk`awD(IxqPUE9UQ$#1 z4%0SCWJXSop1AfTbvP$MG{nJ`!hxL5=`dahQ(On(&`kGDhU2v zo^O7Vy5-DL5_n?7VD^n1X3;I89@E2kPABb;0t{-y&7?B#y7gLHs~7`F$*O@xuU6w>4x@Zvd7zBAj_Rbcp5yvqLv^Bo-%1zpS%#TY??&Pt;9V zpu~}ezRvim8lqj?gXF~mGk*Xna}s{Q%faR3VbyyQmWC`p&Jd`dwq!Eh@qD*y2+IuL zPFTV>N17#k+Xs9Tjf%!-W`J~}Vb1`vm4Zo_ceSsjN{xLef9iUx(Xwz7EwVM9OwtW^ zv*t%{yXK+lT2zs*ImJ40_t=TOGX(drT>WtL>crRFlkbZ&1oz@AqrNu@J{+tnX9(1V zJVWq&Sp6l+4pqH_Q}%GG&**(^M(^h{T3MRCJI%iAWB}$a(dFFVX0i}x@`I93q-L0( z^>}bF8IyQ<)d`?k3+d1g=U=IZ#;YV;xht~Fua}?jVcZJiVoVP1)1;e`fs(UrSkOd= zTV_zTir{%L6vQXv3L*Lqekiy3Jm#GgHc|iK20hLVDT{GhnU^oo5WP-VGFOX3{`$2L z53m9E)3x=b-KiF0x#cKT9b8;;_wrhD-J z0q5l;L>#v|oNlVoJUCx2aNY@*PPoEHxWPvFFdt#%&N`YDF%o*a(S~(p9M*T4q%B7B z7F0PorR7w^Z(O6Rx&Hd}P#nsbw-J}}N~G5O{>VRc!tz)w++yK6uDa@Q%dVQ z{aol;h&YxE9{r19ed&oQaol7%{DO=i7B=&Og>V%~H$2?Fj+!D`Uje%S9m(3&mgkz7 zXYX?77R%M&6R%DbuFUtv<<3X&l}=qtLc~m~%2%hlkYAlAYjqAzZ@A7Yc%)VED6gQh zNao%_KH7?GjYZrOXbx9IavozJ7a!X=-x-@cFQp~J^}J+ART5%XS`9uVHJBgLIt}TT zVq}=`<|eJVnm6Y`CvR!hz2Mqz4NS!boJRL71_7*YpBD$%G~XkQ&Xo-fUIVfnB;C-o zIviwbG!HVlU(6O=nDKJ6R<7mcD!qAn2Qg3iS8)i8o(SbP|5zB3HrOi$_1 z;R6GiCn55q)#3wD!})=zXb*`9yS(UbE4s&vS_?hddWZ8k%X~x3ya4<0c>A>YK)QTq zApA}C%hSBYG&GXxJ_-`-(ds+&0&M@&>MH1*Yj9L{42 zrikpa7!%>GX$Zc=!Iqy7#Bvy~=Ihk8B#E^MPkt zhyE;fNDi0#F*W=-A7i;brvuMYu|cN;f5Gd#(*bR(Ddr!jvjLEwd4IO5j?M<2!*e(M zrTT!g0qZ50^H=uUFef}$&+cqMed={KppmP}zgFsdf7;3LH@pO!o=3uMX#OU|Q;j+{ z<(&*@gz1V7f9HjtZ-xKf3mb2dW=W?3VwarxzQD5oL(IO58f6GQ+uB8J$Cl0|If@Ki zI5z^L$O(w~5SSg1G+zS6LP-|}r)Rf^YUae=T!c+16jKx0W)~r=_y)tSMQ4$?nV+mp zOt)ogzaW>Io+ZA}I@Z4;v$Mn(@!if6Uu@&}$J>7#;h)r{wG9C_e^B+$*0q6=l%8rB z_Akm^s@#t75C2LRK)#od5W&!TJKBhY5p=;n`)A;OspWc^=c-%*+FYxB&C$f;Y1jr7 zZF0;25WR9+8X`M>CWb?3*YP?fwGnut-L=+i*DeY#r&8e8ugHCcwKWL8o6_y+-&L@5 za69uK)Co}jlcXD7X$>b=4FmH_#dLRdE2Ldiax?KcWC z2Vk@PbR$%6QiY}8Xt0Ji0|SV{TS&U$tpaD=nLeRj51D+MWqG@2smRRg3WN#2L6peX zQI7=cKY~$^dtY13BnqVuOIl1m%AZW(KfxX?F=Jb8qG}P0_OM0EWY-+7*;+ucFVO)a?!JG?Vlfrnuu0azI=t3}J+#L1i%?YL8{PLG zO78>u*ivJ$78Fc7e{_uPR#VvtM<&uJa1J`NXqN4oeq@?N3Sy6lf=%l4v2AKDb(oR$ zMw2rk3+Fcr2|MqwDH+^No|*0@@3b7H%IOf0eVerKE{cE`?K2+>lmBPPS$p>aD4&KkY^km8c*G9 z@f@!yn=EAZ=ua4A`l-bF(z8>V_esl9s@(5pVHZ9{R*1%@NxI=PR&I13 z%F!)NQ>1a9wbGx9rA2A?ZBC@C`Mj0tAB|Tpn)e01L-UqXsd2ZFbzXRy!xzcTaK1#+ z4gX_RI}KD9^EB{3sP9gS65-1}$gkKSzv_dm+=&O2B2z*EzGfr)dK}p>+ZES}bQ?-5 zD`l>nBKV>aA;4lA zBY%}U1a#^WtEA*ay*9Cfe#bbuDT@@o0niqp8Q(Nm_OG(_rRSzJ<6A0-ug4`|&+ap@ zzYWZwHs2xXhW|AXk2c~A2!~CEFg?q6Ez9>ji_zD7tQ(y#PqwfgNWfhM$V!P_E^*+&w{KRto)N@rn0+#GWCvx!? zi`zNOoqENhC*tO8=aMR(rYCBb?T&Fg$HvUTrl~RVg8kJNsrf*(D7)k`tTR@)*3z5; zW%cU9x=1|C|63{&xjPW8Ors(e&Op8+yryDu^?p4Y`S6NjA{CjZIXbw2QY5{^Zz>na z$p*W_F}$b(1)qb~Ti2|#H*epVoipYxola(=F_xi!(_7U9Mn0Woe~YjsOd zLb@j{{XX5(p_%$ydY61mpwSk)!kKpfOQf>I&AgCDtc8?~m}E2+cAyweqfvrx)G_9 zR8m2fPUe9tV3vKf5i3;Z@~48Q*yn-TN-wjz?ylUW10BOXC=Jx^Nzx7XvWC)rsB=Aw z@7|W{KAx*`Id^}zfTb%Pvk8rkoRmV!WEpwhK=ep`r<%D+bdhQ+;WE%X)aGZ*K?UVK zP`tDs9+@YyPQ!Usa@2QVQZuC0lF2DzcCc`FMJ!iJOv_CNaP&to1``A>I3_hGc^{ z|B95j-PdyDj8E^!3sCv~B;8Q3uRX@6!rsit=K+>&dCW#~NP@>w96iw9_cy<`p*o~E zI!&n?`8alk2l0m1PbcYyGx(cqVQPp~gpaG#A@~?8XKA(c9>grImW-0^eYJ#PN3|7( zYAYSpDoZ#uz^W}#;N0%GcbtNaaq=juuagPa3vcpZ!>?5lzZ9v5y(V!_&#qyY7UHrU z@a~;m8r8`LxnKi2(Z&4s=>U^#+pAxlNJSO-zA{D(4_&f})i!5bvMzQ-cN+4gPwN&> zHQj^Z&#)`wHXB96MsyT?vbK}(l(7Ei`99po$ft27QH?1QEu8;cbx(97;_WI}3fnPE zP4w*OTfT7|uqXrp#NYA+#qbeX7_Jqkirx|$selQvqPXH*OO8I0j$$Fa3qPQIP&5_= zm}P7Ah<+)bqEmPSnU2wC5}RJM!`Wdt0i@;Z)+LO{BZ)1s3nb2#NKWAp3rLwr0(7vW z;v`D^Ry?P|nXT)D#kaYKFI?+#Hr3(W-r#M#0gxn{B7KS{**=eB%i0hOuq^XvK)y`H zCBZmJ*g{LDk(iSb*k?*=M$FkrZjySp{KnnEIBmNlhHU-YZf40>H8$is`t4#zu%f6N>_cl3lF&Y^jLN-{$vq`$)94j+=Gi9L5LiKnQ zI%*}?#*&LhRd}dn=%=j85Re@dcH>x^pp;l@&OQBM$!$J zTP+R(HJk^*S9MCUv|0T|Y*yj794oFctk~dKQCY$O9f`5m|7Nf&PKV)-6IJxX3>!8^ zY&aVJcpbNJw`5#ebl#155G<(_FDOIM1WPdkCp?+>aYId|uuFRgpd_pYl6N`o>n#v|xSj?-MsBR$=gMt#7b_muCZkup~xTTSO=WJ~^ z_DG!?++f=-R){+_ml6}xbJz?~G5jlWqFohk?i%15)8kBB@#)>Q5Z&PwjLpqBBTJcF zc*X_8Ty+{po9&uHz0)^m<#RkN->Al4r@1hV5Yz4YBote1LdAR0A?21+b#b9>JPR6E zy)e9sh0St}k3P@`MhzB~N>$YGSIdQGSZ90+E5|}r6g#bJEN^Z$HCUNaD4@37-V9{O z%)ok-!tQC}N<)+W4QYMpjj2AXWI0L|@CZZ-oA}8_w3(zEuCi~V@f+0(_aam9aLaLZ z%&~VH&}%GLe=oc`aRyuX&bGLS4QQFKbmL8a?Sx}j=S zI4Y^hJSsgwsC2uMn6S>Og)#{7h|Q!;|<$ zsV9?k!*BCfCOr8Z>0lD;&8Jw_--%ftPi4tXcU=pyyQdig27lAkZBz`#=BK36;^1w1 zyZQbX3q(j}^l_Z(neuSnecZu8>1K%ss8osm)2gA&q`w$`myXcK{(Fc|wf^;ka((IT z>2CjfDp;!A?gO}yelP zi$MN|dOXe|kiR>H!XH@)MIirUp1R=~_ItE)KJ$77GiN~rMxqn1{JiRzHk~$OpQC!*ei|I z;A*POzpyON_AHgtQ7dfTXi@<8t0e;LP#P~)NAHV5%Rs;~!(RRHQ(8AI?JJT(saJn& z>fIQ27Kd;0$L%#1F})P~J&oQQ?pPXN8Q8er>RssaXQXB4e+ddYpq4^g7eP%N$wIUF zv9>F>se}pRqWD;0eJe~>CA9c0;26AvO7VP@txXe07@m57&bhs3cET0SnY-{}cn%=z zonv$M`FqArvl5cH>dh9XJbY`<&q*{lQJiI<2#XT!Ycs|0cYtvL41c~s zcM!urm}2K++8_G@y?*;+zQ2Gpv7+WqGk@sk|V^mAL<% z0lq}oAzK?XHmGV8FK4c%kVU5W;Igkg^JGkmd2bt$_%vevG*G9EYzwXGB=$%h`~g`6 zKoLsWO@XTBKm$)2QoXE-{(Zy=d6@8#8DcKr_p^PyPT_J}q>;~mv_T9a*GE$1`X|d# zsyywEHO%nO^o!~G7m{xHSL@{H9j%i9T)4s^dvtR166@{1#op=w$(`IRG+p7PWQ#RK zo9Qdi7KyQWnJO4`ck^;y=iS}NY25-fAE@ISZ~~>#E7VAIeDm)-cf)_EH#okr{?fbu zwBLqP;gx!J$2aO-uj3m*Lsh;?X~}%-EzsTYYCbd5uOT6xIe!!BNzJn=v9-#(z+n?Q zq)7hPTK?C0{))X#=L7jdBF4jEMPF~(-r(5=x!gC}hui`QZ{kgT*tpy`>v5TJxt~ZE z%v-F4xZJn$)D3U5-=lWza8qk`#IDPauv*c(LJ>HCXFGszV>84ABD`I7u5GAWd0zG% zR!goQk(bTdeWyzJ?Z$m*=3V3lNbe@$V!Bm6+K6qd-x;-guVs0kXQ_MzK(1@*1kOY( zZQ_yiFb0_kB+M%+=%#xMh!)qn8E1|H*zKT)rZ7y5G0YCbnN&GGbINFOhf}}|t(0ZM zN?DfhZlV@s?V{5>H=;JjF%W+mvt|+#QwVN!HY6?j4%>ob6H=u|lL&3XDCW1%H)W*F zPMvs9s}ZjyG*KdpRC8Zm&ek4`2YDg)t7TU3SSxVfVa6*ex+ugwKT+p}Q&Q zj61PHreL@5$P=|ml077SwHr&8?yfaNGvcCrd@A3O;k zqzj<-he&W%SY*?sNx01>Azgfl zM)9*Y8=s4_aS=&TlP!Tb!%@HG^>1io^HyfF<#Vx1zyPrGi zNFXfXsLm0 z8=TW-#h#!Sx~PtiKDuh}hKOYrUHIrYx;@uKTUM2YAx4UrV^7uWhY2Av9+bH44*u-; zl#aTizZrAvW8VIzkWv(WHQPoP+9f`3(CsH;>q}oqcZn}pj#8x!9lIUiAHGQYkj*cV z;M>7EGkSY<1{4)iW_E!Vi3~KeWOA$Ol`wQx7S{_nZ*+V;kQ8`S1pX zu%Fn696<>`vWJg$*BRxxHGg^TS^2$1o4-v$p*=ej{Q0R-EPuNQ&jwwRIxEgep zy+qp9=zKNq5ONrScGeW7{byj3bJ{J$8Ob{xk3?K+7l&Mt8a143Ic5kh=dIC3U5!l2 zmI)13p^cxBNlq~)rRFsoGMV_t8)U5sZ0<9A^K`3YjwIyBO2~vN9VKvN$H7Q-zKNOB z)GP)=NN0@JcSM}twdY#+Mq+|jTL0$e?5d)oVX|@3y!Ja}JVY%uXag2VqNfh8$OeFj zs#^oHKB5tcS+$)qsiFf`Dqb}7n*fQQJpo;3B-0(-BhV*zx@|C*NY@MWZ8g-t*7K;< z8$yD$U|Z@xXDrzvn6n3txy(UcUnq5RVPcPbc;Ad8@Yq=N_&pT)5Sx#YI6pLe{c>&U zIixqy?IDTw<}$JQ zI0M`95o{!fqzhb<^D_I;kDp$NxQP?^4oSwt0D%cOm7JRkC-REjG;nu=-8~}g?g5%Q z*FQj=!#&9pi}!K<_fqLW&i~%L&U5~9uHRqnfpY(le-_t$)I#L`PvyBA?yIiAzgTBk zp7*ogwmifA_3Yfgy4K763l6HXptMw3sITDxd}HA*C*kroe-jBnZ4XKSvawxW45xXi z2U)4py_DJ5+J5K6CdZSWVfltV-yl!A!an5aO<2jB`U>MoAFRg{j3@nWx<9V665>fm zcRBoi0B#-HhD1zE7`y1`VP(yFE$#@t{2mK9)k5u!f&uan z*+2~2>(ksYyE^yUiDAweVCfG)7o7sk>OOY;EG9(0j?>+i7FBb>gN@63;^{4&smb-bl> zmyi&X&Z_WjNDcOFL$YYxA5e!&z4FVf^2@#Q%Kp}pf#O|<*=6D1vg)pg)hTpS-<%2> z8|?Gq(0CZ%frf$%IW!C(!bV;Ljw?yJp=5P9IMk?v<3sd<XCVqW!~(W)3ZLG zzC`nPmF0PO%<~NP^DXRQxt1NfjU9={LaSt^A&-l=z(7CPQluYS3yRaD(=Maw*;FPq za3F*TrY&-y`gAP~nGbGr@`}txU0g0k%HUMSg;RN_tWC^kUR|j$69@3nft(ecVk5ew z)p{5B8HK^Db2MmocO}`5$SkL?jNhA1Bp>x2$04)0t&FmXDGS;8d&Lqvn~J^H?T&bD zTa66GE7OcBG7NcWWZlq}aosMjO%}t|OwR(8;2N8?epFgt`e8~5wy0pKvNWxC$Z0Jz zJ1o;jkZ_m8CUdkA=UVGB+kh0FrW>yFER{#~tWp!h9YOIJptEK)405)W$1CkXz|6XN3`sYP+pLT>;-qP%Wb5X7%To0$ zl@08v{kxkj1CY;5FIsbPJBuhZ7;Q9-TRRrEQR@O&GGUDkV#%*kESa<%CA-wIU)>2c zN;2^6B;7D&)r{_cHFR2VfmL`OTzB0nn~s$&8mh5j8TyCiHHnGa!FNz!_vzQ?BeaGl zAL#Q8NjJ<|EzY>8VPjn4eR^>`5GhPP3-wzioykj+4*L3XsEw@qq?&?WWH-J-b4nm0RC$; zTYf+>YQLhtYU-;^!4pyCWm!AaeuL#wgdmTnZH=90FXa@}<(y5Jah(IX7w6cqA=wm! zd7d*Tu{-&-u#?zbDwBAL-OZ0~*rQimFXOgedkV?4zr&^ZZ^DIdiNju%?`h$tqr-efKHQ;+qf6Aw$gLH<7#Oe1C zM<$vqN9s<=m{pMc8MaC;w60s!fOc{FwCwpdv~gO_CH#rn`FR)?t@{_^1zdK6%^DBJ zja`mMr`$NY-dap-R0|W!KeDNGV)@5BXTX}MIoZv3k9B^xihZv4zuc{W+KIaOBk z+qp+})yx+52UDP3(6c$lUO3V36wx8HYs1UWT65+(BWuncIdkonGe^hPtl?jA&6-Cp zU$G*cl057C_XZ57<}ctmqvrp>uZ5}k3;B{z^B3{l4KL=esQJ4A>Fo%%TLWamnLe8M zj~eX((8M#0CjOHuEdAPnD*Q9!VkQ0y2^XXUqDWbUB0ZGlC6?viJWJ)lZ~$(T33*BG z$}gn#O@f$6?VD)2GqRI8G@5H7<>vC3nm>ws)sV2o6K>fQqF6>*I~ee z_oP`JDYfUfwejZ(?~bBcy+w8AMf%ljW{qPevOUWi1`XYu>Dsn&nRI7$+N4~&Y)T_= zpHiDgEs3#rz0S&u;ibSWUCNmt@G=AEAaz}pQrDNOU}*{7cCet!z5535R{%Ef`rk>o zduCAP?wMe@wjoS5)V90!|7lrX=~*fdl9^oM(bTXrMkIF&FGEl;C~^E>Ev(dqrdce$ zRz`PM=xDu*8NNF%gPvU6;h3n|nw>IlRd#cI8X>^U)-adm*8Sib89c>N42g)6SdJrq z=Fm8v->jTeWY+0sZDk&jlVetk=H)9g$(OW_Y?k_*S8sgx^Yz6~dApBor^;x*wAyKL zD2AFmU;xW!v@d9HhzGZ^$Zl1vj3;(35AE ztdnlqDUo^A-NXgydSN4?U)3&bn-w56V565o(IKCCpvS>3_oJZguvf&xIsZ?2Nc7W1nNhXxn(nshP0+H$z6bHA`GyoQqC^M8?a z!)vV?S9R`JHFR3&o}E^|&gy%8tWQVI89qzL_6GaXKP0b3s;f8h9qNSL=^@EF2yfyY zU41i2H@w9va1Ey#W8LMw-alR3TwzNZzD}gHfA((Ebras|y?>ka{_WoT${nto0~7fU z>+d^be{CX@C9_f!`7Zmi_(Z;&?{OlNa^XF^Vim3qP<#X%b6i zNb