vasille 1.2.9 → 2.0.3

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 (133) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +195 -129
  3. package/cdn/es2015.js +3231 -0
  4. package/cdn/es5.js +3675 -0
  5. package/flow-typed/vasille.js +839 -0
  6. package/lib/binding/attribute.js +32 -0
  7. package/lib/binding/binding.js +39 -0
  8. package/lib/binding/class.js +51 -0
  9. package/lib/binding/style.js +29 -0
  10. package/lib/core/core.js +186 -0
  11. package/lib/core/destroyable.js +45 -0
  12. package/lib/core/errors.js +16 -0
  13. package/lib/core/executor.js +154 -0
  14. package/lib/core/ivalue.js +56 -0
  15. package/lib/core/signal.js +50 -0
  16. package/lib/core/slot.js +47 -0
  17. package/lib/index.js +27 -22
  18. package/lib/models/array-model.js +208 -0
  19. package/lib/models/listener.js +130 -0
  20. package/lib/models/map-model.js +66 -0
  21. package/lib/models/model.js +1 -0
  22. package/lib/models/object-model.js +78 -0
  23. package/lib/models/set-model.js +62 -0
  24. package/lib/node/app.js +39 -0
  25. package/lib/node/interceptor.js +83 -0
  26. package/lib/node/node.js +1204 -0
  27. package/lib/node/watch.js +27 -0
  28. package/lib/value/expression.js +83 -0
  29. package/lib/value/mirror.js +58 -0
  30. package/lib/value/pointer.js +26 -0
  31. package/lib/value/reference.js +55 -0
  32. package/lib/views/array-view.js +21 -0
  33. package/lib/views/base-view.js +49 -0
  34. package/lib/views/map-view.js +19 -0
  35. package/lib/views/object-view.js +19 -0
  36. package/lib/views/repeat-node.js +106 -0
  37. package/lib/views/repeater.js +63 -0
  38. package/lib/views/set-view.js +22 -0
  39. package/package.json +26 -18
  40. package/types/binding/attribute.d.ts +23 -0
  41. package/types/binding/binding.d.ts +30 -0
  42. package/types/binding/class.d.ts +23 -0
  43. package/types/binding/style.d.ts +23 -0
  44. package/types/core/core.d.ts +144 -0
  45. package/types/core/destroyable.d.ts +15 -0
  46. package/types/core/errors.d.ts +4 -0
  47. package/types/core/executor.d.ts +87 -0
  48. package/types/core/ivalue.d.ts +45 -0
  49. package/types/core/signal.d.ts +35 -0
  50. package/types/core/slot.d.ts +45 -0
  51. package/types/index.d.ts +27 -21
  52. package/types/models/array-model.d.ts +103 -0
  53. package/types/models/listener.d.ts +74 -0
  54. package/types/models/map-model.d.ts +35 -0
  55. package/types/models/model.d.ts +19 -0
  56. package/types/models/object-model.d.ts +36 -0
  57. package/types/models/set-model.d.ts +34 -0
  58. package/types/node/app.d.ts +42 -0
  59. package/types/node/interceptor.d.ts +50 -0
  60. package/types/node/node.d.ts +741 -0
  61. package/types/node/watch.d.ts +23 -0
  62. package/types/value/expression.d.ts +60 -0
  63. package/types/value/mirror.d.ts +35 -0
  64. package/types/value/pointer.d.ts +19 -0
  65. package/types/value/reference.d.ts +30 -0
  66. package/types/views/array-view.d.ts +13 -0
  67. package/types/views/base-view.d.ts +43 -0
  68. package/types/views/map-view.d.ts +11 -0
  69. package/types/views/object-view.d.ts +11 -0
  70. package/types/views/repeat-node.d.ts +35 -0
  71. package/types/views/repeater.d.ts +38 -0
  72. package/types/views/set-view.d.ts +11 -0
  73. package/CHANGELOG.md +0 -23
  74. package/img/favicon.svg +0 -441
  75. package/img/getLocus.svg +0 -18
  76. package/img/logo.png +0 -0
  77. package/img/logo.svg +0 -550
  78. package/img/scores-o-log.png +0 -0
  79. package/img/scores-o.png +0 -0
  80. package/img/scores-wo-log.png +0 -0
  81. package/img/scores-wo.png +0 -0
  82. package/img/x1-x32.png +0 -0
  83. package/lib/attribute.js +0 -71
  84. package/lib/attribute.js.map +0 -1
  85. package/lib/bind.js +0 -286
  86. package/lib/bind.js.map +0 -1
  87. package/lib/class.js +0 -97
  88. package/lib/class.js.map +0 -1
  89. package/lib/executor.js +0 -167
  90. package/lib/executor.js.map +0 -1
  91. package/lib/index.js.map +0 -1
  92. package/lib/interfaces/core.js +0 -247
  93. package/lib/interfaces/core.js.map +0 -1
  94. package/lib/interfaces/destroyable.js +0 -39
  95. package/lib/interfaces/destroyable.js.map +0 -1
  96. package/lib/interfaces/errors.js +0 -49
  97. package/lib/interfaces/errors.js.map +0 -1
  98. package/lib/interfaces/ibind.js +0 -31
  99. package/lib/interfaces/ibind.js.map +0 -1
  100. package/lib/interfaces/idefinition.js +0 -64
  101. package/lib/interfaces/idefinition.js.map +0 -1
  102. package/lib/interfaces/ivalue.js +0 -60
  103. package/lib/interfaces/ivalue.js.map +0 -1
  104. package/lib/models.js +0 -579
  105. package/lib/models.js.map +0 -1
  106. package/lib/node.js +0 -2155
  107. package/lib/node.js.map +0 -1
  108. package/lib/property.js +0 -38
  109. package/lib/property.js.map +0 -1
  110. package/lib/style.js +0 -66
  111. package/lib/style.js.map +0 -1
  112. package/lib/value.js +0 -203
  113. package/lib/value.js.map +0 -1
  114. package/lib/views.js +0 -688
  115. package/lib/views.js.map +0 -1
  116. package/types/attribute.d.ts +0 -18
  117. package/types/bind.d.ts +0 -72
  118. package/types/class.d.ts +0 -19
  119. package/types/data.d.ts +0 -11
  120. package/types/event.d.ts +0 -10
  121. package/types/executor.d.ts +0 -57
  122. package/types/interfaces/core.d.ts +0 -129
  123. package/types/interfaces/destroyable.d.ts +0 -11
  124. package/types/interfaces/errors.d.ts +0 -24
  125. package/types/interfaces/ibind.d.ts +0 -19
  126. package/types/interfaces/idefinition.d.ts +0 -29
  127. package/types/interfaces/ivalue.d.ts +0 -40
  128. package/types/models.d.ts +0 -179
  129. package/types/node.d.ts +0 -906
  130. package/types/property.d.ts +0 -9
  131. package/types/style.d.ts +0 -28
  132. package/types/value.d.ts +0 -43
  133. package/types/views.d.ts +0 -135
