@revideo/2d 0.2.5 → 0.2.6-alpha.904

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.
Files changed (69) hide show
  1. package/lib/components/Audio.d.ts +11 -11
  2. package/lib/components/Audio.d.ts.map +1 -1
  3. package/lib/components/Audio.js +109 -115
  4. package/lib/components/Code.d.ts +211 -244
  5. package/lib/components/Code.d.ts.map +1 -1
  6. package/lib/components/Code.js +269 -317
  7. package/lib/components/CodeBlock.d.ts +67 -109
  8. package/lib/components/CodeBlock.d.ts.map +1 -1
  9. package/lib/components/CodeBlock.js +373 -414
  10. package/lib/components/Curve.js +269 -270
  11. package/lib/components/Grid.js +56 -63
  12. package/lib/components/Icon.js +50 -58
  13. package/lib/components/Img.d.ts +79 -86
  14. package/lib/components/Img.d.ts.map +1 -1
  15. package/lib/components/Img.js +181 -193
  16. package/lib/components/Knot.js +60 -81
  17. package/lib/components/Latex.js +65 -77
  18. package/lib/components/Layout.d.ts +413 -455
  19. package/lib/components/Layout.d.ts.map +1 -1
  20. package/lib/components/Layout.js +681 -666
  21. package/lib/components/Line.js +193 -216
  22. package/lib/components/Media.d.ts +35 -35
  23. package/lib/components/Media.d.ts.map +1 -1
  24. package/lib/components/Media.js +134 -135
  25. package/lib/components/Node.d.ts +830 -875
  26. package/lib/components/Node.d.ts.map +1 -1
  27. package/lib/components/Node.js +1314 -1383
  28. package/lib/components/SVG.js +541 -609
  29. package/lib/components/Shape.d.ts +35 -44
  30. package/lib/components/Shape.d.ts.map +1 -1
  31. package/lib/components/Shape.js +127 -112
  32. package/lib/components/Spline.js +175 -190
  33. package/lib/components/Txt.d.ts +44 -55
  34. package/lib/components/Txt.d.ts.map +1 -1
  35. package/lib/components/Txt.js +155 -156
  36. package/lib/components/TxtLeaf.d.ts +16 -20
  37. package/lib/components/TxtLeaf.d.ts.map +1 -1
  38. package/lib/components/TxtLeaf.js +2 -2
  39. package/lib/components/Video.d.ts +45 -41
  40. package/lib/components/Video.d.ts.map +1 -1
  41. package/lib/components/Video.js +202 -138
  42. package/lib/components/View2D.d.ts +22 -21
  43. package/lib/components/View2D.d.ts.map +1 -1
  44. package/lib/components/View2D.js +89 -98
  45. package/lib/components/index.js +1 -1
  46. package/lib/components/types.js +1 -1
  47. package/lib/curves/ArcSegment.js +94 -145
  48. package/lib/scenes/Scene2D.d.ts +23 -42
  49. package/lib/scenes/Scene2D.d.ts.map +1 -1
  50. package/lib/scenes/Scene2D.js +152 -161
  51. package/lib/scenes/index.js +1 -1
  52. package/lib/scenes/makeScene2D.js +10 -10
  53. package/lib/scenes/useScene2D.js +3 -3
  54. package/lib/tsconfig.build.tsbuildinfo +1 -1
  55. package/lib/utils/CanvasUtils.d.ts +21 -93
  56. package/package.json +5 -5
  57. package/src/lib/components/Audio.ts +2 -2
  58. package/src/lib/components/Code.ts +4 -2
  59. package/src/lib/components/CodeBlock.ts +1 -1
  60. package/src/lib/components/Img.ts +2 -2
  61. package/src/lib/components/Layout.ts +2 -2
  62. package/src/lib/components/Media.ts +3 -1
  63. package/src/lib/components/Node.ts +9 -9
  64. package/src/lib/components/Shape.ts +2 -2
  65. package/src/lib/components/Txt.ts +2 -2
  66. package/src/lib/components/TxtLeaf.ts +1 -1
  67. package/src/lib/components/Video.ts +114 -8
  68. package/src/lib/components/View2D.ts +6 -2
  69. package/src/lib/scenes/Scene2D.ts +4 -3
@@ -1,413 +1,372 @@
1
- var __decorate =
2
- (this && this.__decorate) ||
3
- function (decorators, target, key, desc) {
4
- var c = arguments.length,
5
- r =
6
- c < 3
7
- ? target
8
- : desc === null
9
- ? (desc = Object.getOwnPropertyDescriptor(target, key))
10
- : desc,
11
- d;
12
- if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function')
13
- r = Reflect.decorate(decorators, target, key, desc);
14
- else
15
- for (var i = decorators.length - 1; i >= 0; i--)
16
- if ((d = decorators[i]))
17
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
19
- };
6
+ };
20
7
  var CodeBlock_1;
