From 190d91c2948b274a2dbaf4ec07450b4ebf2feece Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Sun, 13 Oct 2013 15:41:27 -0700 Subject: [PATCH] Deprecate fx/fy/fz fully, they're gone now --- ArjunBanker.pde | 4 +-- DanUtil.pde | 10 ++++---- MarkSlee.pde | 64 +++++++++++++++++++++++------------------------ TestPatterns.pde | 6 ++--- TimBavaro.pde | 24 +++++++++--------- TobySegaran.pde | 34 ++++++++++++------------- _Internals.pde | 2 +- code/GLucose.jar | Bin 24692 -> 24626 bytes code/HeronLX.jar | Bin 65367 -> 65367 bytes 9 files changed, 72 insertions(+), 72 deletions(-) diff --git a/ArjunBanker.pde b/ArjunBanker.pde index 6af635a..12ce5b6 100644 --- a/ArjunBanker.pde +++ b/ArjunBanker.pde @@ -40,7 +40,7 @@ class AbstractPainting extends SCPattern { void run(double deltaMs) { for (Point p : model.points) { color c = img.get((int)((p.x / model.xMax) * img.width), img.height - (int)((p.y / model.yMax) * img.height)); - colors[p.index] = color(hue(c) + colorMod.getValuef()%360, saturation(c), brightness(c) - ((p.fz - brightMod.getValuef())/p.fz)); + colors[p.index] = color(hue(c) + colorMod.getValuef()%360, saturation(c), brightness(c) - ((p.z - brightMod.getValuef())/p.z)); } } } @@ -66,7 +66,7 @@ class Spirality extends SCPattern { float x = model.xMax / 2 + cos(angle) * rad; float y = model.yMax / 2 + sin(angle) * rad; for (Point p : model.points) { - float b = dist(x,y,p.fx,p.fy); + float b = dist(x,y,p.x,p.y); if (b < 90) { colors[p.index] = blendColor( colors[p.index], diff --git a/DanUtil.pde b/DanUtil.pde index 4ce685a..7eca742 100644 --- a/DanUtil.pde +++ b/DanUtil.pde @@ -67,10 +67,10 @@ public class DParam extends BasicParameter { //---------------------------------------------------------------------------------------------------------------------------------- public class xyz { float x,y,z; xyz() {x=y=z=0;} - xyz(Point p ) {x=p.fx ; y=p.fy; z=p.fz;} + xyz(Point p ) {x=p.x ; y=p.y; z=p.z;} xyz(xyz p ) {set(p); } xyz(float _x,float _y,float _z) {x=_x ; y=_y ; z=_z ;} - void set(Point p ) {x=p.fx ; y=p.fy; z=p.fz;} + void set(Point p ) {x=p.x ; y=p.y; z=p.z;} void set(xyz p ) {x=p.x ; y=p.y ; z=p.z ;} void set(float _x,float _y,float _z) {x=_x ; y=_y ; z=_z ;} @@ -344,9 +344,9 @@ public class DPat extends SCPattern 100 * b * DG._Level() ); -// colors[p.index] = color(0,0, p.fx >= modmin.x && p.fy >= modmin.y && p.fz >= modmin.z && -// p.fx <= modmin.x+mMax.x && p.fy <= modmin.y+mMax.y && p.fz <= modmin.z+mMax.z ? 100 : 0); +// colors[p.index] = color(0,0, p.x >= modmin.x && p.y >= modmin.y && p.z >= modmin.z && +// p.x <= modmin.x+mMax.x && p.y <= modmin.y+mMax.y && p.z <= modmin.z+mMax.z ? 100 : 0); } } } -//---------------------------------------------------------------------------------------------------------------------------------- \ No newline at end of file +//---------------------------------------------------------------------------------------------------------------------------------- diff --git a/MarkSlee.pde b/MarkSlee.pde index d501786..b910576 100644 --- a/MarkSlee.pde +++ b/MarkSlee.pde @@ -437,7 +437,7 @@ class SpaceTime extends SCPattern { int i = 0; for (Point p : strip.points) { colors[p.index] = color( - (lx.getBaseHuef() + 360 - p.fx*.2 + p.fy * .3) % 360, + (lx.getBaseHuef() + 360 - p.x*.2 + p.y * .3) % 360, constrain(.4 * min(abs(s - sVal1), abs(s - sVal2)), 20, 100), max(0, 100 - fVal*abs(i - pVal*(strip.metrics.numPoints - 1))) ); @@ -485,9 +485,9 @@ class Swarm extends SCPattern { for (Strip strip : model.strips ) { int i = 0; for (Point p : strip.points) { - float fV = max(-1, 1 - dist(p.fx/2., p.fy, fX.getValuef()/2., fY.getValuef()) / 64.); + float fV = max(-1, 1 - dist(p.x/2., p.y, fX.getValuef()/2., fY.getValuef()) / 64.); colors[p.index] = color( - (lx.getBaseHuef() + 0.3 * abs(p.fx - hOffX.getValuef())) % 360, + (lx.getBaseHuef() + 0.3 * abs(p.x - hOffX.getValuef())) % 360, constrain(80 + 40 * fV, 0, 100), constrain(100 - (30 - fV * falloff.getValuef()) * modDist(i + (s*63)%61, offset.getValuef() * strip.metrics.numPoints, strip.metrics.numPoints), 0, 100) ); @@ -512,7 +512,7 @@ class SwipeTransition extends SCTransition { float bleedf = 10 + bleed.getValuef() * 200.; float xPos = (float) (-bleedf + progress * (model.xMax + bleedf)); for (Point p : model.points) { - float d = (p.fx - xPos) / bleedf; + float d = (p.x - xPos) / bleedf; if (d < 0) { colors[p.index] = c2[p.index]; } else if (d > 1) { @@ -628,17 +628,17 @@ class BassPod extends SCPattern { float bassLevel = eq.getAverageLevel(0, 5); for (Point p : model.points) { - int avgIndex = (int) constrain(1 + abs(p.fx-model.xMax/2.)/(model.xMax/2.)*(eq.numBands-5), 0, eq.numBands-5); + int avgIndex = (int) constrain(1 + abs(p.x-model.xMax/2.)/(model.xMax/2.)*(eq.numBands-5), 0, eq.numBands-5); float value = 0; for (int i = avgIndex; i < avgIndex + 5; ++i) { value += eq.getLevel(i); } value /= 5.; - float b = constrain(8 * (value*model.yMax - abs(p.fy-model.yMax/2.)), 0, 100); + float b = constrain(8 * (value*model.yMax - abs(p.y-model.yMax/2.)), 0, 100); colors[p.index] = color( - (lx.getBaseHuef() + abs(p.fy - model.cy) + abs(p.fx - model.cx)) % 360, - constrain(bassLevel*240 - .6*dist(p.fx, p.fy, model.cx, model.cy), 0, 100), + (lx.getBaseHuef() + abs(p.y - model.cy) + abs(p.x - model.cx)) % 360, + constrain(bassLevel*240 - .6*dist(p.x, p.y, model.cx, model.cy), 0, 100), b ); } @@ -679,7 +679,7 @@ class CubeEQ extends SCPattern { float clrConst = 1.1 + clr.getValuef(); for (Point p : model.points) { - float avgIndex = constrain(2 + p.fx / model.xMax * (eq.numBands-4), 0, eq.numBands-4); + float avgIndex = constrain(2 + p.x / model.xMax * (eq.numBands-4), 0, eq.numBands-4); int avgFloor = (int) avgIndex; float leftVal = eq.getLevel(avgFloor); @@ -695,9 +695,9 @@ class CubeEQ extends SCPattern { float value = lerp(smoothValue, chunkyValue, blockiness.getValuef()); - float b = constrain(edgeConst * (value*model.yMax - p.fy), 0, 100); + float b = constrain(edgeConst * (value*model.yMax - p.y), 0, 100); colors[p.index] = color( - (480 + lx.getBaseHuef() - min(clrConst*p.fy, 120)) % 360, + (480 + lx.getBaseHuef() - min(clrConst*p.y, 120)) % 360, 100, b ); @@ -736,7 +736,7 @@ class BoomEffect extends SCEffect { for (Point p : model.points) { colors[p.index] = blendColor( colors[p.index], - color(huev, satv, constrain(brightv - falloffv*abs(boom.getValuef() - dist(p.fx, 2*p.fy, 3*p.fz, model.xMax/2, model.yMax, model.zMax*1.5)), 0, 100)), + color(huev, satv, constrain(brightv - falloffv*abs(boom.getValuef() - dist(p.x, 2*p.y, 3*p.z, model.xMax/2, model.yMax, model.zMax*1.5)), 0, 100)), ADD); } } @@ -912,19 +912,19 @@ class CrossSections extends SCPattern { for (Point p : model.points) { color c = 0; c = blendColor(c, color( - (lx.getBaseHuef() + p.fx/10 + p.fy/3) % 360, - constrain(140 - 1.1*abs(p.fx - model.xMax/2.), 0, 100), - max(0, xlv - xwv*abs(p.fx - xv)) + (lx.getBaseHuef() + p.x/10 + p.y/3) % 360, + constrain(140 - 1.1*abs(p.x - model.xMax/2.), 0, 100), + max(0, xlv - xwv*abs(p.x - xv)) ), ADD); c = blendColor(c, color( - (lx.getBaseHuef() + 80 + p.fy/10) % 360, - constrain(140 - 2.2*abs(p.fy - model.yMax/2.), 0, 100), - max(0, ylv - ywv*abs(p.fy - yv)) + (lx.getBaseHuef() + 80 + p.y/10) % 360, + constrain(140 - 2.2*abs(p.y - model.yMax/2.), 0, 100), + max(0, ylv - ywv*abs(p.y - yv)) ), ADD); c = blendColor(c, color( - (lx.getBaseHuef() + 160 + p.fz / 10 + p.fy/2) % 360, - constrain(140 - 2.2*abs(p.fz - model.zMax/2.), 0, 100), - max(0, zlv - zwv*abs(p.fz - zv)) + (lx.getBaseHuef() + 160 + p.z / 10 + p.y/2) % 360, + constrain(140 - 2.2*abs(p.z - model.zMax/2.), 0, 100), + max(0, zlv - zwv*abs(p.z - zv)) ), ADD); colors[p.index] = c; } @@ -958,8 +958,8 @@ class Blinders extends SCPattern { float mv = m[si % m.length].getValuef(); for (Point p : strip.points) { colors[p.index] = color( - (hv + p.fz + p.fy*hs.getValuef()) % 360, - min(100, abs(p.fx - s.getValuef())/2.), + (hv + p.z + p.y*hs.getValuef()) % 360, + min(100, abs(p.x - s.getValuef())/2.), max(0, 100 - mv/2. - mv * abs(i - (strip.metrics.length-1)/2.)) ); ++i; @@ -994,8 +994,8 @@ class Psychedelia extends SCPattern { for (Strip strip : model.strips) { for (Point p : strip.points) { colors[p.index] = color( - (huev + i*constrain(cv, 0, 2) + p.fz/2. + p.fx/4.) % 360, - min(100, abs(p.fy-sv)), + (huev + i*constrain(cv, 0, 2) + p.z/2. + p.x/4.) % 360, + min(100, abs(p.y-sv)), max(0, 100 - 50*abs((i%NUM) - mv)) ); } @@ -1058,12 +1058,12 @@ class AskewPlanes extends SCPattern { float d = MAX_FLOAT; for (Plane plane : planes) { if (plane.denom != 0) { - d = min(d, abs(plane.av*(p.fx-model.cx) + plane.bv*(p.fy-model.cy) + plane.cv) / plane.denom); + d = min(d, abs(plane.av*(p.x-model.cx) + plane.bv*(p.y-model.cy) + plane.cv) / plane.denom); } } colors[p.index] = color( - (huev + abs(p.fx-model.cx)*.3 + p.fy*.8) % 360, - max(0, 100 - .8*abs(p.fx - model.cx)), + (huev + abs(p.x-model.cx)*.3 + p.y*.8) % 360, + max(0, 100 - .8*abs(p.x - model.cx)), constrain(140 - 10.*d, 0, 100) ); } @@ -1093,9 +1093,9 @@ class ShiftingPlane extends SCPattern { float dv = d.getValuef(); float denom = sqrt(av*av + bv*bv + cv*cv); for (Point p : model.points) { - float d = abs(av*(p.fx-model.cx) + bv*(p.fy-model.cy) + cv*(p.fz-model.cz) + dv) / denom; + float d = abs(av*(p.x-model.cx) + bv*(p.y-model.cy) + cv*(p.z-model.cz) + dv) / denom; colors[p.index] = color( - (hv + abs(p.fx-model.cx)*.6 + abs(p.fy-model.cy)*.9 + abs(p.fz - model.cz)) % 360, + (hv + abs(p.x-model.cx)*.6 + abs(p.y-model.cy)*.9 + abs(p.z - model.cz)) % 360, constrain(110 - d*6, 0, 100), constrain(130 - 7*d, 0, 100) ); @@ -1166,12 +1166,12 @@ class Traktor extends SCPattern { colors[p.index] = color( (360 + lx.getBaseHuef() + .8*abs(p.x-model.cx)) % 360, 100, - constrain(9 * (bass[pos]*model.cy - abs(p.fy - model.cy)), 0, 100) + constrain(9 * (bass[pos]*model.cy - abs(p.y - model.cy)), 0, 100) ); colors[p.index] = blendColor(colors[p.index], color( (400 + lx.getBaseHuef() + .5*abs(p.x-model.cx)) % 360, 60, - constrain(5 * (treble[pos]*.6*model.cy - abs(p.fy - model.cy)), 0, 100) + constrain(5 * (treble[pos]*.6*model.cy - abs(p.y - model.cy)), 0, 100) ), ADD); } diff --git a/TestPatterns.pde b/TestPatterns.pde index 2f04698..4c78995 100644 --- a/TestPatterns.pde +++ b/TestPatterns.pde @@ -140,7 +140,7 @@ class TestXPattern extends TestPattern { // You can use abs() to determine the distance between two // values. The further away this point is from an exact // point, the more we decrease its brightness - float bv = max(0, 100 - abs(p.fx - xPos.getValuef())); + float bv = max(0, 100 - abs(p.x - xPos.getValuef())); colors[p.index] = color(hv, 100, bv); } } @@ -158,7 +158,7 @@ class TestYPattern extends TestPattern { public void run(double deltaMs) { float hv = lx.getBaseHuef(); for (Point p : model.points) { - float bv = max(0, 100 - abs(p.fy - yPos.getValuef())); + float bv = max(0, 100 - abs(p.y - yPos.getValuef())); colors[p.index] = color(hv, 100, bv); } } @@ -176,7 +176,7 @@ class TestZPattern extends TestPattern { public void run(double deltaMs) { float hv = lx.getBaseHuef(); for (Point p : model.points) { - float bv = max(0, 100 - abs(p.fz - zPos.getValuef())); + float bv = max(0, 100 - abs(p.z - zPos.getValuef())); colors[p.index] = color(hv, 100, bv); } } diff --git a/TimBavaro.pde b/TimBavaro.pde index 4da4b6e..bbbaac3 100644 --- a/TimBavaro.pde +++ b/TimBavaro.pde @@ -125,7 +125,7 @@ class Vector3 { } float distanceTo(Point p) { - return distanceTo(p.fx, p.fy, p.fz); + return distanceTo(p.x, p.y, p.z); } void add(Vector3 other, float multiplier) { @@ -249,12 +249,12 @@ class TimRaindrops extends SCPattern { for (Point p : model.points) { color c = blendColor( - color(210, 20, (float)Math.max(0, 1 - Math.pow((model.yMax - p.fy) / 10, 2)) * 50), - color(220, 60, (float)Math.max(0, 1 - Math.pow((p.fy - model.yMin) / 10, 2)) * 100), + color(210, 20, (float)Math.max(0, 1 - Math.pow((model.yMax - p.y) / 10, 2)) * 50), + color(220, 60, (float)Math.max(0, 1 - Math.pow((p.y - model.yMin) / 10, 2)) * 100), ADD); for (Raindrop raindrop : raindrops) { - if (p.fx >= (raindrop.p.x - raindrop.radius) && p.fx <= (raindrop.p.x + raindrop.radius) && - p.fy >= (raindrop.p.y - raindrop.radius) && p.fy <= (raindrop.p.y + raindrop.radius)) { + if (p.x >= (raindrop.p.x - raindrop.radius) && p.x <= (raindrop.p.x + raindrop.radius) && + p.y >= (raindrop.p.y - raindrop.radius) && p.y <= (raindrop.p.y + raindrop.radius)) { float d = raindrop.p.distanceTo(p) / raindrop.radius; // float value = (float)Math.max(0, 1 - Math.pow(Math.min(0, d - raindrop.radius) / 5, 2)); if (d < 1) { @@ -464,9 +464,9 @@ class TimPlanes extends SCPattern { color c = 0; for (Plane plane : planes) { - normalizedPoint.x = p.fx - plane.center.x; - normalizedPoint.y = p.fy - plane.center.y; - normalizedPoint.z = p.fz - plane.center.z; + normalizedPoint.x = p.x - plane.center.x; + normalizedPoint.y = p.y - plane.center.y; + normalizedPoint.z = p.z - plane.center.z; float v = plane.rotation.rotatedY(normalizedPoint); float d = abs(v); @@ -636,7 +636,7 @@ class TimPinwheels extends SCPattern { int value = 0; for (Pinwheel pw : pinwheels) { - value += (pw.isOnBlade(p.fx, p.fy - p.fz * zSlope) ? 1 : 0); + value += (pw.isOnBlade(p.x, p.y - p.z * zSlope) ? 1 : 0); } if (value == 1) { values[i] = 1; @@ -746,7 +746,7 @@ class TimTrace extends SCPattern { for (Strip s : model.strips) { Vector3 v = new Vector3(); for (Point p : s.points) { - v.add(p.fx, p.fy, p.fz); + v.add(p.x, p.y, p.z); } v.divide(s.points.size()); stripToCenter.put(s, v); @@ -778,7 +778,7 @@ class TimTrace extends SCPattern { List nearbyStrips = stripToNearbyStrips.get(s); for (Point p : s.points) { - Vector3 v = new Vector3(p.fx, p.fy, p.fz); + Vector3 v = new Vector3(p.x, p.y, p.z); List neighbors = new ArrayList(); @@ -787,7 +787,7 @@ class TimTrace extends SCPattern { float closestPointDistance = 100000; for (Point nsp : nearbyStrip.points) { - float distance = v.distanceTo(nsp.fx, nsp.fy, nsp.fz); + float distance = v.distanceTo(nsp.x, nsp.y, nsp.z); if (closestPoint == null || distance < closestPointDistance) { closestPoint = nsp; closestPointDistance = distance; diff --git a/TobySegaran.pde b/TobySegaran.pde index 32b6d82..0523129 100644 --- a/TobySegaran.pde +++ b/TobySegaran.pde @@ -25,10 +25,10 @@ class GlitchPlasma extends SCPattern { public void run(double deltaMs) { for (Point p : model.points) { - float hv = sin(dist(p.fx + pos, p.fy, 128.0, 128.0) / 8.0) - + sin(dist(p.fx, p.fy, 64.0, 64.0) / 8.0) - + sin(dist(p.fx, p.fy + pos / 7, 192.0, 64.0) / 7.0) - + sin(dist(p.fx, p.fz + pos, 192.0, 100.0) / 8.0); + float hv = sin(dist(p.x + pos, p.y, 128.0, 128.0) / 8.0) + + sin(dist(p.x, p.y, 64.0, 64.0) / 8.0) + + sin(dist(p.x, p.y + pos / 7, 192.0, 64.0) / 7.0) + + sin(dist(p.x, p.z + pos, 192.0, 100.0) / 8.0); float bv = 100; colors[p.index] = color((hv+2)*50, satu, bv); } @@ -82,8 +82,8 @@ class FireEffect extends SCPattern { } for (Point p : model.points) { - int x = max(0,(int(p.fx)+int(p.fz))%xm); - int y = constrain(ym-int(p.fy),0,ym-1); + int x = max(0,(int(p.x)+int(p.z))%xm); + int y = constrain(ym-int(p.y),0,ym-1); colors[p.index] = flameColor(intensity[x][y]); } } @@ -116,7 +116,7 @@ class StripBounce extends SCPattern { for (Strip strip : model.strips) { for (int i=0;iavgSize) seq=avgSize-seq; seq=constrain(seq,0,avgSize-1); - float br=max(0, lightVals[seq]-p.fy); + float br=max(0, lightVals[seq]-p.y); colors[p.index] = color((dis*avgSize*65)/model.xMax,90,br); } } diff --git a/_Internals.pde b/_Internals.pde index 45a9363..f634497 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -252,7 +252,7 @@ void draw() { beginShape(POINTS); for (Point p : glucose.model.points) { stroke(colors[p.index]); - vertex(p.fx, p.fy, p.fz); + vertex(p.x, p.y, p.z); } endShape(); diff --git a/code/GLucose.jar b/code/GLucose.jar index 9e48133c23f3ede8fa2b3d5495549688d69f9582..ec0a705b478e7411bdde5ed4609bbe0758506a7c 100755 GIT binary patch delta 4445 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 delta 4461 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 alfFXoAHvJ_SZVunSOIrdnk2~S&c6U@E#+tc diff --git a/code/HeronLX.jar b/code/HeronLX.jar index 430832ebeb54a17433bc8ee92b5795586813bfb4..15c009f0654472f67a41bad555a67e9ec66b5d54 100755 GIT binary patch delta 1183 zcmYk4dq`7Z7{+(DB}cnZE)y(GQ^_vmZ5jn?Wm+nm)2P&n#HmiNsPje=R4}#nuuGs|c3WoWQ&}GFcoKNi5-_#5mBqps=t&TN?haSzuqdaQY~h zMi679O0hhUeRA^utq@qVG=>xOpQX9;NR)g9NAk?GjVIB1M?LG-Rr8ZNdP1oR4r{*FgE;Al8PVXLu9LkQ6lQbPzkIaxeh)h?|;6V~! zoFk4r(l1*ioKhwFxWg)JoJ7(sW0468mOJLfj@p;#JC04EOn2M^n>$Xt!ibWxdYJOl zGMIdM5=4FW4aECg6G}QRtU*cN#m6M9)uCYWDqnrqrHydym1U6PYVlUqnj7e-Vc#G{ zjfog@x2Xu?)7*l?cHUf!tmoE2Na$@79%aD;7p~>;um~%HTnhHa>7#FWv=;8`u6mU2 zeI5g;ez5`ayj#Ft-D~j~``)gTidPTbT>QOFE|KUw8TTPTzroOhgE-#v=$ZSN0ZIQ9 z4fEWWrN|n4^Tlud?by{epg{I)Fb@*&vs}hmSo5#VbgKSeTZw)~{Cq0oM&fxR{B9$B zmD!)IG=++}Kg%tmyk@% z5K@TO1Qk&bb`T>is5xUn+#_qnI-@swSrX#>OkZ;h03m+A+Dx4rf4&qsFo*t{lUB zVJw%JI=+vn8;AdATtn12z*YzL+A9@|cj6V&oH*GHC+29xj2z~^Vdyje_mIg7o% YbBIgl@`>N(@FGe#dTZV2b-1;E0gKu!kpKVy delta 1183 zcmYk4dq`7Z7{+(DB`2*&mj;%lsbm&jr;(smc2n8hF)XtpaVZv-L`9$_L3ANYv`^9u zC5>iMMlrK2DZ9uZ3xZ6IE)clQO`T1*bY52PbN;D+e$V?p=e>O2$LV*=`rR@wO}b3( zDUt9JNoJK-I44xaR}u`X2-ek{z7ybtg{)c;Oc@g_3f8l%g^ZKS zi{Tpsn!U-7wkq_uBDcvXG{?Lmza_RqN}`QVB~RbF;S?k^F^qbcI_WbdA<0h6_uo;5 zIX6#|Xz-~`a|x1|nS>dqvqm6?_C(1^>h`ZgX2|`4OqXBdL6TII zBaS>WAX_Aqs#1L2VHa$iMA9W=(a8#yJMPJj+P(Fy$EHxGJMMwattVe$L~%(qO!;XU zOulR@M1A%R#OGWcN?I?jK}r9mCnT)Vp*Tc1!mq3cHinkiBXhKH?`vNJf zO~IJ^b%hY$`UV`f?e=11-FFT^LhqXJC<`9Ba4nC=g;){fQm{8pUwut`INaAA)hONF z83(!gA_CIcWx-zEYw;QT->#L4R}W4o`r0g)NObcV_kM*w!qAO_IC^;W%zY3b86RU| zp6gwLthVo<_-&vCyPCf#kUjsA2U+p6OvYuh`oRP`)xh8;qQ4P8pUSwNc-{!V%Lrd( z4qz)yp<*7u@=PHVT{I;V4W^Am-n@mVGH)hUnzs`B%=qdzw3~QzD4qChD1+!}*+vvB zsl=NW713hZPK>sq=8P3_x5$OVX%uG+i@FGe#dMn-Nb-1;E0iQ0(@&Et; -- 2.34.1