package/lib/models.js DELETED
@@ -1,579 +0,0 @@
1
- //
2
- import { IValue } from "./interfaces/ivalue.js";
3
- import { Reference } from "./value.js";
4
-
5
-
6
-
7
- /**
8
- * Represent a listener for a model
9
- */
10
- class Listener {
11
- /**
12
- * Functions to run on adding new items
13
- * @type {Set<Function>}
14
- */
15
- onAdded;
16
-
17
- /**
18
- * Functions to run on item removing
19
- * @type {Set<Function>}
20
- */
21
- onRemoved;
22
-
23
- constructor () {
24
- Object.defineProperties(this, {
25
- onAdded: {
26
- value: new Set,
27
- writable: false,
28
- configurable: false
29
- },
30
- onRemoved: {
31
- value: new Set,
32
- writable: false,
33
- configurable: false
34
- }
35
- });
36
- }
37
-
38
- /**
39
- * Emits added event to listeners
40
- * @param index {number | string | *} index of value
41
- * @param value {IValue} value of added item
42
- */
43
- emitAdded (index, value) {
44
- for (let handler of this.onAdded) {
45
- handler(index, value);
46
- }
47
- }
48
-
49
- /**
50
- * Emits removed event to listeners
51
- * @param index {number | string | *} index of removed value
52
- * @param value {IValue} value of removed item
53
- */
54
- emitRemoved (index, value) {
55
- for (let handler of this.onRemoved) {
56
- handler(index, value);
57
- }
58
- }
59
-
60
- /**
61
- * Adds an handler to added event
62
- * @param handler {Function} function to run on event emitting
63
- */
64
- onAdd (handler) {
65
- this.onAdded.add(handler);
66
- }
67
-
68
- /**
69
- * Adds an handler to removed event
70
- * @param handler {Function} function to run on event emitting
71
- */
72
- onRemove (handler) {
73
- this.onRemoved.add(handler);
74
- }
75
-
76
- /**
77
- * Removes an handler from added event
78
- * @param handler {Function} handler to remove
79
- */
80
- offAdd (handler) {
81
- this.onAdded.delete(handler);
82
- }
83
-
84
- /**
85
- * Removes an handler form removed event
86
- * @param handler {Function} handler to remove
87
- */
88
- offRemove (handler) {
89
- this.onRemoved.delete(handler);
90
- }
91
- }
92
-
93
- /**
94
- * Model based on Array class
95
- * @extends Array<IValue>
96
- */
97
- export class ArrayModel extends Array {
98
- /**
99
- * Listener of array model
100
- * @type {Listener}
101
- */
102
- listener;
103
-
104
- /* Constructor */
105
-
106
- /**
107
- * Constructs an array model from an array
108
- * @param data {Array<IValue>} input data
109
- */
110
- constructor (data = []) {
111
- super();
112
-
113
- ObjectModel.defineProperty(this, 'listener', {
114
- value: new Listener,
115
- writable: false,
116
- customisable: false
117
- });
118
-
119
- for (let i = 0; i < data.length; i++) {
120
- super.push(vassilify(data[i]));
121
- }
122
- }
123
-
124
- /* Array members */
125
-
126
- /**
127
- * Gets the last value of array and null when it is empty
128
- * @return {?IValue}
129
- */
130
- get last () {
131
- return this.length ? this[this.length - 1] : null;
132
- }
133
-
134
- /**
135
- * Calls Array.fill and notify about changes
136
- * @param value {*} value to fill with
137
- * @param start {?number} begin index
138
- * @param end {?number} end index
139
- * @return {ArrayModel} a pointer to this
140
- */
141
- fill (value, start, end) {
142
- if (!start) {
143
- start = 0;
144
- }
145
- if (!end) {
146
- end = this.length;
147
- }
148
-
149
- for (let i = start; i < end; i++) {
150
- if (this[i] instanceof IValue) {
151
- this[i].$ = value;
152
- }
153
- }
154
- return this;
155
- }
156
-
157
- /**
158
- * Calls Array.pop and notify about changes
159
- * @return {IValue} removed value
160
- */
161
- pop () {
162
- let v = super.pop();
163
-
164
- if (v) {
165
- this.listener.emitRemoved(this.length, v);
166
- }
167
- return v;
168
- }
169
-
170
- /**
171
- * Calls Array.push and notify about changes
172
- * @param items {...IValue} values to push
173
- * @return {number} new length of array
174
- */
175
- push (...items) {
176
- for (let item of items) {
177
- let v = vassilify(item);
178
-
179
- this.listener.emitAdded(this.length, v);
180
- super.push(v);
181
- }
182
- return this.length;
183
- }
184
-
185
- /**
186
- * Calls Array.shift and notify about changed
187
- * @return {IValue} the shifted value
188
- */
189
- shift () {
190
- let v = super.shift();
191
-
192
- if (v) {
193
- this.listener.emitRemoved(0, v);
194
- }
195
- return v;
196
- }
197
-
198
- /**
199
- * Calls Array.splice and notify about changed
200
- * @param start {number} start index
201
- * @param deleteCount {?number} delete count
202
- * @param items {...IValue}
203
- * @return {ArrayModel} a pointer to this
204
- */
205
- splice (
206
- start,
207
- deleteCount,
208
- ...items
209
- ) {
210
- start = Math.min(start, this.length);
211
- items = items ? items.map((v) => vassilify(v)) : [];
212
- deleteCount = deleteCount || this.length - start;
213
-
214
- for (let i = 0; i < deleteCount; i++) {
215
- let index = start + deleteCount - i - 1;
216
- if (this[index]) {
217
- this.listener.emitRemoved(index, this[index]);
218
- }
219
- }
220
- for (let i = 0; i < items.length; i++) {
221
- this.listener.emitAdded(start + i, items[i]);
222
- }
223
-
224
- return new ArrayModel(super.splice(start, deleteCount, ...items));
225
- }
226
-
227
- /* Vasile.js array interface */
228
-
229
- /**
230
- * Calls Array.unshift and notify about changed
231
- * @param items {...IValue} values to insert
232
- * @return {number | void} the length after prepend
233
- */
234
- unshift (...items) {
235
- items = items.map((v) => vassilify(v));
236
-
237
- for (let i = 0; i < items.length; i++) {
238
- this.listener.emitAdded(i, items[i]);
239
- }
240
- return super.unshift(...items);
241
- }
242
-
243
- /**
244
- * Inserts a value to the end of array
245
- * @param v {*} value to insert
246
- * @return {this} a pointer to this
247
- */
248
- append (v) {
249
- v = vassilify(v);
250
- this.listener.emitAdded(this.length, v);
251
- super.push(v);
252
- return this;
253
- }
254
-
255
- /**
256
- * Clears array
257
- * @return {this} a pointer to this
258
- */
259
- clear () {
260
- for (let v of this) {
261
- this.listener.emitRemoved(0, v);
262
- }
263
- super.splice(0);
264
- return this;
265
- }
266
-
267
- /**
268
- * Inserts a value to position <i>index</i>
269
- * @param index {number} index to insert value
270
- * @param v {*} value to insert
271
- * @return {this} a pointer to this
272
- */
273
- insert (index, v) {
274
- v = vassilify(v);
275
- this.listener.emitAdded(index, v);
276
- super.splice(index, 0, v);
277
- return this;
278
- }
279
-
280
- /**
281
- * Inserts a value to the beginning of array
282
- * @param v {*} value to insert
283
- * @return {this} a pointer to this
284
- */
285
- prepend (v) {
286
- v = vassilify(v);
287
- this.listener.emitAdded(0, v);
288
- super.unshift(v);
289
- return this;
290
- }
291
-
292
- /**
293
- * Removes a value from an index
294
- * @param index {number} index of value to remove
295
- * @return {this} a pointer to this
296
- */
297
- removeAt (index) {
298
- if (this[index]) {
299
- this.listener.emitRemoved(index, this[index]);
300
- super.splice(index, 1);
301
- }
302
- return this;
303
- }
304
-
305
- /**
306
- * Removes the first value of array
307
- * @return {this} a pointer to this
308
- */
309
- removeFirst () {
310
- if (this.length) {
311
- this.listener.emitRemoved(0, this[0]);
312
- super.shift();
313
- }
314
- return this;
315
- }
316
-
317
- /**
318
- * Removes the ast value of array
319
- * @return {this} a pointer to this
320
- */
321
- removeLast () {
322
- if (this.last) {
323
- this.listener.emitRemoved(this.length - 1, this.last);
324
- super.pop();
325
- }
326
- return this;
327
- }
328
-
329
- /**
330
- * Remove the first occurrence of value
331
- * @param v {IValue} value to remove
332
- * @return {this}
333
- */
334
- removeOne (v) {
335
- this.removeAt(this.indexOf(v));
336
- return this;
337
- }
338
- }
339
-
340
- /**
341
- * A Object based model
342
- * @extends Object<String, IValue>
343
- */
344
- export class ObjectModel extends Object {
345
- /**
346
- * the listener of object
347
- * @type {Listener}
348
- */
349
- listener;
350
-
351
- /**
352
- * Constructs a object model from an object
353
- * @param obj {Object<String, IValue>} input data
354
- */
355
- constructor (obj = {}) {
356
- super();
357
-
358
- ObjectModel.defineProperty(this, 'listener', {
359
- value: new Listener,
360
- writable: false,
361
- customisable: false
362
- });
363
-
364
- let ts = this;
365
-
366
- for (let i in obj) {
367
- ts[i] = vassilify(obj[i]);
368
- }
369
- }
370
-
371
- /**
372
- * Gets a value of a field
373
- * @param key {string}
374
- * @return {IValue<*>}
375
- */
376
- get (key) {
377
- let ts = this;
378
-
379
- return ts[key];
380
- }
381
-
382
- /**
383
- * Sets a object property value <b>(use for new properties only)</b>
384
- * @param key {string} property name
385
- * @param v {*} property value
386
- * @return {ObjectModel} a pointer to this
387
- */
388
- set (key, v) {
389
- let ts = this;
390
-
391
- if (ts[key]) {
392
- this.listener.emitRemoved(key, ts[key]);
393
- }
394
- ts[key] = vassilify(v);
395
- this.listener.emitAdded(key, ts[key]);
396
-
397
- return this;
398
- }
399
-
400
- /**
401
- * Deletes a object property
402
- * @param key {string} property name
403
- */
404
- delete (key) {
405
- let ts = this;
406
-
407
- if (ts[key]) {
408
- this.listener.emitRemoved(key, ts[key]);
409
- delete ts[key];
410
- }
411
- }
412
- }
413
-
414
- /**
415
- * A Map based memory
416
- * @extends Map<*, IValue>
417
- */
418
- export class MapModel extends Map {
419
- /**
420
- * listener of map
421
- * @type {Listener}
422
- */
423
- listener;
424
-
425
- /**
426
- * Constructs a map model based on a map
427
- * @param map {Map<*, IValue>} input data
428
- */
429
- constructor (map = new Map) {
430
- super();
431
-
432
- ObjectModel.defineProperty(this, 'listener', {
433
- value: new Listener,
434
- writable: false,
435
- customisable: false
436
- });
437
-
438
- for (let data of map) {
439
- super.set(data[0], vassilify(data[1]));
440
- }
441
- }
442
-
443
- /**
444
- * Calls Map.clear and notify abut changes
445
- */
446
- clear () {
447
- for (let data of this) {
448
- this.listener.emitRemoved(data[0], data[1]);
449
- }
450
- super.clear();
451
- }
452
-
453
- /**
454
- * Calls Map.delete and notify abut changes
455
- * @param key {*} key
456
- * @return {boolean} true if removed something, otherwise false
457
- */
458
- delete (key) {
459
- let tmp = super.get(key);
460
- if (tmp) {
461
- this.listener.emitRemoved(key, tmp);
462
- }
463
- return super.delete(key);
464
- }
465
-
466
- /**
467
- * Calls Map.set and notify abut changes
468
- * @param key {*} key
469
- * @param value {IValue} value
470
- * @return {MapModel} a pointer to this
471
- */
472
- set (key, value) {
473
- let tmp = super.get(key);
474
- if (tmp) {
475
- this.listener.emitRemoved(key, tmp);
476
- }
477
-
478
- let v = vassilify(value);
479
- super.set(key, v);
480
- this.listener.emitAdded(key, v);
481
-
482
- return this;
483
- }
484
- }
485
-
486
- /**
487
- * A Set based model
488
- * @extends Set<IValue>
489
- */
490
- export class SetModel extends Set {
491
- listener;
492
-
493
- /**
494
- * Constructs a set model based on a set
495
- * @param set {Set<IValue>} input data
496
- */
497
- constructor (set = new Set) {
498
- super();
499
-
500
- ObjectModel.defineProperty(this, 'listener', {
501
- value: new Listener,
502
- writable: false,
503
- customisable: false
504
- });
505
-
506
- for (let item of set) {
507
- super.add(vassilify(item));
508
- }
509
- }
510
-
511
- /**
512
- * Calls Set.add and notify abut changes
513
- * @param value {*} value
514
- * @return {this} a pointer to this
515
- */
516
- add (value) {
517
- value = vassilify(value);
518
-
519
- if (!super.has(value)) {
520
- this.listener.emitAdded(null, value);
521
- super.add(value);
522
- }
523
- return this;
524
- }
525
-
526
- /**
527
- * Calls Set.clear and notify abut changes
528
- */
529
- clear () {
530
- for (let item of this) {
531
- this.listener.emitRemoved(null, item);
532
- }
533
- super.clear();
534
- }
535
-
536
- /**
537
- * Calls Set.delete and notify abut changes
538
- * @param value {IValue}
539
- * @return {boolean} true if a value was deleted, otherwise false
540
- */
541
- delete (value) {
542
- if (super.has(value)) {
543
- this.listener.emitRemoved(null, value);
544
- }
545
- return super.delete(value);
546
- }
547
- }
548
-
549
- /**
550
- * Transforms a JS value to a Vasille.js value
551
- * @param v {*} input value
552
- * @return {IValue} transformed value
553
- */
554
- export function vassilify (v) {
555
- let ret;
556
-
557
- if (v instanceof IValue) {
558
- ret = v;
559
- }
560
- else if (Array.isArray(v)) {
561
- ret = new Reference(new ArrayModel(v));
562
- }
563
- else if (v instanceof Map) {
564
- ret = new Reference(new MapModel(v));
565
- }
566
- else if (v instanceof Set) {
567
- ret = new Reference(new SetModel(v));
568
- }
569
- else if (v instanceof Object && v.constructor === Object) {
570
- ret = new Reference(new ObjectModel(v));
571
- }
572
- else {
573
- ret = new Reference(v);
574
- }
575
-
576
- return ret;
577
- }
578
-
579
- //# sourceMappingURL=models.js.map
package/lib/models.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/models.js"],"names":[],"mappings":"GAAG,AAAK;;;;;;;;;;;;;;YAcI,AAAA,AAAe;;;;;;cAMb,AAAA,AAAe;;;;;;;;;;;;;;;;;;;;;;qBAsBR,AAAA,AAAuB,QAAQ,AAAA,AAAa;;;;;;;;;;;uBAW1C,AAAA,AAAuB,QAAQ,AAAA,AAAa;;;;;;;;;;mBAUhD,AAAA,AAAU;;;;;;;;sBAQP,AAAA,AAAU;;;;;;;;oBAQZ,AAAA,AAAU;;;;;;;;uBAQP,AAAA,AAAU;;;;;;;;;uBASV,AAAG,cAAc,AAAW;;;;;aAKtC,AAAA,AAAU;;;;;;;;sBAQD,AAAA,AAAY;;;;;;;;;;;;;;;;;;;;gBAoBlB,AAAA,AAAY;;;;;;;;;;;gBAWZ,AAAA,AAAK,QAAQ,AAAA,AAAS,MAAM,AAAA,AAAS,EAAE,AAAA,AAAM;;;;;;;;;;;;;;;;;;;;WAoBlD,AAAA,AAAW;;;;;;;;;;;;;;mBAcH,AAAA,AAAY,EAAE,AAAA,AAAQ;;;;;;;;;;;;;;aAc5B,AAAA,AAAW;;;;;;;;;;;;;;;;;cAiBV,AAAA,AAAQ;oBACF,AAAA,AAAS;iBACZ,AAAA,AAAa;MACxB,AAAA,AAAe;;;;;;;;;;;;;;;;;;;;;;;;;sBAyBC,AAAA,AAAY,EAAE,AAAA,AAAQ;;;;;;;;;;;;;;cAc9B,AAAA,AAAK,EAAE,AAAA,AAAM;;;;;;;;;;;aAWd,AAAA,AAAM;;;;;;;;;;;;;;kBAcD,AAAA,AAAQ,IAAI,AAAA,AAAK,EAAE,AAAA,AAAM;;;;;;;;;;;;eAY5B,AAAA,AAAK,EAAE,AAAA,AAAM;;;;;;;;;;;;oBAYR,AAAA,AAAQ,EAAE,AAAA,AAAM;;;;;;;;;;;;mBAYjB,AAAA,AAAM;;;;;;;;;;;;kBAYP,AAAA,AAAM;;;;;;;;;;;;;iBAaP,AAAA,AAAW,EAAE,AAAA,AAAM;;;;;;;;;;wBAUZ,AAAG;;;;;aAKd,AAAA,AAAU;;;;;;qBAMF,AAAA,AAAQ;;;;;;;;;eASd,AAAA,AAAgC;;;;;;;;;;;;aAYlC,AAAA,AAAQ,EAAE,AAAA,AAAW;eACnB,AAAA,AAAgC;;;;;;;;;;;aAWlC,AAAA,AAAQ,IAAI,AAAA,AAAK,EAAE,AAAA,AAAM;eACvB,AAAA,AAAgC;;;;;;;;;;;;;;;gBAe/B,AAAA,AAAQ;eACT,AAAA,AAAgC;;;;;;;;;;;;;qBAa1B,AAAM,YAAY,AAAc;;;;;aAKxC,AAAA,AAAU;;;;;;qBAMF,AAAA,AAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA6BlB,AAAA,AAAK,EAAE,AAAA,AAAS;;;;;;;;;;;;;;aAcnB,AAAA,AAAK,QAAQ,AAAA,AAAK,EAAE,AAAA,AAAM;;;;;;;;;;;;;;;;;;qBAkBlB,AAAG,YAAY,AAAW;aAClC,AAAA,AAAU;;;;;;qBAMF,AAAA,AAAU;;;;;;;;;;;;;;;;;;;eAmBhB,AAAA,AAAK,EAAE,AAAA,AAAM;;;;;;;;;;;;;;;;;;;;;;;;;kBAyBV,AAAA,AAAW,EAAE,AAAA,AAAS;;;;;;;;;;;;;6BAaX,AAAA,AAAK,EAAE,AAAA,AAAa"}