From 445c6879dbc4506055926c4338f7d42de5561bc0 Mon Sep 17 00:00:00 2001 From: wyq Date: Mon, 22 Apr 2024 09:24:51 +0800 Subject: [PATCH] add collections module --- .../chart/graphic/VolumeGraphic.java | 48 +++--- .../java/org/meteoinfo/chart/jogl/GLPlot.java | 6 +- .../chart/render/jogl/VolumeRender.java | 3 +- .../org/meteoinfo/common/util/GlobalUtil.java | 2 +- .../org/meteoinfo/common/util/JDateUtil.java | 7 +- .../meteodata/radar/CMARadarBaseDataInfo.java | 75 +-------- .../data/meteodata/radar/TaskConfig.java | 47 +----- .../org/meteoinfo/geo/legend/MapFrame.java | 3 +- .../org/meteoinfo/geo/mapview/MapView.java | 4 +- .../meteoinfo/geometry/graphic/Graphic.java | 4 +- .../geometry/graphic/GraphicCollection.java | 15 +- .../geometry/graphic/Line2DGraphic.java | 24 +++ .../geometry/graphic/Point2DGraphic.java | 55 +++++++ .../graphic/Point2DGraphicCollection.java | 149 ++++++++++++++++++ meteoinfo-lab/milconfig.xml | 32 ++-- meteoinfo-lab/pom.xml | 11 -- .../mipylib/dataframe/dataframe$py.class | Bin 61169 -> 61168 bytes .../pylib/mipylib/dataframe/dataframe.py | 2 +- .../pylib/mipylib/dataframe/index$py.class | Bin 18995 -> 18996 bytes .../pylib/mipylib/dataframe/index.py | 2 +- .../pylib/mipylib/plotlib/_mapaxes$py.class | Bin 88985 -> 89076 bytes .../pylib/mipylib/plotlib/_mapaxes.py | 7 +- .../pylib/mipylib/plotlib/graphic/__init__.py | 4 +- .../mipylib/plotlib/graphic/collections.py | 84 ++++++++++ .../pylib/mipylib/plotlib/plotutil$py.class | Bin 61799 -> 61756 bytes .../pylib/mipylib/plotlib/plotutil.py | 4 +- pom.xml | 2 +- 27 files changed, 397 insertions(+), 193 deletions(-) create mode 100644 meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphic.java create mode 100644 meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphicCollection.java create mode 100644 meteoinfo-lab/pylib/mipylib/plotlib/graphic/collections.py diff --git a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/graphic/VolumeGraphic.java b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/graphic/VolumeGraphic.java index 66910363..c09b0c3e 100644 --- a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/graphic/VolumeGraphic.java +++ b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/graphic/VolumeGraphic.java @@ -24,7 +24,8 @@ public class VolumeGraphic extends GraphicCollection3D { final int width; final int height; final int depth; - final byte[] data; + private Array data; + final byte[] byteData; private byte[] normals; final float[] scale = new float[]{1, 1, 1}; private byte[] colors; @@ -53,7 +54,7 @@ public class VolumeGraphic extends GraphicCollection3D { this.height = height; this.depth = depth; - this.data = data; + this.byteData = data; //this.buffer = Buffers.newDirectByteBuffer(this.data); this.colors = colors; @@ -75,17 +76,18 @@ public class VolumeGraphic extends GraphicCollection3D { this.transferFunction.setColorMap(colorMap); value = value.copyIfView(); + this.data = value; int[] shape = value.getShape(); this.depth = shape[0]; this.height = shape[1]; this.width = shape[2]; - this.data = new byte[width * height * depth]; + this.byteData = new byte[width * height * depth]; double range = vMax - vMin; for (int i = 0; i < value.getSize(); i++) { if (Double.isNaN(value.getDouble(i))) { - data[i] = 0; + byteData[i] = 0; } else { - data[i] = (byte) ((int) ((value.getDouble(i) - vMin) / range * 255)); + byteData[i] = (byte) ((int) ((value.getDouble(i) - vMin) / range * 255)); } } //buffer = Buffers.newDirectByteBuffer(data); @@ -114,16 +116,17 @@ public class VolumeGraphic extends GraphicCollection3D { */ public VolumeGraphic(Array value, ColorMap colorMap, Normalize norm) { value = value.copyIfView(); + this.data = value; int[] shape = value.getShape(); this.depth = shape[0]; this.height = shape[1]; this.width = shape[2]; - this.data = new byte[width * height * depth]; + this.byteData = new byte[width * height * depth]; for (int i = 0; i < value.getSize(); i++) { if (Double.isNaN(value.getDouble(i))) { - data[i] = 0; + byteData[i] = 0; } else { - data[i] = (byte) ((int) (norm.apply(value.getDouble(i)).floatValue() * 255)); + byteData[i] = (byte) ((int) (norm.apply(value.getDouble(i)).floatValue() * 255)); } } //buffer = Buffers.newDirectByteBuffer(data); @@ -138,18 +141,19 @@ public class VolumeGraphic extends GraphicCollection3D { */ public VolumeGraphic(Array value, LegendScheme ls) { value = value.copyIfView(); + this.data = value; int[] shape = value.getShape(); this.depth = shape[0]; this.height = shape[1]; this.width = shape[2]; - this.data = new byte[width * height * depth]; + this.byteData = new byte[width * height * depth]; List oColors = ls.getColors(); int n = oColors.size(); for (int i = 0; i < value.getSize(); i++) { if (Double.isNaN(value.getDouble(i))) { - data[i] = 0; + byteData[i] = 0; } else { - data[i] = (byte) ((int) (ls.legendBreakIndex(value.getDouble(i)) * 255.0 / n)); + byteData[i] = (byte) ((int) (ls.legendBreakIndex(value.getDouble(i)) * 255.0 / n)); } } //buffer = Buffers.newDirectByteBuffer(data); @@ -307,6 +311,14 @@ public class VolumeGraphic extends GraphicCollection3D { } } + /** + * Get data array + * @return Data array + */ + public Array getData() { + return this.data; + } + /** * Get width * @return Width @@ -335,8 +347,8 @@ public class VolumeGraphic extends GraphicCollection3D { * Get data array * @return Data array */ - public byte[] getData() { - return this.data; + public byte[] getByteData() { + return this.byteData; } /** @@ -613,16 +625,16 @@ public class VolumeGraphic extends GraphicCollection3D { * Calculate normals */ public void calculateNormals() { - this.normals = new byte[this.data.length * 3]; + this.normals = new byte[this.byteData.length * 3]; int xn, yn, zn, i1, i2; - int n = this.data.length; + int n = this.byteData.length; for (int i = 0; i < n; i++) { i1 = i - 1; i2 = i + 1; if (i1 < 0 || i2 >= n) xn = 0; else - xn = data[i1] - data[i2]; + xn = byteData[i1] - byteData[i2]; normals[i * 3] = (byte) (xn + 128); i1 = i - width; @@ -630,7 +642,7 @@ public class VolumeGraphic extends GraphicCollection3D { if (i1 < 0 || i2 >= n) yn = 0; else - yn = data[i1] - data[i2]; + yn = byteData[i1] - byteData[i2]; normals[i * 3 + 1] = (byte) (yn + 128); i1 = i - (width * height); @@ -638,7 +650,7 @@ public class VolumeGraphic extends GraphicCollection3D { if (i1 < 0 || i2 >= n) zn = 0; else - zn = data[i1] - data[i2]; + zn = byteData[i1] - byteData[i2]; normals[i * 3 + 2] = (byte) (zn + 128); } } diff --git a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/jogl/GLPlot.java b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/jogl/GLPlot.java index 4637ca2a..8bce33af 100644 --- a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/jogl/GLPlot.java +++ b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/jogl/GLPlot.java @@ -2930,7 +2930,7 @@ public class GLPlot extends Plot { PointBreak pb = (PointBreak) graphic.getGraphicN(0).getLegend(); gl.glPointSize(pb.getSize() * this.dpiScale); gl.glBegin(GL2.GL_POINTS); - for (Graphic gg : graphic.getGraphics()) { + for (Graphic gg : ((GraphicCollection) graphic).getGraphics()) { PointZShape shape = (PointZShape) gg.getShape(); pb = (PointBreak) gg.getLegend(); float[] rgba = pb.getColor().getRGBComponents(null); @@ -2966,7 +2966,7 @@ public class GLPlot extends Plot { } private void drawSpheres(GL2 gl, Graphic graphic) { - for (Graphic gg : graphic.getGraphics()) { + for (Graphic gg : ((GraphicCollection) graphic).getGraphics()) { drawSphere(gl, gg); } } @@ -3083,7 +3083,7 @@ public class GLPlot extends Plot { 0, // border GL_LUMINANCE, // format GL_UNSIGNED_BYTE, // type - Buffers.newDirectByteBuffer(volume.getData()).rewind() // pixel + Buffers.newDirectByteBuffer(volume.getByteData()).rewind() // pixel ); // 1st attribute buffer : vertices diff --git a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/render/jogl/VolumeRender.java b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/render/jogl/VolumeRender.java index c121acd8..59d2dc2f 100644 --- a/meteoinfo-chart/src/main/java/org/meteoinfo/chart/render/jogl/VolumeRender.java +++ b/meteoinfo-chart/src/main/java/org/meteoinfo/chart/render/jogl/VolumeRender.java @@ -1,7 +1,6 @@ package org.meteoinfo.chart.render.jogl; import com.jogamp.common.nio.Buffers; -import com.jogamp.opengl.GL; import com.jogamp.opengl.GL2; import com.jogamp.opengl.util.GLBuffers; import org.meteoinfo.chart.graphic.VolumeGraphic; @@ -178,7 +177,7 @@ public class VolumeRender extends JOGLGraphicRender { 0, // border GL_LUMINANCE, // format GL_UNSIGNED_BYTE, // type - ((Buffer) Buffers.newDirectByteBuffer(volume.getData())).rewind() // pixel + ((Buffer) Buffers.newDirectByteBuffer(volume.getByteData())).rewind() // pixel ); //Normals 3D texture diff --git a/meteoinfo-common/src/main/java/org/meteoinfo/common/util/GlobalUtil.java b/meteoinfo-common/src/main/java/org/meteoinfo/common/util/GlobalUtil.java index da1133a4..afae864d 100644 --- a/meteoinfo-common/src/main/java/org/meteoinfo/common/util/GlobalUtil.java +++ b/meteoinfo-common/src/main/java/org/meteoinfo/common/util/GlobalUtil.java @@ -67,7 +67,7 @@ import java.util.zip.ZipInputStream; public static String getVersion(){ String version = GlobalUtil.class.getPackage().getImplementationVersion(); if (version == null || version.equals("")) { - version = "3.8.5"; + version = "3.8.6"; } return version; } diff --git a/meteoinfo-common/src/main/java/org/meteoinfo/common/util/JDateUtil.java b/meteoinfo-common/src/main/java/org/meteoinfo/common/util/JDateUtil.java index 428bb1d9..15efb759 100644 --- a/meteoinfo-common/src/main/java/org/meteoinfo/common/util/JDateUtil.java +++ b/meteoinfo-common/src/main/java/org/meteoinfo/common/util/JDateUtil.java @@ -275,14 +275,13 @@ public class JDateUtil { TemporalAmount pe; switch (p) { - case "H": + case "h": pe = Duration.ofHours(n); break; - case "T": - case "Min": + case "min": pe = Duration.ofMinutes(n); break; - case "S": + case "s": pe = Duration.ofSeconds(n); break; case "D": diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/CMARadarBaseDataInfo.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/CMARadarBaseDataInfo.java index b3e2eed8..febf355f 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/CMARadarBaseDataInfo.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/CMARadarBaseDataInfo.java @@ -225,75 +225,6 @@ public class CMARadarBaseDataInfo extends DataInfo implements IGridDataInfo { } } - void readDataInfo(RandomAccessFile raf) { - try { - genericHeader = new GenericHeader(raf); - siteConfig = new SiteConfig(raf); - - //Add global attributes - this.addAttribute(new Attribute("StationCode", siteConfig.siteCode)); - this.addAttribute(new Attribute("StationName", siteConfig.siteName)); - this.addAttribute(new Attribute("StationLatitude", siteConfig.latitude)); - this.addAttribute(new Attribute("StationLongitude", siteConfig.longitude)); - this.addAttribute(new Attribute("AntennaHeight", siteConfig.antennaHeight)); - this.addAttribute(new Attribute("GroundHeight", siteConfig.groundHeight)); - this.addAttribute(new Attribute("featureType", "RADIAL")); - this.addAttribute(new Attribute("DataType", "Radial")); - - //Read radial data - taskConfig = new TaskConfig(raf); - cutConfigs = new ArrayList<>(); - for (int i = 0; i < taskConfig.cutNumber; i++) { - cutConfigs.add(new CutConfig(raf)); - } - radialHeaders = new ArrayList<>(); - while (raf.length() - raf.getFilePointer() > RadialHeader.length) { - RadialHeader radialHeader = new RadialHeader(raf); - for (int i = 0; i < radialHeader.momentNumber; i++) { - MomentHeader momentHeader = new MomentHeader(raf); - String product = this.productMap.get(momentHeader.dataType); - RadialRecord record; - if (this.recordMap.containsKey(product)) { - record = this.recordMap.get(product); - } else { - record = new RadialRecord(product); - record.setBinLength(momentHeader.binLength); - record.scale = momentHeader.scale; - record.offset = momentHeader.offset; - this.recordMap.put(product, record); - } - if (radialHeader.radialNumber == 1) { - record.elevation.add(new ArrayList<>()); - record.azimuth.add(new ArrayList<>()); - record.distance.add(ArrayUtil.arrayRange1(0, momentHeader.dataLength / momentHeader.binLength, - cutConfigs.get(0).logResolution)); - record.newScanData(); - } - record.elevation.get(record.elevation.size() - 1).add(radialHeader.elevation); - record.azimuth.get(record.azimuth.size() - 1).add(radialHeader.azimuth); - byte[] bytes = new byte[momentHeader.dataLength]; - raf.read(bytes); - record.addDataBytes(bytes); - } - radialHeaders.add(radialHeader); - } - raf.close(); - - //Add dimensions and variables - Dimension xyzDim = new Dimension(DimensionType.OTHER); - xyzDim.setShortName("xyz"); - xyzDim.setDimValue(Array.factory(DataType.INT, new int[]{3}, new int[]{1,2,3})); - this.addDimension(xyzDim); - for (String product : this.recordMap.keySet()) { - this.recordMap.get(product).makeVariables(this, xyzDim); - } - } catch (FileNotFoundException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - void readDataInfo(InputStream raf) { try { genericHeader = new GenericHeader(raf); @@ -310,8 +241,12 @@ public class CMARadarBaseDataInfo extends DataInfo implements IGridDataInfo { this.addAttribute(new Attribute("featureType", "RADIAL")); this.addAttribute(new Attribute("DataType", "Radial")); - //Read radial data + //Read task configuration taskConfig = new TaskConfig(raf); + this.addAttribute(new Attribute("TaskName", taskConfig.taskName)); + this.addAttribute(new Attribute("TaskDescription", taskConfig.taskDescription)); + + //Read radial data cutConfigs = new ArrayList<>(); for (int i = 0; i < taskConfig.cutNumber; i++) { cutConfigs.add(new CutConfig(raf)); diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/TaskConfig.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/TaskConfig.java index b8f7d71e..f89d71ce 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/TaskConfig.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/meteodata/radar/TaskConfig.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; public class TaskConfig { @@ -28,52 +29,6 @@ public class TaskConfig { public float LDRCalibration; public byte[] reserves; - /** - * Constructor - * @param raf RandomAccessFile object - */ - public TaskConfig(RandomAccessFile raf) throws IOException { - byte[] bytes = new byte[32]; - raf.read(bytes); - taskName = new String(bytes).trim(); - bytes = new byte[128]; - raf.read(bytes); - taskDescription = new String(bytes).trim(); - bytes = new byte[4]; - raf.read(bytes); - polarizationType = DataConvert.bytes2Int(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - scanType = DataConvert.bytes2Int(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - pulseWidth = DataConvert.bytes2Int(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - int seconds = DataConvert.bytes2Int(bytes, ByteOrder.LITTLE_ENDIAN); - LocalDateTime dt = LocalDateTime.of(1970, 1, 1, 0, 0); - scanStartTime = dt.plusSeconds(seconds); - raf.read(bytes); - cutNumber = DataConvert.bytes2Int(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - horizontalNoise = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - verticalNoise = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - horizontalCalibration = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - verticalCalibration = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - horizontalNoiseTemperature = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - verticalNoiseTemperature = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - ZDRCalibration = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - PHIDRCalibration = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - raf.read(bytes); - LDRCalibration = DataConvert.bytes2Float(bytes, ByteOrder.LITTLE_ENDIAN); - reserves = new byte[40]; - raf.read(reserves); - } - /** * Constructor * @param raf InputStream object diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/legend/MapFrame.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/legend/MapFrame.java index 5e709460..a093d905 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/legend/MapFrame.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/legend/MapFrame.java @@ -15,6 +15,7 @@ package org.meteoinfo.geo.legend; import com.l2fprod.common.beans.BaseBeanInfo; import org.meteoinfo.common.colors.ColorUtil; +import org.meteoinfo.geometry.graphic.Graphic; import org.meteoinfo.geometry.legend.Constants; import org.meteoinfo.geometry.legend.LegendScheme; import org.meteoinfo.geometry.legend.LineStyles; @@ -1649,7 +1650,7 @@ public class MapFrame extends ItemNode { _mapView.exportMaskOutElement(m_Doc, mapFrame); _mapView.exportProjectionElement(m_Doc, mapFrame); addGroupLayerElement(m_Doc, mapFrame, projectFilePath); - _mapView.exportGraphics(m_Doc, mapFrame, _mapView.getGraphicCollection().getGraphics()); + _mapView.exportGraphics(m_Doc, mapFrame, (List) _mapView.getGraphicCollection().getGraphics()); parent.appendChild(mapFrame); } diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java index 5552401d..916c4475 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java @@ -8960,7 +8960,7 @@ public class MapView extends JPanel implements IWebMapPanel { * Remove selected graphics */ public void removeSelectedGraphics() { - UndoableEdit edit = (new MapViewUndoRedo()).new RemoveGraphicsEdit(this, _selectedGraphics.getGraphics()); + UndoableEdit edit = (new MapViewUndoRedo()).new RemoveGraphicsEdit(this, (List)_selectedGraphics.getGraphics()); this.fireUndoEditEvent(edit); for (Graphic aGraphic : _selectedGraphics.getGraphics()) { removeGraphic(aGraphic); @@ -9669,7 +9669,7 @@ public class MapView extends JPanel implements IWebMapPanel { //Load label graphics GraphicCollection gc = loadGraphicCollection((Element) aVLayer); - aLayer.setLabelPoints(gc.getGraphics()); + aLayer.setLabelPoints((List) gc.getGraphics()); //Load chart set NodeList chartNodes = ((Element) aVLayer).getElementsByTagName("ChartSet"); diff --git a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Graphic.java b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Graphic.java index 78ee9a35..8a89f9ad 100644 --- a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Graphic.java +++ b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Graphic.java @@ -274,12 +274,12 @@ package org.meteoinfo.geometry.graphic; /** * Get graphic list * @return Graphic list - */ + *//* public List getGraphics() { List gs = new ArrayList<>(); gs.add(this); return gs; - } + }*/ private void updateResizeAbility() { if (shape != null && legend != null) { diff --git a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/GraphicCollection.java b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/GraphicCollection.java index 2c7d9872..ae7d0458 100644 --- a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/GraphicCollection.java +++ b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/GraphicCollection.java @@ -34,7 +34,7 @@ import java.util.NoSuchElementException; public class GraphicCollection extends Graphic implements Iterator { // - protected List graphics = new ArrayList<>(); + protected List graphics = new ArrayList<>(); protected Extent extent = new Extent(); protected boolean singleLegend = true; protected int index; @@ -89,8 +89,7 @@ public class GraphicCollection extends Graphic implements Iterator { * * @return Graphic list */ - @Override - public List getGraphics() { + public List getGraphics() { return this.graphics; } @@ -276,7 +275,7 @@ public class GraphicCollection extends Graphic implements Iterator { * @return Boolean */ public boolean add(Graphic aGraphic) { - boolean istrue = this.graphics.add(aGraphic); + boolean istrue = ((List) this.graphics).add(aGraphic); //Update extent if (this.graphics.size() == 1) { @@ -295,7 +294,7 @@ public class GraphicCollection extends Graphic implements Iterator { * @param aGraphic The graphic */ public void add(int index, Graphic aGraphic) { - this.graphics.add(index, aGraphic); + ((List) this.graphics).add(index, aGraphic); //Update extent if (this.graphics.size() == 1) { @@ -380,7 +379,7 @@ public class GraphicCollection extends Graphic implements Iterator { * @param graphic The graphic */ public void setGraphicN(int idx, Graphic graphic) { - this.graphics.set(idx, graphic); + ((List) this.graphics).set(idx, graphic); } /** @@ -422,7 +421,7 @@ public class GraphicCollection extends Graphic implements Iterator { * @param gs Graphic list */ public void addAll(List gs) { - this.graphics.addAll(gs); + ((List) this.graphics).addAll(gs); // Update extent int i = 0; @@ -453,7 +452,7 @@ public class GraphicCollection extends Graphic implements Iterator { extent = MIMath.getLagerExtent(extent, graphic.getExtent()); } for (int i = 0; i < graphic.getNumGraphics(); i++) { - this.graphics.add(graphic.getGraphicN(i)); + ((List) this.graphics).add(graphic.getGraphicN(i)); } } else { this.add(graphic); diff --git a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Line2DGraphic.java b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Line2DGraphic.java index 70082444..5d355fa5 100644 --- a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Line2DGraphic.java +++ b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Line2DGraphic.java @@ -132,6 +132,14 @@ public class Line2DGraphic extends Graphic { this.curve = value; } + /** + * Get x data + * @return X data + */ + public Array getXData() { + return this.xData; + } + /** * Set x data * @param xData X data @@ -141,6 +149,14 @@ public class Line2DGraphic extends Graphic { updateShape(); } + /** + * Get y data + * @return Y data + */ + public Array getYData() { + return this.yData; + } + /** * Set y data * @param yData Y data @@ -150,6 +166,14 @@ public class Line2DGraphic extends Graphic { updateShape(); } + /** + * Get data + * @return Data + */ + public Array getData() { + return this.cData; + } + /** * Set data * @param xData X data diff --git a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphic.java b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphic.java new file mode 100644 index 00000000..f68acd14 --- /dev/null +++ b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphic.java @@ -0,0 +1,55 @@ +package org.meteoinfo.geometry.graphic; + +import org.meteoinfo.geometry.legend.PointBreak; +import org.meteoinfo.geometry.shape.PointShape; + +public class Point2DGraphic extends Graphic { + + double x, y; + + /** + * Constructor + * @param pointShape Point shape + * @param pointBreak Point break + */ + public Point2DGraphic(PointShape pointShape, PointBreak pointBreak) { + this.shape = pointShape; + this.legend = pointBreak; + this.x = pointShape.getPoint().X; + this.y = pointShape.getPoint().Y; + } + + /** + * Get x + * @return X + */ + public double getX() { + return this.x; + } + + /** + * Set x + * @param value X + */ + public void setX(double value) { + this.x = value; + ((PointShape) this.shape).getPoint().X = value; + } + + /** + * Get y + * @return Y + */ + public double getY() { + return this.y; + } + + /** + * Set y + * @param value Y + */ + public void setY(double value) { + this.y = value; + ((PointShape) this.shape).getPoint().Y = value; + } +} diff --git a/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphicCollection.java b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphicCollection.java new file mode 100644 index 00000000..06f13a84 --- /dev/null +++ b/meteoinfo-geometry/src/main/java/org/meteoinfo/geometry/graphic/Point2DGraphicCollection.java @@ -0,0 +1,149 @@ +package org.meteoinfo.geometry.graphic; + +import org.meteoinfo.common.PointD; +import org.meteoinfo.geometry.legend.ColorBreak; +import org.meteoinfo.geometry.legend.LegendScheme; +import org.meteoinfo.geometry.legend.LegendType; +import org.meteoinfo.geometry.legend.PointBreak; +import org.meteoinfo.geometry.shape.PointShape; +import org.meteoinfo.geometry.shape.PolylineShape; +import org.meteoinfo.geometry.shape.Shape; +import org.meteoinfo.ndarray.Array; +import org.meteoinfo.ndarray.IndexIterator; + +import java.util.ArrayList; +import java.util.List; + +public class Point2DGraphicCollection extends GraphicCollection { + private Array xData; + private Array yData; + private Array cData; + + /** + * Constructor + */ + public Point2DGraphicCollection() { + super(); + this.graphics = new ArrayList(); + this.legend = new PointBreak(); + } + + /** + * Constructor + * @param graphics Graphics + */ + public Point2DGraphicCollection(List graphics) { + this(); + this.graphics = graphics; + } + + /** + * Constructor + * @param xData X data + * @param yData Y data + * @param pointBreak Point break + */ + public Point2DGraphicCollection(Array xData, Array yData, PointBreak pointBreak) { + this(); + this.xData = xData; + this.yData = yData; + this.legend = pointBreak; + this.updateGraphics(pointBreak); + } + + /** + * Constructor + * @param xData X data + * @param yData Y data + * @param cData Color data + * @param ls Legend scheme + */ + public Point2DGraphicCollection(Array xData, Array yData, Array cData, LegendScheme ls) { + this(); + this.xData = xData; + this.yData = yData; + this.cData = cData; + this.legendScheme = ls; + this.updateGraphics(ls); + } + + /** + * Get x data + * @return X data + */ + public Array getXData() { + return this.xData; + } + + /** + * Get y data + * @return Y data + */ + public Array getYData() { + return this.yData; + } + + /** + * Set data + * @return Data + */ + public Array getData() { + return this.cData; + } + + protected void updateGraphics() { + updateGraphics((PointBreak) this.legend); + } + + protected void updateGraphics(PointBreak pointBreak) { + this.graphics = new ArrayList<>(); + List points = new ArrayList<>(); + IndexIterator xIter = this.xData.getIndexIterator(); + IndexIterator yIter = this.yData.getIndexIterator(); + double x, y; + while (xIter.hasNext()) { + x = xIter.getDoubleNext(); + y = yIter.getDoubleNext(); + if (Double.isNaN(x) || Double.isNaN(y)) { + continue; + } + PointShape shape = new PointShape(new PointD(x, y)); + this.add(new Point2DGraphic(shape, pointBreak)); + } + } + + protected void updateGraphics(LegendScheme ls) { + this.graphics = new ArrayList(); + PointShape ps; + double z; + ColorBreak cb; + IndexIterator xIter = this.xData.getIndexIterator(); + IndexIterator yIter = this.yData.getIndexIterator(); + IndexIterator zIter = this.cData.getIndexIterator(); + if (ls.getLegendType() == LegendType.UNIQUE_VALUE && this.xData.getSize() == ls.getBreakNum()) { + int i = 0; + while (xIter.hasNext()) { + ps = new PointShape(); + ps.setPoint(new PointD(xIter.getDoubleNext(), yIter.getDoubleNext())); + z = zIter.getDoubleNext(); + ps.setValue(z); + cb = ls.getLegendBreak(i); + this.add(new Graphic(ps, cb)); + i += 1; + } + } else { + while (xIter.hasNext()) { + ps = new PointShape(); + ps.setPoint(new PointD(xIter.getDoubleNext(), yIter.getDoubleNext())); + z = zIter.getDoubleNext(); + ps.setValue(z); + cb = ls.findLegendBreak(z); + if (cb != null) { + this.add(new Graphic(ps, cb)); + } + } + } + this.setSingleLegend(false); + this.setLegendScheme(ls); + } +} diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index a59fc03a..53369541 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,32 +1,32 @@ - - - - - - - - - - + - + + + + + + + + + + - - + + - - + + @@ -34,5 +34,5 @@
- + diff --git a/meteoinfo-lab/pom.xml b/meteoinfo-lab/pom.xml index bde8a17f..253685a8 100644 --- a/meteoinfo-lab/pom.xml +++ b/meteoinfo-lab/pom.xml @@ -11,7 +11,6 @@ 8 8 - 3.3 @@ -29,16 +28,6 @@ meteoinfo-console ${project.version} - - com.formdev - flatlaf - ${flatlaf.version} - - - com.formdev - flatlaf-extras - ${flatlaf.version} - de.sciss docking-frames-common diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/dataframe$py.class b/meteoinfo-lab/pylib/mipylib/dataframe/dataframe$py.class index 4483fc1da3cf738f2a1b56e54533f9b3bab32a13..ce3607b0e120186b34755adc0df8732bb2f5d60b 100644 GIT binary patch delta 31 pcmV+)0O0@e-2?F51F*h00m75NI2*IuI8qA*j_W>O%Cj;=zpDQo4@v+4 delta 33 rcmV++0N(%b-2?I61F*h00mGBOI2!?Ov)VXP3k8U|6oSjMF+{(r6Pgct diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/dataframe.py b/meteoinfo-lab/pylib/mipylib/dataframe/dataframe.py index 2ecc16b5..89e817cf 100644 --- a/meteoinfo-lab/pylib/mipylib/dataframe/dataframe.py +++ b/meteoinfo-lab/pylib/mipylib/dataframe/dataframe.py @@ -1084,7 +1084,7 @@ class DataFrame(object): def to_csv(self, filepath, delimiter=',', format=None, date_format=None, \ float_format=None, index=True): """ - Save the data to an csv file. + Save the data to a csv file. :param filepath: (*string*) The output file path. :param delimiter: (*string*) Field delimiter character. Default is ``,``. diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/index$py.class b/meteoinfo-lab/pylib/mipylib/dataframe/index$py.class index ac02151ac49a09dee400e9fd5126061593f2c5d4..c3cd87a6414bce358ce4fc4085042f4d9cfcdc3b 100644 GIT binary patch delta 47 zcmdlyg>lOi#tnmx~#tn&HKa^*f=_NuJl>h($ diff --git a/meteoinfo-lab/pylib/mipylib/dataframe/index.py b/meteoinfo-lab/pylib/mipylib/dataframe/index.py index f0f8a9cf..dd64153e 100644 --- a/meteoinfo-lab/pylib/mipylib/dataframe/index.py +++ b/meteoinfo-lab/pylib/mipylib/dataframe/index.py @@ -285,7 +285,7 @@ def date_range(start=None, end=None, periods=None, freq='D'): :param start: (*string or datetime*) Start date time. :param end: (*string or datetime*) End date time. :param periods: (*int*) Periods number. - :param freq: (*string*) Date time frequent value [ Y | M | D | H | m | S ]. + :param freq: (*string*) Date time frequent value [ Y | M | D | h | min | s ]. :returns: (*DateTimeIndex*) DateTimeIndex """ diff --git a/meteoinfo-lab/pylib/mipylib/plotlib/_mapaxes$py.class b/meteoinfo-lab/pylib/mipylib/plotlib/_mapaxes$py.class index 61eacb55aaf23721ed0d1ac3406eb1abcfc001b7..1fc176a92b2bcde8eebfcfa1fd92b65811bd7ee6 100644 GIT binary patch literal 89076 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Ǝ)Wn}|ekMI`IpH-PYhAf%`ItnqYWYJUHT zpe9|d_%9nzKNUjNBPX^I;7%HTn^eR9tU8MfpL~{4sVqO&ER$s-9J+PYiegh%-QnVN zrrbSKM1CPeh7@%k`7#^tH|(X4%!EckPih+>kGtsGy0+Fy8~igfJ@9uz zeMkvrP=7C|LyGT@lA7v%UOu{@6xZlaN~i=+iE59d3r?Xa{v4MSJCXD|?!98=w|aWgka1#t>~;*HKz!(s2A#oo-NR7rLS%R$#1 z#m(H5UtRbnrxWM-IUAifabw2ca6ND4ZmEQnc&ztm-prBJ>a2fvM{nlZ=M3^@XHqRp z=ZQ^DBW!KvM$HU9PWgK`I_ow%&u?LTg%Ld*x5s7z7HbsiEZ@w%Ss5}%dxvgx zPTb6;(lzkixm1cvqtfEt?2b>pP=RgI>uzX_9jZhpTLw7ZFX7+izzU!OoC~Z3IN{-S z13f@5zzGlUJfII400x28_U{`0t_9Ws=L4?=E&yH!TnM}YxXAu}BY!y&;9U$z*_Q&B z16Kf70&fAX0Mm{TY>ih?+0!N?f}*U z9{}zI?gBmt+zosP_%QGh;2uEI?gc&u+y~qbYyjll1As{FA>b3hCxK4^g!Fo!20jCP z7I*}B6!<*wMc_-oW55%@mw_jNuK-^Kz6N|9_y+Ja@J--bz%#(Jz_)?#0MFUq-{tT3 zf#-oA0zU#?0Dc1e6!;nNbKn=iF9AvWHSinYMc}u-H1QCW5qBj>h9*O?`tkKvd>5$$GXl7s<_w+Lq$)>+;w?zF-N_8OD_Yjs*K z8xu}E=y8;6_L?A$uc7j5-xH*|*T=#$)e?rd&&01Jm#2C6P#_alT;NJAP(+uRV3Qi4 z>1!ZsUAdY?CeB16dke1cUR6(`b489!W}2KFS@QRlw^F`@sN}iz$hKci1_T?Ykus39 z+Wvwo)(dXI-B=mKG^K3WX&zDH8#c0zoWIrMfH~xirM;8 z+Jr4tX!jv26m#7CZ|0Z*5DB?k`m_zM^yLS_^jEnpBFvkeeNMM+VbF|VQ&`I3Ueppx zOHA%QaVZsjIjTgvKIpIgG-*>MjUFF|P(GSl&n2xtO;Bwlw)&XiCic&M7h2O3&b50; zm$%JNEs}nGfD#gZZEUf}5fJ~th!Y#qTeY%`cO3nLlz_PT5_3yAv9~r6gzFzHII&Ml zaJTH!GM#k%>4|A2`K;36sTegve82CWlyrzG={m%lR1;lc)WxB>YC$6>;dm7;epnh?f)o zky=5q^M|hBQJD$~?*FKQLSRc3JbLH~nnpZE`PLpQ`)6!|`7`BJ(;S^vE=Z;o(?x8w ztN(fu%nI2KqxDWVd1qp?q=G}?$yWw1e$(Ws;D(Ma6 zweB$?HoSW*=9e%cpIWAs#E?M>$^BUV@sh>xoYw`amsk{u^Ai#3Ixvbflj+L_YNR9(kFraWy-906v6cq7n1C6Ajw#S-tk`K^NLYq78uN2?1X zc8M*X2YCWx%(DM8=Vimh?w-}iqNeq z3hoD3UrT+36 z6`^~v(2YDNqH%R@NZ6wXXKif%9rnQPrR2U;QYDwQ=2LN5{$-LTLdXZbB!?Y} zzoVsc_;=4&^agZ-k>WeGXQa-JXj3KOYCaZM%+@U+Z{6f3z2JJunX-C)`7T+e!zN<8 zL0OW~Fx09iyQ&fCTB}!PI+w@=|84p5-mB&L?_h|wk1>XB`GVXf#V??fu5 zcO>uBH7qZ!YgqD3YD-+hiG6)@wi$-DV-ky%ewFDdRklEU3e$hLpxP5{(fTN33*4#* zVsXcgUYUetIy91bZ@#c9TOgT&Z_DH6ZGpr{p_kRN1%wf63v8p0>TcgoAGc@=Btm_E zOg*v%w1#6A1u>}rs3Y(m-;`8m>%=J@=yHxH$kn0a` z+05OBnb-H@jdn-tq_3X@^xw<`aWQZSa4B#Za5-=V@D|`I;A-F+;H|*5z;(d&zzx9L zfE$6EfSUn)k^Z{@e3AZpf!hFllK%UF+ky2=MtnEfOh$E!&15t}{A&+WPxGNJQA3}W zS`RZBeMZt{SVRt=%w+UgNgZM`dPLI9K-otIl(m}E)4`)TlvA=H|T zz8EFen2f#@rPY{>9*fdyPDW2is_5?Me60Tuagn{c}^}*CPh3EjQfM z_zl6;Y2;s@8lTRW_n(*=zp3K+@0%KN7SJip)cDE&=+yXZwi&i&YJ4u6rFxm1OpV_a z)ZwPa?^wZo)cAZJcj&2+F$7~W=j9wy;^x_nf%GE~M7QDDvlFVBs+q!G z!8!GXnEJ4D>Q9t=Bem)|^=ENv)toxr3GJN9*`!U*_n1mwa^5%eT)NS@MyFH#z@X2T zn9r7&{~6%3z#{-#V*clVF92+d`CkGa1K1Yx*%tGk1fBxe8uQs2^S=hLHRgWUnx^S}>*9|1oGUI2aq{ETTf{tU$qOU*V`D z%_0b^>Oaq@8t%fVcp(-zl1t{9ND=1F@Wf8Gz|CRiLowsEMBoW#)r6m{-vVC|^u~F5 zTv7znyw$XMQ@|&NJb=x_*_|>8Qr3QzYdAS@D?$AMW`>ZkUhJe~jEJ0-k$Cb0Ozosx zz0Sni0nM57I_E%tq@boz>@qnqJK~i~K##788(T5aiJ|p!jxfN8rhSbz$L28BPOdC$ zif61Dl3OPQn4w#h-B!(HxAyOP_scMV{>aEEHycLr7#D-Oy`a_*GcLFciDV~%OpTJL zvKvNdO?jkhX}NnrY=`QS;^j`Tqa?<=CbBHZw&X$x=&rCi^kg<~Yc=7{%8d}nyF-$; z>xbBA!K-dNlW~|v)7|0W^3`fB%G)ify)d0~ueeJ<*j*V{qgyUiWhEaO-4ZAq>=EU+ z^l7K0-|iVD+MY&YyiN-CiV|asH;L8^N|Kn7`_>Izhbt9>y-nt-p^N2Dw-He$y=lF( zmK^)WDMNHsAv#P}!7lf2f^{Qs^*k%YOdEF4!N$!P|-+;Xf&AiK13;sfsz^#wJ9D2 zMcpe^A3>U8GK6%0G*+JJvju@{i%JY|osD--@vT>z%5P=TdAXHMQ7y#Qt93CKxCoC? zx_-s1Ar2xA4wqV3tNaO>UyLq}0(Q~PPnqqg=!{0)cq((`)=QJv;NYkjJze)iw;ZkM zGMLqmcdy%K{+|(i!hdq{IcJOx9`L`a?i}-8Dw9jYzau?*lDPWZ2YnVn@&#e5{7r)$ zqor(Bg9+0!WArrBNrN3*i|HDi;p!WzLR-P~EJ}H$+J3gwK*nzM`oNR<{5VNZX*6H% zq%cZ1Io)AQh8<8adb%Z;lh5?+RHhT9hshqAMpo|_XPPUS^0uRNVR1HF6T>CsGdNxl zQ$`?d93QL+<{2s%i{sf|g;Vrd$vsYSx-q*53Y3jI&rb&Kn`Ppt{t|y(4^yF=&YkP2bWPv2MEONyBp>9M|B0v(drHn)4dv z9Z6R0d+FgfyB&%Vl->D~_N}?|6`Ueu)6M?_Y00K*wHy|gA|nj0r|gv{B4de{kI#z) zx=$58HM@m$vkM~lstqD9ezp!Qi-Obg zy#GRZhimB!a2X$63Cvb4wpxA|*nk@XQ-U*MHoYf>O}em+&UVzp@0hM;-|AGgFB$gILXa&i$MI&=_tATB#VpoTYhWZC~_%qiC$Ip3)22 z6cy#g_6)}lgR=$G+@tCLRxqmr(q;az-D8wK>aK$jH@gloY2A5<_tA^~?{&8(b1`{l z|0Fqe5Z$jgGKoOc4U~rXkb&Ia5S#QjIRK%?@gZ zpr*!S)pkvMYA7fxRn`NklGEEYL1(JiADF@fJ1J~MzOcNXY4=Hy#;+(X))uM4qS!g{ zGX>{@Aj+I!XLFh6SScB$bJ?ReI{8N@A!LWFL5OP4WZ*~F;Aid^OoZJP6N}tRD%9Lo zP0+2(8hKl##1dO84yQd45qrn(b+$#|e2=)ky-H#a;oJYS%FdW=B0OlE7ne}wntI9E z=O6Bi=925z5zBG+M&~L%uC)h`FK{u=9^Pg*Ol|kzv*Ld_JuoHrw(x+wZBD(_9V6bA zvhTn%SMh9iuFa<0BNXn-zEkY`HoEWK=*&GBroIJ3J7!VH#><1UFWHpZ%(ta88&yh+ zV3n?o&NA_@x$kzCr%pI|IbL1jM`q#JmK=yaamydjfj_#JvQ21N#8`0%L&vfU&@MfVh`{xR+oe zFbS9pOaZ3azti|j{7Y~ka1cQJOK=E4{7XRmOF;ZfK>SN^BybdPG(hZ2FcUZym<7xR zjsxZZa{=ODf_cCR0I@K^0-yyr2{;)b7A7DTCRhZV3Y-R<4x9lj2F?V|0?r1`0os6e zU@6c6lz~oQ1yBLb1&AvNx`1w=2j~U(BDl|a4;y2$6EQZlMBz2`=ga8NMSm0Xr}Xa2 zrFSPvXvpPg;%mG@a^!8hB#Jw@Qqt=fO?mI1a~b8mMN%^cU*d7RO439VSGi%5(yz|p z=mf1{DTx~p%gK}>i8;TCvj!$Gd2&po+?VKxB)3_1B*kAJCB}}Cg#8<$v}%t6W!@;M zrgF`X5$b+c1EU6YbKtxWsT zK<^=2!;j1WZ8`uGsTvN^er5dIh(7+QH8ByP z$vXB9p_+{7>aDKCgSuW&t<$Ym6iDy^MKH#aH7mA3D2Z8dSH7@eoMa!&(yd!ug@GbzeBDfWJ4{#fBJ8%cE9{2!o7w|#gZs0?}hXF!Tn5*p^ z5&Xi$VFrBWCHNw>E6Po=I!Am->RP4o6Q%f=r0ZZ2t(fvcJH#Odk4tJs<0qQ>2}v`3 z9tUu((2wBDIg~`Ob(5wm5-%7ESQi+m#3o21}-Hm5409~||w0YvUwX<8SoeW3u zPvgMW%L0;F;W=SvIAxV+%kOG6M^a>>lQV0e?!#%lYH|{!{au& z*RhWuslpyd%=<3_UjiNj9tWNPz6?AGdao4~gKw&8>40Jh5iK)f^x2*-xJ%dKy^TfcKYKX zSz!DlA!C6hgQmd17kU`da>y(mAO(7iH33`fc4e?*Wc?m02iYzrhq-c7R4RHpwW(!3 zmLy+Ix)7}N72KR_D=^Sg9HzGk3JeHqPl^9CcP=>o>P6(H z;|eje5D>3ifn7Vpq)ckr^%1F!lA53Gg{zeB-l>4tl;TRYe68L61~XMpWW0x=YR6q7<2@r@YRVWf>?H`gJE}wE|7-8eqx>k2 zJ3jOKP0wl%?aplLLKhM@+LeHaN>4s!@w`Be4H^vwKrb@<`D{K0#CY3*-nx~rFhi~}Wvimr zU^#3}mg?l1l_MvvMKP7~^1~$Prg%C`trV>%+0LJSEyrxD+#Ro-j%CSH;l<9N*{;Mo zrh`SeWdMEr)a^Vae6#6;$|f~!Pu2T0m6sDC`SUZf@Vl0{m8OdoWwX6hq4rnn=WO|Y zQ<~YKpmDncRFI7?r}-WAx&&6W!zh(y92{(Zy{<==am-FCi<^EjcP@8iAMx2RckbBQ zS!<+!7-v}iGyRF2Er5CDL?0i`!b7}!vGJihAu3Boq5DKkVFiV5h`5N74Uv2)e~A23 zqWj5TOrXf#YE>;GBQN2j*x=mv3EU0H<;h*bV?(n^_XHj_`)T=gYLA}{a$aEjQSnk06WI?^zr?}b@ z)L$O-uHj>xmCXY8u*-xsyqhWZZw8WY2guGsqfQ*G2@k3M_I=ssSiU+~#m)sUA7bxf z|FJu*;Uz(}W`c#RsjLY;SN&b@{vdmpHjIN^iTc^7h}N(K9)J)uKodlOAB`-Jw}By` z9dv+B&;^EqZqNhRtS~8Hv%**~42%G5R+v$M4GY7Dg(0IcY*?6afDH??F<`;ROaz;N z&A{eh3$P{F8cYIxU^18j*r+hu0X8Yj_FxCFBVd!lut8yV0n-4R6J|O9n1uK zfIY!pU>~xcDMi+^BFlOr+|eQQt&O&IS&unXdU}Jip2Os>(vTlK>p8qe*^-#}bms^m ztw%|$Ixt`9*%Wi666AS_PiW@I?|EM0>pRNT*AgGimEUzS<0H>Yj;?T+g=EfW&(l`h zWsJ$*zT_oD(d!@W9XlX#CD8S$*O!D?!qF^BYspJ|zB7MdQoT|05})lHS7L#_5PvDt zN$~}}dS23(v$z7c?luITJn-F%hkFy2v_yI^cA_fK3%`C#MnB!o^=GNwWaG9<-82o z_4NDKgupFl%E*;;=}cD_T3AQA^!2>*Y#>UER`|2CZNsezRHuHC#3qaZy!Y!YnPHPoxj0SDF6DB zl$?J}moAiwigZbMseS>BlX&K$f}2XZl(FlK>*5V&NX65X$nCBbY)QIA60%?RD^#xG)a7NbWC~X*0gG2YEfH#;DJ-ou z){>U^0R1YhOM>!28e8TY%hM8}_KjU#ZEVn$WPd)^TvNSefQ=2GH(gt&t!FYm>A6lw zo2r&yNq=V>x1y*l0hL@YOJyX#SdUc3_u%rP_B@r*9;l}>*9)1hcoeBjp2jiWRuorT zQkjb+mHBKnm)Ou$=H1}UK~oaWhpkUevpRS`&s`dU#Px@OL&0I-aBu`T63hWdfw|yl zFb^C9js;%=^8tr}%<1)rVAI;LX>BeAmx0A#3Ah|w0j>l~!Bt=xxEfpot_9bD<=}d- zg1lv?Ja6e(PTtZM1no!Bk$2OPHrhGMTUJT8`q4e;81UJ{J=HsGOD5u@!F%hZpP*F< zRdjOn(c}+>t{$kAGnV^=ppt47kE!tKFLS?Kju;j`I`B+9kYCJ#MnVVQ@`GA&8@IL` zp7IO957mjZCJpL~RW8m)nTPY1JR3gT{P+B#XT!JfNPe-{FZU;_%#ZSmS!`MnfH=eT zUw-5#nud<3vxbhEN9Av%_1s+PMdQ+58(dX%EJp9?!h@Ye}#X)|yw4+sZ*s=+*~vgitH{+$=8 z0c*nMD!YTf5K8YhY*Pc@QcwG&>^UKIpS*C33nZRJPxHK``DMMXnV41i<&r+qe_rd7 z;N8#pd0lcu(Yzo8_2VP{!x7nJDnj|}Ae&a*kF%r;NfC5{9rS!&5!f!I&0i1JraY!0 zA7&ALOCM(WXj^}AU9C%q_-AMx!Cxvhy`LXF8xk%5R;tK872)DhTRcRfPE0<>cs_Yk z_B5q=*|%AYSovgvG-{jVld_tk`ImkGiXd4#agYx{7489PUXhwzJ<*=N9=A4w`;whB zVb?#Sc?`e2s{E9PfA(O>M=<;=vAcKy=MQur!6{kx5psv%AHDFaC$9;2rD56a_LP*e4Zl3u$X?ER49}9P7W- zqe?Qd9-*;U&^txtd1$Nx)t{KsnU7I+)3e zI97*et`6p`4mXvOLvSCsA3Oja1P_6S0Y`?+BY-1A=EvYs@EG98ka+?;37!H^gJ;0c0mp{S zFTiu)m*9Eu0{As}5xfL`3tk4VWdDAZ@-^@}cmuo%-U4rfcfjw#djzff=0R(71!wOK z&q?gmm&WulLF@iZ3@AKi3M`xTx`Wo3kyF0Iy`eej%0tm2T8x>bD}>RfWil!q04id~ zm=Rtf4c~>-MhEbJ7wr@=bBxQ+r=|RHHnCbav3fEldC2zAynldY3%Nx{yW8dUOb^xj zrs#d2QP(BGuv=?Wr{Qk!tTQ83Sa0zQMQ9r1XfS<=T?Y0GG0qkOaZQC^5bDA&#Eg_m zV=Xy-5hTZqU+NOqIY?t9@Ofi-PA}BHF*4RlW35|_MGP8~NLOj=PN<0TVzv(lazf4_ z%Sw#&&7XLFFdkD>o;xAcX3Yu3V}&eJ^l#h*C830KLh<;1RUlIl2Br>}=m%EAAYYkMsm>ld04Fd@F=EyJ#iEXGuIMH_G z%@MkJ7H{L*IkZf}RyVI+iMJcN7)hZwWtIhj^<(KDVd z6ruw63XLuL;w0nnaLmmUmj`s(bvThPl*@?6@i?(dEAk)RZ!j<%xzbblKiPnG$pq43Gim4$FGMD7lna5f9<3-$}b;JWB+ z_mEomvS6rO?Y?Z%?a>93Rz}}wO2oTgf1iymX*Qex#1CQEOq1Y_=+c$Z;{0mw(xgwX zMy0EZ;$)cK+_cfRX7@)n`iI&5#zvRV?vHz4o88~m`^N14A-!+U?oVPH1{7^JY)}lb zVNB6(!w!lL8+K82+HeF#mkmcz47K5Sif$WDpy;vTCKQQ{uB1q9IE|v$hJQ(6Z8&>2 zC!C&4wv8hAH_Bls{D(&vdGLC_{+z+)!BE<8elk~uiA$u%Mlz0aQix7Y7AR3$iD*Hc zXi;*q5)CO4Eo|dlP*D?FSt?p-+=*6fv`iUTl6+NfOUfK9u2+6x8Z2>SWgeDBwd$`{ zrC+Pn(-f@Vk_K0~8_Rs%WaOQ}xrFewTyNxdZn-lJZgjV_mqfX}raut{;(OBIPDk8P zBEGv#HXh0i+@KA7S2@Ed+HCYa48le?({1SDR;}!(Y4DS#bX?L|s_f~u#8xV6ZXuO5 zw<=Y(QYs67rIm&MNr8F2PQj0FQD9#0Qea+xpy;%XkfO^rniNBA^nHqM+ej#SY@?SV zvEf4$scnb__S(i+VX(198a(G1?D7mYHfu||*TvxN%AjzD{R?L>D4fBdaMtcx?{KYm zy4GRP*?-phHfgx2Ykg>`^~rHU=2+G>=EcyvOV#tQs_Rv%>wC5J=ss;ddO#)GCk+pD z{nuTpbFa2qofVa%8T#*GtrL@x{(HpL`5#*6(P?^Kp{ux{K>X*;w)4_=an|KfN{ zOSddp+bvh7;e+m$-qJ10;@S{;MqBxrwz47(f8uVjrCY9#lhIWTcqeJ2XH~1usRkGh zqE&_%cG3{@L@k(*Xn@`o4bY_+a`Ze!myN{oG34J+bld19iXI!iOo5-gnF2$mW(+y{ z9fh?GF~MOr5`!GBV=))y2lhno-aYL+0 zsSIDVNW1rM)8^;hNE%tH?3;1Y^QTMKTuKY=wz-Ug{uNO=RWAIR2sG3Qgm{=V0ngx>Y%t`5694tQkjZaNGPD#RzLQr5I_= z<`koBQxv_CZOT9&?F@X3Q}|ftJjSWFMd9zK&EGj;N0)?sH?GZQsHWFFoub%%H87`d6!@dnHgn4H76IGTNX~vo!_XJC%a&?W5?jW-`T4 zYqp`ljfvx;e}x1$CK|(yiT-e7(s|yE?aE*H<;N*TxS=!BiG^Pl-Qt%;uF<(%lhf!` zC)c==TzzYsa7uDHQM}!XD7Y-)6Tw834krqNi6{srq9B-%bURUcoG2Ksh?2Uo&}*9_ z3WA9!OgPd*_-E-M1QSt4s#bB&A`o)9j@mIb`#OQfmjv2APDTvYQBsZT6#C>7)aB)o zUcg|5b;hA6oQ@Lp<8DO)<{Ozg@wYcqFo6n}$RpDS9W|4pkVj`GCQy-Jm}44w9MiK> zbE9K=;}X+**KOMDPy{}XX>t89{b{PiBg?diAmU2+v24;#VRf7StJHkpeD{P>tDlXl zQK8vM8Wl#-3%-GgX=ib}(UEC9!Nn>QOSc~$R|9y1MhPn6#@)`1^V4`ocjG3d8;>25 z)B+*$Qfj7Y0;63mm?NWr&{t(aw62NL&I0}pf6ToI*E6{(N zIrx^_%pu?~a0HkG=7M?PSTG+P4^99lf|I~0;52XsSO^w@Gr?Kl9B>}E09*vV0WJZ5 z4=x3Z!4mLoa0U1dxC;CuxaO8nv=PeJx_IyR=4()te6N`AambgVgJ$uB!Wug5<0~KQ y;A1;5EB`<1fECfZ7|{)LlM&xGE@*OGEHu~eZEleBV&?jN%y-TA*%w8{K|v7_ad2FQahn-MmV9sbxyuR6{NMb~^L_uHCzbBgU0qdO zRbAcH=j1OZ#g>yI=A8?h-eQb(mIqeHbWhKYDlfggw7kYNc5@bAQe9eHTRNn4LTSag z!jg%llS@rwFIA-9JaK;vn`ykmSyXXNd09=ZX&m4zrgT~@5XV;+mzc);oXO%TwUwrE z5VhVTuODU_e**rH{sjZCzs58^;>=W-wPlqRrg50F*rKAE(%RzM+UlYrm+=XUR~$a2 zP8ms=pSg@}?2~AA#Q2=ErV~nQ%e6!`L5aSg2^p<3PIBf#SK-9ss?zJHS3%N0bLO~i z*r0;zP2+1?o{@U_H{f~Qupy&|3@Yev8sBl20FHKAMdf7`82DGtoCSg(s|C3X=O$t zt@L?P8D|3Gn!-?u8#ke}q_VuSy2ccej`{|-h!RfBUznIeQCac0aV`k^|a>~T;{Rb~0~ z36&KghT}PFhWT9L!!0^@b%}}Aurkh4sUf4;;1->s7&)nQI=rkLQ&wJATwXP?*c25? z1H~nw$0}=?4Qn**YL}Q~QLLrA^U}=Qt%s>==jSaIfjbZ`Aj!y@(*B47)fL6%11c-v z-gki|+HW+)JyvbBDegram{v2fY&`n!2WQn^Xg$tA*Ysf5Osi{ju}&5`>Jrl}r7s6wEyArS z-sH?Pxp>mry`3s};cBeI@nxmun9N#hr43L|1;q&5Vm*X{LrzhAHh?;!N~1-;5px<} zR?)a|Gd*-!4&O@4FUuVHwxu#_kPfk8I~IWbc_+AzEEqI=WdEWYdJh@d-xSzJnhqS% zyWhy(*Z1#N)OXmBVIxej*Cke26WLE$UA+8V>e^*aF}94DvBfo|SPW%qr60u9$|hG; zR@V-wuAF@1&>^rK=7C)#IvmwZfsG_aiLK)srgqpR-m_?bf*z=*)LI>;I7;oh_Vi#2 z5p8mBaIt#vMT|HuPS71)bCXVrudu%eY#Cxygx}G$(xOxHv`X`K1Q#)OW{u@SC zBZB;nvIJe{Fch}FfEkt56xCqXz>?r&l$4kfJA<=ia-g^h3NfWb>-Y*&MqvyJwKLSz z7FXArGDa<|+R7?Zx==$9t1)F0bXS&4h674B)Sx4Np%y}7n}}Av9el(l!6%wB3FNEB zniAWAs47P#6}~ySxO!5cwAzY`5_>^Y)lym=36>JO0Ag+B88vC6*V{;^M}}K z(y|3G6u+rui0`r$1S_wp9Q#L8wn0Z(&6J9=+ok}mEo9dUlX(zfavA2>UR46c(@fb> z(Z#enE7{cn1)I zwd&#Hr8J<&4dw(nF-DG;W%OE)e&!@u4v&Bk;L{5HBSzr?JOwK1| zkjmpOBiCx1?K0Y1wWnN0SJVPvOfKUFtMOTvako{QqmFS}tQXY5N!MOfrz2f^SsiS2 z?G<(U(6t3F?CiR>Q0=+8wn*)sy0%2^jJo!Q+U#^~88)d7R&|9-1ZTHW#ZBG4S_K|m zTdTr^uC1q0J$-xwP3?KDY*?4{KJDrGlHA6bmp<&_6;8Q>?&_7ychj@IM#UXxT-LKp zW(ouhI@9a%01kjSJtwO(o-T1XQ>8jT=@KUsUE;)`OYHo*#GbB8Y|^^K)~ZYFs=7p= z*CpblE)mmEwm@uv%Rq{~jG5oCsI`u(K6M0+^9}6t0>9Td(XNgq@B+Wbm|MrpHLRv! zGn+Enzm83Bx5oH2gmos2^~R-G7eZLSgt6)`!4geESlf|aEE@)lZ*Q3mjOl;KHu@@z3Ko5it#dT6 zo0-GOjyRcg%I!`z6Tgi8&PFt_1T=*@z^{SD+c4>PQA)~o-Q3oOr$>XCdrV(2yMD|{ z3BhG)W~zA4NX0&u0_*>RaHj1B9z3U&atkJb8NQbEc-*~cO*oN zueq5cqpvB;Rd`X1pJQDdav$nVn1Jyo0?GiB7+0}fS#nKnp-5BM3CwYUJqy`(f$D8% z*@@<7+1;R7F?AA{ADwzrbe=-HiN&5{bAa;9Syp@AXky`4p5-|Wd<=^UYnR5{mzcR- zlT&(r+1BMyrasFC%6)5}y{{Pu^%eKO=fQ06eCAfZZ|%`%ni+8jh>o3b8(_-6(}m{- z@fYZtIafE~>AawhJ@EqTil|si>*x5LOPD}?3jKLbr}*2k()>|%Y)1UaI!1Y3V-KaT zO*V|F)cg5YMs-pB7iy%`-G<1nAVxH~a|vJNHC@#oFByVUUb%j?*^USl8q@_ehf zdm6R0dcn`{r4cXWq}`|5-A-^S@ViZ{vwb>F-yfuws6^}u@((l`zww2>g=Eyl!q@++&Seewf=L z{t4A$*U<-0Z-RBeT`vCU?9soQDm<4zU@G#&Jz+-?X0J8y40-gd8;2FTPIruXNYYfLC zYjZccS-#AVK|3$1*-08cCzUD}#qgIX<7HpqWz{IOR=(0&aiAVl3dYQfbe{@4LsZ!B zUQyl3rUm|ZtPi;FUw~z|T|S7+S6E)-TOi1-Y-WMx*RDtu6$)B0FDYdS`w3VJE}`{3 zJ@IlXKTUJzG;&1#X@H<0$!qD=H;X-#ndo`O!)2de!smsF4 zqjoETPT~s_VvK=jqPme9?W?|_IH zs12+n3>)eEpPW0eBRi4u@#}_XawmQ0)f##NGe{xjwZwtXkx|;;3ry3NKb_o~3n>7M0D#m)IK7^0V>J>>kH$`)tZ^miP_=;i2uo-gR|V!N46Q0_vj=S%9h z#NKm~s+P29^_5~0|20H{+VylIb_?73&$MYtcM~B>iJwB-m$akSue$>n6%sH_yEF2D z8L*v>agQi{su@SDHybVAgvK2rKV{+ppke9F8h>B(5rSgZz~y?96)wbBgZ9IbjIyVLo|$hLZ<+6E&*UgZgm_~lWj<;@&M z1KM#$Nu@DQ%g%yDh_nyuGE78;i^fDcQsvSVZcy*(Uixu{t0i`E0bdDCp|hqDG=<)S z(eI!ICla&NhU;SD9Qy()o^+N~XyxYPFv*Nx0l(4Nr5$n|&}r~6i8dVclunIqpaPeL zPE~RT)rcgzd09s5W*3Xs2Hip5?V&`$F(*Of)BI(Lf#isky|k1OMT?Y+>EtOo3L!yU zS#R80$Fu9$BjJ-3_@_pw_14rv%10lZ@*<^y8g*HoD4U}vr2BwKkI?9=X(&IA=sqJv z#%pv_-CofjbkMJltc76Y3t@y@Du`f@wIVaZWuWHbmhD6eh~p3p z+o@z**$%V8+HX(A%aQ{)`-RrB&0vM`)FEZG0M-03hOoMJgvaZh zLtLQ{td$mafPmIFM)y>mjSOzLHt;Xvt{lY9{mL+gu)4tAe!3P{MY!7>rUVC7aKBo0 z>S$Qt51;=9@Gj!o@glB$!WhEp0@vVpYtDUv5OTNz(NCdU8bAjQ%Z(kbf0)|8ayT3$ z#DFk{=ubbb^t#|tA&LXZy~@Y0p^mGv{DZ=HI;z(($Q4R9KxS}cl=iZ**GBMzu0Fyx z(>@q7B#a@fE=4h-s-Y2z*Xx z0VD=l^uc;JwX91BD8k`$NJAp}?+dZIagT*YgdyN46tsr=4ovhpn z+cMHgK0SC9a5tDeq$o&bagDA+Mr5TtO!sZ@@keOEhGhO2#m>m+tF{$=`49}75!~5! zS%NVb$oeuuF$gWoN}Pw1{pt$BtE1HaNy3>R@HE|8pTS8VeV(k3vZaI5rNeH%WPvNpD*U+X<|%f@6R<-8VDY6mRGUlP+vdant~1DLu3~hcBb$o7?i` zbYycTUqQd2;Rah!Hd^O#(B|C0SgrBIP6JlbAaaou=87$jylvfQ2E=wz#`P%#xlY? zB`cPh$yPEDbsCcGRFYYqZEbGG1Ch#%`Lo$#BS9KZt4>4L5#Ft#3(E6 z!P)d82D2gzn0o)Pm%41r#@+9zZEd^lw~?FOm>l;2_Z{?mji=CK->TlF`fXYK03F?y z$={>1p!PmxY)?!40N7S~A6aP!sbG5+|B$M-XYxPMQ`bN6@?%9!?{F#z5xUg;KhGX<5&_Abx_E$I_p7r_+Yr@%%-4XLl-1+vB4AJs$o$4cU`LIeVJX zj6I2_e!YTwE?TgskG@?v%(}wKb^>)Yrf&j?wD8n7JZ@2F z(ue}0U1JKf>Ctyn)UgiZnrbOJ*l1u|Q>VA4jc9bdmqfsH$m*>#yr5~V!PYq; zXcV2;1-s{1wBsAm&Zk@6^YbgH=VO*II#UY{c)=Qgn=PBJd(nIE`JFl;b0>s_xr)-? z&+2`(Z6+^TgW=~P2f=|ZYy^vRL{!U;eJJq0pZBF@@8=Zuvthq%(ZU@?h!!06zo9ii zV_+$U{qYsb`XGf5q`aqm`AYBC*k~-UI3z`;YDqLm;Y8VpETpTSOg7|Ts(Q*7P*iks z6;#+Fiwah+O<_8>vXfYXRqqvV;IEY*B*Xdifldy!NwmzOg?p9IoD0Ie!A;n?3VW^! zV}%DhU!nHjf3jY92Zw6|=>gyjD{*Nmala;$0L=i&0OVjY6_5r<2V_wF!R>vy`aZ)7 zW-&8ym5MulvmEog8C)#5eIP`i)Xb*xkm`URd> z)M0KaAB>p0O7+^NChBSECPc>D^r#rhnwUh}K9afBVJe}s893Lf#&|>)+(}y;j8k;_ zqg149=Eu!P-LA*PsyT{H7UyXFu*G_CSz-i(2rjhr_4T2AM~Y)_!zR$58YW<4I-TzP zI0x@+U->u{Io_s^v+OTv#ar~v$IVS_Kb8Vqhr955sQ2LkaRJq2X-RCOXAZY9kvNBt zIz$;bV#)jI%;9YQ05w07#%ECXBRw)6)Dl<`_&|Qt6853r?M{K&@B&HBq}fNt^I7!I zBRTvbO8umH9QKW{t~ZhI)1-K)`cS?z#ksd3dkNc*L66d;PsStv!Jxq7TBg&`Uw)L| z-6RFb`?%twobCxbElXjcfQ{Y<(5q4eOIzph21-6@8*r(ipR)BL#Hsv^YClaG_q1+r zqD_HU)P4{`b{?L^4$axCj<@%E#U4Ca8)6&aVJG-Ec>BV5Y9@2&r%#jchQ>Ua-QMAKH+fk~)M22=p>m5fA2FOktpWb_i*yhJuHZx5Ep=p_<*iKJa3p_fSLB@%jx zgkB<{m-hnjl3C&qkF27GT^NV1a7@E+N;sZ`4A_4>JAR$&!IBGa_4QPA zyg6S_cOB2+bu|BYI=(V|>v$Tkr=zHEq~DIGcS7958d1!Ha_Bf2WWS*?d%WY4o9Uht zKJOCN3H7a7l*`r1!^bDnzGxAz6XZ)p*ai`N4j+bWryssZ!<*IE6WMXQG;5^-wZ-J0 zNOkR2ElOQpafHU4NauUNEgK&Q;i3=gbHj;l;?Si3XKIL{_C+*S=b%dXY_{{+J~ z3~~YBRlq{PYXD@;axvg_0N!NFWdOX#mMZ{n0#*WWe$eG=lxqR&Xz-V5feol_25bf3 zHLKhP*bdkU*ag@P!0N+?kQ|?K9}AutHnKSN-BQeowj0EkZP$uZLTqKJL-XLSe-T2g zK?CQ)@3IGJ?0Xwb;BJ#2$UcH6l>F5R&q_P=TdPb&tJ)3smu z0_O|!+@@Cw6wzMkKoR4WPEBsFhwT#*T6EjR-R+JFD?~osj?8Jd6@omwBz1ZD$G7(Faaq@Yk&lpx*7YmD^p3QNs#HrjXo@D++JfL3Xdg1yd{Dc z?>f<#0P(2V*WChsEzjE?e!`NcsZE}(&alJEcG?*_D0yTjrB)>yoar(x&n}RJi10t< zU|mr_Dcw*&DIcJKQlN76skFzav>3THqk#508P?BZB^%5~jIU{LvAP86iKS zRo^z_m9+2MZUxXZB0TCBuSmsfx?qLi4WWfPC0XzCTSQMkQ= zh<~3Ocm)s5yka4WWUpAF&9u@ZE?BIZ+gPoLa(f%aF%>-!>cJc;y;e)VM~l!D#NYwz zP#{EOEvUGm^o%VKw!oZ3J&IVb92!6gIe$TcXo~$#MN>pC743$haC_x&6dt{P+=zC1 zrHca|Ib3QdO}9z-j>8=jl5nKW@xc=kj#3hGh+$eXLBjgNfVTQ*us|zlD-mzjO8Cqp zgOMr2#^O^PtnkCt{}oxsBz)7M{*MHwr#0dWqoqD*H(Zp25zb%W$4)vOkMjJ_yhW6^c{Scu6;_0E-@<$OG|X^GfG0Uvn%o|b1Ey# zv$Jj5DH1M6I8BKIt$h^ZJN@Wq-8O9}`7D^6)Xq`Ta72D(krK7SE9#fxk@)6`UsGa3 zSJud!vi!jl$}oj*DX|R7?3XcE*S@19Qp|QoI&|%Oh%zX1zykyNNmcwPK8Sav{eu## zZ0nnup=&=;5(O#DV`P_=7EKr-MgLhebT>}@)keM{iFefk1 z#%yG+Yzeb5s`#*mqFchwVd20i&nX#^ud@iK6fAqflA|)l6zi-JB@NJE7*#dvEE-5< zrG+JxZF9=YOULP~F_0j09i&(ra~Olfi$@b1(}d~?i5ICS8Dotr%&Q!!v!;{;7nT%O z4mBQ|<8fquPM)_n1$F?>yU^lANW&~8LQ#In2ua_Hk}xmE0B=(|j8Zx_zkDQSqq8=U z69}39hIY1KmShOkq58Yzj#|UpK!E9aN9ZhCH*?c&BBNOX?I}u|MK<0SL~}2xaGl*HRy1?P^tZ8&2J-=sw5YHo->099>T}HswA=5&V9;8A`PiHy zon;x)_479jv9Uo0{ZMo%`ie>z0#$t@a_mtP_E zq%+v~A%jH$l;ia_pA;j-4{5RbV@Cfd(XeH+oDxh=I!;be*~lE7mC4!Wlvf#0dLoHk}9XDa72mDUhq=&Fdk=0 zDsR_pFO|{dVRJC-@ZqK7b@mb#Du$9K)Y&VBAN9=19W|o7bW92KIL}ywy~}gPWgw=> z>FexOO6(x=HF)*$x`FCz%_@8xs0-!F%qi2^Vu%BpzNqK0H(>wrQba2mz1W+0LRXKH z5k;VQ3ntGkEiKP0EI|y#8eR@z^KvR-m3NHQ)yv$w(#9qlDt;Gum58A_TT{KUO(o5$ z#tJJa%rC+;HW+K@PWhCPgK*3?LLPYE7&*db@I_dtvud|uHU)(xbsM*dC)y=@c2E*y zMED^kg`@A2Obk+QsAszjJsOQFbh6!82%_`h)8QcHy?XN$nczs ze5{c|x!SQ~I0}o)O3N$nEH5p-f8YRE7c<885$q3OI>QbUA}6Rq8Igban>ItcAF8TZFj1LlXyf4Avs$J{#G@z6@dK*#%M7A*IpR>>F$+>|2g-o|VnJz1WnLjB_B*UI zYFtkF2ndFKz*12;K~CWhP?jUiTtk_Qu0KJVqjNA0F09C|!0ds=u^VW)xjM&YV9hP| z{G`ASu%EO@!wY0O8 z5F9&0uv`b;$41~cQs>wTw6ftk#}2^CicpD#9~bA8kMiV~gC&9^kB5b2OMZDEkn#j* zY(#!(aeig_1f3^=izIG>`9o|uY2FMNa=dYci1oY$1S_g29sZckQ_)daF$O+3252oI zyHXf$4H1e9F~?hE#gj8$=WQilOsl<=T^>}jfvWRc(VPoJ1b<7uI(YETXu^SncTuX4 z!*r9H!eRz_cg(d==RKhjwc)8Sr}N%WbWV}?;ZDgbR|$9*W|5yiURqV>{V{ZfJWEu{ zvjoS^z)GY@8K@{>1{o6o|9jDdiRpYW7*v#wDbEGLeWO>1q`giY&!ng;{FY}4*D8t2-yNk(nHJhdsY zUXzC;Ra+oWLaMe%o@G>Ri9B$q+EN>Kc~x5`w`5hTlAEily)E}hRa;?Wj~TU9*woUE z>T0=psqVEh#;RJij7O@rL52%e+b9NhansGBxXazvT{V{x>EcCMmq_t(m#5pkPl@xP z0gvU3%}Fo9NhCc>g{a%De2KUgQRpQ{GN*o|miBo_ovD>Q>Ted2(FRK!phbj?fRf!mg zvI#;8vuOk&1TgjLQ($jz+Yj3JNTjOKPS=O(h$kd7t#IbOOM^;Rcq z5S{o-e~=Vq+OeOLp1Se)F9wc5!h1*BW+N6o4s+4U^V4m;WU0Payg z?#)iYPCMC$0o1czRBZ!Uxla4%8n_(gheUecNq4+Xh_(W-1#ld2i4Yb7NCgZAj0Q{t z>>-4MjAsE}hqEGLNq4ROp>McGKM;TRbJIg2zJFhOu)3iCdCm0!ki&`f8d+eeC6%?5 zw$^G%?{tisJ#Yk&_74oB4J4A4V3BRHv_{W`j5PE#$egZ&<10hsExRoiLdEu>(c;6Q zJ;UV_0hhJ4WB`iAplEvkNl;wBe+vV}riYtBhI0?kLR0A@Nt#EpFCoF#$a>2S@({6D z$w@2WR=(Rxrs0o}Kghi|NCcXE9T?yS#QrPHHjW#Zay`^kQ-k8j4`Iw(Nf>@N3Hz{4 z5T*aH)g03Ok(bcHH1L2Mq^*fq&g`G055mh`J7gKNnUOfoZH(1T0A%4aR) zgc3Lt6l9rPlKr=uyRwPwCQDc194(mnY8PV%L9Uu2#aFj%Qkc3_%bAj>_Jmb37 z0QjQEl!#klU#Ov$jJZMElAwT1BtL1F1?ENrwJ$$Z{rr?D3ieB%JmP@BqhETI9;!b6 zQj`{kSZeti{sm%-UHtk=Ke|D5o7-JvPqc{RGkB9E#M4Tw$h7e8HDt0=+gC$GMw*Vb za)4%3k+$d_D_)qJ#!(q3w$E)7K3-x6)sUydF95ftQ#&B&JQtlHCeMo!ZRfS3kBedR z+(^47&r6__#FBaLuqV_2x2gdS&6ywJuA$b9G^=lr+rWErU6eHXq-Z%mnLZ^3&2L1X z2A3E|7obfwqX{v;W!UsOEr;iKcN{UX{ungRinv#knm#A->{iI_)Q(BPYslIRH28#I zz;gOm4LB;ae(oF34q4|e*;VcJOP*tcoOgw;Ay~Az;wW~fad_u16}~k1k47!2$%y9 zfR_QUB;jW+U_PPpbY<-QT1UfQ=^4y>fjIbjO3*?%L5o!B5b3asYU2`5iOOY}Fa=^*T3^TB+jcyYa3v|1Drv`P-c zg=0cvQMxR|_O5(1H1($_UKAa)S~gfjj}5VwJ|J8pRxV1SYsIle@pPT|$D*dRT0|^P zqU%M+#VH6CIg8y+$pgwe(V4sW{y#5+YNP0}Jkl+t4=3z88EtGO*GP%wDw(51Z%b_A z*y7|z)_8L!#~bX(=J&LB=P^UXW%LtTTZv|WHBFah!uuL=I)H9;Y$5pZN5B3XJmtuMPjkFG?dGt{K|dH&~JX4?o;pC!00Y< zZdok-0{ZT1X$`^7iEeKtn6!8vI`3*pN6(jH#am`;T!7Y%p09+f%G~p{7(K%!9<2(c z--ySm8k@L%D`r*QrXyxZX=B8(s;(Wr3&;{DMNZRU6~i_)207jhO-T`LZ8UCz52u{N$OMU zh};F927St;3hH3d;+7Th8Ls+rrJ~#GnYT+(uu#d+o-Z(RY=EwpqVwq)eQ>S%dQwV`mrC}y1C)IfrS!poni71( zPOYQtcCx;Z1^w!Tkp=dNJ`A7VcoEEzk71rZYxGm2IO!O*V8zd?!)Y=WO`P~?C8tfq zZ!4SFng+1%7Wb@i)8=)IMei_9zoV70dJ?;sxT<5DCNNY}Kyw%i7b4y;wAwHhb3sy^ zeqbz_)kp_35Dr_;vAPuvC%xZsf?WvcXt5 zUR(MX4(lfS>KN32t^_Nf*BeYafO)X)ehk)H4B8brtVdw5UiBTIr|b*=7W(!dzA*^U z>J8Gi-XOjG7_6=6u{x6WQ66(=V5qb zGXos&Q%behT^#pFx5Tda-I_QRiwlTLM67+NV+PzX6L1e)5jS$)xPg>Q#o<%nJPe$T zTNCMuIdYuvmWadAX~TUY`Ib{N$Q;2QmCL?vtjHB#u8k4>*E!m$0AqO5u)hos`GJXe z!?2jSF2!%9E_BLZ}FBQS&>Szpjx2$~jt32vqY4V-&eVSo)J!7gA}GFojS z?6LZc+9Kye93O=w4-s`{ND?awFz^O*Uwl)iBUT~};gn}anL5*bNS#raVSI9Rdhby% zMG>F`=D@Y6*BrkZM_g?b=29;CGbqAY_eg@tc+ZHU>-uQ1XqrV_n;D9;aInTI#g*xi zqTPB#GSPQ^3LPs(uXodNI4q~o@iN!5#DVh!aeBRrP87ebPq6*XKZ^FJNZjB;0-OF` zj99$L8Y%T;$zE+J@|CE*5%HDzeVk(!WeBomRe&sEY#>8n3Z+=L-VW604Max^vu zfIN*MPs80YVaU^Pb4(cWG=@BlAx~o-z+}J_0P;1}_Y^ces@SJ$eU+hVYb9ixE~oGp zs+Q>uBAn?s&YqE|PKxXlfy;s^;?@8ho<*}$^T69OyeGp_k+3m}J|}M57)PHMR|;a{ zV}bXABv=0Er>-JWZ8HUZI=-#k5mc7#jf{a!SS8uMaRYno9MONXTP*r0xFv(65JAQ@ zzX;N=v9TjVqZ7RO_cV;~k_=Cw0p2g;a1t#qN0f*v@%D=7zbr@v**x*Wrj+Pc)eMZl zZCXyRi6t{5#f42y(QmU|ST@Jd1tM{Ci|~aKox_WLp`$`PwAmH3NH*KWJrkXB+>kb4 zzgS@+k&9{IUF^m>S|V1>N)QcRgL}UrE^kg01zQ{ z)h1iT%58QrZd)YXCT46)rrX8ZZ3)&Lsy|dw$<@14{Jt&ODHY*gi`SN;eV6yV-gA30 zlDdNJO?t`D^abgNrGo1W_6z`58tgg1^8j3FFkERcTxl>|X)s)AFkES{mjJldV6On? ziBGndT9Eo;9{qN>o9{qvC!h+j3ri2Ld5j>ZM;mAVpi7Wsub93gk?s?3?}$UfxPOP6 z9uODNa!?%K86^^ShTXG3?oqYh&xPVGhI;sN(PB4+GNq({Z-oeA_9=#ttT zmwGTvk2@yBcDWB>Aa6ah9eS=9CC}KarjmE%19r^nX7w`mAK;UDv)_I3Ru@ zo&w4_u?)ZGeGAd@GJ3wmUK4APPI^HE?{?F#Mau45kitEP`bF{h?&k5|1?Fj-di?nW zi2g2i>`tKHi}SnVaMP2$$4!3}@p}^KCDDCPJpG4ixvY*X%Ygk8VnRH=KZ}a}iRm&qlJ_uFzA`ktDtNtdlF=umIe0jPHr}wn;@l~=?oWw|Q0l)_ z_rS>`krl?Yj{#OA^oReTT+1Kz8lyd0()j|f{}jSqqW^)EAe9;giL?xtEnrd}BNiS= zwX5_;-M^}|q@%DMbcrhm;;CEM54NERV*A*rQ2%`=PZW6vn~FUL!)?Cv90pGoRR`k+ zG?60ML)B3LyDj`#`nKWEys4@4Db*>Xt+%t8?3B*$i@sCEl8Mn8Z!T6%cXvdH;4Mt# z*aqb}$mXS22IeXCSv)HyA97h!6g*%n&~va&bf@ zUHtSnmsoVn+OD;U$t;6OgE~yo>oa*#4Ew-ky+zSAG$d(bVuB4(PN!iVCT;68d089> zlXi;EE_ys19VBn)cze;{aGJG)YIaE8$^2Fm@3{tVM;+cBh39Y@y-ln*oJ>23V}}!a zs7%glIfKOTB(Hf?0_W|XZ*YX`n)KF1v^kPSyNXASBqyo#%!~Y*f$XedinBMJA7Xvd;_)ce=t+*N-Zwj?l)Og`+5{B!Cj?8lPB z`kQzz72S_TwMFEr>we4Xv54}s7@&xwq{WN)KockIqEhy#Ix1JWnt6S_4aQEk0>4JS z5$$KJ@;0x&R~ftzT9mD!he5(|yb*S}7RTGRlY8;+q$^&z;^@nrfCxY&pb;P%-~u!T z!~kLeapL9UyV40qe#ZwPD&q4ABPxbW!;NPszAh-j7>{5!#=B%`;YY=!4`XPynE#Y~!W`FCw_g1ihElmoN(xCURGvE22Jfx5+cHyHXd40jWTC zTTG5~Kpfs5jc;fsf0PnFvR)@n6I(xW(L!~5_v1$?^fA%sL}KzNiDm^4^Sdp7+?Jyh zi3d+KjxCmWMnJ`#Hfe`U+I#8BOT_FG&D|2AmG7?q#x4++N|JCacDyG!BtAXS#91a= z)MeykzKu+S%LNPjxWqPmwCu14OEK6c!=}<1ysKL!aHe_U5SRV2%UYp`Ld4`kS07&K z=a7*m-_y5R0|~~;#_;x#01l_PYZoPVbv6H1XO6uf~vt5YdR8-|{8H%GtvsKWSF-vAJbhol=Mj#&LK^TmQwu>*X#^{@h8T}WOs{|~qF z12@RirV%ZmIY3AgOa@Eu}^hd zN6y3X7MJ5KuKYmFh_#kV{kd$c++rpRv=o#KUJ?wkk;@qlc4yBBq>a6uI2j;4>Pi-VrO$G)2Nn3t}~Gis*JW zR@lzkk+sI1ZGx<|=h+s>T1TCY9lTZ&Gv!o=JM$`%o@VvFSmWztmke9sNSm<5VQpc| zld^6E9619?AMp7bd(c!ZPGgV_bG}GQuaPX^!@i>c+hX2dWy}aN#f**Oo-dMb$1>5k zl06ULyS9yFuf#FlHX1=q<-gvzE#=LVfg9S8tA2}E{Y4zzDvsdyJ@LaAu@Ms6BpqH! z@oggJT+=X>5c^~Kz;jK~cl}$Uz7J8|iEi-QE$LMD22m}(*;Em{jK-G*=g%dDVMSt9 zNkw8$5)IEcPTenCq|%-2bER5edRBk72Oz9l#`1&S%i9;ucl7LrJCRmbiFTb76I_Ym z)1bSR|IZ}J@Uo?VHv!84cvlV`5xyMo4qzo<72sXKYQP%6TEIGQS&b5zIxI%`M!+V( zW&l11<68mm0X(u{8vuzs$E#HSK43Qh@qq6G><3^`;^Re%&$Per9ym7RD=0=t$g0$h z?5osjc9F4dr18L(aQVM8#@3;M;+3o&B$uk$Wo}iy3}>dSmfXp%WVN(7*)LfwgIYV; zZ&`RTe$F1N$hab-l8l_P*mWP>KNa0oarw(uu8Woc5)I{koU5Y4g=E*oAX9IICCJC2 zR*b$7?YU?*^;YmeujEg&lw8*#kdr>`AVP_xn<$>N_(!{;DCS8DItMdR)K({_ih7oV zY*f^Cvp6%Nxjob;&{f3%q!uSZz9l8)jGP)mk}dra=>GB1z+LM)(nPa+hM=-a$tg zXf_jC+aP;z9jUbqiuKj32mOYiFby<;=|B@&Cqol4DCG62;yuJcOAMWcnRsUf*&F^P zZ*l2sw+B;@CX!r(4X!Xz9G*g*Y%mI&Q!7Fd=HzY^4V*kt4fQt%ea0B7foZ76E%rFy zbd#m>8GOQ`*utG&%4!MQHI=i_o&qz>V!C+#n+Uv;T>MSrwke9g_8N+YPM(Is?$nl| za2O(l8zMOI+7yiu5KsL0O-D~FCC?5AJ#Wa<&?L_`tKU0$x^jj#$~)Uh_m;9jo(@W$ zJzxnDUqykojwqlMsbeVRLljWT?P{P44z1J}$gT$RsHLr)xA-E0Waytb*urbOD#}`X z5N%L8Od?*j*#C->-=S6@Ozu;eRG$DG5_0GuB!$V{H|)7>9PrU>0d&cB{qi@y{2d`nkbFU|{gUe8C6Yzy_iz z*Rgun3(It{5QAwW6Vrhf|5}tY`G4^A)L{y*k*fx?f6&2F4c_?R6B~ze6L!DJKL4xP z=PLVnl~CwlgAJb1ex9CcHp0X-;C$h5Z`cCs2=iU4%mbg29wZ&fZ}ZCzHrn9n^7E`_ zMHYX|F#C~=I#{(H#dDF;D;+Hs{JoyP^xrg*a5#oz?108ISF-};FX&`*p`h8p&2&{@N{PJ$`-1jY-tOc#j z$)=(RbFybqG;p#RC>lE1izw_)_Okf&`xMU-JVZI!G8EBH_O`O;S_db_Sh1#|RtMRg zbpoCYGuRRg-49fAI-us{05iBs4GM^bMI!@@GzcaIqhV5P3yM%D&xCrVoWG$!*bPO2 zu!}G!!{R+C>`sm#fUqdt(~ht>L`itm!Lzv9QR7S!9=6y+d=d^dc{9d@cRZk!g!rTz zGC{&ESsvvc4}mvYH?%>F|@A z_;`aK UTF-8 1.8 - 3.8.5 + 3.8.6 8 8 8