diff options
author | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
---|---|---|
committer | Haoyi Li <haoyi@haoyi-mbp.corp.dropbox.com> | 2014-11-26 00:45:31 -0800 |
commit | 2c4b142503bd2d871e6818b5cab8c38627d9e4a0 (patch) | |
tree | 6ba33d2980a1a7a1286100202a695c6631bd240e /javalib-ex-test-suite/src/test | |
download | hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.tar.gz hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.tar.bz2 hands-on-scala-js-2c4b142503bd2d871e6818b5cab8c38627d9e4a0.zip |
Squashed 'examples/scala-js/' content from commit 47311ba
git-subtree-dir: examples/scala-js
git-subtree-split: 47311ba693f949f204f27ea9475bb63425fbd4f3
Diffstat (limited to 'javalib-ex-test-suite/src/test')
2 files changed, 474 insertions, 0 deletions
diff --git a/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/DataInputStreamTest.scala b/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/DataInputStreamTest.scala new file mode 100644 index 0000000..61ec560 --- /dev/null +++ b/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/DataInputStreamTest.scala @@ -0,0 +1,338 @@ +package scala.scalajs.testsuite.javalibex + +import java.io._ + +import org.scalajs.jasminetest.JasmineTest + +import scala.scalajs.js.typedarray._ +import scala.scalajs.js.JSConverters._ + +object DataInputStreamTest extends JasmineTest { + + def tests(name: String)(inFromBytes: Seq[Byte] => InputStream) { + def newStream(data: Int*) = + new DataInputStream(inFromBytes(data.map(_.toByte))) + + when("typedarray"). + describe(name) { + + it("should provide `readBoolean`") { + val data = Seq(0x00, 0x01, 0xF1, 0x00, 0x01) + val stream = newStream(data: _*) + + for (d <- data) + expect(stream.readBoolean()).toBe(d != 0) + + expect(() => stream.readBoolean()).toThrow // EOF + } + + it("should provide `readByte`") { + val data = Seq(0x00, 0x01, 0xF1, 0x7D, 0x35) + val stream = newStream(data: _*) + + for (d <- data) + expect(stream.readByte()).toBe(d.toByte) + + expect(() => stream.readBoolean()).toThrow // EOF + } + + it("should provide `readChar`") { + val stream = newStream( + 0x00, 0x48, // H + 0x00, 0xF6, // ö + 0x00, 0x6C, // l + 0x00, 0x6C, // l + 0x00, 0xF6, // ö + 0x00, 0x20, // [space] + 0x00, 0x57, // W + 0x01, 0x03, // ă + 0x00, 0x72, // r + 0x02, 0x34, // ȴ + 0x01, 0x11, // đ + 0x56 // dangling + ) + var res = "" + + for (i <- 1 to 11) + res += stream.readChar() + + expect(res).toEqual("Höllö Wărȴđ") + + expect(() => stream.readChar()).toThrow // Dangling + EOF + } + + it("should provide `readDouble`") { + val stream = newStream( + 0x3f, 0xe6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, + 0x41, 0x15, 0x19, 0x20, 0x45, 0x8d, 0x9b, 0x5f, + 0xc0, 0xab, 0x20, 0x22, 0x75, 0x25, 0x46, 0x0b, + 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x1c, 0x0d, 0xca, 0x65, 0xea, 0x3f, 0xa4, + 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01 // dangling + ) + + expect(stream.readDouble()).toBe(0.7) + expect(stream.readDouble()).toBe(345672.067923) + expect(stream.readDouble()).toBe(-3472.0673) + expect(stream.readDouble().isNaN).toBe(true) + expect(stream.readDouble()).toBe(Double.PositiveInfinity) + expect(stream.readDouble()).toBe(-7.0134674) + expect(stream.readDouble()).toBe(Double.NegativeInfinity) + expect(stream.readDouble()).toBe(0) + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readFloat`") { + val stream = newStream( + 0xbf, 0x80, 0x00, 0x00, + 0x45, 0x8e, 0x9c, 0x83, + 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xc0, 0x00, 0x00, + 0x7f, 0x80, 0x00, 0x00, + 0xbb, 0x03, 0x12, 0x6f, + 0xff, 0x80, 0x00, 0x00, + 0xff // dangling + ) + + expect(stream.readFloat()).toBeCloseTo(-1.0f, 6) + expect(stream.readFloat()).toBeCloseTo(4563.564f, 6) + expect(stream.readFloat()).toBeCloseTo(-0.0f, 6) + expect(stream.readFloat()).toBeCloseTo(0.0f, 6) + expect(stream.readFloat().isNaN).toBe(true) + expect(stream.readFloat()).toBe(Float.PositiveInfinity) + expect(stream.readFloat()).toBeCloseTo(-0.002f, 6) + expect(stream.readFloat()).toBe(Float.NegativeInfinity) + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readInt`") { + val stream = newStream( + 0x00, 0x00, 0x00, 0x00, + 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xfc, + 0x00, 0x00, 0x00, 0x53, + 0x00, 0x00, 0x89, 0xa2, + 0xff, 0xfe, 0x82, 0xfd, + 0x80, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01) + + expect(stream.readInt()).toBe(0) + expect(stream.readInt()).toBe(Int.MaxValue) + expect(stream.readInt()).toBe(-4) + expect(stream.readInt()).toBe(83) + expect(stream.readInt()).toBe(35234) + expect(stream.readInt()).toBe(-97539) + expect(stream.readInt()).toBe(Int.MinValue) + expect(stream.readInt()).toBe(1) + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readLong`") { + val stream = newStream( + 0x00, 0x01, 0xf0, 0xec, 0x59, 0x0c, 0x70, 0x9a, + 0xff, 0xff, 0xff, 0xff, 0xfe, 0x10, 0xd5, 0x5e, + 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x79, 0x24, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f) + + expect(stream.readLong() == 546372873646234L).toBeTruthy + expect(stream.readLong() == -32451234L).toBeTruthy + expect(stream.readLong() == Long.MaxValue).toBeTruthy + expect(stream.readLong() == 0L).toBeTruthy + expect(stream.readLong() == -1L).toBeTruthy + expect(stream.readLong() == Long.MinValue).toBeTruthy + expect(stream.readLong() == -34524L).toBeTruthy + expect(stream.readLong() == 47L).toBeTruthy + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readShort`") { + val stream = newStream( + 0x01, 0xc5, + 0xff, 0xd5, + 0x7f, 0xff, + 0x18, 0xb0, + 0x00, 0x00, + 0x80, 0x00, + 0xfe, 0xa6, + 0x00, 0x22, + 0x01 // dangling + ) + + expect(stream.readShort()).toBe(453) + expect(stream.readShort()).toBe(-43) + expect(stream.readShort()).toBe(Short.MaxValue) + expect(stream.readShort()).toBe(6320) + expect(stream.readShort()).toBe(0) + expect(stream.readShort()).toBe(Short.MinValue) + expect(stream.readShort()).toBe(-346) + expect(stream.readShort()).toBe(34) + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readUnsignedByte`") { + val data = Seq(0x00, 0x01, 0xF1, 0x7D, 0x35) + val stream = newStream(data: _*) + + for (d <- data) + expect(stream.readUnsignedByte()).toBe(d) + + expect(() => stream.readBoolean()).toThrow // EOF + } + + it("should provide `readUnsignedShort`") { + val stream = newStream( + 0xfe, 0x4c, + 0x00, 0x00, + 0x18, 0xee, + 0x0d, 0xed, + 0x00, 0x2b, + 0x01, 0xce, + 0x01, 0x56, + 0x64, 0x2b, + 0x01 // dangling + ) + + expect(stream.readUnsignedShort()).toBe(65100) + expect(stream.readUnsignedShort()).toBe(0) + expect(stream.readUnsignedShort()).toBe(6382) + expect(stream.readUnsignedShort()).toBe(3565) + expect(stream.readUnsignedShort()).toBe(43) + expect(stream.readUnsignedShort()).toBe(462) + expect(stream.readUnsignedShort()).toBe(342) + expect(stream.readUnsignedShort()).toBe(25643) + expect(() => stream.readDouble()).toThrow + } + + it("should provide `readFully` (1 arg & 3 arg)") { + val stream = newStream(-100 to 99: _*) + val buf = new Array[Byte](50) + + stream.readFully(buf) + expect(buf.toJSArray).toEqual((-100 to -51).toJSArray) + + expect(() => stream.readFully(null)).toThrow + + stream.readFully(buf, 40, 10) + expect(buf.toJSArray).toEqual(((-100 to -61) ++ (-50 to -41)).toJSArray) + + expect(() => stream.readFully(buf, 70, 1)).toThrow + expect(() => stream.readFully(buf, 10, 100)).toThrow + expect(() => stream.readFully(buf, -1, 2)).toThrow + expect(() => stream.readFully(buf, 0, -1)).toThrow + + stream.readFully(buf, 0, 50) + expect(buf.toJSArray).toEqual((-40 to 9).toJSArray) + + stream.readFully(buf, 0, 50) + expect(buf.toJSArray).toEqual((10 to 59).toJSArray) + + expect(() => stream.readFully(buf)).toThrow + } + + it("should provide `readFully` for bursty streams") { + class BurstyStream(length: Int, burst: Int) extends InputStream { + private var i: Int = 0 + def read(): Int = if (i < length) { i += 1; i } else -1 + override def read(buf: Array[Byte], off: Int, reqLen: Int): Int = { + val len = Math.min(Math.min(reqLen, burst), length - i) + if (reqLen == 0) 0 + else if (len == 0) -1 + else { + var j: Int = 0 + while (j < len) { + buf(off+j) = read().toByte + j += 1 + } + len + } + } + } + + val stream = new DataInputStream(new BurstyStream(100, 5)) + val buf = new Array[Byte](50) + + stream.readFully(buf) + expect(buf.toJSArray).toEqual((1 to 50).toJSArray) + + stream.readFully(buf, 40, 10) + expect(buf.toJSArray).toEqual(((1 to 40) ++ (51 to 60)).toJSArray) + + expect(() => stream.readFully(buf)).toThrow + } + + it("should provide `readUTF`") { + val stream = newStream( + 0x00, 0x10, 0x48, 0xc3, 0xb6, 0x6c, 0x6c, 0xc3, + 0xb6, 0x20, 0x57, 0xc4, 0x83, 0x72, 0xc8, 0xb4, + 0xc4, 0x91, 0x00, 0x0d, 0x70, 0x6f, 0x6f, 0x20, + 0x2d, 0x3e, 0x20, 0xed, 0xa0, 0xbd, 0xed, 0xb2, + 0xa9, 0x00, 0x03, 0xe6, 0x84, 0x9b) + + expect(stream.readUTF).toEqual("Höllö Wărȴđ") + expect(stream.readUTF).toEqual("poo -> 💩") + expect(stream.readUTF).toEqual("愛") + + val badStream = newStream(0x00, 0x01, 0xC0, 0x82) + expect(() => badStream.readUTF).toThrow + } + + it("should provide `readLine`") { + val stream = newStream( + "Hello World\nUNIX\nWindows\r\nMac (old)\rStuff".map(_.toInt): _*) + + expect(stream.readLine()).toEqual("Hello World") + expect(stream.readLine()).toEqual("UNIX") + expect(stream.readLine()).toEqual("Windows") + expect(stream.readLine()).toEqual("Mac (old)") + expect(stream.readLine()).toEqual("Stuff") + expect(stream.readLine()).toBe(null) + } + + it("should allow marking even when `readLine` has to push back") { + val stream = newStream( + "Hello World\nUNIX\nWindows\r\nMac (old)\rStuff".map(_.toInt): _*) + + expect(stream.readLine()).toEqual("Hello World") + stream.mark(1000) + expect(stream.readLine()).toEqual("UNIX") + stream.reset() + expect(stream.readLine()).toEqual("UNIX") + expect(stream.readLine()).toEqual("Windows") + expect(stream.readLine()).toEqual("Mac (old)") + stream.mark(1000) + expect(stream.readLine()).toEqual("Stuff") + stream.reset() + expect(stream.readLine()).toEqual("Stuff") + expect(stream.readLine()).toBe(null) + } + + } + + } + + tests("java.io.DataInputStream - generic case")(bytes => + new ByteArrayInputStream(bytes.toArray)) + + tests("java.io.DataInputStream - ArrayBufferInputStream case")(bytes => + new ArrayBufferInputStream(new Int8Array(bytes.toJSArray).buffer)) + + tests("java.io.DataInputStream - partially consumed ArrayBufferInputStream case") { bytes => + val addBytes = Seq[Byte](0, 0, 0, 0) + val allBytes = addBytes ++ bytes + val in = new ArrayBufferInputStream( + new Int8Array(allBytes.toJSArray).buffer) + + for (_ <- addBytes) in.read() + + in + } + +} diff --git a/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/ZipInputStreamTest.scala b/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/ZipInputStreamTest.scala new file mode 100644 index 0000000..b2a2fe2 --- /dev/null +++ b/javalib-ex-test-suite/src/test/scala/scala/scalajs/testsuite/javalibex/ZipInputStreamTest.scala @@ -0,0 +1,136 @@ +package scala.scalajs.testsuite.javalibex + +import org.scalajs.jasminetest.JasmineTest + +import java.io._ +import java.util.zip._ + +object ZipInputStreamTest extends JasmineTest { + + when("typedarray"). + describe("java.util.zip.ZipInputStream") { + + it("should read zip archives") { + val in = new ZipInputStream(new ByteArrayInputStream(binZip)) + + def expectBinEntry(name: String, data: Seq[Int]): Unit = { + val e = in.getNextEntry() + expect(e.getName()).toEqual(name) + + for (d <- data) + expect(in.read()).toBe(d) + + expect(in.read()).toBe(-1) + } + + def expectStrEntry(name: String, content: String): Unit = { + val e = in.getNextEntry() + expect(e.getName()).toEqual(name) + + val r = new InputStreamReader(in) + + for (c <- content) + expect(r.read().toChar).toBe(c) + + expect(r.read()).toBe(-1) + } + + expectBinEntry("greetings/", Seq()) + expectStrEntry("greetings/en.txt", "Hello World, how are you doing?\n") + expectStrEntry("greetings/es.txt", "¿Hola mundo, cómo estás?\n") + expectStrEntry("greetings/fr.txt", "Bonjour, comment ça va?\n") + expectStrEntry("greetings/ja.txt", "こんにちは、お元気ですか。\n") + expectBinEntry("binary/", Seq()) + expectBinEntry("binary/bytes_0_to_50.bin", 0 to 50) + + expect(in.getNextEntry() == null).toBeTruthy + in.close() + } + + } + + /** A zip archive for testing: + * + * $ zipinfo test.zip + * Archive: test.zip 1304 bytes 7 files + * drwxr-xr-x 3.0 unx 0 bx stor 13-Aug-14 07:42 greetings/ + * -rw-r--r-- 3.0 unx 32 tx stor 13-Aug-14 07:40 greetings/en.txt + * -rw-r--r-- 3.0 unx 28 tx stor 13-Aug-14 07:42 greetings/es.txt + * -rw-r--r-- 3.0 unx 25 tx stor 13-Aug-14 07:41 greetings/fr.txt + * -rw-r--r-- 3.0 unx 40 tx stor 13-Aug-14 07:40 greetings/ja.txt + * drwxr-xr-x 3.0 unx 0 bx stor 13-Aug-14 07:48 binary/ + * -rw-r--r-- 3.0 unx 51 bx stor 13-Aug-14 07:48 binary/bytes_0_to_50.bin + * 7 files, 176 bytes uncompressed, 176 bytes compressed: 0.0% + */ + val binZip = Array[Byte](80, 75, 3, 4, 10, 0, 0, 0, 0, 0, 89, 61, 13, 69, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 28, 0, 103, 114, 101, 101, 116, + 105, 110, 103, 115, 47, 85, 84, 9, 0, 3, -39, -6, -22, 83, -44, -4, -22, + 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 80, 75, 3, 4, 10, + 0, 2, 0, 0, 0, 13, 61, 13, 69, -125, -110, -96, -74, 32, 0, 0, 0, 32, 0, + 0, 0, 16, 0, 28, 0, 103, 114, 101, 101, 116, 105, 110, 103, 115, 47, 101, + 110, 46, 116, 120, 116, 85, 84, 9, 0, 3, 73, -6, -22, 83, -108, -4, -22, + 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 72, 101, 108, 108, + 111, 32, 87, 111, 114, 108, 100, 44, 32, 104, 111, 119, 32, 97, 114, 101, + 32, 121, 111, 117, 32, 100, 111, 105, 110, 103, 63, 10, 80, 75, 3, 4, 10, + 0, 2, 0, 0, 0, 89, 61, 13, 69, -27, 99, -56, -20, 28, 0, 0, 0, 28, 0, 0, + 0, 16, 0, 28, 0, 103, 114, 101, 101, 116, 105, 110, 103, 115, 47, 101, + 115, 46, 116, 120, 116, 85, 84, 9, 0, 3, -39, -6, -22, 83, -108, -4, -22, + 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, -62, -65, 72, 111, + 108, 97, 32, 109, 117, 110, 100, 111, 44, 32, 99, -61, -77, 109, 111, 32, + 101, 115, 116, -61, -95, 115, 63, 10, 80, 75, 3, 4, 10, 0, 2, 0, 0, 0, 42, + 61, 13, 69, -2, -58, -42, 30, 25, 0, 0, 0, 25, 0, 0, 0, 16, 0, 28, 0, 103, + 114, 101, 101, 116, 105, 110, 103, 115, 47, 102, 114, 46, 116, 120, 116, + 85, 84, 9, 0, 3, -128, -6, -22, 83, -108, -4, -22, 83, 117, 120, 11, 0, 1, + 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 66, 111, 110, 106, 111, 117, 114, 44, 32, + 99, 111, 109, 109, 101, 110, 116, 32, -61, -89, 97, 32, 118, 97, 63, 10, + 80, 75, 3, 4, 10, 0, 2, 0, 0, 0, 24, 61, 13, 69, -26, -5, 76, 91, 40, 0, + 0, 0, 40, 0, 0, 0, 16, 0, 28, 0, 103, 114, 101, 101, 116, 105, 110, 103, + 115, 47, 106, 97, 46, 116, 120, 116, 85, 84, 9, 0, 3, 96, -6, -22, 83, + -108, -4, -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, + -29, -127, -109, -29, -126, -109, -29, -127, -85, -29, -127, -95, -29, + -127, -81, -29, -128, -127, -29, -127, -118, -27, -123, -125, -26, -80, + -105, -29, -127, -89, -29, -127, -103, -29, -127, -117, -29, -128, -126, + 10, 80, 75, 3, 4, 10, 0, 0, 0, 0, 0, 6, 62, 13, 69, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 28, 0, 98, 105, 110, 97, 114, 121, 47, 85, 84, 9, 0, + 3, 28, -4, -22, 83, -44, -4, -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, + 4, 0, 0, 0, 0, 80, 75, 3, 4, 10, 0, 2, 0, 0, 0, 3, 62, 13, 69, -7, 93, 98, + 55, 51, 0, 0, 0, 51, 0, 0, 0, 24, 0, 28, 0, 98, 105, 110, 97, 114, 121, + 47, 98, 121, 116, 101, 115, 95, 48, 95, 116, 111, 95, 53, 48, 46, 98, 105, + 110, 85, 84, 9, 0, 3, 22, -4, -22, 83, -108, -4, -22, 83, 117, 120, 11, 0, + 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 80, 75, 1, 2, 30, 3, 10, 0, 0, 0, 0, 0, 89, 61, 13, 69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 24, 0, 0, 0, 0, 0, 0, 0, 16, 0, -19, + 65, 0, 0, 0, 0, 103, 114, 101, 101, 116, 105, 110, 103, 115, 47, 85, 84, + 5, 0, 3, -39, -6, -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, + 0, 80, 75, 1, 2, 30, 3, 10, 0, 2, 0, 0, 0, 13, 61, 13, 69, -125, -110, + -96, -74, 32, 0, 0, 0, 32, 0, 0, 0, 16, 0, 24, 0, 0, 0, 0, 0, 1, 0, 0, 0, + -92, -127, 68, 0, 0, 0, 103, 114, 101, 101, 116, 105, 110, 103, 115, 47, + 101, 110, 46, 116, 120, 116, 85, 84, 5, 0, 3, 73, -6, -22, 83, 117, 120, + 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 80, 75, 1, 2, 30, 3, 10, 0, 2, 0, + 0, 0, 89, 61, 13, 69, -27, 99, -56, -20, 28, 0, 0, 0, 28, 0, 0, 0, 16, 0, + 24, 0, 0, 0, 0, 0, 1, 0, 0, 0, -92, -127, -82, 0, 0, 0, 103, 114, 101, + 101, 116, 105, 110, 103, 115, 47, 101, 115, 46, 116, 120, 116, 85, 84, 5, + 0, 3, -39, -6, -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, + 80, 75, 1, 2, 30, 3, 10, 0, 2, 0, 0, 0, 42, 61, 13, 69, -2, -58, -42, 30, + 25, 0, 0, 0, 25, 0, 0, 0, 16, 0, 24, 0, 0, 0, 0, 0, 1, 0, 0, 0, -92, -127, + 20, 1, 0, 0, 103, 114, 101, 101, 116, 105, 110, 103, 115, 47, 102, 114, + 46, 116, 120, 116, 85, 84, 5, 0, 3, -128, -6, -22, 83, 117, 120, 11, 0, 1, + 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 80, 75, 1, 2, 30, 3, 10, 0, 2, 0, 0, 0, 24, + 61, 13, 69, -26, -5, 76, 91, 40, 0, 0, 0, 40, 0, 0, 0, 16, 0, 24, 0, 0, 0, + 0, 0, 1, 0, 0, 0, -92, -127, 119, 1, 0, 0, 103, 114, 101, 101, 116, 105, + 110, 103, 115, 47, 106, 97, 46, 116, 120, 116, 85, 84, 5, 0, 3, 96, -6, + -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 80, 75, 1, 2, + 30, 3, 10, 0, 0, 0, 0, 0, 6, 62, 13, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7, 0, 24, 0, 0, 0, 0, 0, 0, 0, 16, 0, -19, 65, -23, 1, 0, 0, 98, 105, + 110, 97, 114, 121, 47, 85, 84, 5, 0, 3, 28, -4, -22, 83, 117, 120, 11, 0, + 1, 4, -4, 1, 0, 0, 4, 0, 0, 0, 0, 80, 75, 1, 2, 30, 3, 10, 0, 2, 0, 0, 0, + 3, 62, 13, 69, -7, 93, 98, 55, 51, 0, 0, 0, 51, 0, 0, 0, 24, 0, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -92, -127, 42, 2, 0, 0, 98, 105, 110, 97, 114, 121, + 47, 98, 121, 116, 101, 115, 95, 48, 95, 116, 111, 95, 53, 48, 46, 98, 105, + 110, 85, 84, 5, 0, 3, 22, -4, -22, 83, 117, 120, 11, 0, 1, 4, -4, 1, 0, 0, + 4, 0, 0, 0, 0, 80, 75, 5, 6, 0, 0, 0, 0, 7, 0, 7, 0, 83, 2, 0, 0, -81, 2, + 0, 0, 0, 0) + +} |