@chr33s/pdf-restructure 5.0.0 โ†’ 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chr33s/pdf-restructure",
3
- "version": "5.0.0",
3
+ "version": "5.0.1",
4
4
  "description": "Declaratively encode and decode binary data",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1,95 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { Array as ArrayT, DecodeStream, Pointer, uint16, uint8 } from "../src/index.js";
3
-
4
- describe("Array", () => {
5
- describe("decode", () => {
6
- test("should decode fixed length", () => {
7
- const array = new ArrayT(uint8, 4);
8
- expect(array.fromBuffer(new Uint8Array([1, 2, 3, 4, 5]))).to.deep.equal([1, 2, 3, 4]);
9
- });
10
-
11
- test("should decode fixed amount of bytes", () => {
12
- const array = new ArrayT(uint16, 4, "bytes");
13
- expect(array.fromBuffer(new Uint8Array([1, 2, 3, 4, 5]))).to.deep.equal([258, 772]);
14
- });
15
-
16
- test("should decode length from parent key", () => {
17
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
18
- const array = new ArrayT(uint8, "len");
19
- expect(array.decode(stream, { len: 4 })).to.deep.equal([1, 2, 3, 4]);
20
- });
21
-
22
- test("should decode amount of bytes from parent key", () => {
23
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
24
- const array = new ArrayT(uint16, "len", "bytes");
25
- expect(array.decode(stream, { len: 4 })).to.deep.equal([258, 772]);
26
- });
27
-
28
- test("should decode length as number before array", () => {
29
- const array = new ArrayT(uint8, uint8);
30
- expect(array.fromBuffer(new Uint8Array([4, 1, 2, 3, 4, 5]))).to.deep.equal([1, 2, 3, 4]);
31
- });
32
-
33
- test("should decode amount of bytes as number before array", () => {
34
- const array = new ArrayT(uint16, uint8, "bytes");
35
- expect(array.fromBuffer(new Uint8Array([4, 1, 2, 3, 4, 5]))).to.deep.equal([258, 772]);
36
- });
37
-
38
- test("should decode length from function", () => {
39
- const array = new ArrayT(uint8, () => 4);
40
- expect(array.fromBuffer(new Uint8Array([1, 2, 3, 4, 5]))).to.deep.equal([1, 2, 3, 4]);
41
- });
42
-
43
- test("should decode amount of bytes from function", () => {
44
- const array = new ArrayT(uint16, () => 4, "bytes");
45
- expect(array.fromBuffer(new Uint8Array([1, 2, 3, 4, 5]))).to.deep.equal([258, 772]);
46
- });
47
-
48
- test("should decode to the end of the parent if no length is given", () => {
49
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
50
- const array = new ArrayT(uint8);
51
- expect(array.decode(stream, { _length: 4, _startOffset: 0 })).to.deep.equal([1, 2, 3, 4]);
52
- });
53
-
54
- test("should decode to the end of the stream if no parent and length is given", () => {
55
- const array = new ArrayT(uint8);
56
- expect(array.fromBuffer(new Uint8Array([1, 2, 3, 4]))).to.deep.equal([1, 2, 3, 4]);
57
- });
58
- });
59
-
60
- describe("size", () => {
61
- test("should use array length", () => {
62
- const array = new ArrayT(uint8, 10);
63
- expect(array.size([1, 2, 3, 4])).to.equal(4);
64
- });
65
-
66
- test("should add size of length field before string", () => {
67
- const array = new ArrayT(uint8, uint8);
68
- expect(array.size([1, 2, 3, 4])).to.equal(5);
69
- });
70
-
71
- test("should use defined length if no value given", () => {
72
- const array = new ArrayT(uint8, 10);
73
- expect(array.size()).to.equal(10);
74
- });
75
- });
76
-
77
- describe("encode", () => {
78
- test("should encode using array length", () => {
79
- const array = new ArrayT(uint8, 10);
80
- expect(array.toBuffer([1, 2, 3, 4])).to.deep.equal(new Uint8Array([1, 2, 3, 4]));
81
- });
82
-
83
- test("should encode length as number before array", () => {
84
- const array = new ArrayT(uint8, uint8);
85
- expect(array.toBuffer([1, 2, 3, 4])).to.deep.equal(new Uint8Array([4, 1, 2, 3, 4]));
86
- });
87
-
88
- test("should add pointers after array if length is encoded at start", () => {
89
- const array = new ArrayT(new Pointer(uint8, uint8), uint8);
90
- expect(array.toBuffer([1, 2, 3, 4])).to.deep.equal(
91
- new Uint8Array([4, 5, 6, 7, 8, 1, 2, 3, 4]),
92
- );
93
- });
94
- });
95
- });
@@ -1,52 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { Bitfield, uint8 } from "../src/index.js";
3
-
4
- describe("Bitfield", () => {
5
- const bitfield = new Bitfield(uint8, [
6
- "Jack",
7
- "Kack",
8
- "Lack",
9
- "Mack",
10
- "Nack",
11
- "Oack",
12
- "Pack",
13
- "Quack",
14
- ]);
15
- const JACK = 1 << 0;
16
- const MACK = 1 << 3;
17
- const NACK = 1 << 4;
18
- const PACK = 1 << 6;
19
- const QUACK = 1 << 7;
20
-
21
- test("should have the right size", () => {
22
- expect(bitfield.size()).to.equal(1);
23
- });
24
-
25
- test("should decode", () => {
26
- expect(bitfield.fromBuffer(new Uint8Array([JACK | MACK | PACK | NACK | QUACK]))).to.deep.equal({
27
- Jack: true,
28
- Kack: false,
29
- Lack: false,
30
- Mack: true,
31
- Nack: true,
32
- Oack: false,
33
- Pack: true,
34
- Quack: true,
35
- });
36
- });
37
-
38
- test("should encode", () => {
39
- expect(
40
- bitfield.toBuffer({
41
- Jack: true,
42
- Kack: false,
43
- Lack: false,
44
- Mack: true,
45
- Nack: true,
46
- Oack: false,
47
- Pack: true,
48
- Quack: true,
49
- }),
50
- ).to.deep.equal(new Uint8Array([JACK | MACK | PACK | NACK | QUACK]));
51
- });
52
- });
@@ -1,35 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { Boolean as BooleanT, uint8 } from "../src/index.js";
3
-
4
- describe("Boolean", () => {
5
- describe("decode", () => {
6
- test("should decode 0 as false", () => {
7
- const boolean = new BooleanT(uint8);
8
- expect(boolean.fromBuffer(new Uint8Array([0]))).to.equal(false);
9
- });
10
-
11
- test("should decode 1 as true", () => {
12
- const boolean = new BooleanT(uint8);
13
- expect(boolean.fromBuffer(new Uint8Array([1]))).to.equal(true);
14
- });
15
- });
16
-
17
- describe("size", () => {
18
- test("should return given type size", () => {
19
- const boolean = new BooleanT(uint8);
20
- expect(boolean.size()).to.equal(1);
21
- });
22
- });
23
-
24
- describe("encode", () => {
25
- test("should encode false as 0", () => {
26
- const boolean = new BooleanT(uint8);
27
- expect(boolean.toBuffer(false)).to.deep.equal(new Uint8Array([0]));
28
- });
29
-
30
- test("should encode true as 1", () => {
31
- const boolean = new BooleanT(uint8);
32
- expect(boolean.toBuffer(true)).to.deep.equal(new Uint8Array([1]));
33
- });
34
- });
35
- });
@@ -1,49 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { Buffer as BufferT, DecodeStream, EncodeStream, uint8 } from "../src/index.js";
3
-
4
- describe("Buffer", () => {
5
- describe("decode", () => {
6
- test("should decode", () => {
7
- const stream = new DecodeStream(new Uint8Array([0xab, 0xff, 0x1f, 0xb6]));
8
- const buf = new BufferT(2);
9
- expect(buf.decode(stream)).to.deep.equal(new Uint8Array([0xab, 0xff]));
10
- expect(buf.decode(stream)).to.deep.equal(new Uint8Array([0x1f, 0xb6]));
11
- });
12
-
13
- test("should decode with parent key length", () => {
14
- const stream = new DecodeStream(new Uint8Array([0xab, 0xff, 0x1f, 0xb6]));
15
- const buf = new BufferT("len");
16
- expect(buf.decode(stream, { len: 3 })).to.deep.equal(new Uint8Array([0xab, 0xff, 0x1f]));
17
- expect(buf.decode(stream, { len: 1 })).to.deep.equal(new Uint8Array([0xb6]));
18
- });
19
- });
20
-
21
- describe("size", () => {
22
- test("should return size", () => {
23
- const buf = new BufferT(2);
24
- expect(buf.size(new Uint8Array([0xab, 0xff]))).to.equal(2);
25
- });
26
-
27
- test("should use defined length if no value given", () => {
28
- const array = new BufferT(10);
29
- expect(array.size()).to.equal(10);
30
- });
31
- });
32
-
33
- describe("encode", () => {
34
- test("should encode", () => {
35
- const buf = new BufferT(2);
36
- const stream = new EncodeStream(new Uint8Array(4));
37
- buf.encode(stream, new Uint8Array([0xab, 0xff]));
38
- buf.encode(stream, new Uint8Array([0x1f, 0xb6]));
39
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xab, 0xff, 0x1f, 0xb6]));
40
- });
41
-
42
- test("should encode length before buffer", () => {
43
- const buf = new BufferT(uint8);
44
- const stream = new EncodeStream(new Uint8Array(3));
45
- buf.encode(stream, new Uint8Array([0xab, 0xff]));
46
- expect(stream.buffer).to.deep.equal(new Uint8Array([2, 0xab, 0xff]));
47
- });
48
- });
49
- });
@@ -1,104 +0,0 @@
1
- import { Buffer } from "node:buffer";
2
- import { describe, expect, test } from "vitest";
3
- import { DecodeStream } from "../src/index.js";
4
-
5
- describe("DecodeStream", () => {
6
- test("should read a buffer", () => {
7
- const buf = Buffer.from([1, 2, 3]);
8
- const stream = new DecodeStream(buf);
9
- expect(stream.readBuffer(buf.length)).to.deep.equal(Buffer.from([1, 2, 3]));
10
- });
11
-
12
- test("should readUInt16BE", () => {
13
- const buf = Buffer.from([0xab, 0xcd]);
14
- const stream = new DecodeStream(buf);
15
- expect(stream.readUInt16BE()).to.equal(0xabcd);
16
- });
17
-
18
- test("should readUInt16LE", () => {
19
- const buf = Buffer.from([0xab, 0xcd]);
20
- const stream = new DecodeStream(buf);
21
- expect(stream.readUInt16LE()).to.equal(0xcdab);
22
- });
23
-
24
- test("should readUInt24BE", () => {
25
- const buf = Buffer.from([0xab, 0xcd, 0xef]);
26
- const stream = new DecodeStream(buf);
27
- expect(stream.readUInt24BE()).to.equal(0xabcdef);
28
- });
29
-
30
- test("should readUInt24LE", () => {
31
- const buf = Buffer.from([0xab, 0xcd, 0xef]);
32
- const stream = new DecodeStream(buf);
33
- expect(stream.readUInt24LE()).to.equal(0xefcdab);
34
- });
35
-
36
- test("should readInt24BE", () => {
37
- const buf = Buffer.from([0xff, 0xab, 0x24]);
38
- const stream = new DecodeStream(buf);
39
- expect(stream.readInt24BE()).to.equal(-21724);
40
- });
41
-
42
- test("should readInt24LE", () => {
43
- const buf = Buffer.from([0x24, 0xab, 0xff]);
44
- const stream = new DecodeStream(buf);
45
- expect(stream.readInt24LE()).to.equal(-21724);
46
- });
47
-
48
- describe("readString", () => {
49
- test("should decode ascii by default", () => {
50
- const buf = Buffer.from("some text", "ascii");
51
- const stream = new DecodeStream(buf);
52
- expect(stream.readString(buf.length)).to.equal("some text");
53
- });
54
-
55
- test("should decode ascii", () => {
56
- const buf = Buffer.from("some text", "ascii");
57
- const stream = new DecodeStream(buf);
58
- expect(stream.readString(buf.length, "ascii")).to.equal("some text");
59
- });
60
-
61
- test("should decode utf8", () => {
62
- const buf = Buffer.from("unicode! ๐Ÿ‘", "utf8");
63
- const stream = new DecodeStream(buf);
64
- expect(stream.readString(buf.length, "utf8")).to.equal("unicode! ๐Ÿ‘");
65
- });
66
-
67
- test("should decode utf16le", () => {
68
- const buf = Buffer.from("unicode! ๐Ÿ‘", "utf16le");
69
- const stream = new DecodeStream(buf);
70
- expect(stream.readString(buf.length, "utf16le")).to.equal("unicode! ๐Ÿ‘");
71
- });
72
-
73
- test("should decode ucs2", () => {
74
- const buf = Buffer.from("unicode! ๐Ÿ‘", "ucs2");
75
- const stream = new DecodeStream(buf);
76
- expect(stream.readString(buf.length, "ucs2")).to.equal("unicode! ๐Ÿ‘");
77
- });
78
-
79
- test("should decode utf16be", () => {
80
- const buf = Buffer.from("unicode! ๐Ÿ‘", "utf16le");
81
- for (let i = 0; i < buf.length - 1; i += 2) {
82
- const byte = buf[i];
83
- buf[i] = buf[i + 1];
84
- buf[i + 1] = byte;
85
- }
86
- const stream = new DecodeStream(buf);
87
- expect(stream.readString(buf.length, "utf16be")).to.equal("unicode! ๐Ÿ‘");
88
- });
89
-
90
- test("should decode macroman", () => {
91
- const buf = Buffer.from([
92
- 0x8a, 0x63, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x20, 0x63, 0x68, 0x87, 0x72, 0x61, 0x63,
93
- 0x74, 0x65, 0x72, 0x73,
94
- ]);
95
- const stream = new DecodeStream(buf);
96
- expect(stream.readString(buf.length, "mac")).to.equal("รคccented chรกracters");
97
- });
98
-
99
- test("should return a buffer for unsupported encodings", () => {
100
- const stream = new DecodeStream(Buffer.from([1, 2, 3]));
101
- expect(stream.readString(3, "unsupported")).to.deep.equal(Buffer.from([1, 2, 3]));
102
- });
103
- });
104
- });
@@ -1,111 +0,0 @@
1
- import { Buffer } from "node:buffer";
2
- import { describe, expect, test } from "vitest";
3
- import { EncodeStream } from "../src/index.js";
4
-
5
- describe("EncodeStream", () => {
6
- test("should write a buffer", () => {
7
- const stream = new EncodeStream(new Uint8Array(3));
8
- stream.writeBuffer(new Uint8Array([1, 2, 3]));
9
- expect(stream.buffer).to.deep.equal(new Uint8Array([1, 2, 3]));
10
- });
11
-
12
- test("should writeUInt16BE", () => {
13
- const stream = new EncodeStream(new Uint8Array(2));
14
- stream.writeUInt16BE(0xabcd);
15
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xab, 0xcd]));
16
- });
17
-
18
- test("should writeUInt16LE", () => {
19
- const stream = new EncodeStream(new Uint8Array(2));
20
- stream.writeUInt16LE(0xcdab);
21
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xab, 0xcd]));
22
- });
23
-
24
- test("should writeUInt24BE", () => {
25
- const stream = new EncodeStream(new Uint8Array(3));
26
- stream.writeUInt24BE(0xabcdef);
27
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xab, 0xcd, 0xef]));
28
- });
29
-
30
- test("should writeUInt24LE", () => {
31
- const stream = new EncodeStream(new Uint8Array(3));
32
- stream.writeUInt24LE(0xabcdef);
33
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xef, 0xcd, 0xab]));
34
- });
35
-
36
- test("should writeInt24BE", () => {
37
- const stream = new EncodeStream(new Uint8Array(6));
38
- stream.writeInt24BE(-21724);
39
- stream.writeInt24BE(0xabcdef);
40
- expect(stream.buffer).to.deep.equal(new Uint8Array([0xff, 0xab, 0x24, 0xab, 0xcd, 0xef]));
41
- });
42
-
43
- test("should writeInt24LE", () => {
44
- const stream = new EncodeStream(new Uint8Array(6));
45
- stream.writeInt24LE(-21724);
46
- stream.writeInt24LE(0xabcdef);
47
- expect(stream.buffer).to.deep.equal(new Uint8Array([0x24, 0xab, 0xff, 0xef, 0xcd, 0xab]));
48
- });
49
-
50
- test("should fill", () => {
51
- const stream = new EncodeStream(new Uint8Array(5));
52
- stream.fill(10, 5);
53
- expect(stream.buffer).to.deep.equal(new Uint8Array([10, 10, 10, 10, 10]));
54
- });
55
-
56
- describe("writeString", () => {
57
- test("should encode ascii by default", () => {
58
- const expected = Buffer.from("some text", "ascii");
59
- const stream = new EncodeStream(new Uint8Array(expected.length));
60
- stream.writeString("some text");
61
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
62
- });
63
-
64
- test("should encode ascii", () => {
65
- const expected = Buffer.from("some text", "ascii");
66
- const stream = new EncodeStream(new Uint8Array(expected.length));
67
- stream.writeString("some text", "ascii");
68
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
69
- });
70
-
71
- test("should encode utf8", () => {
72
- const expected = Buffer.from("unicode! ๐Ÿ‘", "utf8");
73
- const stream = new EncodeStream(new Uint8Array(expected.length));
74
- stream.writeString("unicode! ๐Ÿ‘", "utf8");
75
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
76
- });
77
-
78
- test("should encode utf16le", () => {
79
- const expected = Buffer.from("unicode! ๐Ÿ‘", "utf16le");
80
- const stream = new EncodeStream(new Uint8Array(expected.length));
81
- stream.writeString("unicode! ๐Ÿ‘", "utf16le");
82
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
83
- });
84
-
85
- test("should encode ucs2", () => {
86
- const expected = Buffer.from("unicode! ๐Ÿ‘", "ucs2");
87
- const stream = new EncodeStream(new Uint8Array(expected.length));
88
- stream.writeString("unicode! ๐Ÿ‘", "ucs2");
89
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
90
- });
91
-
92
- test("should encode utf16be", () => {
93
- const expected = Buffer.from("unicode! ๐Ÿ‘", "utf16le");
94
- for (let i = 0; i < expected.length - 1; i += 2) {
95
- const byte = expected[i];
96
- expected[i] = expected[i + 1];
97
- expected[i + 1] = byte;
98
- }
99
- const stream = new EncodeStream(new Uint8Array(expected.length));
100
- stream.writeString("unicode! ๐Ÿ‘", "utf16be");
101
- expect(stream.buffer).to.deep.equal(new Uint8Array(expected));
102
- });
103
-
104
- test("should throw for unsupported encoding", () => {
105
- const stream = new EncodeStream(new Uint8Array(19));
106
- expect(() => stream.writeString("รคccented chรกracters", "mac")).to.throw(
107
- "Unsupported encoding: mac",
108
- );
109
- });
110
- });
111
- });
package/test/enum.test.ts DELETED
@@ -1,30 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { DecodeStream, EncodeStream, Enum, uint8 } from "../src/index.js";
3
-
4
- describe("Enum", () => {
5
- const e = new Enum(uint8, ["foo", "bar", "baz"]);
6
-
7
- test("should have the right size", () => {
8
- expect(e.size()).to.equal(1);
9
- });
10
-
11
- test("should decode", () => {
12
- const stream = new DecodeStream(new Uint8Array([1, 2, 0]));
13
- expect(e.decode(stream)).to.equal("bar");
14
- expect(e.decode(stream)).to.equal("baz");
15
- expect(e.decode(stream)).to.equal("foo");
16
- });
17
-
18
- test("should encode", () => {
19
- const stream = new EncodeStream(new Uint8Array(3));
20
- e.encode(stream, "bar");
21
- e.encode(stream, "baz");
22
- e.encode(stream, "foo");
23
- expect(stream.buffer).to.deep.equal(new Uint8Array([1, 2, 0]));
24
- });
25
-
26
- test("should throw on unknown option", () => {
27
- const stream = new EncodeStream(new Uint8Array(1));
28
- expect(() => e.encode(stream, "unknown")).to.throw(/unknown option/i);
29
- });
30
- });
@@ -1,70 +0,0 @@
1
- import { describe, expect, test } from "vitest";
2
- import { DecodeStream, EncodeStream, LazyArray as LazyArrayT, uint8 } from "../src/index.js";
3
-
4
- describe("LazyArray", () => {
5
- describe("decode", () => {
6
- test("should decode items lazily", () => {
7
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
8
- const array = new LazyArrayT(uint8, 4);
9
-
10
- const arr = array.decode(stream);
11
- expect(arr).to.not.be.an("array");
12
- expect(arr).to.have.length(4);
13
- expect(stream.pos).to.equal(4);
14
-
15
- expect(arr.get(0)).to.equal(1);
16
- expect(arr.get(1)).to.equal(2);
17
- expect(arr.get(2)).to.equal(3);
18
- expect(arr.get(3)).to.equal(4);
19
-
20
- expect(arr.get(-1)).to.equal(undefined);
21
- expect(arr.get(5)).to.equal(undefined);
22
- });
23
-
24
- test("should be able to convert to an array", () => {
25
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
26
- const array = new LazyArrayT(uint8, 4);
27
- const arr = array.decode(stream);
28
-
29
- expect(arr.toArray()).to.deep.equal([1, 2, 3, 4]);
30
- });
31
-
32
- test("should have an inspect method", () => {
33
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
34
- const array = new LazyArrayT(uint8, 4);
35
- const arr = array.decode(stream);
36
-
37
- expect(arr.inspect()).to.equal("[1,2,3,4]");
38
- });
39
-
40
- test("should decode length as number before array", () => {
41
- const stream = new DecodeStream(new Uint8Array([4, 1, 2, 3, 4, 5]));
42
- const array = new LazyArrayT(uint8, uint8);
43
- const arr = array.decode(stream);
44
-
45
- expect(arr.toArray()).to.deep.equal([1, 2, 3, 4]);
46
- });
47
- });
48
-
49
- describe("size", () => {
50
- test("should work with LazyArrays", () => {
51
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
52
- const array = new LazyArrayT(uint8, 4);
53
- const arr = array.decode(stream);
54
-
55
- expect(array.size(arr)).to.equal(4);
56
- });
57
- });
58
-
59
- describe("encode", () => {
60
- test("should work with LazyArrays", () => {
61
- const stream = new DecodeStream(new Uint8Array([1, 2, 3, 4, 5]));
62
- const array = new LazyArrayT(uint8, 4);
63
- const arr = array.decode(stream);
64
-
65
- const enc = new EncodeStream(new Uint8Array(array.size(arr)));
66
- array.encode(enc, arr);
67
- expect(enc.buffer).to.deep.equal(new Uint8Array([1, 2, 3, 4]));
68
- });
69
- });
70
- });