From 18059ff25ce02b563a72190c518e2ac9a53aef48 Mon Sep 17 00:00:00 2001
From: "Anmulwar, Sweta V (PG/R - Elec Electronic Eng)" <sa02405@surrey.ac.uk>
Date: Sun, 9 Apr 2023 16:20:10 +0100
Subject: [PATCH] Changed rho alpha beta values

---
 .vs/QLearningApp/v16/.suo                     | Bin 98304 -> 100864 bytes
 .../MachineLearning/Models/QLearning.cs       |  15 ++--
 QLearningApp/Program.cs                       |  66 +++++++++++++++++-
 QLearningApp/RLsync.cs                        |  12 ++--
 QLearningApp/bin/Debug/QLearningApp.exe       | Bin 13312 -> 14336 bytes
 QLearningApp/bin/Debug/QLearningApp.pdb       | Bin 46592 -> 48640 bytes
 ...QLearningApp.csprojAssemblyReference.cache | Bin 424 -> 424 bytes
 QLearningApp/obj/Debug/QLearningApp.exe       | Bin 13312 -> 14336 bytes
 QLearningApp/obj/Debug/QLearningApp.pdb       | Bin 46592 -> 48640 bytes
 9 files changed, 77 insertions(+), 16 deletions(-)

diff --git a/.vs/QLearningApp/v16/.suo b/.vs/QLearningApp/v16/.suo
index 4440aaa92ef0803fdda288649133ffcf000c393b..103c2119432c3a8456e8ba30ad974c5e03404fac 100644
GIT binary patch
delta 4269
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
X$%pXLlbbMbhI2D$#y05uT#0`GPR=1&

