From 22bb6dea1caf6692aca693b63dddbb29703a29ec Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Wed, 8 Jul 2015 10:39:50 +0000 Subject: [PATCH] Merge prism-hoaf branch back into trunk. git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@10231 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/.classpath | 1 + .../hoa-ltl2dstar-with-ltl2ba-for-prism | 23 + .../hoa-ltl2dstar-with-ltl2tgba-for-prism | 25 + .../hoa-ltl2dstar-with-ltl3ba-for-prism | 36 ++ prism/etc/scripts/hoa-ltl3dra-dra-for-prism | 30 + prism/etc/scripts/hoa-ltl3dra-tgdra-for-prism | 30 + .../etc/scripts/hoa-rabinizer3-dgra-for-prism | 17 + .../etc/scripts/hoa-rabinizer3-dra-for-prism | 17 + .../etc/scripts/hoa-rabinizer3-tdra-for-prism | 17 + .../scripts/hoa-rabinizer3-tgdra-for-prism | 17 + prism/lib/jhoafparser-1.1.0-rc3.jar | Bin 0 -> 266110 bytes prism/src/acceptance/AcceptanceGenRabin.java | 293 ++++++++++ .../src/acceptance/AcceptanceGenRabinDD.java | 226 ++++++++ prism/src/acceptance/AcceptanceGeneric.java | 275 +++++++++ prism/src/acceptance/AcceptanceGenericDD.java | 206 +++++++ prism/src/acceptance/AcceptanceOmega.java | 5 + prism/src/acceptance/AcceptanceRabin.java | 28 + prism/src/acceptance/AcceptanceRabinDD.java | 6 +- prism/src/acceptance/AcceptanceReach.java | 8 +- prism/src/acceptance/AcceptanceReachDD.java | 6 +- prism/src/acceptance/AcceptanceStreett.java | 29 + prism/src/acceptance/AcceptanceStreettDD.java | 1 + prism/src/acceptance/AcceptanceType.java | 5 +- prism/src/explicit/DTMCModelChecker.java | 3 +- prism/src/explicit/LTLModelChecker.java | 50 ++ prism/src/explicit/MDPModelChecker.java | 1 + prism/src/jltl2ba/APSet.java | 2 +- prism/src/jltl2ba/SimpleLTL.java | 240 +++++++- prism/src/jltl2dstar/APMonom.java | 5 +- prism/src/prism/DA.java | 60 ++ prism/src/prism/HOAF2DA.java | 548 ++++++++++++++++++ prism/src/prism/LTL2DA.java | 215 ++++++- prism/src/prism/LTLModelChecker.java | 58 ++ prism/src/prism/NondetModelChecker.java | 1 + prism/src/prism/PrismSettings.java | 47 ++ prism/src/prism/ProbModelChecker.java | 3 +- 36 files changed, 2515 insertions(+), 19 deletions(-) create mode 100755 prism/etc/scripts/hoa-ltl2dstar-with-ltl2ba-for-prism create mode 100755 prism/etc/scripts/hoa-ltl2dstar-with-ltl2tgba-for-prism create mode 100755 prism/etc/scripts/hoa-ltl2dstar-with-ltl3ba-for-prism create mode 100755 prism/etc/scripts/hoa-ltl3dra-dra-for-prism create mode 100644 prism/etc/scripts/hoa-ltl3dra-tgdra-for-prism create mode 100755 prism/etc/scripts/hoa-rabinizer3-dgra-for-prism create mode 100755 prism/etc/scripts/hoa-rabinizer3-dra-for-prism create mode 100644 prism/etc/scripts/hoa-rabinizer3-tdra-for-prism create mode 100644 prism/etc/scripts/hoa-rabinizer3-tgdra-for-prism create mode 100644 prism/lib/jhoafparser-1.1.0-rc3.jar create mode 100644 prism/src/acceptance/AcceptanceGenRabin.java create mode 100644 prism/src/acceptance/AcceptanceGenRabinDD.java create mode 100644 prism/src/acceptance/AcceptanceGeneric.java create mode 100644 prism/src/acceptance/AcceptanceGenericDD.java create mode 100644 prism/src/prism/HOAF2DA.java diff --git a/prism/.classpath b/prism/.classpath index a02649b1..ec6c29c5 100644 --- a/prism/.classpath +++ b/prism/.classpath @@ -5,6 +5,7 @@ + diff --git a/prism/etc/scripts/hoa-ltl2dstar-with-ltl2ba-for-prism b/prism/etc/scripts/hoa-ltl2dstar-with-ltl2ba-for-prism new file mode 100755 index 00000000..b81389a2 --- /dev/null +++ b/prism/etc/scripts/hoa-ltl2dstar-with-ltl2ba-for-prism @@ -0,0 +1,23 @@ +#! /bin/bash + +# Interface wrapper for calling ltl2dstar with ltl2ba as the LTL->NBA tool +# Invoke from PRISM with +# -ltl2datool hoa-ltl2dstar-with-ltl2ba-for-prism -ltl2dasyntax lbt +# +# Expects ltl2dstar and ltl2ba executables on the PATH, otherwise +# specify their location using +# export LTL2DSTAR=path/to/ltl2dstar +# export LTL2BA=path/to/ltl2ba + + +# Take ltl2dstar executable from the LTL2DSTAR environment variable +# Otherwise, default to "ltl2dstar", which will search the PATH +LTL2DSTAR_BIN=${LTL2DSTAR-ltl2dstar} + +# Take the ltl2ba executable from the LTL2BA environment variable +# Otherwise, default to "ltl2ba", which will search the PATH +LTL2BA_BIN=${LTL2BA-ltl2ba} + +# --output=automaton = we want the automaton +# --output-format=hoa = ... in HOA +$LTL2DSTAR_BIN --output=automaton --output-format=hoa "--ltl2nba=spin:$LTL2BA_BIN" "$@" diff --git a/prism/etc/scripts/hoa-ltl2dstar-with-ltl2tgba-for-prism b/prism/etc/scripts/hoa-ltl2dstar-with-ltl2tgba-for-prism new file mode 100755 index 00000000..753ba8c0 --- /dev/null +++ b/prism/etc/scripts/hoa-ltl2dstar-with-ltl2tgba-for-prism @@ -0,0 +1,25 @@ +#! /bin/bash + +# Interface wrapper for calling ltl2dstar with Spot's ltl2tgba as the LTL->NBA tool +# Invoke from PRISM with +# -ltl2datool hoa-ltl2dstar-with-ltl2tgba-for-prism -ltl2dasyntax lbt +# +# Expects ltl2dstar and ltl2tgba executables on the PATH, otherwise +# specify their location using +# export LTL2DSTAR=path/to/ltl2dstar +# export LTL2TGBA=path/to/ltl2tgba + + +# Take ltl2dstar executable from the LTL2DSTAR environment variable +# Otherwise, default to "ltl2dstar", which will search the PATH +LTL2DSTAR_BIN=${LTL2DSTAR-ltl2dstar} + +# Take the ltl2tgba executable from the LTL2TGBA environment variable +# Otherwise, default to "ltl2tgba", which will search the PATH +LTL2TGBA_BIN=${LTL2TGBA-ltl2tgba} + +# --output=automaton = we want the automaton +# --output-format=hoa = ... in HOA +# --ltl2nba = with ltl2tgba as LTL->NBA +# -s -B = as Spin neverclaim, NBA output +$LTL2DSTAR_BIN --output=automaton --output-format=hoa "--ltl2nba=spin:${LTL2TGBA_BIN}@-s -B" "$@" diff --git a/prism/etc/scripts/hoa-ltl2dstar-with-ltl3ba-for-prism b/prism/etc/scripts/hoa-ltl2dstar-with-ltl3ba-for-prism new file mode 100755 index 00000000..fcb8f12f --- /dev/null +++ b/prism/etc/scripts/hoa-ltl2dstar-with-ltl3ba-for-prism @@ -0,0 +1,36 @@ +#! /bin/bash + +# Interface wrapper for calling ltl2dstar with ltl3ba as the LTL->NBA tool +# Invoke from PRISM with +# -ltl2datool hoa-ltl2dstar-with-ltl3ba-for-prism -ltl2dasyntax lbt +# +# Expects ltl2dstar and ltl3ba executables on the PATH, otherwise +# specify their location using +# export LTL2DSTAR=path/to/ltl2dstar +# export LTL3BA=path/to/ltl3ba +# +# If ltl3ba is not statically compiled, you can specify the path +# to the Buddy library using +# export BUDDY_LIB=path/to/library-dir + +# Take ltl2dstar executable from the LTL2DSTAR environment variable +# Otherwise, default to "ltl2dstar", which will search the PATH +LTL2DSTAR_BIN=${LTL2DSTAR-ltl2dstar} + +# Take the ltl3ba executable from the LTL3BA environment variable +# Otherwise, default to "ltl3ba", which will search the PATH +LTL3BA_BIN=${LTL3BA-ltl3ba} + +# If BUDDY_LIB environment variable is set, add to appropriate path +if [ ! -z "$BUDDY_LIB" ]; then + if [ "$(uname)" == "Darwin" ]; then + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + else + export LD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + fi +fi + +# --output=automaton = we want the automaton +# --output-format=hoa = ... in HOA +# --ltl2nba = with ltl3ba as LTL->NBA +$LTL2DSTAR_BIN --output=automaton --output-format=hoa "--ltl2nba=spin:$LTL3BA_BIN" "$@" diff --git a/prism/etc/scripts/hoa-ltl3dra-dra-for-prism b/prism/etc/scripts/hoa-ltl3dra-dra-for-prism new file mode 100755 index 00000000..a9335b40 --- /dev/null +++ b/prism/etc/scripts/hoa-ltl3dra-dra-for-prism @@ -0,0 +1,30 @@ +#! /bin/bash + +# Interface wrapper for calling ltl3dra (state-based DRA) +# Invoke from PRISM with +# -ltl2datool hoa-ltl3dra-dra-for-prism -ltl2dasyntax spin +# +# Expects the ltl3dra on the PATH, otherwise +# specify its location using +# export LTL3DRA=path/to/ltl3dra +# +# Expects the dynamic buddy library to be in the library PATH, otherwise +# specify its location using +# export BUDDY_LIB=path/to/buddy-lib-dir + + +# Take ltl3dra executable from the LTL3DRA environment variable +# Otherwise, default to "ltl3dra", which will search the PATH +LTL3DRA_BIN=${LTL3DRA-ltl3dra} + +# If BUDDY_LIB environment variable is set, add to appropriate path +if [ ! -z "$BUDDY_LIB" ]; then + if [ "$(uname)" == "Darwin" ]; then + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + else + export LD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + fi +fi + +# -H3 = output deterministic state-based Rabin in HOA format +$LTL3DRA_BIN -H3 -F "$1" > "$2" diff --git a/prism/etc/scripts/hoa-ltl3dra-tgdra-for-prism b/prism/etc/scripts/hoa-ltl3dra-tgdra-for-prism new file mode 100644 index 00000000..aeb502c2 --- /dev/null +++ b/prism/etc/scripts/hoa-ltl3dra-tgdra-for-prism @@ -0,0 +1,30 @@ +#! /bin/bash + +# Interface wrapper for calling ltl3dra (transition-based DRA) +# Invoke from PRISM with +# -ltl2datool hoa-ltl3dra-tgdra-for-prism -ltl2dasyntax spin +# +# Expects the ltl3dra on the PATH, otherwise +# specify its location using +# export LTL3DRA=path/to/ltl3dra +# +# Expects the dynamic buddy library to be in the library PATH, otherwise +# specify its location using +# export BUDDY_LIB=path/to/buddy-lib-dir + + +# Take ltl3dra executable from the LTL3DRA environment variable +# Otherwise, default to "ltl3dra", which will search the PATH +LTL3DRA_BIN=${LTL3DRA-ltl3dra} + +# If BUDDY_LIB environment variable is set, add to appropriate path +if [ ! -z "$BUDDY_LIB" ]; then + if [ "$(uname)" == "Darwin" ]; then + export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + else + export LD_LIBRARY_PATH="$DYLD_LIBRARY_PATH":"$BUDDY_LIB" + fi +fi + +# -H2 = output deterministic transition-based Rabin in HOA format +$LTL3DRA_BIN -H2 -F "$1" > "$2" diff --git a/prism/etc/scripts/hoa-rabinizer3-dgra-for-prism b/prism/etc/scripts/hoa-rabinizer3-dgra-for-prism new file mode 100755 index 00000000..40db41d1 --- /dev/null +++ b/prism/etc/scripts/hoa-rabinizer3-dgra-for-prism @@ -0,0 +1,17 @@ +#! /bin/bash + +# Interface wrapper for calling Rabinizer3 (state-based DGRA) +# Invoke from PRISM with +# -ltl2datool hoa-rabinizer3-dra-for-prism -ltl2dasyntax rabinizer +# +# Expects the rabinizer.jar file of Rabinizer3 in the current directory, otherwise +# specify its location using +# export RABINIZER3=path/to/rabinizer.jar + +# Take location of the jar file from RABINIZER3 environment variable +# Otherwise, default to current directory +RABINIZER3_JAR=${RABINIZER3-./rabinizer.jar} + +# -hoa = output HOA +# -gen-states = output state-based generalized Rabin +java -jar $RABINIZER3_JAR -hoa -gen-states "$1" && mv "$1.hoa" "$2" diff --git a/prism/etc/scripts/hoa-rabinizer3-dra-for-prism b/prism/etc/scripts/hoa-rabinizer3-dra-for-prism new file mode 100755 index 00000000..b264778a --- /dev/null +++ b/prism/etc/scripts/hoa-rabinizer3-dra-for-prism @@ -0,0 +1,17 @@ +#! /bin/bash + +# Interface wrapper for calling Rabinizer3 (state-based DRA) +# Invoke from PRISM with +# -ltl2datool hoa-rabinizer3-dra-for-prism -ltl2dasyntax rabinizer +# +# Expects the rabinizer.jar file of Rabinizer3 in the current directory, otherwise +# specify its location using +# export RABINIZER3=path/to/rabinizer.jar + +# Take location of the jar file from RABINIZER3 environment variable +# Otherwise, default to current directory +RABINIZER3_JAR=${RABINIZER3-./rabinizer.jar} + +# -hoa = output HOA +# -rabin-states = output state-based DRA +java -jar $RABINIZER3_JAR -hoa -rabin-states "$1" && mv "$1.hoa" "$2" diff --git a/prism/etc/scripts/hoa-rabinizer3-tdra-for-prism b/prism/etc/scripts/hoa-rabinizer3-tdra-for-prism new file mode 100644 index 00000000..f7feb58c --- /dev/null +++ b/prism/etc/scripts/hoa-rabinizer3-tdra-for-prism @@ -0,0 +1,17 @@ +#! /bin/bash + +# Interface wrapper for calling Rabinizer3 (transition-based DRA) +# Invoke from PRISM with +# -ltl2datool hoa-rabinizer3-tdra-for-prism -ltl2dasyntax rabinizer +# +# Expects the rabinizer.jar file of Rabinizer3 in the current directory, otherwise +# specify its location using +# export RABINIZER3=path/to/rabinizer.jar + +# Take location of the jar file from RABINIZER3 environment variable +# Otherwise, default to current directory +RABINIZER3_JAR=${RABINIZER3-./rabinizer.jar} + +# -hoa = output HOA +# -rabin-edges = output transition-based Rabin +java -jar $RABINIZER3_JAR -hoa -rabin-edges "$1" && mv "$1.hoa" "$2" diff --git a/prism/etc/scripts/hoa-rabinizer3-tgdra-for-prism b/prism/etc/scripts/hoa-rabinizer3-tgdra-for-prism new file mode 100644 index 00000000..1bb8b3f8 --- /dev/null +++ b/prism/etc/scripts/hoa-rabinizer3-tgdra-for-prism @@ -0,0 +1,17 @@ +#! /bin/bash + +# Interface wrapper for calling Rabinizer3 (transition-based DGRA) +# Invoke from PRISM with +# -ltl2datool hoa-rabinizer3-tgdra-for-prism -ltl2dasyntax rabinizer +# +# Expects the rabinizer.jar file of Rabinizer3 in the current directory, otherwise +# specify its location using +# export RABINIZER3=path/to/rabinizer.jar + +# Take location of the jar file from RABINIZER3 environment variable +# Otherwise, default to current directory +RABINIZER3_JAR=${RABINIZER3-./rabinizer.jar} + +# -hoa = output HOA +# -gen-edges = output transition-based generalized Rabin +java -jar $RABINIZER3_JAR -hoa -gen-edges "$1" && mv "$1.hoa" "$2" diff --git a/prism/lib/jhoafparser-1.1.0-rc3.jar b/prism/lib/jhoafparser-1.1.0-rc3.jar new file mode 100644 index 0000000000000000000000000000000000000000..938b72e8fdc474e4a25f19aca4a78516c31e3418 GIT binary patch literal 266110 zcmaI7V~}V;v#!~;ZQHhO+qP}nwvFAkZQJ&4+ue76XXegK+=+8mME$C)h+ONloO->nFIg;22hX&hxm^L(En|w@ZT;* z`DgL}ES43NlN1wGR-uy>L!In_3T8k6*yl}fAGZj9W0n}00TU5%bfyi@V?lCuN-wpy z@AC6O7U?S{=^}_OU(cYTZ*huAaA>N##n1D6ucc0&fw2}iil8@===+(s0>ZC>CRofk z60X8lTeh@UO5UPEV+}O^|pgn}T!* zos_tudp+!80ocJ4eMPOJ;Ri3E7!ZCEm|IpL|5}i1IHTg9B&p$4M?PmPn`hL3t+_TFj*C##&AGfrbZnjBKUJ0*Ql#=1q{q= zU8u6RM4wxT#W>Vlu-9&%0>iV+<{Ha%S%WRZO_m1$aOF&C2-9~Z(91wt$`P77)z&gP z-)1sb3yMIflJn_$iCLKSTmh0u>f^iUm`gS@^lpq)Ryt8Ep*(&!w@wpYaxu%MyX%>q zFBit1A4dF``ukj276;O@2#Uso7 zd~Bvnk^0gMS3{lHDo4Nek0;yCjFulS2RlSOL9c5sTsnL!X?RT-A)vGY47Ry_6s?9T z(rCd9KmLqHM4PSyoP;?=)Dh(W=-hDl$lCx20PyiIIRAT{!T&{pjHIxroU&-CuB|gR zd(ux_Cw|~kx`ZkVvbVc)x(Bstv&cqwD(Sy(aoO2fg`GsedG8RGiB8$A@Bi(>&X7S! z>3yq|y{Rz>5G&Tl^9{7V`NMx}kAFSm!Gj?mY(*5yEi*}x{v&R zrmn7LnYhJ1vbeQKJV;{Ewip6|yrs)yF)n_0`=!rRx~4{r(MXIdwHcJ)VNWlr+q z%5~v*s-(;k%q@vNZ1m@Z6;|?rUNdV;Q#RN-i$`|_+dCIkl(YUes%rEup4i&oYn|ksYi5nDhS67VnQfx+aDz5{^y>_mujF?H z+g#mJbEVZKQ<_TaM-p>niQD_AYBKfZ`+H`76Oyb_KtFj+M2Lu4WyVNwC~DDvxIAT6 zy8f*<6FKxryvzyV)StN?JDon~fc{JV(TuzNI`0^@PR zK0+>T%&6L>O2pI@o2$%X6UfX zaAY+OF^VRXAx)DUXVEAp==k$)HI(Rl(tzS9S&ulFXS>mdXy$f z$6uh2N~AG=AdwYOA-I^Tw*>MXy{n)_4HiP`6g12ZM~w-WmoP7oT(m>R8RFcr*5f*Z zTWNAJ0SgIz^;3Y5t&v9LhME224m?hJW?_txkv ziC!Udwgdi-`YxvRa1x11#@ef)aH09DUm)L|G*K$1(^?MK)|KF+L4dRc5SV=;IYONz zD{%+W*;$~BSABq%uzgzj5JPeUnbvj*HGjrg%a(5ULFwykkyhs;L^8`Murl2ThvTHB z8dfINPXbFg9M3n3u__r?6#$h3fyimVyMx)26zOhh>`FN-D&Dr?G3Y zk-*b2)i_hDS_(Cz+$~zGIU`qeL_D=CqNx;k56$V2hq{JAKAnsK1qdFjE2kztwbXi{UuG%-JQH8s&yKpTCpm z#o)S4oT!hoBp36x4KnK9=VTmCvV9KzBwM;-NT0FEu-!shT!~yYFf#*W)3rD=gV8J{ z)0ZlwNynt6p5trvnMe4Li`IFT^iGe7BPvy+x@TJ|6GZrgEW>hZY2J4o;1k zFkqrEs8bitQhGg2nF92YqsW@{SpZiBJLr#l1XR^5$km%WQvql;lEzZwpGKS?kE>7U zjT2Ec2yUR-1Y8Jau*MRtmY_rda9sM>tp&s%h6Ih9D0AHbQ8+UlH6chuhthO?vOPA@ zrA}kRdK!uA9~~a5D|Y5>E)^pW=H5RaK<14Q7Eo~n_0S}FeFummQ8L+4{#Vs`>=#Bu zWBL=A?XF3fVPdF5z$0S88p{^Dw;Lx-9%3>V*0s_W4-$x)z8i}k&!kI$5@zTjp;8SA z2ms^|QKM-NC*EC3_=8}hbz)y+Hp7z$`7n{3$!STM8Mhk)Ko1>%kd9iUsT?tbd&id| zSvQj6Mg94Yr3~V)`VK4NB0~4D?%VfNnIU`z39GU;c?+-CybxXe z6c7UN=hKM?t^44~6CO9y$}SG}Were;k8i)#o%g9;;S z%7Sj?N|@B!h#NPN{C!mEFG0s)>hA{mLn7Pnp#-7{X1r7MB@{yfmVTi;7*vA~p1iPG z7ambgE;qNTcatiOTGS`IubPNVXaoqGtE%M&seb_c)kSe3GsSY>o;0ilc|J;2*4C}> z0u9x89PdViV_i^m*($q7nV>-fq9EcFC}`gJu~AuIaDx^(Ol+o^Kw-ck9n*|3dWXt4L6E=^8A7x(DbQO}Hw_xaf{h+|VB8l(2DXK-6 zMau&Q_$fRsDUwFesiANT3c!P~L8A3?HT5T70+DOtC`dr22yvKMqT(PM0@u7z*9}2; ztKMGM66#VW2ej=RL$4+Ylz!5oMG z&p;q2khc;$V~}q9QLqv+2y)fjbd<^2$S`m|rDD;hR0+aVr$L?JK7!~5pz4XCF&V?! z$plUWci~$Q0GMpm1qs($F11^x_1QE+`=)2ZHn5wEip_d*vv5*(aTkmxUDDRj(94qm z_pwBmN<9Wr(f$OC3zwmuy7$A+7GQn}F>`9fj8D;$^aC5{^S5jkyZ`!KZsKi5O>s=O zTGOu2H;TiJ&FFGi3*8`t)yJ%MBOpq^NGxA;F?Fj)5%=zWWUmU@i=RwnqjhnnussPW z3pl$35@Xgl30bNv-T2zv6kO6OWJG6vO-$l1n7AMr0SI?a1I2?W6(BP(U=*3fBt^kI zPHNCg=tm9Ehg6VbJ^_~jk2Y{&rGkMiyaHMdiPBA>An5;d_$x@>9Z zRd_@VTTUqjC%B}QW~8xkJe@>Fae^uU-;D7giRlNw z-Go_0n#@aSdsMBn@+40PA1wY2EFxu2g%9=`8jnHgmz|R=R^3Itja-LF3W>8r5X$MTy`uQzi0YrZ(ekP1KwXdKzh& zpJOMGlAP1nei}KUl_6~&XS%D?a}YwXYSQM?CL((G0lW~BY?vBt1r{h}Oq5p{)^{6% z$fdv%;jLisa~`*kc`{;^{_*L;Fmd^DZP1sta4Rdj&TbdVXknXSgsGEH46R3+?jTE2 zD(O7`7qCQUFUTZ9Cbg4A?sX5dCTb~v2TDv|Qi7Dgdi5M(oAN==FrED*=Cy)g4cTrj zpuDqbk;Ge?i8WY5BBP;q@J4Kq=L9>f5J~|cO{YlQ=etC0bCZI;+2HZ5ri{F%15mgp zo7GeAITo4@&<(;RR@l)CGpFfpv3CUGd5Hdl96gMd$-v&YIE^b)sCbRKps1$S?lB#0VUgOy& zYD_NOfWWd6iAWQTavJF3RKy%66WeH10TLnk4_dfzj&azQiE2Iaz3&B(WWP zDQY;!%(X#T|B8PPo>5Y6!)ZQrztE^K>=nWXdg{(&3KZl?2ew%HG9K6OFsnB=+c8@P6tbReS$@OFh-l>N%QKyV>avgb zmVrSPMttCuwoELPM6CM;i<#ZEvz(Vxa_!`9oBH8cFqe@!tNNhD_t6iG3m9{((~6c z9srMfX{U#6B4@da+(*d=cz1(qj2E&qdQx=#%e?X%St0-x%0fQ}Ovr)>g-+WtXD=8~ z_}#;AAuWW&dI%AG&15i!VaA2Yhh~@{0|8YkFL=q>=G-SRLEaiu_Cz?HltoBHS)39# zy4Xcx8~u}WKpW~QEupA80aAqOpqbQM6$&jB1n0n?=1FSs0Z5e=>Cz;SYk$}KsvnGA z5OEwTL3SRZ%rGX5G+-}fx5`jtb{5pLLRe)zOC%E{N0|$(L0OtAuRzBcJ-RNMhqxHa ze<-=Yo7A7Gw|{CGqv00i7paR5DhLTOWv52stz#2mqy{)s?D9z-N6V%1OadJ**1aNv z`A~8yQ81h@2~$Odgldh3O$lPYKk6G4$=D~rp+*MGibQt8G-=V6QvuL`a6+3kGw;BY zoE#Asp1YNT8W?>*>(hJ47DQBV2^kG777E%^pIlRGlRyc!4r9?lwD4B>z55dgbD9n$R&y(s)=%fhnP^ z@im_!DC9A}cTMyche+mA^{YqEem5;Ydhc-m1)n6MWljko2jw)r#m!>zt0@~LgA zT`UI71zSL|tYJPNI1IZg&wO}rg+6?W6S*etbmtml1*d@8GRI(jhmiw1)H6$rCRnrd zV{<2;InVv-BBiZQnqK-L!HR;6p492|tIn|EG^5!VDp^Qhl848`gFB4ld>%Q4Zp0FP z!i=!+oEI$JyQOc=-zv zhr)oaT!kXYT&Br5iXS(Ncqz6G5L!i6j zUOkO@Xv7&@W-SCyf2)+BFMakyviD+9TI)e*i@FgWsNJ!*{_uS5f{ylhN_5c0EkgI* z?iWJ}SlXftMs9i=prs~P8IT{aAoUU{ah3h4Gr4J&DN0Ck`D$m92qF%jYqEw^Mkk?e zi!I&CIN8Y;m|)5(_M04R8n^uf=}@POk>gQ94rz-z3qsox;G@4Er_~L$pONs*AC{d- z_W1w>rF<-7LlBV1)GH+1nU5po13lvdh;4mL94@cc>1l%1Mk#7c%`)yOO(}Il~k|# zmaI~(z{r4X@2q|A5S`Ht17J;?I3}%-Ew^%yXnaKy@=LPyBQ%G$Kd0v7I*ah4kUSSI z=OT(c>^Fht1)*6Qxa|I-;_tZ!I;)Vkn3FmM7$V4B#|9)qGP|qVa3}9&y`97iDR=&Pc1GkjoD2q zlh|2oPS@yJ2%e%T+IoirdJSe)cfZ^hE$eY)MX>^z#?G>pymR^_s`1^XxOA1laA8rW zz}Z@arawiLi+?i7fE=xXicu|TgBdnxV<4hFMRGouc%E364)y(A*EA-ECRP8H(&M?sFuVqIg zaJVU53Dp}01wuZwL(Ic_9(RKryv?>~e6IHcJjZHRUaw972oP-?W=YHA_H?A&s6pNs z+Isc=idV|-1d<5R+0FCcpid9>pLu`sos?|%B~X7mT8NoE?o`r-^8g~1kFhZ^5^u~cFw?Kt7bY(aGgznj}Oxy=_= zYv9Usezj@j-0dB@u|MCzgC4UvZbrfIIPqV0Ei80icoxU5XWKFGd&X_cO~$Uib{ za3aS-IFI$L1S3T|wA)lbZ9|!UUM99|wda(unL<8N}J{!^)vJGq{jYJH8zSZ;w_2-OUKj;N~ z%SOA!cXT}+=QE^_o#xeJqvg12*h-#l@PX8|-pV|&B!{gX8@7gAC?k95ZkvvHZe=PU8UweTxcm5g_|?QQ+MEGh!){ zXTg0<<~>8hn2HKX0WoFeF=kWI`gg2qAspP?_in%=9cr1XjSwn`Vtpd0PTaj)QB z;NG5Ja=4S`K*02*zw4T3#|MK;aY3chse#r!5sW#&G@DrDc8)uprlys>$d;^bV{0`F z1WFqHVBl&Jh7>!%SWC;F$D|=C0ponmTaV&W?jNgl?^Y$nO3c^xC5F;j&Ov!g&?O|1!v(r)_4@*NUEX}tzSa1 zHH@r}^tjgq#CYrRw`Atr@l$12F_gk_(RQ2*ZKgHWse$=ymLnzdJ;;u>bYUJdHq9q< zGeu6Ov8~PVFD%XxS{=f7Q}t`?H(&{zjQ9`BOVl_19$)}#?74B@4Kn~)x$R``>v@xN zvxUS_E*GKEs*Y0a{*-8S;?^;Ht+&m@SyLgu`lpPFzoY35Q|wRx9i7nmvh_#Vp5?1i zJh}-TbqO73!s1gR9cqx0s&hBo!nYQY%!S4d!89D#Z;_VqJGo@RA;UM1N@M!`?5up1?jz$D!{{PGhIlEaH_+{~uD&yI7Rf>i3`2<^{r@Ah-^iUi!k}hT*rO zqT{lnk^UCs$o$}l@&}&evYVHxYr_O&sYY_xl08*&;W=C%s!GNYMsFosSrGu+L1wbe zSBC^xeKb5(esq1o)j~~P=!A-0m+Sm>r8r)USsYtyqP9ItZ~H0MykDF5p}4P}QTyp8 zZ=B`Wge|g?*K**l;;!Y~12@HJYTq>4n$Og`VqKlD2M}Y8KxUr-@bA^iDw%n43d7-o z^>y&w2fd%36_iB9ltK_^WQwz-WC%)PTO0d%%HqyAgUE|8PI9G%nY?Rl!+V(0R#a( z4tKjsPT2b=z`tQ2-kcSq2RXI~`}h|U!sI|39`cynsPU8=6dph&*$^)g^a#!tX@^3% z_!sg{CB5$?9zH53Xg+*BUiMK?W&vmn<60r-T$U+UobUnMH`dL(QHZyCC5s-{PZI>6 zTI%4X6Apol_aABxxb?DJ@|OuJu=Yw8*i#37ov<>GJ;#0;gj|tNdijqXZkl;6py)|b z1hT>cWph8{ACawfFV)Y|Jl(`Ah`%{={LaRb6mZAcc*x$c7#{&+m-u06b!iR=WZy&d zD=K}BrhzdZZi4cmDj(Ex+2U<~t?4$xt;gSDy8{;ej|i1c+{zgvE3BM13*c@}Ab!JI zjRzNNcw_>|!LyLaO2eHWZfdJ;Z7iY{kt(mmsY5J14XSSRu2|3L+hp@ z*{aIpsp7nBIcq-vYP3LKDC>4m@|^2VHN3PyQK^keM0ZX z-UX?7_3k6R0N-$$A93LsAwG%#EA5Y}q5~sKlB`FjrPH7z7CYv|=3b>x_34NQhh*ve zhoH>928p%ce|#o~=@*tT(b{_cwi45RtV_*I8&n?7KtNl|T<>mv3Ax>GJq^1Le56OM;vAP}w5$dIG+YGQ|9= zACm9F1>(zpn}{aJl_iGD_A9xp*H*eQ&J=ZmbHgt6lG_FS9jvmcMR7qmeD4JuTo@MP zv!%PecUx266(QvRF6cw0U#gYPMI5|)qYQqJY3*~>B`6EE5Kg*qW>s=g>1zydZZKf* zLmVBn-EFoXB$A+6tR1zi^(U?tX;*a+)=S$dUCqal2?{hO-HlCGN|&nA3^8h3jJ{)- zc5?Hh`n6?`s>0swpa^=8^V?7Jc+lS$C%)Nd2r|NIhzQtW{HFI&PrG1cX$^~*ROtpc z9J|yCYy~@t@YD#it;DT`EKSMI7r0P^^f8`{*IK(jXMI2K_#m`{`$_Fkv-+c-hndZj z`N_5P2e$3@Ju_u!OIOw95$4=iC)!$T`(Ta-8n0ounTtWky|^aRy9d~2`d5Pus${LUNm90JXc-h zL@ZZlcRxvU3Zel=*3<;BEd`uVB>Pz~BEk>o8g&V%!vjilW0=}_|`PpKE2*gUVxyjb$K73u4+#%cfvpiP1LAXKE*GXsJ$yl_+;#&_;Pv(qt$ZJyxd-ic6buUcE zmP%i%FPTr0%QCDjF8Qu6d<$(8Sa&t#DV3L8mG4#2rSyi8m~O$L!we>j@aUY$IgEKQ zTYEA~F1z}}Pau3KP-~oGK~;L+DuNYpslCM|%}M;mTAn=g$iQwfHr`^Lbuxfg=O2qM zl<@-3iresU+8p~bq5aqVa6Fz5u{8;9jBb3L$s;Z0&jk5Tt;lV*a|;K2l{0ZEevfZt zsI$)9L4F)ahP}}ZD3oA%h+SqjuMe=ni?%rKDZ>m-rYl;0OD!8*l^Ud51f(a`^XQ~k zDOepW{9tu~q%Tux=%nDwAZRRV#es*)M<`gVJuJ_!h+cbTkfdC@k9aamJY>ywB9SKw z*9ULy?Y=@eQlCb&>ZJF}kn*37o~C@UrHk{I1Lm#vKA7vS`;&7=wpMuj(HFA^JFYCh z*5pio;-g7D`7vW}cUyY?n6le3;F#<<#>1D{w~n`w7z-dQ*D-&*-y=hxPlMaBrTFA< z@T}_{bMDT*@(J-=B%vGv5W5=o0u4Q z4vA!hzVhUaJ(_EQ_m9^x#f*pyX=fjt9lZz6z^HSa2Hns18$?y;&DR;#a7u&ab-mcS zv2^%k{Ru&nUnoS6?h$PomY>`B=6vFy08X)6$@PAjkL5S#UzWm=ix4TZzb@p9tj={BsgFk+Dcjf^a7jG%5(qu4g78>uRmA zBOd!Tz7&3MXLe)5E-c;{8fBT^UptxN85bYvFC$khT|GWI$rc76eFWAfai!LY8XPE) zfK*SW9;goxzU<3|<5S1KrZf%-YQ4m0Mp9`lF9K%nYw#uDN6~;&0l7Na8%HPLyu314 z_}k!IQSQcAY@HvjgIVO433StBlgJ;4W(<>K%A;{^Q~LOxTjifh^WfdY+Utnn^-1Nv z2JHg;Uob;H((C7==+G^XsmLu4wYl3*mfnzhz{NwfWj<0(eFX>&S;S}+r#0DYmLkjHPlJxXW_FFKImB5`= zsN|1J7Y8bf7S-`~yY6nc!mv&J5&`kbrJBRGh1wiSs~=tJySXJ23Z&E`#sY{3*R=UF zzG_ek+R+uQ54P{7GJQViyu4TLiUqxC4V7aKx=cFd+3r+$!h2n)VWC~mxg1Yv_EVT| zBv;p6)g1~(-SJDBTNcQbS~|nBhXlx|X8lJBA6^|_rB3x%>N%-&nVxfoolGI4Nfv8q zZh!7Sar^FccKWCf>&~OzL)G>v0mLz4zlkpYK2{KlT#s*WIo$pswhEf?5V<(acKu!=>;l+Wo3l$Rm$XyAG@0*01JVA96n1Wv{D)1N431C^yWi3X9F& z{&9e>^;EBLlP+nGPDBsSYJkMM?SY;3`aB9yUi|Ln>ESADzxk>NYD8&g-jX3pwAC_m&JNH(rIJMC>j+h9A6L@t{;+gleXTtRM`z=cb zhT9zB_bllv>wMxyyc?iRb%N+9kw3Ju-#8v=`2h41x5qAjzbrURW=A`QeNAH+7uUSL z)bH$%%)H&QmSA-`37tc+W=S35lUXwA?Dv~XA5_5FGjq~xzmgLQx7{8+*QPfp;Wy9D zguFcBj#*i!lQF`s;Ad(4rgIg2f@kYDsHRc=&PPLXyWR#;kLkS4R_Y6)C;s!2?9>7ZB?z1w+f`I^5)bB$dX~KUI!x8;%gsdp#MD`avJ; zh4uZMY3A;A`wM`ds1IZRR<%;;_hzV$#C{xz?AiSQ($5h14Dn~>i~c|85}yW~i?EnMy{`lPZn?{0G zTAoIM@i)`ilQWEyYwQy|Wc{z$vB_zwM(Qc4c?p?$d6|Rb1*pf{r>GVs$=Mm2$!Up` zqaY@f8q|pB#D^y4d!!|3r07Vc=!e#amX~IvY2-Rdfs#%R0h6YnD6m~QSwiq%Hd)Xe zln{b>cmYyJo&SOZIoVM5ye8<#t#H)#wik5oU z9m`{^N2GieT{C0w37ss9fFNN3CKqD(d!dsWcZPdRr_rPOZ#H(E-PFy^?cXEB?;-Z% z7srjLYlxw1R@F9nV z*;Aj8kd5DWKGSyX<;93M^hb9wuElWto`}K|J+_EI9qd}Yt8b*^i){jq93PB_%X5q^ z|8O7VzX9gQOiQUAu*+7Be#&}$A2Op?cSiUkpQP!?x#ld*A-5}GuEY`GwjPY9(wuqib;=51Mf1U~#xInf zsd0c(_MVN0?{dT?3;)4$fVc@Iz7T#uGsFG@%elwXaAw^3@4$gU4xMx-PHKv zO((GbVdUpG0e2C8vEt&19+e@J&W;`pO4jCFl2Q72^5o;1I?Jd%W8M}WjiG^n>w#8> z{5|Z9kvPea%jsF!3=Oi~&>NS$#3|K5yvj-3a{t^jIv z6z)+UyM^^*g$LXu-2zGqNr1V2bVF4I1W@%!<0wYf9=ufZv{Y zNcoAB-n&@H?@@lxXV2o80^Pu6ZMCLjHj7K za|&9?2h>jWx(~biQBOJ!;m@Ybqxq4#u_$7lLa{rFWX)UtSnll z`Q6{F-Ki_7#jW!Grnod7^+Ib8sjlm>tA^3pH z)`LW4#*raBJ`0@CXY`ihE221jPh`&g@aq>0B`-8SB!8g)964K*Mb@ss000#KPL=5xoLCC#%BE8Q}ToX_dKy*w5Y|lyJigk`s6`i$HRX`hgIp~EEIVaOvd=`RV8+)UiT zADbJVQ({)~IQbmVK*1T$A1xS%5tWS-x0a>>4ks~2OKGQRr!>nPA~1fn`RY@mYmLyj{seuXF=l$}NvS{|Yl!aI zX`FSp0N109eZyMdKzOJYuziz$f8ZHV z5J*EQ`34s*mX^SxZtG=Jx_-vc{uY}wmZmkOf|Qc`=aqd3T~lsp)LWlOljQ6qGt)dw z^ZV)a<@x*8{nz03hToSaN!6NL5`LeRkE=eXWfhL{i!tijOR;iS$X>Y%-(X;{?s;%9 zc;@1qwOXqdcKz8R`{@=sg;4Z2wFN8d`B1vrgL%GlmdY4SCRm3)W=EQVHlXxcO#^bo z7uu#Z+ZUzu)N2l_G;^fIy<0tK$F2V0V#Y#sY+=4l>L@w4udBz?`#!2iab>;Ga~o=< z>53xmo#J*_o9Zm|wx=jJI5@H0 z%egX+{t0KDX)9tY?vzYLPWJ@5d{#D2rgTuUV0BH!0K+U6Bz#dyzlT0^&E$f{Dxg>& zdYQ9h5co$6;x`$m@;`p|1Thln3a-Gs#R6;ooUchrGMTim&=hZ&^Qpr9k>qJnxX*;! zV1UET&oj~CCD7he%L$kjnv=wwQzU<$A*{AR%;2L?&ZR{tm9!pFp7bQ|-Y}uaDUoqj z-n?Y5^JvyW#!zqW-(S4PYUt5qDOcPdDaPLc+@~nPqhjJ6i=2vekjO#OI;tTJc)ozX z>IKY|e;9bZ3zTE6*fm4+L=jdS8tyUMJK4FQ^eIn4#ThdTBcR-txMaOdyI^~%$y>=G z8wfDZon3)V1P~lw4w|H)MloQ9V(gCN^#hfl9{~DbL)`#+I_OU3`91yb2m2>PSkWi+ zQ$)UryKyArP}ZLU_WB%#&cPrkGDBAd!)`dh4++3daew2TX8L?R|B+p&*gOAL28`{m zMuOL*y?Hg``UuVF%Bv>hct`7ZGzReR= zTfNR?bs`69>KzV&1fqa#F*_0=-DA_+LBm4Gu}x7#Bp(Kg2~z#4f6QQ0RV6|R`HcDR z{!(*&@4dS3IeXwMZF6VJ$mJQ&BYfNk8g6X+nf-Qn%-&9)Sv}2hzU^*V)cXgzump}= zSBGl5#5_+b-zKFN=f*G^Th?>NtlpAt@xTvHXA@C)nL8Cz7^$olBAu${bQ7mQG6jop zTxWD{AgcP*=@=CvaMYQtsG_+CPS3XKL}ATbu}cW}{t*>j_lj}~>7AS+!uth`$zy{T zQgUJ+O7;BlA@c_!0aFMV*^D+rum%&W2|ZY+u?qY15j$p8&@+*Eq^iEOStPMU0Jqu$ zg<&#wW4(|(H`gvhV@gAH(rISZJYV0&EzZMn426QTN#}~6gQ9Z;G zHXi#?#LvH%AH37WV9Da|o76ZKZK8xM1|#bgxziw6fHUbPYd)>GI8w8m-sciClP8y= zCG|5h3TyS}Ct4SXlQOT`{?^FM&ZqcaA$O0?D#z-H;B5(;@eXC+i6n8`GfUioJ@Zq- zW>i*4Nf;DmzWsOqX({I=dAyuBxOalthe+F$s>qz?qXt1l%7|M)>~3zbG&~n_j;tD{ z?t%q_BIZ9iYX`i$X;dT3=NpR1N^oVg93lANq}9R42j_q$t0B2=NC zreG^;wN5G8!3HAZw;Uhga>9?(t;aL>?GO;H7E?WW zt8;jA!sh{ZLdx&}*`@t;X~tp;Er!X=FJ{?{I#Va*J2z(r2M)-!9-17Z3>RxDbJWqV z{*Ii?QU1JJKL|R?tjB#T1C@~W)uFh{{^_t<%-o2e*Vp=HT{lq7K`kQ~l|0h?sSQ~W6{A(ULMf#uW zrGJzESFW})bTef7PadW-c6Lrp+q2(fKp4y4>KjC|w}5Cahs@I=uqKyMjBGV0?;t@N zRo_6T$bRX&O+s0)OF8)pIh=d-*@n*#_kEVVeLCxUGb{wNibA8VGfTiWA1{FZK6rkv z-}3`ZedvYHSBZ-YTBK8!AoV~!HxRTWvQLU4p!k7^QaFI?X2<-c6Esb@oNQF+(b8RJ zOJ89#MEtjJ9TLTyP-Hxff z+u6yLiNk6=ILJOf3nHALJE|t{?7FLTEfj<8aO+FavPSs^n*Flbt0=Z$fg&1v&l*0B zDt-(c1_|w2U)H`8RO~M2!})<(xM$@pGRq8)K{5gOpqqwL+ zYSE=sj}#f=OGTnm!|q0fo0S4E{k$8v%iDo#X@F&QpIR#VoY3y ze1eM75VRNP%O>dK9Pm+NNs>-)13$$1tpyXJT?Yk8(}noPeo)mTS*ZnScWjjN?eI(J z#_Z+t-O&w_6F9wjUSj$8Sc)9jEYggMR-xn5J*WSF-LT&TajYf(wKy@t{7-@SpZ2@| zDjKaU>0`F*&yA3=ZJ^XZX6)9#`^ zk5A(Kxk^bjvbN2w@^A6-XP&59tXeF4(Ws8R+p{B6<6Y;Z^`&jBv59G9uhA{<%Lx!G zoQgNvs(79`{CNb}O&-~n%%f3L^&5WGxfNBDFt#Hr-Ih;-#`J%7x?oa=XHN2O{0eUe z{_ar=AJL&hcSay^+Nw4c5~7u%of0roZMJGOaYS?WszzP>1vOGwL6ubF9xy6K@yqY5eBn|T8!yCUHCXy% zDh7sHwn?d2gKT86la@JR*Es*ef&8j%D*`s4CdH!KwSguM=o@4r$3kTYpQ^!{Ivr}0 z!m?%nbw#5kpaDT(-=WZTf-gv$u9luXf};<5E=f)^+(|Jo(9rxKSW#Aq#f;h!gokYd z_+q`HAq&I;MZ^+2d8IOK)-*MOvs^5DgRO~m?)o~;mX?P;9jd{;0@s?NR$2n!S0Z`k zLJIqms##`5JtZ^ZO?yg$M*Sr()jv=B)T(MQZD&ZYgzu6d{H?I5b>mWKN({GY_l_xX z8N-uikzL@>zaf~B^X0{t?#Z}iAla35VI@bFE1#Ah1}W%!ngU=)jY9xbMw@gaV-n$3wGB$wp=(vZHj=%H{ig(3 z9>VSE3ud&SQV)G5d9X+^RAo3tvD?2w<`AHV1tQiceSqXbPY9-<;6V;cCM#Tz$d6^Z zm?00Vo$iteG5Wy!;9-Nr=#EuI6>uP2&jby*OuTXWfGugfZq-qpL-?5Am_UnJ<1+hq zm&f4)= zX+*)oA<=f1sg|r`d8-~^pp*kE#0#h23WAp79Wn@T%qBDTYf$ZRb{TCAIWrPLB6K@! z2C115ZK^c~(9)RJPegw6KnEP$O+Mcy>Mwg|3k*&R?GnI@(2}4(rb!+wI7I~+hP(?5 z1QWyu79||l2U8PgDHf@+b-f^wLL`+@|8fZ&ND4C}3!fUjk_6ktKdYtcU{A!%U*guV z=1jzddIo(@2%zw6fR5WaPC9t4n0#6a(R(ZlAX!aIy4*Q2XHBO|J%kkQNi9V+8@@LvLcZGqd4=oP7-Hw4y92*WiV8{jG3c=8bf zayVj+0WAeG0X!i+)Wm&J_d#t@*rYzWmA9u_cTiHd_EdL4;`)I)-&#bX*CJUkBN@aQ z@pganH7XtYp?GeAoJA$ARLtTGsUz~>TnZ10n5kCeN_KK_QBl&}WqL&y`k6FY`X&_~ z^6uW4I<@X-EOg&urAaP#i_~tf%|Ac%3TY{Bh@!sEM2jxkpC@(ah z6eosH;;NerbH<~+XqR5?1rM(+RSq87H$;GRd{V(J&$CmFpIWp%T?xeXol*_M-R&>I zNNaivfsI zUemR$`-%Y)LI6^=3G2fRGJ1nWs!yZi|b3o9P!=qHng=wj7~_w}nh@Llbl< z73^;*J2tGT4gi$W$tyVj^_mf?RWWSm%zc>K_JH#v6T4$y-Z_(A9x|5S# zsr%B_EVZqCy?~l)tg%mnq@x9)pnZOu6hcbvbBl6{#nLO@s~lRbxNn*_J^PAi6f3Nt zFV^>#l@l$2gF+?RET<}-(cywB64&i;Xk?04sn>0ENZesT)tm+ek(~&~MbDk#k^15o zE+v%Jj9!N{^_Rf)eU+b|XfghVL4Xs0nK$qOK0fWPk5(IAwiS2CsR<}SuC(ynxKXRh zEczabQg}-aAT!$fc#ntXog74kNEV+wI)ss>dfJicuBp)0blB~NndK3V3OtKbX8XKvpQ?M z(p)-uKDr2^Mbt4BFbFOMf#Q((RyBR6M@X9*^bbmY9UX<%kv zIf<>UBh8j>9Pv=U&eSApE4#GzWTf(Xx)qJ?C9`tCjKE@5UoxJMO&j;MFhChTRU?R; zieM-ey&SZqD$q=oDEVKky;X1}QL-c`C^0ibiCMa0#u76#!xb|#Gcz+YV@V}uDls!N zLy4xkdv<4E&%U;?wf)GCw9IRnW;f1pk8qDjo$jlb*2*6bl7beA032wBiU1lfme*t02?4p(Uxi?d zIKh?~JUR-MGvz zialIfuK9R#iO%#s!M`|r=MR%77bVu1Cj$=hX)i^L4ym@Ea~j29T~hWWFQ|3RuA{cE zHw>ezy5(I9Ku{%6zUq^7mfo&waST(G8~XgY(fu|=H{qD$ z*cPd!`UcN+L;q!{jR8K%O_A6{JmKYrfOLI~l(0cD8Crshj6LfTl?kw%5iYzk zYa$)*;OFty8dAN5-Ny4=*bS5a^%64gM8rW;uy;x)n=^V1amqqP`BF|Mgpa0pd62Bp zX0{IA@5Znm)&t|kF& z-8J=jP^ZjzsP8JbpXBL{_>A7?Gt30UlG_PWa$pQJ1&1dge zZ>G%$qL2G=K>fm6)l8;OU$oI3NHu0X!|Rz%2BY0;kd`$!)ZB#|1DrLYD2pXH3CEn7#M zqM1b#;IXq7fN}oC@)r#KrSUrnWT=bW6xuyh;)D9!-$~QNMh_z9uAK=;d2f>UCX!!2 zfTuLi_XS96A$=PA9OH!Mh**oXcHETF(`JxDL;)d?Iw=58)$&?rqjy9^&=>2-%rF3v z{E7Wi4wC$vh$C#IVeDM0{llJwJ``offK(mN>OKqxw#>uY=59Etn%&t*V9qUCu~`P&hlkF|XnPn@T7+4c z+U3a-MjjOj9Kt2rtmz)XfO7Ph^Chls4=m*ux(O#CVq$?bmz*Yv5@w7^$&NWr1|$EX z8QbgU1sz!wC;m4BRF;JwNKy!M@Ukjl0#87Ds3FWpvt4Pha2e+@70htivDY;xGr8O6 z3Nz{m1#%q)*Tv+za0JJfT%^mU%B7EJ9x#UGu^{e{3sDKqQBpUEmG$blO}1#UffPXp zc$}s$*p5~yb&&=lytwEQza7J>S6Fi4WzQI`gqf>N#cwfq6C1kg@#u9`E|FjFE`7mJ zM65ISq>7zBJ2R&EUc~L?KWEPC;FtTkLS~iTCT^$yDQL83$ zXJ`D`x|3gshnjGRp>jyI;tVBnXu;D2=!ToJ9D*_#AnwlEtX<`6%$A6G=|?7KygT{= z=hN|dfo`n)ri;(#wn~!61aeW7ltog5&rGhcyS!NFLaRNhs5G~XSGK#y&H;@M5w0#W ze;jUZ*63%(+~s~B?Shcx3tXUgsd7BKV2Gj;2)_Nb)HKY4P8gK0Yq_od$l7|>1!Tfc z3Hy~V5N&w5rf~xG=Li-#y0WiSptNrTGu-XurEa>dofk6?e#rX{;|dD2m*IO$M9M;R z^qM%yoJSsIJ$!cBtWdJPe-m6E-PLIj;U>BaO*0hRFZ#?3y{d9$0clrd^0qpO6+hPv zWV!}l!oCQwA>6FS=-In6uMkoq#Wy((d$ z*F3DJNAW)ouW@?s?`3s1W@eo_GuBy0Adm`xiN#~QH_yzUDPB2IcKmkhy0@KFy$Cf^ zr^~Cgst*&C=Ke(;zaj+OzO4HHRTA;BF@O4v3z7ZDHhS z=;-m!+Q=oY#oyYPsA z*Ob2Kn1(D-E6U)PtkHd&XEQeQ;mY|941b&(3dQRa6ENSB3$MV5U?;YF(NJt57O?5k zlr#m^n^$vmT&joJexeI0^cnoP8)Z znpl;WH6w%%7aE^Z8Cj<9?#z-TyiLMk^vi6Q(>GsKl0A2!JMzjTM$P4)zv%CVu=4Q}t8I1{a2-=sW4`QO|GuV0RqiE12 zEe~=kCYH3~g5K-){lXvf*l?QO!bbFPR*l7}E;|8iMfoZ(5qmP#YZ(+jGhmnep`Jq_ zY5fn-Rtw*Gzd=!|W6*1e#kSRzS5P3+SZbaX$4deDQfkOin#0|JDh{g_{Tr@p)DVmG zQH9_+&B0m(N|b`Dfw)!-`0D=V$PMY}D$u>6QET^zYI|)X2z}k|Lb7!p3Y;Lgdd^@f zSCaLteizLS=u~P9Y!BYfGCd8Dw_9+Cwh&!5WWAhDpgaiu+h$Ysb+v~-$+yI4se`kN zRA4ok3$^)kn4NaqVo0F)hfmlcFmii1rR1|aZ+>W2NytKRv(KOgy1VXv^afgCU zE&>Y!9}Q7KbJ>+Eh}|8%HX+sAH_Z}qw`uDG2eb=ru^vDuhiAat7>oq@Fvlj~oE4xM zX?Zp6&?p;)rb>(6Z;cyEX`1Q7ZvDNH96&YDe{nCEQh_k#P z&M=u@2%3OSyqyBW;n2FJH)^YR@~T9+nd1d{HyjasQ$3w41HO2OFxToS_AiNr?_;Ot z6{B7!3pCpbK_HYiH~B7}U)V5l*+db92c!j?nkxPJU6-MC3a6^UM7z+W5mx;MVxrnk zX&S*3|JdZ#rxy?Ud_^V*tvX-NH^D({Z3F7efg-e;i+W76Wkq@l-_?sUI+!4nrJ#M& zgleT3$&|T1M`8Dcv*C=FBwE;3Ow&`c!qut3sNw+HV!x7b=^*zP*5$AfQOK4G_P10`@Px-s8 zw1?0G+J^5_H$b|d{^q5v3OXwFFy;ziW^DEz&^E+mie(Y}^t9|v9Y}(2=-~R{S;l;g znYiAQpG0G@3jV;HT@tT>mJUNAOe5Y0`0ZnAPf##4v@bVFt@X5La(!(Fol2&lp%u_`f;g zV`QEcjfwoI?LpEKn4NNK&v_=`2J9A9bX;PLrrb>74Hp|;l+FW{ed6NLP<2%?;iKsI z<_`B}@OCwA@z0r(r!+(+c^PEQw!6RQO`3l#=Mz?dxZ!?+8chp?kkjH}4 zz&Y%gDNAF)oM}#{ClY1Im#VFII}O>ILV*b)76|`Igy>gVepc_!c{tQ`JbMBS(Bv(iYV0yRwK4iniTo1 zn#cA88<$+q&`k-u!QMtefd6;P#gB+58#j6uM~0df@CC&ShX~EWnqjU zi>8F`O0?euu9x(}d}s2ZEawv%mt~dePLRM%&+i6i%+S1*sfX4;pA5fFrl+qUd#1XthYhT$ zTaz|~2essz>2BWq^eMp8{vxKyPHr7Fj-3L{e+IDi;3$-YJ3tzDU^)#jg#rR`X483VGB*mV2=>#-ILqAwNJP2$W_+c z&LUg2R+uf}W8%D=A~kgFwtr!LT%`H+(97SbXo*9xx?*Rvg_GmsX!WGN5#xzf%4tSm z>&1F-R?po?+IUZBy7YJFT!I|-2idImcO(ldn6lm&1_3Hj~`diE2YKzBCq5RFTpx-3_d&w#e z*aeR(Wxo5ov+IH3F#;xExYi!AoSX56QrK%yDFzx`p;e@E0D#45SnVONpw_V-$&SLF zt7cT#HMqr)H3qXN`Nws$6Ki(u#>Q_oO5+2>(}K8B=Ylvw;SV44XKeh1K}c zjvsYYE3H)a^YbVl#mbwG!;uvZwI}Ez$}3mC$snNF9=FK>=$e^ZaGX zP93>bQ=;J%pM>5l4&&ImxbAYe$ajC-VES9zC1?0+ogi?k@sEO?4T8$ge=6X+hDu9# za3CPo^#6%v|5xGhUo86{8hDM0Y+M!-G9TkFqvFLaSmydwDSNAyj;EETK6VFV-qCdH zIjXPj)&SkiP*-hLOw>uH>!}eu^-(!{%yJt#bK1pvn6`R)5y9LTPk>hXgBMFOJykijjKp zUsdIzB;~}Sl5o+$17_uwmI#D~Yqz*EQdOd2_AGPY8wIJ zaq%h+#(X-W=RU^vvvh=A;LpNL{ozqHvrJcX7H;2`oyK;0D2iqbFO-P36^Dy$`}2tr z_6Y~}U~7h2{omO#6`Sf7dh5s(oovc}x~@ve$*<339m^lm>VuMvfv=M#6N82)P0g7P zGw5oHRIZXNnuZABe^2oyPXRWPuV3aVfA{Otq8?$98|D~2^)s80lnbWn>wqn*{D7iD zoT~u?M&%I>73~bt57Mu`DP-Olmz5)$4Gc9;31Jb9iNHWnLTM_q%@h-H+cFpu(S|&3 zJ@1v>HRAaY+C;Tlt4$z~q!$7UzCE^^r0Bp}J;|9*6S*AOpov+O;dtCI97|eSYgevj zwnqp=X-_n4$>4|k^=q@EFwXvx>Uv{dvDMHm#K;AClj{)-|7E;8m4#N1lf3`FjQ`)`e>pq$p4PlM;bJfQ!6C&s_s zX=rO`?crqcpFE+A|J_f7jEzn0oegb`O_eQd?5!=#JjehH#@2>TPBDo#^79JlBVTT` z=j>53KX7)y%{RfJT}XONNHmJsk7^cUhY5b6PXdy(zvWiZcy~wyMb(B)7%7&6dSV5t- zUCzoCn|uDV7ry|sJ9dP^v0}Bry^p&6j5k&=NhJRE{5oZTfy9L!OEJ-U?LOBnTBu3I zd!W$jLl-NjsvGZbe0-N5D@O!rJu+H=wrz!g@5%!3niE99t>s*f-mRAFB;g%ExCt&; zo#P#onwdDR8dJ~KbMaWW6=a8*>q@F}DhrL_NJxYv+$$s10bKY{53V8m4mWdFA1i}r z%UJs^GweSFpfG zJ%kXjppWP%41tIC6OAcazh47s1?XKSHv{N?D$!gok7T`ve>d(~^U$qYqE9Md{bXH4 z>O#CUaBsbVp3}qGyzT?&GK6bIRe}9lU8UD}zxa zueft0nP~48u)e8oRbIk7S^f?^a?TU!@D*7(7>!f~MwwIwt&(&Sxistr6m8T1vgyEM zLoDE@M4D01`}fKf5{?G&DBb|+1u@H&N#;^XtazV_J!af5*5NFS_ zQ*AXR23hhbDuJB0f3Cx17+F4|zw5B^e_EFRH97j<{m6e2;=cs;{~fOXd+hxy@>GcoPHC1-S=ICY{a$on+wa6XWlAc8}j0dq5kb&>n|7lRm_Vj1|K)Rg#!Ve$V&zF z0Xt2@i6w^NDa^_EOFv;M-a2$(C32*AM}5G2aJm15yXSk@_68UNDXfy=g>W2xahu>s zx%F`Inu8>ZaJm8$wWwFIiWq8{iLn%+w2)fgKCCq;bU9yX#kwvIecHSeSRZMq1?R}O z_l8m@umA?y8n}%FR+(-_0k*>Rpf!om%BYLx z(T^<|u3?D1&bn&%unF+eY|iq^{sy@x7r1QNktf*HY~$6n^exXNR>GNc+YGuA)@$sH zrQ!sq@b}`tY%uZgog>cf1SBifcSg0?8W_{22Uz@f{Hn(A;@1sE{k#@U@f>W87LXG?-d+Y96 zL!jP@LvA*k6Yior(?-7B*4kOAl1dH`b&fa{FDMLEF91E|TW-XP7nm*Nl`oHM%POpP zV2~&oA9uxGS$pvwO>KocS{RvciC~tN88`4iYq?Z4zcXC_Ycx35@muCNdMu&A_nK;j z02@)^xcv}Hdt&aJ;N9Y34+&A}WN}Tf-)!W_1liM#&^~dG&{VvX-G;qytRv$qbGiuC zcRq&>bJ3<{2#{yF>#TU;2ow9-TJmQ_(Ux{xW`_w95iG+ioT3XTcAwd)W9PL-SGz*= zS&LJwQ7oxCy6v=bs~9aCJ(1he3&6WD{0UMR>$n8F8{y9r-3N!qDi$KWiwo zs*NgcD#g)O9sD08^iVR-O{mePUmuw=k@`tO%eBX(mk^G_Nirt0OJ#H(P~|a?)m0O~ zRr8&p2ADhfUGju3igmSE+?T^{6pSg3@4g5gK|kYcu=!ixkawu)o~2{S->}~q-gdWp zmwBPS@WI~dobZp&ok{{E3bxz*Bfo#iegm3P67v`>q87+*z#_5gvIcTE8a|#UsE~}I*4d4`ld*{? zYrw;PN1&bbTV(%$ElZ!bC5%GaW2RQWMSec#f5-o5j}^b+CmhPNhx8i;`HU5M2M3CR z9E-*a7@D-|jZ6n4M@{DI_ZdRyAA##bm%Y+C_5`0jm-p-66Gz;v#R=_}s`g*sYnqfU z7uBj!SM=+zlc#vlt72A`#ViioH!5`6HF%n&oK#gFyGuScr~PbhX^0`Xn`CTE_UBIW8RO7_G_b7_&Y~abpovVsal2 z%myPN(&GZNI?Q&pOM6Eocs-DQs~S}iw#m!1jtMXF+g^eJ8Ecr=$uaMlg_YSYBTJN1 zLT{vzO*?|hX1SqP1kZwU`O(J(sGe`^9?o2zsU-i1qc@?5J1FVTbD2F1y`WkH$htjn zJ!{_yuc zTl%nU^OJQyQmg6`YOf{PrJK#vZIbLrgYz&Bqi2lkdfCb+ z-b6P9;(Yic^z1f5TI)(cE~ZmWb-*Je3=p56rs+QE6*mO%EYRJ<&bCD{49f?+ighUs zI8HtpJ97OF!5RoY{fc58{33A~59I5;JOW-uDZR=x^Bm=$00-C#1j31Zy1Xc_e|aPn zv}rS_p4?x*GA_#hlQ91~ucZ0!fcl52iHou6U$~Ytv@!j^_+g5YwltU!`X|Md?sCn- zID<1AY0GHg2njSTtQ1jX{)j`4vuRGu=Hi_`2D*}vKt2&hPDJ?G5PmvW8rSl5cH8r@ zI*7JLBuStHIIa>dh0!d)f;gBOVIJ3vZ4z)|b7fN8j)3h*8PhpYSKDz6S7*>MXU7)7 zMRSeu>qW#CqIP-JEc{|+4$&27sqyP+T$d?0%2t&rI(tPaS!*itX4+%uyKEsvU}F30 z?r{9r6GMb0V0t4J7$KrPBzYBOIf3exs=6oJu(e|&cZyhi*xo~LRYp?YrHXd1!GscG zND?X<`Y^+)<5;%8?z^i_g+>}qd(Voow9eZ!1_F7nA+?J^aP`&?46pKpMNDfE?wCWy zEa3nxh~PV@h0ocZmVh#7$u%y5rnAP>#r3~+xQp%)E}m~objMny>C z4aG@`{3KNn|N3WoLI2WI81lDq4En#Yu>X&LF7v-ASc$TY6`ByTFMCACfhW6#O>>Wt zmF3)uXW`2jNwT?O_$ichUtCrHd+5R;b zl!_8om57Gd^c0S)^Gy~XkxDvABzb0q2MKXo!n1fvSd%7h<##WrH z)MXxtSox!o$cHy?zOytUYu+S0_4)i~2NT%T(}5)?$CpoH zStPp=7Vrr}w1b49jB(^)rKH!sE@mzwX6lB(lt&VM2Q(AZTLuE!o~@TP^&94lu_WnZ zL5$6d_)n0g_M=H6N7tmOEO`iG3?{2d4VM(cNlXB;`6Zj!vH` z{=}KR4`idS*SgG527Qzqy7$j(8=_WHEu67PE&|9c zkq`1Ab1wvA9o2RbuvDh1?tDMV@M_( zB;Ih#3(ec-b3Q zv#N>;iVF@{6Wq=+XYFAa1XWBpW``*A`=7b1@D~O1RUQ53T87xc+*cFzY!-wP%EPb& zzw|8~^Sr_m@G>aZn8x7^W;uNHgYgLCNKgPKBPm)rJ@!VSLrqQ6Q&re;(sKC&Jnf!+^3`}3gj*I5LvAMND8Ic z2lz?EKk=K@X&8!bi9~eel_kK`?Nd|=Q2mAMVwYGYS6NeZgilu|?f!u^b6u0D1b>sl zqW>6ltp8_NqvB|2>ttrN^uhAKvens;#l9#K_$jgjn-E=1-AqxM{DOk%~(-rbd)q;*<|sWdIQHKj|9 z3XPN@!(w15db4RvAa!;mIR;%$4&Xy+^r!M#*36;FDvFt$+?3K3!w70=w{GK;2|q1? zwvdU3IxlKPq%pekMChf$tVEJkrzKX1ri5v$tLe0ZRY(rO0Aa`8aNd=5b+@ z{+J|KJTtO>8Nmb56Kx6)S}M>1NxgyUq`ckR zm;(eayTI?U<=Rkjs;7PaG>sUk_9OTRKRp?s9n6T8)mglyM#|gGjeT<$a? zJVRcYOAyg310LBV`tn`HTBwg7CW@MvjL)GW=Df}E=hau0!9C6sl2jnzJk6?gH(HyY z=CnlGK!LH#|OWdof&#u1U&iXuy{Hh}A>2JM-D6nCZIj*HrGq2>|vkR?% zN@V{OZ%n4S3ofDjyc-x8H~y`3Xb|wYIIl4PM{4L{?I8;@X{J0>ZH!~qmoj#<%0n{e zb#u&A_n_DWMS`+~Hnl!R;_-W&NfXVMVm1liD^~Chy6*r+7*E{X zBld>n#$L;R$?HI`t(Rn^8PPHVf&7HO0xph~aCFpjrI?L0rCk2l6yr29oNu0t;NT0jg4 z;wNl3O+Ck{IU(uJwfUI+mmC&Wan%U#^SCcdPoP*s^5Y>gldzZ{S!gAHqB+MzJY*b|DApCzbeiD&aJ5ak2bS^ZD5xgUfv6f4PVo%BX&)% zA;Iw=puxx_q4nQ+S*6^6=|Y3Tfb~_qs zcsL69<2WZ_9q$XkdvC*q03ByTi6oo^Gl2-a#~}ekus5U@pURoXeD2?|1csvse;)M7 z^SZAFsq?xo1}*cxFlKn@j&8*t$%6W2M&<3&Tlm`U*dT4)8nOEB_A!R+>2mFM>%7DM zV!y#d@;w*D`Ku4Oz4Z28cc+JcVcrS2XFT~8zZS9jB_7Spy^BilKNQ0FVf^En6jR%# zd&a9TXcmZ4_edF>WK)KWvH4+mfvjXPdoYen1Y8J?9sqf!$PH%ZZCBwNF3ZZqcL<8ZuBiIBn;AhEJ>y3nNe;x<+iVes)Y%xJ zA@PJIb14P-puYu4x3&$zpq;fg4}(qF1h|u+*CCQ6F2Wf%NKhfCoGOr@#EJq@9C7>U ze+xG95t7hxJw>j9OJI^2Yi9&0Xfq=tgqlqq@`XW?B&@V5C^Kd%D72B=3*~q6;l!#e zhoDJP&|ZgS+Vmv|HkWjM$3YU;ey|noThbswmz^M#U?vK#@ZpMpB;i5b{qeY`pzOso zNVyEv8amE`KFpIdi*AY7ES^|J3My;F(nhlu4^NgMz9xY^hZ)xrvNuK`J&<4$zR1}# z!dK_HyOKm76Bd*7yyaF`&yd-yRQ|SEtu7i37@NiQ6+o zvH`STU3SgO_4J?CdXJ!u<;IMHKL4a5e2o0Eos~}L4y6`W4XJ-U0W-sA6OF`sU`s2f`%tZqbmUbl>~2KNI9 z99v~J&GznJ0wbjDDXmsNlTKRuJhcly2L zl3&bRuw;V{Rh(t477aJ4MLxa4bj9Qp^d+W{IktONFC6{F#uoe^J5J24%#(`DYf88h zJjxbKDWcI>e6I*vwsWwRq%vGRoYYn7nJV&CG8AwdiX72A zQkh8xLYO#UmNOz_sgnhoz^A4dX%blTYB4ce26`c8kd`d$Jk7L9+$+gghPDiMoO@CY zIvcf^O>jfrr_31jF&;VxwUD*gCCNL45v#UEmgKrc*o9|-B$i^1WFA%`BU3B`=AsTs z0?Vk1-b!Cgpw~<57{qBgE`eI?^zO5TK%mQ(O5&>qeWWOfOhJ;7IN*$6-+uU3X>Kv;=a^VbbdK^N|HetAZt&Z!(U2sL#<#_d;xeOv5 zn{-@@oj}e?T!i^Wu~1#*G9PaL-t5#ntQYF(?&<15PEsSyth$;>0-0Hggxvg{`-`Pk zO@HF`@Qm1S#t)ybU#QV=U$kVVMx{PH?I;NEICJbu~AJ!3&;GgDB z)xT_3uzE$|(N5}t9~BAPg;mqh0`#!7kR5hNc#Sr1owfKHlctIo@YQRvXPD;?>)9q& zYjd-N=;Cohnt#24VrG+RbgO=obZH#4^;o4r{DzuprY`JR^0amsG6TY^rf@XQ`~Na zS+J2bO(T5`O?b57J@%kUp?3An%p|G#UsUS$%MLQ*A#j=+UB|{3tCr}>dE6>~<>ru2 zOu=a}f0_PPItb=!Zmrk2;3uVlbdaSl4(gV&r1@$XOgGJVG|;Lij5b%Mc>erT60K9I zEbTC*z|wTE`#aNKnigquH@HNb94VL*U$!<$qTdR23FGB)8*4Y%h5D&m6Af?v&TP8a zVqPh#swOf_dr-pjdZ}*67Nyq>{}I`V+US+f(w_L^h*f5ljC& zv$7j%fY!&0snBizyXTq5)(eFDEo#qTeA4mwMNQA7F$2{_jnoU8=hI$R;uWUK z6yJ|4sY{^~Yahe)+&DNyaq`;@#j}7Ygl{PB&yWmvyop;x+uaNjPNY7jn@15Uwwsus zQJzuSHJm-r&F2*9eJr;4^sGmMmR&?33F?VIyyO##0%=%Yy2Q2Bd)@MAX zYm}T)+()D2mXhaHbdrn3mC3~|(?01d8j_ow6-%Nmw(H!MF{r>A@x_B=_fCadR1PkN<7nlr zIz9H~$kq+erLG3^Ac4Z)Z?wP7b2H6Q*o%5fhQf^fh%)hn8ip5EA|s1MeFl|58CblZ zn_P)XBABIei)g?qV^Y}LOW(Sp>8dj!kx7{}O`GghW z8jl^kR)|EhNA;ay@f#j{iT~KC(}n9gkaUJ zDZ!x;q^!c^77eKo6Fp(YDAG#FUpg{iR)FQT z>d;P&oTI4=0AxJsSsIlX3G%pj5yLuK_LSm8o zCI4P9I3EKMm@HELOx*Homa!TgjNdZ>Er$=u)yQfQG`Q+dUK791w9$Ds`H07~l0|9> zB2UiYMaOaji%l4o5uKGA4*VTym|Btlv>>3SPs37>t44&}rWf9FP=*`t-W&~68AKL+ zFk~S*sv^X$9>Yx;8)@FdJ&?pbw9q}u$USZC29G;08y$EqQ!m=8Osy-(zb5CqCgkGW z&{|f4o#>QKD$o)7a6@{uWag08nrnxeCGT4r=Z8D-0I-i+Z5|8hlj;kg-V`CHwfTN zPjkY(G=`ArM!AsA`}Xtg)rvRSrHH zkzvzX$YFNE!tZ^~u=^?yz5wD&5xmP0c2C&l*=KuFAN?u=blyY48N=y3c-{w?NW_2> zWD0vS2U9AuW1vbjX$khRB6<@5ZYcW^2mKz5_DEE1Qo1@lO%qU8Z=`2D^m97WBM9T3 zMQu{MI^9hJaNTI+I~DngKzrn)HVHLSkRCRV`6u3{K=uQ@X-h4d%!~3yeR|vZ(@ah7 z>9(l5sqXihL_|^EzT#p{AymM$oQMydc3I!UckM^<^3pi2e&0Z@2c%ej#2Jyu^8tV-CU)i4Z8*rh5<)=G;^AUK0Qpo67ovKD>hjQMCK zesm$tSSz>S&Y^XUT>R%~$Gju;rTja#vc-6TPNIxvf?2lw@LG;eD^JPEEv1)_A8dw~ zs*2({D*27q7~1h29Ah_r{N0i;-{o9!_HWhXb~fFL2Mca95`m=Yt?Kd_Glb_zz{+{l zpXzP*It+}t18Oz;QPc{zkX#qwbR_2o7&NU!uTdF>1(*LqCs`^loHEg1UvV!i1HAPa zo^oxHed$qS0)t?QR&a$SKu%R!p(@od;jT!J9w?$4KyOLDrovaNQ035K*^6LFZ>x5G z6TjxaS&1TF8RIVMgJ@UTbQ`-C9H$Bbr5YbvK|ymQ;}B|D!j?^+JGQ##IgOd6f@h=b z(3##eY^B2EBWp7+b|~%(aY%%cwX^d85PP=ow$gwh21W%Qe!3#ElUk68`+L}%$PgY$ z3>Q>q8nO(~xe=w2K01)lW^2Z>@(m=Emf=&^-(B zbq42|lNEO=9+``EPPvq5dvYq4i4B>6d7rAkO{-@)1xj`ee(}uzI*`fYAIiXmaw=Va z>A&tpf25E7<7SlF3FoxPr%`&fU%nmjcgYl<36U*|w2SdYpD!?YYhDi1pRK#AT=o$z zhI~}w)m3%Bbas`S>P7*h?Ae;aI1d!FI9jql>15mD~>Bvy9Kc-uudHx zQFZI|O6|(km8TEh^xaDB_8s27dMY-gT{9^c2SKr`Wq_ft=YCNOS(#{90>Sqoo=Bb6 z>fX_1L+&%VlOgv9{C@cc&Z?aTbEgaM;7U_2Pe0cqEEyUo-eQG&R!H;{Nr-N6e<754 zLhUawGD&`*E}rR5DqK6nzhSVK>+jP&YENB4W2>#&gQ;if2)SPt)P&f6=Jx9G*x(Oz zizi0=tZb~r>`0}SHRkaaDZ#Tlv{K@ScFu0B-sgU}#WQGhF_jFT#v8S)cwkMVr~pW{ zxtZA6Y%hD?D~;6u)P>2(NXv#;ZB*>0;tr@!hHQ8YT}|-B=XLBzVYxhQXtvPSq;!lP z@8<0&`h`|}_OHE!(?4C~m-3s{cn8Lu5oc72l2dRKH*EbhU0qA0yKh&;p4_Vp29&I^ldi4V}>~?><@! zk|hBH-EKsMF-pHj{>;a<#d$>jDtkQfk~q_uj^SMM2SeKS!&~#9fPM8qZtxu6Pww#W zg+Um>nfv6=&IOXIe+&SSGU%6UGoA=tt;z_5}JBJZP*fYEsZs!2El|0XIJwwYhY@ICKVQh zA_HuA#NBK=hxr_waxA*A_+pZe_n9YamYhRvix1;y> zlPfn6wOvn;mKA(K+SYINU^bxEL+mh@py;M!1lf&z;mEExvD7=sfM z5+^YE=v}XOu=<`{c1Ze9QY%=3T$E`=amr8khpI48VC4riDcR}~{5Vh@aU#r!6AGpe z6SF2{rYFp?quB8Ps=jz8vRx_>ha^K>Tb3Z?s#8;B?V93gWI628tqh#2<;zV=zeuV8 z!$sD)jN~)a#BlOZNcu+!trmjKS~r~uHK>O_glmr`(!(vGs>{rHR%T?Pt?Oc}e3!VX zrxFr?WQs=oP;DsVz?GjLjR5gzYKP@`UQ%9AjQ(4w4LIS%qQktn^ zK}E5WFzD9^Hj^rcv9cM@XI@?@U9Qp;XkrV3Q+`7R<&v?fwd}U#4eazKmxU5lZGkLB zYho33`G6FxOh8C;AX~UJXK63wA)nQpe3VTUWd{oc12b&wesCZPV$LA-xI~{tw&D%0 z9*`;nH#e|}lX4d!^sEdh?&9bIaeP}E*w%gtxA7#Zqhya`$3o}TX{qffc#SPr20ult ze{FwAt8-1Wto>=-%@@j(uJGo<{j8wm=Hiu(J6AwM-5%*%jAS=(WJ4S4x=G3!lFfqx-z;CD&i^|dMKgW zsx#JI_QbtS5h|w@tH83$!;$qV7zT@AADtlATE;|;Uz9En5Fr&*IbRXio*Trk#Kvdh zs@Jo#feQzh{H)I}I?E!HCS}~yt6aViU3}f*x-OAfsKs5=S-HPt*IJ!io2et{hCk4S z_&+Fnrzp*~Wm`BaRcYI{ZQE9*ZCjPLZQHhO+qR9$%$sYkbI-m1xqF><{)hSSwf4=2 zF=mX2J|cSbXkABm~GGNsk9 zgS@Z+MAOb`Tp?VVc_YyFn?|h6-4yjGamMQU&Y}(BFL^WPBHW}+ykvuj|kWA5Q{(!w-XN;*WaKW021IL8%RXnkKyqnisDDw z!|(IlkGbxV9sEEV6xiV9hoEChP)gX~kI_R4XD^`hjFuB@A;?(9>-VOoiRS)Hd=Mkx z5ICK&P$39iq!%Ri}qg4heUAXg$Sgl5#Dv46*%nf0avg9I6@< ze_=Jimm7@=2@~OZ=`Tjp~RwF`5-QTpzNx9A6O;qy`0I z2|wa-K?IsiknkukbW3%zq)){B4uz`Mn5vj{1*2ishH`Dz7pZ9<*m(yD;eq&SfZcH) z@uJV_lj1)5BKJzM|OyyOnxRP8w1bk#24 zI~?ljaLYhfPW7F%rk;yk;zx+Z1?t1yNL>vXm+|wTtq0)aSqLJcj@P!(> zcM0tql%mLT<;XDd&hF+{#P&Nz{WU)SRibJ&ri~^0ZiF!W?#B7&?t<@z`2TMVa&Y`t zhr!>J?f+WP!uU7;=6AHQ`a3#VMRr2;@xcX{+}kMC$lbul4N+1lhT?(!faGjv&Kj~k zV&dh=2!!1c3`Lc+3(M3u>2mADl?8Bs@_O)s0<$i1BnO`-lL^%(NVy==%}Te$#bDNQdjsvMliOudTt<&`K=)Udqz<^Uu{g@_$(D|DmT7 zDY@Ai{k`@`#ea20cwenmZk~V|ltBH^85-AiM1+q-$4>{2BQ`(_CmMh~QW(QZvOd*7 z_=@o!j18GJeYuEc$ohqX?iurJFtkHPAsNVe6dijE3VhNU~ z;nh2sQ){05w(3_|+hu>5UJ7>ddJsEd+nB#@;}C~GL%mjIx7IxR(H4kM2$tPAV#4aT z0%UZ@+7{tt|6`IBOGm%f{OVpiN+lW3$`MchxaEfr?rq%QrLnk6X3{3rv7dy7^(wVX z;O-MMUgHLfppp%<)s;JporHQV!L{3le#$f`ap*Y>E06U}6m8~I6u%Zr1k3Hsf zPEDAAHh~uU&P(>7)-8m4F|8^J2s!Bdy{ZBxs-03l;UFmhOXz*qB0WGC<^lRVd~&Ej zsL*i*^uD0Qrcf^_sQus84$nPInhI=QjM)8iJ1ZZQ>RnHCw6jT+kdEWbZ?pvx8e+gB zq=C4paKDPA(Bva_QBDlW-Nm%IYH?Or1E%n>6$fmCEeEEJO1!a7y}dy3e>;(Zuzz9i zGLEQX3h0v<3ior1Jpf8{(Yb|j(a4}0GV zd;E9?VG+1hg}~t}{E&L2$6x}#MfxqUg&rwU9Foa*>yN(*yKqArM&!5XVwg80+e7m} z?73RcH0ZV_6O`vrh(7V+jnc1gtwc>2EJXabo~*d85tG69#{o2AqMPhg+H<{7uTF zxpd3JKm7@xul)U@XhQy|6unZV(r8f-nVh+-fT3$}ch(|%Q@d#9#iIi760}{b- z7dk6&ESNzK+!!5#VjC{WgRK;&NQ%Pzx46`bLCto7#`uvcg(5ACty$`CCAczQdJ7d3 z!!0=zsT>-ukmO(?$l-zsl*ovl+@D9rYnR~bV%oSY_EW$k*f^D81wO_mh|WA#g}`Y> zd1FM9OWJi}Ad=<|B6?L!vfZx`knup&xlW&ijQ7TKSBX6=B=)SpfI!s}LZ=nVa=l!> zLQN^MY5rzzMADe}xbe3fIK9l+!M19mKci0ALY#d+o^4b_AucVYhq2}u`sK0jO_%Mk zNu4tK?0hp9wX$f780(F-ML}7`df|9c{1!$LXG`;8O&o=cg6>b2;d}GB%Fb|B-KZ@M z*90><`D_s*Sr^D~6^GMGbrfPOrH~w2EwdI%q*ivps(pBP=(so-P_WxL(8A+mStF%p zvGAjRVc#vcgjvAXzTi!BTdg88h;8j^PBn}KX3ZF9Sr$ccE^JYJF~~MOh;riQbi%Ft zq~*Gscm;DOg3L%1+G+ED=h7I1Yh=5GSpL{W4yjS|BfZe_W8G*3Cf=Z4WGUmF6USKLH{Nv#rbf)F|BuJdTy^5== z^z4iS9c{VH1C6$0bi#+q~wKb%&JYsKrS02K0TaSy8dx zL0Q-FQLrAUrx8byl^5AjAH)GemKB^0fjI!uX`3&vD{6RK`bA8(^}G4*-LOy!xf9aM z9%S9f4(Gc)jn?cG>DBVX(^M#tpUIJNP>3{vOk_A3>Y7`?|1jp+IKyo>W7^y?Orf>ep3Q za@#X!DVfCw6aw81OuKus=pUS>Te;?aAf|o6r#E=q?C94PPXW2?ILhqU?Cf|~9l9&Y zrw?R=7mVba$oVgrk}}zMRQ@L=ooZGg^joNN%Y%D{?_UYdU1&RyL@7)DCfK&9wmud< zO)P%vzpbCY{-PP$-V`M5e!EMc?;gp2cA5D9;4-E3^o=b4HE_<;l2tU$BBZ7~Uyjf2R!-GG16^B+*sKAc1nP0o`k2gEdWbp;|0z8K6>F z;T*EM0}}!+eA}v1{h+dJDo3(s!usw%!C$TQby?vR$5ScYn-@0>wY~Il4pW9(*3zqd3U|JE-+cxx;l6Hm>u8x6*TlE zdoL87uU6uT!jz%!GIRZA?Qg7I#M-lwcA9=Gw(TS69IE64=*D->x$-)FrmChhq51;4 z&hrBNu1q6I6yEv=DxA$iO%$FPLo~i3(1;-6+ka9vaMWzuwxFd2TDOSPLzcG)FBMtp zhJPxD+2wCAboMiItyF%2{$&hZ^-bel-$duS?-=^e#_&(^^KWDLzc8MHmCc+Sk~a-? zLqb$<3Wx1g<%tjZM6+xR2m?L7*$TqZ-ri4#UKmLUbqV#oZiOVa{Mn0o-Z58e(FCLU zOBVLxZ}R&mzztG#eoSpqFP{p(L@y9D$5P;EY0B&g9W5LPviL455|^Qz zMY|2=Bb7oQN02)K zSCty65zaq)wLGEf^!Cfk!As>Jg_E#X_u!7zXMEk?rNDZrL93koteM&-x*2;--j9Pb z7;4(yI2!jpu7A_I^w6Veo%+}YuRy=Ose91&J?xK&cQ*c7T|3RQD9)@ndu_f7#}v`| zsFK1a_9Nvoy)}IC5=KNv)Z-iqYsl9RBw=!FhrL$?4xHSQoPnB$uP_djno>glc0@-1 zfG8parMEm5_wp!4+fWCd*DsXQdCSAPs+r-d;7i8yV{!!w`AT=(Zu|{aO%P4!N$>ix?MePMB4bS9q&BD~=P$M}v zCIaR=5t#;$anS=ic={gW8g(UWdFts_irKl@=AL_H5_3ae2#aJ(QW-Y*I>Q7L>p}*d zR6h@S@BAt=|FmE$QZvgCv?4C~l+5Xpn-#@)>RUmfMH3FT!zT8LX1~tzTfk}AR3Kag z(SvhUQT?r(4nsPlxRJ^6(EAx;Q&IH zD6R0w3?7G2b?nIDJn*BKr0H{G34!Ugz*^^qca?*UJMSd>`?9wJo&E;W2FqBfc7f3K zpv;LH83E-o0VQOOQi-m<3srlSF}lVJ##yRY!JoLz+@7-nH+(3k!@+7O;HM1};!PAD z6N*7m&I+Q)vK(@@v1OV%hxiTvQX@_SBbr~=t~gKFsrnY^dGVcwHf-WMG| z*hW#b493lo2G)iD_4IXM2$PYoZ$@!fFziTJ`*^GT;| zj7f1xH*c#44tG!ijT^r(^2Fb$P?C$Fit_5xX04Nu&^DXzc0)AhK>zsh(5;n0mZN>_ zert^D8}4p(=Ocu$v;l8(qBp<%uuI1|PJwg5V)!U=3o~{_n%iHLkagR?;!7&1J&rJY z1#Tnwv=g2PAbj4rpAyaLIZloK1HP?QeE-w4-%p$MH*Z*KoK&L0w9bkqh6|^=zssgm zYXc2!_4sDg6^zN|uUNJzfgfABGcKvO*SRp)_vL3mQ{G~)xO$vCL*Xw0xKi15BfJKB z-cuHzfF`%Z=lhgLx63I#tP=w^^pV#wz0WeP7`v*TpTB3NMkD`Ngx#&Eb0GV zuyo0h?<$Ns);#SH-LN0aO+?N)z>IdFwKsBbFtf4#-x%>f^FAs|Rw$)5Y&U_s7%M`oqPw;Pd$Bq@AzT*q9`hg`=S4(@-B zkKuikD@^EvU!iDrM1nff{cgjPc%ct-2nPMUNYtqw%kUcQkV-+I`Do z_S}Zgo#e!+l=?;QvK8ACqNo6+PKg#2Rnl(%`zb-DbsCmEkilyhl3HQ5i`& zfvI9AE67Z9!4}sD8ktKsC0UgM=NXowvIm2svyHN&3O$IwB$pzZJE4YRH#UGd0UhEi zK{GdwvRJZ;!H0kS&I{h!l`BkWAV+p#?eA_UMnQV2OlnqdJtIqn;0;WP&P08)Zo97W z=u+mR^2_C?DarWnMyFqYH9BQ`TocmC`3lOM1qMq z*DUWWz&NCclu1$vH~Z5MiJ>LzJVgKogeq36h+K`ZJqm+mG;JkFcxece%@DCg>aH6eCkoHz@%iuz^n_M-1E@M&CWny9MitC;c7rF9>QFDq#Cp z+f(&_ixH^)4MzBXZSMa-(ZqkH8_~F3&X=qco>5oP@aXJ-j0o`hKrQ#g#Ey(l@Myg0 zj8L%1sm)mPZb@H-B?(0GcfYad%Z4N(ehgUiDEspU&voa=$MHKYfCHHjo*qdU6wWAG z;w@Vk&xBoy>I`mSGUUcys2|#~Fo@lhEHadxwnEHKM}=;RgNjHLKTVhWYmuDy6rM6K z7CO{fkrDb-TWNdME<=ID&udGsYcUti{?QX_#`}pTX~E{O>u9WgC(NeAgDCYNI#}h^ zJA))jWzfLuvR~`ML15d~ND>;eyfjLbv?DC7iey%(%s~(5zX~{(CQ)c@IGiw9%{ILy zshyKBlH{$iuP|hkx0z3cP;MzapxDjTc$XN9tS?O(isoyc>Q8?mC0VFN9#Qo7Fx#=r zb29y`thG6vOcFHnC-=@fI4int^z1D)ZG>@Po$Qck%}?93KN}M9cVV&}v<(VYq3^4n zDhWfb7*jJy=}-qn7C%sy+UtV-KvRO>hdZVl!0**V^M}Gte%A$ClwQwkds8@tPLMcQ>sl2szs!Trrw_Bhh3NJbh02A>#UiYNdLK1(Ac zsum)H-)4y47I-2baB>OpMTGuvvbID7Yo$SbkgHW5$n9v(yeinNqR91NPOAF_f$b~R z65>oX8&bcp3UO2$1jub=7NU}| z$a?McIQ53b&4w?~n)eg1i!WVQzjLmCTj|K&VS>OFm9_eq z6N|qnzELObPPnDqN_GRMI9u#M+}^pVu~kj5j4{(2pvL_SUoy(sjq@wJ!}Ql|ikc_S zq{b$fYBAI4CA`gZ7s+*wH5ROI7NlFf^nyPn7ECg}C}iOb4_lYgO=)NW*mNp9ZXU=#yd8l@uL5R#vM zP>J=dNLVGfXbZ6cnV+TCBeo1ggAI=MWlWTf@*8+%EHeHSukHFk+&6HulavMq^C zKM6iCYE^pUA6`*^oW|;U5FJ21EdF%&Y9^a-LFe3i27MdLuWlh6PPvVzT)lh_de499 z->5V(Hbe~}y^xhj#(YzG$kFl6J89-TJzg5KNMYPurf#p&kr$Oh#q+y#4 zWvpKhWxatU^+Qt{33F4#4Kel7_?~@f)=!)Hg1lwF zXVtMU#AkRt$V2L!J0GgEuSM$Z&zaextt~`%Fd#j*PQ8THckJq{Z{Pg0Ptf1LS5D~M z41GaB8~jme0vTmu<7`rp=Xdnby+#Xn4J{lO92wM^Wv^T=tz3!ptB(4~fX!`I%r?6n zr#15UwyGKu;tC5=$O~u#o7H{O&$m!b@5*AiG5}H-AM|2P8LWZI3na!&2vrn_&P*lh zeZd5|PKa@Xiuxx3R1(llUrtg&oMZwjY#J{d70L>!s|7NoL8b+W7}lSJm+|~j_erGw ztSOz=Cg)dVF~t(gKK5R1MfruHqJ;8gh)<8m_S^+xvQ?m765Uu6dXe7hT928t?M>Qg z9qd1%hC4V5+z2(KExd9>4Q43!rb}Zz!EL!gV;5FQIfPNC@6Ym{fV#w7cx|5Y*op`k zkSCE@=O2Y2e$g%LLxR;5xqhG3)?o>)dUz8SF!WS)W`hr+A~v5*SIEED+7K zJb_E|#n45@$Sn1HAD)Mu+~^^lCu(#_d7+(i(K5*hS1Nj;8-7Hjn*oB*t=43k#5)Q| z&4>zEwaBpA2E!-O^z*q80Ey~lTPKn7>pD-Pimeq7Hp5qN`tFUFseTd)?O^#>yv~Vk&OHF?j4p` zNR0c}^i4F)atAFCru+tt((3cVFoW2)jSA^Kj-{DIn+w*HkNnQhj9E%Cqg$%Tjp$fPfZni|a61h86H15%_-myBykuBz^@w5p{2nAeDzd~Y32&`bNXl!Nz zx}aB(rFE7q3zdGv-&CQ6)<5D=TmhZA$iIT{5M|+svq^Nh{1Kqe?e2Q+bl5Ccs!6~w zjKd#*a}6U#Yt>7>;Y}b^w|0RJL6+faZQY9 z4FmCXoB_7rmOR^?!ca{KLt(;jwbEO7dT56m`Q)>P*=Orq%Bzvs{9_8804f?shtRxi z4j`!=@;4E^*bP5Z??fcDz{JVrPWJ=NjHBmD6?IpS_Jc5mC$DxEEcg_-oWDOb`oRMl z%{e=G(&2~7J-we;SMYQ_1KJ=0dUS5i1qh7+1OIk461H=G^tda=%Z4ueXW@a4J4B!; zwA(nFHVb=Jr$Dy)RO(@|T`TzTR8Gk4uU>4O)K2pV)}`>&7G#MAP}m& z=3Qxw8x*?_D~wkdha0V>bSj@)oZDM3ZkAKAdP9=h^RH4i zHng{(#!Le0?b?2sYfVre9x0l)JOO0GvRB1W`m;pmc5r-wVP#!FTn)p>K9HzWf1ErZ zzd1f(m>tN7PZ-Gb^haWcnvY7UjIX6632|jt5KFRgt!9T-z6crhrFb2RJt-5$@lHYRu>q(W*KgqA;8Vz_e};!AeZe9!JF89#@@919O$=nl@Gzh8l&cP@z%q z7DSi)lKNfva?+?|LNj@t+_n#Bd8EgdPb^m0mo>^-bb=|$w4|(ff3(uU?!ASPZW6M5 zT{;!L=@kA@KpiZuJQKR8R$j%IuhD;f*Vwi#T_X!eKdBHmgPzywWv{DHmbjlFOHXph z>abwcxMKUt-%RSB;4+2wIyhQ;$b}*_OziFm<{}!2Tyz3~ zV$MEm7m8DOHu`*Y;&FfA;Sh>bX$~Y%3^+f|2~dWhq70I*F^y4!acT~9R315^%&b1VV7;* z|52s|YmZ_hQ_ijN$H>s=CRx3|@1aV)k;-BsRrM1C2mZA}fhu(Z6m5I_OmvMl2UI~T ztwuhFZeAwGDaToH>u;r>wY^M3x^J3~D*E4Lj{liFsDX{OgOin!{eQ#vA^9)3{Xbt3 zljRrukJtZ(?U_pFGKl<0JpPS`1PvpD?Kyr8+G>fs7$M^H%4te?D#W+jjxHKOmM&?j zVi*!4mg^e#}?rxIsdN6!4Iy%a~DO)`X?za$Nj9FoKppiPee?1 zVnX#D>!plPmb!LchbDPWLo1VBlBzY=G$}d$o}qf-U^i8D)TOvD5sXfH)`2XynHa%m zw_;%7Bg{NgF?evaPG^Z#AM6F^YPGAu$$`{>-gqfjm}!OYDdImSF3M0C^E>5mTrBq& zcyb-eC59CpuW|BVZNhWx`kFBIAV_|UFyda??p%-2wa|_oqj7v*T3xz1hAii+_hHJE zfM}S(RV`1Ag7QUNiV6p6{SIoTJ!dO zhh&3qPv`l@WYyq;X#GS`nu?@P@>3Hx$O`TyMq<@$nZc4xukQ4I+n4hgUhNw@A zELrxp?}%J)e!k=nh*RzLa!;(krZn3e-=BW~_24f7QRSZJ9~(r@P_CFK4q8HHrU#cZ z0%{?0_-`P|pre*o9FTa!z-tVznYsw9tYFJ5)`u||&6yrlu$;>Ck}!e327qtovUn;^ z4Ow0mX!tiu0D>SQ?=J$mR7KTin-Ff7MB#BFX>K z47jcv?BQO+AAzfR8+~%up%%^59 zF(aGu!p~f5e}n#ObCFp=GXTEJsaoI9KX2}T)ph-Mn=A57Z@2lLsPivHVa`XJWgbva zPyV!lm z8R!`3=zRbPAqjyPfgnQ$dmxBX(N@0K^%HDQ2faJ;+x1O;KmWYW|C+P=ck7gKviwgv zL8ScO!gwO8%T3gc9{e-@2_y}|(IRkhNGUu>{L%Xyr(+z5_3gr6Wmy4!-h8|i9E1pS z;V=^!>#WC|$=BJ@v;f5`b}{_3Lt*|2vE?i*mX-{L(}3s$$55yChgrR4PtU%-% zqcwyN*w+CExlhy#{f!TcQG<{)i8x3oN2#{7N*{VFHXd zv7%U#=({oP$!3Swmf%&A$Maw%xGJv-r?zabi6u-^$0C94|KzHf0|!Feupket3jQmV zD@P~nil59~y@?LSYs{9CSlRobcB*O~O>%Fdbc{9%tl3XbwFYtNqmqy(xf$2Uw?-pQ zft1=0zrras3e&k-TQ6}m+ho@nL}iUb*c(yxrwbUOAZnJlvIom+@A(g> zX;#MWuRkv!0P!)FejH*#dQIR2=AKA_tz;930D#nH>&E)Cc~#?@fRFVXNA^*C(v}Ax zzH7q6hQMnK8^+~>o=Kt7X^l71iczD)=3=5)aA@I?hR!ZnZCW{fMg-PuO}{4g`^Plw z<#{b^{rH-r-G?-X*9@%Z_7)@~(RIFC+p$NRVO7wWQ&(b?#4_N=FXp&0noGXNV~O=% zY6{ez+onFKS6UG&m60{pHoQ4Tr4_NhpLi8V$tP@tnY2)Lf<qX_vGHjJ>SW~EYeyw=x!}!Dw|p3NDeUH5R9a7pCw_Xs$TUth zS%tG6rzvXPU#wh!_@?N-fYh%GB5viso0h7nPlHULWyE}H9@BdunaZ4b^h*n(Rb^rMeZ?ctOKhFomt0cUMP%2ignKy-rlQPX4n>J0;ebkxs^@5bb40i?%$v%PtG_z_v$wY9c2WAbxS@A zmDlMGh>}rYPI8$xijvH!jSietKIh16*`1+v|Ft-GR{nUHSSRg8uqU3mrkV~G+9K~7 zA-Y8$z*qm3F~K1bTG`bs92lwJn~EtTk7gNK4%A(KL8U{jvDA_`0~k3Yq)T>jqlySh zA_u$(P#ZQ@DV{@XN#YwzH)2PagKK^(G7yhYJ&c1@3(+unqBRJAEnI@h4Sa{)fr((% z`D_p7TWKpJ_JiDSizg3ONH1curni#mHQY)|Ye4d1}te= z-X_-tb7*|0k>56V*Y4q}M@a3#1;ZP)Q(Q??Oq8dGo0i`9{UsZM_KtAv=WdOxX|bJ~ z;M{K-NnBra*e5s)TP5@dl#hQMVIi46Y!=^z5Xk@Fr2l)C`Trz<$l04&JN{=8PGMaF zh#ro+wz2%Y?9sa$4|yG;YA+v^Ojy1|MGhEuo_UFS-E!2J@-xwofb8XmcLJMwSO^)$ zh>@|((L~0<<;OR1l?26OHc}oFJwhF=Ikqn#P#lsG#Tfm91=c=R#g7$zh!T41s0z1j zQLS0uEA6EjjbXj(;gP0a>C;4PHv?Y_h8Cn>cQAR6&3Y+-W53adOVBAddT^4zQ3=Kf zi8WAvIABtuB=9N3v71h6R}H z7vUz)vtx;MscPKmJlO}yLw1>yLX2yv=PuUy!y9_p0^qoDB*_DLo2f!|kv9i*Y^G~i zd9>~zspDqhfgmIkEqUwYbI&|P1v{2sMxkwyF7suiylTF-KANbC|%|a zL)l0~7VKY<5^6Aj&-vRY=l{1pneu;djri9G{o5&bs++lfmjJwF8R9({(ea>w!SG0c z^~D%Og!q6o5F-#q{D6DOXjtRZ>DW@yO|I}vOFb+$8=I`PHq5BU@_^}Sv|?1smkMbb zpUmFN-?w-wc@*BV9Ii8o(e=inKSwsFT)GZFwyxi&dMLl#o8tK?!Bms;(3eeHmVQF3nzc*?D_Abtb$0yL9!5R*0LASJ!DQYj*f)Ol4v+dZZi{J6 z+mGF%sNGetOM|WRq(@;rbBm1a@@@-zwP=@}(5~bCRTfnJYI0 zN@m?2dHJwJ%Fs-ln*|8hxc)~`Pe7FI!i5C%V`?a~h)#fxr+<-C5qzC~C^aB;c2Tau zeozWM94mr2<1A8`aC|8~57o7``Vki=#feNHb>o`U5JCEcp(K&z%IESVr>w3%lX2kB zCMwoQZ^l^zbnqdiUA0KG*4|7z-Yxzm+Vl}dg z-lq)(eF$vq(dX=H=;Gz2%qZb0A`Mm!TzVw&yJ|{i?8hZdG}wf5`h!6n5j>20uBrkd z8Y;8R`!J}n1~Xd>!q(t{6D>wUf+UJ-xJ{;#Wu~-rX-@(~_ng_a7cGkLvI8uE?~@Y( z$@BwAlat{qCrFSP_J*yNWNq&(Y53!{mEwNn7I$XQgd+g#D%)s7ap>g;wJoVNeQ|zw zos1b!tBxkGs~0wrk2ZEK(`B}3g{J2KZb%7ZKL?OSi_dScC|jgR=t`PC`Rl#NaKMB6 zpq!)5Wrrp`tz9DF$88F9Wyi2(mjWxHDWH7oA@rYOI~Q*{dMZU_Kfk~i`+%Crroc|9<)^&X2yn;MRsMW zQNS}yLyeOw#xhf=*!eqkEbNFvvebOEFcvd2)9I2-czZN}OHH#zTnM)|Dr;*$>@%`u z3cDA87fwv2($YCK+*g*`3MCdN?@cOud;Z);hU4Mw3cj{jxgM5O>vh|6pWn(HiYv5; z#`IYK(FCo$GO3J3=lutO_h8_5--zmYANfxRkfqev3Q(DOd5KtL!V$#~LCd?FQRaN5 zQR2b}g?2oywu!Z9`}MG~t@AtMWnJo-rwAERL|y!7a@>Qzu*TTW-&~tT2Ntm%384O! zn zHVTeSp6Qjl)Vy0mvZnpJ!N4cjyjzJqQ`BTm?6K?IzjDsRet`g{=9!V&LE$L6s*O|< z`JNFjRrhodqL1ed7EFkbv6qytS`O?NRkY~xD<8te4;KESZ^k2CKBVrxZ9Nh@8b9#w zk-~|FDQ3?AH3}S}bN+i&eP3xuR^VaOi{sYea^Bu${y~8d zrwW^WrxIo4ROxRFVnVXZO-P*_OSDhWPmrNohKSq#lp5%)DJ}D_+LTCp&;+}d@a;Bv ze`U2%R%l@_432_X85-=N2_f@r`UpN>V%@7UEfd#FJ26QQJTqA*m>)}>|5-qK!acDMgq$teSO9UqTy*;!^ zhRt#5wJG}<>WPn{#6BBERjaP#}BTW zD!qoP=tf|qmV{+siddoo6bnk>HS4_YWO--C*ws8w+F(&Vx2NF}omAw3*M+t$vs(Wa zKNs`?0wcGk{aL8>FDzOsEK);{lN`2eapen*JP`lBwq@f6ld( zDyf2L3gW^?px1Lnv6GxB1(|8eI#`eF8;6d}>q&ZEIQ2O}JdKGdR!TXom4y zm0EW`>F44z;$%rT_Punx0B?#URj=k8>CSYtMm=;^JSvr%8dIJ!7rpp&#o^l*RPYSX-KF}SRY3kJd)+cj=It>vq&vV9vw+l!RSc)N!#fgj0<9dxjY9pc<2~&~VpMjW zOkx(4I!4OzmN)Pp(lj`DlE=4>M2FU+L9 z&^xA5?jD>WxFht&0A1Q|8OdASQ{Al;m_Mnw&-;4J`z9;7ZuF!p?XWCM%=t2Yk9D(s z0ES#(A*^otL+5UZhC4uLhNg<(Wxievv*d`5mAV~K{D=;IxGO*-h~TQtt>z;E)Y4>NDl~7CZ;EZAVA6S0Dkoy5W zO!5KdyMtKrekua>5+?y=NT}erZvnXe`dEAVTygqlTG?Ll=fqw`V!jQM;ocScrbb zsJ-*y>(gx+-YU5{Y`wjPX!nd(l^KHE|CH$=^{X`Q^zkWr}uhG0CZIYrC zwP&?qmbAyV`M0)l-{C@HZBk~gZqLA}!Ku+j#B*Q*K>~#z_^-2~wiV9>I?qr15s{x% zpC~RwbOY1wsZOq6vIIu8ljh*|Vnu0BlW}G$o$`51`@S`Sez)NMbMoVV0<;ys6L0^~w3?~<%LP#x>9dGhI$egG zxeBVF?MS zsigGGn35F5;iC?^$A>&RLNjIhKr<75@kWcb?=0d_KpY&X zFbmZko~@BQx)h~G7#_5;TjNo322Mp;$rj|~zX{Ubx3Od{2Ac}#(Q%Qkg!BFl!p zHx*PylhV^(@Wlqpfg^S1LUNUFp$iEk6hUIDA!f;f06YB^XA1&HPFV0^&z7V_k#7+z z#kMSzFqF<%<^Z!YYrP|u0}drUgj{o3GWuBORb~Zs0!ET+x5S7IpD0Px_JP)xFcj4M zwj{aM2`GAP1D5?pwYPYk$cwqt35>VAG`Mouq68?bS?%pGW$W|X$4d!GdhB+Ry(CP| z9%&=d{Z)`L-Nu+i*DVyQ!l@MchYC8X#Pz6aQf0=g2iDF?nfB~CL`my4XR3#En#8^s+w^#dlQ88nVi*&t?dP97|cIM&nvPR_x2jb z%C^~Au<^0!9MF@D6dwJt6ozZBwvkg+G`f#?|oAGh_S6W zq0H;d6Bd_4O>~rzB0cTMRa`3$<$n0cSzR8U=b4D7cbiy8XCv=7&`Yvw*D>jEjV;ckL_#3^dSwI?%mYSIAvT16oto^ zHY*cn=W{hupP2!R&;fK*1B%iAVMOHjbS7@uM^}keM_%&*(`J9u_V!bFUBtsEVaVj< zcRa^>)p`*>3M{v=$t_hRG!w5tcfRYC(}_!HgB^k!)AOGwT^wp{k@^nhEz%bw?{LpHK205KN>xJ8Gs9v0WynT zQ}<}z4VQKY>B$+(Er(A`?LR(3EFS@>;A7K`08Gjgozs`USm0asf2}zvQ_h`&v_bL^ ze^4;!A(B6I9xOjUk1?bSBw)IsNk7ERhL6Om&MZ^=)nTzMb#ClrmB z?B27LZ2F_hB>WORY3$*<2|M`U6O#W!qWu2cViVUWmS){p^%Ll?c+(Fjl!f}O9x?d; zYckOPoopAkb~O5HK7*N_mEvX4E$7*3M8xJE!fC7X{ zF5xXd{vcN7JMqKFXv>F+!`dc~+E$0Tc`{^uHoG4R`33Mr7QLM*<$Hq=l9AzgJvGt3 z{c+{>-1+<+Za$!Q{ugKO*d|!FWbLMHJ1cG5m9}l$wr$(CZQHK2U1|Hxy&G45InULn zf5V(BW~_*Dj{$Xe$?o52?S|Nh%O1|*@9zH$as^2ZK@CL>xrwfZ=BB#~?2qaX4ulWo zMSN4=M+O8BO6@O&v&QaVPY%o=Y7GMRW`f7(P`#XR^g1DFqCKihwUCx0DJ}FA=D#Ap zQ6IyvBlIHNRoWHYcSl|qN>J@grCyii9Y`wvwi zx!&+mTbogFTS}s`)@l}wFy_4L#lgK13wBEtu(3#vSmD`6}rO7##TZ0-zfK48Vb6);>*L=noCov&*@8f^Jjau zR!kPIR{kY<{YsHw?%$HjltZTA2kV`qSlgsqQWlJLT(no5S%!np7WA$&)*Di|lF3*~{tx3fx4 z3eBv(<4v5l-D+1=hxO!|cT{PYou_beqqvj0Kn8m-n{-!@4zj7;iV*%x`st`&I0%@u z)({D@c)iZx1?hI5GV-eN1nefWy(DkcSf{)`=Ab620tVYH9I3Pv z{vO}lLzFC-407k3RF}l8rI{fQOu6>q>gYVgr;n&2<}_H2&1-Xru1GjF)0*+uZbJ`R{+Z8vod4H1V6UIv;ZH`bU4k{dcGv?X_lhBofMM)0pj;zom zLvwCbv&Qj@;^mtAssysyTdhLx?kg3DJ zxK=Y1UB^V9LP+;aR`{|oi?|&F94?{?#+V`If@{5f&uFs%R`_-v=I%VpH~)+rGo@B@ z+2yTS(Z}Yu_ybwx<@6fW4MPuWUlVKJ^1I_RoNVpRE>EXx-Luam+pDF^%Y%+xQykw) zs8^e`*D2qBl`(0|%pBVvX}TEfKef$V|1h8apJhxy-^tMI$CJ(QhXGP_`tQ0{tzxaX zA%fsD^Jfg=)i#CVvNK791}l)3!wCnAj3>GWPahEz zBy!`D&y|@6HfPSQL{N-Oy~X3eE0xObEz{gi?JeE!k2h?;=bOSX`AuX5cuMK)OPWte9_6{W`_nf%F_xPriap&3AzoVh32Xg*x?$r!#kJ3lXORc zq4E3pgHvjbb7zCa*-SX&5rok9EaMZ%dsqTH0I$j zRml_;+KZC;v~c9>ao>BEMI)rf>3#X_=_FiHF|3x9QZ3W$Q|~0DPc(Wht^r4&d+I+t zLctx4c}ZF>LvG5;608JNOw_Ee?AZJp^zYhf&ZGN)vG)2Svl2%qF5KNfJsYzt^wvDB z*lZ1FS)Th{4hg>T5-H_Kzf?VSZPdGHAk|FWJoMSn%TB-LyKyqxtW>C#B~L%%q~+=z zDyj-nmLXTN3@SAxos%{X`-y|>1NST|18zF)J= zWI-JyX$pX6-Q})C}qJ<%mE$*yxY4hhYfKiDmZCSq2VeCfith^8x7GCAj;kQ0WeCr zl!%&%zN;rwiFZVy>AHi%`bU(L=*;5by6h+KA#vBpzMC;WS3aF#;FmqW-5C?|=fj^LlnUm48za=^f z?S`E?G9Md+{b22I3%5-Yw>gaLuv_d-@PX6AH!qpP$@Gq((*D3!~=pcl;k3v@1)slGNuCqaNBGXSgw@MjL zze>Cy%u6zSFRz>2yj)_VKB5At{EZ%oF=j%xSlGXDN`0&mOZl*5M4TqRhJo3KhsIsO ziKQdd*KynzVy@qy|EiHej10k@KQ*%KCu#iud$hpuzpRmhX2yn=D*9IDM&?fcof)32 zuqE*ynUKrQl9#=wvP=q*)E(3TaYcD|goqtDtKzFGYk#z>@rok13-ZFCJpAw|IgybN zg*fP$PE30oXS`0jy7_v6{`3ie5Ja8N(U<6RN6?cxfzX%hOAJPZsE62vZkSWhdWZbw zZ``|CbiDEyn9huOSf@dHlHdxi(K;--Zd1*K$)}Oj_+lNDINm9<3MNpqvj`w?(G#~{ zvQZA!JXX%64)3^$9U5lC5ahgf6<3P%`P-zeh(d!(Cf?(H2Hi?xf%Yt%PcYR8)moi# zq+8AE9;*1HZN463I{ub_gDo@NhjR=ol!qNgI9~UqxuQ#i9Y#ST;{K z_!ADfpF!Fb>w*HN4lX7UUqkI-^9o4)9M;1{t^sxiGY_k^D9-J=V``q1%yJvhCw_(Z z7m`0j^kL`AZ)f_%QXmGl;t1&-|Tb6&s68~?9{-0Tq z|G_At_}H-h3yr<@vlaXyW7FyRk)!Pg(9m0x>mo?K<~pAyI6GX-xsr4bO<5R5Fns)U zKlw%+!N*^Ap-HFjvre`>b*^|ycYJ+#0OSTfsY~dy`zf?$;+%yiDk*Ek?X?AD2BLzn zkxY~^D338yqEWs088om#+faQY;Ren|;Mumu%HKvPM(o$r2$ zdi6ssh-a^j8_g0||JufW)_K#-w|?@OUAX$C1zo77cM-v!%ueZ0d2`7Qx|JpBpeaNc zg=MoJX|TzO!eeuXf;DiZ?@CE~k0Y5LMgVs5PECA38=n+3We7+1on{``*oGhq2= z2x>;bokG26VU(l6aZaZUrT7-xOd^j;JI@h{R)O@Fc>C}6-|;9Oa0);8>>dyrp6n;k zzlzgFRgyOUkGKHvANfMI|4VWDPq6_fI+;B|5A{@;X*!3uowO;u;nbzg*WfxnP4nHA2p)OfUTV*9Cx586Z@$D z31@$dW_x3_e`>!A_*+(7A^bb084M?e6XU4?f?i!%z#!dyIkPj%OK-6<$kWV&zOLnqbC^=Ot~A{k?$Pj>k&`4LmklG z*-Lno4}#WbiniR1cT_JwcOSWaU?@0B_M+Wb6z;NJK`1hm$`H3KeDuw2vT{7b+(lakLE}B&8gv z4ikrCSc4R`v#d!YoN!Ank04hS3Kmr2+*2)>AmEmfr?J2(SRp7O00>w|g0a{uv9TpC z5Jnhrb@Jp|HRod1ZIZsY1uF#9wfwcOS>yhxk+ywc5)>e&Yimo6v-|;BD^k0@w{@1i zjSlN1t9upg)NDQ<48dXTKaTe3OkH$4Ju zPyhriG?yfheD=bjSF~}f>}i?+X9kRl(VBW z?}`L-u5ELxDAQ`=Rr1N3*K}urzO7^(QBa)ep1Ja`0i0wKSasnR6RzAOl=MZ*D=htq z3S4ahThUrJocV#p?)cLOl6<+=V_4Sfb6CrGh|ACt=3J~wUeIC&tn+YaHQMU8w*h^c zGRY99qTnGj+=9lGOUi4PYHWRhh0eAp*q{XBpp=~LD?d5}>nB%>a@%nA$ql3Z2J5DX z;YVtB#bdk8$juC~b$t<9OOsP!?T?(&XZV>q$Z z8OO;jRABCg9y zPxoo7B{Pr)a0yt#T$5iWXQofr2d$;7XvdUG9niT)kWEK6*(Ah|x_y2zKZt)Mmn*sr zKyZ@mxL0rM2x>Bbw`r3m$sw3!^oBRj+<}loO{T%LDI-Cig7M;5G@xr{+HGZ*=JAr2 zrfNC_7EbfE=xQQ}I^k5yKD78)lHm%2W=z(Jut{{NTE2vk%4G8H$J|=bl}oCcMIW*D&C|=Q+qEX&}WceLBa~ozJ@#(yERk| z-SHzodfQHJWc-7+yn!ZO#dhv`c~CuvcLl>5R=B{@sDN=|wfJ==F-bGP#~OXjc0sID z%FMj{g?$YS^q!C-Zsk5n)#TJI#ndk?e@EP8RDm6(NC*z9MhS*U$rz3EC#E;= zq>j`QP=+^y_nx$BM)&eTq_gRUl87fWH5@{bDo)Mqjc-vOdJBjGARL)&=&X~#?Wqfn zA+bW(A^5S!hKR(mCHQTC*IM20K3F^npI#nO-?n;eBuMWZJcU8Mn!K#TiWDl-!>2OEy$(UnON1SZ#s}8B_HD{%$N~*UT;~nC)Fq>&uxe_r>f@ z3zV;aZ^aE9EAhL zqa2f&V7c`}*bc$|t1X-GYf@@gQS!}$=nmIAjkH<=f@4M2f{l&{X=Y-yuwcrVVZsRE ziZb*_rTJenr4N#*k@bFeH>=FTqp(zib9mec<(-PP>?d??%XUb`ssFK1=!DOwit*V8%9i9UE)3}!j zoloXhzvs5vT2!8cD%414FO6sr|SsI1_J=IpdlygNLH6ew+jb!`<9CDO4uwMxCiJQ5%&GLoOIm5Du;Ce9*R z4yQ9r5;`2X5%l7TZt{3<%>!h|a$%k7H)@7gDp`>sBVM?@QD;>bWM_-XZ{lGYHrqL} z;}isE)I;b4YO?1_%j%_al}Oo00BdA}0pPoF67RVP#;_jYH0t1#3dTHrwCT8)D~lx#QS-B*#-yjiZh$5Rbu}=7B5<`Y-q4vA&fs4Q1-u0=7L+cJo{Au%gk z8PQ!?v3=6NQ*AkS(Bt{2X#j&K}O3H?(7MR!88K~VyoYsRmJ0sm^FTjjA= zTE^DLeJ0*$50w%@gf-k>HP6cZn8X~C}_?MYS|Ffu#$Ozf5O*nc084?T82mYQF;l*kN26X)NdcS9#D_J4Vc1FCxFucAAVY_DQ7Dc~K8BXtq#`ejZkh{d4@SbkSm{Jp0z;XS z^k%pp`uIb-^*kTSkGtK>3Wgu|>O*COQHoDcMrRLo)=9_|VSp~%E( zAC&RE?+J{0$XdIT>!fU}6?%8n$y0V&&`g&576=jWuEd_yWO4HB-i~D-$9KNC;&j6n zmQvA_t8f|L7o5?BO+r@*BDEJ?UZs&tsg$vsCt=uZ)SA~o>C7cXjIq^sfwT;vD{AcM zKB}tMeAc5>1cOOJq!r11gQr5zKTi!f`PY zXo{2;bzDy-Y&zeRu~U`XCD+!>$E{|Coki0@PYq&(l@F8fiS;#ffAJfb z4={idzihhK)A5;SFTWd4540PkM_rloUZ7fuuGOfgAKqxK$EL{^<1$nHew%UR+i2>Y zsf%W#w@+8P>pTC8>!xPy8~br5@R?*A9L(33ZQU2+k}vv6SL8i^{tKHo;c`^un@_}Z z$&8O--B84H(~OU09ob`2HMBvv5S5e9D-?HsMJRU&i3Bn&XSpF5jvE!aVe}O;_=2LEf_FGYwFLpv+OQRo_dUo0{Znke&kGWQ< zFE6ei1I!Q;g@N3JKIT^9r97$M4GbAW%4pYwKD^%uOc5iAA#EZri+|W>9lb!{28^8O zg=8$CeK+Wp9_m~lCkqZ)AF|s#}j$~@>EDO+1Vyf#FSJv4|x-hmEemjRwS=&L~JJ%GRdp=Kk6b`;!zsr|Ei zP;OW?K__M=aL0Lye4q<9*yc#TX9&tR4>1EO-lbL=k0Nd5=+Kpcy%}*a@ikgXgJ!6D zq)TzOL^nQIf84y|eho|z@yffH=o8LKZM6{$?cN3&C;25J~(yI%vosB65IX&ZzXg zfMi%dre+XNkZ%xcxq>kDl=J~{T(^S!m=H*>S{j3PE{jwes!xpLPxzt^G;e?d&MN+( z*+h8I;>pSbar9(elsa^7jkDs4=o)K6Fu*aa*wl2t3jUOO9 z)DPi<6BOc)Oo!RYv(>TTuuj%jdrF@h0(6%!d_z4&2&)M(JIHvKOk?zDeN&L+2i3A~ z7(rj+sBzAi6rOliu1`hV zuF?{=pQefhWVNeLN70Jx>PY~TYMek#RYwrr zqI20ogb|sUAaf`s)hGn7iWOp-InCK!>n9mBY#6o$MM7Ap9OKSj3#d3F4Jo{M2q7E> zKYqP4{*h(=&rM2NJxgtkwjR1;qZ;2#hiF8)*W%GLu1C!JSN`-RS6TPl?Q|db*B#Zg z^L@EDo8?kAy1Xa7=j0KO6^-zByE9p{e~92()OUAdgbQxzQ#o$r##{N8ww0?j;mI<* zr?q1v*zU#B4)y!$pZ0IibKCe&=*Bku;;*%aUZTu*pYvRz_e|VP+tRQ0hF*caFNJg4 z51na0WGO(^q00vVvpttS0Gb0={GZ(w9)RUd8LYhD(wB#TP=A+X zFn>9hwpjTgL0Oc-`C0EO*5>o^R?5@*b8}9I?+%H}g(TWzt1F|Y=+nszYZqOm8i48q zC%f^KA4wO%v;0JH;jByf+9Q8WO-*Gps3CfK zW?+{wnO>Ay>`30O_uU!cB-J)(wnq4XJ-Eku?oYUN&%E~Y@F029hYOX2LKj(DdKy5f zbUpu-t28}R&UBS!(6M9OD5ei&H^Un106w8_2bg|Lm=+B?7ZY8FnmUHd`5ULOKiu5f zg>z<38rC(@y>9wTyQ2VrCe<}aroZI<2R#j}8@#HeYsYL!zR`pdc-QMrzPu0HNZ>zp zd7KOMZ$L*;wexE&JqX&b{p&Mwx!jsoH~%q+ViCIQ<&m`@YrYpKH*X8_TIa8@0>8+O zBWxS!Kn0JO?Zc56qY;J|&?7z4Ay}7)ES_$u<%ed@8ut#SC6i-B64j?dKEy(gxH`bh zjZ8cIXh&k>XKBy$8bMDodSG$v(cw?$xMIQRr&hvc&6kk$8ZPo{FeH%C5||7a zbi`#SMJ;8^M#yf#`XGviMW|kEXb#R3U|s2CtGmeG;&?Yc2oj+i10JMhv<>(H5_Pop zYCYL7z_9_`!^zn|%s+xTED(`(=qbCea{=;Z!@O#u5-q57AbdI?fSbVlT^LWhBscC| zC^bKfqez$5gdHNg2@1uexCU8S>aap$3CF0vqcedG=CO7}POgYSwkTLZq%&*x!5{Y* zpO;M?jA;)!JM2Te07>z@T;C=UuwYP^?II}>i5GF%0W>4`h{hryZC1Pe$Bdz+XrYXQ z^5(>}a0B@T25mg95}iqgHT6Rmw68$9H0C|%GtxN*m;qGNA0;9}k6A0u0OMHcmNuy2 z4OYXGrTB|(z_1%`RbOo%Ru|y!lsSbARHC zwL5_OE`}ov4kJw#Gh?ZjNQ4x6oD{l2H^HKDQQ2RBTyeTZ4eb*3Vf7NJMyYfY&xl6p z^cB(x=8`Vz<%~fOou*K{l3Xb()e`iLKQOU{V+DJv>MUL?Bx-)H@pjjwd)tBo-KjzE zz(`l{;%(1~z1{#VyT8nz5zL5=w##X2ooFxt4RAZPjTJNsuofAEG#76%X_>LMji%1F1~6Qp3qbK+;HpZA#c}F zh9Ef&j@!m-%x~VmU}1_ zq7GAc`%K3=zcaX(8|VCHgLJ!Cn=J)es4;#3aD45Z1{M*akv?X<3)UTo z?heG}qwx8cyHTq&q>xg#rll-ap56^nzF|X%2Y3G-LrhA$CsPR=h9Z)mWl^ZIjYtyb z*hP_*H(*wZ9QgB9fsAI!h`wP% z%}Umy_AQ=J@&&RnE8|Kt61TX~%^NQM;+^Ai1C5Y3Or!97KW} zy65!d50_3jEyHzy#v^M_e8L}2m|&cf2IL|SW?YbkQRCNMfW#@>Y?PtU(jZGdqVa0O z`r5O)+xh$*Zi}VLaVs_gI#P;CKl~e{lUshM!QmU3`{6WL;&Cl55 zqs}$1Bft!R0Bd}nx!;VkgDlKMjYvZ;Q4P?i9;t_5rO(=cW|L+nC{>uNi)v+%p&l@D zNCbzhWmn0bbtS^lE{7eREuy+j+)A|fM!)su090VmHUh3o+(~?xBKYqCiuX7d>tb)= zoE;1nj#~&E@{&163r6~ckOEm|`sZzSr~`3M*(SVeeCx~huT7pyo9@5eDc$)>3Vsp? zs>UB^bGBzb@Y8LfwU%Ywsq3E$t-iUl$s#^C7$0^BSDH#5Oi@Ot@4D*KdzUYX(uT8Um%XFZp18cey3 z_s!y;)4K`P?ML@jnt1y(&x*z`g@9uYxJIR)aXqgKWzpPXQL;4L|Rgz7SKxcsQXkkNLJtchRa z=dg*o>(i-9zFB!F zX18Ay6(gpjA7*+QmQzghMss!yU6e_e@RPCXbWgG{tt!T*OS0t^?R4*amv7q#cuUGn zx*bqDl)KAw%PNC-t(X3i$<2#?h{3682a|C_J|$Dzc``ZiujeC8035S4R>JbokYxv@ z(1LX8t0k{^GqP0P^7SX=4XEEYbSM(dPx@2UNU*d4@-jB<{HGy*@z^hnM)ay1pdm)E z9GH#WPNrYJOmn|4dW8-QD#sX&#<8d)p-W_tDe&f^dt`bM_@=!Ld6f_Fe6=}gE=Dct z!64DA8#5P}!a^$T<+uO<6T<%_RpIzSJ3 zLNu}Ya<77%5GY??ERw0P5Xd~3i|g^T@cW+M*z`CGu)}cAef#13QUm*J!^oad= z{sh28U?QOVuxBPH+QC5WTj%X$v$RD&*-~{ps7sbsR`^yZe3vxlp*gNys&j zQzqZj6WI_#kvi!hoUXXSKS6KdABO4GhO*9mQC_hXgstkxWyG8xw{ zN@70I6EQGnaX_=yb0HUFegW+jR$?-}?36@9@^t_*WZ=XZ0X1c?(htnn7mbRgBDS{jp0bcsxSj`0Y;{Zcf|)H&T^Zy~Gh zW(0hDW^b7-nIEIZ%)j9F5#{~Co3=mls_zGvL_27m?lFyf!3Q}}cSiGiU%39Y|EF4+ zLyq{-sj&Z}PUZi2;{PR7N!+km{EZOuExpMONeg?@lC`j6feZyJ4gbp@Az%6zVJIaW zcsY8VeacAxtw;;&n24tPD-*2J`a zD8?HyO8Bf{bxqbMahXuHn>!a$76l1eDzw!sn13=N@+psxwyuqrVg_sf*6XTu^hrTe{%O9 zp-Rg)%`0Sl?0L9PNXhb!peOeL#@-Ny^S~dBgP=DIygnJUSUi{<`}b16AGWvOG$I_GxAy>C*??a z@-%WZawQPna0N<3g}*4#~;dMMz4oQNH~zFyJHYw6w8{KwpsGy6;m z*A!}Hfc)SB9V){V&hw%atR4(x0L<4J~Wbfu`gFhRzV7M?GTMeR!%VJ^% zH^h!hqN!d5`{kD^f(`rj?BLyi_P@wO1{BIvU@DuX{rzN-l2i8d#Gpct{1kGB7Rtar zWa@SAI9wKD2|9IDjGV~^IWMSnRDVN?eh4+Wu(Dn>6;`D7&*9i521{l&5IPHed@7WQ z{(YX0SR*R$6i&s0h^BuiN-4SLtXMcEu5PN1Xh5=w(pNW^jt(e1hY-|hrR)fS7)xuX z8Kk8sTVNG8ml2#8P;)??)Y2JeDN1jV#QNp6356@YI5046?8Hsg0)gfd#jLi1^U zGk4NwcXbr)r49%~I)AzHVfe>Jdnz@bz}Ze-RB;EOHD*A%nBKCng=V4)6S9vYR9X7( z+3>i=pKTCfrbVgD0tvjgzlAcWaf&oHu})$t-Rt@xJezswF2=O0HKjynsO$+Xt;bit zi4PN8Cb?Cs@{NXC1%1Y87MoqB-}+eXFoDkN!t?1VZ11BH0a^a^)fx9lvGv|WaMJF2 z1D4+U`@!GFBjQ7|M>+z{93TU3)M@vD%6Laa!jRk(67M3>GAR{HwA?n0$@$3LMnr6o zwbOjgch-sBPS%wX@rQ4?2><4Bf%u671mYcZ4nYm)Uq^}ewxJk`W`)}0O4#^n=c3r0f2N3=^( z!K=MPD`^?jR-W>bRMO(*GgVjqa-vF@t3J)|G#O)G7n#MNyq_;8;QUi%e&{F-baXlK zz%DNR>o5g%zO=ox(pdtS(zmQgv4R|OF`RboK)EpVHMFnJA!g7k^d;Ist(LqfUiF?M z0$5aLcYxh6^ps36)ge6G3+1dnb%NKNm|w;8JMU1T8C|di14beuGv9>PSX}bW^-yd# z7E;S^rwFV-5{7J{Y-j#Lf~vJt*^CLY@s!Jqpzx8z0A6G%XrSi0n4&LFY>-%A`kag= zkOUQe;w)Jg^s5Mb_JDZ>DcL`o9#Pso_iegKAyi5O6v}!zQLlx<=s}wBUKL}cc~G-# zmJIEymNaq*WljQayHDlQjpNcDl|ymtyiuCaliG(`bEAyxEa^Htx{+_CIT)``jR$ZM z#DR6Q@Rea}!OG&|p+(1bdZ~l)dLwLyJA6~#2(u|1A(Qy8@ph^Dw&S6!-uNd4$^$B@ zOu=dTF;8n{0uI0v0+J_Wu#3b1u3bUm8!&qWZ9_4*&YSHMseQWs`WT2m2ZwTOabWO9NUW#M9>IiGP5or9d%S-=66LwVn<-v|^Sn}=0FA~1R3T078~ z@AN@~H~pY|C~sQ>keemFk@9j4Yz2J}@XBe#axMym6=f_dM6ZnvM+*0;ip_QX0 zbse$z^Zn$D^Awpw7vi2#bTWa?=<3UcIECh8q0(rbH@u!qhV;f>S1|0TiLJ z#+Og^?tt9V06F>OoRag7{(T)$ziNI3S+@aQ415h8zD|aw| z>n>r>r#-Xj$A=jr&rkm;248jOXhQ4`Uu)ub(c1bAo()T_e0?RH}fLYnAn)#l%cA zx9Sqn+*9fSdEv>)$NIgDgQWu31xpn%Gn$byxVr>BN!YU<%M?rE3;bW*o0(}1Y~2q< z`1p?$A@Be4Rs1)(&TnHRt#4y)=WO-E-~3n4-mG|Gfh>>kC4+K01%OxSmaBLPdP%2G+r?yNYQ}5O z%hBhr?dT4TN(lNE*=g{S8DhgoPDSyekKZQedATu9u~_npg6$M*16fZ4?641d;>H*C*Smn{ za8^<5c6L9v77vP>5AJ&h1CDmDfr5d8-m?ek5fc!CJyN5x2z!EAnRu0Dx>c|o{4)7V z&Rr{YgaYy)kNu!476;Vj?UD7huk8n zqX~-}z1*@|v=gCvw3EE)N$vw=Z~((N9ZM~bxHVK<)-5vH^#fbNRwI|7XEy*KdH`<% z|6Ag+{wo=H(_X8X_O?3&QiJsXZA$SK@?Up{vex>1?x*wT_{WZl`~Q4*{-djER*_cJ zRL1a;>7f<3$-k4YZf^da{|Z1@T=ECN`ZoeI2&z=D#A5=^>F{Ald%OL_0;YDG-O+?K z+txZJbYS*bo5NnM-CnF+mb}*t3DSB6%@%{rJ;3rYWR z)0k1lOxMYgw-kNVqUDdf1g%kDM^#cVit2cOiSUbL&E6k+_C*~;n6W) zPFt(?5UpKPmMO>})*>du!|_&{8)L(JmThFW`6dg0l|ngoLMnPB4)Hnu%D-tB8;dIZ zec0j0%w5%cxFg)&babsai7qTgZ93Gdmt9#5%T%YOqK+vr%*_b7E@sqBh)G9P&wMXBSMm6i#-cL=BB!lVT19O3EdqSuRXGkMIkk zn9T#pn`pC`1}9eO)Q$t zd~kj3^m?|pshjjY^7!?{^I;0?Img}h7_7_v=le1LB9YOtU)cqi7p8u6yXe|n2R%_N zA*O!y=_aY?dNI&1LyJSHJ5m$NLF+zL+IH~2H!Hvo_*9eKRulUEv1@$5J zhYYZ1gbQHT_@{I9dHOf54^0V(C@5lbYnC+=`dRjYdc(iHHNO7+H-@zK%VptbVt@?! zPje!M|7Gn^a?m&Y@2BQ}j)%+?uOnQko(NTLtTcNMik0Dq; zmQjef@FUQ+(rWwoNbu~raY&*1R7s2)ytBzS#J8ie>&~4vS)lWP+2eUa{5;cY``)iV;Wfg zwvA*3yKB1qyr&6gwbl4j4Fuh0x{n(T2Ie;#!XP2TjcT(lChU+tH16=B(R{J^vnt1&>N$G>z{^ex(!!HqdgHQ#Dj^yve#GyZV@r$SN z^7M;Jn+wEG^Z0@M^ZX4dW2%TeiQWK{+y&Qg5h(;3L`}f%8sR%LpUlx!5u`c@oRgb@ zJOooWVP6~gbvzwuFVt*Ni0gxgu?8Z^1@{n3=$}878aTwY0NQlW&+~x$kAtEAe@FbE z^Pu9NaJ3&(V4s%i?k9G0`N~~QkV+cR@_AbeDKVn>qAm;wNc`5-dMn2*7EjGM-{SBf zh;Y6>eBmsTA&fY=18o}P>Wr7)l?ur{_3!mH4+J$}DX zz!Kmo2ox7%h2@7e$f=fhE)ky(Vrz*OOzdnpaGWk(O{?r-Nk*5Et6nq+FLeVCpkx=_ ztBDfEY3ItO4ZD;>zn!sOd5!i~pvcE~`)??gPLepwbXv%yb&17uyE%eR3NFZNsfV%Z zg>8H_pyjt^-2reIwyC+1rXubcl#`TZBCfoegc#Q9DD!^&(9WJkdjo}HPpU%~DYgMa zC88jVNQ6C)AbW28Ct6E)K-K}+%?D*!&|{IBiXH^N-%V94Ybu0`NecdV6o%nT-NzcG zvJ8`I*zwjTe&g@ma^F;od{VM4SHj-T&ZCp0K(p?3&{Cp^=?-g>fOV!UZZAw9QH4Wm zjG`<$rfaEKj^GH|;2D z-$z#YGBe;vJc`iWu$X25S$_x?R0zV#$pX#2Sq>Hl~w{>lISe*)kC{__8$ zQ7BfmbVK;vwl6Y+uZj-cH`uBzQ@!h;qR4|e!hFo z6o=z6*Y&f{_3Mo5OpeFJZ6W||Ki`Bs-4*m6r5AUQ^otOO=W`|d&*Udp>Gn4SC0w~1 zeUO8f#O`9lXOx#0YtZ0JR^N&7JLs#M*lt)Ky0Vw}?&QKD6~WZlAKc_R-E6}hGBq|++A5islLzI!FmTYlU zQousnR;iwaXD@FVTe{0)NRc^*w#>pDcnTG{roKkWVwIkZw&ypR=C$GF;$^VbCcMh(sU$=!jNyoNr+qP}nwv&!++qRu_?4)CBh2628-0XMn z^VN6vJ?Fjq{xNISs+zNERjp@^--GdtAvO^Uk5!S{USXcvT7JJNg`!~@Ij#;Tpl5(Mv&Q>JWRB$?_X)1!P zsMvy9w5j3Eel9PUGP0!iuV~DDe6Bkn;-;SW$mg{CdFG9pt7H3-HmanFdopiq%>MRx zzwS4boUy6Z_-16Wc}COq@yB~Js?2eFwQQNrx<=!T9+P9XE2arqRrxVzi3%a1GYkl>U4E<&6AN(6q&I*Z7-V)e`IER^;5~H@qVHW)3PK*;~L7iL91M7 zByLWFAsJxXWbgst-|EA4tZ!ghtU5ub2m9|>o&AB^SA8?+_%mlwhuu55OUWTl6O&Lg zle2$REtzL<$@nk#O10K>s`lJHLB$|*s5K! zB^5K^s{}Gg13qYg9xR@qKPmzCSTFUYqg={D8q8oZ#X5GdibE{v^Ohkg&SDi$U7;)2 zp`k$a18SuQ6w-G7>yca+D%glpQW^~>d6ESZd( zV0r=*F}6H?8`XN+gK(SqhGo&uWSdj0a?vRiuw5j{Qfs(_PAq4srEL<3(lTVyKS{pn zB6^=yFV>^CO}tQKw9S=7Krh`7ygijOkvSQ;uTfce`a0vF8pS#$eYTe)c4fD{IS>z;y5)qj$bP zg?9TK)5>x@Sk%f@++xocR{oHu6BX(mrWF2lez?`uNauPB9g`QT_|xbQWxDH8Rde7v z^V(JBah0=E-tX(?xwXkEXnG$|DnhfHvN^J`JS5Uah6eR%zEhOEl^a_)sb^4%I2Ill zQw-8k-F^5gOecPt9|B3-hg|kjAfwW2a^Wm6MJ)4A6u|pQRGacqPf7NSK&e+{8{h@r z$mTa$M7}u!_1sL+jmE|c6PxhUwVrY2e9%B?f+yb>?S4xiY}6gInFd^+?U4DzpBIb~ zLu3nhJ~9aHK??uEdg2d`5H6>%t+nLw#9)_*y87CWn2e*d+YLl!oB+YPgaE55x=975$ttRYtM zlawF5C|qbc9JoEGoTltlZoaE|2S?>NI{imN+BodfV* z#03XtE6tRq08gSTYrL&BysK=UPUrXXw#19`VsCM@KVh4wl8v*@!@~OFE|&V}kh99n zC$4l}?hHCROS;P(N2QM66O{7u-qQoT8Q>pZ-ip`oX;4Ii&_#{)P;TE9aZFIcFouKp z?rP3%f8GA7yDGE@4@UP;WQmEK71++e9diM5YT%C_Y)6163?$}L$2ZFxt4KQfUbL>xj0>v&gAVxV8kz=}s+AT0^@K@)1&GdPY zem~12c`Y0N$iR8i4M}}gio0**S)P2amQT2MHhK5yH{I5ict!m(@j7agitP)E4oqyOmL=SxS^?TLfTXQv7g}VZY!=q54se2i^9olxqd|=QM&FCyr z+%|fo?Aoc1cwh0g8a}9u@$b=*ZhZb#P5s$$B7B7Snr)%~vzq$P?4?XS3~e23Or8J6 zUh3a%VgJ8JgbbZ6jTH=?oK2k=|CxS;DC>UZ$Tx|w29vm zER<*^VIi--lo(v4ySmmcu--)Z28FFjuD@(}qTO3zQ7l~WFLJz(Hsg4iZ(nC;^}j7Q zR1n34e77Sk+iksbR|#$?H-dCW-Bfna7sY{gq>=s<$PAl5p;D`_B&gd(6t)>`ma$JF ztgbs_7I8Z(HIPu1k@mUja^3SgxQ8Q5pkt>EjsB>ZKhp1*+f$n?_pG&SnP6hny!F_> z;&lh+yEj*`ZoOn1s-?UwYxA77Idg0y-)t$QDKNxhhJwP1WWY$>(6{+mgM<(pZ1wU> zL$j~a<}Uj3dA(ub8OfaTDKyX>ROT@ri!+bak=7VE%(cK0oMab=-Sa4w^=I(+e6!s- zV+omz@0FmXwepBXpYLA0f+7Vqg~j%mu4ma+#JR3rK;$)kgRfZk%(LpD#o7iff2cW* zpc9seshH-S=im-Q8lsjX3w-?+O4m@6vp?Df;7m?0LiDgiJz6=^nPgI0O=n z5Sqx>;C<*nig*{{IEtv2RFE&1dpFv{xqSH9C4K`PFpe$hmRgA8DaO~y^^Lm}l$8t{`X>icy0DoDuSjrW002^`3<5u! zfJxvE+-N7EO2HxWssCF9W=ov)GhZ`bqOS}tc*?wrV1bP$cMyeUOg&101L%~U@Eq-ut*nJnbrb`Y8Wtqbtq1tAlOu)V9D%U_yL&i@R^9A#VU ze-w#q9jAwfFO@YTR{F%v73TqdiNONcRCqX4BH#PI_5d9xxAfY#l7946Dj>e^er<6? zIIB}yMty&CXqugx;bG=xems4Q%ln!RXb$42Rn<47MtQq#iVya82El@H%P^T@q|Y*} zBuHh_4es~so+%IT$9h(Z{t1bg*Ob{kJl)^c-`w^eHMmbKFwlT0MyhM{Aee9SK}aYW z2pjC(3(fC41~-3Wek7_D)7vRlidkPd>0sNIOcV*MS{Ua*)tVG(p$}prCZ>;HM|rj? zOHzo2)wKrCf?4Xtp|opEzVUhPqeg+h(OAg1~@gcjaMPAzLj z?DQQ}Y8f2LMmN9vUG5 z_?NH6vSZ}T`d1n0`L|`{e}Z5C>M6vi*vc;`p!i*|ov1~22T`1a3PT}R5|npS%EbTv zo`{JAD4W-hF*g^uMG2q|yzTlkoe93mUdp*9a+xcdu zkUSTL2nkPOVmib~L>xMYf@dTX8tG^#D={`MVMr1oZj>j3XeOnRsew1?5oig?EXjj< ztO@Cil*`zBnDYxxDge(RPmpqz?eQk{;uWykX|ZlrKZT$^`bEv~EStjQiY%RGADqB@ zf2(hN zeUvrUe)PGJm4}1^ZDSl`@O&Ddd)%VPzb5VhXl<@w&8K?roa+5KZrOiYA z1D@kn2DFsxW7(0|P*AQ?30KOidT|}BSP@fN%9C4&gSrA^3T_LH`H1{S<2xF#lfCtR zE^iaE1BWWMcqnTZQnD7O_PzksF$@i9yjlsf;?@{+5#F!wdzl6pwo57wb?7YFxa z7^bUdIlbl8wj+bZP_ghPHFURR3fsMym}X11UQ) zI#I0yhMZdv!3jEuOd|DKmD!vjoofluCC0+Mo39h#VPv?D_~jKQhq;bd-*AO$$)HTMQgc2)CS?e>F-7^p3ZfP7GDNGmbVwMp0!9bF?88cSImU zlWOOep!{9l2m?lR?ebZ^?ML$Ymn@JCj=0)Cyj-9_|E_V$`X4|h^Zy?*|7%W{qGW52 z^aYw=6yT#vLM=6^Y^dE-`S&b7)r<{8BV?M`X4D|Y$92A;CJGz zGl)j@`V?7b7gI?&8RmHzSsVN--~M>yiegcd!Bk^;WDA3dB1_s}tg_Ub?otvuQ~79* z--avLKF9%I`w|Gz3Xj4j<2|fBx!e^nHav!4gYFH}5x&nT>)qvERXSak|4|pJM8uIE zP+CyFaag?^tEc7SBMzyJhC5tS!RW7@Djm|9Qe%M8?YNA&J%c>&&>sQ1U*UD6YF`&W zdjj8$XIU(P%BVruT)g!IDH z@@NNQqY3g#XBT$1qMv{E$IWv)BTp~nHm623U8AZQzu46Jq_l!<@R0nF7Vj?eG`qq< zQb=BR-A(qW#U9kSeT#nnjs&8Z#*-ttO%y)b$YJVr{3Xh3T>Z>4ld)v=9^`@)v0lbs zE{d;kLLbFn@Tc{+@b{mboc~)G{OjaYvHmNS6V`6kRof1Su<*3h#)AexYb%r!EQv`< z$vhqXf^!{rYg@~~3ip?S6-plZ5))wB*2Jp*p*BU<0E{BF-CIlm*s|fu(xX@F+`sAd`&EW;COT(lE#oZx`BWmnt2{(6cn1vHDf<4IfsVUxFRu zD=>T2+DI_Co|B05)+x4owl}s}YIlwC*4-4k_IZX)p3PirIdA49!pUh;{T&!iUxwvr zefy=;IgOg}xrfOMeIbBe7ImE!v`x*eDzAY@+7-z>j-_JLEYHcb{*1e&p2Bje^#@iS zqj1#f#zE8RBA&}ndif(96V1*Po*gtduirEgGQy$R#G)BiJtz!OoVCqv59&Ec!W4)O zwC${Q6w5TKx3#Dj+QTsf<8RSWM!Qrmuy=)V{Wiq}4<02}&^tCRnDz=2PuVxJ*kcBY zgNXrzFxDP6yO61vFSE-AC1z`+dz5*Mq1fa~;a%L0`l3;3L$OGyRF*!Bb_SrDtURps zk*u(@FxA9mdz^!JB^pf8pOSQyPI{ur)dKkAW|dq$&Y>03<*K|u;%9TWn6@7V7=UR8 zm>k%Wt;dq`U#eZKQor1ZpeI?`%K<9i#~djVUN_uS zI?1JBdLnKGgzj_%!Ud};Gh{=~y224uZHj;663f-pB3JS~k+`^{J3=&xU7f6ndQG0BE=RU-_;)d`UMnTOY;sCzfmR1lfC`k>n zOg}n>MDPblMGZ)E@Qy<6A`nrK@&d>ny+zEf%`%CpOu{LN-J;}9@!*fK*m&N^2Clde zuDCt2OukuOrj|E#t5pX3$H|9qKJRJ8x`GJQ$-%Y5xU6_pcE{6Py=MeOhj zkRp}@O+-T4U#Q1D1-Q94p@Z~|nR`%(Ap8H||1#d)2nLSX<;%`^e&F8uYC2E7ecbM& z|IkEXxie@6dHfRC!+B)A0|bOZ@*H>+?~dYxhSG>Nja4`*Wl);tTBMJ_gpFS(?_&y^ zZ%1vFqeMuA!n}l@P7qv%GpI~Hpl-Ajt-x3kw@t>6dz+5`(rwo5z*K)UsV9EG5n@s` z?1B*Slt*iQ-DFpJHhF97fK2ADXm*L6v-7(3>zTZ1ppc#kvrVGl1L#4?GjH`d8|<8LIUjZFv-@lwTTgcO4qtekVYU6GIS zVmu#KbVhBffSsvarSsA6H07cz5~bD;#5!;C3DD=i^}lIKP!GcZi=GrQx@#MY4|ugY zEEls#*`w9;x2^T0&B#Y6M)0K`$9v8&3yHExepmU zV%Nw!N~SW4*VqIAfX`4bA>_=f6J8P3=sbzSuq{f743%_d(zP@#vRhwV1+RKR{Uc zztWMIMD4#keP>tK7qwcpuP%aAY^X7Y#YN){6wA@eQT}U~YlHInWgPhQSNYadV1!rz zmbjM9In~Cw7B}1G{;f*`R}gA}vzXD?aCx9R1XO5G?rE4Ku>iT8;$kAcUhQ=AJK#kv zm}bLHzAbJRzK_>Cc&fLI$5%ju9=0_NJGdFSnZ&U0h|&|yJ&UOuMK&*Gymit1rgv7J zB6Z?(O{5lYsDQdkk15Q1DQf7FLmStTJl(BWhd-QWi7(}a%tBLR${2Fe)5PE~VHnD= z34f8=w!(y>*=FrsIEwo_!VP(3S1f&@gjjaI;99SO?Q8d1LM@pM%(}N~I~N2##G(Hn z*Put?3h5foDvD>r3Z;$!TRvvXk0V2c0t2D_ zB9!6~hft2DJTA%%YR~=}*jcsFhW_|UHRiv<>3>GV|F^&Qzj*!sN;E)1N+y9pMMM!1 zwO=)afbh$Cf?3$&Q5ce066^=vD4;iV8@q<%pTwWcqRFg`3L^p~jNZ=dnMSxLu_7WY zEgPBJ-2ahrY%<^OudLXAvoofPgws)f;2QqL zWxHO=Kgp2zr4gZP6n>E1m=6G5K$~p&6Y8+?6e^l~5qXt1+{A1MbFJblHB?e`;%sal zaS2v|63tvLT6Tm*WDiyWnd^^KJa#D7_KZgk9A`V|#IsOK^F__4q)z{JVsL2@UZ5=u ze__=gE}bkh$ScDn^A4Ky_sBYBpfpH>$9Q61G+04ov!|rM>Ft(v4GG3z5ye(>M00_NADX`DvkY(} z?P_eGg~=maGkC-Z{X-}z2zzUMvc)5t?Ve+$_{7%|h*6s(EO#7l?JN~pcZq`SHV(ak zQeDeT@+S?Bq}pi^Ar~DVzeqdzL%eYB&b`XNRg44)7DzJ71@#84?mJX|Qc)2+Z

