@drayman/core 2.10.0 → 3.1.0

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.
@@ -29,6 +29,7 @@ const utils_1 = require("./utils");
29
29
  const fs_1 = __importDefault(require("fs"));
30
30
  const path_1 = __importDefault(require("path"));
31
31
  const shortid_1 = __importDefault(require("shortid"));
32
+ const v8_1 = __importDefault(require("v8"));
32
33
  const worker_1 = require("threads/worker");
33
34
  const observable_1 = require("threads/observable");
34
35
  let subject = new observable_1.Subject();
@@ -44,6 +45,14 @@ const portWritable = new stream_1.Writable({
44
45
  });
45
46
  process.stdout.write = process.stderr.write = portWritable.write.bind(portWritable);
46
47
  consola.wrapAll();
48
+ setInterval(() => {
49
+ sendMessage({
50
+ type: 'heartbeat',
51
+ payload: {
52
+ heapStatistics: v8_1.default.getHeapStatistics(),
53
+ },
54
+ });
55
+ }, 500);
47
56
  class EventHubClass {
48
57
  constructor() {
49
58
  this.#handlers = {};
@@ -72,47 +81,113 @@ const EventHub = new EventHubClass();
72
81
  const ComponentInstance = {};
73
82
  const activeRequests = new Map();
74
83
  const renderedComps = {};
84
+ const forceUpdateInitiators = new Set();
85
+ const pendingChildUpdates = new Set();
86
+ let currentGeneration = 0;
75
87
  let browserCallbacks = {};
76
88
  let treeEvents = {};
89
+ let eventOwners = {};
77
90
  let forceUpdate;
78
91
  let prevProps = {};
79
92
  let props = {};
80
93
  let defaultProps = {};
81
94
  let extensions = { importable: null };
82
95
  let updateId = 0;
83
- const initializeComponentInstance = async ({ componentInstanceId, browserCommands = [], serverCommands = [], extensionsPath, extensionsOptions, componentRootDir, componentName, componentOptions, componentNamePrefix = '' }) => {
84
- ComponentInstance.id = componentInstanceId;
85
- if (extensionsPath) {
86
- extensions = await require(path_1.default.join(process.cwd(), extensionsPath))(extensionsOptions);
96
+ let sentView;
97
+ let onInitRan = false;
98
+ const isAbortError = (err) => {
99
+ const msg = String(err?.message || err || '');
100
+ return /aborted/i.test(msg) || msg.includes('Exclusive request aborted');
101
+ };
102
+ const isInvalidParamsError = (err) => String(err?.message || err || '').includes('Invalid Params');
103
+ const createChildComponentInstance = (cacheKey) => ({
104
+ id: `${ComponentInstance.id}:${cacheKey}`,
105
+ parentId: ComponentInstance.id,
106
+ __draymanDestroyed: false,
107
+ });
108
+ const runChildOnInit = (entry) => {
109
+ if (!entry.childInitCalled && entry.childInstance?.onInit) {
110
+ entry.childInitCalled = true;
111
+ queueMicrotask(async () => {
112
+ if (entry.childDestroyed || entry.childInstance?.__draymanDestroyed) {
113
+ return;
114
+ }
115
+ try {
116
+ await entry.childInstance.onInit();
117
+ }
118
+ catch (err) {
119
+ if (!isAbortError(err) && !isInvalidParamsError(err)) {
120
+ console.error(err);
121
+ }
122
+ }
123
+ });
87
124
  }
88
- const Browser = {};
89
- for (const command of browserCommands) {
90
- Browser[command] = async (data = {}, elements) => new Promise((resolve, reject) => {
91
- const newData = {};
92
- for (const key of Object.keys(data || {})) {
93
- if (typeof data[key] === 'function') {
94
- const callbackId = shortid_1.default.generate();
95
- newData[key] = callbackId;
96
- browserCallbacks[callbackId] = {
97
- callback: async (response) => await data[key](response),
98
- once: false,
99
- };
125
+ };
126
+ const runChildOnDestroy = async (entry) => {
127
+ if (entry.childDestroyed) {
128
+ return;
129
+ }
130
+ entry.childDestroyed = true;
131
+ if (entry.childInstance) {
132
+ entry.childInstance.__draymanDestroyed = true;
133
+ }
134
+ if (entry.childInstance?.onDestroy) {
135
+ await entry.childInstance.onDestroy();
136
+ }
137
+ };
138
+ const guardEventsWithInstance = (node, instance) => {
139
+ if (!node)
140
+ return;
141
+ if (Array.isArray(node)) {
142
+ node.forEach(child => guardEventsWithInstance(child, instance));
143
+ return;
144
+ }
145
+ if (typeof node !== 'object')
146
+ return;
147
+ const wrap = (fn) => {
148
+ if (typeof fn !== 'function')
149
+ return fn;
150
+ return async (...args) => {
151
+ if (instance?.__draymanDestroyed)
152
+ return;
153
+ try {
154
+ return await fn(...args);
155
+ }
156
+ catch (err) {
157
+ if (instance?.__draymanDestroyed || isAbortError(err) || isInvalidParamsError(err))
158
+ return;
159
+ throw err;
160
+ }
161
+ };
162
+ };
163
+ const props = node.props;
164
+ if (props && typeof props === 'object') {
165
+ for (const key of Object.keys(props)) {
166
+ if (utils_1.isEvent(key)) {
167
+ const val = props[key];
168
+ if (typeof val === 'function') {
169
+ props[key] = wrap(val);
100
170
  }
101
- else {
102
- newData[key] = data[key];
171
+ else if (Array.isArray(val) && typeof val[0] === 'function') {
172
+ props[key] = [wrap(val[0]), val[1]];
103
173
  }
104
174
  }
105
- const callbackId = shortid_1.default.generate();
106
- browserCallbacks[callbackId] = {
107
- callback: (response) => resolve(response),
108
- once: true,
109
- };
110
- sendMessage({ type: 'browserCommand', payload: { data: newData, callbackId, command, elements } });
111
- });
175
+ }
176
+ if (props.children) {
177
+ guardEventsWithInstance(props.children, instance);
178
+ }
112
179
  }
113
- const Server = {};
114
- for (const command of serverCommands) {
115
- Server[command] = async (data = {}) => new Promise((resolve, reject) => {
180
+ };
181
+ const findRenderedEntryByEvent = (eventName) => {
182
+ const cacheKey = eventOwners[eventName];
183
+ if (!cacheKey)
184
+ return undefined;
185
+ return renderedComps[cacheKey];
186
+ };
187
+ const buildCommandProxy = (commands, type) => {
188
+ const proxy = {};
189
+ for (const command of commands) {
190
+ proxy[command] = async (data = {}, elements) => new Promise((resolve) => {
116
191
  const newData = {};
117
192
  for (const key of Object.keys(data || {})) {
118
193
  if (typeof data[key] === 'function') {
@@ -132,9 +207,23 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
132
207
  callback: (response) => resolve(response),
133
208
  once: true,
134
209
  };
135
- sendMessage({ type: 'serverCommand', payload: { data: newData, callbackId, command, } });
210
+ const payload = { data: newData, callbackId, command };
211
+ if (type === 'browserCommand') {
212
+ payload.elements = elements;
213
+ }
214
+ sendMessage({ type, payload });
136
215
  });
137
216
  }
217
+ return proxy;
218
+ };
219
+ const initializeComponentInstance = async ({ componentInstanceId, browserCommands = [], serverCommands = [], extensionsPath, extensionsOptions, componentRootDir, componentName, componentOptions, componentNamePrefix = '' }) => {
220
+ onInitRan = false;
221
+ ComponentInstance.id = componentInstanceId;
222
+ if (extensionsPath) {
223
+ extensions = await require(path_1.default.join(process.cwd(), extensionsPath))(extensionsOptions);
224
+ }
225
+ const Browser = buildCommandProxy(browserCommands, 'browserCommand');
226
+ const Server = buildCommandProxy(serverCommands, 'serverCommand');
138
227
  props = componentOptions || {};
139
228
  for (const key of Object.keys(props)) {
140
229
  if (utils_1.isEvent(key)) {
@@ -151,21 +240,45 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
151
240
  .replace('.js', ''));
152
241
  const Components = {};
153
242
  componentNames.forEach(x => Components[x] = x);
154
- const childRenderer = async (type, key, props) => {
155
- if (componentNames.includes(type)) {
156
- if (!renderedComps[key]) {
157
- const result = await createComponent(type, props);
158
- renderedComps[key] = { result };
159
- }
160
- renderedComps[key].called = true;
161
- return await renderedComps[key].result(props);
243
+ const resolveRenderedEntry = async (type, key, initialProps) => {
244
+ const cacheKey = `${type}::${key}`;
245
+ let entry = renderedComps[cacheKey];
246
+ if (!entry) {
247
+ const ready = (async () => await createComponent(type, initialProps, cacheKey))();
248
+ entry = renderedComps[cacheKey] = { ready, generation: currentGeneration };
249
+ }
250
+ if (!entry.renderer) {
251
+ const created = await entry.ready;
252
+ entry.renderer = created.renderer;
253
+ entry.childInstance = created.childInstance;
162
254
  }
163
- return null;
255
+ entry.generation = currentGeneration;
256
+ return entry;
164
257
  };
165
- const createComponent = async (componentKey, initialProps) => {
166
- const props = { ...initialProps } || {};
258
+ const childRenderer = async (type, key, props, parentDirty = false) => {
259
+ if (!componentNames.includes(type)) {
260
+ return null;
261
+ }
262
+ const cacheKey = `${type}::${key}`;
263
+ const entry = await resolveRenderedEntry(type, key, props);
264
+ const iAmDirty = parentDirty || forceUpdateInitiators.has(cacheKey);
265
+ if (!iAmDirty && entry.cachedResult !== undefined) {
266
+ return { result: entry.cachedResult, isDirty: false, cacheKey };
267
+ }
268
+ const result = await entry.renderer(props);
269
+ runChildOnInit(entry);
270
+ entry.cachedResult = result;
271
+ return { result, isDirty: iAmDirty, cacheKey };
272
+ };
273
+ const createComponent = async (componentKey, initialProps, cacheKey) => {
274
+ const props = { ...initialProps };
167
275
  let defaultProps = {};
168
276
  let child_componentResult;
277
+ const childComponentInstance = createChildComponentInstance(cacheKey);
278
+ const scopedForceUpdate = async () => {
279
+ pendingChildUpdates.add(cacheKey);
280
+ await forceUpdate(true);
281
+ };
169
282
  try {
170
283
  const imported = await Promise.resolve().then(() => __importStar(require(path_1.default.join(process.cwd(), componentRootDir, `${componentNamePrefix}${componentKey}.js`))));
171
284
  defaultProps = imported.defaultProps || {};
@@ -175,24 +288,32 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
175
288
  }
176
289
  }
177
290
  child_componentResult = await imported.component({
178
- forceUpdate,
291
+ forceUpdate: scopedForceUpdate,
179
292
  props,
180
293
  EventHub,
181
294
  Components,
182
295
  Browser,
183
296
  Server,
184
- ComponentInstance,
297
+ ComponentInstance: childComponentInstance,
185
298
  ...extensions.importable,
186
299
  });
300
+ if (childComponentInstance.__draymanDestroyed) {
301
+ return { renderer: async () => null, childInstance: childComponentInstance };
302
+ }
187
303
  }
188
304
  catch (err) {
189
- console.error(err);
190
- child_componentResult = async () => {
191
- return errorComp(`Child component "${componentKey}" failed to initialize!`, err.message);
192
- };
305
+ if (childComponentInstance.__draymanDestroyed || isAbortError(err)) {
306
+ child_componentResult = async () => null;
307
+ }
308
+ else {
309
+ console.error(err);
310
+ child_componentResult = async () => {
311
+ return errorComp(`Child component "${componentKey}" failed to initialize!`, err.message);
312
+ };
313
+ }
193
314
  }
194
315
  let prevChildProps = { ...defaultProps };
195
- return async (newProps) => {
316
+ const renderer = async (newProps) => {
196
317
  updatePreservingRef(props, newProps);
197
318
  let res;
198
319
  try {
@@ -201,18 +322,38 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
201
322
  props[key] = defaultProps[key];
202
323
  }
203
324
  }
325
+ if (childComponentInstance.__draymanDestroyed) {
326
+ return null;
327
+ }
204
328
  res = await child_componentResult({ prevProps: prevChildProps });
329
+ guardEventsWithInstance(res, childComponentInstance);
205
330
  }
206
331
  catch (err) {
332
+ if (childComponentInstance.__draymanDestroyed || isAbortError(err)) {
333
+ return null;
334
+ }
207
335
  console.error(err);
208
336
  res = errorComp(`Child component "${componentKey}" failed to render!`, err.message);
209
337
  }
210
338
  prevChildProps = { ...props };
211
339
  return res;
212
340
  };
341
+ return { renderer, childInstance: childComponentInstance };
213
342
  };
214
- forceUpdate = async () => {
343
+ let cachedParentResult = null;
344
+ let scheduledRender = null;
345
+ let renderPromise = null;
346
+ let resolveRender = null;
347
+ let rootNeedsUpdate = false;
348
+ let inFlightRender = null;
349
+ const doForceUpdate = async () => {
350
+ const currentEventOwners = {};
351
+ for (const key of pendingChildUpdates) {
352
+ forceUpdateInitiators.add(key);
353
+ }
354
+ pendingChildUpdates.clear();
215
355
  updateId++;
356
+ currentGeneration++;
216
357
  let compResult;
217
358
  let result;
218
359
  try {
@@ -221,28 +362,81 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
221
362
  props[key] = defaultProps[key];
222
363
  }
223
364
  }
224
- compResult = await componentResult({ prevProps });
225
- result = await utils_1.render(compResult, childRenderer);
365
+ const isRootInitiated = rootNeedsUpdate || forceUpdateInitiators.size === 0;
366
+ rootNeedsUpdate = false;
367
+ if (isRootInitiated || !cachedParentResult) {
368
+ compResult = await componentResult({ prevProps });
369
+ cachedParentResult = compResult;
370
+ }
371
+ else {
372
+ compResult = cachedParentResult;
373
+ }
374
+ result = await utils_1.render(compResult, childRenderer, [], {}, '', isRootInitiated, '', currentEventOwners);
226
375
  }
227
376
  catch (err) {
228
377
  console.error(err);
229
378
  compResult = errorComp(`Component "${componentName}" failed to render!`, err.message);
230
- result = await utils_1.render(compResult, childRenderer);
379
+ result = await utils_1.render(compResult, childRenderer, [], {}, '', true, '', currentEventOwners);
231
380
  }
232
381
  prevProps = { ...props };
233
382
  for (const key of Object.keys(renderedComps)) {
234
- if (!renderedComps[key].called) {
383
+ if (renderedComps[key].generation !== currentGeneration) {
384
+ await runChildOnDestroy(renderedComps[key]);
235
385
  delete renderedComps[key];
236
386
  }
237
- else {
238
- renderedComps[key].called = false;
239
- }
240
387
  }
241
388
  treeEvents = result.events;
242
- sendMessage({ type: 'view', payload: { view: result.tree, updateId } });
243
- if (updateId === 1 && ComponentInstance.onInit) {
244
- await ComponentInstance.onInit();
389
+ eventOwners = result.eventOwners || currentEventOwners;
390
+ const newView = JSON.stringify(result.tree);
391
+ if (sentView !== newView) {
392
+ sentView = newView;
393
+ sendMessage({ type: 'view', payload: { view: result.tree, updateId } });
394
+ }
395
+ forceUpdateInitiators.clear();
396
+ };
397
+ const runSerializedRender = async () => {
398
+ if (inFlightRender) {
399
+ try {
400
+ await inFlightRender;
401
+ }
402
+ catch {
403
+ }
404
+ }
405
+ const currentRender = doForceUpdate();
406
+ inFlightRender = currentRender.finally(() => {
407
+ if (inFlightRender === currentRender) {
408
+ inFlightRender = null;
409
+ }
410
+ });
411
+ await inFlightRender;
412
+ };
413
+ forceUpdate = async (isChildUpdate = false) => {
414
+ if (!isChildUpdate) {
415
+ rootNeedsUpdate = true;
416
+ }
417
+ if (scheduledRender) {
418
+ clearTimeout(scheduledRender);
419
+ }
420
+ if (!renderPromise) {
421
+ renderPromise = new Promise(resolve => {
422
+ resolveRender = resolve;
423
+ });
245
424
  }
425
+ const currentPromise = renderPromise;
426
+ scheduledRender = setTimeout(async () => {
427
+ scheduledRender = null;
428
+ try {
429
+ await runSerializedRender();
430
+ }
431
+ finally {
432
+ if (resolveRender) {
433
+ resolveRender();
434
+ resolveRender = null;
435
+ renderPromise = null;
436
+ }
437
+ }
438
+ }, 50);
439
+ return currentPromise;
246
440
  };
247
441
  let componentResult;
248
442
  try {
@@ -271,7 +465,12 @@ const initializeComponentInstance = async ({ componentInstanceId, browserCommand
271
465
  return errorComp(`Component "${componentName}" failed to initialize!`, err.message);
272
466
  };
273
467
  }
274
- await forceUpdate();
468
+ await runSerializedRender();
469
+ if (!onInitRan && ComponentInstance.onInit) {
470
+ onInitRan = true;
471
+ console.log('onInit called');
472
+ await ComponentInstance.onInit();
473
+ }
275
474
  };
276
475
  const handleBrowserCallback = async ({ callbackId, data }) => {
277
476
  if (browserCallbacks[callbackId]) {
@@ -306,6 +505,11 @@ const updateComponentInstanceProps = async ({ options }) => {
306
505
  };
307
506
  const handleComponentEvent = async ({ requestId, options, files, eventName }) => {
308
507
  try {
508
+ const entry = findRenderedEntryByEvent(eventName);
509
+ if (entry?.childInstance?.__draymanDestroyed || entry?.childDestroyed) {
510
+ sendMessage({ type: 'response', payload: { requestId, result: null } });
511
+ return;
512
+ }
309
513
  if (treeEvents[eventName]) {
310
514
  const abortContoller = new AbortController();
311
515
  const { signal } = abortContoller;
@@ -315,7 +519,9 @@ const handleComponentEvent = async ({ requestId, options, files, eventName }) =>
315
519
  }
316
520
  }
317
521
  catch (err) {
318
- console.error(err);
522
+ if (!isAbortError(err) && !isInvalidParamsError(err)) {
523
+ console.error(err);
524
+ }
319
525
  sendMessage({ type: 'response', payload: { requestId, err } });
320
526
  }
321
527
  finally {
@@ -326,6 +532,12 @@ const handleEventHubEvent = async ({ type, data, groupId }) => {
326
532
  await EventHub._execute(type, data, groupId);
327
533
  };
328
534
  const handleDestroyComponentInstance = async () => {
535
+ for (const key of Object.keys(renderedComps)) {
536
+ await runChildOnDestroy(renderedComps[key]);
537
+ delete renderedComps[key];
538
+ }
539
+ eventOwners = {};
540
+ treeEvents = {};
329
541
  if (ComponentInstance.onDestroy) {
330
542
  await ComponentInstance.onDestroy();
331
543
  }
@@ -351,4 +563,4 @@ worker_1.expose({
351
563
  const errorComp = (errorHeader, error) => {
352
564
  return { "type": "div", "props": { "style": { "width": "100%", "height": "100%", "color": "rgba(0, 0, 0, 0.85)", "backgroundColor": "rgb(255, 242, 240)", "borderRadius": "2px", "border": "1px solid", "borderColor": "rgb(255, 204, 199)" }, "children": { "type": "div", "props": { "style": { "margin": "25px", "display": "flex", "gap": "10px" }, "children": [{ "type": "div", "props": { "style": { "fontSize": "16px" }, "children": { "type": "svg", "props": { "style": { "color": "rgb(255, 77, 79)", "height": "25px", "width": "25px" }, "viewBox": "64 64 896 896", "focusable": "false", "data-icon": "close-circle", "width": "1em", "height": "1em", "fill": "currentColor", "aria-hidden": "true", "children": [{ "type": "path", "props": { "d": "M685.4 354.8c0-4.4-3.6-8-8-8l-66 .3L512 465.6l-99.3-118.4-66.1-.3c-4.4 0-8 3.5-8 8 0 1.9.7 3.7 1.9 5.2l130.1 155L340.5 670a8.32 8.32 0 00-1.9 5.2c0 4.4 3.6 8 8 8l66.1-.3L512 564.4l99.3 118.4 66 .3c4.4 0 8-3.5 8-8 0-1.9-.7-3.7-1.9-5.2L553.5 515l130.1-155c1.2-1.4 1.8-3.3 1.8-5.2z" } }, { "type": "path", "props": { "d": "M512 65C264.6 65 64 265.6 64 513s200.6 448 448 448 448-200.6 448-448S759.4 65 512 65zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }] } } } }, { "type": "div", "props": { "style": { "display": "flex", "flexDirection": "column" }, "children": [{ "type": "div", "props": { "style": { "fontSize": "18px" }, "children": errorHeader } }, { "type": "div", "props": { "style": { "fontSize": "14px" }, "children": error } }] } }] } } } };
353
565
  };
354
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnQtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFFbEQsbUNBQTBDO0FBQzFDLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsc0RBQThCO0FBRTlCLDJDQUF1QztBQUN2QyxtREFBd0Q7QUFFeEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxvQkFBTyxFQUFFLENBQUM7QUFDNUIsbUNBQWtDO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtJQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFBO0FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxpQkFBUSxDQUFDO0lBQzlCLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVE7UUFDM0IsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLFFBQVEsRUFBRSxDQUFDO0lBQ2YsQ0FBQztDQUNKLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFD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
566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnQtcHJvY2Vzc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFFbEQsbUNBQTBDO0FBQzFDLDRDQUFvQjtBQUNwQixnREFBd0I7QUFDeEIsc0RBQThCO0FBQzlCLDRDQUFvQjtBQUVwQiwyQ0FBdUM7QUFDdkMsbURBQXdEO0FBRXhELElBQUksT0FBTyxHQUFHLElBQUksb0JBQU8sRUFBRSxDQUFDO0FBQzVCLG1DQUFrQztBQUNsQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQTtBQUNELE1BQU0sWUFBWSxHQUFHLElBQUksaUJBQVEsQ0FBQztJQUM5QixLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRO1FBQzNCLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNyRSxRQUFRLEVBQUUsQ0FBQztJQUNmLENBQUM7Q0FDSixDQUFDLENBQUM7QUFDSCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFFbEIsV0FBVyxDQUFDLEdBQUcsRUFBRTtJQUNiLFdBQVcsQ0FBQztRQUNSLElBQUksRUFBRSxXQUFXO1FBQ2pCLE9BQU8sRUFBRTtZQUNMLGNBQWMsRUFBRSxZQUFFLENBQUMsaUJBQWlCLEVBQUU7U0FDekM7S0FDSixDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFUixNQUFNLGFBQWE7SUFBbkI7UUFDSSxjQUFTLEdBS0wsRUFBRSxDQUFDO1FBQ1AsU0FBSSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNoRCxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQTtRQUNELE9BQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNuRDtRQUNMLENBQUMsQ0FBQTtRQUNELGFBQVEsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDcEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUMzQixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsRUFBRTtvQkFDaEYsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1FBQ0wsQ0FBQyxDQUFBO0lBQ0wsQ0FBQztJQXZCRyxTQUFTLENBS0Y7Q0FrQlY7QUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3JDLE1BQU0saUJBQWlCLEdBQVEsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sY0FBYyxHQUFHLElBQUksR0FBRyxFQUEyQixDQUFDO0FBQzFELE1BQU0sYUFBYSxHQUFrQyxFQUFFLENBQUM7QUFZeEQsTUFBTSxxQkFBcUIsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyRCxNQUFNLG1CQUFtQixHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25ELElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLElBQUksZ0JBQWdCLEdBS2hCLEVBQUUsQ0FBQztBQUNQLElBQUksVUFBVSxHQUEyQixFQUFFLENBQUM7QUFDNUMsSUFBSSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztBQUM3QyxJQUFJLFdBQWdCLENBQUM7QUFDckIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ25CLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLFVBQVUsR0FBd0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDM0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksUUFBUSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBRXRCLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7SUFDOUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hHLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELEVBQUUsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7SUFDOUIsa0JBQWtCLEVBQUUsS0FBSztDQUM1QixDQUFDLENBQUM7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRTtRQUN2RCxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM3QixjQUFjLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdEIsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ2pFLE9BQU87YUFDVjtZQUNELElBQUk7Z0JBQ0EsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3RDO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUN0QjthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUMsQ0FBQztBQUNGLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLEtBQW9CLEVBQUUsRUFBRTtJQUNyRCxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUU7UUFDdEIsT0FBTztLQUNWO0lBQ0QsS0FBSyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDNUIsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFO1FBQ3JCLEtBQUssQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0tBQ2pEO0lBQ0QsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLFNBQVMsRUFBRTtRQUNoQyxNQUFNLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUM7S0FDekM7QUFDTCxDQUFDLENBQUM7QUFDRixNQUFNLHVCQUF1QixHQUFHLENBQUMsSUFBUyxFQUFFLFFBQWEsRUFBRSxFQUFFO0lBQ3pELElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTztJQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU87S0FDVjtJQUNELElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU87SUFFckMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRTtRQUNyQixJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN4QyxPQUFPLEtBQUssRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFO1lBQzVCLElBQUksUUFBUSxFQUFFLGtCQUFrQjtnQkFBRSxPQUFPO1lBQ3pDLElBQUk7Z0JBQ0EsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzVCO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxRQUFRLEVBQUUsa0JBQWtCLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztvQkFBRSxPQUFPO2dCQUMzRixNQUFNLEdBQUcsQ0FBQzthQUNiO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN6QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLElBQUksZUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxVQUFVLEVBQUU7b0JBQzNCLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzFCO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUU7b0JBQzNELEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7YUFDSjtTQUNKO1FBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2hCLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDckQ7S0FDSjtBQUNMLENBQUMsQ0FBQztBQUNGLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxTQUFpQixFQUE2QixFQUFFO0lBQzlFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUdGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxRQUFrQixFQUFFLElBQXdDLEVBQUUsRUFBRTtJQUN2RixNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFDO0lBQ3RDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1FBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUUsUUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6RixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLEVBQUU7b0JBQ2pDLE1BQU0sVUFBVSxHQUFHLGlCQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzFCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHO3dCQUMzQixRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO3dCQUN2RCxJQUFJLEVBQUUsS0FBSztxQkFDZCxDQUFDO2lCQUNMO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzVCO2FBQ0o7WUFDRCxNQUFNLFVBQVUsR0FBRyxpQkFBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHO2dCQUMzQixRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxJQUFJO2FBQ2IsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDNUQsSUFBSSxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBQy9CO1lBQ0QsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxHQUFHLEVBQUUsRUFBRSxjQUFjLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUM3TixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztJQUMzQyxJQUFJLGNBQWMsRUFBRTtRQUNoQixVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQzNGO0lBQ0QsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDckUsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xFLEtBQUssR0FBRyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLElBQUksZUFBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUNyRSxDQUFDLENBQUE7U0FDSjtLQUNKO0lBQ0QsTUFBTSxjQUFjLEdBQUcsWUFBRTtTQUNwQixXQUFXLENBQUMsZ0JBQWdCLENBQUM7U0FDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbkUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNOLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7U0FDaEMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEIsQ0FBQztJQUNOLE1BQU0sVUFBVSxHQUFtQyxFQUFFLENBQUM7SUFDdEQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUUvQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsR0FBVyxFQUFFLFlBQWlCLEVBQUUsRUFBRTtRQUNoRixNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRixLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1NBQzlFO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDL0M7UUFDRCxLQUFLLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDO1FBQ3JDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsR0FBVyxFQUFFLEtBQVUsRUFBRSxXQUFXLEdBQUcsS0FBSyxFQUFFLEVBQUU7UUFDdkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUzRCxNQUFNLFFBQVEsR0FBRyxXQUFXLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBFLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7WUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDbkU7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDLENBQUM7SUFFRixNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsWUFBb0IsRUFBRSxZQUFpQixFQUFFLFFBQWdCLEVBQUUsRUFBRTtRQUN4RixNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDbEMsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUkscUJBQXFCLENBQUM7UUFDMUIsTUFBTSxzQkFBc0IsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RSxNQUFNLGlCQUFpQixHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ2pDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixJQUFJO1lBQ0EsTUFBTSxRQUFRLEdBQUcsd0RBQWEsY0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxtQkFBbUIsR0FBRyxZQUFZLEtBQUssQ0FBQyxHQUFDLENBQUM7WUFDdEgsWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNsQzthQUNKO1lBQ0QscUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUM3QyxXQUFXLEVBQUUsaUJBQWlCO2dCQUM5QixLQUFLO2dCQUNMLFFBQVE7Z0JBQ1IsVUFBVTtnQkFDVixPQUFPO2dCQUNQLE1BQU07Z0JBQ04saUJBQWlCLEVBQUUsc0JBQXNCO2dCQUN6QyxHQUFHLFVBQVUsQ0FBQyxVQUFVO2FBQzNCLENBQUMsQ0FBQztZQUNILElBQUksc0JBQXNCLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLENBQUM7YUFDaEY7U0FDSjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxzQkFBc0IsQ0FBQyxrQkFBa0IsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hFLHFCQUFxQixHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQzVDO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLHFCQUFxQixHQUFHLEtBQUssSUFBSSxFQUFFO29CQUMvQixPQUFPLFNBQVMsQ0FBQyxvQkFBb0IsWUFBWSx5QkFBeUIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdGLENBQUMsQ0FBQzthQUNMO1NBQ0o7UUFDRCxJQUFJLGNBQWMsR0FBRyxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQWEsRUFBRSxFQUFFO1lBQ3JDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsQ0FBQztZQUNSLElBQUk7Z0JBQ0EsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ2xDO2lCQUNKO2dCQUNELElBQUksc0JBQXNCLENBQUMsa0JBQWtCLEVBQUU7b0JBQzNDLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELEdBQUcsR0FBRyxNQUFNLHFCQUFxQixDQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pFLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3hEO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxzQkFBc0IsQ0FBQyxrQkFBa0IsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hFLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxTQUFTLENBQUMsb0JBQW9CLFlBQVkscUJBQXFCLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZGO1lBQ0QsY0FBYyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUM5QixPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUMsQ0FBQztRQUNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDL0QsQ0FBQyxDQUFBO0lBQ0QsSUFBSSxrQkFBa0IsR0FBUSxJQUFJLENBQUM7SUFDbkMsSUFBSSxlQUFlLEdBQXlDLElBQUksQ0FBQztJQUNqRSxJQUFJLGFBQWEsR0FBeUIsSUFBSSxDQUFDO0lBQy9DLElBQUksYUFBYSxHQUF3QixJQUFJLENBQUM7SUFDOUMsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQzVCLElBQUksY0FBYyxHQUF5QixJQUFJLENBQUM7SUFFaEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxJQUFJLEVBQUU7UUFDN0IsTUFBTSxrQkFBa0IsR0FBMkIsRUFBRSxDQUFDO1FBQ3RELEtBQUssTUFBTSxHQUFHLElBQUksbUJBQW1CLEVBQUU7WUFDbkMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFNUIsUUFBUSxFQUFFLENBQUM7UUFDWCxpQkFBaUIsRUFBRSxDQUFDO1FBQ3BCLElBQUksVUFBVSxDQUFDO1FBQ2YsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJO1lBQ0EsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2xDO2FBQ0o7WUFDRCxNQUFNLGVBQWUsR0FBRyxlQUFlLElBQUkscUJBQXFCLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUM1RSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBRXhCLElBQUksZUFBZSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3hDLFVBQVUsR0FBRyxNQUFNLGVBQWUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELGtCQUFrQixHQUFHLFVBQVUsQ0FBQzthQUNuQztpQkFBTTtnQkFDSCxVQUFVLEdBQUcsa0JBQWtCLENBQUM7YUFDbkM7WUFDRCxNQUFNLEdBQUcsTUFBTSxjQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDekc7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEIsVUFBVSxHQUFHLFNBQVMsQ0FBQyxjQUFjLGFBQWEscUJBQXFCLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RGLE1BQU0sR0FBRyxNQUFNLGNBQU0sQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUM5RjtRQUNELFNBQVMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzFDLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsS0FBSyxpQkFBaUIsRUFBRTtnQkFDckQsTUFBTSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDN0I7U0FDSjtRQUNELFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNCLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLGtCQUFrQixDQUFDO1FBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksUUFBUSxLQUFLLE9BQU8sRUFBRTtZQUN0QixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25CLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEMsQ0FBQyxDQUFBO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLElBQUksRUFBRTtRQUNuQyxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJO2dCQUNBLE1BQU0sY0FBYyxDQUFDO2FBQ3hCO1lBQUMsTUFBTTthQUNQO1NBQ0o7UUFDRCxNQUFNLGFBQWEsR0FBRyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxjQUFjLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxjQUFjLEtBQUssYUFBYSxFQUFFO2dCQUNsQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLGNBQWMsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixXQUFXLEdBQUcsS0FBSyxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsRUFBRTtRQUMxQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLGVBQWUsR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFFRCxJQUFJLGVBQWUsRUFBRTtZQUNqQixZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hCLGFBQWEsR0FBRyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsYUFBYSxHQUFHLE9BQU8sQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBRXJDLGVBQWUsR0FBRyxVQUFVLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDcEMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJO2dCQUNBLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQzthQUMvQjtvQkFBUztnQkFDTixJQUFJLGFBQWEsRUFBRTtvQkFDZixhQUFhLEVBQUUsQ0FBQztvQkFDaEIsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDckIsYUFBYSxHQUFHLElBQUksQ0FBQztpQkFDeEI7YUFDSjtRQUNMLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUMsQ0FBQTtJQUNELElBQUksZUFBZSxDQUFDO0lBQ3BCLElBQUk7UUFDQSxNQUFNLFFBQVEsR0FBRyx3REFBYSxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLG1CQUFtQixHQUFHLGFBQWEsS0FBSyxDQUFDLEdBQUMsQ0FBQztRQUN2SCxZQUFZLEdBQUcsUUFBUSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDM0MsU0FBUyxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0o7UUFDRCxlQUFlLEdBQUcsTUFBTyxRQUFRLENBQUMsU0FBaUIsQ0FBQztZQUNoRCxLQUFLO1lBQ0wsV0FBVztZQUNYLFFBQVE7WUFDUixVQUFVO1lBQ1YsT0FBTztZQUNQLE1BQU07WUFDTixpQkFBaUI7WUFDakIsR0FBRyxVQUFVLENBQUMsVUFBVTtTQUMzQixDQUFDLENBQUE7S0FDTDtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1YsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixlQUFlLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDekIsT0FBTyxTQUFTLENBQUMsY0FBYyxhQUFhLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUE7S0FDSjtJQUVELE1BQU0sbUJBQW1CLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtRQUN4QyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDN0IsTUFBTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNwQztBQUNMLENBQUMsQ0FBQTtBQUVELE1BQU0scUJBQXFCLEdBQUcsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7SUFDekQsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUM5QixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUN2QyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ25DLE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkM7S0FDSjtBQUNMLENBQUMsQ0FBQTtBQUVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLEVBQUU7SUFDbEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtLQUNKO0lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ25DLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDMUI7QUFDTCxDQUFDLENBQUE7QUFFRCxNQUFNLDRCQUE0QixHQUFHLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7SUFDdkQsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQyxJQUFJLGVBQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNkLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3hCLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDckUsQ0FBQyxDQUFBO1NBQ0o7S0FDSjtJQUNELE1BQU0sV0FBVyxFQUFFLENBQUM7QUFFeEIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQWlFLEVBQUUsRUFBRTtJQUMzSSxJQUFJO1FBQ0EsTUFBTSxLQUFLLEdBQUcsd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsSUFBSSxLQUFLLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixJQUFJLEtBQUssRUFBRSxjQUFjLEVBQUU7WUFDbkUsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RSxPQUFPO1NBQ1Y7UUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUM7WUFDbEMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9FLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNyRTtLQUNKO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtRQUNELFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUNsRTtZQUFTO1FBQ04sY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNwQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO0lBQzFELE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQTtBQUVELE1BQU0sOEJBQThCLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDOUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQzFDLE1BQU0saUJBQWlCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUMsT0FBTyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDN0I7SUFDRCxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7UUFDN0IsTUFBTSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztLQUN2QztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNqRCxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDL0IsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxjQUFjLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3BDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsZUFBTSxDQUFDO0lBQ0gsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1QixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsb0JBQW9CO0lBQ3BCLE1BQU07UUFDRixPQUFPLHVCQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ25DLENBQUM7Q0FDSixDQUFDLENBQUE7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUNyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsd1JBQXdSLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsK0tBQStLLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN0Z0QsQ0FBQyxDQUFBIn0=