21
- import {
22
- Vector2,
23
- clampRemap,
24
- createComputedAsync,
25
- createSignal,
26
- easeInOutSine,
27
- join,
28
- map,
29
- threadable,
30
- tween,
31
- useLogger,
32
- waitFor,
33
- } from '@revideo/core';
34
- import {diff, parse, ready} from 'code-fns';
35
- import {computed, initial, nodeName, parser, signal} from '../decorators';
36
- import {Shape} from './Shape';
37
- let CodeBlock = (CodeBlock_1 = class CodeBlock extends Shape {
38
- *tweenSelection(value, duration, timingFunction) {
39
- this.oldSelection = this.selection();
40
- this.selection(value);
41
- this.selectionProgress(0);
42
- yield* this.selectionProgress(1, duration, timingFunction);
43
- this.selectionProgress(null);
44
- this.oldSelection = null;
45
- }
46
- getLineCountOfTokenArray(tokens) {
47
- let count = 0;
48
- for (const token of tokens) {
49
- for (let i = 0; i < token.code.length; i++) {
50
- if (token.code[i] === '\n') {
51
- count++;
8
+ import { Vector2, clampRemap, createComputedAsync, createSignal, easeInOutSine, join, map, threadable, tween, useLogger, waitFor, } from '@revideo/core';
9
+ import { diff, parse, ready, } from 'code-fns';
10
+ import { computed, initial, nodeName, parser, signal } from '../decorators';
11
+ import { Shape } from './Shape';
12
+ let CodeBlock = CodeBlock_1 = class CodeBlock extends Shape {
13
+ *tweenSelection(value, duration, timingFunction) {
14
+ this.oldSelection = this.selection();
15
+ this.selection(value);
16
+ this.selectionProgress(0);
17
+ yield* this.selectionProgress(1, duration, timingFunction);
18
+ this.selectionProgress(null);
19
+ this.oldSelection = null;
20
+ }
21
+ getLineCountOfTokenArray(tokens) {
22
+ let count = 0;
23
+ for (const token of tokens) {
24
+ for (let i = 0; i < token.code.length; i++) {
25
+ if (token.code[i] === '\n') {
26
+ count++;
27
+ }
28
+ }
29
+ }
30
+ if (tokens.length > 0) {
31
+ count++;
52
32
  }
53
- }
33
+ return count;
54
34
  }
55
- if (tokens.length > 0) {
56
- count++;
35
+ lineCount() {
36
+ const progress = this.codeProgress();
37
+ if (progress !== null) {
38
+ return Math.round(map(this.currentLineCount, this.newLineCount, progress));
39
+ }
40
+ return this.getLineCountOfTokenArray(this.parsed());
57
41
  }
58
- return count;
59
- }
60
- lineCount() {
61
- const progress = this.codeProgress();
62
- if (progress !== null) {
63
- return Math.round(
64
- map(this.currentLineCount, this.newLineCount, progress),
65
- );
42
+ parsed() {
43
+ if (!CodeBlock_1.initialized()) {
44
+ return [];
45
+ }
46
+ return parse(this.code(), { codeStyle: this.theme() });
66
47
  }
67
- return this.getLineCountOfTokenArray(this.parsed());
68
- }
69
- parsed() {
70
- if (!CodeBlock_1.initialized()) {
71
- return [];
48
+ constructor({ children, ...rest }) {
49
+ super({
50
+ fontFamily: 'monospace',
51
+ ...rest,
52
+ });
53
+ this.codeProgress = createSignal(null);
54
+ this.selectionProgress = createSignal(null);
55
+ this.oldSelection = null;
56
+ this.diffed = null;
57
+ this.currentLineCount = 0;
58
+ this.newLineCount = 0;
59
+ if (children) {
60
+ this.code(children);
61
+ }
72
62
  }
73
- return parse(this.code(), {codeStyle: this.theme()});
74
- }
75
- constructor({children, ...rest}) {
76
- super({
77
- fontFamily: 'monospace',
78
- ...rest,
79
- });
80
- this.codeProgress = createSignal(null);
81
- this.selectionProgress = createSignal(null);
82
- this.oldSelection = null;
83
- this.diffed = null;
84
- this.currentLineCount = 0;
85
- this.newLineCount = 0;
86
- if (children) {
87
- this.code(children);
63
+ characterSize() {
64
+ this.requestFontUpdate();
65
+ const context = this.cacheCanvas();
66
+ context.save();
67
+ this.applyStyle(context);
68
+ context.font = this.styles.font;
69
+ const width = context.measureText('X').width;
70
+ context.restore();
71
+ return new Vector2(width, parseFloat(this.styles.lineHeight));
88
72
  }
89
- }
90
- characterSize() {
91
- this.requestFontUpdate();
92
- const context = this.cacheCanvas();
93
- context.save();
94
- this.applyStyle(context);
95
- context.font = this.styles.font;
96
- const width = context.measureText('X').width;
97
- context.restore();
98
- return new Vector2(width, parseFloat(this.styles.lineHeight));
99
- }
100
- desiredSize() {
101
- const custom = super.desiredSize();
102
- const tokensSize = this.getTokensSize(this.parsed());
103
- return {
104
- x: custom.x ?? tokensSize.x,
105
- y: custom.y ?? tokensSize.y,
106
- };
107
- }
108
- getTokensSize(tokens) {
109
- const size = this.characterSize();
110
- let maxWidth = 0;
111
- let height = size.height;
112
- let width = 0;
113
- for (const token of tokens) {
114
- for (let i = 0; i < token.code.length; i++) {
115
- if (token.code[i] === '\n') {
116
- if (width > maxWidth) {
73
+ desiredSize() {
74
+ const custom = super.desiredSize();
75
+ const tokensSize = this.getTokensSize(this.parsed());
76
+ return {
77
+ x: custom.x ?? tokensSize.x,
78
+ y: custom.y ?? tokensSize.y,
79
+ };
80
+ }
81
+ getTokensSize(tokens) {
82
+ const size = this.characterSize();
83
+ let maxWidth = 0;
84
+ let height = size.height;
85
+ let width = 0;
86
+ for (const token of tokens) {
87
+ for (let i = 0; i < token.code.length; i++) {
88
+ if (token.code[i] === '\n') {
89
+ if (width > maxWidth) {
90
+ maxWidth = width;
91
+ }
92
+ width = 0;
93
+ height += size.height;
94
+ }
95
+ else {
96
+ width += size.width;
97
+ }
98
+ }
99
+ }
100
+ if (width > maxWidth) {
117
101
  maxWidth = width;
118
- }
119
- width = 0;
120
- height += size.height;
121
- } else {
122
- width += size.width;
123
102
  }
124
- }
103
+ return { x: maxWidth, y: height };
125
104
  }
126
- if (width > maxWidth) {
127
- maxWidth = width;
105
+ collectAsyncResources() {
106
+ super.collectAsyncResources();
107
+ CodeBlock_1.initialized();
128
108
  }
129
- return {x: maxWidth, y: height};
130
- }
131
- collectAsyncResources() {
132
- super.collectAsyncResources();
133
- CodeBlock_1.initialized();
134
- }
135
- set(strings, ...rest) {
136
- this.code({
137
- language: this.language(),
138
- spans: strings,
139
- nodes: rest,
140
- });
141
- }
142
- /**
143
- * Smoothly edit the code.
144
- *
145
- * @remarks
146
- * This method returns a tag function that should be used together with a
147
- * template literal to define what to edit. Expressions can be used to either
148
- * {@link insert}, {@link remove}, or {@link edit} the code.
149
- *
150
- * @example
151
- * ```ts
152
- * yield* codeBlock().edit()`
153
- * const ${edit('a', 'b')} = [${insert('1, 2, 3')}];${remove(`
154
- * // this comment will be removed`)}
155
- * `;
156
- * ```
157
- *
158
- * @param duration - The duration of the transition.
159
- * @param changeSelection - When set to `true`, the selection will be modified
160
- * to highlight the newly inserted code. Setting it
161
- * to `false` leaves the selection untouched.
162
- * Providing a custom {@link CodeRange} will select
163
- * it instead.
164
- */
165
- edit(duration = 0.6, changeSelection = true) {
166
- function* generator(strings, ...rest) {
167
- const from = {
168
- language: this.language(),
169
- spans: [...strings],
170
- nodes: rest.map(modification =>
171
- isCodeModification(modification) ? modification.from : modification,
172
- ),
173
- };
174
- const to = {
175
- language: this.language(),
176
- spans: [...strings],
177
- nodes: rest.map(modification =>
178
- isCodeModification(modification) ? modification.to : modification,
179
- ),
180
- };
181
- this.code(from);
182
- if (changeSelection) {
183
- const task = yield this.code(to, duration);
184
- yield* waitFor(duration * 0.2);
185
- yield* this.selection([], duration * 0.3);
186
- const newSelection =
187
- changeSelection === true
188
- ? diff(from, to)
189
- .filter(token => token.morph === 'create')
190
- .map(token => [
191
- [token.to[1], token.to[0]],
192
- [token.to[1], token.to[0] + token.code.length],
193
- ])
194
- : changeSelection;
195
- yield* this.selection(newSelection, duration * 0.3);
196
- yield* join(task);
197
- } else {
198
- yield* this.code(to, duration);
199
- }
109
+ set(strings, ...rest) {
110
+ this.code({
111
+ language: this.language(),
112
+ spans: strings,
113
+ nodes: rest,
114
+ });
200
115
  }
201
- return generator.bind(this);
202
- }
203
- *tweenCode(code, time, timingFunction) {
204
- if (typeof code === 'function') throw new Error();
205
- if (!CodeBlock_1.initialized()) return;
206
- const currentParsedCode = parse(this.code(), {codeStyle: this.theme()});
207
- const newParsedCode = parse(code, {codeStyle: this.theme()});
208
- this.currentLineCount = this.getLineCountOfTokenArray(currentParsedCode);
209
- this.newLineCount = this.getLineCountOfTokenArray(newParsedCode);
210
- const autoWidth = this.width.isInitial();
211
- const autoHeight = this.height.isInitial();
212
- const fromSize = this.size();
213
- const toSize = this.getTokensSize(newParsedCode);
214
- const beginning = 0.2;
215
- const ending = 0.8;
216
- this.codeProgress(0);
217
- this.diffed = diff(this.code(), code, {codeStyle: this.theme()});
218
- yield* tween(
219
- time,
220
- value => {
221
- const progress = timingFunction(value);
222
- const remapped = clampRemap(beginning, ending, 0, 1, progress);
223
- this.codeProgress(progress);
224
- if (autoWidth) {
225
- this.width(easeInOutSine(remapped, fromSize.x, toSize.x));
226
- }
227
- if (autoHeight) {
228
- this.height(easeInOutSine(remapped, fromSize.y, toSize.y));
229
- }
230
- },
231
- () => {
232
- this.codeProgress(null);
233
- this.diffed = null;
234
- if (autoWidth) {
235
- this.width.reset();
236
- }
237
- if (autoHeight) {
238
- this.height.reset();
116
+ /**
117
+ * Smoothly edit the code.
118
+ *
119
+ * @remarks
120
+ * This method returns a tag function that should be used together with a
121
+ * template literal to define what to edit. Expressions can be used to either
122
+ * {@link insert}, {@link remove}, or {@link edit} the code.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * yield* codeBlock().edit()`
127
+ * const ${edit('a', 'b')} = [${insert('1, 2, 3')}];${remove(`
128
+ * // this comment will be removed`)}
129
+ * `;
130
+ * ```
131
+ *
132
+ * @param duration - The duration of the transition.
133
+ * @param changeSelection - When set to `true`, the selection will be modified
134
+ * to highlight the newly inserted code. Setting it
135
+ * to `false` leaves the selection untouched.
136
+ * Providing a custom {@link CodeRange} will select
137
+ * it instead.
138
+ */
139
+ edit(duration = 0.6, changeSelection = true) {
140
+ function* generator(strings, ...rest) {
141
+ const from = {
142
+ language: this.language(),
143
+ spans: [...strings],
144
+ nodes: rest.map(modification => isCodeModification(modification) ? modification.from : modification),
145
+ };
146
+ const to = {
147
+ language: this.language(),
148
+ spans: [...strings],
149
+ nodes: rest.map(modification => isCodeModification(modification) ? modification.to : modification),
150
+ };
151
+ this.code(from);
152
+ if (changeSelection) {
153
+ const task = yield this.code(to, duration);
154
+ yield* waitFor(duration * 0.2);
155
+ yield* this.selection([], duration * 0.3);
156
+ const newSelection = changeSelection === true
157
+ ? diff(from, to)
158
+ .filter(token => token.morph === 'create')
159
+ .map(token => [
160
+ [token.to[1], token.to[0]],
161
+ [token.to[1], token.to[0] + token.code.length],
162
+ ])
163
+ : changeSelection;
164
+ yield* this.selection(newSelection, duration * 0.3);
165
+ yield* join(task);
166
+ }
167
+ else {
168
+ yield* this.code(to, duration);
169
+ }
239
170
  }
240
- this.code(code);
241
- },
242
- );
243
- }
244
- draw(context) {
245
- if (!CodeBlock_1.initialized()) return;
246
- this.requestFontUpdate();
247
- this.applyStyle(context);
248
- context.font = this.styles.font;
249
- context.textBaseline = 'top';
250
- const lh = parseFloat(this.styles.lineHeight);
251
- const w = context.measureText('X').width;
252
- const size = this.computedSize();
253
- const progress = this.codeProgress();
254
- const unselectedOpacity = this.unselectedOpacity();
255
- const globalAlpha = context.globalAlpha;
256
- const getSelectionAlpha = (x, y) =>
257
- map(unselectedOpacity, 1, this.selectionStrength(x, y));
258
- const drawToken = (code, position, alpha = 1) => {
259
- for (let i = 0; i < code.length; i++) {
260
- const char = code.charAt(i);
261
- if (char === '\n') {
262
- position.y++;
263
- position.x = 0;
264
- continue;
171
+ return generator.bind(this);
172
+ }
173
+ *tweenCode(code, time, timingFunction) {
174
+ if (typeof code === 'function')
175
+ throw new Error();
176
+ if (!CodeBlock_1.initialized())
177
+ return;
178
+ const currentParsedCode = parse(this.code(), { codeStyle: this.theme() });
179
+ const newParsedCode = parse(code, { codeStyle: this.theme() });
180
+ this.currentLineCount = this.getLineCountOfTokenArray(currentParsedCode);
181
+ this.newLineCount = this.getLineCountOfTokenArray(newParsedCode);
182
+ const autoWidth = this.width.isInitial();
183
+ const autoHeight = this.height.isInitial();
184
+ const fromSize = this.size();
185
+ const toSize = this.getTokensSize(newParsedCode);
186
+ const beginning = 0.2;
187
+ const ending = 0.8;
188
+ this.codeProgress(0);
189
+ this.diffed = diff(this.code(), code, { codeStyle: this.theme() });
190
+ yield* tween(time, value => {
191
+ const progress = timingFunction(value);
192
+ const remapped = clampRemap(beginning, ending, 0, 1, progress);
193
+ this.codeProgress(progress);
194
+ if (autoWidth) {
195
+ this.width(easeInOutSine(remapped, fromSize.x, toSize.x));
196
+ }
197
+ if (autoHeight) {
198
+ this.height(easeInOutSine(remapped, fromSize.y, toSize.y));
199
+ }
200
+ }, () => {
201
+ this.codeProgress(null);
202
+ this.diffed = null;
203
+ if (autoWidth) {
204
+ this.width.reset();
205
+ }
206
+ if (autoHeight) {
207
+ this.height.reset();
208
+ }
209
+ this.code(code);
210
+ });
211
+ }
212
+ async draw(context) {
213
+ if (!CodeBlock_1.initialized())
214
+ return;
215
+ this.requestFontUpdate();
216
+ this.applyStyle(context);
217
+ context.font = this.styles.font;
218
+ context.textBaseline = 'top';
219
+ const lh = parseFloat(this.styles.lineHeight);
220
+ const w = context.measureText('X').width;
221
+ const size = this.computedSize();
222
+ const progress = this.codeProgress();
223
+ const unselectedOpacity = this.unselectedOpacity();
224
+ const globalAlpha = context.globalAlpha;
225
+ const getSelectionAlpha = (x, y) => map(unselectedOpacity, 1, this.selectionStrength(x, y));
226
+ const drawToken = (code, position, alpha = 1) => {
227
+ for (let i = 0; i < code.length; i++) {
228
+ const char = code.charAt(i);
229
+ if (char === '\n') {
230
+ position.y++;
231
+ position.x = 0;
232
+ continue;
233
+ }
234
+ context.globalAlpha =
235
+ globalAlpha * alpha * getSelectionAlpha(position.x, position.y);
236
+ context.fillText(char, position.x * w, position.y * lh);
237
+ position.x++;
238
+ }
239
+ };
240
+ context.translate(size.x / -2, size.y / -2);
241
+ if (progress == null) {
242
+ const parsed = this.parsed();
243
+ const position = { x: 0, y: 0 };
244
+ for (const token of parsed) {
245
+ context.save();
246
+ context.fillStyle = token.color ?? '#c9d1d9';
247
+ drawToken(token.code, position);
248
+ context.restore();
249
+ }
265
250
  }
266
- context.globalAlpha =
267
- globalAlpha * alpha * getSelectionAlpha(position.x, position.y);
268
- context.fillText(char, position.x * w, position.y * lh);
269
- position.x++;
270
- }
271
- };
272
- context.translate(size.x / -2, size.y / -2);
273
- if (progress == null) {
274
- const parsed = this.parsed();
275
- const position = {x: 0, y: 0};
276
- for (const token of parsed) {
277
- context.save();
278
- context.fillStyle = token.color ?? '#c9d1d9';
279
- drawToken(token.code, position);
280
- context.restore();
281
- }
282
- } else {
283
- const diffed = this.diffed;
284
- const beginning = 0.2;
285
- const ending = 0.8;
286
- const overlap = 0.15;
287
- for (const token of diffed) {
288
- context.save();
289
- context.fillStyle = token.color ?? '#c9d1d9';
290
- if (token.morph === 'delete') {
291
- drawToken(
292
- token.code,
293
- {x: token.from[0], y: token.from[1]},
294
- clampRemap(0, beginning + overlap, 1, 0, progress),
295
- );
296
- } else if (token.morph === 'create') {
297
- drawToken(
298
- token.code,
299
- {x: token.to[0], y: token.to[1]},
300
- clampRemap(ending - overlap, 1, 0, 1, progress),
301
- );
302
- } else if (token.morph === 'retain') {
303
- const remapped = clampRemap(beginning, ending, 0, 1, progress);
304
- const x = easeInOutSine(remapped, token.from[0], token.to[0]);
305
- const y = easeInOutSine(remapped, token.from[1], token.to[1]);
306
- const point = remapped > 0.5 ? token.to : token.from;
307
- let offsetX = 0;
308
- let offsetY = 0;
309
- for (let i = 0; i < token.code.length; i++) {
310
- const char = token.code.charAt(i);
311
- if (char === '\n') {
312
- offsetY++;
313
- offsetX = 0;
314
- continue;
251
+ else {
252
+ const diffed = this.diffed;
253
+ const beginning = 0.2;
254
+ const ending = 0.8;
255
+ const overlap = 0.15;
256
+ for (const token of diffed) {
257
+ context.save();
258
+ context.fillStyle = token.color ?? '#c9d1d9';
259
+ if (token.morph === 'delete') {
260
+ drawToken(token.code, { x: token.from[0], y: token.from[1] }, clampRemap(0, beginning + overlap, 1, 0, progress));
261
+ }
262
+ else if (token.morph === 'create') {
263
+ drawToken(token.code, { x: token.to[0], y: token.to[1] }, clampRemap(ending - overlap, 1, 0, 1, progress));
264
+ }
265
+ else if (token.morph === 'retain') {
266
+ const remapped = clampRemap(beginning, ending, 0, 1, progress);
267
+ const x = easeInOutSine(remapped, token.from[0], token.to[0]);
268
+ const y = easeInOutSine(remapped, token.from[1], token.to[1]);
269
+ const point = remapped > 0.5 ? token.to : token.from;
270
+ let offsetX = 0;
271
+ let offsetY = 0;
272
+ for (let i = 0; i < token.code.length; i++) {
273
+ const char = token.code.charAt(i);
274
+ if (char === '\n') {
275
+ offsetY++;
276
+ offsetX = 0;
277
+ continue;
278
+ }
279
+ context.globalAlpha =
280
+ globalAlpha *
281
+ getSelectionAlpha(point[0] + offsetX, point[1] + offsetY);
282
+ context.fillText(char, (x + offsetX) * w, (y + offsetY) * lh);
283
+ offsetX++;
284
+ }
285
+ }
286
+ else {
287
+ useLogger().warn({
288
+ message: 'Invalid token',
289
+ object: token,
290
+ });
291
+ }
292
+ context.restore();
315
293
  }
316
- context.globalAlpha =
317
- globalAlpha *
318
- getSelectionAlpha(point[0] + offsetX, point[1] + offsetY);
319
- context.fillText(char, (x + offsetX) * w, (y + offsetY) * lh);
320
- offsetX++;
321
- }
322
- } else {
323
- useLogger().warn({
324
- message: 'Invalid token',
325
- object: token,
326
- });
327
294
  }
328
- context.restore();
329
- }
330
295
  }
331
- }
332
- selectionStrength(x, y) {
333
- const selection = this.selection();
334
- const selectionProgress = this.selectionProgress();
335
- const isSelected = CodeBlock_1.selectionStrength(selection, x, y);
336
- if (selectionProgress === null || this.oldSelection === null) {
337
- return isSelected ? 1 : 0;
296
+ selectionStrength(x, y) {
297
+ const selection = this.selection();
298
+ const selectionProgress = this.selectionProgress();
299
+ const isSelected = CodeBlock_1.selectionStrength(selection, x, y);
300
+ if (selectionProgress === null || this.oldSelection === null) {
301
+ return isSelected ? 1 : 0;
302
+ }
303
+ const wasSelected = CodeBlock_1.selectionStrength(this.oldSelection, x, y);
304
+ if (isSelected === wasSelected) {
305
+ return isSelected;
306
+ }
307
+ return map(wasSelected, isSelected, selectionProgress);
338
308
  }
339
- const wasSelected = CodeBlock_1.selectionStrength(this.oldSelection, x, y);
340
- if (isSelected === wasSelected) {
341
- return isSelected;
309
+ static selectionStrength(selection, x, y) {
310
+ return selection.length > 0 &&
311
+ !!selection.find(([[startLine, startColumn], [endLine, endColumn]]) => {
312
+ return (((y === startLine && x >= startColumn) || y > startLine) &&
313
+ ((y === endLine && x < endColumn) || y < endLine));
314
+ })
315
+ ? 1
316
+ : 0;
342
317
  }
343
- return map(wasSelected, isSelected, selectionProgress);
344
- }
345
- static selectionStrength(selection, x, y) {
346
- return selection.length > 0 &&
347
- !!selection.find(([[startLine, startColumn], [endLine, endColumn]]) => {
348
- return (
349
- ((y === startLine && x >= startColumn) || y > startLine) &&
350
- ((y === endLine && x < endColumn) || y < endLine)
351
- );
352
- })
353
- ? 1
354
- : 0;
355
- }
356
- });
357
- CodeBlock.initialized = createComputedAsync(
358
- () => ready().then(() => true),
359
- false,
360
- );
361
- __decorate([initial('tsx'), signal()], CodeBlock.prototype, 'language', void 0);
362
- __decorate(
363
- [
318
+ };
319
+ CodeBlock.initialized = createComputedAsync(() => ready().then(() => true), false);
320
+ __decorate([
321
+ initial('tsx'),
322
+ signal()
323
+ ], CodeBlock.prototype, "language", void 0);
324
+ __decorate([
364
325
  initial(''),
365
326
  parser(function (value) {
366
- return typeof value === 'string'
367
- ? {
368
- language: this.language(),
369
- spans: [value],
370
- nodes: [],
371
- }
372
- : value;
327
+ return typeof value === 'string'
328
+ ? {
329
+ language: this.language(),
330
+ spans: [value],
331
+ nodes: [],
332
+ }
333
+ : value;
373
334
  }),
374
- signal(),
375
- ],
376
- CodeBlock.prototype,
377
- 'code',
378
- void 0,
379
- );
380
- __decorate(
381
- [initial(undefined), signal()],
382
- CodeBlock.prototype,
383
- 'theme',
384
- void 0,
385
- );
386
- __decorate(
387
- [initial(lines(0, Infinity)), signal()],
388
- CodeBlock.prototype,
389
- 'selection',
390
- void 0,
391
- );
392
- __decorate(
393
- [initial(0.32), signal()],
394
- CodeBlock.prototype,
395
- 'unselectedOpacity',
396
- void 0,
397
- );
398
- __decorate([computed()], CodeBlock.prototype, 'lineCount', null);
399
- __decorate([computed()], CodeBlock.prototype, 'parsed', null);
400
- __decorate([computed()], CodeBlock.prototype, 'characterSize', null);
401
- __decorate([threadable()], CodeBlock.prototype, 'tweenCode', null);
402
- CodeBlock = CodeBlock_1 = __decorate([nodeName('CodeBlock')], CodeBlock);
403
- export {CodeBlock};
335
+ signal()
336
+ ], CodeBlock.prototype, "code", void 0);
337
+ __decorate([
338
+ initial(undefined),
339
+ signal()
340
+ ], CodeBlock.prototype, "theme", void 0);
341
+ __decorate([
342
+ initial(lines(0, Infinity)),
343
+ signal()
344
+ ], CodeBlock.prototype, "selection", void 0);
345
+ __decorate([
346
+ initial(0.32),
347
+ signal()
348
+ ], CodeBlock.prototype, "unselectedOpacity", void 0);
349
+ __decorate([
350
+ computed()
351
+ ], CodeBlock.prototype, "lineCount", null);
352
+ __decorate([
353
+ computed()
354
+ ], CodeBlock.prototype, "parsed", null);
355
+ __decorate([
356
+ computed()
357
+ ], CodeBlock.prototype, "characterSize", null);
358
+ __decorate([
359
+ threadable()
360
+ ], CodeBlock.prototype, "tweenCode", null);
361
+ CodeBlock = CodeBlock_1 = __decorate([
362
+ nodeName('CodeBlock')
363
+ ], CodeBlock);
364
+ export { CodeBlock };
404
365
  function isCodeModification(value) {
405
- return (
406
- value &&
407
- typeof value === 'object' &&
408
- value.from !== undefined &&
409
- value.to !== undefined
410
- );
366
+ return (value &&
367
+ typeof value === 'object' &&
368
+ value.from !== undefined &&
369
+ value.to !== undefined);
411
370
  }
412
371
  /**
413
372
  * Create a code modification that inserts a piece of code.
@@ -418,10 +377,10 @@ function isCodeModification(value) {
418
377
  * @param content - The code to insert.
419
378
  */
420
379
  export function insert(content) {
421
- return {
422
- from: '',
423
- to: content,
424
- };
380
+ return {
381
+ from: '',
382
+ to: content,
383
+ };
425
384
  }
426
385
  /**
427
386
  * Create a code modification that removes a piece of code.
@@ -432,10 +391,10 @@ export function insert(content) {
432
391
  * @param content - The code to remove.
433
392
  */
434
393
  export function remove(content) {
435
- return {
436
- from: content,
437
- to: '',
438
- };
394
+ return {
395
+ from: content,
396
+ to: '',
397
+ };
439
398
  }
440
399
  /**
441
400
  * Create a code modification that changes one piece of code into another.
@@ -447,7 +406,7 @@ export function remove(content) {
447
406
  * @param to - The code to change to.
448
407
  */
449
408
  export function edit(from, to) {
450
- return {from, to};
409
+ return { from, to };
451
410
  }
452
411
  /**
453
412
  * Create a selection range that highlights the given lines.
@@ -457,12 +416,12 @@ export function edit(from, to) {
457
416
  * will cover only one line.
458
417
  */
459
418
  export function lines(from, to) {
460
- return [
461
- [
462
- [from, 0],
463
- [to ?? from, Infinity],
464
- ],
465
- ];
419
+ return [
420
+ [
421
+ [from, 0],
422
+ [to ?? from, Infinity],
423
+ ],
424
+ ];
466
425
  }
467
426
  /**
468
427
  * Create a selection range that highlights the given word.
@@ -473,12 +432,12 @@ export function lines(from, to) {
473
432
  * the rest of the line.
474
433
  */
475
434
  export function word(line, from, length) {
476
- return [
477
- [
478
- [line, from],
479
- [line, from + (length ?? Infinity)],
480
- ],
481
- ];
435
+ return [
436
+ [
437
+ [line, from],
438
+ [line, from + (length ?? Infinity)],
439
+ ],
440
+ ];
482
441
  }
483
442
  /**
484
443
  * Create a custom selection range.
@@ -489,11 +448,11 @@ export function word(line, from, length) {
489
448
  * @param endColumn - The column at which the selection ends.
490
449
  */
491
450
  export function range(startLine, startColumn, endLine, endColumn) {
492
- return [
493
- [
494
- [startLine, startColumn],
495
- [endLine, endColumn],
496
- ],
497
- ];
451
+ return [
452
+ [
453
+ [startLine, startColumn],
454
+ [endLine, endColumn],
455
+ ],
456
+ ];
498
457
  }
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUJsb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL0NvZGVCbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBTyxFQU9MLE9BQU8sRUFDUCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQU1MLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFtQm5DLElBQU0sU0FBUyxpQkFBZixNQUFNLFNBQVUsU0FBUSxLQUFLO0lBK0J4QixDQUFDLGNBQWMsQ0FDdkIsS0FBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsY0FBOEI7UUFFOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFhUyx3QkFBd0IsQ0FBQyxNQUFlO1FBQ2hELElBQUksS0FBSyxHQUFH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
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29kZUJsb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL0NvZGVCbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsT0FBTyxFQU9MLE9BQU8sRUFDUCxVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxPQUFPLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQU1MLElBQUksRUFDSixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTFFLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFtQm5DLElBQU0sU0FBUyxpQkFBZixNQUFNLFNBQVUsU0FBUSxLQUFLO0lBK0J4QixDQUFDLGNBQWMsQ0FDdkIsS0FBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsY0FBOEI7UUFFOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFhUyx3QkFBd0IsQ0FBQyxNQUFlO1FBQ2hELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUVkLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDM0IsS0FBSyxFQUFFLENBQUM7Z0JBQ1YsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxDQUFDO1FBQ1YsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUdNLFNBQVM7UUFDZCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckMsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FDeEQsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBR1MsTUFBTTtRQUNkLElBQUksQ0FBQyxXQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsWUFBbUIsRUFBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQVk7UUFDL0MsS0FBSyxDQUFDO1lBQ0osVUFBVSxFQUFFLFdBQVc7WUFDdkIsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBbERHLGlCQUFZLEdBQUcsWUFBWSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUNqRCxzQkFBaUIsR0FBRyxZQUFZLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3RELGlCQUFZLEdBQXVCLElBQUksQ0FBQztRQUN4QyxXQUFNLEdBQXdCLElBQUksQ0FBQztRQUNuQyxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUE4Q3ZCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBR1MsYUFBYTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzdDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVsQixPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFa0IsV0FBVztRQUM1QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPO1lBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7U0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBZTtRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO29CQUMzQixJQUFJLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQzt3QkFDckIsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDbkIsQ0FBQztvQkFDRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNWLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN4QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQztRQUVELE9BQU8sRUFBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRWtCLHFCQUFxQjtRQUN0QyxLQUFLLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM5QixXQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVNLEdBQUcsQ0FBQyxPQUFpQixFQUFFLEdBQUcsSUFBVztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekIsS0FBSyxFQUFFLE9BQU87WUFDZCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNJLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLGtCQUF5QyxJQUFJO1FBQ3ZFLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FFakIsT0FBNkIsRUFDN0IsR0FBRyxJQUFpQztZQUVwQyxNQUFNLElBQUksR0FBRztnQkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDekIsS0FBSyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQzdCLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQ3BFO2FBQ0YsQ0FBQztZQUNGLE1BQU0sRUFBRSxHQUFHO2dCQUNULFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN6QixLQUFLLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztnQkFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDN0Isa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDbEU7YUFDRixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoQixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUM7Z0JBRTFDLE1BQU0sWUFBWSxHQUNoQixlQUFlLEtBQUssSUFBSTtvQkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO3lCQUNYLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDO3lCQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDWixDQUFDLEtBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDNUIsQ0FBQyxLQUFLLENBQUMsRUFBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7cUJBQ2pELENBQUM7b0JBQ04sQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFFdEIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFHTyxBQUFELENBQUMsU0FBUyxDQUNmLElBQWMsRUFDZCxJQUFZLEVBQ1osY0FBOEI7UUFFOUIsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxXQUFTLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTztRQUVyQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVqRCxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBRW5CLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUMsQ0FBQyxDQUFDO1FBQ2pFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FDVixJQUFJLEVBQ0osS0FBSyxDQUFDLEVBQUU7WUFDTixNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ25CLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixDQUFDO1lBQ0QsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3RCLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVrQixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWlDO1FBQzdELElBQUksQ0FBQyxXQUFTLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTztRQUVyQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDaEMsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDN0IsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFFeEMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUNqRCxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRCxNQUFNLFNBQVMsR0FBRyxDQUNoQixJQUFZLEVBQ1osUUFBMkIsRUFDM0IsS0FBSyxHQUFHLENBQUMsRUFDVCxFQUFFO1lBQ0YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2xCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDYixRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDZixTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLFdBQVc7b0JBQ2pCLFdBQVcsR0FBRyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixNQUFNLFFBQVEsR0FBRyxFQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO1lBQzlCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDO2dCQUM3QyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFPLENBQUM7WUFDNUIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDckIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUM7Z0JBRTdDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDN0IsU0FBUyxDQUNQLEtBQUssQ0FBQyxJQUFJLEVBQ1YsRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUN0QyxVQUFVLENBQUMsQ0FBQyxFQUFFLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDbkQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsU0FBUyxDQUNQLEtBQUssQ0FBQyxJQUFJLEVBQ1YsRUFBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUNsQyxVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FDaEQsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEUsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEUsTUFBTSxLQUFLLEdBQWMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUssQ0FBQztvQkFFbEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO29CQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7b0JBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMzQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbEMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7NEJBQ2xCLE9BQU8sRUFBRSxDQUFDOzRCQUNWLE9BQU8sR0FBRyxDQUFDLENBQUM7NEJBQ1osU0FBUzt3QkFDWCxDQUFDO3dCQUVELE9BQU8sQ0FBQyxXQUFXOzRCQUNqQixXQUFXO2dDQUNYLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO3dCQUU1RCxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQzlELE9BQU8sRUFBRSxDQUFDO29CQUNaLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDZixPQUFPLEVBQUUsZUFBZTt3QkFDeEIsTUFBTSxFQUFFLEtBQUs7cUJBQ2QsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVTLGlCQUFpQixDQUFDLENBQVMsRUFBRSxDQUFTO1FBQzlDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRW5ELE1BQU0sVUFBVSxHQUFHLFdBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksaUJBQWlCLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDN0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxXQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0IsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVMsTUFBTSxDQUFDLGlCQUFpQixDQUNoQyxTQUFzQixFQUN0QixDQUFTLEVBQ1QsQ0FBUztRQUVULE9BQU8sU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BFLE9BQU8sQ0FDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDeEQsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FDbEQsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7O0FBbGFjLHFCQUFXLEdBQUcsbUJBQW1CLENBQzlDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDOUIsS0FBSyxDQUNOLEFBSHlCLENBR3hCO0FBSXNCO0lBRnZCLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDZCxNQUFNLEVBQUU7MkNBQ29EO0FBYXJDO0lBWHZCLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDWCxNQUFNLENBQUMsVUFBMkIsS0FBVztRQUM1QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDOUIsQ0FBQyxDQUFDO2dCQUNFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN6QixLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLEVBQUU7YUFDVjtZQUNILENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDLENBQUM7SUFDRCxNQUFNLEVBQUU7dUNBQ2tEO0FBSW5DO0lBRnZCLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDbEIsTUFBTSxFQUFFO3dDQUNnRTtBQUlqRDtJQUZ2QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUU7NENBQzBEO0FBaUIzQztJQUZ2QixPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ2IsTUFBTSxFQUFFO29EQUM2RDtBQTRCL0Q7SUFETixRQUFRLEVBQUU7MENBVVY7QUFHUztJQURULFFBQVEsRUFBRTt1Q0FPVjtBQWFTO0lBRFQsUUFBUSxFQUFFOzhDQVdWO0FBMEhPO0lBRFAsVUFBVSxFQUFFOzBDQWlEWjtBQTdSVSxTQUFTO0lBRHJCLFFBQVEsQ0FBQyxXQUFXLENBQUM7R0FDVCxTQUFTLENBb2FyQjs7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEtBQVU7SUFDcEMsT0FBTyxDQUNMLEtBQUs7UUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUztRQUN4QixLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FDdkIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFhO0lBQ2xDLE9BQU87UUFDTCxJQUFJLEVBQUUsRUFBRTtRQUNSLEVBQUUsRUFBRSxPQUFPO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxPQUFhO0lBQ2xDLE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTztRQUNiLEVBQUUsRUFBRSxFQUFFO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxJQUFJLENBQUMsSUFBVSxFQUFFLEVBQVE7SUFDdkMsT0FBTyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxJQUFZLEVBQUUsRUFBVztJQUM3QyxPQUFPO1FBQ0w7WUFDRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDVCxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsUUFBUSxDQUFDO1NBQ3ZCO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLE1BQWU7SUFDOUQsT0FBTztRQUNMO1lBQ0UsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ1osQ0FBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDO1NBQ3BDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FDbkIsU0FBaUIsRUFDakIsV0FBbUIsRUFDbkIsT0FBZSxFQUNmLFNBQWlCO0lBRWpCLE9BQU87UUFDTDtZQUNFLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztZQUN4QixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUM7U0FDckI7S0FDRixDQUFDO0FBQ0osQ0FBQyJ9