@elastic/synthetics 1.0.0-beta.2 → 1.0.0-beta.22

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 (122) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/NOTICE.txt +250 -0
  3. package/README.md +2 -1
  4. package/dist/cli.js +87 -56
  5. package/dist/cli.js.map +1 -1
  6. package/dist/common_types.d.ts +116 -14
  7. package/dist/common_types.d.ts.map +1 -1
  8. package/dist/config.d.ts +2 -5
  9. package/dist/config.d.ts.map +1 -1
  10. package/dist/config.js +5 -5
  11. package/dist/config.js.map +1 -1
  12. package/dist/core/browser-service.js +5 -5
  13. package/dist/core/browser-service.js.map +1 -1
  14. package/dist/core/expect.d.ts +177 -0
  15. package/dist/core/expect.d.ts.map +1 -0
  16. package/dist/core/expect.js +33 -0
  17. package/dist/core/expect.js.map +1 -0
  18. package/dist/core/gatherer.d.ts +4 -7
  19. package/dist/core/gatherer.d.ts.map +1 -1
  20. package/dist/core/gatherer.js +39 -12
  21. package/dist/core/gatherer.js.map +1 -1
  22. package/dist/core/index.d.ts +5 -5
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +2 -2
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/logger.d.ts +0 -1
  27. package/dist/core/logger.d.ts.map +1 -1
  28. package/dist/core/logger.js +3 -16
  29. package/dist/core/logger.js.map +1 -1
  30. package/dist/core/runner.d.ts +54 -45
  31. package/dist/core/runner.d.ts.map +1 -1
  32. package/dist/core/runner.js +181 -71
  33. package/dist/core/runner.js.map +1 -1
  34. package/dist/dsl/journey.d.ts +13 -4
  35. package/dist/dsl/journey.d.ts.map +1 -1
  36. package/dist/dsl/journey.js +40 -1
  37. package/dist/dsl/journey.js.map +1 -1
  38. package/dist/formatter/javascript.d.ts +73 -0
  39. package/dist/formatter/javascript.d.ts.map +1 -0
  40. package/dist/formatter/javascript.js +274 -0
  41. package/dist/formatter/javascript.js.map +1 -0
  42. package/dist/helpers.d.ts +33 -12
  43. package/dist/helpers.d.ts.map +1 -1
  44. package/dist/helpers.js +108 -54
  45. package/dist/helpers.js.map +1 -1
  46. package/dist/index.d.ts +8 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +6 -7
  49. package/dist/index.js.map +1 -1
  50. package/dist/parse_args.d.ts +5 -2
  51. package/dist/parse_args.d.ts.map +1 -1
  52. package/dist/parse_args.js +59 -16
  53. package/dist/parse_args.js.map +1 -1
  54. package/dist/plugins/browser-console.d.ts +5 -8
  55. package/dist/plugins/browser-console.d.ts.map +1 -1
  56. package/dist/plugins/browser-console.js +27 -8
  57. package/dist/plugins/browser-console.js.map +1 -1
  58. package/dist/plugins/network.d.ts +23 -20
  59. package/dist/plugins/network.d.ts.map +1 -1
  60. package/dist/plugins/network.js +149 -124
  61. package/dist/plugins/network.js.map +1 -1
  62. package/dist/plugins/performance.d.ts +5 -5
  63. package/dist/plugins/performance.d.ts.map +1 -1
  64. package/dist/plugins/performance.js +5 -5
  65. package/dist/plugins/performance.js.map +1 -1
  66. package/dist/plugins/plugin-manager.d.ts +11 -11
  67. package/dist/plugins/plugin-manager.d.ts.map +1 -1
  68. package/dist/plugins/plugin-manager.js +40 -24
  69. package/dist/plugins/plugin-manager.js.map +1 -1
  70. package/dist/plugins/tracing.d.ts +10 -25
  71. package/dist/plugins/tracing.d.ts.map +1 -1
  72. package/dist/plugins/tracing.js +40 -26
  73. package/dist/plugins/tracing.js.map +1 -1
  74. package/dist/reporters/base.d.ts +0 -1
  75. package/dist/reporters/base.d.ts.map +1 -1
  76. package/dist/reporters/base.js +34 -32
  77. package/dist/reporters/base.js.map +1 -1
  78. package/dist/reporters/json.d.ts +46 -59
  79. package/dist/reporters/json.d.ts.map +1 -1
  80. package/dist/reporters/json.js +188 -70
  81. package/dist/reporters/json.js.map +1 -1
  82. package/dist/reporters/junit.d.ts.map +1 -1
  83. package/dist/reporters/junit.js +7 -7
  84. package/dist/reporters/junit.js.map +1 -1
  85. package/dist/sdk/lh-trace-processor.d.ts +304 -0
  86. package/dist/sdk/lh-trace-processor.d.ts.map +1 -0
  87. package/dist/sdk/lh-trace-processor.js +832 -0
  88. package/dist/sdk/lh-trace-processor.js.map +1 -0
  89. package/dist/sdk/trace-metrics.d.ts +61 -0
  90. package/dist/sdk/trace-metrics.d.ts.map +1 -0
  91. package/dist/sdk/trace-metrics.js +252 -0
  92. package/dist/sdk/trace-metrics.js.map +1 -0
  93. package/dist/sdk/trace-processor.d.ts +106 -0
  94. package/dist/sdk/trace-processor.d.ts.map +1 -0
  95. package/dist/sdk/trace-processor.js +74 -0
  96. package/dist/sdk/trace-processor.js.map +1 -0
  97. package/dist/tsconfig.tsbuildinfo +1 -1575
  98. package/package.json +27 -16
  99. package/src/cli.ts +68 -45
  100. package/src/common_types.ts +138 -14
  101. package/src/config.ts +2 -5
  102. package/src/core/expect.ts +187 -0
  103. package/src/core/gatherer.ts +48 -24
  104. package/src/core/index.ts +6 -6
  105. package/src/core/logger.ts +1 -12
  106. package/src/core/runner.ts +259 -112
  107. package/src/dsl/journey.ts +28 -6
  108. package/src/formatter/javascript.ts +330 -0
  109. package/src/helpers.ts +114 -24
  110. package/src/index.ts +7 -6
  111. package/src/parse_args.ts +97 -22
  112. package/src/plugins/browser-console.ts +30 -13
  113. package/src/plugins/network.ts +175 -159
  114. package/src/plugins/performance.ts +7 -7
  115. package/src/plugins/plugin-manager.ts +47 -36
  116. package/src/plugins/tracing.ts +43 -54
  117. package/src/reporters/base.ts +29 -23
  118. package/src/reporters/json.ts +259 -80
  119. package/src/reporters/junit.ts +1 -1
  120. package/src/sdk/lh-trace-processor.ts +1033 -0
  121. package/src/sdk/trace-metrics.ts +287 -0
  122. package/src/sdk/trace-processor.ts +147 -0
