geomerative 1.1.0-java → 2.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.mvn/extensions.xml +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +1 -1
  5. data/CHANGELOG.md +3 -0
  6. data/COPYING.md +1 -1
  7. data/README.md +0 -1
  8. data/Rakefile +2 -15
  9. data/docs/_includes/header.html +6 -6
  10. data/docs/_includes/icon-github.svg +3 -1
  11. data/docs/_includes/icon-twitter.svg +3 -1
  12. data/docs/_includes/navigation.html +18 -18
  13. data/docs/_sass/_base.scss +79 -79
  14. data/docs/_sass/_layout.scss +137 -137
  15. data/docs/_sass/_syntax-highlighting.scss +64 -64
  16. data/docs/index.html +18 -18
  17. data/examples/data/bot1.svg +1 -1
  18. data/examples/data/lion.svg +156 -156
  19. data/examples/data/ruby.svg +1 -1
  20. data/geomerative.gemspec +1 -2
  21. data/lib/geomerative/version.rb +1 -1
  22. data/mvnw +234 -0
  23. data/mvnw.cmd +145 -0
  24. data/pom.rb +14 -13
  25. data/pom.xml +14 -13
  26. data/src/geomerative/FastRClip.java +2149 -2156
  27. data/src/geomerative/RClip.java +2237 -2539
  28. data/src/geomerative/RClosest.java +33 -31
  29. data/src/geomerative/RCommand.java +1750 -1758
  30. data/src/geomerative/RContour.java +290 -292
  31. data/src/geomerative/RFont.java +277 -246
  32. data/src/geomerative/RG.java +722 -727
  33. data/src/geomerative/RGeomElem.java +967 -960
  34. data/src/geomerative/RGroup.java +508 -467
  35. data/src/geomerative/RMatrix.java +304 -289
  36. data/src/geomerative/RMesh.java +241 -229
  37. data/src/geomerative/RPath.java +924 -925
  38. data/src/geomerative/RPoint.java +391 -391
  39. data/src/geomerative/RPolygon.java +998 -988
  40. data/src/geomerative/RRectangle.java +43 -52
  41. data/src/geomerative/RSVG.java +480 -516
  42. data/src/geomerative/RShape.java +1767 -1777
  43. data/src/geomerative/RStrip.java +173 -176
  44. data/src/geomerative/RStyle.java +197 -194
  45. data/src/org/apache/batik/svggen/font/Font.java +141 -142
  46. data/src/org/apache/batik/svggen/font/Glyph.java +102 -71
  47. data/src/org/apache/batik/svggen/font/Point.java +12 -12
  48. data/src/org/apache/batik/svggen/font/RandomAccessFileEmulator.java +14 -12
  49. data/src/org/apache/batik/svggen/font/table/ClassDef.java +12 -12
  50. data/src/org/apache/batik/svggen/font/table/ClassDefFormat1.java +27 -24
  51. data/src/org/apache/batik/svggen/font/table/ClassDefFormat2.java +20 -17
  52. data/src/org/apache/batik/svggen/font/table/CmapFormat.java +43 -43
  53. data/src/org/apache/batik/svggen/font/table/CmapFormat0.java +33 -26
  54. data/src/org/apache/batik/svggen/font/table/CmapFormat2.java +25 -20
  55. data/src/org/apache/batik/svggen/font/table/CmapFormat4.java +106 -96
  56. data/src/org/apache/batik/svggen/font/table/CmapFormat6.java +36 -32
  57. data/src/org/apache/batik/svggen/font/table/CmapIndexEntry.java +69 -49
  58. data/src/org/apache/batik/svggen/font/table/CmapTable.java +50 -50
  59. data/src/org/apache/batik/svggen/font/table/Coverage.java +19 -19
  60. data/src/org/apache/batik/svggen/font/table/CoverageFormat1.java +30 -27
  61. data/src/org/apache/batik/svggen/font/table/CoverageFormat2.java +26 -24
  62. data/src/org/apache/batik/svggen/font/table/CvtTable.java +16 -16
  63. data/src/org/apache/batik/svggen/font/table/Device.java +32 -32
  64. data/src/org/apache/batik/svggen/font/table/DirectoryEntry.java +39 -39
  65. data/src/org/apache/batik/svggen/font/table/Feature.java +26 -23
  66. data/src/org/apache/batik/svggen/font/table/FeatureList.java +37 -35
  67. data/src/org/apache/batik/svggen/font/table/FeatureRecord.java +22 -22
  68. data/src/org/apache/batik/svggen/font/table/FeatureTags.java +4 -3
  69. data/src/org/apache/batik/svggen/font/table/FpgmTable.java +9 -9
  70. data/src/org/apache/batik/svggen/font/table/GlyfCompositeComp.java +134 -132
  71. data/src/org/apache/batik/svggen/font/table/GlyfCompositeDescript.java +123 -122
  72. data/src/org/apache/batik/svggen/font/table/GlyfDescript.java +44 -44
  73. data/src/org/apache/batik/svggen/font/table/GlyfSimpleDescript.java +110 -109
  74. data/src/org/apache/batik/svggen/font/table/GlyfTable.java +46 -46
  75. data/src/org/apache/batik/svggen/font/table/GlyphDescription.java +25 -13
  76. data/src/org/apache/batik/svggen/font/table/GposTable.java +26 -23
  77. data/src/org/apache/batik/svggen/font/table/GsubTable.java +85 -82
  78. data/src/org/apache/batik/svggen/font/table/HeadTable.java +131 -131
  79. data/src/org/apache/batik/svggen/font/table/HheaTable.java +80 -80
  80. data/src/org/apache/batik/svggen/font/table/HmtxTable.java +50 -49
  81. data/src/org/apache/batik/svggen/font/table/KernSubtable.java +29 -27
  82. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat0.java +35 -32
  83. data/src/org/apache/batik/svggen/font/table/KernSubtableFormat2.java +28 -26
  84. data/src/org/apache/batik/svggen/font/table/KernTable.java +36 -31
  85. data/src/org/apache/batik/svggen/font/table/KerningPair.java +27 -23
  86. data/src/org/apache/batik/svggen/font/table/LangSys.java +28 -26
  87. data/src/org/apache/batik/svggen/font/table/LangSysRecord.java +22 -22
  88. data/src/org/apache/batik/svggen/font/table/Ligature.java +24 -24
  89. data/src/org/apache/batik/svggen/font/table/LigatureSet.java +24 -24
  90. data/src/org/apache/batik/svggen/font/table/LigatureSubst.java +9 -9
  91. data/src/org/apache/batik/svggen/font/table/LigatureSubstFormat1.java +30 -30
  92. data/src/org/apache/batik/svggen/font/table/LocaTable.java +37 -37
  93. data/src/org/apache/batik/svggen/font/table/Lookup.java +41 -40
  94. data/src/org/apache/batik/svggen/font/table/LookupList.java +34 -34
  95. data/src/org/apache/batik/svggen/font/table/LookupSubtableFactory.java +7 -5
  96. data/src/org/apache/batik/svggen/font/table/MaxpTable.java +96 -96
  97. data/src/org/apache/batik/svggen/font/table/NameRecord.java +64 -65
  98. data/src/org/apache/batik/svggen/font/table/NameTable.java +33 -33
  99. data/src/org/apache/batik/svggen/font/table/Os2Table.java +196 -196
  100. data/src/org/apache/batik/svggen/font/table/Panose.java +14 -12
  101. data/src/org/apache/batik/svggen/font/table/PostTable.java +338 -338
  102. data/src/org/apache/batik/svggen/font/table/PrepTable.java +9 -9
  103. data/src/org/apache/batik/svggen/font/table/Program.java +15 -15
  104. data/src/org/apache/batik/svggen/font/table/RangeRecord.java +26 -25
  105. data/src/org/apache/batik/svggen/font/table/Script.java +38 -38
  106. data/src/org/apache/batik/svggen/font/table/ScriptList.java +42 -42
  107. data/src/org/apache/batik/svggen/font/table/ScriptRecord.java +22 -22
  108. data/src/org/apache/batik/svggen/font/table/ScriptTags.java +2 -1
  109. data/src/org/apache/batik/svggen/font/table/SingleSubst.java +15 -16
  110. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat1.java +33 -33
  111. data/src/org/apache/batik/svggen/font/table/SingleSubstFormat2.java +32 -32
  112. data/src/org/apache/batik/svggen/font/table/Table.java +171 -170
  113. data/src/org/apache/batik/svggen/font/table/TableDirectory.java +55 -55
  114. data/src/org/apache/batik/svggen/font/table/TableFactory.java +92 -93
  115. metadata +10 -11
  116. data/.travis.yml +0 -9
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  *
@@ -27,24 +27,24 @@ import org.apache.batik.svggen.font.*;
27
27
  */