R 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

ikFHEPDfVu=Bv$<;yZo~-n>4EQ9xvv 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 Bc`*P0 literal 0 HcmV?d00001 diff --git a/prism/src/acceptance/AcceptanceGenRabin.java b/prism/src/acceptance/AcceptanceGenRabin.java new file mode 100644 index 00000000..5ce9c6c2 --- /dev/null +++ b/prism/src/acceptance/AcceptanceGenRabin.java @@ -0,0 +1,293 @@ +//============================================================================== +// +// Copyright (c) 2014- +// Authors: +// * Joachim Klein (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + +package acceptance; + +import java.util.ArrayList; +import java.util.BitSet; + +import jdd.JDDVars; + +/** + * A Generalized Rabin acceptance condition (based on BitSet state sets) + * This is a list of GenRabinPairs, which can be manipulated with the usual List interface. + *
+ * Semantics: Each Generalized Rabin pair has state sets L and K_1,...,K_n and is accepting iff + * L is not visited infinitely often and all K_j are visited infinitely often: + * (F G !"L") & (G F "K_1") & ... & (G F "K_n"). + * + * The Generalized Rabin condition is accepting if at least one of the pairs is accepting. + */ +@SuppressWarnings("serial") +public class AcceptanceGenRabin + extends ArrayList + implements AcceptanceOmega +{ + + /** + * A pair in a Generalized Rabin acceptance condition, i.e., with + * (F G !"L") & (G F "K_1") & ... & (G F "K_n"). + **/ + public static class GenRabinPair { + /** State set L (should be visited only finitely often) */ + private BitSet L; + + /** State sets K_j (should all be visited infinitely often) */ + private ArrayList K_list; + + /** Constructor with L and K_j state sets */ + public GenRabinPair(BitSet L, ArrayList K_list) { + this.L = L; + this.K_list = K_list; + } + + /** Get the state set L */ + public BitSet getL() + { + return L; + } + + /** Get the number of K_j sets */ + public int getNumK() + { + return K_list.size(); + } + + /** Get the state set K_j */ + public BitSet getK(int j) + { + return K_list.get(j); + } + + /** Returns true if the bottom strongly connected component + * given by bscc_states is accepting for this pair. + */ + public boolean isBSCCAccepting(BitSet bscc_states) + { + if (L.intersects(bscc_states)) { + // there is some state in bscc_states that is + // forbidden by L + return false; + } + + for (BitSet K_j : K_list) { + if (!K_j.intersects(bscc_states)) { + // there is some state in bscc_states that is + // contained in K -> infinitely often visits to K + return false; + } + } + + return true; + } + + /** Generate signature for this Rabin pair and the given state. + * If the state is a member of L, returns "-pairIndex". + * If the state is a member of K, returns "+pairIndex". + * @param stateIndex the state index + * @param pairIndex the index of this Rabin pair + **/ + public String getSignatureForState(int stateIndex, int pairIndex) + { + // TODO: (What is the correct syntax here?) + /*if (L.get(stateIndex)) { + return "-"+pairIndex; + } else if (K.get(stateIndex)) { + return "+"+pairIndex; + } else { + return ""; + }*/ + return "?"; + } + + @Override + public GenRabinPair clone() + { + ArrayList newK_list = new ArrayList(); + for (BitSet K_j : K_list) + newK_list.add((BitSet) K_j.clone()); + return new GenRabinPair((BitSet)L.clone(), newK_list); + } + + public AcceptanceGeneric toAcceptanceGeneric() + { + AcceptanceGeneric genericL = new AcceptanceGeneric(AcceptanceGeneric.ElementType.FIN, (BitSet) L.clone()); + if (getNumK() == 0) { + return genericL; + } + AcceptanceGeneric genericKs = null; + for (BitSet K : K_list) { + AcceptanceGeneric genericK = new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF, (BitSet) K.clone()); + if (genericKs == null) { + genericKs = genericK; + } else { + genericKs = new AcceptanceGeneric(AcceptanceGeneric.ElementType.AND, genericKs, genericK); + } + } + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.AND, genericL, genericKs); + } + + /** Returns a textual representation of this Generalized Rabin pair. */ + @Override + public String toString() { + String s = "(" + L; + for (BitSet K_j : K_list) + s += "," + K_j; + s += ")"; + return s; + } + } + + /** Make a copy of the acceptance condition. */ + public AcceptanceGenRabin clone() + { + AcceptanceGenRabin result = new AcceptanceGenRabin(); + for (GenRabinPair pair : this) { + result.add(pair.clone()); + } + + return result; + } + + /** Returns true if the bottom strongly connected component + * given by bscc_states is accepting for this Rabin condition, + * i.e., there is a pair that accepts for bscc_states. + */ + public boolean isBSCCAccepting(BitSet bscc_states) + { + for (GenRabinPair pair : this) { + if (pair.isBSCCAccepting(bscc_states)) { + return true; + } + } + + return false; + } + + @Override + public void lift(LiftBitSet lifter) { + for (GenRabinPair pair : this) { + pair.L = lifter.lift(pair.L); + int n = pair.K_list.size(); + for (int j = 0; j < n; j++) + pair.K_list.set(j, lifter.lift(pair.K_list.get(j))); + } + } + + /** + * Returns a new Generalized Rabin acceptance condition that corresponds to the disjunction + * of this and the other Generalized Rabin acceptance condition. The GenRabinPairs are cloned, i.e., + * not shared with the argument acceptance condition. + * @param other the other GeneralizedRabin acceptance condition + * @return new AcceptanceGenRabin, disjunction of this and other + */ + public AcceptanceGenRabin or(AcceptanceGenRabin other) + { + AcceptanceGenRabin result = new AcceptanceGenRabin(); + for (GenRabinPair pair : this) { + result.add((GenRabinPair) pair.clone()); + } + for (GenRabinPair pair : other) { + result.add((GenRabinPair) pair.clone()); + } + return result; + } + + @Override + public AcceptanceGenRabinDD toAcceptanceDD(JDDVars ddRowVars) + { + return new AcceptanceGenRabinDD(this, ddRowVars); + } + + @Override + public AcceptanceGeneric toAcceptanceGeneric() + { + if (size() == 0) { + return new AcceptanceGeneric(false); + } + AcceptanceGeneric genericPairs = null; + for (GenRabinPair pair : this) { + AcceptanceGeneric genericPair = pair.toAcceptanceGeneric(); + if (genericPairs == null) { + genericPairs = genericPair; + } else { + genericPairs = new AcceptanceGeneric(AcceptanceGeneric.ElementType.OR, genericPairs, genericPair); + } + } + return genericPairs; + } + + /** + * Get the acceptance signature for state stateIndex. + **/ + public String getSignatureForState(int stateIndex) + { + String result = ""; + + for (int pairIndex=0; pairIndex (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + +package acceptance; + +import java.util.ArrayList; + +import common.IterableBitSet; + +import jdd.JDD; +import jdd.JDDNode; +import jdd.JDDVars; + +/** + * A Generalized Rabin acceptance condition (based on JDD state sets) + * This is a list of GenRabinPairs, which can be manipulated with the usual List interface. + *
+ * Semantics: Each Generalized Rabin pair has state sets L and K_1,...,K_n and is accepting iff + * L is not visited infinitely often and all K_j are visited infinitely often: + * (F G !"L") & (G F "K_1") & ... & (G F "K_n"). + * + * The Generalized Rabin condition is accepting if at least one of the pairs is accepting. + */ +@SuppressWarnings("serial") +public class AcceptanceGenRabinDD + extends ArrayList + implements AcceptanceOmegaDD +{ + + /** + * A pair in a Generalized Rabin acceptance condition, i.e., with + * (F G !"L") & (G F "K_1") & ... & (G F "K_n"). + **/ + public static class GenRabinPairDD { + /** State set L (should be visited only finitely often) */ + private JDDNode L; + + /** State sets K_j (should all be visited infinitely often) */ + private ArrayList K_list; + + /** + * Constructor with L and K_j state sets. + * Becomes owner of the references of L and K_j's. + */ + public GenRabinPairDD(JDDNode L, ArrayList K_list) + { + this.L = L; + this.K_list = K_list; + } + + /** Clear resources of the state sets */ + public void clear() + { + if (L!=null) JDD.Deref(L); + for (JDDNode K_j : K_list) + JDD.Deref(K_j); + } + + /** Get a referenced copy of the state set L. + *
[ REFS: result, DEREFS: none ] + */ + public JDDNode getL() + { + JDD.Ref(L); + return L; + } + + /** Get the number of K_j sets */ + public int getNumK() + { + return K_list.size(); + } + + /** Get a referenced copy of the state set K_j. + *
[ REFS: result, DEREFS: none ] + */ + public JDDNode getK(int j) + { + JDD.Ref(K_list.get(j)); + return K_list.get(j); + } + + /** Returns true if the bottom strongly connected component + * given by bscc_states is accepting for this pair. + *
[ REFS: none, DEREFS: none ] + */ + public boolean isBSCCAccepting(JDDNode bscc_states) + { + if (JDD.AreInterecting(L, bscc_states)) { + // there is some state in bscc_states that is + // forbidden by L + return false; + } + + for (JDDNode K_j : K_list) { + if (!JDD.AreInterecting(K_j, bscc_states)) { + // there is some state in bscc_states that is + // contained in K_j -> infinitely often visits to K_j + return false; + } + } + + return true; + } + + /** Returns a textual representation of this Rabin pair. */ + @Override + public String toString() + { + String s = "(" + L; + for (JDDNode K_j : K_list) + s += "," + K_j; + s += ")"; + return s; + } + } + + /** + * Constructor, from a BitSet-based AcceptanceGenRabin. + * + * @param acceptance the BitSet-based acceptance condition + * @param ddRowVars JDDVars of the row variables corresponding to the bits in the bit set + */ + public AcceptanceGenRabinDD(AcceptanceGenRabin acceptance, JDDVars ddRowVars) + { + for (AcceptanceGenRabin.GenRabinPair pair : acceptance) { + // get BDD based newL and newK from the bit sets + JDDNode newL = JDD.Constant(0); + for (int i : IterableBitSet.getSetBits(pair.getL())) { + newL = JDD.SetVectorElement(newL, ddRowVars, i, 1.0); + } + + ArrayList newK_list = new ArrayList(); + int n = pair.getNumK(); + for (int j = 0; j < n; j++) { + JDDNode newK_j = JDD.Constant(0); + for (int i : IterableBitSet.getSetBits(pair.getK(j))) { + newK_j = JDD.SetVectorElement(newK_j, ddRowVars, i, 1.0); + } + newK_list.add(newK_j); + } + + GenRabinPairDD newPair = new GenRabinPairDD(newL, newK_list); + this.add(newPair); + } + } + + @Override + public boolean isBSCCAccepting(JDDNode bscc_states) + { + for (GenRabinPairDD pair : this) { + if (pair.isBSCCAccepting(bscc_states)) { + return true; + } + } + return false; + } + + @Override + public void clear() + { + for (GenRabinPairDD pair : this) { + pair.clear(); + } + super.clear(); + } + + /** Returns a textual representation of this acceptance condition. */ + @Override + public String toString() + { + String result = ""; + for (GenRabinPairDD pair : this) { + result += pair.toString(); + } + return result; + } + + @Override + public String getSizeStatistics() + { + return size() + " Generalized Rabin pairs"; + } + + @Override + public AcceptanceType getType() + { + return AcceptanceType.GENERALIZED_RABIN; + } + + @Override + public String getTypeAbbreviated() + { + return "GR"; + } + + @Override + public String getTypeName() + { + return "Generalized Rabin"; + } +} diff --git a/prism/src/acceptance/AcceptanceGeneric.java b/prism/src/acceptance/AcceptanceGeneric.java new file mode 100644 index 00000000..f6b662c3 --- /dev/null +++ b/prism/src/acceptance/AcceptanceGeneric.java @@ -0,0 +1,275 @@ +//============================================================================== +// +// Copyright (c) 2014- +// Authors: +// * Joachim Klein (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + +package acceptance; + +import java.util.BitSet; + +import jdd.JDDVars; + +/** + * A generic acceptance condition (based on BitSet state sets). + * This is an AST of a boolean formula (conjunction and disjunction) over + * atoms of the form Inf(states), Inf(!states), Fin(states) and Fin(!states). + *
+ * Semantics: + * Inf(states) <=> G F states + * Inf(!states) <=> G F !states + * Fin(states) <=> F G !states + * Fin(!states) <=> F G states + */ +public class AcceptanceGeneric implements AcceptanceOmega { + + /** The types of elements in the AST */ + public enum ElementType { + FALSE, + TRUE, + + OR, + AND, + + INF, + FIN, + INF_NOT, + FIN_NOT; + } + + /** The type of this node in the AST */ + private ElementType kind; + + /** The left child (if it exists) */ + private AcceptanceGeneric left = null; + + /** The right child (if it exists) */ + private AcceptanceGeneric right = null; + + /** The set of states (if this is one of INF, FIN, INF_NOT, FIN_NOT) */ + private BitSet states = null; + + /** + * Constructor for TRUE or FALSE + * @param value true or false? + */ + public AcceptanceGeneric(boolean value) { + kind = value ? ElementType.TRUE : ElementType.FALSE; + } + + /** + * Constructor for an INF, FIN, INF_NOT or FIN_NOT element. + */ + public AcceptanceGeneric(ElementType kind, BitSet states) { + this.kind = kind; + + this.states = states; + } + + /** + * Constructor for a binary operator (AND/OR). + * @param kind + * @param left + * @param right + */ + public AcceptanceGeneric(ElementType kind, AcceptanceGeneric left, AcceptanceGeneric right) { + this.kind = kind; + this.left = left; + this.right = right; + } + + /** Get the ElementType of this AST element */ + public ElementType getKind() { + return kind; + } + + /** Get the left child of this AST element */ + public AcceptanceGeneric getLeft() { + return left; + } + + /** Get the right child of this AST element */ + public AcceptanceGeneric getRight() { + return right; + } + + /** Get the state set of this element (if kind is one of INF, FIN, INF_NOT, FIN_NOT). + */ + public BitSet getStates() { + return states; + } + + @Override + public boolean isBSCCAccepting(BitSet bscc) { + switch(kind) { + case TRUE: return true; + case FALSE: return false; + case AND: return left.isBSCCAccepting(bscc) && right.isBSCCAccepting(bscc); + case OR: return left.isBSCCAccepting(bscc) || right.isBSCCAccepting(bscc); + case INF: + // bscc |= G F states? + // there exists a state in bscc and states + return bscc.intersects(states); + case INF_NOT: { + // bscc_state |= G F !states? + // the BSCC does not consist only of states + BitSet bs = (BitSet) bscc.clone(); + bs.andNot(states); + return !bs.isEmpty(); + } + case FIN: { + // bscc |= F G !states? + // <=> there exists no states state in BSCC + return !bscc.intersects(states); + } + case FIN_NOT: { + // bscc |= F G states? + // the BSCC consists entirely of states + BitSet bs = (BitSet) bscc.clone(); + bs.and(states); + return bs.equals(bscc); + } + } + return false; + } + + @Override + public String getSignatureForState(int i) { + return ""; + } + + @Override + public String getSizeStatistics() { + return "generic acceptance with " + countAcceptanceSets() + " acceptance sets"; + } + + @Override + public AcceptanceType getType() { + return AcceptanceType.GENERIC; + } + + @Override + public String getTypeAbbreviated() { + return ""; + } + + @Override + public String getTypeName() { + return "generic"; + } + + @Override + public AcceptanceGeneric clone() { + switch (kind) { + case FIN: + case FIN_NOT: + case INF: + case INF_NOT: + return new AcceptanceGeneric(kind, states); + case AND: + case OR: + return new AcceptanceGeneric(kind, left.clone(), right.clone()); + case FALSE: + return new AcceptanceGeneric(false); + case TRUE: + return new AcceptanceGeneric(true); + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance condition"); + } + + @Override + public void lift(LiftBitSet lifter) { + switch(kind) { + case TRUE: + case FALSE: + return; + case INF: + case INF_NOT: + case FIN: + case FIN_NOT: + states = lifter.lift(states); + return; + case AND: + case OR: + left.lift(lifter); + right.lift(lifter); + return; + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance condition"); + } + + /** Count the number of state sets in this acceptance condition */ + public int countAcceptanceSets() { + switch(kind) { + case FALSE: + case TRUE: + return 0; + case INF: + case FIN: + case INF_NOT: + case FIN_NOT: + return 1; + case OR: + case AND: + return left.countAcceptanceSets() + right.countAcceptanceSets(); + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance condition"); + } + + @Override + public AcceptanceOmegaDD toAcceptanceDD(JDDVars ddRowVars) { + return new AcceptanceGenericDD(this, ddRowVars); + } + + @Override + public AcceptanceGeneric toAcceptanceGeneric() + { + return this.clone(); + } + + @Override + public String toString() { + switch(kind) { + case TRUE: + return "true"; + case FALSE: + return "false"; + case AND: + return "(" + left.toString() + " & " + right.toString() + ")"; + case OR: + return "(" + left.toString() + " | " + right.toString() + ")"; + case INF: + return "Inf(" + states.toString() + ")"; + case FIN: + return "Fin(" + states.toString() + ")"; + case INF_NOT: + return "Inf(!" + states.toString() + ")"; + case FIN_NOT: + return "Fin(!" + states.toString() + ")"; + default: + return null; + } + } + +} diff --git a/prism/src/acceptance/AcceptanceGenericDD.java b/prism/src/acceptance/AcceptanceGenericDD.java new file mode 100644 index 00000000..3c7e7c67 --- /dev/null +++ b/prism/src/acceptance/AcceptanceGenericDD.java @@ -0,0 +1,206 @@ +//============================================================================== +// +// Copyright (c) 2014- +// Authors: +// * Joachim Klein (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + +package acceptance; + +import common.IterableBitSet; +import acceptance.AcceptanceGeneric.ElementType; +import jdd.JDD; +import jdd.JDDNode; +import jdd.JDDVars; + +/** + * A generic acceptance condition (based on JDD state sets). + * This is an AST of a boolean formula (conjunction and disjunction) over + * atoms of the form Inf(states), Inf(!states), Fin(states) and Fin(!states). + *
+ * Semantics: + * Inf(states) <=> G F states + * Inf(!states) <=> G F !states + * Fin(states) <=> F G !states + * Fin(!states) <=> F G states + */ +public class AcceptanceGenericDD implements AcceptanceOmegaDD { + + private ElementType kind; + private AcceptanceGenericDD left = null; + private AcceptanceGenericDD right = null; + private JDDNode states = null; + + public AcceptanceGenericDD(AcceptanceGeneric acceptance, JDDVars ddRowVars) + { + switch(acceptance.getKind()) { + case AND: + case OR: + kind = acceptance.getKind(); + left = (AcceptanceGenericDD) acceptance.getLeft().toAcceptanceDD(ddRowVars); + right = (AcceptanceGenericDD) acceptance.getRight().toAcceptanceDD(ddRowVars); + return; + case TRUE: + kind = ElementType.TRUE; + return; + case FALSE: + kind = ElementType.FALSE; + return; + case INF: + case INF_NOT: + case FIN: + case FIN_NOT: + kind = acceptance.getKind(); + states = JDD.Constant(0); + for (int i : IterableBitSet.getSetBits(acceptance.getStates())) { + states = JDD.SetVectorElement(states, ddRowVars, i, 1.0); + } + return; + } + throw new UnsupportedOperationException("Unsupported operatator in generic acceptance condition"); + } + + /** Get the ElementType of this AST element */ + public ElementType getKind() + { + return kind; + } + + /** Get the left child of this AST element */ + public AcceptanceGenericDD getLeft() + { + return left; + } + + /** Get the right child of this AST element */ + public AcceptanceGenericDD getRight() + { + return right; + } + + /** Get a referenced copy of the state sets (if kind is one of INF, FIN, INF_NOT, FIN_NOT). + *
[ REFS: result, DEREFS: none ] + */ + public JDDNode getStates() + { + if (states != null) { + JDD.Ref(states); + } + return states; + } + + @Override + public boolean isBSCCAccepting(JDDNode bscc) + { + switch(kind) { + case TRUE: + return true; + case FALSE: + return false; + case AND: + return left.isBSCCAccepting(bscc) && right.isBSCCAccepting(bscc); + case OR: + return left.isBSCCAccepting(bscc) || right.isBSCCAccepting(bscc); + case INF: + // bscc |= G F states? + // there exists a state in bscc and states + return JDD.AreInterecting(states, bscc); + case INF_NOT: + // bscc_state |= G F !states? + // the BSCC intersects Not(states) + JDD.Ref(states); + return JDD.AreInterecting(JDD.Not(states), bscc); + case FIN: + // bscc |= F G !states? + // the BSCC consists only of !states + return !JDD.AreInterecting(states, bscc); + case FIN_NOT: + // bscc |= F G states? + // the BSCC consists entirely of states + JDD.Ref(states); + return !JDD.AreInterecting(JDD.Not(states), bscc); + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance expression"); + } + + @Override + public String getSizeStatistics() { + return "generic acceptance with " + countAcceptanceSets() + " acceptance sets"; + } + + @Override + public AcceptanceType getType() { + return AcceptanceType.GENERIC; + } + + @Override + public String getTypeAbbreviated() { + return ""; + } + + @Override + public String getTypeName() { + return "generic"; + } + + @Override + public void clear() { + switch (kind) { + case TRUE: + case FALSE: + return; + case AND: + case OR: + left.clear(); + right.clear(); + return; + case INF_NOT: + case FIN: + case FIN_NOT: + case INF: + if (states != null) JDD.Deref(states); + states = null; + return; + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance expression"); + } + + /** Count the number of state sets in this acceptance condition */ + public int countAcceptanceSets() { + switch(kind) { + case FALSE: + case TRUE: + return 0; + case INF: + case FIN: + case INF_NOT: + case FIN_NOT: + return 1; + case OR: + case AND: + return left.countAcceptanceSets() + right.countAcceptanceSets(); + } + throw new UnsupportedOperationException("Unsupported operator in generic acceptance expression"); + } + +} diff --git a/prism/src/acceptance/AcceptanceOmega.java b/prism/src/acceptance/AcceptanceOmega.java index d5bf48ca..e55b1cbf 100644 --- a/prism/src/acceptance/AcceptanceOmega.java +++ b/prism/src/acceptance/AcceptanceOmega.java @@ -82,4 +82,9 @@ public interface AcceptanceOmega extends Cloneable * @param ddRowVars JDDVars of the row variables corresponding to the bits in the bitset */ public AcceptanceOmegaDD toAcceptanceDD(JDDVars ddRowVars); + + /** + * Convert this acceptance condition to an AcceptanceGeneric condition. + */ + public AcceptanceGeneric toAcceptanceGeneric(); } diff --git a/prism/src/acceptance/AcceptanceRabin.java b/prism/src/acceptance/AcceptanceRabin.java index 7c855c41..94f42b48 100644 --- a/prism/src/acceptance/AcceptanceRabin.java +++ b/prism/src/acceptance/AcceptanceRabin.java @@ -96,6 +96,16 @@ public class AcceptanceRabin return false; } + public AcceptanceGeneric toAcceptanceGeneric() + { + AcceptanceGeneric genericL = new AcceptanceGeneric(AcceptanceGeneric.ElementType.FIN, (BitSet)L.clone()); + AcceptanceGeneric genericK = new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF, (BitSet)K.clone()); + + // F G ! "L" & G F "K" + // <=> Fin(L) & Inf(K) + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.AND, genericL, genericK); + } + /** Generate signature for this Rabin pair and the given state. * If the state is a member of L, returns "-pairIndex". * If the state is a member of K, returns "+pairIndex". @@ -204,6 +214,24 @@ public class AcceptanceRabin return new AcceptanceRabinDD(this, ddRowVars); } + @Override + public AcceptanceGeneric toAcceptanceGeneric() + { + if (size() == 0) { + return new AcceptanceGeneric(false); + } + AcceptanceGeneric genericPairs = null; + for (RabinPair pair : this) { + AcceptanceGeneric genericPair = pair.toAcceptanceGeneric(); + if (genericPairs == null) { + genericPairs = genericPair; + } else { + genericPairs = new AcceptanceGeneric(AcceptanceGeneric.ElementType.OR, genericPairs, genericPair); + } + } + return genericPairs; + } + /** * Get the acceptance signature for state stateIndex. **/ diff --git a/prism/src/acceptance/AcceptanceRabinDD.java b/prism/src/acceptance/AcceptanceRabinDD.java index b657bfd2..035b6a9b 100644 --- a/prism/src/acceptance/AcceptanceRabinDD.java +++ b/prism/src/acceptance/AcceptanceRabinDD.java @@ -98,6 +98,7 @@ public class AcceptanceRabinDD /** Returns true if the bottom strongly connected component * given by bscc_states is accepting for this pair. + *
[ REFS: none, DEREFS: none ] */ public boolean isBSCCAccepting(JDDNode bscc_states) { @@ -149,10 +150,7 @@ public class AcceptanceRabinDD } } - /** Returns true if the bottom strongly connected component - * given by bscc_states is accepting for this Rabin condition, - * i.e., there is a pair that accepts for bscc_states. - */ + @Override public boolean isBSCCAccepting(JDDNode bscc_states) { for (RabinPairDD pair : this) { diff --git a/prism/src/acceptance/AcceptanceReach.java b/prism/src/acceptance/AcceptanceReach.java index 96774472..74af4192 100644 --- a/prism/src/acceptance/AcceptanceReach.java +++ b/prism/src/acceptance/AcceptanceReach.java @@ -28,8 +28,6 @@ package acceptance; import java.util.BitSet; -import acceptance.AcceptanceRabin.RabinPair; - import jdd.JDDVars; /** @@ -91,6 +89,12 @@ public class AcceptanceReach implements AcceptanceOmega return new AcceptanceReachDD(this, ddRowVars); } + @Override + public AcceptanceGeneric toAcceptanceGeneric() + { + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF, (BitSet) goalStates.clone()); + } + @Override public String getSignatureForState(int i) { diff --git a/prism/src/acceptance/AcceptanceReachDD.java b/prism/src/acceptance/AcceptanceReachDD.java index 18c85c85..134525ec 100644 --- a/prism/src/acceptance/AcceptanceReachDD.java +++ b/prism/src/acceptance/AcceptanceReachDD.java @@ -1,9 +1,9 @@ -package acceptance; //============================================================================== // //Copyright (c) 2014- //Authors: -//* Joachim Klein (TU Dresden) +// * Joachim Klein (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) // //------------------------------------------------------------------------------ // @@ -25,6 +25,8 @@ package acceptance; // //============================================================================== +package acceptance; + import common.IterableBitSet; import jdd.JDD; import jdd.JDDNode; diff --git a/prism/src/acceptance/AcceptanceStreett.java b/prism/src/acceptance/AcceptanceStreett.java index 51dae747..852ea066 100644 --- a/prism/src/acceptance/AcceptanceStreett.java +++ b/prism/src/acceptance/AcceptanceStreett.java @@ -98,6 +98,17 @@ public class AcceptanceStreett } } + public AcceptanceGeneric toAcceptanceGeneric() + { + AcceptanceGeneric genericR = new AcceptanceGeneric(AcceptanceGeneric.ElementType.FIN, (BitSet)R.clone()); + AcceptanceGeneric genericG = new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF, (BitSet)G.clone()); + // G F "R" -> G F "G" + // <=> ! G F "R" | G F "G" + // <=> F G ! "R" | G F "G" + // <=> Fin(R) | Inf(G) + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.OR, genericR, genericG); + } + /** Generate signature for this Streett pair and the given state. * If the state is a member of R, returns "-pairIndex". * If the state is a member of G, returns "+pairIndex". @@ -206,6 +217,24 @@ public class AcceptanceStreett return new AcceptanceStreettDD(this, ddRowVars); } + @Override + public AcceptanceGeneric toAcceptanceGeneric() + { + if (size() == 0) { + return new AcceptanceGeneric(true); + } + AcceptanceGeneric genericPairs = null; + for (StreettPair pair : this) { + AcceptanceGeneric genericPair = pair.toAcceptanceGeneric(); + if (genericPairs == null) { + genericPairs = genericPair; + } else { + genericPairs = new AcceptanceGeneric(AcceptanceGeneric.ElementType.AND, genericPairs, genericPair); + } + } + return genericPairs; + } + /** * Get the acceptance signature for state stateIndex. **/ diff --git a/prism/src/acceptance/AcceptanceStreettDD.java b/prism/src/acceptance/AcceptanceStreettDD.java index b2075d93..a643f022 100644 --- a/prism/src/acceptance/AcceptanceStreettDD.java +++ b/prism/src/acceptance/AcceptanceStreettDD.java @@ -98,6 +98,7 @@ public class AcceptanceStreettDD /** Returns true if the bottom strongly connected component * given by bscc_states is accepting for this pair. + *
[ REFS: none, DEREFS: none ] */ public boolean isBSCCAccepting(JDDNode bscc_states) { diff --git a/prism/src/acceptance/AcceptanceType.java b/prism/src/acceptance/AcceptanceType.java index a3d53730..2901f1dd 100644 --- a/prism/src/acceptance/AcceptanceType.java +++ b/prism/src/acceptance/AcceptanceType.java @@ -3,6 +3,7 @@ // Copyright (c) 2014- // Authors: // * Joachim Klein (TU Dresden) +// * Dave Parker (University of Birmingham/Oxford) // //------------------------------------------------------------------------------ // @@ -32,7 +33,9 @@ package acceptance; public enum AcceptanceType { RABIN, STREETT, - REACH; + REACH, + GENERALIZED_RABIN, + GENERIC; /** * Check whether an array of AcceptanceTypes contains a specific element. diff --git a/prism/src/explicit/DTMCModelChecker.java b/prism/src/explicit/DTMCModelChecker.java index a524d3a7..fd010195 100644 --- a/prism/src/explicit/DTMCModelChecker.java +++ b/prism/src/explicit/DTMCModelChecker.java @@ -76,7 +76,8 @@ public class DTMCModelChecker extends ProbModelChecker // Build product of Markov chain and automaton AcceptanceType[] allowedAcceptance = { AcceptanceType.RABIN, - AcceptanceType.REACH + AcceptanceType.REACH, + AcceptanceType.GENERIC }; product = mcLtl.constructProductMC(this, (DTMC)model, expr, statesOfInterest, allowedAcceptance); diff --git a/prism/src/explicit/LTLModelChecker.java b/prism/src/explicit/LTLModelChecker.java index ca15a933..cb6cce1b 100644 --- a/prism/src/explicit/LTLModelChecker.java +++ b/prism/src/explicit/LTLModelChecker.java @@ -54,6 +54,7 @@ import prism.PrismFileLog; import prism.PrismLangException; import prism.PrismLog; import prism.PrismNotSupportedException; +import acceptance.AcceptanceGenRabin; import acceptance.AcceptanceOmega; import acceptance.AcceptanceRabin; import acceptance.AcceptanceType; @@ -594,6 +595,8 @@ public class LTLModelChecker extends PrismComponent { if (acceptance instanceof AcceptanceRabin) { return findAcceptingECStatesForRabin(model, (AcceptanceRabin) acceptance); + } else if (acceptance instanceof AcceptanceGenRabin) { + return findAcceptingECStatesForGeneralizedRabin(model, (AcceptanceGenRabin) acceptance); } throw new PrismNotSupportedException("Computing end components for acceptance type '"+acceptance.getTypeName()+"' currently not supported (explicit engine)."); } @@ -634,6 +637,53 @@ public class LTLModelChecker extends PrismComponent return allAcceptingStates; } + /** + * Find the set of states in accepting end components (ECs) in a nondeterministic model wrt a Generalized Rabin acceptance condition. + * @param model The model + * @param acceptance The acceptance condition + */ + public BitSet findAcceptingECStatesForGeneralizedRabin(NondetModel model, AcceptanceGenRabin acceptance) throws PrismException + { + BitSet allAcceptingStates = new BitSet(); + int numStates = model.getNumStates(); + + // Go through the GR acceptance pairs (L_i, K_i_1, ..., K_i_n) + for (int i = 0; i < acceptance.size(); i++) { + + // Find model states *not* satisfying L_i + BitSet bitsetLi = acceptance.get(i).getL(); + BitSet statesLi_not = new BitSet(); + for (int s = 0; s < numStates; s++) { + if (!bitsetLi.get(s)) { + statesLi_not.set(s); + } + } + // Skip pairs with empty !L_i + if (statesLi_not.cardinality() == 0) + continue; + // Compute maximum end components (MECs) in !L_i + ECComputer ecComputer = ECComputer.createECComputer(this, model); + ecComputer.computeMECStates(statesLi_not); + List mecs = ecComputer.getMECStates(); + // Check which MECs contain a state from each K_i_j + int n = acceptance.get(i).getNumK(); + for (BitSet mec : mecs) { + boolean allj = true; + for (int j = 0; j < n; j++) { + if (!mec.intersects(acceptance.get(i).getK(j))) { + allj = false; + break; + } + } + if (allj) { + allAcceptingStates.or(mec); + } + } + } + + return allAcceptingStates; + } + /** Lift the acceptance condition from the automaton to the product states. */ private AcceptanceOmega liftAcceptance(final LTLProduct product, AcceptanceOmega acceptance) { diff --git a/prism/src/explicit/MDPModelChecker.java b/prism/src/explicit/MDPModelChecker.java index b40413d6..3931ec70 100644 --- a/prism/src/explicit/MDPModelChecker.java +++ b/prism/src/explicit/MDPModelChecker.java @@ -84,6 +84,7 @@ public class MDPModelChecker extends ProbModelChecker AcceptanceType[] allowedAcceptance = { AcceptanceType.RABIN, + AcceptanceType.GENERALIZED_RABIN, AcceptanceType.REACH }; diff --git a/prism/src/jltl2ba/APSet.java b/prism/src/jltl2ba/APSet.java index fdc8ec68..1d215c3f 100644 --- a/prism/src/jltl2ba/APSet.java +++ b/prism/src/jltl2ba/APSet.java @@ -45,7 +45,7 @@ public class APSet implements Iterable { * @param name the name of the AP * @return the index of the added AP */ - int addAP(String name) { + public int addAP(String name) { int i = vector.indexOf(name); if (i == -1) { diff --git a/prism/src/jltl2ba/SimpleLTL.java b/prism/src/jltl2ba/SimpleLTL.java index 2585417f..08c24c26 100644 --- a/prism/src/jltl2ba/SimpleLTL.java +++ b/prism/src/jltl2ba/SimpleLTL.java @@ -587,7 +587,49 @@ public class SimpleLTL { } return rv; } - + + /** + * Returns an equivalent SimpleLTL formula with a + * basic set of operators: + * AP, TRUE, FALSE, AND, OR, NOT, UNTIL, FINALLY, GLOBALLY, NEXT + */ + public SimpleLTL toBasicOperators() { + switch (kind) { + case AP: + case TRUE: + case FALSE: + return this; + case AND: + case OR: + case UNTIL: + return new SimpleLTL(kind, left.toBasicOperators(), right.toBasicOperators()); + case FINALLY: + case GLOBALLY: + case NEXT: + case NOT: + return new SimpleLTL(kind, left.toBasicOperators()); + case EQUIV: { + SimpleLTL newLeft = left.toBasicOperators(); + SimpleLTL newRight = right.toBasicOperators(); + SimpleLTL bothTrue = new SimpleLTL(LTLType.AND, newLeft, newRight); + SimpleLTL bothFalse = new SimpleLTL(LTLType.AND, + new SimpleLTL(LTLType.NOT, newLeft), + new SimpleLTL(LTLType.NOT, newRight)); + return new SimpleLTL(LTLType.OR, bothTrue, bothFalse); + } + case IMPLIES: { + SimpleLTL newLeft = new SimpleLTL(LTLType.NOT, left.toBasicOperators()); + return new SimpleLTL(LTLType.OR, newLeft, right.toBasicOperators()); + } + case RELEASE: { + SimpleLTL newLeft = new SimpleLTL(LTLType.NOT, left.toBasicOperators()); + SimpleLTL newRight = new SimpleLTL(LTLType.NOT, right.toBasicOperators()); + return new SimpleLTL(LTLType.UNTIL, newLeft, newRight); + } + } + throw new UnsupportedOperationException("Unknown operator in SimpleLTL"); + } + public SimpleLTL negate() { return new SimpleLTL(LTLType.NOT, this); } @@ -937,6 +979,202 @@ public class SimpleLTL { } } + /** + * Renames the atomic propositions apparing in the formula that + * start with {@code prefixFrom}. For these, the prefix is replaced + * by prefixTo. For example, with prefixFrom = "L" and prefixTo = "p", + * "L3" will be renamed to "p3", but "T2" will be left as-is. + */ + public void renameAP(String prefixFrom, String prefixTo) + { + switch (kind) { + case AP: + if (ap.startsWith(prefixFrom)) { + ap = prefixTo + ap.substring(prefixFrom.length()); + } + return; + case AND: + case OR: + case EQUIV: + case IMPLIES: + case RELEASE: + case UNTIL: + left.renameAP(prefixFrom, prefixTo); + right.renameAP(prefixFrom, prefixTo); + return; + case FINALLY: + case GLOBALLY: + case NEXT: + case NOT: + left.renameAP(prefixFrom, prefixTo); + return; + case TRUE: + case FALSE: + return; + } + throw new UnsupportedOperationException("Unknown operator in SimpleLTL formula: "+this); + } + + /** + * Render this LTL formula in LBT syntax, i.e., in prefix notation. + */ + public String toStringLBT() + { + String rv = ""; + + switch (kind) { + case OR: + rv = "| " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case AND: + rv = "& " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case UNTIL: + rv = "U " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case RELEASE: + rv = "V " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case IMPLIES: + rv = "i " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case EQUIV: + rv = "e " + left.toStringLBT() + " " + right.toStringLBT(); + break; + case NEXT: + rv = "X " + left.toStringLBT(); + break; + case FINALLY: + rv = "F " + left.toStringLBT(); + break; + case GLOBALLY: + rv = "G " + left.toStringLBT(); + break; + case NOT: + rv = "! " + left.toStringLBT(); + break; + case FALSE: + rv = "f"; + break; + case TRUE: + rv = "t"; + break; + case AP: + rv = ap; + break; + default: + rv = null; + } + return rv; + } + + /** + * Render this LTL formula in Spin syntax. + */ + public String toStringSpin() + { + String rv = ""; + + switch (kind) { + case OR: + rv = "(" + left.toStringSpin() + ") || (" + right.toStringSpin() + ")"; + break; + case AND: + rv = "(" + left.toStringSpin() + ") && (" + right.toStringSpin() + ")"; + break; + case UNTIL: + rv = "(" + left.toStringSpin() + ") U (" + right.toStringSpin() + ")"; + break; + case RELEASE: + rv = "(" + left.toStringSpin() + ") V (" + right.toStringSpin() + ")"; + break; + case IMPLIES: + rv = "(" + left.toStringSpin() + ") -> (" + right.toStringSpin() + ")"; + break; + case EQUIV: + rv = "(" + left.toStringSpin() + ") <-> (" + right.toStringSpin() + ")"; + break; + case NEXT: + rv = "X (" + left.toStringSpin() + ")"; + break; + case FINALLY: + rv = "<> (" + left.toStringSpin() + ")"; + break; + case GLOBALLY: + rv = "[] (" + left.toStringSpin() + ")"; + break; + case NOT: + rv = "! (" + left.toStringSpin() + ")"; + break; + case FALSE: + rv = "false"; + break; + case TRUE: + rv = "true"; + break; + case AP: + rv = ap; + break; + default: + rv = null; + } + return rv; + } + + + /** + * Render this LTL formula in Spot syntax. + */ + public String toStringSpot() + { + String rv = ""; + + switch (kind) { + case OR: + rv = "(" + left.toStringSpot() + ") | (" + right.toStringSpot() + ")"; + break; + case AND: + rv = "(" + left.toStringSpot() + ") & (" + right.toStringSpot() + ")"; + break; + case UNTIL: + rv = "(" + left.toStringSpot() + ") U (" + right.toStringSpot() + ")"; + break; + case RELEASE: + rv = "(" + left.toStringSpot() + ") R (" + right.toStringSpot() + ")"; + break; + case IMPLIES: + rv = "(" + left.toStringSpot() + ") -> (" + right.toStringSpot() + ")"; + break; + case EQUIV: + rv = "(" + left.toStringSpot() + ") <-> (" + right.toStringSpot() + ")"; + break; + case NEXT: + rv = "X (" + left.toStringSpot() + ")"; + break; + case FINALLY: + rv = "F (" + left.toStringSpot() + ")"; + break; + case GLOBALLY: + rv = "G (" + left.toStringSpot() + ")"; + break; + case NOT: + rv = "! (" + left.toStringSpot() + ")"; + break; + case FALSE: + rv = "false"; + break; + case TRUE: + rv = "true"; + break; + case AP: + rv = ap; + break; + default: + rv = null; + } + return rv; + } + public NBA toNBA(APSet apset) throws PrismException { Alternating a = new Alternating(this, apset); diff --git a/prism/src/jltl2dstar/APMonom.java b/prism/src/jltl2dstar/APMonom.java index 79fde85d..1ea35a78 100644 --- a/prism/src/jltl2dstar/APMonom.java +++ b/prism/src/jltl2dstar/APMonom.java @@ -67,7 +67,8 @@ public class APMonom { */ public boolean isSet(int index) throws PrismException { if (!isNormal()) { - throw new PrismException("Can't get AP, is either TRUE/FALSE!"); + // TRUE / FALSE -> the bit is not set + return false; } return bits_set.get(index); } @@ -77,7 +78,7 @@ public class APMonom { * @param index index of AP * @return true if AP is true */ - boolean getValue(int index) throws PrismException { + public boolean getValue(int index) throws PrismException { if (!isNormal()) { throw new PrismException("Can't get AP, is either TRUE/FALSE!"); } diff --git a/prism/src/prism/DA.java b/prism/src/prism/DA.java index 7bd0ff80..70d61c03 100644 --- a/prism/src/prism/DA.java +++ b/prism/src/prism/DA.java @@ -5,6 +5,7 @@ // * Dave Parker (University of Oxford) // * Hongyang Qu (University of Oxford) // * Joachim Klein (TU Dresden) +// * David Mueller (TU Dresden) // //------------------------------------------------------------------------------ // @@ -31,7 +32,11 @@ package prism; import java.io.PrintStream; import java.util.*; +import jltl2ba.APElement; +import jltl2ba.APElementIterator; import acceptance.AcceptanceOmega; +import acceptance.AcceptanceRabin; +import acceptance.AcceptanceType; /** * Class to store a deterministic automata of some acceptance type Acceptance. @@ -107,6 +112,14 @@ public class DA this.start = start; } + /** + * Returns true if the automaton has an edge for {@code src} and {@label}. + */ + public boolean hasEdge(int src, Symbol label) + { + return edges.get(src).contains(label); + } + /** * Add an edge */ @@ -200,6 +213,53 @@ public class DA } out.println("}"); } + + /** + * Print the DRA in ltl2dstar v2 format to the output stream. + * @param out the output stream + */ + public static void printLtl2dstar(DA dra, PrintStream out) throws PrismException { + AcceptanceRabin acceptance = dra.getAcceptance(); + + if (dra.getStartState() < 0) { + // No start state! + throw new PrismException("No start state in DA!"); + } + + out.println("DRA v2 explicit"); + out.println("States: " + dra.size()); + out.println("Acceptance-Pairs: " + acceptance.size()); + out.println("Start: " + dra.getStartState()); + + // Enumerate APSet + out.print("AP: " + dra.getAPList().size()); + for (String ap : dra.getAPList()) { + out.print(" \"" + ap + "\""); + } + out.println(); + + out.println("---"); + + for (int i_state = 0; i_state < dra.size(); i_state++) { + out.println("State: " + i_state); + + out.print("Acc-Sig:"); + for (int pair = 0; pair < acceptance.size(); pair++) { + if (acceptance.get(pair).getL().get(i_state)) { + out.print(" -"+pair); + } else if (acceptance.get(pair).getK().get(i_state)) { + out.print(" +"+pair); + } + } + out.println(); + + APElementIterator it = new APElementIterator(dra.apList.size()); + while (it.hasNext()) { + APElement edge = it.next(); + out.println(dra.getEdgeDestByLabel(i_state, edge)); + } + } + } /** * Print automaton to a PrismLog in a specified format ("dot" or "txt"). diff --git a/prism/src/prism/HOAF2DA.java b/prism/src/prism/HOAF2DA.java new file mode 100644 index 00000000..78230c16 --- /dev/null +++ b/prism/src/prism/HOAF2DA.java @@ -0,0 +1,548 @@ +//============================================================================== +// +// Copyright (c) 2014- +// Authors: +// * Joachim Klein (TU Dresden) +// * David Mueller (TU Dresden) +// +//------------------------------------------------------------------------------ +// +// This file is part of PRISM. +// +// PRISM is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// PRISM is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with PRISM; if not, write to the Free Software Foundation, +// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +//============================================================================== + + +package prism; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; +import java.util.Set; + +import jhoafparser.ast.AtomAcceptance; +import jhoafparser.ast.AtomLabel; +import jhoafparser.ast.BooleanExpression; +import jhoafparser.consumer.HOAConsumer; +import jhoafparser.consumer.HOAConsumerException; +import jhoafparser.util.ImplicitEdgeHelper; +import jltl2ba.APElement; +import jltl2ba.APSet; +import jltl2dstar.APMonom; +import jltl2dstar.APMonom2APElements; +import acceptance.AcceptanceGenRabin; +import acceptance.AcceptanceGenRabin.GenRabinPair; +import acceptance.AcceptanceGeneric; +import acceptance.AcceptanceOmega; +import acceptance.AcceptanceRabin; +import acceptance.AcceptanceRabin.RabinPair; + +/** + * A HOAConsumer for jhoafparser that constructs a prism.DA from the parsed automaton. + */ +public class HOAF2DA implements HOAConsumer { + + public class TransitionBasedAcceptanceException extends HOAConsumerException { + public TransitionBasedAcceptanceException(String e) {super(e);} + } + + private DA da; + private APSet aps = new APSet(); + + /** Size, i.e. number of states */ + private int size; + private boolean knowSize = false; + + /** Start state (index) */ + private int startState; + private boolean knowStartState = false; + + private BooleanExpression accExpr = null; + private String accName; + private List extraInfo; + + private List acceptanceSets = null; + // set of acceptance set indizes where state membership has to be inverted + private Set negateAcceptanceSetMembership = null; + private List apList; + + ImplicitEdgeHelper implicitEdgeHelper = null; + + public void clear() { + aps = new APSet(); + + implicitEdgeHelper = null; + + size = 0; + knowSize = false; + + startState = 0; + knowStartState = false; + + accExpr = null; + accName = null; + extraInfo = null; + + acceptanceSets = null; + negateAcceptanceSetMembership = null; + apList = null; + } + + public HOAF2DA() { + } + + @Override + public boolean parserResolvesAliases() { + return true; + } + + @Override + public void notifyHeaderStart(String version) throws HOAConsumerException { + // NOP + } + + @Override + public void setNumberOfStates(int numberOfStates) + throws HOAConsumerException { + size = numberOfStates; + knowSize = true; + } + + @Override + public void addStartStates(List stateConjunction) + throws HOAConsumerException { + if(stateConjunction.size() > 1 || knowStartState) { + throw new HOAConsumerException("Not a deterministic automaton: More then one Start state"); + } + startState = stateConjunction.get(0).intValue(); + knowStartState = true; + } + + @Override + public void addAlias(String name, BooleanExpression labelExpr) + throws HOAConsumerException { + // NOP, aliases are already resolved + } + + @Override + public void setAPs(List aps) throws HOAConsumerException { + apList = aps; + + for (String ap : aps) { + this.aps.addAP(ap); + } + } + + @Override + public void setAcceptanceCondition(int numberOfSets, + BooleanExpression accExpr) + throws HOAConsumerException { + this.accExpr = accExpr; + } + + @Override + public void provideAcceptanceName(String name, List extraInfo) + throws HOAConsumerException { + accName = name; + this.extraInfo = extraInfo; + } + + @Override + public void setName(String name) throws HOAConsumerException { + // NOP + } + + @Override + public void setTool(String name, String version) throws HOAConsumerException { + // NOP + } + + @Override + public void addProperties(List properties) + throws HOAConsumerException { + if(!properties.contains("deterministic")) { + // we don't know yet whether the automaton is actually deterministic... + } + if(properties.contains("univ-branch")) { + throw new HOAConsumerException("A HOAF with universal branching is not deterministic"); + } + + if(properties.contains("state-labels")) { + throw new HOAConsumerException("Can't handle state labelling"); + } + } + + @Override + public void addMiscHeader(String name, List content) + throws HOAConsumerException { + if (name.substring(0,1).toUpperCase().equals(name.substring(0,1))) { + throw new HOAConsumerException("Unknown header "+name+" potentially containing semantic information, can not handle"); + } + } + + @Override + public void notifyBodyStart() throws HOAConsumerException { + if (!knowSize) { + throw new HOAConsumerException("Can currently only parse automata where the number of states is specified in the header"); + } + if (!knowStartState) { + throw new HOAConsumerException("Not a deterministic automaton: No initial state specified (Start header)"); + } + if (startState >= size) { + throw new HOAConsumerException("Initial state "+startState+" is out of range"); + } + + da = new DA(size); + da.setStartState(startState); + + if (apList == null) { + // no call to setAPs + apList = new ArrayList(0); + } + da.setAPList(apList); + implicitEdgeHelper = new ImplicitEdgeHelper(apList.size()); + + DA.switchAcceptance(da, prepareAcceptance()); + } + + /** + * Prepare an acceptance condition for the parsed automaton. + * Called in notifyBodyStart() + **/ + private AcceptanceOmega prepareAcceptance() throws HOAConsumerException + { + if (accName != null) { + if (accName.equals("Rabin")) { + return prepareAcceptanceRabin(); + } else if (accName.equals("generalized-Rabin")) { + return prepareAcceptanceGenRabin(); + } + } + + acceptanceSets = new ArrayList(); + return prepareAcceptanceGeneric(accExpr); + } + + /** + * Prepare a generic acceptance condition for the parsed automaton. + **/ + private AcceptanceGeneric prepareAcceptanceGeneric(BooleanExpression expr) throws HOAConsumerException + { + switch (expr.getType()) { + case EXP_TRUE: + return new AcceptanceGeneric(true); + case EXP_FALSE: + return new AcceptanceGeneric(false); + case EXP_AND: + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.AND, + prepareAcceptanceGeneric(expr.getLeft()), + prepareAcceptanceGeneric(expr.getRight())); + case EXP_OR: + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.OR, + prepareAcceptanceGeneric(expr.getLeft()), + prepareAcceptanceGeneric(expr.getRight())); + case EXP_NOT: + throw new HOAConsumerException("Boolean negation not allowed in acceptance expression"); + case EXP_ATOM: { + int index = expr.getAtom().getAcceptanceSet(); + while (index >= acceptanceSets.size()) { + // ensure that the acceptanceSets array is large enough + acceptanceSets.add(null); + } + if (acceptanceSets.get(index) == null) { + // this acceptance set index has not been seen yet, create BitSet + acceptanceSets.set(index, new BitSet()); + } + BitSet acceptanceSet = acceptanceSets.get(index); + switch (expr.getAtom().getType()) { + case TEMPORAL_FIN: + if (expr.getAtom().isNegated()) { + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.FIN_NOT, acceptanceSet); + } else { + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.FIN, acceptanceSet); + } + case TEMPORAL_INF: + if (expr.getAtom().isNegated()) { + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF_NOT, acceptanceSet); + } else { + return new AcceptanceGeneric(AcceptanceGeneric.ElementType.INF, acceptanceSet); + } + } + } + } + + throw new UnsupportedOperationException("Unknown operator in acceptance condition: "+expr); + } + + /** + * Prepare a Rabin acceptance condition from the acc-name header. + */ + private AcceptanceRabin prepareAcceptanceRabin() throws HOAConsumerException + { + if (extraInfo.size() != 1 || + !(extraInfo.get(0) instanceof Integer)) { + throw new HOAConsumerException("Invalid acc-name: Rabin header"); + } + + int numberOfPairs = (Integer)extraInfo.get(0); + AcceptanceRabin acceptanceRabin = new AcceptanceRabin(); + acceptanceSets = new ArrayList(numberOfPairs*2); + for (int i = 0; i< numberOfPairs; i++) { + BitSet L = new BitSet(); + BitSet K = new BitSet(); + + acceptanceSets.add(L); // 2*i = Fin(L) = F G !L + acceptanceSets.add(K); // 2*i+1 = Inf(K) = G F K + + acceptanceRabin.add(new RabinPair(L,K)); + } + + return acceptanceRabin; + } + + /** + * Prepare a Generalized Rabin acceptance condition from the acc-name header. + */ + private AcceptanceGenRabin prepareAcceptanceGenRabin() throws HOAConsumerException + { + if (extraInfo.size() < 1 || + !(extraInfo.get(0) instanceof Integer)) { + throw new HOAConsumerException("Invalid acc-name: generalized-Rabin header"); + } + + int numberOfPairs = (Integer)extraInfo.get(0); + if (extraInfo.size() != numberOfPairs + 1) { + throw new HOAConsumerException("Invalid acc-name: generalized-Rabin header"); + } + int numberOfKs[] = new int[numberOfPairs]; + for (int i = 0; i < numberOfPairs; i++) { + if (!(extraInfo.get(i + 1) instanceof Integer)) { + throw new HOAConsumerException("Invalid acc-name: generalized-Rabin header"); + } + numberOfKs[i] = (Integer) extraInfo.get(i + 1); + } + + AcceptanceGenRabin acceptanceGenRabin = new AcceptanceGenRabin(); + acceptanceSets = new ArrayList(numberOfPairs*2); + for (int i = 0; i< numberOfPairs; i++) { + BitSet L = new BitSet(); + acceptanceSets.add(L); // Fin(L) = F G !L + ArrayList K_list = new ArrayList(); + for (int j = 0; j < numberOfKs[i]; j++) { + BitSet K_j = new BitSet(); + K_list.add(K_j); + acceptanceSets.add(K_j); // Inf(K_j) = G F K_j + } + acceptanceGenRabin.add(new GenRabinPair(L, K_list)); + } + + return acceptanceGenRabin; + } + + @Override + public void addState(int id, String info, + BooleanExpression labelExpr, List accSignature) + throws HOAConsumerException { + implicitEdgeHelper.startOfState(id); + + if(labelExpr != null) { + throw new HOAConsumerException("State "+id+" has a state label, currently only supports labels on transitions"); + } + + if (id >= size) { + throw new HOAConsumerException("Illegal state index "+id+", out of range"); + } + + if (accSignature != null) { + for (int index : accSignature) { + if (index >= acceptanceSets.size()) { + // acceptance set index not used in acceptance condition, ignore + } + BitSet accSet = acceptanceSets.get(index); + if (accSet == null) { + // acceptance set index not used in acceptance condition, ignore + } else { + accSet.set(id); + } + } + } + } + + @Override + public void addEdgeImplicit(int stateId, List conjSuccessors, + List accSignature) throws HOAConsumerException { + if (conjSuccessors.size() != 1) { + throw new HOAConsumerException("Not a DA, state "+stateId+" has transition with conjunctive target"); + } + + if (accSignature != null) { + throw new TransitionBasedAcceptanceException("DA has transition-based acceptance (state "+stateId+", currently only state-labeled acceptance is supported"); + } + + int to = conjSuccessors.get(0); + + BitSet edge = new BitSet(); + long tmp = implicitEdgeHelper.nextImplicitEdge(); + int index = 0; + while (tmp != 0) { + if (tmp % 2 == 1) { + edge.set(index); + } + tmp = tmp >> 1L; + index++; + } + da.addEdge(stateId, edge, to); + } + + /** + * Returns a list of APMonoms for the expression. The expression currently has to be in + * disjunctive normal form. Returns one APMonom for each clause of the DNF. + */ + private List labelExpressionToAPMonom(BooleanExpression expr) throws HOAConsumerException { + List result = new ArrayList(); + + switch (expr.getType()) { + case EXP_AND: + case EXP_ATOM: + case EXP_NOT: { + APMonom monom = new APMonom(); + labelExpressionToAPMonom(expr, monom); + result.add(monom); + return result; + } + case EXP_TRUE: + result.add(new APMonom(true)); + return result; + case EXP_FALSE: + result.add(new APMonom(false)); + case EXP_OR: + result.addAll(labelExpressionToAPMonom(expr.getLeft())); + result.addAll(labelExpressionToAPMonom(expr.getRight())); + return result; + } + throw new UnsupportedOperationException("Unsupported operator in label expression: "+expr); + } + + + /** + * Returns a single APMonom for a single clause of the overall DNF formula. + * Modifies APMonom result such that in the end it is correct. + */ + private void labelExpressionToAPMonom(BooleanExpression expr, APMonom result) throws HOAConsumerException { + try { + switch (expr.getType()) { + case EXP_TRUE: + case EXP_FALSE: + case EXP_OR: + throw new HOAConsumerException("Complex transition labels are not yet supported, only disjunctive normal form: "+expr); + + case EXP_AND: + labelExpressionToAPMonom(expr.getLeft(), result); + labelExpressionToAPMonom(expr.getRight(), result); + return; + case EXP_ATOM: { + int apIndex = expr.getAtom().getAPIndex(); + if (result.isSet(apIndex) && result.getValue(apIndex)!=true) { + throw new HOAConsumerException("Complex transition labels are not yet supported, transition label evaluates to false"); + } + result.setValue(apIndex, true); + return; + } + case EXP_NOT: { + if (!expr.getLeft().isAtom()) { + throw new HOAConsumerException("Complex transition labels are not yet supported, only conjunction of (negated) labels"); + } + int apIndex = expr.getLeft().getAtom().getAPIndex(); + if (result.isSet(apIndex) && result.getValue(apIndex)!=false) { + throw new HOAConsumerException("Complex transition labels are not yet supported, transition label evaluates to false"); + } + result.setValue(apIndex, false); + return; + } + } + } catch (PrismException e) { + throw new HOAConsumerException("While parsing, APMonom exception: "+e.getMessage()); + } + } + + @Override + public void addEdgeWithLabel(int stateId, + BooleanExpression labelExpr, + List conjSuccessors, List accSignature) + throws HOAConsumerException { + + if (conjSuccessors.size() != 1) { + throw new HOAConsumerException("Not a DA, state "+stateId+" has transition with conjunctive target"); + } + + if (accSignature != null) { + throw new TransitionBasedAcceptanceException("DA has transition-based acceptance (state "+stateId+", currently only state-labeled acceptance is supported"); + } + + if (labelExpr == null) { + throw new HOAConsumerException("Missing label on transition"); + } + + int to = conjSuccessors.get(0); + + for (APMonom monom : labelExpressionToAPMonom(labelExpr)) { + APMonom2APElements it = new APMonom2APElements(aps, monom); + while(it.hasNext()) { + APElement el = it.next(); + if (da.hasEdge(stateId, el)) { + throw new HOAConsumerException("Not a deterministic automaton, non-determinism detected (state "+stateId+")"); + } + da.addEdge(stateId, el, to); + } + } + } + + @Override + public void notifyEndOfState(int stateId) throws HOAConsumerException + { + implicitEdgeHelper.endOfState(); + } + + @Override + public void notifyEnd() throws HOAConsumerException { + // flip acceptance sets that need negating + if (negateAcceptanceSetMembership != null) { + for (int index : negateAcceptanceSetMembership) { + acceptanceSets.get(index).flip(0, size); + } + } + + clear(); + } + + @Override + public void notifyAbort() { + clear(); + + } + + public DA getDA() { + return da; + } + + @Override + public void notifyWarning(String warning) throws HOAConsumerException + { + // warnings are fatal + throw new HOAConsumerException(warning); + } + +} diff --git a/prism/src/prism/LTL2DA.java b/prism/src/prism/LTL2DA.java index 11680d4f..b980fca6 100644 --- a/prism/src/prism/LTL2DA.java +++ b/prism/src/prism/LTL2DA.java @@ -27,11 +27,24 @@ package prism; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; import java.util.BitSet; +import java.util.List; import acceptance.AcceptanceOmega; import acceptance.AcceptanceRabin; import acceptance.AcceptanceType; +import jhoafparser.consumer.HOAIntermediateStoreAndManipulate; +import jhoafparser.parser.HOAFParser; +import jhoafparser.parser.generated.ParseException; +import jhoafparser.transformations.ToStateAcceptance; +import jltl2ba.APSet; +import jltl2ba.SimpleLTL; import jltl2dstar.LTL2Rabin; import parser.Values; import parser.ast.Expression; @@ -70,7 +83,15 @@ public class LTL2DA extends PrismComponent public DA convertLTLFormulaToDA(Expression ltl, Values constants, AcceptanceType... allowedAcceptance) throws PrismException { DA result = null; - if (AcceptanceType.contains(allowedAcceptance, AcceptanceType.RABIN)) { + + boolean useExternal = useExternal(); + boolean containsTemporalBounds = Expression.containsTemporalTimeBounds(ltl); + if (containsTemporalBounds) { + useExternal = false; + } + + if (AcceptanceType.contains(allowedAcceptance, AcceptanceType.RABIN) && + !useExternal) { // If we may construct a Rabin automaton, check the library first try { result = LTL2RabinLibrary.getDRAforLTL(ltl, constants); @@ -84,9 +105,13 @@ public class LTL2DA extends PrismComponent } // TODO (JK): support generation of DSA for simple path formula with time bound - if (result == null && !Expression.containsTemporalTimeBounds(ltl)) { - // use jltl2dstar LTL2DA - result = LTL2Rabin.ltl2da(ltl.convertForJltl2ba(), allowedAcceptance); + if (result == null && !containsTemporalBounds) { + if (useExternal) { + result = convertLTLFormulaToDAWithExternalTool(ltl, constants, allowedAcceptance); + } else { + // use jltl2dstar LTL2DA + result = LTL2Rabin.ltl2da(ltl.convertForJltl2ba(), allowedAcceptance); + } } if (result == null) { @@ -97,4 +122,186 @@ public class LTL2DA extends PrismComponent return result; } + + public DA convertLTLFormulaToDAWithExternalTool(Expression ltl, Values constants, AcceptanceType... allowedAcceptance) throws PrismException + { + String ltl2daTool = getSettings().getString(PrismSettings.PRISM_LTL2DA_TOOL); + + SimpleLTL ltlFormula = ltl.convertForJltl2ba(); + + // switch from the L0, L1, ... APs of PRISM to the + // safer p0, p1, ... APs for the external tool + SimpleLTL ltlFormulaSafeAP = ltlFormula.clone(); + ltlFormulaSafeAP.renameAP("L", "p"); + + DA result = null; + + try { + + String syntax = getSettings().getString(PrismSettings.PRISM_LTL2DA_SYNTAX); + if (syntax == null || syntax.isEmpty()) { + throw new PrismException("No LTL syntax option provided"); + } + String ltlOutput; + switch (syntax) { + case "LBT": + ltlOutput = ltlFormulaSafeAP.toStringLBT(); + break; + case "Spin": + ltlOutput = ltlFormulaSafeAP.toStringSpin(); + break; + case "Spot": + ltlOutput = ltlFormulaSafeAP.toStringSpot(); + break; + case "Rabinizer": + ltlFormulaSafeAP = ltlFormulaSafeAP.toBasicOperators(); + ltlOutput = ltlFormulaSafeAP.toStringSpot(); + break; + default: + throw new PrismException("Unknown LTL syntax option \""+syntax+"\""); + } + + File ltl_file=File.createTempFile("prism-ltl-external-", ".ltl", null); + File da_file=File.createTempFile("prism-ltl-external-",".hoa", null); + File tool_output=File.createTempFile("prism-ltl-external-",".output", null); + + FileWriter ltlWriter = new FileWriter(ltl_file); + ltlWriter.write(ltlOutput); + ltlWriter.close(); + + List arguments = new ArrayList(); + arguments.add(ltl2daTool); + + getLog().print("Calling external LTL->DA tool: "); + for (String s : arguments) { + getLog().print(" " + s); + } + getLog().println(); + + getLog().print("LTL formula (in "+syntax+" syntax): "); + getLog().println(ltlOutput); + getLog().println(); + + arguments.add(ltl_file.getAbsolutePath()); + arguments.add(da_file.getAbsolutePath()); + + + ProcessBuilder builder = new ProcessBuilder(arguments); + builder.redirectOutput(tool_output); + builder.redirectErrorStream(true); + + Process p = builder.start(); + p.getInputStream().close(); + + int rv; + while (true) { + try { + rv = p.waitFor(); + break; + } catch (InterruptedException e) { + } + } + if (rv != 0) { + throw new PrismException("Call to external LTL->DA tool failed, return value = "+rv+".\n" + +"To investigate, please consult the following files:" + +"\n LTL formula: "+ltl_file.getAbsolutePath() + +"\n Automaton output: "+da_file.getAbsolutePath() + +"\n Tool output (stdout and stderr): "+tool_output.getAbsolutePath() + +"\n"); + } + + tool_output.delete(); + + + try { + try { + HOAF2DA consumerDA = new HOAF2DA(); + + InputStream input = new FileInputStream(da_file); + HOAFParser.parseHOA(input, consumerDA); + result = consumerDA.getDA(); + } catch (HOAF2DA.TransitionBasedAcceptanceException e) { + // try again, this time transforming to state acceptance + getLog().println("Automaton with transition-based acceptance, automatically converting to state-based acceptance..."); + HOAF2DA consumerDA = new HOAF2DA(); + HOAIntermediateStoreAndManipulate consumerTransform = new HOAIntermediateStoreAndManipulate(consumerDA, new ToStateAcceptance()); + + InputStream input = new FileInputStream(da_file); + HOAFParser.parseHOA(input, consumerTransform); + result = consumerDA.getDA(); + } + + if (result == null) { + throw new PrismException("Could not construct DA"); + } + checkAPs(ltlFormulaSafeAP, result.getAPList()); + + // rename back from safe APs, i.e., p0, p1, ... to L0, L1, ... + List automatonAPList = result.getAPList(); + for (int i = 0; i < automatonAPList.size(); i++) { + if (automatonAPList.get(i).startsWith("p")) { + String renamed = "L" + automatonAPList.get(i).substring("p".length()); + automatonAPList.set(i, renamed); + } + } + } catch (ParseException e) { + throw new PrismException("Parse error: "+e.getMessage()+".\n" + +"To investigate, please consult the following files:\n" + +" LTL formula: "+ltl_file.getAbsolutePath() + +"\n Automaton output: "+da_file.getAbsolutePath() + +"\n"); + } catch (PrismException e) { + throw new PrismException(e.getMessage()+".\n" + +"To investigate, please consult the following files:" + +"\n LTL formula: " +ltl_file.getAbsolutePath() + +"\n Automaton output: "+da_file.getAbsolutePath() + +"\n"); + } + + da_file.delete(); + ltl_file.delete(); + } catch (IOException e) { + throw new PrismException(e.getMessage()); + } + + AcceptanceOmega acceptance = result.getAcceptance(); + if (AcceptanceType.contains(allowedAcceptance, acceptance.getType())) { + return result; + } else if (AcceptanceType.contains(allowedAcceptance, AcceptanceType.GENERIC)) { + // The specific acceptance type is not allowed, but GENERIC is allowed + // -> transform to generic acceptance and switch acceptance condition + DA.switchAcceptance(result, acceptance.toAcceptanceGeneric()); + return result; + } else { + throw new PrismException("The external LTL->DA tool returned an automaton with "+acceptance.getTypeName()+" acceptance, which is not yet supported for model checking this model / property"); + } + } + + /** Check whether we should use an external LTL->DA tool */ + private boolean useExternal() + { + String ltl2da_tool = getSettings().getString(PrismSettings.PRISM_LTL2DA_TOOL); + if (ltl2da_tool!=null && !ltl2da_tool.isEmpty()) { + return true; + } + return false; + } + + private void checkAPs(SimpleLTL ltl, List automatonAPs) throws PrismException + { + APSet ltlAPs = ltl.getAPs(); + for (String ap : ltlAPs) { + if (!automatonAPs.contains(ap)) { + throw new PrismException("Generated automaton misses atomic proposition \""+ap+"\""); + } + } + for (String ap : automatonAPs) { + if (!ltlAPs.hasAP(ap)) { + throw new PrismException("Generated automaton has extra atomic proposition \""+ap+"\""); + } + } + } + + + } diff --git a/prism/src/prism/LTLModelChecker.java b/prism/src/prism/LTLModelChecker.java index 2b3e0e9d..0f58c6bb 100644 --- a/prism/src/prism/LTLModelChecker.java +++ b/prism/src/prism/LTLModelChecker.java @@ -32,6 +32,7 @@ import java.util.BitSet; import java.util.List; import java.util.Vector; +import acceptance.AcceptanceGenRabinDD; import acceptance.AcceptanceOmega; import acceptance.AcceptanceOmegaDD; import acceptance.AcceptanceRabin; @@ -708,6 +709,8 @@ public class LTLModelChecker extends PrismComponent switch (acceptance.getType()) { case RABIN: return findAcceptingECStatesForRabin((AcceptanceRabinDD) acceptance, model, daDDRowVars, daDDColVars, fairness); + case GENERALIZED_RABIN: + return findAcceptingECStatesForGeneralizedRabin((AcceptanceGenRabinDD) acceptance, model, daDDRowVars, daDDColVars, fairness); default: throw new PrismNotSupportedException("Computing the accepting EC states for "+acceptance.getTypeName()+" acceptance is not yet implemented (symbolic engine)"); } @@ -852,6 +855,61 @@ public class LTLModelChecker extends PrismComponent return allAcceptingStates; } + /** + * Find the set of states in accepting end components (ECs) in a nondeterministic model wrt a Generalized Rabin acceptance condition. + * @param acceptance the Generalized Rabin acceptance condition + * @param model The model + * @param draDDRowVars BDD row variables for the DRA part of the model + * @param draDDColVars BDD column variables for the DRA part of the model + * @param fairness Consider fairness? + * @return A referenced BDD for the union of all states in accepting MECs + */ + public JDDNode findAcceptingECStatesForGeneralizedRabin(AcceptanceGenRabinDD acceptance, NondetModel model, JDDVars draDDRowVars, JDDVars draDDColVars, boolean fairness) + throws PrismException + { + + if (fairness) { + throw new PrismException("Accepting end-component computation for generalized Rabin is currently not supported with fairness"); + } + + JDDNode allAcceptingStates; + + allAcceptingStates = JDD.Constant(0); + + // Go through the GR acceptance pairs (L_i, K_i_1, ..., K_i_n) + for (int i = 0; i < acceptance.size(); i++) { + + // Filter out L_i states from the model and find the MECs + JDDNode notL = JDD.Not(acceptance.get(i).getL()); + JDD.Ref(model.getTrans01()); + JDD.Ref(notL); + JDDNode candidateStates = JDD.Apply(JDD.TIMES, model.getTrans01(), notL); + notL = JDD.PermuteVariables(notL, draDDRowVars, draDDColVars); + candidateStates = JDD.Apply(JDD.TIMES, candidateStates, notL); + candidateStates = JDD.ThereExists(candidateStates, model.getAllDDColVars()); + candidateStates = JDD.ThereExists(candidateStates, model.getAllDDNondetVars()); + List mecs = findMECStates(model, candidateStates); + JDD.Deref(candidateStates); + + // Check which MECs are accepting for this pair, calculate union + JDDNode acceptingStates = JDD.Constant(0); + for (int k = 0; k < mecs.size(); k++) { + // Is the induced BSCC by this MEC accepting? + // (note we only really need to check K_i_1, ..., K_i_n here, not L too, + // but this should not really affect efficiency) + if (acceptance.get(i).isBSCCAccepting(mecs.get(k))) { + acceptingStates = JDD.Or(acceptingStates, mecs.get(k)); + } else { + JDD.Deref(mecs.get(k)); + } + } + // Add to the set of accepting states for all pairs + allAcceptingStates = JDD.Or(allAcceptingStates, acceptingStates); + } + + return allAcceptingStates; + } + public JDDNode findMultiAcceptingStates(DA dra, NondetModel model, JDDVars draDDRowVars, JDDVars draDDColVars, boolean fairness, List allecs, List statesH, List statesL) throws PrismException { diff --git a/prism/src/prism/NondetModelChecker.java b/prism/src/prism/NondetModelChecker.java index 594337ea..fce4a4ad 100644 --- a/prism/src/prism/NondetModelChecker.java +++ b/prism/src/prism/NondetModelChecker.java @@ -1007,6 +1007,7 @@ public class NondetModelChecker extends NonProbModelChecker LTL2DA ltl2da = new LTL2DA(prism); AcceptanceType[] allowedAcceptance = { AcceptanceType.RABIN, + AcceptanceType.GENERALIZED_RABIN, AcceptanceType.REACH }; da = ltl2da.convertLTLFormulaToDA(ltl, constantValues, allowedAcceptance); diff --git a/prism/src/prism/PrismSettings.java b/prism/src/prism/PrismSettings.java index b8ccc7ba..618ce634 100644 --- a/prism/src/prism/PrismSettings.java +++ b/prism/src/prism/PrismSettings.java @@ -113,6 +113,9 @@ public class PrismSettings implements Observer public static final String PRISM_PARETO_EPSILON = "prism.paretoEpsilon"; public static final String PRISM_EXPORT_PARETO_FILENAME = "prism.exportParetoFileName"; + public static final String PRISM_LTL2DA_TOOL = "prism.ltl2daTool"; + public static final String PRISM_LTL2DA_SYNTAX = "prism.ltl2daSyntax"; + public static final String PRISM_PARAM_ENABLED = "prism.param.enabled"; public static final String PRISM_PARAM_PRECISION = "prism.param.precision"; public static final String PRISM_PARAM_SPLIT = "prism.param.split"; @@ -304,6 +307,13 @@ public class PrismSettings implements Observer { STRING_TYPE, PRISM_EXPORT_ADV_FILENAME, "Adversary export filename", "3.3", "adv.tra", "", "Name of file for MDP adversary export (if enabled)" }, + // LTL2DA TOOLS + { STRING_TYPE, PRISM_LTL2DA_TOOL, "Use external LTL->DA tool", "4.2.1", "", null, + "If non-empty, the path to the executable for the external LTL->DA tool."}, + + { STRING_TYPE, PRISM_LTL2DA_SYNTAX, "LTL syntax for external LTL->DA tool", "4.2.1", "LBT", "LBT,Spin,Spot,Rabinizer", + "The syntax for LTL formulas passed to the external LTL->DA tool."}, + // PARAMETRIC MODEL CHECKING { BOOLEAN_TYPE, PRISM_PARAM_ENABLED, "Do parametric model checking", "4.1", new Boolean(false), "", "Perform parametric model checking." }, @@ -1265,6 +1275,40 @@ public class PrismSettings implements Observer } } + // LTL2DA TOOLS + + else if (sw.equals("ltl2datool")) { + if (i < args.length - 1) { + String filename = args[++i]; + set(PRISM_LTL2DA_TOOL, filename); + System.out.println(getString(PRISM_LTL2DA_TOOL)); + } else { + throw new PrismException("The -" + sw + " switch requires one argument (path to the executable)"); + } + } + else if (sw.equals("ltl2dasyntax")) { + if (i < args.length - 1) { + String syntax = args[++i]; + switch (syntax) { + case "lbt": + set(PRISM_LTL2DA_SYNTAX, "LBT"); + break; + case "spin": + set(PRISM_LTL2DA_SYNTAX, "Spin"); + break; + case "spot": + set(PRISM_LTL2DA_SYNTAX, "Spot"); + case "rabinizer": + set(PRISM_LTL2DA_SYNTAX, "Rabinizer"); + break; + default: + throw new PrismException("Unrecognised option for -" + sw + " switch (options are: lbt, spin, spot, rabinizer)"); + } + } else { + throw new PrismException("The -" + sw + " switch requires one argument (options are: lbt, spin, spot, rabinizer)"); + } + } + // PARAMETRIC MODEL CHECKING: else if (sw.equals("param")) { @@ -1567,6 +1611,9 @@ public class PrismSettings implements Observer mainLog.println("-pathviaautomata ............... Handle all path formulas via automata constructions"); mainLog.println("-exportadv .............. Export an adversary from MDP model checking (as a DTMC)"); mainLog.println("-exportadvmdp ........... Export an adversary from MDP model checking (as an MDP)"); + mainLog.println("-ltl2datool ............. Run executable to convert LTL formulas to deterministic automata"); + mainLog.println("-ltl2dasyntax .............. Specify output format for -ltl2datool switch (lbt, spin, spot, rabinizer)"); + mainLog.println(); mainLog.println("MULTI-OBJECTIVE MODEL CHECKING:"); mainLog.println("-linprog (or -lp) .............. Use linear programming for multi-objective model checking"); diff --git a/prism/src/prism/ProbModelChecker.java b/prism/src/prism/ProbModelChecker.java index 8224a6ef..8f3601d0 100644 --- a/prism/src/prism/ProbModelChecker.java +++ b/prism/src/prism/ProbModelChecker.java @@ -541,7 +541,8 @@ public class ProbModelChecker extends NonProbModelChecker LTL2DA ltl2da = new LTL2DA(prism); AcceptanceType[] allowedAcceptance = { AcceptanceType.RABIN, - AcceptanceType.REACH + AcceptanceType.REACH, + AcceptanceType.GENERIC }; da = ltl2da.convertLTLFormulaToDA(ltl, constantValues, allowedAcceptance); mainLog.println(da.getAutomataType()+" has " + da.size() + " states, " + da.getAcceptance().getSizeStatistics() + ".");