@@ -0,0 +1,304 @@
1
+ declare class TraceProcessor {
2
+ static get TIMESPAN_MARKER_ID(): string;
3
+ /**
4
+ * @return {Error}
5
+ */
6
+ static createNoNavstartError(): Error;
7
+ /**
8
+ * @return {Error}
9
+ */
10
+ static createNoResourceSendRequestError(): Error;
11
+ /**
12
+ * @return {Error}
13
+ */
14
+ static createNoTracingStartedError(): Error;
15
+ /**
16
+ * @return {Error}
17
+ */
18
+ static createNoFirstContentfulPaintError(): Error;
19
+ /**
20
+ * @return {Error}
21
+ */
22
+ static createNoLighthouseMarkerError(): Error;
23
+ /**
24
+ * Returns true if the event is a navigation start event of a document whose URL seems valid.
25
+ *
26
+ * @param {LH.TraceEvent} event
27
+ */
28
+ static _isNavigationStartOfInterest(event: any): boolean;
29
+ /**
30
+ * This method sorts a group of trace events that have the same timestamp. We want to...
31
+ *
32
+ * 1. Put E events first, we finish off our existing events before we start new ones.
33
+ * 2. Order B/X events by their duration, we want parents to start before child events.
34
+ * 3. If we don't have any of this to go on, just use the position in the original array (stable sort).
35
+ *
36
+ * Note that the typical group size with the same timestamp will be quite small (<10 or so events),
37
+ * and the number of groups typically ~1% of total trace, so the same ultra-performance-sensitive consideration
38
+ * given to functions that run on entire traces does not necessarily apply here.
39
+ *
40
+ * @param {number[]} tsGroupIndices
41
+ * @param {number[]} timestampSortedIndices
42
+ * @param {number} indexOfTsGroupIndicesStart
43
+ * @param {LH.TraceEvent[]} traceEvents
44
+ * @return {number[]}
45
+ */
46
+ static _sortTimestampEventGroup(tsGroupIndices: any, timestampSortedIndices: any, indexOfTsGroupIndicesStart: any, traceEvents: any): any[];
47
+ /**
48
+ * Sorts and filters trace events by timestamp and respecting the nesting structure inherent to
49
+ * parent/child event relationships.
50
+ *
51
+ * @param {LH.TraceEvent[]} traceEvents
52
+ * @param {(e: LH.TraceEvent) => boolean} filter
53
+ */
54
+ static filteredTraceSort(traceEvents: any, filter: any): any[];
55
+ /**
56
+ * There should *always* be at least one top level event, having 0 typically means something is
57
+ * drastically wrong with the trace and we should just give up early and loudly.
58
+ *
59
+ * @param {LH.TraceEvent[]} events
60
+ */
61
+ static assertHasToplevelEvents(events: any): void;
62
+ /**
63
+ * Calculate duration at specified percentiles for given population of
64
+ * durations.
65
+ * If one of the durations overlaps the end of the window, the full
66
+ * duration should be in the duration array, but the length not included
67
+ * within the window should be given as `clippedLength`. For instance, if a
68
+ * 50ms duration occurs 10ms before the end of the window, `50` should be in
69
+ * the `durations` array, and `clippedLength` should be set to 40.
70
+ * @see https://docs.google.com/document/d/1b9slyaB9yho91YTOkAQfpCdULFkZM9LqsipcX3t7He8/preview
71
+ * @param {!Array<number>} durations Array of durations, sorted in ascending order.
72
+ * @param {number} totalTime Total time (in ms) of interval containing durations.
73
+ * @param {!Array<number>} percentiles Array of percentiles of interest, in ascending order.
74
+ * @param {number=} clippedLength Optional length clipped from a duration overlapping end of window. Default of 0.
75
+ * @return {!Array<{percentile: number, time: number}>}
76
+ * @private
77
+ */
78
+ static _riskPercentiles(durations: any, totalTime: any, percentiles: any, clippedLength?: number): any[];
79
+ /**
80
+ * Calculates the maximum queueing time (in ms) of high priority tasks for
81
+ * selected percentiles within a window of the main thread.
82
+ * @see https://docs.google.com/document/d/1b9slyaB9yho91YTOkAQfpCdULFkZM9LqsipcX3t7He8/preview
83
+ * @param {Array<ToplevelEvent>} events
84
+ * @param {number} startTime Start time (in ms relative to timeOrigin) of range of interest.
85
+ * @param {number} endTime End time (in ms relative to timeOrigin) of range of interest.
86
+ * @param {!Array<number>=} percentiles Optional array of percentiles to compute. Defaults to [0.5, 0.75, 0.9, 0.99, 1].
87
+ * @return {!Array<{percentile: number, time: number}>}
88
+ */
89
+ static getRiskToResponsiveness(events: any, startTime: any, endTime: any, percentiles?: number[]): any[];
90
+ /**
91
+ * Provides durations in ms of all main thread top-level events
92
+ * @param {Array<ToplevelEvent>} topLevelEvents
93
+ * @param {number} startTime Optional start time (in ms relative to timeOrigin) of range of interest. Defaults to 0.
94
+ * @param {number} endTime Optional end time (in ms relative to timeOrigin) of range of interest. Defaults to trace end.
95
+ * @return {{durations: Array<number>, clippedLength: number}}
96
+ */
97
+ static getMainThreadTopLevelEventDurations(topLevelEvents: any, startTime?: number, endTime?: number): {
98
+ durations: any[];
99
+ clippedLength: number;
100
+ };
101
+ /**
102
+ * Provides the top level events on the main thread with timestamps in ms relative to timeOrigin.
103
+ * start.
104
+ * @param {LH.Artifacts.ProcessedTrace} trace
105
+ * @param {number=} startTime Optional start time (in ms relative to timeOrigin) of range of interest. Defaults to 0.
106
+ * @param {number=} endTime Optional end time (in ms relative to timeOrigin) of range of interest. Defaults to trace end.
107
+ * @return {Array<ToplevelEvent>}
108
+ */
109
+ static getMainThreadTopLevelEvents(trace: any, startTime?: number, endTime?: number): any[];
110
+ /**
111
+ * @param {LH.TraceEvent[]} events
112
+ * @return {{pid: number, tid: number, frameId: string}}
113
+ */
114
+ static findMainFrameIds(events: any): {
115
+ pid: any;
116
+ tid: any;
117
+ frameId: any;
118
+ };
119
+ /**
120
+ * @param {LH.TraceEvent} evt
121
+ * @return {boolean}
122
+ */
123
+ static isScheduleableTask(evt: any): boolean;
124
+ /**
125
+ * @param {LH.TraceEvent} evt
126
+ * @return {evt is LCPEvent}
127
+ */
128
+ static isLCPEvent(evt: any): boolean;
129
+ /**
130
+ * @param {LH.TraceEvent} evt
131
+ * @return {evt is LCPCandidateEvent}
132
+ */
133
+ static isLCPCandidateEvent(evt: any): boolean;
134
+ /**
135
+ * Returns the maximum LCP event across all frames in `events`.
136
+ * Sets `invalidated` flag if LCP of every frame is invalidated.
137
+ *
138
+ * LCP's trace event was first introduced in m78. We can't surface an LCP for older Chrome versions.
139
+ * LCP comes from a frame's latest `largestContentfulPaint::Candidate`, but it can be invalidated by a `largestContentfulPaint::Invalidate` event.
140
+ *
141
+ * @param {LH.TraceEvent[]} events
142
+ * @param {LH.TraceEvent} timeOriginEvent
143
+ * @return {{lcp: LCPEvent | undefined, invalidated: boolean}}
144
+ */
145
+ static computeValidLCPAllFrames(events: any, timeOriginEvent: any): {
146
+ lcp: any;
147
+ invalidated: boolean;
148
+ };
149
+ /**
150
+ * @param {Array<{id: string, url: string, parent?: string}>} frames
151
+ * @return {Map<string, string>}
152
+ */
153
+ static resolveRootFrames(frames: any): Map<any, any>;
154
+ /**
155
+ * Finds key trace events, identifies main process/thread, and returns timings of trace events
156
+ * in milliseconds since the time origin in addition to the standard microsecond monotonic timestamps.
157
+ * @param {LH.Trace} trace
158
+ * @param {{timeOriginDeterminationMethod?: TimeOriginDeterminationMethod}} [options]
159
+ * @return {LH.Artifacts.ProcessedTrace}
160
+ */
161
+ static processTrace(trace: any, options: any): {
162
+ frames: {
163
+ id: any;
164
+ url: any;
165
+ parent: any;
166
+ }[];
167
+ mainThreadEvents: any[];
168
+ frameEvents: any[];
169
+ frameTreeEvents: any[];
170
+ processEvents: any[];
171
+ mainFrameIds: {
172
+ pid: any;
173
+ tid: any;
174
+ frameId: any;
175
+ };
176
+ timeOriginEvt: any;
177
+ timings: {
178
+ timeOrigin: number;
179
+ traceEnd: number;
180
+ };
181
+ timestamps: {
182
+ timeOrigin: any;
183
+ traceEnd: number;
184
+ };
185
+ };
186
+ /**
187
+ * Finds key navigation trace events and computes timings of events in milliseconds since the time
188
+ * origin in addition to the standard microsecond monotonic timestamps.
189
+ * @param {LH.Artifacts.ProcessedTrace} processedTrace
190
+ * @return {LH.Artifacts.ProcessedNavigation}
191
+ */
192
+ static processNavigation(processedTrace: any): {
193
+ timings: {
194
+ timeOrigin: any;
195
+ firstPaint: number;
196
+ firstContentfulPaint: number;
197
+ firstContentfulPaintAllFrames: number;
198
+ firstMeaningfulPaint: number;
199
+ largestContentfulPaint: number;
200
+ largestContentfulPaintAllFrames: number;
201
+ load: number;
202
+ domContentLoaded: number;
203
+ traceEnd: any;
204
+ };
205
+ timestamps: {
206
+ timeOrigin: any;
207
+ firstPaint: any;
208
+ firstContentfulPaint: any;
209
+ firstContentfulPaintAllFrames: any;
210
+ firstMeaningfulPaint: any;
211
+ largestContentfulPaint: any;
212
+ largestContentfulPaintAllFrames: any;
213
+ load: any;
214
+ domContentLoaded: any;
215
+ traceEnd: any;
216
+ };
217
+ firstPaintEvt: any;
218
+ firstContentfulPaintEvt: any;
219
+ firstContentfulPaintAllFramesEvt: any;
220
+ firstMeaningfulPaintEvt: any;
221
+ largestContentfulPaintEvt: any;
222
+ largestContentfulPaintAllFramesEvt: any;
223
+ loadEvt: any;
224
+ domContentLoadedEvt: any;
225
+ fmpFellBack: boolean;
226
+ lcpInvalidated: boolean;
227
+ };
228
+ /**
229
+ * Computes the last observable timestamp in a set of trace events.
230
+ *
231
+ * @param {Array<LH.TraceEvent>} events
232
+ * @param {LH.TraceEvent} timeOriginEvt
233
+ * @return {{timing: number, timestamp: number}}
234
+ */
235
+ static computeTraceEnd(events: any, timeOriginEvt: any): {
236
+ timestamp: number;
237
+ timing: number;
238
+ };
239
+ /**
240
+ * Computes the time origin using the specified method.
241
+ *
242
+ * - firstResourceSendRequest
243
+ * Uses the time that the very first network request is sent in the main frame.
244
+ * Eventually should be used in place of lastNavigationStart as the default for navigations.
245
+ * This method includes the cost of all redirects when evaluating a navigation (which matches lantern behavior).
246
+ * The only difference between firstResourceSendRequest and the first `navigationStart` is
247
+ * the unload time of `about:blank` (which is a Lighthouse implementation detail and shouldn't be included).
248
+ *
249
+ * - lastNavigationStart
250
+ * Uses the time of the last `navigationStart` event in the main frame.
251
+ * The historical time origin of Lighthouse from 2016-Present.
252
+ * This method excludes the cost of client-side redirects when evaluating a navigation.
253
+ * Can also be skewed by several hundred milliseconds or even seconds when the browser takes a long
254
+ * time to unload `about:blank`.
255
+ *
256
+ * @param {{keyEvents: Array<LH.TraceEvent>, frameEvents: Array<LH.TraceEvent>, mainFrameIds: {frameId: string}}} traceEventSubsets
257
+ * @param {TimeOriginDeterminationMethod} method
258
+ * @return {LH.TraceEvent}
259
+ */
260
+ static computeTimeOrigin(traceEventSubsets: any, method: any): any;
261
+ /**
262
+ * Computes timings of trace events of key trace events in milliseconds since the time origin
263
+ * in addition to the standard microsecond monotonic timestamps.
264
+ * @param {Array<LH.TraceEvent>} frameEvents
265
+ * @param {{timeOriginEvt: LH.TraceEvent}} options
266
+ */
267
+ static computeNavigationTimingsForFrame(frameEvents: any, options: any): {
268
+ timings: {
269
+ timeOrigin: number;
270
+ firstPaint: number;
271
+ firstContentfulPaint: number;
272
+ firstMeaningfulPaint: number;
273
+ largestContentfulPaint: number;
274
+ load: number;
275
+ domContentLoaded: number;
276
+ };
277
+ timestamps: {
278
+ timeOrigin: any;
279
+ firstPaint: any;
280
+ firstContentfulPaint: any;
281
+ firstMeaningfulPaint: any;
282
+ largestContentfulPaint: any;
283
+ load: any;
284
+ domContentLoaded: any;
285
+ };
286
+ timeOriginEvt: any;
287
+ firstPaintEvt: any;
288
+ firstContentfulPaintEvt: any;
289
+ firstMeaningfulPaintEvt: any;
290
+ largestContentfulPaintEvt: any;
291
+ loadEvt: any;
292
+ domContentLoadedEvt: any;
293
+ fmpFellBack: boolean;
294
+ lcpInvalidated: boolean;
295
+ };
296
+ }
297
+ export default TraceProcessor;
298
+ /**
299
+ * @typedef ToplevelEvent
300
+ * @prop {number} start
301
+ * @prop {number} end
302
+ * @prop {number} duration
303
+ */
304
+ //# sourceMappingURL=lh-trace-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lh-trace-processor.d.ts","sourceRoot":"","sources":["../../src/sdk/lh-trace-processor.ts"],"names":[],"mappings":"AAyCA,cAAM,cAAc;IAClB,MAAM,KAAK,kBAAkB,WAE5B;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB;IAI5B;;OAEG;IACH,MAAM,CAAC,gCAAgC;IAIvC;;OAEG;IACH,MAAM,CAAC,2BAA2B;IAIlC;;OAEG;IACH,MAAM,CAAC,iCAAiC;IAIxC;;OAEG;IACH,MAAM,CAAC,6BAA6B;IAIpC;;;;OAIG;IACH,MAAM,CAAC,4BAA4B,CAAC,KAAK,KAAA;IASzC;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,wBAAwB,CAC7B,cAAc,KAAA,EACd,sBAAsB,KAAA,EACtB,0BAA0B,KAAA,EAC1B,WAAW,KAAA;IAwFb;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,WAAW,KAAA,EAAE,MAAM,KAAA;IAgD5C;;;;;OAKG;IACH,MAAM,CAAC,uBAAuB,CAAC,MAAM,KAAA;IAOrC;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,gBAAgB,CACrB,SAAS,KAAA,EACT,SAAS,KAAA,EACT,WAAW,KAAA,EACX,aAAa,SAAI;IAsDnB;;;;;;;;;OASG;IACH,MAAM,CAAC,uBAAuB,CAC5B,MAAM,KAAA,EACN,SAAS,KAAA,EACT,OAAO,KAAA,EACP,WAAW,WAA4B;IAkBzC;;;;;;OAMG;IACH,MAAM,CAAC,mCAAmC,CACxC,cAAc,KAAA,EACd,SAAS,SAAI,EACb,OAAO,SAAW;;;;IAmCpB;;;;;;;OAOG;IACH,MAAM,CAAC,2BAA2B,CAAC,KAAK,KAAA,EAAE,SAAS,SAAI,EAAE,OAAO,SAAW;IAoB3E;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,KAAA;;;;;IA+F9B;;;OAGG;IACH,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAA;IAS7B;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,KAAA;IASrB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,KAAA;IAU9B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,wBAAwB,CAAC,MAAM,KAAA,EAAE,eAAe,KAAA;;;;IAkCvD;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,KAAA;IAqB/B;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,KAAA,EAAE,OAAO,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;IAuGlC;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CAAC,cAAc,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqEvC;;;;;;OAMG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,KAAA,EAAE,aAAa,KAAA;;;;IAS5C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,KAAA,EAAE,MAAM,KAAA;IA6ClD;;;;;OAKG;IACH,MAAM,CAAC,gCAAgC,CAAC,WAAW,KAAA,EAAE,OAAO,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0F7D;AAED,eAAe,cAAc,CAAC;AAE9B;;;;;GAKG"}