delta 3719
zcmeHJeQZ<L6@TZ&c8uc$+ewqR;3Q7sMEP)2Czu4%B)oi-F+xKEQO1I_mQpqWr9~tU
zLI~JE)uN_li4V#}-5;Gu71q(wrVnBYw7gNa^^Z}ys{5l-)zba5{!wkMG)oQZNYC*X
z?uRyQYbQ<Gm3}_=o^#*1_k3Q5j$1+@%R~zl&bBU=p&3i%lAIf@b=R(Ke+TZ9Xl%k!
zc@%bFR1RA9(fU~vj%KW}XVcV7SfGJW?}a>!W^`9~C0NUeUP{cH5|p>{I7jQiWM3|h
znfkwHqQxDF4J(PZ5LyZC3EnOGpqb{Y2rCH72=@?Tn&_vE<_>~&vTp-EWWE8JF%uj`
z{!46vmqcuWC2m3wzIJB=Upr<+kM+wIWG?+dK1rQ~9D<9$Te1jzpp9rA;WR->@RkrQ
zCh$c?f>%JajIfwcN~k8d^+VPmph<C{!{)~kn*)1oUUxA_QVGFBC?%8;$_ZYAK4Eh}
zHY?svE2g(5H*fd`RD^SeAs02r2J2F~8R?CO(1lTAWu&v5s4XU^-P4doH;_rfBb>9^
z$}UQMNV;-*vSV^~S&GjJgTOl0**VZ0$dnNDsPlRTUbXnMwvqCFlF`70Wg7mq(Tx+0
z55g{tHU=pvwWjfKi3dIT)7cWo$4*G<37<FNr}=B`Y)N4nANHbF5QIG#Ehs^UVoJik
zh&Hh=IjHDU#!S4x=aqn+^NSaEv*aV?&5oGMiNSOzAx!6uBzU7l_Y=kl2M7lVK|)B<
zZ!MAKaG}qg{OlO9e?pibOcKHbTwU0&@P_AT@e2ay*Ykv567;i$J%DoADyxN7v?(5|
zCs8Zz$p&7h2aLR-e_B=tdZq6qSd%%*1!|5t8Rtv(gNB;t4SdZ~55uUH2F<%k@p^r}
zBGVLhdv&k37r=p9MbIu&T-aSa!rNcBe#P(G*Wy*#A9uBF5AEXWAcJmI?}6p0)dZml
zqx9=Tt#&+IHv+1@ukLREwYugX2l2;FP;@2mA%vB@WPF(Z3o&X>I+p3b6(jt6{a&!5
z*04amLt7dIiyjRw$d;dzAvIZev*ji{h0)d^*mSM!Pm7#CB|f{I2Os(~Ze^j>9w$eR
znVg9ny~~q*-SG5mUk1FiMuirYSmaNM3t`<4w{4w0wEowVr`tN7dS&Gk7dH;Pf1Kt=
zclAQi{8sfC%>ze|RGtogc9`dQsawJ0-99wd*ztGW0bN~dK=_P$vd8_cB$uugj{`n1
zcv%0<^g#%FhGRLi@Wp&7-=D}6+wDC0y2$TMMgDQX!_T(qZ6jA8>>rM0!2+cF-po0k
zr_VQagPl7JzXt45PGB5faXlNjzi`V<anpMRbt<_Ynsx1NisIMB@6qvUT|INcf*a3P
zh0iH?;%t>L7DKz<e(s1YmbvH^3tfmIeE#i<2%W<bK2P*z!Ue)b0tfgN!mEV2*}hEB
z)eD9h{g>5mFVI(Ar_^S!oP4)xT0LWms8;wDSYr7kiBGIhDn499wWPjuLjLEr3Dp5_
znfY-7>|Imf<g83)<_yg{#Y!hsiz+85rW=2zXRSUT@~1XIr7)b3CyqP8H|2tR?b2@P
zVQCxT$5Ng6pcC#W>X$Z4JEX1jdT)`2N%V;HTk1}H5}hErU9c=-xZv>&`KTm*pAS1h
zLH{#~c&h*g#3#An21#r#fL7QkLJAl{Ed&EYlR4szBG`RO{SE*&3>5OpBSwqivAHE+
z$WtZY6K^VzmsLY8J(o^0NiT@IYT=;hEQbbBR|_w~wK!v+hraxS7iz_>axlZ|DeiY?
zN<q$TYziD8M*us6$2K)h5oC(1l`tW9rRlN{4R0PEs@pO&HnzVVoxRoKJwMpQ(h54T
zuN=IQyc#;jnHg6{zaE3%D08Hy7KR|dHpTz=@^YGU2klBbQcU~dN<P1M@!>KmXwpmQ
zieEi4zZ2SFFd>c+?$LDwru;Ibj~ZhOEqw%*Cap}qsL9<PgYU)V7eB?lh<7slVpj<?
zMGPOPFs)vY(**Z>pegoL#P_lBqN@>dtsAfNza~i%vsF+g{!$7K@oEiNgs~i|M0*V=
zGb?}!=#r7a1%&ce7d}&+M;_w~Nch2)T%oRqe(_=>c(G@l)lqTr;IYW2n|qEua^H@u
zz{8o;8~k5k3df!B@yr0o7=EWR@}p*WI+Ik!EWTYXGaEtv->d~ewP4H*f&rpzkUVXy
z0QXcOs9!9PnI!<?fk9{yV?pSeDuVvV+w0+@+Z8j{K^h{)0Sc!m`#$aaYzQ6|#vw2w
zp&n)$M?n35S#cu%cgm`Zx&<BP7ynr~eN$CLrPYa!`alXdGMsY*V3<=`*M{#06fqiv
gRmt@7ff(t4K`iNWMIP#a{(qETrzpQ<yz-#>IT%k+s{jB1

diff --git a/QLearningApp/MachineLearning/Models/QLearning.cs b/QLearningApp/MachineLearning/Models/QLearning.cs
index 4734e96..acd1ef5 100644
--- a/QLearningApp/MachineLearning/Models/QLearning.cs
+++ b/QLearningApp/MachineLearning/Models/QLearning.cs
@@ -115,15 +115,15 @@ namespace QLearningApp.MachineLearning
 
             //Console.WriteLine("Enter targetted FPS value ={0}",targetFPS);
             double currentState = initialState;//FPS value
-            //int counter = 0;
+            int counter = 0;
             while (true)
             {
                 currentState = TakeAction(currentState);//currentState= FPS, return should be FPS value
-                //counter++;
-                /*if (counter == 500)
+                counter++;
+                if (counter == 2000)
                     break;//will run 500 times*/
-                if (_qLearningProblem.GoalStateIsReached(currentState))
-                    break;
+                /*if (_qLearningProblem.GoalStateIsReached(currentState))
+                    break;*/
             }
         }
 
@@ -131,7 +131,6 @@ namespace QLearningApp.MachineLearning
         {
             //var validActions = _qLearningProblem.GetValidActions(currentState);
             int randomIndexActionGamma = _random.Next(0, _qLearningProblem.gamma_length);
-            
             int randomIndexActionDelta = _random.Next(0, _qLearningProblem.delta_length);
             //Console.WriteLine("randomIndexActionGamma ={0},randomIndexActionDelta ={1}", randomIndexActionGamma, randomIndexActionDelta);
             //int randomIndexActionDelta = _random.Next(0, _qLearningProblem.NumberOfActions);//choosing a random action from number of actions defined
@@ -139,7 +138,7 @@ namespace QLearningApp.MachineLearning
                                                                                     // double delta_action = _qLearningProblem.delta_space[randomIndexActionGamma];
             double delta_action = _qLearningProblem.gamma_space[randomIndexActionDelta]; //fixed for now, can be changed in the future
             //int delta_actionIndex = 0;
-            double rho = 0.4;
+            double rho = 0.1;//0.4;
 
             double saReward = _qLearningProblem.GetReward(currentState, gamma_action, delta_action);
             // Use rho to have a slowly & smoothly changing FPS value after an action is taken
@@ -162,7 +161,7 @@ namespace QLearningApp.MachineLearning
             
             double nsReward = Max;
             //Console.WriteLine("value of nsReward=" + nsReward);
-            double qCurrentState = saReward + (_gamma * nsReward);
+            double qCurrentState = saReward + (_gamma * nsReward);//discount factor=0.8
             int currentStateIndex = _qLearningProblem.fps_spaceIndex(currentState);
             _qTable[currentStateIndex, randomIndexActionGamma, randomIndexActionDelta] = qCurrentState;
             return nextState;
diff --git a/QLearningApp/Program.cs b/QLearningApp/Program.cs
index 776be1c..c9d9244 100644
--- a/QLearningApp/Program.cs
+++ b/QLearningApp/Program.cs
@@ -18,7 +18,7 @@ namespace QLearningApp
           
             var qLearning = new QLearning(0.8, new RLSync(),targetFPS);
             Console.WriteLine("Training Agent...");
-            qLearning.TrainAgent(2000);
+            qLearning.TrainAgent(3000);
 
             Console.WriteLine("step 2");
             Console.WriteLine("Training is Done!");
@@ -27,6 +27,8 @@ namespace QLearningApp
             Console.ReadLine();
             do
             {
+                double[,] Qdisplay = new double[6, 6];
+
                 Console.WriteLine($"Enter initial state Index. Number between 0 and the number of states (5). Press 'q' to exit...");
                 int initialStateIndex = 0; 
                 if (!int.TryParse(Console.ReadLine(), out initialStateIndex)) break;
@@ -35,15 +37,75 @@ namespace QLearningApp
                 {
                     var qLearningStats = qLearning.Run(initialStateIndex);
                     Console.WriteLine(qLearningStats.ToString());
+                    /* Display 3 dimesional Q matrix */
+
+                    for (int k = 0; k < qLearning.QTable.GetLength(0); k++)
+                    {
+                        for (int i = 0; i < qLearning.QTable.GetLength(1); i++)
+                        {
+                            for (int j = 0; j < qLearning.QTable.GetLength(2); j++)
+                            {
+                                Qdisplay[i, j] = qLearning.QTable[k, i, j];
+                                //Console.Write(Math.Round(Qdisplay[i, j] * 10) / 10 + "\t");
+                            }
+                        }
+                        /* To print normalized matrix */
+                        var normalizedMatrix = NormalizeMatrix(Qdisplay);
+                        for (int i = 0; i < Qdisplay.GetLength(0); i++)
+                        {
+                            for (int j = 0; j < Qdisplay.GetLength(1); j++)
+                            {
+                                
+                                Console.Write(Math.Round(normalizedMatrix[i, j] * 10) / 10 + "\t");
+                            }
+                            Console.WriteLine();
+                        }
+                        Console.WriteLine();
+                    }
+                    
+                    //Console.Write(Qdisplay.ToString());
+                    //var normalizedMatrix = NormalizeMatrix(Qdisplay);
+                    //Console.Write(qLearning.QTable.ToString());
                     //var normalizedMatrix = qLearning.QTable.NormalizeMatrix();
                     //Console.Write(qLearning.QTable.ToString());
                 }
-                catch(Exception ex)
+                catch (Exception ex)
                 {
                     Console.WriteLine($"Error: {ex.Message}");
                 }
             }
             while (true);
         }
+        public static double[,] NormalizeMatrix(double[,] matrix)
+        {
+            /* To normalize matrix*/
+            var maxElement = GetMaxElement(matrix);
+
+            var normalizedMatrix = new double[6,6];
+            for (int i = 0; i < matrix.GetLength(0); i++)//0-rows, 1-col,2-z values
+            {
+                //normalizedMatrix[i] = new double[matrix.Length(0)];
+                for (int j = 0; j < matrix.GetLength(1); j++)
+                {
+                    if (matrix[i,j] != 0)
+                        normalizedMatrix[i,j] = Math.Round((matrix[i, j] * 100) / maxElement, 0);
+                }
+            }
+            return normalizedMatrix;
+        }
+
+        public static double GetMaxElement(double[,] matrix)
+        {
+            double maxElement = 0;
+            for (int i = 0; i < matrix.GetLength(0); i++)
+            {
+                for (int j = 0; j < matrix.GetLength(1); j++)
+                {
+                    if (matrix[i,j] > maxElement)
+                        maxElement = matrix[i,j];
+                }
+            }
+            return maxElement;
+        }
     }
 }
diff --git a/QLearningApp/RLsync.cs b/QLearningApp/RLsync.cs
index 2d50828..344e77c 100644
--- a/QLearningApp/RLsync.cs
+++ b/QLearningApp/RLsync.cs
@@ -12,8 +12,8 @@ namespace QLearningApp
         public double[] delta_space = { 10, 20, 30, 40, 50, 100 }; // possible values of delta- 6 values
         //public double[] delta_space = { 20 };
 
-        public double alpha = 0.2; //original value
-        public double beta = 0.2;//original value
+        public double alpha = 0.2; //original value 0.4
+        public double beta = 0.2;//original value 0.4
         // State space
 
         public double[] fps_space = { 10, 12, 15, 17, 20, 22, 25, 27, 30 };//PE, APL 0-30 read it form file-9 states
@@ -21,10 +21,10 @@ namespace QLearningApp
         private double[][] rewards = new double[5][];
         public double Target_fps { get; set;}//made it a proerty 
         /*
-         target for syn window if it is 100ms, target should be given by user not hard-coded
+         target for syn window if it is 100ms, target should be given by user not hard-coded - done
          ini satse: 20 FPS, 100ms latency 
          initial values 30FPS, APL 100ms--> Target APL 20ms, FPS >=15 
-            FPS, PE: 30FPS, PE: 25ms --> target 
+         FPS, PE: 30FPS, PE: 25ms --> target 
          trade -off
          */
 
@@ -38,7 +38,7 @@ namespace QLearningApp
         {
             //double reward = 1 / (System.Math.Abs(currentState - target_fps)) - alpha * action_gamma - beta * action_delta;
             //double reward = 1 / (1+System.Math.Abs(currentState - target_fps)) - alpha * action_gamma/100 - beta * action_delta/100; // gamma nand delta are normalized to [0, 1]; does not perform well when fps is very low
-            double reward = 1 / (1 + System.Math.Abs(currentState - Target_fps)) * (1 - alpha * System.Math.Abs(action_gamma / 100) - beta * System.Math.Abs(action_delta / 100)); // gamma nand delta are normalized to [0, 1]
+            double reward = 1 / (1 + System.Math.Abs(currentState - Target_fps)) * (1 - alpha * action_gamma / 100 - beta * action_delta / 100); // gamma nand delta are normalized to [0, 1], so that there is always a positive reward
             return reward;
         }
 
@@ -53,7 +53,7 @@ namespace QLearningApp
                                             { 8, 10, 13, 15, 18, 20 },
                                             { 10, 12, 15, 20, 22, 25 },
                                             { 10, 15, 18, 20, 25, 28 }, 
-                                            { 30, 30, 30, 30, 30, 30 }, 
+                                            { 10, 15, 20, 22, 30, 30 }, 
                                             { 15, 20, 25, 27, 30, 30 } }; //{ 10, 15, 20, 22, 30, 30 }-second last row
             // 6*6 matrix Further improvements in the simulation: depending on changing network delays, the FPS matrix can change, allowing higher FPS at smaller values of gamma and delta
             return System.Math.Abs(FPS[gammaIndex,deltaIndex] + random_fps_noise);
diff --git a/QLearningApp/bin/Debug/QLearningApp.exe b/QLearningApp/bin/Debug/QLearningApp.exe
index ea93ca9266419cad2c275deb93337a461f88c6f1..69860436b49a7b74247d4dd3d9d92820600b4015 100644
GIT binary patch
delta 4705
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
Q*2B#!hU~_V*g(qoH<f7U8UO$Q

delta 4100
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
U69wsy0^IAEh_=1U#?sb*01S7JCjbBd

diff --git a/QLearningApp/bin/Debug/QLearningApp.pdb b/QLearningApp/bin/Debug/QLearningApp.pdb
index 212d01b5aaf1be5750912b2a43e1e1ccbc55e85b..64633aa518b875e67a87556f189d8bc4ade484fb 100644
GIT binary patch
delta 6884
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
AyZ`_I

delta 5128
zcmeHLYfw~I5<ch7gBhH`8BxFiW(H8iL11_cBN&xYK`?@-;4>NqUm+ss3a+|}1EN6!
zMy6w}=4I54iK)cIOe&S9ajlJ-mw8mIjoHm^lFfsp(3DAjBwNw!*O#kn)z((IzxGdV
z(dX;ar%&HLeY(%NL+EEEG@$Isur3xt)JZgW=0{R&Z^`IiOyK=jqlAdqm2V}v6=PU$
zl0RPSnZm|$ckIH)UoYJEZS8Xvi)XxfaPNWL5562-I`yB0r<%NLAIi_#e>|{HhE3(}
zRrej}d~@2QN&VIZuk7EQyU4k|#GYx2{`B~UnctMn{HTESo{27xzB$FXa>e~x<g><6
z8#j)6_Nh?h%9)Zg7kZn`6-DPW&kcQS_Y<BkkEs?NJr;c^{N3BMC%s00((8MO`oUB-
zEsjvhm`{vjgfK3Rru2+d!_sIWBwe17Lt8Ss6bRcqj>GP;Sayb9X@ZWYY#6I6!YIB&
zU`Bx;hL)tre$QRfXv63iI!YgxYWPBT-PpJXjCKqR=*XEhN!n;hR+@1b1mEjuXO`3P
zJ!`^LoY2|t1v5<%Vk!E!=;>0ug9hqM^huUQ3FyhW%t3GYOk~TpC}n!8LicB%jmopV
zu(~OGvN0A`U)0ly>{Q2#`hQz}7Zw-bE#qMIB@Ab!Qc{k^{;H;uD%^H<AeyXx7cIys
zfVJM7eB*Ff>(|ri9H+ToQ+1Hci8cRb#roF979pIJn-fb(-r;fx<$4p*R;q1-Hw}ER
z+8+11z`y4mV_$6;^oU<)#_NXA$N7n72YQG*dRe(_p(2;(u2I{*+)R5|n-vGW7*+3&
zzF7Js*JA(u4I@L<k;}eBO3342ROGF4+<~;^Cw&mqb_A9*D~jI8OC9OPFb~ZF^6J?w
z*0E5#FP{Aqyw6i8n3Fl0_f>BcIz&Xs&<Ul(t+XT7sz#phsPooRUw&*+95h=si=rmD
zdPQJaOG9&$y19*z55V$1yzZLLwYORkj5Nx~w~(d4Ev+OAlBl9!D7ZDbE(4-3tkjpA
z9ObrS)!+{n#AED*0vGH0hSSA@Sd~i~X%#~C2Wp}+xKTK@09$FIkF}Th(nz15K>K`_
z<cHx=KRnt3-MOfBjspi8Ht-GvI=K_0pM!3LWWfy@ycJfu?3=z#i;YqOiA%~=GW4$O
zsFB+{WM_fwtd%>X<jxcFu8VTl8QGmJyPIWKk?h*8bp1u?+N^YW<M2{_l#s9^Vx*Ki
zOBFS)#adjehhP9t+90THJfducSD0D|&sVfmG&Qs|1RLkJ1Y1_H2G>#x(#nF#JW*3t
zgTdo5WcS9KuO)sA68~0Y%|gFRLHTa>dlVGwX1{|@`fbYhy2$(fol-$zEh;*s^y?#6
zi{4kP55UY|?nseN!J^o0>x2k#1Y3cqHgW0Ot0CU4jp!SJn}8g*t-wTW+zD($-woUb
zOacBDI2stjpIJl;tMH<SMTi(|Z4szk?T-+Ns>~`z3g`_{52cskL2DF+C+2Ot3-kTZ
z>;{$sdw?~--N4&{dw^?!Vc=dM0iOrn3p@+l5BwYOKH#T7Ue7;(_oM%%*6#-*5}~hw
z4+0H%J?ohzmh%t<(GVN}rUD-ZrU4HEM*-Q8N5cs~o;VrEFD%t?o+e)eJPi3#;3L3B
z;1S?v;G@91fsX<A0*?Z*oKus+69+e5Ue6u_{2Yv)5Kll2+TuwdA0Wqo$-t+8DZt~@
zH@UfQdO_HOsw^39OhDFo&6HkJY#9mGKbU}mf-SMMtt5rqC3<DDnU0hcQXSYbGkpg3
zVX#$Zat88@Fm9|h(>$=)cjFQ>?G6-EbwIByH`BR5vC$1_qnTo+6dU1yalM(Uz@~!z
z9dxJU8IjAz4l|twI|^*KnXXPrHFUEl)SD4cw@fw3p;S86Wk0WZ$LA|2<4}5XYCQE!
zwb@O4%|XH=oR&QDI|U2#O!FvyGaZ}eptaL%yc8~h2f$(}$1sRxd<4J}SjSyzQ?LZq
znF$t4SX$~);C?p%uCva&7=Y`W{myWiMS<rrWgey594RgvW|YgQa%K+NtuybDy=1M-
zL|at(lsr#gSB^nzuky<esiNv06DJY7Onn=N(+^d3GAU9!D@S7Pj%wG~B^dEw&w{{A
z;9$)}P#cL{7iw8>-uKem)r(<w?Cdi#nl8_t3NyYrf0jl4Y#WbGL*{XC7!RPYiYkK*
zO_1@a!bkBQ2wC?4mDb#E?*YfhV+n3q)=sC(HL;Z7w~)8iHlhY1B#v0Fjq;hJr&nqc
zXiaTYGG8%l^+RZML6g(3P1B5{*|o7WFwaKgg5zdDD0m<F8gc_=XuE80klT+a+uxC$
z^W~1am5v`FzxHv$m&~C5^7^`XUXLW_qK<9IdEr8=km~~C(5pZ$zf)TOPg?&qAd)V0
z8i<Swy#pK#{3|d6_;=t~;HN;|gU^7x2R{Mvxe@vqm<7B7%mylOD+e37>bA-B_-(1h
zb}<a+*(lI3F+xmMk<U3R(v$b@2h1~pT0s0TKfqZV)fZT#7G~XW3$82UAp{7vks_O7
zX>y%iIi%2>x@`Jj{<N49$oahC!!Dvw`hwJ$lVIHtRRUjAXx;)3qTFJPfu&3x9SNo@
zfOEk@rBFx4`fO!_jtcAN;ri^YpI{sctu_qTJMC@Q6Mik<ngC&<EA=kxjvJ(sKCX+W
zl4TZa_YG2otU(vm)sKV8N0yC&w~=$p@}xOa)sbQ@1<GO%C#{f5n=ay9>5y>=xU0v5
zszLlE(FxjzC_EFs!(^|<>N7Ak8Rr|jBdNW?wQ!-<tAvQ9J`Js!BU_QoEZ+fBjJtRy
zXtvfrc&)GDMFgJ5zo4Uc%ql*wNsnrgPrhbN)A~t!`+m*Z+nCC;pVU!tLpCMcX|r$A
zM17iS5v4S^Je8V(*EQ)H&A@(5yH#_4oq^tHnB<tKz5l2-tySx<6Xdz`cB)uCw6EHP
zyrV;Ru0(5I?UH)3ug9LOPBFn}r5sL08dlGj$<Km233>~}CHXmsGuVVT52p)_kvK2j
zeG8}@R0FC5HR}2To5M|&(oa=Qepy62n{uR=o@>gNx%5p_rp%+b=6w3PX$aLcr^o`@
z(CoMP_y8WQ=1e2K(407u_f#*ug<d?l_^NSgqb-q(%`SZmf6ZJU_LHN<FUQjyv_;h2
zk}rdF0&P8g*TN@iYHN;MPIFodmE0B7&9IVAwfbpS>k!g!$bwsW8*<=QJ=%N<qb-P>
z+OSlio=sVp_~NEK#k+zoZSpAIm3@IZ;Vnt{I!fO1X!HPYAfBfso!fHST!T}RA8+Kr
ztzRj4ac(Hy&<jDi%5jGHRE`huVa&-Sx*SSWPgb3z?DjYV7w#@<Z;$7SYioBHxTIFG
zK>ZCBMVG-1K&Eo|8ly{4;-5F!JcM5;P**6XBhJ8|V>o?b3SU4=I~)eS{nJzduD5d#
z@SSa<_d4SFc4I-ACP<KKpGrFPa!>(R8!IeV6$0Be1;hI57I3ezLWe3izCA$?<^#6v
z<R6kYjtd^-@b!m-haZg2PLI+S9huSjoUX5W{4-rPy?lx6JrjIq@tfi-*5HO7TYC(v
z=5p_X5x!lX1`iRAN%TQTcu_>b-dH(__Vz?ZAg4qDC?A9j68!NuzAtcC1|o9z^qc&>
z95xxF+pqwB;H6x9NruyV{_9WZ`_KM*_#jgM=fmeF3iR+-{KfTaf&LE#dQ2_QaF;&e
zN~%*m`t}?C@c4yE7XmxSz8rb_onLlGlDhhJ);bh+JPLC>5<#uxZ8uZN0ch8NYC&Ad
zGeNUJ)u7p+IiR^96uo+y@Lhp_8>v5ErUUsTz}cssFjIlkK&7BEd<4DOvo56q{0z{o
Xpehi5>ioyaFfSsX|HW|F_Pp{h_oprS

diff --git a/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache b/QLearningApp/obj/Debug/QLearningApp.csprojAssemblyReference.cache
index c240c2684ac24abfea7de1369b85f99398d906b7..81441d12ea59e70c6bb50a099f24c3d712ed2b57 100644
GIT binary patch
delta 13
UcmZ3%yn=ayKO^I>$pMTJ03kdCjsO4v

delta 13
UcmZ3%yn=ayKO^IU$pMTJ03Uh;Gynhq

diff --git a/QLearningApp/obj/Debug/QLearningApp.exe b/QLearningApp/obj/Debug/QLearningApp.exe
index ea93ca9266419cad2c275deb93337a461f88c6f1..69860436b49a7b74247d4dd3d9d92820600b4015 100644
GIT binary patch
delta 4705
zcmaJ_3vg7`8UD|?ch9|dA0aoJ?B=n7-8{%9yTMI@Awke21c>-3h#-#{<WYoZ$E6$X
zsHxphFo;lxa64*r<gG<US~b-neF;;GE%qg~qb(MR52UuE)iR7yg?{Jk4PZO%W%j%0
z`~Uy^=kfplxhM3k?pw3v{)*V^RbP<%oS+Kwu@un+2+W*NTr;q5e%^Dlh`u5PONoB%
z8Hfe_eMElnVklai7*9G2S&es35~3)66PyQFf~A}nSPg4-j<bsBNf^qf3qMXCieijU
z%ZM~EACYigO{ARJyiwC>p>rQ^tzA^9>}g@!;)T4|L!^5y6)o}#UxJJ}BIhGMiG`dR
z?L$`Ng!C%ipgQhcsV^)pgkN7~715e_36YnK=m89sE^>aLPs&CjJ<xmo84nxPhXV0Z
zhzhj$SiC~#SWvh1q^D&8lT$IQbO;WE9@~>12Yt?GC@5OaNOdS^CT0MwL?xNFX<J4*
z2y<J=c04LO!~kSl;RQj<&bs>IbOog6^q|-F*1t@)2`#$kI)_J<KHFEn$BbjgMbHQZ
z{fTaj6i7@b+pzt1AdZQ7-TkU+TNFq0B3&HJE69sSAj-TXms*ZiyebPMvI7_{U<b?#
zBaN}g)bEQ|=d^xk{kGo>jm{(A&adwu)e2~_zT8wVnAo;G`Qvlv&(rbpU;$-*i6QNR
z^msX_8d*hxj${0AFxYYzED^(YOiw;X@oT_tYn%wygmtlCO3(vn3rv@IJb;$h4W2LL
zPb{HOAkj(Ov@YERqH}CCfE9*m{fByC+ss8`aVTCRr=`Mzs01v2VH*(S`lkuO@SFU?
z(y-Y2twzvDVB0b2U`nH#9VUvhErf}TC2p8%4&odSSV?P?dR;#koFl91kCG8y;4>~d
zmm?k!K>_EYu7bylWeDnmDV;WA@u)_*_<Xr|{$Tfaus>yT^-IYxxwFx86{~T6<#{Y=
zNxPmn`g%jY#56gt7>UdqhyphrH3v5%vst_r`gEPMMT9XNnn`EBxS~Mj1Mdk#a4+2G
zyr<qdD;n7Zr{1V#mpL~X)7eSqabsK*MPyURn}`zUy~s&DtzllW9)yn@@v!rz5n+Dk
zGb5V4fn(r{Hk*;`x#2Urpy|O`<GrT`Q4n5{GwVf|b!{+>qd|~{C58e$^{@)+xtAyR
z5+aRKMKQD-K)T2Ui=aiKI*s)qFJ*xW;=LB8svDtDJnHN;BP{Ct%q$1KY2G5R2coCJ
z>9RVrhcT61)!_m|RmraE;>?FiQc~b|C8e2sP1=+d1YAiZ)2Jlnw)IVHnVu8JCt|9(
zgTc0Xr95cZy6sP24msH#JK(m2tCrO9d8@L>c0maXMN!z&hN2L*o^D2`G_q6R81dv7
zDjO_Vge)nlLk4of(g`(TlO`h`AueR<2(L=7=<f|#34Sxl6CMf&5+{&Rf*!%1<)Kdx
zvRHWKKG~RR$PJVZVS1ADqBqPYIj?);Y<R10rc4yMU)TBKW(($}_Viv~iB}RkVCP|r
zclg4W(nG#mkv2(x@t84kei%g#qQUiC|Hdp*c{Ec+W&!q+%Trfe%#bubCf@NP^NiBT
zXkU`NN{51oLM-cGoM8?IMCNVSTK{RLs@Qn2yYU!0AOS^C4+XnCiE2c~GZ+*iqw6@N
z{>#1X!2yS|v~~3TgUF1B6_;`TlBKgdaOc!5SX$+`h(5>rCE1>PN2dGsRXvCe9mHo~
z4feEh-dsu{G*~!Q&YX93C*Ez~2b_6%O$cc2#KU${BYvnT%6A^mtIggZ5G_1{=6QZ$
z2s)&2f{^W(^-V^Q-b0WDc|Btx*`x42g+)S2MpXN(!kEG{`je0kD_pH4Q#>n#ppVQ?
zf#-$9ZMyVdtZ&NVbqvD@YB8ju$Czmex{U-E^ok}W`&EaZo3g`?Eh*_&@~px^g|$ll
zq_Vt&q)k{!Qp)GUka%g8w#x9*d|CxRUGOg#y_n%cfipw>%cmG$WK6%njtj{w+#lAm
ze5y4&6dMD5KHV!e2&pSj?5HVO9wCdcnP0_kIu)XHH1w0ZJDtKVL(PH}6N(FpD5ET`
zq!LOhdJmKr*;E+h7$aevXMzef4Z9Lm_*-V6{Wpb4NEmH1yucA|0Hr;nccEo;vo;2J
zQj`E2ta2dEYT$f@*(1CP<UuZ7Jgx95U=v%%YJl4)0ep)t!(dx=IpqDo*-^}t`pqZI
zW~^_4%YJA!!N)R}oi<uHr`ufi6Cv51F8hsQeUfFVpS;=>C{N{-6f$Sy0yiZFC3M}^
zG;UCz%aXi{o3taxiq{$pAxNR-hz2OnI1IMFO0tLO0qZ($Q3N*)$t-IL_tFN%`c*$4
zZBZ;MO}n{|;<!WPOf%e1_q(jpx|;{+UyAjcud!xCS;GfKuKq@?kLQs;$KZ4m*ohpY
zbEXI9Peh)cSj2q8;RUn>$05;LYSx-~kY38MECr20UP!BP<VfWleH$;LhZXBLFVmZG
zN!jkQHob|5Xs^r8Y0XHhXI$okE=<EN8!%gVF&%Q*W0*`a9dX%p=5Ag>M_ra(V(tY!
z=F&8jrSy)=`k*VNzq{-MZ8tBY(=I!$?FA!zJc$m|9x+G}I-yu@gCq3UFR@P)TSr&Y
zAdiqH{{|pfW)Z`3@+-Oy-Uhk6m@&E*A8JOuIM_HHXY#=M2awTR9Dkga02v)olG|a!
z=usv4U-%v@IlT{`8sU}-`^l!nyDZc{a#p#JgE3rqB<6<y|F~TZx!tlzCZY}Wpp<1h
z2J}(`FrQi#wky0^;T(kv6)wxFS2wVTzOLGLD_pB^5Xk5$U@5&y8;ok?c`xGbhopo4
zL{C{=XrDpF3@FQu3O}RgwN3OH?bNmqV;Swc^sx$%#YW7>$z~(kZru8EA<LdIhv4F@
z`6C*k=foilqifaZ{D>}HJg*(5XQ@jYRPqrTRs&e<l<8%|^aamnCG15EGfexmd{(8j
z5nwfoz-N-h*ji&bOG2`SHL#u5H-J;DhnSqo_h28-^8I)XTSIJsI;__j=1YHJQCdfb
z`2-xj5`**#u#8><R?<I#3Hlt^M0v=gD-=#sc#V?J#Ys7V7AwgLg||@>k{+55?4=c2
zoASR7{&72dM-j&4kc@4j{hFrQl?o5JDCH-ZoY07pj3`UO$$?&6_2tqgsw6Qbi783D
zYPYNQGSyzD+HD$ob?~L~#rqWQP<T+`35BFfZB${K!lerP6z-7dG=(a=kI?&wGO-Yw
z$R@L4c96ZzPBD&D_TZl&e8cI0`F(u#J~f^L9uyK^Rrm&z@&(!pz#Dbh9;0x(DQ%XU
zhk)x9Zq^SuKMlpQ1=u-`xCDTuBtMB|K#n88M!OuyX)N@N#sN7+sR->DkmElA!f00l
zIaQ%x7*zu&({kEJ<JfBEzlQMfoB}MO^}rD6eX=AkdAev3)`N1r@SI^^D2p%4{wS|G
z_~XWd4}%9cWCPPSknILOtOINn?RK6Bzunf+)Y0COYV7Px%}7n}Xr0l}*wWcLqrJ1U
zY2vij8Pl3tFK<mvn>ewdX~v}1M!Y&wsn$uY6FV+%Zb-E^O`qh%ip!jx#jzo+WU8j!
zl<6Lt8VPe_=E^&+U3vSep*drJr|TNdilJ!bUY@_Jm~DRS;L@)9-a67sUwipV=Z)%>
zmDNUJprEiYz_BM}@`7S>v~6;3ngPzaGjn{!Jcu=tixN>SV45ag3~D_JgqVd4GjK^y
z?zTO|0|C=A4D^AkKpxD>%X6f>+}SXGyz|2NX<KXNc!Z$`OlMxr8c$LacFH+YQyRe?
z#`WXAyu?OF89G%nmxaon?0;A8G$xNQ63w24U(&guwj%$bcK-**mRDT=?23u`oy$Hk
zob|QW=lvP_(dYCm=R|EOKRL_!y!IC7+lkrEt#t=jmGes7IHx1g<{U|M4n-TIY$z{z
Q*2B#!hU~_V*g(qoH<f7U8UO$Q

delta 4100
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
U69wsy0^IAEh_=1U#?sb*01S7JCjbBd

diff --git a/QLearningApp/obj/Debug/QLearningApp.pdb b/QLearningApp/obj/Debug/QLearningApp.pdb
index 212d01b5aaf1be5750912b2a43e1e1ccbc55e85b..64633aa518b875e67a87556f189d8bc4ade484fb 100644
GIT binary patch
delta 6884
zcmeHLc~qQLmVfV~>PtaYu!>cRKouYaDs06XFeK~&1+tPr2uKkYQOJU1GbR*kFpCM?
zPM<hxMs3vexQwRkv^_^-TF<02F6l%)Gft<cCw8~n7-N!&?J{Yd-~ITYnVHk)<eWME
zUq5*7_ujp~_v+oZ-1pw+y{LGvD+d#2-ywwPl}HfQ`eLkaN%Qw6<Tt+ly$~0CHsuRR
zPQ^HGFiA00GL5Sh&MQUlc7M6+K=!FOCa!twE5G=M>-opFguYty?-u)+>&?B%FBBb?
z<E9Fy?e25t&t7)kG%@_ei<?UtQ>z|WxuJO5+Fx7OIbDsvdFD&z9Sf)kxG`c_h2l&O
z``x8QNA4PYsW|a`>pQ;;Ibl2h?uLawHhk476Nl1|{6TBczRzMfvi#gn>0rW2!%vo;
zJw=}&Q(E44kP7EsAg9Zqv|A`4G1k~_5kk_H+tTR1#8DRRa@l|6Op@w6A=EA4xXOc)
zkX3{#u3}_vL4+7AIqrMVwOgt|(0*p5gydM`XU6Hqk{?!sp}1<K=#+&rh#FJk)DQ^1
zG15p%wEY`qqNy<9XZry%rHT+uC>N{rZE7rCNU``YR&@%w(}KyA8e*%Ok_e{_d=Wq?
zskfu;?Wv2@P_%tgr4y;KNhhaiezvpV)%gjL4EoQf<xU%l!b~631=E}~i|rqEO)MJb
zUYY4ij)Usbve5Ycv`jS&jbBpfR9bY(C7o&ql^enEX~_AWwtF^r^$HQKH)A1Nx<gvX
zogRs_T1z|A<B;F4r7vjObLn$!n`TYg${q0MR_W)Nk^cM}0a_`=%`H^Axo)?Xj=AUA
z4(qkTzzfuPZ@V3~M`lQG(xiWM^C(qjbl8WW<B&KBS{e@HYW?YrjM&fxP_wEQec*B6
z?g;W^M>?3v-C^nM878mWuz7uNTMs!h-3xgk7%)7TW+A;Nr1vYO|8=DwQ>BUw;nId_
zAKQa)m>bf=&8WB2pB~5ziyB1-OrWrO=gdxk8i+B8lYwN*nqyt;>F)Lj;X;piA+T^B
zR0UZ~@MOhBU^xCXEq89vrUYFB^N}nEIIm>QMf&0YVpe;$X-w{9AjM=evnZR}Y|D<T
zei@xJKy@Fq4L~-5haTf0X8zt?n%vL!D9<E#YXQwO_&imCSh|sPIXk&eA2p>AQiqfs
z()*emD3^o1awtI#Rm<V;<;Zcl`$KvEt8!0*+;g8Cb<5Em%ILewXpb_Q7=~^bW(jHK
zR;8391&ZJi&(}x1%M1lV+$3me1V%g*a#W><aw4J*qIZcXGe?(e<G|#b=v<CN-h>^&
zi>M&ip<uH&<+>DX?WSBiP2^gYZ;Za<xg%1+23(l;xN=GL{Wk9%CE`U?pIl0Edd2Zz
z9i_Jyg!gR`!V51TE`9NxmzU)>l-c)g2eL8u0(mLz07e0s=LBN-y|KVPAa{5xa4yh`
ze}9bkY>|%0HF&88VjbimMk2;*vQXq9r`ro`3YJ|{K}O#Qs^&s@Kd=nA7q}9*AIL|<
z0pLd981N8q9QYEDfTw|nfxiJh2>bxZUHu*KZ&3b7FMk4j2<1<K4+D)DeCGK}Sn>!2
z0T3Jk#sdEq7zcb5cngpla_M+0kSi_%@(-5jxJs9=0X`0S6L1391$+W{FYrm=Uf@%}
zL%^dznDM~E@q)>Dm(%OSh<;Wea(Egvu*EY#b}7#Sd4Qh-#sHtE#zh;(3!U_6p+T8%
zri8+LOC;9VqRBM|7t$3>eT6aV90(Vi>B+(zT3TdKYRvT8!W=ak(p6@PF3M2hXw*hC
ztwPp`Y@3-LD9Tsy8)}!C&LE4KS9{GASe#EMiw(*SGu0I5t2mX^L2!#R)Ocj~nCTR<
z3CNC{>AT`s<2d((_9uqZf)bOoQdx<^_HTOc*suA)3M)NZ5>ER{tTrnjijc5I)ipcV
zFkbK*OAS;}YEc%M>A6xaS{0bYnun2vNzawK6qv&jXPJS%1{WqV*I8y&U=nMpkcCN2
zWiAEgu;eVbN6Rd15_8Xj0F#<>qsPlF3M>jNcPZm$Uw(OzD(k7bDh=t*ssnP6W>?Qc
znpgez@=f}*dM;91O|Cpcl{E)UYzLb{V;e*0T1~SI^3^U$lc+nq)RD9T8W$#UHE<qq
za{r8Be?$t-Uxl1E!XUl9v;plVE&GKObY)oyn#o@NFEX!}2M)o-ZdeZ(R+SeQ|E#F?
zbgl>RId1@d4IXn3QQ69eY}b(Uf|dhhb~IgC863K-wey~hT^{%WArkbtF~a|ZleN}r
zdl}p`kUR7`v9zf+nBH3HPt~=vmhtb*hxR3C!-2bW7W-+QNv!JWbK!23na>x%7s0!X
z@`%po-({y{q{r&wq9(wofW`yK?inqbGzM-FQNIU+?=TA?**}B9M}U!R_2Du6OWe-$
z(86_z%QIM5ZeVdcRggY|*Z|2NW-!=oayyan?AtkVd++P*@LoKOnLzW}i4;VeYaMb6
zdD3p7&r4>}$y#%tQVON?4$A&cIT$YoFDOI)a%fBrH_P3x%i+^<WWF+zrVPI-M}u*`
z2<>zUP=;5_y@!;6uf_j3RL=5TBJ7z2Erk*4t9mCy&4!+CPgm!?ZPlLMp3ZGpe+%nW
z+cv20LshP(QE7AClE4=s-3Dn7q`&l|cj{sTLs0BRtb^!1KT_&lvIf@7>*KYBJBFVV
z3YjlAN$=CLe~r@rl+wRU@jlLnq1MqH{q(!eZVZ9F_*B4Hs+DM*xngl!FHZfkuD0&B
z^}Unp;XUY{K|QWB#p5d-igdm{D$oMmQN$_;RvJiM6B}5H;sjy_MD+&BS>vLr)a2r+
z-oot(87>Q?cdz1oU-1qoS<^k`EjEM^nA|aPdM8yvzRiyURt@z19kNdBl%D`&fIkJs
z0#5_^BzQ|NpVQ0l0OO&57YHBd{WTCLq;~Z1ZojDWt^ntu%w0$ZeyPj90;ZshNf)VD
zt=|9A6@LV#LGc|h9T<Tjgvnkz5Jaz2#|$8MEC-kgc`lHDpg_kZx_$*P8}bHV4v>#5
zuGb92dF=H7=VP~cTXjV{Fb|3j;H^O3Pz!)h0Otdr*6}4EH}o>F0P@#>*qYwgf&4@N
zq~kvWnfEK;BFHZQ3xOX1d89sO#3|_g1{o$|af!t!`vF;Q1Y)MVcpr(|fKkBPflgo*
zFa}r+Oaj)B|LP){ON&>>_u2JxHWd3cnkNS#0_ROEPY6O3q%mlLaj95=>8R1<%&8Jf
zL=yiRLIm*7*KgJ8SD;5JqFm!g2{->vpD2YHNupS9Bt>vXm>91UZ6Zj!F)@Z>Y#8}A
zH5(n6IvIGnCwIJ@_5^q;i4e#+EQR5mT@GYdiIYUT+12ut20_3h8UkDeMJN#4-5ajU
zBY^cN+ktC<SZ5j^)5qS?%dTN95FD*uqmG?GZnql<nU_zWT40ZkyI3C$!T>T&Q0xX`
ztLtZ97A(x7^G%T@n16%_(W2R&k98EoYYc(MAqVR)N@VHf_~|iW+b5ld6n9Wjd2n9~
z+U8MM2ZTcqtw6XSt&@D2YD3uyYzNL9ln#`6Q0@fA==@uNFwl$LDeeMd(`og1aJW9!
zxYjPu>)j}qu%qA~#G2KR4}2b-)xa*uF@mC-UTKV9%T2Jk88=|ALo@dp_&lw>ToK`B
z#EUADS;!;KM_h{7HH*GoouI;2^{9ao>Rbw7d0nbBQGcBS>0@<i%Fhf`(_p8Ibs@Gl
z;eUC+!t}G>gmdqJiXl?nMtZV7K>?hp&ruc_;d@h+A|w3mD!fqkuenu)lU9eIUK6bV
zPNdk$)DWWVHPR(yFV>l;u)(4n#7Bu#JI$%LQuCT*)O@00F8bs<(~u$k-EiX)e=B(M
zel(|1q9I>&lU;`K<9Py+-+}KVUPd&S#)^)OH=AzTsK6z{jYnzK(FBxi#AAqzo1tg?
z5FEx$y1ZWJ=jr@vNxy22&by))@7HOs=;dWP{_9j(*ME+2*M5e^nwKOQF)dueQ&7Wa
z^&cJ9SyNwMo}f;TgPfkkhzCLE8ryXo)4SD85zP)7^;qrMx@Pv20Xk!+fsT0=`oFEK
ze@sQ5aAkNF1+?5D<ycXeA`LXq(vI}g76)1HzL}isVtCmo6&OBW<+|09CR(ljmm#{2
zXrfnIebn0)63Dj&J{b=pKI}JEw0yk1TINwrd#-Guk@hs1LC4!Osj|aN*V<!b7KL?W
z%51u=W1h^REgiWQ93gfQk0l|*DE+J>GJ-!Z7({wbI)WQ}Ia=2q^nKppFa+{5cv_uD
z_O4v%q2)+hXirzBTt_F6w$jzEG}%V6-D$F&mUrjS*WDKSL3gr};ilKRbJ44Bk!DiH
z`ZV;Z1!*>oBhB%>w!TRzV5^k>dq2WzPttlish{j)`no?^z_${G8aIUpYB}AC^i~Sn
zl#7nkY|2pF=`^s(rMTTbdFMxRyl0NAps1dw0&rW@!Ub%Mo>TrC*$W|5_#V0EV+Ah(
z_m*(uAPcnIo5*ErIbIP#oWsNa%9h9&zM@QB^pTwooab|34~?}1<2^g+0q@|F$|Y=f
z*H*icch(9@*&1#fLau{z{4HVERy%)702p~){(}0!IEgN&at<F8=n_=?9U+kg_*BH-
zhv>-GFeATN<1`k(&9>Q%{NOZ^XIr@TB!i%4TEH(d2pXpa{1AhHzmH5-;ddAWJEjHv
z{DNT5lt6n$zNa;h52bHxw=4J(`q6fmGGg%s-Fw{c*e<I<{wLW6Zmql?EW~N7HYdzC
zpu^YE2K&P2VPPS5<s9q)j2Mn#A<7VWhS+)I5+Vu_ix7(uOX$#mF9LTc?Wn<BiLWnw
z1=5b9T<RYP9xL4^%YAZa@eO_(9yO@}BNnuPfR4*MFUj$QeSh|I@!09V`Zg?LUdMk?
z-*yAL^}&z%<^R{+s_nr4-)@~a?l->6aC797BfsaF{b7;iKhC$r*1WJT%UbHWI?Fd_
z*C&3n`NKdsb}8Tbv~AsYBip(hY`&D@(yDFiWx$n)xP<aWSMb%V4iVl!@V$?{KHvNB
zOwgW`>=xkb`BR1V0j?6rm;KxE{Csm@r{)a!F|Y)2DI#C#mLpC(g9e{`?t9~Z1G0om
AyZ`_I

delta 5128
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
Xpehi5>ioyaFfSsX|HW|F_Pp{h_oprS

-- 
GitLab