From c214cb182b1d48f4ec301c02923a1994a92c0e3d Mon Sep 17 00:00:00 2001
From: cs-powell <142438185+cs-powell@users.noreply.github.com>
Date: Tue, 26 Nov 2024 12:01:27 -0500
Subject: [PATCH] reorganized visualizer and test processes (added abstract
class for test process)
---
.../CognitiveModel/ModelFiles/Action.java | 1 -
.../CognitiveModel/ModelFiles/Model.java | 16 +-
.../CognitiveModel/ModelFiles/MotorType.java | 6 +-
Java/ProjectModels/Main.java | 48 ------
.../Visualizer/assets/Rudder Pedals.png | Bin 0 -> 117964 bytes
.../Visualizer/assets/Yoke Symbol.png | Bin 0 -> 8656 bytes
Java/ProjectModels/Visualizer/axis.java | 58 +++++++
.../Visualizer/rudderPosition.java | 75 ++++++++
Java/ProjectModels/Visualizer/visualizer.java | 162 ++++++++++++++++++
.../Visualizer/yokePosition.java | 96 +++++++++++
Java/ProjectModels/testprocess.java | 19 ++
Java/ProjectModels/testprocess1.java | 45 ++---
Java/ProjectModels/testprocess2.java | 15 ++
13 files changed, 451 insertions(+), 90 deletions(-)
create mode 100644 Java/ProjectModels/Visualizer/assets/Rudder Pedals.png
create mode 100644 Java/ProjectModels/Visualizer/assets/Yoke Symbol.png
create mode 100644 Java/ProjectModels/Visualizer/axis.java
create mode 100644 Java/ProjectModels/Visualizer/rudderPosition.java
create mode 100644 Java/ProjectModels/Visualizer/visualizer.java
create mode 100644 Java/ProjectModels/Visualizer/yokePosition.java
create mode 100644 Java/ProjectModels/testprocess.java
create mode 100644 Java/ProjectModels/testprocess2.java
diff --git a/Java/ProjectModels/CognitiveModel/ModelFiles/Action.java b/Java/ProjectModels/CognitiveModel/ModelFiles/Action.java
index b96df3b..94ecb79 100644
--- a/Java/ProjectModels/CognitiveModel/ModelFiles/Action.java
+++ b/Java/ProjectModels/CognitiveModel/ModelFiles/Action.java
@@ -32,5 +32,4 @@ public abstract class Action {
public String getTarget() {
return targetDREF;
}
-
}
diff --git a/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java b/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java
index 58b5513..2fc67a0 100644
--- a/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java
+++ b/Java/ProjectModels/CognitiveModel/ModelFiles/Model.java
@@ -78,7 +78,6 @@ public class Model {
newAction = new Motor(motorType, delay, target);
this.push(newAction);
break;
-
case DELAY:
newAction = new Delay(delay);
this.push(newAction);
@@ -108,7 +107,6 @@ public class Model {
}
// q.push(temp);
return returnArray;
-
}
/* Next Helpers */
@@ -137,7 +135,6 @@ public class Model {
}
try {
-
switch (motorType) {
case PITCHUP:
float[] pitchUp = { currentControls[0] + 0.01f };
@@ -147,7 +144,6 @@ public class Model {
xpc.sendCTRL(pitchUp);
}
}
-
break;
case PITCHDOWN:
float[] pitchDown = { currentControls[0] - 0.01f };
@@ -161,7 +157,6 @@ public class Model {
break;
}
-
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -182,4 +177,15 @@ public class Model {
}
}
+
+ public float[] getCurrentControls(){
+ float [] returnArray = null;
+ try {
+ returnArray = xpc.getCTRL(0);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return returnArray;
+ }
}
diff --git a/Java/ProjectModels/CognitiveModel/ModelFiles/MotorType.java b/Java/ProjectModels/CognitiveModel/ModelFiles/MotorType.java
index ff46913..7d90a2c 100644
--- a/Java/ProjectModels/CognitiveModel/ModelFiles/MotorType.java
+++ b/Java/ProjectModels/CognitiveModel/ModelFiles/MotorType.java
@@ -2,5 +2,7 @@ package ModelFiles;
public enum MotorType {
PITCHUP,
- PITCHDOWN
-}
+ PITCHDOWN,
+ THROTTLEUP,
+ THROTTLEDOWN
+}
\ No newline at end of file
diff --git a/Java/ProjectModels/Main.java b/Java/ProjectModels/Main.java
index 5a44558..43df077 100644
--- a/Java/ProjectModels/Main.java
+++ b/Java/ProjectModels/Main.java
@@ -23,58 +23,10 @@ import ModelFiles.Vision;
import ModelFiles.XPlaneConnect;
public class Main {
-
public static void main(String[] args) {
// Encapsulation (or lack thereof) Test
Model m = new Model();
testprocess1 tp1 = new testprocess1(m, null);
tp1.runProcess();
-
- // MindQueue q = m.getQueue();
- // Action a = new Vision();
- // System.out.println(q.pop());
- // q.push(a);
- // MindQueue q2 = m.getQueue();
- // System.out.println(q2.pop());
-
- // // Using actions
- // try (XPlaneConnect xpc = new XPlaneConnect()) {
- // Action b = new Vision(10, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
- // Action d = new Delay(20);
- // // Ensure connection established.
- // m = new Model(xpc);
- // m.activateModel();
- // m.createAction(ActionType.VISION, null, 0, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
- // m.createAction(ActionType.MOTOR, MotorType.PITCHUP, 0, null);
- // // m.push(b);
- // // m.push(d);
- // m.printModelQueue();
- // // m.deactivateModel();
- // while (m.isActive() && !m.isEmpty()) {
- // float[] array = m.next();
- // if (array != null) {
- // // System.out.println(array[0]);
- // // if(array[0] > 80.0f) {
- // // m.push(d);
- // // }
- // } else {
- // // System.out.println("no dice");
- // // System.out.println(xpc.getDREF(null)");
- // }
- // if (m.getModelQueueLength() < 5) {
- // m.createAction(ActionType.VISION, null, 0, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
- // m.createAction(ActionType.MOTOR, MotorType.PITCHUP, 0, null);
- // m.createAction(ActionType.MOTOR, MotorType.PITCHDOWN, 0, null);
- // }
-
- // // m.printModelQueue();
- // }
- // } catch (SocketException ex) {
- // System.out.println("Unable to set up the connection. (Error message was '" + ex.getMessage() + "'.)");
- // } catch (IOException ex) {
- // System.out.println(
- // "Something went wrong with one of the commands. (Error message was '" + ex.getMessage() + "'.)");
- // }
- // System.out.println("Exiting");
}
}
diff --git a/Java/ProjectModels/Visualizer/assets/Rudder Pedals.png b/Java/ProjectModels/Visualizer/assets/Rudder Pedals.png
new file mode 100644
index 0000000000000000000000000000000000000000..0db4762abad64a9f580051a772968c77f7700842
GIT binary patch
literal 117964
zcmZsCb9iLS^LMhr#
^?ZS02go7{W9?_cjcXXZKGr}|Uq
zYMiQ`2u1mC@Gv+qARr*{Qj%iIARv%*ARu1`pum7N^+qcQARu5Min6NWz+$2b#bXdH
zIUyk_A#t)Ar3@1>u*gS4eCk6
zBOpHWrg{pZB_$%N(WkHyA|)XtyXHEf>hlPTel;~3o
zAVRkV74Y{lkmezP_HPiahXg4Q>fs+bAA@P}@bGQ|8OaEN1a!p2#81Jr8!n&p+*CxO
z^u&U6#PKTRq=bZ8T%WCqzf=CUr3O9)iU%yxkPrd6d=`QDL9~y)6hK3XF^~WS01~)}
zlg&6%%Ptxar3?#+5*x{gEj2M7o&hfj
z@F^8BQK=p!5fKqkFrbcs(xm13lt43nA`lUYGZHU4(`0K=Jq6RyVUPkV*WGAtMO;Y0echJoRokBs5KBOUz-wm
z1FWYYAOQXX@2RM$fZ72?vJ@n}4WI>9Mk4MjF$_32A#>J-37Ks!7H(bAI<8}O0RkrJ8klRO2|D6@SU$4QJ#o0Ayma=_1s
zEfotG2vA5M>wm6K&jEVKr{si0058H86DlJ{?BfuB_RU#)QSr=5E-b;MIZx^
z>^_k8#+SOr=+hY>FlqNeKtMrUl;u@GT=Qs_Qsp-9;I9N?Ms-Rqy#dR(YJk8Dz@#*I
z<58br-xA}CZmrXg({aGO1v;7NA3z6ZlHEBDpu7IE<=fr>fSMdoI4xfXjc80n;0PE8
z%x(|!^i*8*28C#@ZF(NW1HPPn^j6LRB+J&}nPzg=4ALJ1cXG$hQ2?)i1}w@}fXQuY
z9N^YS0k-LIq3+OH*U0Da{r42HWSj{r45Sr6bhQ3hy&Z&;q8>EF69
z&G~OF52r0_SIX#nTz~)}9&k0_Bmn~LAgSdH0>VK0`33bT7IXsvAp(&S6IS)ey6D!C
zwcgG?wtN>xg;2DR$p01PIhxci8A|*H9wPF)fZ<>;Un(D)ISB-tq*X~_Va0%XiA@x?
zD#DY>11oPq0$PkoQWHZyvmAy~36IWQJlg^-7A{)$D1Q*lxbN%tgivh~lY>?3>hAv3
z?#oNqEsm<`0d72m7EJH!W|i8UP{mppSe+E|w$qtg-kb*{mp1Boc}xHQkode?|34DH*Jsvd3^X8&)bD8l|B|Jk
zPju+#=VgKa5C`8*?#->}sem*Iae{AJRrPuQ63xE7aXPjH{mVe?-kLy1xEcZ|jv~qP
zz6T}Rzo-#=m_G7U|29V%Z4I%3__yBhd0!tI7xv!=L4Sv~$?MP;w1HB?K-?li+x|xt
zKl(uukNWdp7EEu>M*oA2AN5PyP*?m%XTq$5|2P~L?gLt={u9H;ujbkB=YQHgd-#x={tuST
zFSp`9k)Az@uKtIF14zpGA2+04fL+J%zm|Ds@=0#_-vb!`#K8aELkj*imG~bKl*!)z
zfFK2@7XH)hI!E?@;(gs|)%wpuW3NZ%IX^x?A}*p#F&5ltDn)2+=lLh=yB(to~QJYThV-zKdV;)7RePPiL^ef%SS%lGKp_@
z`PcB?t8#4gXG70l*CEkE_C*A^pRRBhA_#>WssAo=*8fjK!M}lZ^?%9}gWM4@Dr4JE+Gs*hS@7AjClq_)Cz!6hFsLwzBC*+~l#w&P<^?;}Isyvxg9(
zFzi_Kp#_7s6Q~p&yw)W~1;h8}poM*42d*0DYxKT740)Z`xqRhifP*jbCkE?ak*5vR;#zHR~
zaD0T{7DQ(>Hr&w%+fD0cwFt$CCI}X*H@?w|8rxN6WmAD>leJW_4B5S=9AzoQIq1
zj07CkT>1UYQ}v(gDLL}bcB{Vakn|_374weWzeHHS-#@=M;shUGLwJJFlLlHVGPEGL
z<=J51oCPFyIxOar=76(I75_A{26q`n3i?CiZa1fccw8vl_F>l*+X8Be5r0Cd*LAm0
zk3EH6zJZ}+=HxVBfCn!pb7}{En)7hDG4pcX+)iWfqN2er%iJE=(d3;?_L`L)Sy}FV
zO^v?JW=Zxr_cjk7+<{3u(Pt7&*$%Mv-R!SffE{;rtJHC=k3+saoJe7_Ft=&ijL(i>oeyXn-XXGqZ
z`5R@(yFPJ+9VU`r6ykP2p&n$muev;$Dx(2Y`<4Q9yOD$1o+ov-oK(-|*Yf~3ecm73vmUtf>ab9NH1D*YM#WIcPXje_Oe@42>1U9*EC77&rk_>b=7J^PW6)%arA>g;@KI}ft
zum#!GyuB*8}(z=Ns7J89=%p63gSm
zx@bFL!P=lWR;_xRaqV!2w41U@K{e6L#XA=QHSk;4gbo#nDBOgbIGD$W9YGj5=CD!}
z*e_BUY2lB9;D&(7cFGw$krAkNtlxG@vfH*Ect=%ppc|4!-_phCVa
zcbn^BKW_WoH)L~jR@dJmsg+GGlI`#QrQD11b7H;id&$NI=c%W!@gXOo*Jk^p){H;YQCcx>Pyx$hX@wS=AS$0V!wzv@kK2D+SiCQw
z9&dQ$Y2Nu*WmZ@gzYQHPBz>dfD9G0nd-k>gW5gnV9PVlMb_Nn)$Z)?ModB=RXP^`P
zoa5DQgls-N#paTW&(C4^J>8!uioMMP$R95`GFt4p>AJka12hX1+zu+9jNm2zqpZ12+!|Q
zv!G?`#ANu!&KXqZGY*@
z*b}1C8aWL1yAyAFOm7#a9nm|LzN|b1Lj=(wOJ;!cMQ5T~)uc*7943ld3AkAFY6T&v
znX7R88vz_!F@N2)Zq%7|zF~E1x$XM@37$?KHlSK9Lg~2Kc5<=Cf#fW%$7v#J<<8TVL3FX*Ya2-!ly5W1&b9y5I)HcwrnPVY>0l4%Sf&P7p|V
z7_i*nAX~!;IVDQy$yIO?nJBv9GMViWaE1jxD|3+3pXwY
z9^LZf%>A)&LoD?43n+a90H-!FN$6o#D2k-2)!zhOR0)pI91qJpY((NhVK^@5sWYMu
zKM2BwA510)3&Rg!_!%NkM%#s^;|x*wt}2~st`jAkYpqvZH5BuaY|sG3V0
z2Kfe)e+(^))>>&?e;<9@Xz)xZ0r>rRFj61lFC;G{iJ9P;Fv1YZ2cohW`65DmQHI%w
z11}tW`83->kgXky%Y2SHN#9VQ9|_aagcD7NynKSlHjASFU%vHR71~bR`B@J
zn%~a%i~85(^nQ8Ir0mP5j6NT=^E!rT7S|r4l{I7~cwy;+=LY1OA5MdG1K%b(Qb~^p
zyhH?cNsnl}Y>sBY7Gk>P?a`Ft68l=Py$p_R1%Uf@u|}{zb)h|);GU57_mSYh4a97L
zB6RVB~>VXD(w>EQV!jqlh
zdw%-To+1@@UdQt;hTSZt%Fn2V<6a6Ix}NwYT!P)b4QD1(78>c2rhVKzlEBC;(o*KdZ#
z$c*GvFt`NEtTQDL$}Ca$vt#+;uVHSN?Bx-z>SsE?o$p6q6IKVk=%nDX_*tg54Qfpd
zK#t`u_MkAN99gg&tU@h^f+JM=kBc+0Wl5_vEkZIyMj<51v_Xqn=IO11&VJkI5j$s2
z+~f0|0$TLc+ZsQ>rO+;?_yFuL84A`{ZL9^TjkCE?kEqH*5L
zL(Y~nc}MDvifIU-3}h#TLmT#`SSJj_fu?(5`9w5W<vE*9Jmg
zrD_$8GhwaCFR~R{z4(@WI{JXKKG4B;_R%_KUR&C3M$e(J7cwt~p2@%T?fV(1A{Cu(
zR6UlEew%QfE50DCb*-n$viL+3U>i7?YbEm+UpC*Yr3G|s#4D;5!{tIUtHeyyM6%he
z^yc2E=jxCeUQHXcJrcZ#99;^kLoSfQ%m}s};r}4|-G40)7s@widP*neGU-t~&r0uB
zA))T~Pv6oJ5T=(ePL*$oX^2u*T~wK@-;^jahaJZa>wl}UZtHz{Lj}HRdG_OBwHRoH
zk-hS;_*8-`2MNkwC-R9HO-;)1JBV^p;S
zbEgXF&
zYT$b4&mAKEo(-H(GCiqX_j@XvT6VckzHkHCQzhk2L@cY@18E}am)6N)P}
zj^(4lJ?NkPX2!*yAbY}zo8czCYxKbr?4{}1h!~&JyGwxtd?h}`4&~)C{-{xxHSHkz
zXLn~RdxTahKlxn#hva?19NF}HHkExN;yIpjkpc8r9D{25!v0Pn>;sGHKsP_kyp(?%
z(sMuKXBc1#fi}UB=cy8Haj=hlIz*Ip_g|1OXHU~#jKGGi!!D*TS
zk%%o_Ofa5_v`Tu^=}-J+fCo
zwOH;HFfJiEhQc~qH}D6N=SaV~RG)v|CN=^yJth^(n5(Ni)=5cU-&|K3$vU#b
z;PV}~XSs^11_EIKz7ub;aXb;aU0AjpJyoS)m`VA3{8wYYbf||k7w#`<0c@L%#Jb-C
z(CZtCGdzUJU6aN3-|X~V2-t>s%ceKNGr|YiX+BIdnyb;IIk-$I*6?3`q2e4J?V#{d
zpSNk98I;=6a>ll9wq-lKVIB>bi%V
zoRZ>opkpL=xq4?dT)=P&w`5D|W+mAHZi$HDh695rB>fEmgrFauzW`v3vzP$waDOj1
zgBbRfo4Un=cX)NtI7LTcUg^_BYzZftrPVBm?}z
zvC*c2B?gzi@0@0O&MFqESqIl4BO^>|4}z+Eh@>f)T>i
zvE&|%07Y=PWsnzwVgKD&iaKLNxYg;yk5wvTL-84(D#tb`Sp|P7V9ZXpGS@khbE=-e
zSnVo-mft##YUEO|na?DxVI*kaDoFUlY50u-H}J8w8wpLXB~P_vi5fD(!T_E2xnum0
zE$@l6aBn@2f^3jooyM&3aF|PJoQ9#WGiDKPeLv{@9R_cuCfJiI>>DSSOF3a!Y$
zK|z$C(W;+Cs?)OZAql7!l7ILYzB6A5WUe($coL?xWvt7(7vr)#PLM95Oz>BpsB(gL
z)}D9$)IEOO;9;~?D551ZWV8;KTJJpbAIyY)9NT^uIs;V}AaI`Hgua}>%q7EEP#k&b
z)(R$va=
zDmKgfORmprp3?!4^Dvx}DF@j^S;nZ<^1c#qv?i3N)8lp1k(53|RkW`@7aY1^ue%BjP2S?T&H3-D2d1`w
zWql#88H91bZu?Pf0sRX~%9?PR!VMW+?^4P!RDiA8ficnbZ0%kZ8wNRm65DE*T|0^$
zVjEP7<)2OyVMG%IyLS;VIO3-V=*!v1of2wHg0HX`%qTf-8GQ;wd%;~QH_A#&0C{h8hUTEjXM<6G
zi=XwQiq0sAzQ
z(x}6%Hs3sJs)Ex+!5h1
z!BcRmhph!@12s%Tpdy!Br)oDQEJn*BHmvbEiaF_9F`w|HGbB$TEViLNSq(}+l{Ta`
z`KI60pS@r#HGwp?H0FH$+__IM)MzEl@W_RtB3fYQixfZr#H03?98mZ9cw6UV2+r@q
z^h$#c;oDzVHSP>Vh6=j11~Sz3wtSj0_ySkFy2Sgl3z!kP>jV;^!)sMiG07#y=Q5mK1HMs6C
z$|*hnzA5%}QMV(S7CH#=Fy8cpt#MZC(o99~tCCgKKFxsvw*iN*Ek$ZysASn3Qzt46Wd&y9~%j)2`DY;IvBgR?00lQB7E(k~2)8B9{k-%#?E5>}Du
zwWyn%tINoAh#OpronOec&{L|G2J)AL941
z;5a5jy<=Z~Vlk``;$3ee)x(pyFkO^GzlK$lS=(%QU%<-sqOz{U7hgSv0f**vWg`I`
zt*u2L=v3Ef1ZH08vzSGc0UmGfrjYmE%S-WbA
zq>0%_-aoH-3*hlAAmqt==mkyfs%-hQT+ZV_F3+knS3}_<{1MraLmNaqd(M%_h=PHG
z_Cxq=JLt}C)vN?FMfwE%R>j%S0VeOS8+#%hhO5WsFdeOK`2r;Et^|d1+^w=xAG&lB
zZ>ZWVqb9CF3ka!P{PrE^)Fa`-gQorU5oJekBqnbgp;5#LYcN8ZTkP?w$;v7Ymm40=
z;fsc8=_DO{68*5~j-hSVH96`yCKd0`hHLhA6^+)}6=iw=+3
z53I%y9zD2SnZ*g{@Z7(e;KhvWzlwOy*ExURD*b35rh0W^xr1XO>Jc5H`RO3oA8>-H
z$g+=ZX1YclYGFTD1)3%CRJyDkCAx{3m@RUOFj-`OrTXAr`ZM@(SPj!FcwC?^Qb5dY
z=l%!}3x?DEX<4fdt@mXVm;-_b=7h$0Axx(VqIXI>3}@wd9}H8~9xLhvH1T-XM{#E8
znk15B^;{6Kbu?j>Y+XbKs#X--s7sm}w3Mr5JiVusu0)ZQf{}x*zq&b4s3_^Qhjs2w
zjn0dA>714lmFs-D*kd^S3!6eHlA+Q;cO|0K1YwkJ};zpdGDkykC@d{fRt
z)p5+T9@aVIY`*_29waoZFUij}_Kjr1bZV>Mj8;iAZ|Mfmw$BMnDSc+n4oPRhG{~IYL~M>OJnn;)2eK$9!e644HP>m6
zDU||r$TL-_YQ%daBdpqznQ}+Js)#iPi>#M1DBzhouy&5)QC~F_kn}DY8%%_1I=b*9
z6SW0i`CNC$(`;jMV6dggjS{=prZ;*y)^Y`ygNQ1qi+zo}N&_3dx`1Z^E$CBTsH{tj
zMl2;8C{8na0wc)&&BhI&`t7@;YE}zZG6!v>vOO#n1UZ)NYyOM~y|?w5oE!UQ6p;R1
z<|I-H$#csd?4)X9?O216yWbszmV|%(EH2!0av_-38Y~ZLKFIByvY_)4Bd`-SNGq8k
zN2M?CH=*m^!gbJ8_93Nk$m=>VlXw>|l-_ufSBtTE>Ia49yo%SaP0zJi$9Pv7xeJ~h
zq}{;%mfmqy@OSG+W(yeC|`l-zYdKaI^LE6`oxGK#>T2}1fj^18)6Hkj1A33Nv$Qw>S=-+LN>Y^OeVdI$$!-~B*-9wQQF2D?Hh^?*MaWh
z{%I`7GQ$##Cqdxqe;|Vs;W|n&Pt@ULl%d;a(c0De)qOM*GI1rh7c!f6TyzDEuv&nG
za*MW%RF~zcqIkT~gE61?e{Of5NtPX&o}#R$(!KTC`*+
z-En=0K(PN&Ec(WqBMSCXnZt~Msznew_@)Sqjp_rlwgL#K6AQmy07HA7N=yCfDc_V*
ze;Jx${wiZ!7z!{4
z#w#)>I#X3xL^_8z3RCLFcqg9x2buKMy}Ivi;{C3?cq&H^P@MW@>FJJc%8;_}%lt6#
z4UxWG7oOl4s)}0-UA{N)e1SpKRMjY0C
z`lpsud;?V)+N!jcF_ktMJtkmvXWsGpaYa$5rKqDsuOezzuQFvUC=9c(>V9=1umRch
z@XmBWPWp|)dinJon8;jjxEjKrue_|owZfOF;9l1G__A664JYv3OetME^AP$3ZJUoC
z+Avf;`B$tp;mldG)qsQanQ9-ld8Ue|Qp*#vA#YM?(~?@8K^vl#At|q@2Q3Cibj;8(
zk`|*#MW~%UBA9A>o`tXtcO2sv3aKSr+@OXJ(@AX@rSMQ%hCxYxP^cSB;ZzUti4y
zYexMQaq*cG2kw)5emS7Ly65fJpa2-pe8E6ldt9iypJ+;YM5yt2I5qxX(>15M@J7}U
z4Bn`shc6eH+}`%5@t%_0G!X>y?9IQwOll#=T`LJ$TirK=Q3YT0fp3@_gWHR|mgeii
zuL4q6TF$RI<;AKFEG40>YE!SzTX9#^mBX%DlyBdus2gsTt@~~Q7;_3hH%mBq3e|FL
zHh3Xz$g4(Ix?hvx8vvP3)3S6e6C}+d6t=WfUJcAayJoX{f^=MaG(9_62@H@2lh`P_
zI@5c-U?)1;6E=3`hwFK$>-wR=^i5a+>bLJoPNTmhhDfgVzDz}`n_9xuEZcvEO=aGs
zFC)4b3q)~hP)iCPLkrDn)(Tk~BFFnpa{+;tj*C{73Z)iKRE?~Sqv=eFI!p>z^q
z8K)g^b}DzS>~Uf^2F)El9H8BZ=33A&o#<@Xr!_O;p239Q8>i#S;Yq*0T$&N~s<5>l
zCyhL5;VZ@S?o%@|AusGArd%P&oGVLSenPz5Np^HH=x+E;{$#qJ`c)lvRgXU{x!has
zt!U=gm`#AZir+16fo{)iTxf?8Y4<~FEi7&%S`m2dA8lJ8rVC!p9I6DK_B-)fkzT=~!ccy%T2TRzFwo_!2B_FT;2pxZ?f1>97maSsu)M$2CGN^7j3K^oZ8JfD=22m!Ohd}r
zbm)~%`uMb}ws)SmSZ^Aw`@f$CDIyBX|ViS5C`xT72vX5(h2TS%k(_Gbd8D0t-M
zsYsBA-~FNdxUQ$7rIL$-k?^Atn5yk1^|zC5R9W{@N41kiV|S-t#+?zS6w3Tn*94wc
z-8FTjDgSVz#u;iorETrbws&^3mwt!tZcDgK_~a4$Ga;909pBBs?3=klPZq=X4tdrq
zQkV1yksvQu`?^flFD6^wIh0D=$R+!Gzw)R(b)|DI%D*o2*Mh{+qNT5=T-*y$)WzZkhG<3p}QyT=bEic;kq`1u8
z)K~i_mV1I*{}#hWEBH=4o+-j~%S>+9wHHhL7B=+OAS>K36g9t(biDT^iuthvv3)3W{$c$j;VUY{aS0osB$Pg-|T(C
z)#*<|Z{wVshfwi$p)wlA!q}Mo~l@s#DhoX)s*JHVL
z(`NMNh`P6P3#Og)HuFISJ&kXNpflcej+Nd-$EF**=KORo4MDU>F!aW=A$>}Ii%Pf~
zp>zR78vlZIx7){S;geK%zuw}Ov4{Lbfl|I
zdCo8^D4EgcYu$b63&PXgqid|HnXXW=5~Bu!x~-*VYNT1`9?_QC>Iz7wuE99$C?hFr
zwFAgK!}wf)y|kb*vdg6GY*b8Z5hi6pj0l1FN`j-1e5Nl`5+Qk}se$4z>8NUp+Hw-N
zU+s%)ZgEU)H)FkM92mVX;suy3l?dawH(n1u#Zk2liqoP$$?LD9U;;ARidTAjRX?KW
zJsqF5BnX_5RXIniIdzIY%{PAL)N=aEN0QHdR#=3k|sCO;pt&$!O-sxkguWsIY5?6>D&DBTYBzK
z_U7u>`8BB|STS
z!5AL^dvOMbywCsExm0+L?+g9>S4|kgn0joEicZ8wAGmWAz0+`>SOTB9S`<)3-3=rR
zsc8y(KsX8NU-p+>hFhs;-j=DI;NrE29mDd@hpOO8-9?UiI+MO5@>d^_rOgVIHq**i
z3~SH}Q<)zvE|SEg(e8^d4+UGjUl7u|4}Jix#^BoYpeENhb9+S8sAxKVYYmAGjZ4Y{
zadtH(4w$j7D3iHY@=kPk-m|xQ;Jhcr
zbA8MMl>~BOWS!q~Uc_0AGE>%Q3?Ff(8<5Z!D6_XKR#;u%$Y8*~5_X?gRs}I(tVt}a
zrx~=p&xLP=LIy43izX5mseZ
zi>l^5gu#k_2f7?f$3bO}2Ap&lXo`K|1_KSN@C;*Fn0j6syU_(sDfng)Qs*FTFL?tI
ziUZG-r#Y}SAnvCf3)FKks(H!2mw5D-;uCW<_QL4DX&46*<9A^@EY&w+)|nM>oW6e1
zIJwH0^}P~t@9KXb5ysl{75h=>3oCs|JbHe&X0VAW;+?B=daN$(A|!Y=MBGh!{ca?@
zS=W#cmn;*O5A%KqMvlCdn&5}UONM^vMYZayOAO}`N+nD?2zL$BKb;E$+$Q=w6Z3j4
zD?NPJJxKAMh}PTfb7)t5v6#&u6gyug)*iiz7H+_s#873IThb&BtX3&w-zq$J{82MO
z)FX*{;ijvFs=tNJW}T)EFSu*&7v
z1U8q{h@?8?Sf)du(GUV%iz*i$@iulsZEd_?Z5Mb9Xdism7zrxdzG5N#8QoeQM?U-+
z&01dAEaak2uv?jo1vamaKA;zP;zD1cKy5f2BTKV+?Z7}`#H0s`@hAZ`VbMA1j@(*8
zV=bcQnM`}t*21*6FQa^gtd+#tIUH^ps>5C8gkfn1_ow|OO~<(0i63VHZ|=z;lVkx#
zu0bDh_pf1e)^eMZNTMWQ_A{vucVtmE$%$IZ;cTJI-^dT@E+P~ij&-2!q1;JLkyW~-
zW+*PyXQCJQ)(^nCFJx$fk}Ets!J(IZQErkLowaHX$6zoWWO(_Kd^&D2Lda}kNY?(R
zc?R8aO}T)UEvjY_w8N_S@0UFp?&z8dF2@ubB{327iT+xNm*`t+*77E13)1`qp2LF$r50w6T6dL9
zd=e#?iwNa|_PlGItU`3ZPvB>bor_s8W@b)=IW~z7I=D?tN*j{V;=vcB-h(RK@NTXV
zJ98}hp&R&7^|hEkdMZ{+oVWO|SdokBK`q>K32+#{-9K!%z?HUSp{Zx9xe@iWcKR$)
zm60DNG~YI
zbJcT2#gfST;;V*>Jow;|Bgc4azO*jKk|zm+h8se`aQz6ArDXgb)M$+&3H<@;Df!(J
z-WefhmZmA;t9TT5nAqccq2&uyeQm7kQ@jh+Ts$$}N60?v!0>Vwl{G|9w&=lD!Yf~Z
z{R@fb7n`tDD4ylKWI4aS*C-t<=72%%pi9N?fikkV{qzs4;_8v6gO$^*!C#jOsG4r9
zi33%jz|qxkXlbwPyknfa{H`An7&6+h_REFnLfO1iD9jS|!y)UMF&YTok82Dy=(Jj@tG_Ncb8T
zw)0z~!-9&V1~c7`#V;E7(3BM|Nte9u-L8Js!zF7-oh;aN?A)t2Y}DiRKCE1f6f`v9
z<7xhy-+crn!J$AI)z)P!ZtkImdwF#S-BOpM!9F`-G7$~yMtI4>%ha!GIsjW=N>CI
zC8eG;`!~eCf$t4RfU;a^`SPIs2hBq+MSiPu+91x1vNH6@;l{zQ+G8i?x)PkoK%H1f4-HbEOYJ+6A1}TQBC0#jXh&8V{Q?ed`Wh{v-d4P=sYhE*
zWM|R18gXCb$+6$8d#Q1mJv5
z|44&;J@>!Ed{jj*%w%7)^(mBB&BSO@NVma{ffixdIAWn3W0zoc+m=c5R&Q5?616{Lrlw(ba7&H8?QSOIxX
zL5Ps|WP35U__4a!il{R~QCsvFJqGO^y}7ck=(C|RNHBtd*N2(T)z6!MEOPd&rMNTI
z{6Q`50~4lE`orx;R!3Eltdv>zJR
z3M*OWdom}&6uD7tN`pyD13mfg*)ZPo3qQ7WC+@MHRINL{3oV78w|I32;FhdDwL;B7
z;X6C0RUS7`N9^e>F5PElr#ySF;;xuHW~Oy!-Y2k5b46pD+Sv4H-^*t__x-dhh49;W
zi(-s=bb9*uoRTp{-bb3VUD_;K?bbJZkM@6-a?_vD@&|fh2)f{z)t|1db%cB3Nsz>#
zMJrUp5AvQOj5k#?HDbPIfXyj1KMOO#rIKpr?PHCAr9V=M{Mt2&^l0fM?m24BN)B)IGH08@33@iQ?68d-p!WV$cNuf%03AjkdhMIlQAu)=lv|?f2V5F*uKpyH$Sppy
zEW&b;Zt4p);yr&t&7G!tkoK|Z4SyC$NE)prNrUwN{FhI+(3J}P=ym->?++BG-6f8_
z(pr-xCRFXPmwN`8m*`UwY`kxIh73ZcCer=H?b4=y6SRIm4v;8`fy9l+I(;i?7ce=;
zxDT+GL4KH&*`V=FNLS`s>%lT_J|IRTQa#IS+bb_Y|B8%50za%&jUav1I3I1Z5xCX6
z`h8@g8e(x%Q;aA43Wj^K(xXYiI{v^Wko}#G$N@T%#jn*eL}?g01xVQ;%TDuqFz;_3?$*>F-gEkx
zBJnn~9!8?rMRU!FHRzM&@55Rpa94!rCx7nO&2ex?&F+-}1@buEt8Ch&%DGFVoSA_;
z=RA-0z)-*b9X;!wVTp$8y=YJING~3FxFr(U4hed^|>`TpSOn``e4hOu@0J5y|vhtEUeq|0-7gKEXuDx=~oscai`aUq)9HE6Pne*1@~e#
zi2U%=UtL7_h`xDTuHN)mp`h5RRX$?WYPg%+@*vRdA;-X>*mp-Uj!KGCL7nE(J%3SWRS3iQ#zi9c&
zyJ%i4kL*#~RyQ?bwDH3H1)s&Adxg_TKX1!I*U)ZzC`X3l9qyKyBE=PIlP-1dVG?J5
z7ov~VzhW>5m*M8Q$nlgUgoFB=z8}CC9?++%fi(q(BF!
zweL{RM=+*ed~xfbg^bI58AAx==;6ClSW-Z#C^<@`1zB+xnp+BMY+{j>x%kWwh9)0P
z0l*wxeb`j|sf_}2?c))j&7E