28
28
  public abstract class Coverage {
29
29
 
30
- public abstract int getFormat();
31
-
32
- /**
33
- * @param glyphId The ID of the glyph to find.
34
- * @return The index of the glyph within the coverage, or -1 if the glyph
35
- * can't be found.
36
- */
37
- public abstract int findGlyph(int glyphId);
38
-
39
- protected static Coverage read(RandomAccessFileEmulator raf) throws IOException {
40
- Coverage c = null;
41
- int format = raf.readUnsignedShort();
42
- if (format == 1) {
43
- c = new CoverageFormat1(raf);
44
- } else if (format == 2) {
45
- c = new CoverageFormat2(raf);
46
- }
47
- return c;
30
+ public abstract int getFormat();
31
+
32
+ /**
33
+ * @param glyphId The ID of the glyph to find.
34
+ * @return The index of the glyph within the coverage, or -1 if the glyph
35
+ * can't be found.
36
+ */
37
+ public abstract int findGlyph(int glyphId);
38
+
39
+ protected static Coverage read(RandomAccessFileEmulator raf) throws IOException {
40
+ Coverage c = null;
41
+ int format = raf.readUnsignedShort();
42
+ if (format == 1) {
43
+ c = new CoverageFormat1(raf);
44
+ } else if (format == 2) {
45
+ c = new CoverageFormat2(raf);
48
46
  }
47
+ return c;
48
+ }
49
49
 
50
50
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  *
@@ -27,33 +27,36 @@ import org.apache.batik.svggen.font.*;
27
27
  */
28
28
  public class CoverageFormat1 extends Coverage {
29
29
 
30
- private final int glyphCount;
31
- private final int[] glyphIds;
32
-
33
- /** Creates new CoverageFormat1
34
- * @param raf
35
- * @throws java.io.IOException */
36
- protected CoverageFormat1(RandomAccessFileEmulator raf) throws IOException {
37
- glyphCount = raf.readUnsignedShort();
38
- glyphIds = new int[glyphCount];
39
- for (int i = 0; i < glyphCount; i++) {
40
- glyphIds[i] = raf.readUnsignedShort();
41
- }
30
+ private final int glyphCount;
31
+ private final int[] glyphIds;
32
+
33
+ /**
34
+ * Creates new CoverageFormat1
35
+ *
36
+ * @param raf
37
+ * @throws java.io.IOException
38
+ */
39
+ protected CoverageFormat1(RandomAccessFileEmulator raf) throws IOException {
40
+ glyphCount = raf.readUnsignedShort();
41
+ glyphIds = new int[glyphCount];
42
+ for (int i = 0; i < glyphCount; i++) {
43
+ glyphIds[i] = raf.readUnsignedShort();
42
44
  }
43
-
44
- @Override
45
- public int getFormat() {
46
- return 1;
47
- }
48
-
49
- @Override
50
- public int findGlyph(int glyphId) {
51
- for (int i = 0; i < glyphCount; i++) {
52
- if (glyphIds[i] == glyphId) {
53
- return i;
54
- }
55
- }
56
- return -1;
45
+ }
46
+
47
+ @Override
48
+ public int getFormat() {
49
+ return 1;
50
+ }
51
+
52
+ @Override
53
+ public int findGlyph(int glyphId) {
54
+ for (int i = 0; i < glyphCount; i++) {
55
+ if (glyphIds[i] == glyphId) {
56
+ return i;
57
+ }
57
58
  }
59
+ return -1;
60
+ }
58
61
 
59
62
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  *
@@ -27,30 +27,32 @@ import org.apache.batik.svggen.font.*;
27
27
  */
28
28
  public class CoverageFormat2 extends Coverage {
29
29
 
30
- private int rangeCount;
31
- private RangeRecord[] rangeRecords;
32
-
33
- /** Creates new CoverageFormat2 */
34
- protected CoverageFormat2(RandomAccessFileEmulator raf) throws IOException {
35
- rangeCount = raf.readUnsignedShort();
36
- rangeRecords = new RangeRecord[rangeCount];
37
- for (int i = 0; i < rangeCount; i++) {
38
- rangeRecords[i] = new RangeRecord(raf);
39
- }
40
- }
41
-
42
- public int getFormat() {
43
- return 2;
30
+ private int rangeCount;
31
+ private RangeRecord[] rangeRecords;
32
+
33
+ /**
34
+ * Creates new CoverageFormat2
35
+ */
36
+ protected CoverageFormat2(RandomAccessFileEmulator raf) throws IOException {
37
+ rangeCount = raf.readUnsignedShort();
38
+ rangeRecords = new RangeRecord[rangeCount];
39
+ for (int i = 0; i < rangeCount; i++) {
40
+ rangeRecords[i] = new RangeRecord(raf);
44
41
  }
45
-
46
- public int findGlyph(int glyphId) {
47
- for (int i = 0; i < rangeCount; i++) {
48
- int n = rangeRecords[i].getCoverageIndex(glyphId);
49
- if (n > -1) {
50
- return n;
51
- }
52
- }
53
- return -1;
42
+ }
43
+
44
+ public int getFormat() {
45
+ return 2;
46
+ }
47
+
48
+ public int findGlyph(int glyphId) {
49
+ for (int i = 0; i < rangeCount; i++) {
50
+ int n = rangeRecords[i].getCoverageIndex(glyphId);
51
+ if (n > -1) {
52
+ return n;
53
+ }
54
54
  }
55
+ return -1;
56
+ }
55
57
 
56
58
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: CvtTable.java,v 1.4 2004/08/18 07:15:20 vhardy Exp $
@@ -26,23 +26,23 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class CvtTable implements Table {
28
28
 
29
- private final short[] values;
29
+ private final short[] values;
30
30
 
31
- protected CvtTable(DirectoryEntry de,RandomAccessFileEmulator raf) throws IOException {
32
- raf.seek(de.getOffset());
33
- int len = de.getLength() / 2;
34
- values = new short[len];
35
- for (int i = 0; i < len; i++) {
36
- values[i] = raf.readShort();
37
- }
31
+ protected CvtTable(DirectoryEntry de, RandomAccessFileEmulator raf) throws IOException {
32
+ raf.seek(de.getOffset());
33
+ int len = de.getLength() / 2;
34
+ values = new short[len];
35
+ for (int i = 0; i < len; i++) {
36
+ values[i] = raf.readShort();
38
37
  }
38
+ }
39
39
 
40
- @Override
41
- public int getType() {
42
- return cvt;
43
- }
40
+ @Override
41
+ public int getType() {
42
+ return CVT;
43
+ }
44
44
 
45
- public short[] getValues() {
46
- return values;
47
- }
45
+ public short[] getValues() {
46
+ return values;
47
+ }
48
48
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  *
@@ -27,37 +27,37 @@ import org.apache.batik.svggen.font.*;
27
27
  */
28
28
  public class Device extends Object {
29
29
 
30
- private int startSize;
31
- private int endSize;
32
- private int deltaFormat;
33
- private final int[] deltaValues;
34
-
35
- /**
36
- * Creates new Device
37
- *
38
- * @param raf
39
- * @throws java.io.IOException
40
- */
41
- public Device(RandomAccessFileEmulator raf) throws IOException {
42
- startSize = raf.readUnsignedShort();
43
- endSize = raf.readUnsignedShort();
44
- deltaFormat = raf.readUnsignedShort();
45
- int size = startSize - endSize;
46
- switch (deltaFormat) {
47
- case 1:
48
- size = (size % 8 == 0) ? size / 8 : size / 8 + 1;
49
- break;
50
- case 2:
51
- size = (size % 4 == 0) ? size / 4 : size / 4 + 1;
52
- break;
53
- case 3:
54
- size = (size % 2 == 0) ? size / 2 : size / 2 + 1;
55
- break;
56
- }
57
- deltaValues = new int[size];
58
- for (int i = 0; i < size; i++) {
59
- deltaValues[i] = raf.readUnsignedShort();
60
- }
30
+ private int startSize;
31
+ private int endSize;
32
+ private int deltaFormat;
33
+ private final int[] deltaValues;
34
+
35
+ /**
36
+ * Creates new Device
37
+ *
38
+ * @param raf
39
+ * @throws java.io.IOException
40
+ */
41
+ public Device(RandomAccessFileEmulator raf) throws IOException {
42
+ startSize = raf.readUnsignedShort();
43
+ endSize = raf.readUnsignedShort();
44
+ deltaFormat = raf.readUnsignedShort();
45
+ int size = startSize - endSize;
46
+ switch (deltaFormat) {
47
+ case 1:
48
+ size = (size % 8 == 0) ? size / 8 : size / 8 + 1;
49
+ break;
50
+ case 2:
51
+ size = (size % 4 == 0) ? size / 4 : size / 4 + 1;
52
+ break;
53
+ case 3:
54
+ size = (size % 2 == 0) ? size / 2 : size / 2 + 1;
55
+ break;
61
56
  }
57
+ deltaValues = new int[size];
58
+ for (int i = 0; i < size; i++) {
59
+ deltaValues[i] = raf.readUnsignedShort();
60
+ }
61
+ }
62
62
 
63
63
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  * @version $Id: DirectoryEntry.java,v 1.3 2004/08/18 07:15:20 vhardy Exp $
@@ -26,48 +26,48 @@ import org.apache.batik.svggen.font.*;
26
26
  */
27
27
  public class DirectoryEntry {
28
28
 
29
- private final int tag;
30
- private final int checksum;
31
- private final int offset;
32
- private final int length;
33
- private final Table table = null;
29
+ private final int tag;
30
+ private final int checksum;
31
+ private final int offset;
32
+ private final int length;
33
+ private final Table table = null;
34
34
 
35
- protected DirectoryEntry(RandomAccessFileEmulator raf) throws IOException {
36
- tag = raf.readInt();
37
- checksum = raf.readInt();
38
- offset = raf.readInt();
39
- length = raf.readInt();
40
- }
35
+ protected DirectoryEntry(RandomAccessFileEmulator raf) throws IOException {
36
+ tag = raf.readInt();
37
+ checksum = raf.readInt();
38
+ offset = raf.readInt();
39
+ length = raf.readInt();
40
+ }
41
41
 
42
- public int getChecksum() {
43
- return checksum;
44
- }
42
+ public int getChecksum() {
43
+ return checksum;
44
+ }
45
45
 
46
- public int getLength() {
47
- return length;
48
- }
46
+ public int getLength() {
47
+ return length;
48
+ }
49
49
 
50
- public int getOffset() {
51
- return offset;
52
- }
50
+ public int getOffset() {
51
+ return offset;
52
+ }
53
53
 
54
- public int getTag() {
55
- return tag;
56
- }
54
+ public int getTag() {
55
+ return tag;
56
+ }
57
57
 
58
- @Override
59
- public String toString() {
60
- return new StringBuilder()
61
- .append((char)((tag>>24)&0xff))
62
- .append((char)((tag>>16)&0xff))
63
- .append((char)((tag>>8)&0xff))
64
- .append((char)((tag)&0xff))
65
- .append(", offset: ")
66
- .append(offset)
67
- .append(", length: ")
68
- .append(length)
69
- .append(", checksum: 0x")
70
- .append(Integer.toHexString(checksum))
71
- .toString();
72
- }
58
+ @Override
59
+ public String toString() {
60
+ return new StringBuilder()
61
+ .append((char) ((tag >> 24) & 0xff))
62
+ .append((char) ((tag >> 16) & 0xff))
63
+ .append((char) ((tag >> 8) & 0xff))
64
+ .append((char) ((tag) & 0xff))
65
+ .append(", offset: ")
66
+ .append(offset)
67
+ .append(", length: ")
68
+ .append(length)
69
+ .append(", checksum: 0x")
70
+ .append(Integer.toHexString(checksum))
71
+ .toString();
72
+ }
73
73
  }
@@ -18,7 +18,7 @@
18
18
  package org.apache.batik.svggen.font.table;
19
19
 
20
20
  import java.io.IOException;
21
- import org.apache.batik.svggen.font.*;
21
+ import org.apache.batik.svggen.font.RandomAccessFileEmulator;
22
22
 
23
23
  /**
24
24
  *
@@ -27,30 +27,33 @@ import org.apache.batik.svggen.font.*;
27
27
  */
28
28
  public class Feature {
29
29
 
30
- private final int featureParams;
31
- private final int lookupCount;
32
- private final int[] lookupListIndex;
33
-
34
- /** Creates new Feature
35
- * @param raf
36
- * @param offset
37
- * @throws java.io.IOException */
38
- protected Feature(RandomAccessFileEmulator raf, int offset) throws IOException {
39
- raf.seek(offset);
40
- featureParams = raf.readUnsignedShort();
41
- lookupCount = raf.readUnsignedShort();
42
- lookupListIndex = new int[lookupCount];
43
- for (int i = 0; i < lookupCount; i++) {
44
- lookupListIndex[i] = raf.readUnsignedShort();
45
- }
30
+ private final int featureParams;
31
+ private final int lookupCount;
32
+ private final int[] lookupListIndex;
33
+
34
+ /**
35
+ * Creates new Feature
36
+ *
37
+ * @param raf
38
+ * @param offset
39
+ * @throws java.io.IOException
40
+ */
41
+ protected Feature(RandomAccessFileEmulator raf, int offset) throws IOException {
42
+ raf.seek(offset);
43
+ featureParams = raf.readUnsignedShort();
44
+ lookupCount = raf.readUnsignedShort();
45
+ lookupListIndex = new int[lookupCount];
46
+ for (int i = 0; i < lookupCount; i++) {
47
+ lookupListIndex[i] = raf.readUnsignedShort();
46
48
  }
49
+ }
47
50
 
48
- public int getLookupCount() {
49
- return lookupCount;
50
- }
51
+ public int getLookupCount() {
52
+ return lookupCount;
53
+ }
51
54
 
52
- public int getLookupListIndex(int i) {
53
- return lookupListIndex[i];
54
- }
55
+ public int getLookupListIndex(int i) {
56
+ return lookupListIndex[i];
57
+ }
55
58
 
56
59
  }