From fd64b52fa3f797ebdf6e70bbd97e78330b91eab5 Mon Sep 17 00:00:00 2001 From: Erik Hjalmarsson <erihj832@student.liu.se> Date: Wed, 20 Sep 2023 16:28:03 +0200 Subject: [PATCH] Cheeky Lab1 --- .../project/tddc17/MyAgentProgram.class | Bin 8634 -> 9087 bytes .../project/tddc17/MyAgentState.class | Bin 2551 -> 2551 bytes .../project/tddc17/MyVacuumAgent.class | Bin 380 -> 380 bytes .../project/tddc17/MyVacuumAgent.java | 537 ++++++++++-------- Lab1/lab1_workspace/project/tddc17/Node.class | Bin 463 -> 1304 bytes 5 files changed, 304 insertions(+), 233 deletions(-) diff --git a/Lab1/lab1_workspace/project/tddc17/MyAgentProgram.class b/Lab1/lab1_workspace/project/tddc17/MyAgentProgram.class index 4c848dbc32b579b5812855b624077a5df6eaf5ad..528cf680de2ddbbf992e656023da0567ac68da9b 100644 GIT binary patch literal 9087 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�NXYOA6u=+Eewh*DIjNWVbImy#t<Mgi@`x_3xh5Q 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 NF)%XPf=0_2?Ep7lyifoD literal 8634 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 RmJ$+UU}Q7`jYKgT0{{YgzZd`j diff --git a/Lab1/lab1_workspace/project/tddc17/MyAgentState.class b/Lab1/lab1_workspace/project/tddc17/MyAgentState.class index c02a85397d730129cfb9c257030d802811847a35..e05247deb676a8445d214307125589b0e451bc12 100644 GIT binary patch delta 239 zcmew^{9Sm15*xFifZ$|Rwz-Kq3@i+y3<3;d45AF;3{ngd4Dt+;3@Qv#44Mqm40;SQ z48{zy3>FM>47LpN3{DIR4DJj{3_c9X41o+P3}Fmf4ABgF3<(VS45<tT40#Ot3^fdT z3>^%H3=<iQ7^X28PgZ8XqG`^+#bC)G$zaW3!(hwc#$d<b$>6{c%;3ln#^B75z~I7= z%;3h5%iuj(fg_#OpMjGhU~&(~Q`-;*R)#PJE`|sOQHDqcS%xSEO@?R&LxvazTZUK$ nSB5x-K!$jRNQMN4RE9)`T!t`)YKCNnW`+=keumV^>o`3DGRGy~ delta 239 zcmew^{9Sm15*xFefZSwNwz-Mg3@i*H3<3<I45AET3{ni@4Dt*T3@Qwg44Mp540;UG z48{yH3>FNs47Ln%3{DL44DJky3_c7>41o;F3}FnK4ABg_3<(T+45<wI40#NC3^fe8 z3>^#x3=<g)8KyB9O;%>VqG`s!#bCi8$za7`!(hYU#$e0f$zabA%;3Nf#^A(|z~Ib~ z%;3t9%iuLxfg_#OkAaiHe{v7UQ`=w$R)$apE{1RhQHBTxS%ydkO@=52LxyMuTZR}0 nSB6-IK!!MmNQQWZRE7kGT!v7FYKA0+W`<yfeuk9E>o`3DG4mzE diff --git a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.class b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.class index 13edb8714272dd0d9855c73eeabc94785155e9b3..31da853a6022d40c526c1f8bd0798769f03d9a2f 100644 GIT binary patch delta 17 Ycmeyv^oMCfG$U&h12<Fi<OD_;060PgFaQ7m delta 17 Ycmeyv^oMCfG$X4u12>b+<OD_;05o6(q5uE@ diff --git a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java index 5b5b2a5..ff252af 100644 --- a/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java +++ b/Lab1/lab1_workspace/project/tddc17/MyVacuumAgent.java @@ -1,6 +1,7 @@ package tddc17; import java.util.ArrayList; +import java.util.HashSet; import java.util.Deque; import java.util.LinkedList; import java.util.List; @@ -17,7 +18,7 @@ import java.util.Stack; class MyAgentState { - public int[][] world = new int[30][30]; + public int[][] world = new int[17][17]; public int initialized = 0; final int UNKNOWN = 0; final int WALL = 1; @@ -100,12 +101,94 @@ class MyAgentState } } - -class Node{ +class GridPos { int x; int y; - boolean visited; - List<Node> neighbours = new ArrayList<Node>(); + + public GridPos(int p_x, int p_y) { + x = p_x; + y = p_y; + } + + // To make hash sets work... + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + x; + result = prime * result + y; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + GridPos other = (GridPos) obj; + if (x != other.x || y != other.y) + return false; + return true; + } + + + +} + + + +class Node{ + Node parent; + GridPos aState; + + public Boolean isRoot() { + if (parent == null) { + return true; + }else { + return false; + } + } + + public Node(GridPos cState, Node parentNode) { + parent = parentNode; + aState = cState; + } + + public Node(GridPos cState) { + aState = cState; + parent = null; + } + + // To make hash sets work + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((aState == null) ? 0 : aState.hashCode()); + return result; + } + + // To make hash sets work + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Node other = (Node) obj; + if (aState == null) { + if (other.aState != null) + return false; + } else if (!aState.equals(other.aState)) + return false; + return true; + } + } class MyAgentProgram implements AgentProgram { @@ -120,18 +203,12 @@ class MyAgentProgram implements AgentProgram { Queue<Action> queue = new LinkedList<Action> (); Action element; - Node nextPosition = new Node(); - Node currentNode = new Node(); - Boolean returnHome = false; - int nextDirection = 0; - Stack<Node> frontier = new Stack<Node>(); - Stack<Node> reached = new Stack<Node>(); - //////////// New DFS /////////////////// - Node startNode = new Node(); - boolean start = true; - - Stack<Node> stack = new Stack<Node>(); + Boolean start = true; + //////////////////////////////////////// + + public HashSet<GridPos> explored = new HashSet<GridPos>(); + public Stack<Node> frontier = new Stack<Node>(); //////////////////////////////////////// @@ -178,7 +255,6 @@ class MyAgentProgram implements AgentProgram { System.out.println("x=" + state.agent_x_position); System.out.println("y=" + state.agent_y_position); - System.out.println("nextDirection = " + nextDirection); iterationCounter--; @@ -228,51 +304,36 @@ class MyAgentProgram implements AgentProgram { } - if(start) { - startNode.x = state.agent_x_position; - startNode.y = state.agent_y_position; - start = false; - stack.push(startNode); + if(bump) { + Queue<Action> temp = queue; + queue = ifBump(); + queue.addAll(temp); } - - ///////////////////////////////////////////////////////////////////////////// - - while(!stack.isEmpty()) { - Node current = stack.pop(); - - current.visited = true; - System.out.println("Current x = " + current.x + " and y = " + current.y); - - - } - - ///////////////////////////////////////////////////////////////////////////// - - - nextDirection = deepFirstSearch(); - - if(nextDirection == state.agent_direction) { - element = LIUVacuumEnvironment.ACTION_MOVE_FORWARD; - queue.add(element); - } else { - switch(state.agent_direction-nextDirection) { - case -1: - case 3: - element = LIUVacuumEnvironment.ACTION_TURN_RIGHT; - queue.add(element); - break; - case 1: - case -3: - element = LIUVacuumEnvironment.ACTION_TURN_LEFT; - queue.add(element); - break; - + if(queue.size() > 0) { + + element = queue.remove(); + handleMoves(element); + return element; + } + + for(int i = 1; i<state.world.length;i++) { + for(int j = 1; j <state.world[i].length; j++) { + if(state.world[i][j] == state.UNKNOWN) { + queue.clear(); + queue = walkToNode(new Node(new GridPos(i, j))); + System.out.println("Goal node: x =" + i + " y= " + j ); + if(queue.size() > 0) { + + element = queue.remove(); + handleMoves(element); + return element; + } + + } } - element = LIUVacuumEnvironment.ACTION_MOVE_FORWARD; - queue.add(element); } - + if(queue.size() > 0) { @@ -281,222 +342,232 @@ class MyAgentProgram implements AgentProgram { return element; } - return NoOpAction.NO_OP; + return LIUVacuumEnvironment.ACTION_SUCK; + } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // HERE STARTS THE METHODS // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - public void insertNeighbours(Stack<Node> stack) { - Node rightNode = new Node(); - Node leftNode = new Node(); - Node infrontNode = new Node(); - Node behindNode = new Node(); - + public Queue<Action> ifBump() { + Queue<Action> pathQueue = new LinkedList<Action>(); - switch(state.agent_direction) { - case MyAgentState.NORTH: - infrontNode.x=state.agent_x_position; - infrontNode.y=state.agent_y_position -1; - rightNode.x=state.agent_x_position +1; - rightNode.y=state.agent_y_position; - leftNode.x=state.agent_x_position -1; - leftNode.y=state.agent_y_position; - behindNode.x=state.agent_x_position; - behindNode.y=state.agent_y_position +1; - break; - case MyAgentState.SOUTH: - infrontNode.x=state.agent_x_position; - infrontNode.y=state.agent_y_position +1; - rightNode.x=state.agent_x_position -1; - rightNode.y=state.agent_y_position; - leftNode.x=state.agent_x_position +1; - leftNode.y=state.agent_y_position; - behindNode.x=state.agent_x_position; - behindNode.y=state.agent_y_position -1; - break; - case MyAgentState.EAST: - infrontNode.x=state.agent_x_position +1; - infrontNode.y=state.agent_y_position; - rightNode.x=state.agent_x_position; - rightNode.y=state.agent_y_position +1; - leftNode.x=state.agent_x_position; - leftNode.y=state.agent_y_position -1; - behindNode.x=state.agent_x_position-1; - behindNode.y=state.agent_y_position; - break; - case MyAgentState.WEST: - infrontNode.x=state.agent_x_position -1; - infrontNode.y=state.agent_y_position; - rightNode.x=state.agent_x_position; - rightNode.y=state.agent_y_position -1; - leftNode.x=state.agent_x_position; - leftNode.y=state.agent_y_position +1; - behindNode.x=state.agent_x_position +1; - behindNode.y=state.agent_y_position; - break; + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD); + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT); + pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD); - } - - stack.push(behindNode); - stack.push(rightNode); - stack.push(leftNode); - stack.push(infrontNode); + return pathQueue; } + - public int deepFirstSearch() { - - Node temp = new Node(); - Node newNode = new Node(); - newNode.x = state.agent_x_position; - newNode.y = state.agent_y_position; + public int calculateDir(Node node) { + int xDirection = node.aState.x - state.agent_x_position; + int yDirection = node.aState.y - state.agent_y_position; - if(reached.empty()) { - reached.push(temp); + if(xDirection == 1) { + return MyAgentState.EAST; + } else if(xDirection == -1) { + return MyAgentState.WEST; + } else if (yDirection == 1) { + return MyAgentState.SOUTH; + } else { + return MyAgentState.NORTH; } - //Checks if the new node has already been reached - if(!newNode.equals(reached.peek())) { - reached.push(newNode); - Node rightNode = new Node(); - Node leftNode = new Node(); - Node infrontNode = new Node(); - Node behindNode = new Node(); - + + + } + + public Queue<Action> walkToNode(Node node){ + Queue<Action> pathQueue = new LinkedList<Action>(); + int diffX = state.agent_x_position-node.aState.x; + int diffY = state.agent_y_position-node.aState.y; + int nextDirection; + int directionFix = 0; + + if(diffX < 0) { - switch(state.agent_direction) { - case MyAgentState.NORTH: - infrontNode.x=state.agent_x_position; - infrontNode.y=state.agent_y_position -1; - rightNode.x=state.agent_x_position +1; - rightNode.y=state.agent_y_position; - leftNode.x=state.agent_x_position -1; - leftNode.y=state.agent_y_position; - behindNode.x=state.agent_x_position; - behindNode.y=state.agent_y_position +1; - break; - case MyAgentState.SOUTH: - infrontNode.x=state.agent_x_position; - infrontNode.y=state.agent_y_position +1; - rightNode.x=state.agent_x_position -1; - rightNode.y=state.agent_y_position; - leftNode.x=state.agent_x_position +1; - leftNode.y=state.agent_y_position; - behindNode.x=state.agent_x_position; - behindNode.y=state.agent_y_position -1; - break; - case MyAgentState.EAST: - infrontNode.x=state.agent_x_position +1; - infrontNode.y=state.agent_y_position; - rightNode.x=state.agent_x_position; - rightNode.y=state.agent_y_position +1; - leftNode.x=state.agent_x_position; - leftNode.y=state.agent_y_position -1; - behindNode.x=state.agent_x_position-1; - behindNode.y=state.agent_y_position; - break; - case MyAgentState.WEST: - infrontNode.x=state.agent_x_position -1; - infrontNode.y=state.agent_y_position; - rightNode.x=state.agent_x_position; - rightNode.y=state.agent_y_position -1; - leftNode.x=state.agent_x_position; - leftNode.y=state.agent_y_position +1; - behindNode.x=state.agent_x_position +1; - behindNode.y=state.agent_y_position; - break; + nextDirection = MyAgentState.EAST; + if(!(state.agent_direction == nextDirection)) { + switch(state.agent_direction-nextDirection) { + + case -1: + case 3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + directionFix = 1; + break; + case 1: + case -3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT); + directionFix = -1; + break; + default: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + + } } - - - if(state.world[rightNode.x][rightNode.y] == state.UNKNOWN) { - frontier.push(rightNode); - } - if(state.world[leftNode.x][leftNode.y] == state.UNKNOWN) { - frontier.push(leftNode); - } - if(state.world[infrontNode.x][infrontNode.y] == state.UNKNOWN) { - frontier.push(infrontNode); - } - - /*for (int i = 0; i <= 3; i++) { - if (state.world[state.agent_x_position + dirToX(i)][state.agent_y_position + dirToY(i)] == state.UNKNOWN) { - Node node = new Node(); - node.x = state.agent_x_position + dirToX(i); - node.y = state.agent_y_position + dirToY(i); - System.out.println("Counting = " + i); - - frontier.push(node); + System.out.println("Next Direction: "); + + } else if (diffX > 0) { + nextDirection = MyAgentState.WEST; + if(!(state.agent_direction == nextDirection)) { + switch(state.agent_direction-nextDirection) { + case -1: + case 3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + directionFix = 1; + + break; + case 1: + case -3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT); + directionFix = -1; + + break; + default: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + + } } - */ } - System.out.println("nextDirection = " + frontier); - /////////////////////////////////////////// + for(int i = 0; i < Math.abs(diffX); i++) { + pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD); + + } + + int newDirection = (state.agent_direction+directionFix)%4; + if(newDirection < 0) { + newDirection = 3; + } - while (!frontier.isEmpty()) { - Node nextNode = frontier.pop(); + if(diffY < 0) { - if(checkAdjacent(nextNode)) { - nextPosition = nextNode; - } else { - - nextPosition = reached.pop(); - //If popped node is the same node we are currently in - if(nextPosition.x == state.agent_x_position && nextPosition.y == state.agent_y_position) { - nextPosition = reached.pop(); + nextDirection = MyAgentState.SOUTH; + if(!(newDirection == nextDirection)) { + switch(newDirection-nextDirection) { + case -1: + case 3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + break; + case 1: + case -3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT); + break; + default: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + + } + } + } else if (diffY > 0) { + nextDirection = MyAgentState.NORTH; + if(!(newDirection == nextDirection)) { - + switch(newDirection-nextDirection) { + case -1: + case 3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + break; + case 1: + case -3: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_LEFT); + break; + default: + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + pathQueue.add(LIUVacuumEnvironment.ACTION_TURN_RIGHT); + + + } } - - return calculateDir(nextPosition); - } - //The final return statement when frontier is empty, will signal going home - return -1; + for(int i = 0; i < Math.abs(diffY); i++) { + pathQueue.add(LIUVacuumEnvironment.ACTION_MOVE_FORWARD); + + } + + return pathQueue; } - public int calculateDir(Node node) { - int xDirection = node.x - state.agent_x_position; - int yDirection = node.y - state.agent_y_position; + public ArrayList<GridPos> insertNeighbours(GridPos aState) { - if(xDirection == 1) { - return MyAgentState.EAST; - } else if(xDirection == -1) { - return MyAgentState.WEST; - } else if (yDirection == 1) { - return MyAgentState.SOUTH; - } else { - return MyAgentState.NORTH; + GridPos rightNode; + GridPos leftNode; + GridPos infrontNode; + GridPos behindNode; + + + + switch(state.agent_direction) { + case MyAgentState.NORTH: + infrontNode = new GridPos(state.agent_x_position, state.agent_y_position -1); + rightNode = new GridPos(state.agent_x_position+1, state.agent_y_position); + leftNode = new GridPos(state.agent_x_position-1, state.agent_y_position); + behindNode = new GridPos(state.agent_x_position, state.agent_y_position +1); + break; + case MyAgentState.SOUTH: + infrontNode = new GridPos(state.agent_x_position, state.agent_y_position +1); + rightNode = new GridPos(state.agent_x_position-1, state.agent_y_position); + leftNode = new GridPos(state.agent_x_position+1, state.agent_y_position); + behindNode = new GridPos(state.agent_x_position, state.agent_y_position -1); + break; + case MyAgentState.EAST: + infrontNode = new GridPos(state.agent_x_position+1, state.agent_y_position); + rightNode = new GridPos(state.agent_x_position, state.agent_y_position+1); + leftNode = new GridPos(state.agent_x_position, state.agent_y_position-1); + behindNode = new GridPos(state.agent_x_position-1, state.agent_y_position); + break; + //West + default : + infrontNode = new GridPos(state.agent_x_position-1, state.agent_y_position); + rightNode = new GridPos(state.agent_x_position, state.agent_y_position-1); + leftNode = new GridPos(state.agent_x_position, state.agent_y_position+1); + behindNode = new GridPos(state.agent_x_position+1, state.agent_y_position); + } + ArrayList<GridPos> list = new ArrayList<GridPos>(); + ArrayList<GridPos> temp = new ArrayList<GridPos>(); - } - - //Checks if nextNode is adjacent to current position - public Boolean checkAdjacent(Node node) { - if(state.world[node.x][node.y] == state.WALL) { - return false; + list.add(behindNode); + list.add(leftNode); + list.add(rightNode); + list.add(infrontNode); + + + + + for(GridPos zeroCheck: list) { + if(zeroCheck.x == 0 || zeroCheck.y == 0) { + temp.add(zeroCheck); + } } - if((Math.abs(node.x-state.agent_x_position) == 1 || - Math.abs(node.x-state.agent_x_position) == 0) && - (Math.abs(node.y-state.agent_y_position) == 1 || - Math.abs(node.y-state.agent_y_position) == 0)) { - - - return true; + + for(GridPos remove: temp) { + list.remove(remove); } - return false; + + return list; + + } + + + public int dirToX(int dir) { switch (dir) { case 0: diff --git a/Lab1/lab1_workspace/project/tddc17/Node.class b/Lab1/lab1_workspace/project/tddc17/Node.class index ea0dd47cc8f1a7b656fd215b394666b36a27a118..f2f51e56ba956043814f1686cec041e8df8a7114 100644 GIT binary patch literal 1304 zcmX^0Z`VEs1_mPr3w8!3Mh5PZl$2ycbA7-3lvH*G7Dfhvti-ZJ{hY+SbbbG%tkmQZ zMh3Qm#G=%^5=I7IA0*Y*j0|jv!6k_$sf-K)FbVgf%#?uqVvt;BaZrAK2_u83hNcg~ zOsD+(oYcfTYeohZ=lqmZP6kE>ULFQk1~x7Reg;8y1_4F}K@8PA3_=XTj125$i8-aI z{%MR1Vj5A{4dwUA%uDqv%}q)z3Q0`LNo8aZ^2tw5%n3^@$^`MDf-EH&nZ=9@yul@j z$=SY%1yEr&o6Nk-5<5l)1r2l$!T6wXvepdaVqj*F=3$UvkYQwC*3b+C`9qF}ft`Va zk%2848Y*0na06*!WDv$MQZtN^fg>ZaI0F<AU}HSF7*rY5*%{Or8Tg<f4GmBp1|<e% zMh4b`qRiY>Mg~StMh3Q`)Z)?{Q1ql0mL}#DgF+f9pdpcGtr-P!svZx6K7#=x14nvl ziE~b3aWTj}$RP+8v<6vk#KWM?pu@<(oS&2h3Oz(*Kuu(1V9hVdNG)Py;0n$!ElN&x z%LIqBZ)I3wa%pL<V|r>{i5^HBg8~C112Y2y0}}%SD2f?CfSrK@%wuHWWZ+_8WZ-6C zVDMpJWME`qU=Y;W!oYK!frDiS1K$Q_5W&E}z|0`Rz`(!<HfRb1JHu249){@*q6`cS zJP=I`Vhn5y3=HC6wTvJ^2?j~1$&n09V2%7*+Zm*^bha|^XlZX{klhG&6v$j51{MYe zhS>}(409Mb8RjzZG0X#-tpL#mHJgEfpFy6118g5Zg8~B^0}}%yg9L*j)Ea*VCa@<V z)_`o#V%*BWgKo_N1{Q{e44e#$82A_#gRK#RXv46E5ftB0!+W59kQb1*VX+mEm&wrD z!XSH`ft`6d0~d(7jX@>BR%Q*@{|G;=U|?og$-v66ib0lPHP|wUpX8yIF*C?8XfS9p zFfy<*NHJ(JXfiN?!%&ui=|6)A12a1VBO@aNBjbMtHW-HqBmhbtP?sHqy3A2adl>^O z%Np(D46Mv+w6-zmYHwrET?*o8A7Ehg1v&CK1CP!Y2H9f_qReYRd=O_FgW)WYA{K<( z%@}wY7#KD(urh37U}xCOz|F9QftO(`g9O7i1}TQ^4Dt*+7}OYcGUzhwV$f&U&0x#0 zhrym<FOvTpq5flFaAYuMFkxV1kY`Y0Fa^gMD2?ziu(GrA{9zDbXJF)KU}P`@rv-BW D$Y|(Y delta 350 zcmbQib)K2))W2Q(7#J9g8002$Y1T7VFfuTDGBPk$GBU82Wfo_aq^2-3Fh(&laOI_D zre`GOmlhQ>G6?u&C6*=XmzHGa==)?Amsm40a0X|l=Ovbu7Ns&W$fHTy_>`oiBpaIR z`{k#kTH9GOGO*cX=4F=HF)}b~XofK|usG+Zq;fGZ>oW-PFz_+(vonY=G6*B=a4afH ztOQxa#URWe#L2+OAkM?U#lSuBjv+6K*^@n)wCh<I7#LU?*cd>79ZGXBaDuoXO$>|- zJPZsBObomXj0_AQ>lhdr1Q-|?oEVtFA_7|583eU<GYCg+XAs@WAhr>#S^}(=nSp^J kgMo!1hk>6VgF%vkfq@62he3)#nt_3VkwFGzF%yF<0F;eCbpQYW -- GitLab