@researchdatabox/sails-hook-redbox-storage-mongo 5.0.4-beta.12498 → 5.0.5

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.
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Services = exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS = exports.RECORD_SCHEMA_REFERENCE_INDEXES = exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY = exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME = exports.RECORD_SCHEMA_ARTIFACT_INDEXES = void 0;
3
+ exports.Services = void 0;
4
4
  const rxjs_1 = require("rxjs");
5
5
  const rxjs_2 = require("rxjs");
6
6
  const crypto_1 = require("crypto");
7
- const node_util_1 = require("node:util");
8
7
  const luxon_1 = require("luxon");
9
8
  const mongodb = require("mongodb");
10
9
  const stream = require("node:stream");
@@ -13,8 +12,6 @@ const json2csv_1 = require("json2csv");
13
12
  const redbox_core_1 = require("@researchdatabox/redbox-core");
14
13
  const redbox_core_2 = require("@researchdatabox/redbox-core");
15
14
  const redbox_core_3 = require("@researchdatabox/redbox-core");
16
- const RecordSchemaReference_1 = require("../models/RecordSchemaReference");
17
- const recordSchemaPersistence_1 = require("./recordSchemaPersistence");
18
15
  const { flatten } = json2csv_1.transforms;
19
16
  const UTF8_BOM = '\uFEFF';
20
17
  const CSV_DANGEROUS_PREFIX = /^[=+\-@\t\r\n]/;
@@ -39,112 +36,23 @@ function sanitizeCsvRecord(record) {
39
36
  }
40
37
  return sanitized;
41
38
  }
42
- const RECORD_IDENTITY_COLLECTION = 'recordidentity';
43
- exports.RECORD_SCHEMA_ARTIFACT_INDEXES = [
44
- {
45
- key: { digest: 1 },
46
- // Match the index Sails Mongo creates for `@Attr({ unique: true })` so
47
- // native readiness initialization is idempotent after Waterline setup.
48
- name: 'digest_1',
49
- unique: true,
50
- },
51
- ];
52
- exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME = 'record_schema_reference_authorization_cursor_lookup';
53
- exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY = {
54
- digest: 1,
55
- kind: 1,
56
- brand: 1,
57
- portal: 1,
58
- schemaKind: 1,
59
- recordType: 1,
60
- operation: 1,
61
- referenceKey: 1,
62
- };
63
- exports.RECORD_SCHEMA_REFERENCE_INDEXES = [
64
- {
65
- key: { referenceKey: 1 },
66
- name: 'referenceKey_1',
67
- unique: true,
68
- },
69
- {
70
- key: { digest: 1, kind: 1 },
71
- name: 'record_schema_reference_digest_kind',
72
- },
73
- {
74
- key: { digest: 1, kind: 1, brand: 1, portal: 1, referenceKey: 1 },
75
- name: 'record_schema_reference_grant_lookup',
76
- },
77
- {
78
- key: { digest: 1, kind: 1, brand: 1, portal: 1, schemaKind: 1, recordType: 1, operation: 1, oid: 1 },
79
- name: 'record_schema_reference_authorization_lookup',
80
- },
81
- {
82
- key: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY,
83
- name: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_NAME,
84
- },
85
- {
86
- key: { oid: 1, kind: 1 },
87
- name: 'record_schema_reference_oid_kind',
88
- sparse: true,
89
- },
90
- {
91
- key: { kind: 1, expiresAt: 1 },
92
- name: 'record_schema_reference_pin_expiry',
93
- partialFilterExpression: { kind: 'pin' },
94
- },
95
- ];
96
- /**
97
- * Authorization lookups fail as unavailable instead of consuming an
98
- * unbounded database work budget. This is a time/availability boundary, not
99
- * a result cap: a query that cannot complete is never reported as a denial.
100
- */
101
- exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS = 1_000;
102
- const PERSISTENT_INDEX_BOOLEAN_OPTIONS = ['unique', 'sparse', 'hidden'];
103
- const PERSISTENT_INDEX_VALUE_OPTIONS = [
104
- 'partialFilterExpression',
105
- 'expireAfterSeconds',
106
- 'storageEngine',
107
- 'weights',
108
- 'default_language',
109
- 'language_override',
110
- 'textIndexVersion',
111
- '2dsphereIndexVersion',
112
- 'bits',
113
- 'min',
114
- 'max',
115
- 'bucketSize',
116
- 'wildcardProjection',
117
- 'collation',
118
- ];
119
- function indexKeyEntries(key) {
120
- if (key instanceof Map)
121
- return [...key.entries()];
122
- return Object.keys(key).map(name => [name, key[name]]);
123
- }
124
- function indexKeysEqual(existing, required) {
125
- return (0, node_util_1.isDeepStrictEqual)(indexKeyEntries(existing.key), indexKeyEntries(required.key));
126
- }
127
- function indexOptionsEqual(existing, required) {
128
- for (const option of PERSISTENT_INDEX_BOOLEAN_OPTIONS) {
129
- if (Boolean(existing[option]) !== Boolean(required[option]))
130
- return false;
131
- }
132
- return PERSISTENT_INDEX_VALUE_OPTIONS.every(option => {
133
- if (option === 'collation') {
134
- // MongoDB 9 reports the default simple collation explicitly; earlier versions omit it.
135
- return (0, node_util_1.isDeepStrictEqual)(existing.collation ?? { locale: 'simple' }, required.collation ?? { locale: 'simple' });
136
- }
137
- return (0, node_util_1.isDeepStrictEqual)(existing[option], required[option]);
138
- });
139
- }
140
- function indexDisplayName(index) {
141
- return typeof index.name === 'string' && index.name.trim() !== '' ? index.name : '<unnamed>';
142
- }
143
- function isMongoNamespaceNotFoundError(error) {
144
- if (!(error instanceof Error))
145
- return false;
146
- return ('code' in error && error.code === 26) || ('codeName' in error && error.codeName === 'NamespaceNotFound');
147
- }
39
+ // Unimported saves merged into a pending intent. An intent written before per-save tracking counts as one save.
40
+ const priorFigshareSaves = { $cond: [{ $eq: ['$figshareSyncIntent.pending', true] }, { $ifNull: ['$figshareSyncIntent.saves', {
41
+ $cond: [{ $in: ['$figshareSyncIntent.readiness', ['ready', 'initialising']] }, [{ saveToken: '$figshareSyncIntent.saveToken',
42
+ readiness: '$figshareSyncIntent.readiness', requestedAt: '$figshareSyncIntent.requestedAt', intents: { $ifNull: ['$figshareSyncIntent.intents', []] } }], []]
43
+ }] }, []] };
44
+ // The intent carries the union of its saves' policies, and is ready only once no save is still initialising.
45
+ // Once every merged save is abandoned nothing remains to import, so the intent is no longer pending.
46
+ const deriveFigshareIntent = { $set: {
47
+ 'figshareSyncIntent.intents': { $reduce: { input: '$figshareSyncIntent.saves', initialValue: [], in: { $setUnion: ['$$value', '$$this.intents'] } } },
48
+ 'figshareSyncIntent.readiness': { $cond: [{ $eq: [{ $size: '$figshareSyncIntent.saves' }, 0] }, 'abandoned',
49
+ { $cond: [{ $in: ['initialising', '$figshareSyncIntent.saves.readiness'] }, 'initialising', 'ready'] }] },
50
+ 'figshareSyncIntent.pending': { $gt: [{ $size: '$figshareSyncIntent.saves' }, 0] }
51
+ } };
52
+ const figshareSaveFilter = (saveToken, readiness) => ({ 'figshareSyncIntent.pending': true, $or: [
53
+ { 'figshareSyncIntent.saves': { $elemMatch: { saveToken, ...(readiness ? { readiness } : {}) } } },
54
+ { 'figshareSyncIntent.saves': { $exists: false }, 'figshareSyncIntent.saveToken': saveToken, ...(readiness ? { 'figshareSyncIntent.readiness': readiness } : {}) }
55
+ ] });
148
56
  var Services;
149
57
  (function (Services) {
150
58
  class MongoStorageService extends redbox_core_1.Services.Core.Service {
@@ -152,25 +60,20 @@ var Services;
152
60
  db;
153
61
  recordCol;
154
62
  deletedRecordCol;
155
- recordIdentityCol;
156
- recordSchemaArtifactCol;
157
- recordSchemaReferenceCol;
158
63
  _readyHookRegistered = false;
159
- _requiredIndicesReady = false;
160
- _initializationPromise;
161
64
  _exportedMethods = [
162
65
  'init',
163
66
  'create',
164
67
  'updateMeta',
165
- 'getCapabilities',
166
- 'removeActiveRecord',
167
- 'createTombstone',
168
- 'updateTombstone',
169
- 'removeTombstone',
170
- 'createActiveRecordFromTombstone',
171
- 'getTombstone',
172
- 'getLifecycleTombstones',
173
68
  'getMeta',
69
+ 'setRecordFields',
70
+ 'scanFigshareRecords',
71
+ 'findFigshareArticleRecords',
72
+ 'readyFigshareIntent',
73
+ 'pendingFigshareIntents',
74
+ 'recoverStaleFigshareIntents',
75
+ 'abandonFigshareIntent',
76
+ 'acknowledgeFigshareIntent',
174
77
  'createBatch',
175
78
  'provideUserAccessAndRemovePendingAccess',
176
79
  'getRelatedRecords',
@@ -185,7 +88,6 @@ var Services;
185
88
  'addDatastreams',
186
89
  'updateDatastream',
187
90
  'removeDatastream',
188
- 'removeStagedDatastream',
189
91
  'addDatastream',
190
92
  'addAndRemoveDatastreams',
191
93
  'getDatastream',
@@ -195,13 +97,6 @@ var Services;
195
97
  'getRecordAudit',
196
98
  'getIntegrationAudit',
197
99
  'countIntegrationAudit',
198
- 'putRecordSchemaArtifact',
199
- 'getRecordSchemaArtifact',
200
- 'listRecordSchemaArtifacts',
201
- 'touchRecordSchemaArtifact',
202
- 'putRecordSchemaReference',
203
- 'findRecordSchemaGrantForAuthorization',
204
- 'listRecordSchemaReferences',
205
100
  'exists',
206
101
  ];
207
102
  constructor() {
@@ -215,7 +110,9 @@ var Services;
215
110
  getErrorMessage(err) {
216
111
  if (err instanceof Error) {
217
112
  const messageParts = [err.message];
218
- const causeMessage = err.cause instanceof Error ? err.cause.message : typeof err.cause === 'string' ? err.cause : undefined;
113
+ const causeMessage = err.cause instanceof Error
114
+ ? err.cause.message
115
+ : (typeof err.cause === 'string' ? err.cause : undefined);
219
116
  if (causeMessage != null && causeMessage !== '' && causeMessage !== err.message) {
220
117
  messageParts.push(`Cause: ${causeMessage}`);
221
118
  }
@@ -223,442 +120,9 @@ var Services;
223
120
  }
224
121
  return String(err);
225
122
  }
226
- classifyStorageInitializationError(err) {
227
- if (err instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError)
228
- return 'record-schema-persistence-error';
229
- if (err instanceof mongodb.MongoNetworkError)
230
- return 'mongo-network-error';
231
- if (err instanceof mongodb.MongoError)
232
- return 'mongo-driver-error';
233
- return err instanceof Error ? 'unexpected-error' : 'non-error';
234
- }
235
- /**
236
- * Resolve the native driver collection behind a Waterline model. Strict
237
- * concurrency needs `findOneAndUpdate`/`findOneAndDelete` facts that
238
- * Waterline cannot certify, so the compare-and-set paths talk to the
239
- * driver directly. Discovery never throws: an adapter that cannot supply a
240
- * native collection is simply unsupported.
241
- */
242
- getNativeCollection(model, cacheKey) {
243
- const cached = this[cacheKey];
244
- if (cached)
245
- return cached;
246
- try {
247
- const manager = model.getDatastore()?.manager;
248
- if (manager && typeof manager.collection === 'function') {
249
- this.db = manager;
250
- this[cacheKey] = manager.collection(model.tableName);
251
- return this[cacheKey];
252
- }
253
- }
254
- catch {
255
- // Capability discovery is deliberately non-throwing and fail-closed.
256
- }
257
- return undefined;
258
- }
259
- getNativeRecordCollection() {
260
- return this.getNativeCollection(Record, 'recordCol');
261
- }
262
- getNativeTombstoneCollection() {
263
- return this.getNativeCollection(DeletedRecord, 'deletedRecordCol');
264
- }
265
- getNativeRecordIdentityCollection() {
266
- if (this.recordIdentityCol)
267
- return this.recordIdentityCol;
268
- try {
269
- const manager = (this.db ?? Record.getDatastore()?.manager);
270
- if (manager && typeof manager.collection === 'function') {
271
- this.db = manager;
272
- this.recordIdentityCol = manager.collection(RECORD_IDENTITY_COLLECTION);
273
- return this.recordIdentityCol;
274
- }
275
- }
276
- catch {
277
- // Capability discovery is deliberately non-throwing and fail-closed.
278
- }
279
- return undefined;
280
- }
281
- supportsAtomicMutation(collection) {
282
- return (typeof collection?.findOneAndUpdate === 'function' &&
283
- typeof collection?.findOneAndDelete === 'function' &&
284
- typeof collection?.findOne === 'function');
285
- }
286
- getCapabilities() {
287
- const supported = this._requiredIndicesReady &&
288
- this.supportsAtomicMutation(this.getNativeRecordCollection()) &&
289
- this.supportsAtomicMutation(this.getNativeTombstoneCollection()) &&
290
- typeof this.getNativeRecordIdentityCollection()?.findOne === 'function' &&
291
- typeof this.getNativeRecordIdentityCollection()?.insertOne === 'function' &&
292
- typeof this.getNativeRecordIdentityCollection()?.deleteOne === 'function' &&
293
- typeof this.getNativeRecordCollection()?.insertOne === 'function' &&
294
- typeof this.getNativeTombstoneCollection()?.insertOne === 'function' &&
295
- typeof this.getNativeTombstoneCollection()?.find === 'function';
296
- return supported ? { recordConcurrency: redbox_core_1.RECORD_STORAGE_CONCURRENCY_CAPABILITY_VERSION } : {};
297
- }
298
- createMutationResponse(oid, options) {
299
- const response = new redbox_core_1.StorageMutationResponse();
300
- response.oid = oid;
301
- if ((0, redbox_core_1.isCanonicalSaveRequestId)(options?.requestId))
302
- response.requestId = options.requestId;
303
- if ((0, redbox_core_1.isRecordConcurrencyResolution)(options?.resolution))
304
- response.resolution = options.resolution;
305
- return response;
306
- }
307
- notApplied(response, reason, message = 'Record mutation was not applied') {
308
- response.success = false;
309
- response.applicationState = 'not-applied';
310
- response.nonApplicationReason = reason;
311
- response.message = message;
312
- return response;
313
- }
314
- unknownMutation(response, message) {
315
- response.success = false;
316
- response.applicationState = 'unknown';
317
- response.message = message;
318
- return response;
319
- }
320
- /**
321
- * Normalize the caller's precondition. Returning `null` means the response
322
- * already carries a certified non-application: a malformed precondition is
323
- * a caller defect, and answering it with a definite no-write is safer than
324
- * guessing which revision was meant.
325
- */
326
- expectedRevision(options, response) {
327
- const precondition = options?.precondition;
328
- if (!precondition)
329
- return undefined;
330
- const { expectedRevision, requireRevision } = precondition;
331
- if (typeof requireRevision !== 'boolean' ||
332
- (expectedRevision === undefined ? requireRevision : !(0, redbox_core_1.isRecordRevision)(expectedRevision))) {
333
- sails.log.error(`${this.logHeader} refusing a mutation for oid ${response.oid}: the supplied revision precondition is invalid`);
334
- this.notApplied(response, 'capability-unavailable', 'A valid record revision is required');
335
- return null;
336
- }
337
- return expectedRevision;
338
- }
339
- /**
340
- * The lazy compatibility clause matches only a genuinely absent revision.
341
- * An explicit null is corrupt state: `$inc` cannot advance it and must not
342
- * be made to look like a safe first revision.
343
- */
344
- revisionSelector(expectedRevision) {
345
- if (expectedRevision === redbox_core_1.INITIAL_RECORD_REVISION) {
346
- // Atomic lazy compatibility for a legacy record that escaped the
347
- // single-lift migration. The winning $inc makes a second match fail.
348
- return { $or: [{ revision: redbox_core_1.INITIAL_RECORD_REVISION }, { revision: { $exists: false } }] };
349
- }
350
- if (expectedRevision !== undefined)
351
- return { revision: expectedRevision };
352
- // Tokenless compatibility: match anything that can still be advanced.
353
- return { $or: [{ revision: { $lt: Number.MAX_SAFE_INTEGER } }, { revision: { $exists: false } }] };
354
- }
355
- mutationSelector(identity, expectedRevision) {
356
- return { $and: [identity, this.revisionSelector(expectedRevision)] };
357
- }
358
- lifecycleMutationSelector(identity, expectedRevision, options) {
359
- const selector = this.mutationSelector(identity, expectedRevision);
360
- const predicates = selector.$and;
361
- if (options?.lifecycle?.expectedState) {
362
- predicates.push({ lifecycleState: options.lifecycle.expectedState });
363
- }
364
- if (options?.lifecycle?.operationId) {
365
- predicates.push({ 'lifecycleOperation.operationId': options.lifecycle.operationId });
366
- }
367
- return selector;
368
- }
369
- isDuplicateKeyError(error) {
370
- return Boolean(error && typeof error === 'object' && Number(error.code) === 11000);
371
- }
372
- /**
373
- * Whether the driver fact proves that `insertOne` did not commit. Local
374
- * argument rejection and a server command error without retry/write-
375
- * concern ambiguity are definitive. Network, selection, timeout, and
376
- * write-concern failures retain the reservation for later reconciliation.
377
- */
378
- isCertifiedCreateNonApplication(error) {
379
- if (error instanceof mongodb.MongoInvalidArgumentError)
380
- return true;
381
- if (!(error instanceof mongodb.MongoServerError) || error instanceof mongodb.MongoWriteConcernError) {
382
- return false;
383
- }
384
- const serverError = error;
385
- if (serverError.writeConcernError)
386
- return false;
387
- if (serverError.hasErrorLabel?.('RetryableWriteError'))
388
- return false;
389
- if (serverError.hasErrorLabel?.('UnknownTransactionCommitResult'))
390
- return false;
391
- return true;
392
- }
393
- storedIncarnationId(record) {
394
- const value = String(record?.incarnationId ?? '').trim();
395
- return (0, redbox_core_1.isCanonicalSaveRequestId)(value) ? value : undefined;
396
- }
397
- /**
398
- * Establish the permanent OID owner for a state that already exists. The
399
- * ledger outlives active records and tombstones, so purge cannot reopen a
400
- * revision-zero alias. Duplicate insertion is an ordinary concurrent
401
- * winner; its durable identity is re-read and adopted.
402
- */
403
- async ensureRecordIdentity(oid, source) {
404
- const identities = this.getNativeRecordIdentityCollection();
405
- if (typeof identities?.findOne !== 'function' || typeof identities?.insertOne !== 'function')
406
- return undefined;
407
- const existing = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
408
- if (existing === undefined)
409
- return undefined;
410
- const existingId = this.storedIncarnationId(existing);
411
- if (existing !== null)
412
- return existingId;
413
- const incarnationId = this.storedIncarnationId(source) ?? (0, crypto_1.randomUUID)();
414
- try {
415
- await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
416
- return incarnationId;
417
- }
418
- catch (error) {
419
- if (!this.isDuplicateKeyError(error))
420
- return undefined;
421
- const winner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
422
- return winner === undefined ? undefined : this.storedIncarnationId(winner);
423
- }
424
- }
425
- /** Claim a never-before-used OID. Any durable owner or active/tombstone state is a collision. */
426
- async claimNewRecordIdentity(oid) {
427
- const identities = this.getNativeRecordIdentityCollection();
428
- if (typeof identities?.findOne !== 'function' ||
429
- typeof identities?.insertOne !== 'function' ||
430
- typeof identities?.deleteOne !== 'function')
431
- return undefined;
432
- const existingOwner = this.mutationDocument(await identities.findOne({ redboxOid: oid }));
433
- if (existingOwner === undefined)
434
- return undefined;
435
- if (existingOwner !== null)
436
- return { collision: true };
437
- // Legacy state may predate the ledger. Seed its owner before returning a
438
- // collision so a concurrent purge cannot make the OID reusable.
439
- const current = await this.readCurrentState(oid);
440
- if (!current)
441
- return undefined;
442
- const existingState = current.active ?? current.tombstone;
443
- if (existingState) {
444
- return (await this.ensureRecordIdentity(oid, existingState)) ? { collision: true } : undefined;
445
- }
446
- const incarnationId = (0, crypto_1.randomUUID)();
447
- try {
448
- await identities.insertOne({ redboxOid: oid, incarnationId, createdAt: new Date().toISOString() });
449
- return { incarnationId };
450
- }
451
- catch (error) {
452
- return this.isDuplicateKeyError(error) ? { collision: true } : undefined;
453
- }
454
- }
455
- /**
456
- * Compensate an ownership claim this call made but never used.
457
- *
458
- * The ledger is otherwise permanent, and deliberately so: a purge must not
459
- * let an old revision-zero tag alias a recreated incarnation. Releasing is
460
- * only safe — and only necessary — for a row that still carries the
461
- * incarnation this call minted and that no active record or tombstone
462
- * refers to. That is exactly the state a create leaves behind when its
463
- * insert never reached the collection, and without this the caller-selected
464
- * OID would be permanently unusable with no operator recovery path. While
465
- * this row exists its unique index prevents another ordinary create from
466
- * becoming owner; the exact incarnation selector also cannot remove a row
467
- * replaced during an operator recovery race.
468
- */
469
- async releaseUnusedRecordIdentity(oid, incarnationId) {
470
- const identities = this.getNativeRecordIdentityCollection();
471
- if (typeof identities?.deleteOne !== 'function')
472
- return;
473
- try {
474
- const current = await this.readCurrentState(oid);
475
- // Unobservable or still-owned state keeps the claim: a permanent row is
476
- // always safer than one released while something still refers to it.
477
- if (!current || current.active || current.tombstone)
478
- return;
479
- await identities.deleteOne({ redboxOid: oid, incarnationId });
480
- }
481
- catch {
482
- sails.log.error(`${this.logHeader} record_identity_reservation_release_failed`, {
483
- event: 'record_identity_reservation_release_failed',
484
- outcome: 'unknown',
485
- });
486
- }
487
- }
488
- /**
489
- * Interpret a `findOneAndUpdate`/`findOneAndDelete` result issued with
490
- * `includeResultMetadata: false`: `null` is a certified no-match and a
491
- * document is the committed state. Anything else is an unrecognized driver
492
- * fact that must stay `unknown` rather than being certified either way.
493
- */
494
- mutationDocument(result) {
495
- if (result === null)
496
- return null;
497
- if (result === undefined)
498
- return undefined;
499
- if (typeof result !== 'object' || Array.isArray(result))
500
- return undefined;
501
- return result;
502
- }
503
- committed(response, document, kind, expectedRevision) {
504
- // A removal returns the pre-removal document, which may predate the
505
- // revision backfill; an update always returns the incremented value.
506
- const normalizedRevision = (0, redbox_core_1.isRecordRevision)(document.revision)
507
- ? document.revision
508
- : document.revision == null && kind === 'removed'
509
- ? redbox_core_1.INITIAL_RECORD_REVISION
510
- : undefined;
511
- if (normalizedRevision === undefined) {
512
- return this.unknownMutation(response, 'Storage returned an invalid committed revision');
513
- }
514
- const expectedCommittedRevision = expectedRevision === undefined
515
- ? undefined
516
- : kind === 'updated'
517
- ? (0, redbox_core_1.nextRecordRevision)(expectedRevision)
518
- : expectedRevision;
519
- if (expectedCommittedRevision !== undefined && normalizedRevision !== expectedCommittedRevision) {
520
- return this.unknownMutation(response, 'Storage returned an inconsistent committed revision');
521
- }
522
- const normalized = { ...document, revision: normalizedRevision };
523
- response.success = true;
524
- response.applicationState = 'applied';
525
- response.committedRevision = normalizedRevision;
526
- if (kind === 'removed')
527
- response.removedRecord = normalized;
528
- else
529
- response.committedRecord = normalized;
530
- return response;
531
- }
532
- brandIdOf(brand) {
533
- return String(brand?.id ?? '').trim();
534
- }
535
- activeIdentity(brand, oid) {
536
- const brandId = this.brandIdOf(brand);
537
- return brandId ? { redboxOid: oid, 'metaMetadata.brandId': brandId } : { redboxOid: oid };
538
- }
539
- tombstoneIdentity(brand, oid) {
540
- const brandId = this.brandIdOf(brand);
541
- // Tombstones written before the lifecycle wrapper existed only carry the
542
- // brand inside the embedded snapshot. A present wrapper brand remains
543
- // authoritative: an inconsistent snapshot must never widen brand scope.
544
- return brandId
545
- ? {
546
- redboxOid: oid,
547
- $or: [
548
- { brandId },
549
- {
550
- $and: [{ brandId: { $exists: false } }, { 'deletedRecordMetadata.metaMetadata.brandId': brandId }],
551
- },
552
- ],
553
- }
554
- : { redboxOid: oid };
555
- }
556
- static BRAND_ID_PATHS = [
557
- 'brandId',
558
- 'metaMetadata.brandId',
559
- 'deletedRecordMetadata.metaMetadata.brandId',
560
- ];
561
- storedBrandId(record) {
562
- for (const path of MongoStorageService.BRAND_ID_PATHS) {
563
- const brandId = String(_.get(record, path, '') ?? '').trim();
564
- if (brandId)
565
- return brandId;
566
- }
567
- return '';
568
- }
569
- /**
570
- * Reject candidate keys the driver would read as update operators or
571
- * dotted paths. Waterline rejected them before the compare-and-set paths
572
- * started building `$set` documents directly, and honouring them would let
573
- * a candidate reach fields — such as the stored brand — that the explicit
574
- * checks above deliberately guard.
575
- */
576
- unsafeCandidateField(candidate) {
577
- return Object.keys(candidate).find(key => key.startsWith('$') || key.includes('.'));
578
- }
579
- /**
580
- * Read the current state behind a certified no-match so the caller can be
581
- * told why nothing was written. Cross-brand state is never returned: the
582
- * reason alone is bounded, and callers outside the brand map it onto the
583
- * same not-found answer an absent record produces.
584
- */
585
- async readCurrentState(oid) {
586
- const records = this.getNativeRecordCollection();
587
- const tombstones = this.getNativeTombstoneCollection();
588
- if (typeof records?.findOne !== 'function' || typeof tombstones?.findOne !== 'function') {
589
- return undefined;
590
- }
591
- const [activeResult, tombstoneResult] = await Promise.all([
592
- records.findOne({ redboxOid: oid }),
593
- tombstones.findOne({ redboxOid: oid }),
594
- ]);
595
- const active = this.mutationDocument(activeResult);
596
- const tombstone = this.mutationDocument(tombstoneResult);
597
- if (active === undefined || tombstone === undefined)
598
- return undefined;
599
- return { active, tombstone };
600
- }
601
- isRequestedBrand(record, requestedBrandId) {
602
- return record !== null && (!requestedBrandId || this.storedBrandId(record) === requestedBrandId);
603
- }
604
- async classifyActiveNoMatch(brand, oid, expectedRevision) {
605
- const current = await this.readCurrentState(oid);
606
- if (!current)
607
- return 'capability-unavailable';
608
- const requestedBrandId = this.brandIdOf(brand);
609
- if (current.active) {
610
- if (!this.isRequestedBrand(current.active, requestedBrandId))
611
- return 'brand-mismatch';
612
- // A tokenless selector matches every advanceable revision, so a
613
- // present in-brand record that still did not match cannot be advanced.
614
- return expectedRevision !== undefined ? 'stale-revision' : 'capability-unavailable';
615
- }
616
- if (this.isRequestedBrand(current.tombstone, requestedBrandId))
617
- return 'deleted';
618
- return 'not-found';
619
- }
620
- async classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options) {
621
- const current = await this.readCurrentState(oid);
622
- if (!current)
623
- return 'capability-unavailable';
624
- const requestedBrandId = this.brandIdOf(brand);
625
- if (current.tombstone) {
626
- if (!this.isRequestedBrand(current.tombstone, requestedBrandId))
627
- return 'brand-mismatch';
628
- const currentRevision = (0, redbox_core_1.isRecordRevision)(current.tombstone.revision)
629
- ? current.tombstone.revision
630
- : redbox_core_1.INITIAL_RECORD_REVISION;
631
- if (expectedRevision !== undefined && currentRevision !== expectedRevision)
632
- return 'stale-revision';
633
- if ((options?.lifecycle?.expectedState && current.tombstone.lifecycleState !== options.lifecycle.expectedState) ||
634
- (options?.lifecycle?.operationId &&
635
- _.get(current.tombstone, 'lifecycleOperation.operationId') !== options.lifecycle.operationId)) {
636
- return 'lifecycle-conflict';
637
- }
638
- return 'capability-unavailable';
639
- }
640
- if (this.isRequestedBrand(current.active, requestedBrandId))
641
- return 'lifecycle-conflict';
642
- return 'not-found';
643
- }
644
- async init() {
123
+ init() {
645
124
  this.registerReadyHook();
646
- const initialization = this._initializationPromise ?? this.performInit();
647
- this._initializationPromise = initialization;
648
- try {
649
- await initialization;
650
- }
651
- catch (error) {
652
- if (this._initializationPromise === initialization) {
653
- this._initializationPromise = undefined;
654
- sails.log.error(`${this.logHeader} storage_initialization_failed`, {
655
- event: 'storage_initialization_failed',
656
- outcome: 'not-ready',
657
- error_classification: this.classifyStorageInitializationError(error),
658
- });
659
- }
660
- throw error;
661
- }
125
+ void this.performInit();
662
126
  }
663
127
  registerReadyHook() {
664
128
  if (this._readyHookRegistered) {
@@ -666,8 +130,8 @@ var Services;
666
130
  }
667
131
  this._readyHookRegistered = true;
668
132
  const that = this;
669
- this.registerSailsHook('on', 'ready', async function () {
670
- await that.init();
133
+ this.registerSailsHook('on', 'ready', function () {
134
+ void that.performInit();
671
135
  });
672
136
  }
673
137
  async collectionExists(collectionName) {
@@ -691,15 +155,7 @@ var Services;
691
155
  }
692
156
  }
693
157
  async performInit() {
694
- if (this._requiredIndicesReady &&
695
- this.recordCol &&
696
- this.deletedRecordCol &&
697
- this.recordIdentityCol &&
698
- this.recordCol &&
699
- this.deletedRecordCol &&
700
- this.recordSchemaArtifactCol &&
701
- this.recordSchemaReferenceCol &&
702
- this.gridFsBucket) {
158
+ if (this.recordCol && this.deletedRecordCol && this.gridFsBucket) {
703
159
  return;
704
160
  }
705
161
  this.db = Record.getDatastore().manager;
@@ -712,13 +168,9 @@ var Services;
712
168
  }
713
169
  this.gridFsBucket = new mongodb.GridFSBucket(this.db);
714
170
  this.recordCol = this.db.collection(Record.tableName);
171
+ await this.recordCol.createIndex({ "figshareSyncIntent.pending": 1, "figshareSyncIntent.readiness": 1, "figshareSyncIntent.requestedAt": 1 });
715
172
  this.deletedRecordCol = this.db.collection(DeletedRecord.tableName);
716
- this.recordIdentityCol = this.db.collection(RECORD_IDENTITY_COLLECTION);
717
- this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
718
- this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
719
173
  await this.createIndices(this.db);
720
- await this.createRecordSchemaIndices();
721
- this._requiredIndicesReady = true;
722
174
  sails.emit('hook:redbox:storage:ready');
723
175
  sails.emit('hook:redbox:datastream:ready');
724
176
  sails.log.verbose(`${this.logHeader} Ready!`);
@@ -727,966 +179,150 @@ var Services;
727
179
  sails.log.verbose(`${this.logHeader} Existing indices:`);
728
180
  const currentIndices = await db.collection(Record.tableName).indexes();
729
181
  sails.log.verbose(JSON.stringify(currentIndices));
730
- const storageConfig = sails.config.storage;
731
- const indices = storageConfig.mongodb?.indices ?? [];
732
- if (_.size(indices) > 0) {
733
- await db.collection(Record.tableName).createIndexes(indices);
734
- }
735
- const deletedRecordIndices = storageConfig.mongodb?.deletedRecordIndices ?? [];
736
- if (_.size(deletedRecordIndices) > 0) {
737
- await db.collection(DeletedRecord.tableName).createIndexes(deletedRecordIndices);
738
- }
739
- const recordIdentityIndices = storageConfig.mongodb?.recordIdentityIndices ?? [
740
- { key: { redboxOid: 1 }, unique: true },
741
- ];
742
- await db.collection(RECORD_IDENTITY_COLLECTION).createIndexes(recordIdentityIndices);
743
- }
744
- async createRecordSchemaIndices() {
745
- await this.createRequiredIndexes(this.recordSchemaArtifactCol, exports.RECORD_SCHEMA_ARTIFACT_INDEXES);
746
- await this.createRequiredIndexes(this.recordSchemaReferenceCol, exports.RECORD_SCHEMA_REFERENCE_INDEXES);
747
- }
748
- async createRequiredIndexes(collection, requiredIndexes) {
749
- let existingIndexes;
750
- try {
751
- existingIndexes = await collection.indexes();
752
- }
753
- catch (error) {
754
- if (!isMongoNamespaceNotFoundError(error)) {
755
- throw error;
756
- }
757
- existingIndexes = [];
758
- }
759
- const missingIndexes = [];
760
- for (const required of requiredIndexes) {
761
- const matchingKeys = existingIndexes.filter(existing => indexKeysEqual(existing, required));
762
- if (matchingKeys.some(existing => indexOptionsEqual(existing, required)))
763
- continue;
764
- if (matchingKeys.length > 0) {
765
- throw new Error(`Existing index ${indexDisplayName(matchingKeys[0])} has options that do not match required index ${indexDisplayName(required)}.`);
766
- }
767
- const matchingName = existingIndexes.find(existing => existing.name === required.name);
768
- if (matchingName) {
769
- throw new Error(`Existing index ${indexDisplayName(matchingName)} has keys that do not match the required definition.`);
770
- }
771
- missingIndexes.push(required);
772
- }
773
- if (missingIndexes.length > 0) {
774
- await collection.createIndexes(missingIndexes);
775
- }
776
- }
777
- recordSchemaSuccess(data) {
778
- const response = new redbox_core_1.StorageServiceResponse();
779
- response.success = true;
780
- response.data = data;
781
- return response;
782
- }
783
- recordSchemaFailure(code, message, action, error) {
784
- const response = new redbox_core_1.StorageServiceResponse();
785
- response.success = false;
786
- response.message = message;
787
- response.details = { code };
788
- const errorType = error instanceof Error ? error.name : typeof error;
789
- sails.log.error(`${this.logHeader} ${action} failed (${code}; ${errorType})`);
790
- return response;
791
- }
792
- recordSchemaFailureFromError(action, error) {
793
- if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
794
- return this.recordSchemaFailure(error.code, error.message, action, error);
795
- }
796
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage operation failed.', action, error);
797
- }
798
- throwRecordSchemaReadFailure(action, error) {
799
- if (error instanceof recordSchemaPersistence_1.RecordSchemaPersistenceError) {
800
- throw error;
801
- }
802
- const errorType = error instanceof Error ? error.name : typeof error;
803
- sails.log.error(`${this.logHeader} ${action} failed (${errorType})`);
804
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema storage read failed.');
805
- }
806
- artifactCollection() {
807
- if (!this.recordSchemaArtifactCol) {
808
- this.db = this.db ?? RecordSchemaArtifact.getDatastore().manager;
809
- this.recordSchemaArtifactCol = this.db.collection(RecordSchemaArtifact.tableName);
810
- }
811
- return this.recordSchemaArtifactCol;
812
- }
813
- referenceCollection() {
814
- if (!this.recordSchemaReferenceCol) {
815
- this.db = this.db ?? RecordSchemaReference.getDatastore().manager;
816
- this.recordSchemaReferenceCol = this.db.collection(RecordSchemaReference.tableName);
817
- }
818
- return this.recordSchemaReferenceCol;
819
- }
820
- recordSchemaReferenceDocument(reference, now) {
821
- const document = {
822
- referenceKey: reference.referenceKey,
823
- digest: reference.digest,
824
- kind: reference.kind,
825
- brand: reference.brand,
826
- portal: reference.portal,
827
- schemaKind: reference.schemaKind,
828
- recordType: reference.recordType,
829
- operation: reference.operation,
830
- createdAt: now,
831
- updatedAt: now,
832
- };
833
- if (reference.kind === 'save' || (reference.kind === 'grant' && reference.schemaKind === 'update')) {
834
- document.oid = reference.oid;
835
- }
836
- if (reference.kind === 'pin') {
837
- document.owner = reference.owner;
838
- document.purpose = reference.purpose;
839
- if (reference.expiresAt !== undefined) {
840
- document.expiresAt = reference.expiresAt;
841
- }
842
- }
843
- return document;
844
- }
845
- async existingArtifactMatches(existing, artifact) {
846
- return (0, recordSchemaPersistence_1.artifactContentIdentity)((0, recordSchemaPersistence_1.artifactModelFromDocument)(existing)) === (0, recordSchemaPersistence_1.artifactContentIdentity)(artifact);
847
- }
848
- async putRecordSchemaArtifact(artifact) {
849
- try {
850
- const validated = (0, recordSchemaPersistence_1.validateRecordSchemaArtifactInput)(artifact);
851
- const collection = this.artifactCollection();
852
- const existing = await collection.findOne({ digest: validated.digest });
853
- if (existing) {
854
- if (await this.existingArtifactMatches(existing, validated)) {
855
- return this.recordSchemaSuccess({ digest: validated.digest });
856
- }
857
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact');
858
- }
859
- const now = new Date();
860
- try {
861
- await collection.insertOne({
862
- digest: validated.digest,
863
- document: validated.document,
864
- contractFormat: validated.contractFormat,
865
- completeness: validated.completeness,
866
- byteLength: validated.byteLength,
867
- createdAt: now,
868
- updatedAt: now,
869
- });
870
- }
871
- catch (error) {
872
- if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
873
- throw error;
874
- }
875
- const racedArtifact = await collection.findOne({ digest: validated.digest });
876
- if (!racedArtifact || !(await this.existingArtifactMatches(racedArtifact, validated))) {
877
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.DIGEST_COLLISION, 'Record schema artifact integrity check failed.', 'putRecordSchemaArtifact', error);
878
- }
879
- }
880
- return this.recordSchemaSuccess({ digest: validated.digest });
881
- }
882
- catch (error) {
883
- return this.recordSchemaFailureFromError('putRecordSchemaArtifact', error);
884
- }
885
- }
886
- async getRecordSchemaArtifact(digest) {
887
- const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
888
- try {
889
- const document = await this.artifactCollection().findOne({ digest: validatedDigest });
890
- return document ? (0, recordSchemaPersistence_1.artifactModelFromDocument)(document) : null;
891
- }
892
- catch (error) {
893
- const errorType = error instanceof Error ? error.name : typeof error;
894
- sails.log.error(`${this.logHeader} getRecordSchemaArtifact failed (${errorType})`);
895
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, 'Record schema artifact read failed.');
896
- }
897
- }
898
- async listRecordSchemaArtifacts(query) {
899
- try {
900
- if (!query || typeof query !== 'object') {
901
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_ARTIFACT, 'Record schema artifact query is required.');
902
- }
903
- const limit = this.recordSchemaQueryLimit(query.limit);
904
- const criteria = {};
905
- if (query.afterDigest !== undefined) {
906
- criteria.digest = { $gt: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.afterDigest) };
907
- }
908
- const documents = await this.artifactCollection()
909
- .find(criteria, { projection: { _id: 0, digest: 1, createdAt: 1 } })
910
- .sort({ digest: 1 })
911
- .limit(limit)
912
- .toArray();
913
- return documents.map(document => ({
914
- digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(document.digest),
915
- createdAt: this.storedRecordSchemaDate(document.createdAt, 'artifact createdAt'),
916
- }));
917
- }
918
- catch (error) {
919
- return this.throwRecordSchemaReadFailure('listRecordSchemaArtifacts', error);
920
- }
921
- }
922
- async touchRecordSchemaArtifact(digest) {
923
- try {
924
- const validatedDigest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(digest);
925
- const result = await this.artifactCollection().updateOne({ digest: validatedDigest }, { $set: { lastAccessedAt: new Date() } });
926
- if (result.matchedCount !== 1) {
927
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema artifact was not found.', 'touchRecordSchemaArtifact');
928
- }
929
- return this.recordSchemaSuccess({ digest: validatedDigest });
930
- }
931
- catch (error) {
932
- return this.recordSchemaFailureFromError('touchRecordSchemaArtifact', error);
933
- }
934
- }
935
- async storeRecordSchemaReference(reference, now) {
936
- const collection = this.referenceCollection();
937
- const existing = await collection.findOne({ referenceKey: reference.referenceKey });
938
- if (existing) {
939
- if ((0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(existing)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
940
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference');
941
- }
942
- await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
943
- return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
944
- }
945
- try {
946
- await collection.insertOne(this.recordSchemaReferenceDocument(reference, now));
947
- }
948
- catch (error) {
949
- if (!(0, recordSchemaPersistence_1.isDuplicateKeyError)(error)) {
950
- throw error;
951
- }
952
- const racedReference = await collection.findOne({ referenceKey: reference.referenceKey });
953
- if (!racedReference ||
954
- (0, recordSchemaPersistence_1.referenceContentIdentity)((0, recordSchemaPersistence_1.referenceModelFromDocument)(racedReference)) !== (0, recordSchemaPersistence_1.referenceContentIdentity)(reference)) {
955
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.REFERENCE_KEY_COLLISION, 'Record schema reference integrity check failed.', 'putRecordSchemaReference', error);
956
- }
957
- await collection.updateOne({ referenceKey: reference.referenceKey }, { $set: { updatedAt: now } });
958
- }
959
- return this.recordSchemaSuccess({ referenceKey: reference.referenceKey });
960
- }
961
- async putRecordSchemaReference(reference) {
962
- try {
963
- const validated = (0, recordSchemaPersistence_1.validateRecordSchemaReferenceInput)(reference);
964
- const now = new Date();
965
- const artifactCriteria = { digest: validated.digest };
966
- const artifact = await this.artifactCollection().findOne(artifactCriteria, {
967
- projection: { _id: 1 },
968
- });
969
- if (!artifact) {
970
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
971
- }
972
- const response = await this.storeRecordSchemaReference(validated, now);
973
- if (!response.success) {
974
- return response;
975
- }
976
- // Reference writes and retention deletion share this lock protocol.
977
- // A writer that raced with deletion removes its own temporary row and
978
- // fails, so no successful reference can become orphaned.
979
- const artifactAfterWrite = await this.artifactCollection().findOne({ digest: validated.digest }, { projection: { _id: 1 } });
980
- if (!artifactAfterWrite) {
981
- await this.referenceCollection().deleteOne({
982
- referenceKey: validated.referenceKey,
983
- digest: validated.digest,
984
- });
985
- return this.recordSchemaFailure(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.ARTIFACT_NOT_FOUND, 'Record schema reference target was not found.', 'putRecordSchemaReference');
986
- }
987
- return response;
988
- }
989
- catch (error) {
990
- return this.recordSchemaFailureFromError('putRecordSchemaReference', error);
991
- }
992
- }
993
- recordSchemaQueryString(value, field, maximumLength = 512) {
994
- if (typeof value !== 'string' || value.length === 0 || value !== value.trim() || value.length > maximumLength) {
995
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, `Record schema reference query ${field} is invalid.`);
996
- }
997
- return value;
998
- }
999
- recordSchemaQueryLimit(value) {
1000
- if (typeof value !== 'number' ||
1001
- !Number.isSafeInteger(value) ||
1002
- value <= 0 ||
1003
- value > recordSchemaPersistence_1.RECORD_SCHEMA_REFERENCE_QUERY_LIMIT_MAX) {
1004
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, `Record schema reference query limit must be between 1 and ${recordSchemaPersistence_1.RECORD_SCHEMA_REFERENCE_QUERY_LIMIT_MAX}.`);
1005
- }
1006
- return value;
1007
- }
1008
- async findRecordSchemaGrantForAuthorization(query) {
1009
182
  try {
1010
- if (!query || typeof query !== 'object') {
1011
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query is required.');
1012
- }
1013
- const schemaKind = query.schemaKind;
1014
- if (schemaKind !== 'create' && schemaKind !== 'update') {
1015
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query schemaKind is invalid.');
1016
- }
1017
- if (!Array.isArray(query.roleNames)) {
1018
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query roleNames is invalid.');
183
+ const storageConfig = sails.config.storage;
184
+ const indices = storageConfig.mongodb?.indices ?? [];
185
+ if (_.size(indices) > 0) {
186
+ await db.collection(Record.tableName).createIndexes(indices);
1019
187
  }
1020
- const roleNames = [
1021
- ...new Set(query.roleNames.map(role => this.recordSchemaQueryString(role, 'roleNames'))),
1022
- ].sort();
1023
- const criteria = {
1024
- digest: (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest),
1025
- kind: 'grant',
1026
- brand: this.recordSchemaQueryString(query.brand, 'brand'),
1027
- portal: this.recordSchemaQueryString(query.portal, 'portal'),
1028
- schemaKind,
1029
- recordType: this.recordSchemaQueryString(query.recordType, 'recordType'),
1030
- operation: this.recordSchemaQueryString(query.operation, 'operation', 64),
1031
- };
1032
- if (query.afterReferenceKey !== undefined) {
1033
- const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1034
- if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1035
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema authorization query afterReferenceKey is invalid.');
1036
- }
1037
- criteria.referenceKey = { $gt: afterReferenceKey };
1038
- }
1039
- if (schemaKind === 'create') {
1040
- const grant = await this.referenceCollection().findOne(criteria, {
1041
- sort: { referenceKey: 1 },
1042
- hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY,
1043
- maxTimeMS: exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS,
1044
- });
1045
- return grant ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grant) : null;
1046
- }
1047
- const username = this.recordSchemaQueryString(query.username, 'username');
1048
- const recordBrandId = this.recordSchemaQueryString(query.recordBrandId, 'recordBrandId');
1049
- const editConditions = [{ 'authorization.edit': username }];
1050
- if (roleNames.length > 0) {
1051
- editConditions.push({ 'authorization.editRoles': { $in: roleNames } });
1052
- }
1053
- const grants = await this.referenceCollection()
1054
- .aggregate([
1055
- { $match: criteria },
1056
- {
1057
- $lookup: {
1058
- from: Record.tableName,
1059
- localField: 'oid',
1060
- foreignField: 'redboxOid',
1061
- pipeline: [
1062
- {
1063
- $match: {
1064
- 'metaMetadata.brandId': recordBrandId,
1065
- $or: editConditions,
1066
- },
1067
- },
1068
- ],
1069
- as: 'authorizedRecords',
1070
- },
1071
- },
1072
- { $match: { 'authorizedRecords.0': { $exists: true } } },
1073
- { $sort: { referenceKey: 1 } },
1074
- { $limit: 1 },
1075
- ], { hint: exports.RECORD_SCHEMA_AUTHORIZATION_CURSOR_INDEX_KEY })
1076
- .maxTimeMS(exports.RECORD_SCHEMA_AUTHORIZATION_LOOKUP_MAX_TIME_MS)
1077
- .toArray();
1078
- return grants[0] ? (0, recordSchemaPersistence_1.referenceModelFromDocument)(grants[0]) : null;
1079
188
  }
1080
- catch (error) {
1081
- return this.throwRecordSchemaReadFailure('findRecordSchemaGrantForAuthorization', error);
189
+ catch (err) {
190
+ sails.log.error(`Failed to create indices:`);
191
+ sails.log.error(JSON.stringify(err));
1082
192
  }
1083
- }
1084
- async listRecordSchemaReferences(query) {
1085
193
  try {
1086
- if (!query || typeof query !== 'object') {
1087
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query is required.');
1088
- }
1089
- const limit = this.recordSchemaQueryLimit(query.limit);
1090
- const criteria = {};
1091
- if (query.digest !== undefined) {
1092
- criteria.digest = (0, recordSchemaPersistence_1.validateRecordSchemaDigest)(query.digest);
1093
- }
1094
- if (query.kind !== undefined) {
1095
- if (!['grant', 'save', 'pin'].includes(query.kind)) {
1096
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query kind is invalid.');
1097
- }
1098
- criteria.kind = query.kind;
1099
- }
1100
- if (query.schemaKind !== undefined) {
1101
- if (query.schemaKind !== 'create' && query.schemaKind !== 'update') {
1102
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query schemaKind is invalid.');
1103
- }
1104
- criteria.schemaKind = query.schemaKind;
1105
- }
1106
- for (const [field, value] of [
1107
- ['brand', query.brand],
1108
- ['portal', query.portal],
1109
- ['recordType', query.recordType],
1110
- ['oid', query.oid],
1111
- ['operation', query.operation],
1112
- ['owner', query.owner],
1113
- ]) {
1114
- if (value !== undefined) {
1115
- criteria[field] = this.recordSchemaQueryString(value, field);
1116
- }
1117
- }
1118
- if (query.includeExpiredPins !== undefined && typeof query.includeExpiredPins !== 'boolean') {
1119
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query includeExpiredPins must be boolean.');
1120
- }
1121
- if (query.includeExpiredPins !== true) {
1122
- criteria.$and = [
1123
- {
1124
- $or: [{ kind: { $ne: 'pin' } }, { expiresAt: { $exists: false } }, { expiresAt: { $gt: new Date() } }],
1125
- },
1126
- ];
1127
- }
1128
- if (query.afterReferenceKey !== undefined) {
1129
- const afterReferenceKey = this.recordSchemaQueryString(query.afterReferenceKey, 'afterReferenceKey');
1130
- if (!RecordSchemaReference_1.RECORD_SCHEMA_REFERENCE_KEY_PATTERN.test(afterReferenceKey)) {
1131
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.INVALID_REFERENCE, 'Record schema reference query afterReferenceKey is invalid.');
1132
- }
1133
- criteria.referenceKey = { $gt: afterReferenceKey };
1134
- }
1135
- const documents = await this.referenceCollection()
1136
- .find(criteria)
1137
- .sort({ referenceKey: 1 })
1138
- .limit(limit)
1139
- .toArray();
1140
- return documents.map(recordSchemaPersistence_1.referenceModelFromDocument);
194
+ await db.collection(RecordAudit.tableName).createIndex({ redboxOid: 1, createdAt: 1 });
1141
195
  }
1142
- catch (error) {
1143
- return this.throwRecordSchemaReadFailure('listRecordSchemaReferences', error);
1144
- }
1145
- }
1146
- storedRecordSchemaDate(value, field) {
1147
- const date = value instanceof Date ? value : new Date(String(value ?? ''));
1148
- if (Number.isNaN(date.getTime())) {
1149
- throw new recordSchemaPersistence_1.RecordSchemaPersistenceError(recordSchemaPersistence_1.RECORD_SCHEMA_STORAGE_CODES.STORAGE_FAILED, `Stored record schema ${field} is invalid.`);
196
+ catch (err) {
197
+ sails.log.error(`Failed to create record audit index:`);
198
+ sails.log.error(JSON.stringify(err));
1150
199
  }
1151
- return date;
1152
200
  }
1153
- async create(_brand, record, _recordType, _user, options) {
201
+ async create(_brand, record, _recordType, _user, options = {}) {
1154
202
  sails.log.verbose(`${this.logHeader} create() -> Begin`);
1155
- // RecordsService may pre-assign the OID so attachment journal rows can
1156
- // be prepared before the primary metadata commit. Preserve it when
1157
- // supplied, while retaining the historical generated-OID behavior.
1158
- record.redboxOid = record.redboxOid ?? this.getUuid();
1159
- const response = this.createMutationResponse(String(record.redboxOid), options);
1160
- const precondition = options?.precondition;
1161
- // A create has no prior revision to compare, so a caller asserting one is
1162
- // addressing a record that this call cannot be. An empty precondition is
1163
- // accepted so callers can pass one normalized options object everywhere.
1164
- if (precondition && (precondition.requireRevision || precondition.expectedRevision !== undefined)) {
1165
- return this.notApplied(response, 'lifecycle-conflict', 'Record creation does not accept an existing revision');
1166
- }
1167
- const serverRecord = _.cloneDeep(record);
1168
- // The storage boundary owns creation revision regardless of anything a
1169
- // request candidate supplied.
1170
- serverRecord.revision = redbox_core_1.INITIAL_RECORD_REVISION;
1171
- _.unset(serverRecord, '_id');
1172
- _.unset(serverRecord, 'id');
1173
- _.unset(serverRecord, 'incarnationId');
1174
- _.unset(serverRecord, 'lifecycleOperationId');
1175
- const records = this.getNativeRecordCollection();
1176
- if (typeof records?.insertOne !== 'function') {
1177
- return this.notApplied(response, 'capability-unavailable', 'Atomic active record creation is unavailable');
1178
- }
1179
- let identity;
1180
- try {
1181
- identity = await this.claimNewRecordIdentity(String(record.redboxOid));
1182
- }
1183
- catch {
1184
- return this.unknownMutation(response, 'Durable record identity ownership could not be confirmed');
1185
- }
1186
- if (!identity) {
1187
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1188
- }
1189
- if ('collision' in identity) {
1190
- return this.notApplied(response, 'lifecycle-conflict', 'The record OID already has a durable incarnation');
1191
- }
1192
- const now = new Date().toISOString();
1193
- const claimedIncarnationId = identity.incarnationId;
1194
- serverRecord.incarnationId = claimedIncarnationId;
1195
- serverRecord.dateCreated = serverRecord.dateCreated ?? now;
1196
- serverRecord.lastSaveDate = now;
203
+ const response = new redbox_core_1.StorageServiceResponse();
204
+ record.redboxOid = this.getUuid();
205
+ response.oid = String(record.redboxOid);
1197
206
  try {
1198
207
  sails.log.verbose(`${this.logHeader} Saving to DB...`);
1199
- await records.insertOne(serverRecord);
1200
- this.committed(response, serverRecord, 'updated');
208
+ delete record.figshareSyncIntent;
209
+ record.recordVersion = 1;
210
+ if (options.figshareIntent) {
211
+ const { saveToken, readiness, intents } = options.figshareIntent;
212
+ const requestedAt = new Date().toISOString();
213
+ record.figshareSyncIntent = { ...options.figshareIntent, generation: 1, pending: true, requestedAt, saves: [{ saveToken, readiness, requestedAt, intents }] };
214
+ }
215
+ await Record.create(record);
216
+ response.success = true;
1201
217
  sails.log.verbose(`${this.logHeader} Record created...`);
1202
218
  }
1203
219
  catch (err) {
1204
- if (this.isDuplicateKeyError(err)) {
1205
- // Another writer owns this OID's state, so its ledger row is correct.
1206
- return this.notApplied(response, 'lifecycle-conflict', 'The record OID already exists');
1207
- }
1208
- sails.log.error(`${this.logHeader} record_create_outcome_unknown`, {
1209
- event: 'record_create_outcome_unknown',
1210
- error_type: err instanceof Error ? err.name : 'unknown',
1211
- });
1212
- let observed;
1213
- try {
1214
- observed = await this.readCurrentState(String(record.redboxOid));
1215
- }
1216
- catch {
1217
- observed = undefined;
1218
- }
1219
- if (observed?.active && this.storedIncarnationId(observed.active) === claimedIncarnationId) {
1220
- return this.committed(response, observed.active, 'updated');
1221
- }
1222
- // A dispatched/ambiguous failure may still materialize later, so only
1223
- // a definitive driver rejection is eligible for compensating release.
1224
- if (this.isCertifiedCreateNonApplication(err)) {
1225
- await this.releaseUnusedRecordIdentity(String(record.redboxOid), claimedIncarnationId);
1226
- }
1227
- this.unknownMutation(response, 'Record creation could not be confirmed');
220
+ sails.log.error(`${this.logHeader} Failed to create Record:`);
221
+ sails.log.error(JSON.stringify(err));
222
+ response.success = false;
223
+ response.message = this.getErrorMessage(err);
1228
224
  return response;
1229
225
  }
226
+ sails.log.verbose(JSON.stringify(response));
1230
227
  sails.log.verbose(`${this.logHeader} create() -> End`);
1231
228
  return response;
1232
229
  }
1233
- async updateMeta(brand, oid, record, user, options) {
1234
- const response = this.createMutationResponse(oid, options);
1235
- const expectedRevision = this.expectedRevision(options, response);
1236
- if (expectedRevision === null)
1237
- return response;
1238
- if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1239
- return this.notApplied(response, 'capability-unavailable', 'The record revision cannot be advanced safely');
1240
- }
1241
- const collection = this.getNativeRecordCollection();
1242
- if (!this.supportsAtomicMutation(collection)) {
1243
- return this.notApplied(response, 'capability-unavailable', 'The storage adapter cannot perform an atomic record revision update');
1244
- }
1245
- const candidate = _.cloneDeep(record);
1246
- // Identity, creation, and revision are owned by storage, never by the
1247
- // candidate; lastSaveDate is reissued with the committing write.
1248
- for (const field of [
1249
- '_id',
1250
- 'id',
1251
- 'redboxOid',
1252
- 'revision',
1253
- 'incarnationId',
1254
- 'lifecycleOperationId',
1255
- 'dateCreated',
1256
- 'lastSaveDate',
1257
- ]) {
1258
- _.unset(candidate, field);
1259
- }
1260
- if (this.unsafeCandidateField(candidate) !== undefined) {
1261
- sails.log.error(`${this.logHeader} refusing an update for oid ${oid}: unsupported candidate field name`);
1262
- return this.notApplied(response, 'capability-unavailable', 'Record candidate contains an unsupported field');
1263
- }
1264
- const activeBrandId = this.brandIdOf(brand);
1265
- const candidateSuppliesMetaMetadata = Object.prototype.hasOwnProperty.call(candidate, 'metaMetadata');
1266
- const candidateBrandId = String(_.get(candidate, 'metaMetadata.brandId', '') ?? '').trim();
1267
- if (activeBrandId && candidateSuppliesMetaMetadata && candidateBrandId !== activeBrandId) {
1268
- return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1269
- }
1270
- return this.commitConditionalMutation({
1271
- response,
1272
- kind: 'updated',
1273
- dispatch: () => collection.findOneAndUpdate(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision), {
1274
- $set: { ...candidate, lastSaveDate: new Date().toISOString() },
1275
- $inc: { revision: 1 },
1276
- }, { returnDocument: 'after', includeResultMetadata: false }),
1277
- classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1278
- expectedRevision,
1279
- onDispatchError: err => {
1280
- sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${this.getErrorMessage(err)}`);
1281
- sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
1282
- error: err,
1283
- response,
1284
- brand,
1285
- oid,
1286
- user,
1287
- })}`);
1288
- },
1289
- });
1290
- }
1291
- /**
1292
- * Dispatch one atomic conditional mutation and turn its single driver fact
1293
- * into a mutation response.
1294
- *
1295
- * The three outcomes are deliberately distinct: a returned document is an
1296
- * applied commit, `null` certifies that the selector matched nothing and
1297
- * therefore that no write happened, and anything else — including a throw
1298
- * after dispatch — stays `unknown`. A failed follow-up classification only
1299
- * costs the precise reason; it never turns a certified no-match into a
1300
- * write, and it never issues one.
1301
- */
1302
- async commitConditionalMutation(operation) {
1303
- const { response, kind, dispatch, classify, expectedRevision, onDispatchError } = operation;
1304
- let document;
1305
- try {
1306
- document = this.mutationDocument(await dispatch());
1307
- }
1308
- catch (err) {
1309
- onDispatchError?.(err);
1310
- return this.unknownMutation(response, this.getErrorMessage(err));
1311
- }
1312
- if (document === undefined) {
1313
- return this.unknownMutation(response, 'Storage returned an unrecognized mutation result');
1314
- }
1315
- if (document !== null) {
1316
- return this.committed(response, document, kind, expectedRevision);
1317
- }
1318
- try {
1319
- return this.notApplied(response, await classify());
1320
- }
1321
- catch (err) {
1322
- sails.log.error(`${this.logHeader} could not classify a certified no-match for oid ${response.oid}: ` +
1323
- this.getErrorMessage(err));
1324
- return this.notApplied(response, 'capability-unavailable');
1325
- }
1326
- }
1327
- async removeActiveRecord(brand, oid, options) {
1328
- const response = this.createMutationResponse(oid, options);
1329
- const expectedRevision = this.expectedRevision(options, response);
1330
- if (expectedRevision === null)
1331
- return response;
1332
- const collection = this.getNativeRecordCollection();
1333
- if (!this.supportsAtomicMutation(collection)) {
1334
- return this.notApplied(response, 'capability-unavailable', 'Atomic active record removal is unavailable');
1335
- }
1336
- let current;
1337
- try {
1338
- current = this.mutationDocument(await collection.findOne(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision)));
1339
- if (current && !(await this.ensureRecordIdentity(oid, current))) {
1340
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1341
- }
1342
- }
1343
- catch (error) {
1344
- return this.unknownMutation(response, this.getErrorMessage(error));
1345
- }
1346
- return this.commitConditionalMutation({
1347
- response,
1348
- kind: 'removed',
1349
- dispatch: () => collection.findOneAndDelete(this.mutationSelector(this.activeIdentity(brand, oid), expectedRevision), {
1350
- includeResultMetadata: false,
1351
- }),
1352
- classify: () => this.classifyActiveNoMatch(brand, oid, expectedRevision),
1353
- expectedRevision,
1354
- });
1355
- }
1356
- async createTombstone(brand, oid, record, options) {
1357
- const response = this.createMutationResponse(oid, options);
1358
- const expectedRevision = this.expectedRevision(options, response);
1359
- if (expectedRevision === null)
1360
- return response;
1361
- if (expectedRevision === undefined || !(0, redbox_core_1.isCanonicalSaveRequestId)(options?.lifecycle?.operationId)) {
1362
- return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle intent ownership is required');
1363
- }
1364
- const collection = this.getNativeTombstoneCollection();
1365
- if (!this.supportsAtomicMutation(collection) || typeof collection.insertOne !== 'function') {
1366
- return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone creation is unavailable');
1367
- }
1368
- const candidate = _.cloneDeep(record);
1369
- for (const field of ['_id', 'id'])
1370
- _.unset(candidate, field);
1371
- const operation = candidate.lifecycleOperation;
1372
- const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1373
- const expectedState = options.lifecycle.expectedState;
1374
- if (candidate.redboxOid !== oid ||
1375
- candidate.revision !== targetRevision ||
1376
- !(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState) ||
1377
- !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1378
- (expectedState !== 'delete-pending' && expectedState !== 'purge-pending') ||
1379
- candidate.lifecycleState !== expectedState ||
1380
- !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1381
- operation.operationId !== options.lifecycle.operationId ||
1382
- operation.sourceRevision !== expectedRevision ||
1383
- operation.targetRevision !== targetRevision) {
1384
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle intent is invalid');
1385
- }
1386
- const requestedBrandId = this.brandIdOf(brand);
1387
- const candidateBrandId = String(candidate.brandId ?? '').trim();
1388
- const snapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1389
- if (requestedBrandId && (candidateBrandId !== requestedBrandId || snapshotBrandId !== requestedBrandId)) {
1390
- return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1391
- }
1392
- if (!candidate.deletedRecordMetadata ||
1393
- typeof candidate.deletedRecordMetadata !== 'object' ||
1394
- Array.isArray(candidate.deletedRecordMetadata) ||
1395
- _.get(candidate, 'deletedRecordMetadata.redboxOid') !== oid) {
1396
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1397
- }
1398
- _.unset(candidate, 'deletedRecordMetadata.revision');
1399
- let incarnationId;
1400
- try {
1401
- incarnationId = await this.ensureRecordIdentity(oid, candidate.deletedRecordMetadata);
1402
- }
1403
- catch (error) {
1404
- return this.unknownMutation(response, this.getErrorMessage(error));
1405
- }
1406
- if (!incarnationId) {
1407
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1408
- }
1409
- const suppliedIncarnationId = this.storedIncarnationId(candidate) ?? this.storedIncarnationId(candidate.deletedRecordMetadata);
1410
- if (suppliedIncarnationId && suppliedIncarnationId !== incarnationId) {
1411
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone incarnation identity diverged');
1412
- }
1413
- candidate.incarnationId = incarnationId;
1414
- candidate.deletedRecordMetadata.incarnationId = incarnationId;
1415
- try {
1416
- await collection.insertOne(candidate);
1417
- return this.committed(response, candidate, 'updated', expectedRevision);
1418
- }
1419
- catch (error) {
1420
- if (!this.isDuplicateKeyError(error)) {
1421
- return this.unknownMutation(response, this.getErrorMessage(error));
1422
- }
1423
- try {
1424
- const existing = this.mutationDocument(await collection.findOne({ redboxOid: oid }));
1425
- if (existing === undefined)
1426
- return this.unknownMutation(response, 'Tombstone ownership could not be observed');
1427
- if (existing === null)
1428
- return this.notApplied(response, 'lifecycle-conflict');
1429
- if (!this.isRequestedBrand(existing, requestedBrandId))
1430
- return this.notApplied(response, 'brand-mismatch');
1431
- const existingOperation = existing.lifecycleOperation;
1432
- if (!(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1433
- existing.revision < targetRevision ||
1434
- !(0, redbox_core_1.isDeletedRecordLifecycleState)(existing.lifecycleState) ||
1435
- !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(existingOperation) ||
1436
- !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(existing.lifecycleState, existingOperation.kind) ||
1437
- existingOperation.operationId !== options.lifecycle.operationId ||
1438
- existingOperation.kind !== operation.kind) {
1439
- return this.notApplied(response, 'lifecycle-conflict');
1440
- }
1441
- return this.committed(response, existing, 'updated');
1442
- }
1443
- catch (readError) {
1444
- return this.unknownMutation(response, this.getErrorMessage(readError));
1445
- }
1446
- }
1447
- }
1448
- async updateTombstone(brand, oid, record, options) {
1449
- const response = this.createMutationResponse(oid, options);
1450
- const expectedRevision = this.expectedRevision(options, response);
1451
- if (expectedRevision === null)
1452
- return response;
1453
- if (expectedRevision === Number.MAX_SAFE_INTEGER) {
1454
- return this.notApplied(response, 'capability-unavailable', 'The tombstone revision cannot be advanced safely');
1455
- }
1456
- const collection = this.getNativeTombstoneCollection();
1457
- if (!this.supportsAtomicMutation(collection)) {
1458
- return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone update is unavailable');
1459
- }
1460
- if (expectedRevision === undefined || !options?.lifecycle?.expectedState) {
1461
- return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle state and revision are required');
1462
- }
1463
- const candidate = _.cloneDeep(record);
1464
- for (const field of ['_id', 'id', 'redboxOid', 'revision', 'incarnationId', 'dateDeleted'])
1465
- _.unset(candidate, field);
1466
- if (this.unsafeCandidateField(candidate) !== undefined) {
1467
- sails.log.error(`${this.logHeader} refusing a tombstone update for oid ${oid}: unsupported candidate field`);
1468
- return this.notApplied(response, 'capability-unavailable', 'Tombstone candidate contains an unsupported field');
1469
- }
1470
- if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(candidate.lifecycleState)) {
1471
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle state is invalid');
1472
- }
1473
- const operation = candidate.lifecycleOperation;
1474
- if (!(0, redbox_core_1.isDeletedRecordLifecycleOperation)(operation) ||
1475
- !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(candidate.lifecycleState, operation.kind) ||
1476
- operation.sourceRevision > expectedRevision ||
1477
- operation.targetRevision !== (0, redbox_core_1.nextRecordRevision)(expectedRevision) ||
1478
- (options.lifecycle.operationId !== undefined && operation.operationId !== options.lifecycle.operationId)) {
1479
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone lifecycle operation is invalid');
1480
- }
1481
- if (candidate.deletedRecordMetadata !== undefined &&
1482
- (candidate.deletedRecordMetadata === null ||
1483
- typeof candidate.deletedRecordMetadata !== 'object' ||
1484
- Array.isArray(candidate.deletedRecordMetadata))) {
1485
- return this.notApplied(response, 'lifecycle-conflict', 'Tombstone record snapshot is invalid');
1486
- }
1487
- if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1488
- // The wrapper is the sole current lifecycle revision authority. Source
1489
- // lineage lives in lifecycleOperation.sourceRevision.
1490
- _.unset(candidate, 'deletedRecordMetadata.revision');
1491
- }
1492
- try {
1493
- const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1494
- if (current) {
1495
- const incarnationId = await this.ensureRecordIdentity(oid, current);
1496
- if (!incarnationId) {
1497
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1498
- }
1499
- if (candidate.deletedRecordMetadata && typeof candidate.deletedRecordMetadata === 'object') {
1500
- candidate.deletedRecordMetadata.incarnationId = incarnationId;
1501
- }
1502
- }
1503
- }
1504
- catch (error) {
1505
- return this.unknownMutation(response, this.getErrorMessage(error));
1506
- }
1507
- const activeBrandId = this.brandIdOf(brand);
1508
- const candidateBrandId = String(candidate.brandId ?? '').trim();
1509
- const candidateSuppliesBrandId = Object.prototype.hasOwnProperty.call(candidate, 'brandId');
1510
- const candidateSuppliesSnapshot = Object.prototype.hasOwnProperty.call(candidate, 'deletedRecordMetadata');
1511
- const candidateSnapshotBrandId = String(_.get(candidate, 'deletedRecordMetadata.metaMetadata.brandId', '') ?? '').trim();
1512
- if (activeBrandId &&
1513
- ((candidateSuppliesBrandId && candidateBrandId !== activeBrandId) ||
1514
- (candidateSuppliesSnapshot && candidateSnapshotBrandId !== activeBrandId))) {
1515
- return this.notApplied(response, 'brand-mismatch', 'Tombstone was not found');
1516
- }
1517
- return this.commitConditionalMutation({
1518
- response,
1519
- kind: 'updated',
1520
- dispatch: () => collection.findOneAndUpdate(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { $set: candidate, $inc: { revision: 1 } }, { returnDocument: 'after', includeResultMetadata: false }),
1521
- classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1522
- expectedRevision,
1523
- });
1524
- }
1525
- async removeTombstone(brand, oid, options) {
1526
- const response = this.createMutationResponse(oid, options);
1527
- const expectedRevision = this.expectedRevision(options, response);
1528
- if (expectedRevision === null)
1529
- return response;
1530
- if (expectedRevision === undefined ||
1531
- !options?.lifecycle?.expectedState ||
1532
- !(0, redbox_core_1.isCanonicalSaveRequestId)(options.lifecycle.operationId)) {
1533
- return this.notApplied(response, 'capability-unavailable', 'Exact lifecycle removal ownership is required');
1534
- }
1535
- const collection = this.getNativeTombstoneCollection();
1536
- if (!this.supportsAtomicMutation(collection)) {
1537
- return this.notApplied(response, 'capability-unavailable', 'Atomic tombstone removal is unavailable');
1538
- }
230
+ async updateMeta(brand, oid, record, user, options = {}) {
231
+ const response = new redbox_core_1.StorageServiceResponse();
232
+ response.oid = oid;
1539
233
  try {
1540
- const current = this.mutationDocument(await collection.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1541
- if (current && !(await this.ensureRecordIdentity(oid, current))) {
1542
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
234
+ _.unset(record, 'dateCreated');
235
+ _.unset(record, 'lastSaveDate');
236
+ _.unset(record, '_id');
237
+ _.unset(record, 'id');
238
+ delete record.figshareSyncIntent;
239
+ delete record.recordVersion;
240
+ const filter = { redboxOid: oid };
241
+ if (options.expectedVersion != null)
242
+ filter.recordVersion = options.expectedVersion === 0 ? { $in: [0, null] } : options.expectedVersion;
243
+ const assignments = Object.fromEntries(Object.entries(record).map(([key, value]) => [key, { $literal: value }]));
244
+ assignments.lastSaveDate = { $literal: new Date().toISOString() };
245
+ assignments.recordVersion = { $add: [{ $ifNull: ['$recordVersion', 0] }, 1] };
246
+ if (options.figshareIntent) {
247
+ const intent = options.figshareIntent;
248
+ const requestedAt = new Date().toISOString();
249
+ const save = { saveToken: intent.saveToken, readiness: intent.readiness, requestedAt, intents: intent.intents };
250
+ assignments.figshareSyncIntent = {
251
+ $mergeObjects: [
252
+ { $literal: { ...intent, pending: true, requestedAt } },
253
+ { generation: { $add: [{ $ifNull: ['$figshareSyncIntent.generation', 0] }, 1] },
254
+ saves: { $concatArrays: [priorFigshareSaves, [{ $literal: save }]] } }
255
+ ]
256
+ };
1543
257
  }
258
+ const result = await this.recordCol.findOneAndUpdate(filter, [{ $set: assignments }, ...(options.figshareIntent ? [deriveFigshareIntent] : [])], { returnDocument: 'after', includeResultMetadata: false });
259
+ if (!result && options.expectedVersion != null)
260
+ throw new redbox_core_1.RecordWriteConflict();
261
+ response.success = result != null;
262
+ if (result)
263
+ response.metadata = { recordVersion: result.recordVersion, figshareSyncIntent: result.figshareSyncIntent };
1544
264
  }
1545
- catch (error) {
1546
- return this.unknownMutation(response, this.getErrorMessage(error));
1547
- }
1548
- return this.commitConditionalMutation({
1549
- response,
1550
- kind: 'removed',
1551
- dispatch: () => collection.findOneAndDelete(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options), { includeResultMetadata: false }),
1552
- classify: () => this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options),
1553
- expectedRevision,
1554
- });
1555
- }
1556
- async createActiveRecordFromTombstone(brand, oid, record, options) {
1557
- const response = this.createMutationResponse(oid, options);
1558
- const expectedRevision = this.expectedRevision(options, response);
1559
- const operationId = options?.lifecycle?.operationId;
1560
- if (expectedRevision === null ||
1561
- expectedRevision === undefined ||
1562
- !(0, redbox_core_1.isCanonicalSaveRequestId)(operationId) ||
1563
- (options?.lifecycle?.expectedState !== 'restore-pending' &&
1564
- options?.lifecycle?.expectedState !== 'recovery-required')) {
1565
- return this.notApplied(response, 'capability-unavailable', 'Exact restore ownership is required');
1566
- }
1567
- const records = this.getNativeRecordCollection();
1568
- const tombstones = this.getNativeTombstoneCollection();
1569
- if (!this.supportsAtomicMutation(records) ||
1570
- !this.supportsAtomicMutation(tombstones) ||
1571
- typeof records.insertOne !== 'function') {
1572
- return this.notApplied(response, 'capability-unavailable', 'Atomic restore creation is unavailable');
1573
- }
1574
- let claimed;
1575
- try {
1576
- claimed = this.mutationDocument(await tombstones.findOne(this.lifecycleMutationSelector(this.tombstoneIdentity(brand, oid), expectedRevision, options)));
1577
- }
1578
- catch (error) {
1579
- return this.unknownMutation(response, this.getErrorMessage(error));
1580
- }
1581
- if (claimed === undefined)
1582
- return this.unknownMutation(response, 'Restore ownership could not be observed');
1583
- if (claimed === null) {
1584
- const reason = await this.classifyLifecycleTombstoneNoMatch(brand, oid, expectedRevision, options).catch(() => 'capability-unavailable');
1585
- return this.notApplied(response, reason);
1586
- }
1587
- const targetRevision = (0, redbox_core_1.nextRecordRevision)(expectedRevision);
1588
- const claimedOperation = claimed.lifecycleOperation;
1589
- const claimedSnapshot = claimed.deletedRecordMetadata;
1590
- if (!(0, redbox_core_1.isDeletedRecordLifecycleState)(claimed.lifecycleState) ||
1591
- !(0, redbox_core_1.isDeletedRecordLifecycleOperation)(claimedOperation) ||
1592
- !(0, redbox_core_1.isDeletedRecordLifecycleOperationForState)(claimed.lifecycleState, claimedOperation.kind) ||
1593
- claimedOperation.kind !== 'restore' ||
1594
- claimedOperation.operationId !== operationId ||
1595
- claimedOperation.targetRevision !== expectedRevision ||
1596
- !claimedSnapshot ||
1597
- typeof claimedSnapshot !== 'object' ||
1598
- Array.isArray(claimedSnapshot)) {
1599
- return this.notApplied(response, 'lifecycle-conflict', 'Claimed restore state is invalid');
1600
- }
1601
- let incarnationId;
1602
- try {
1603
- incarnationId = await this.ensureRecordIdentity(oid, claimed);
1604
- }
1605
- catch (error) {
1606
- return this.unknownMutation(response, this.getErrorMessage(error));
1607
- }
1608
- if (!incarnationId) {
1609
- return this.notApplied(response, 'capability-unavailable', 'Durable record identity ownership is unavailable');
1610
- }
1611
- const claimedIncarnationId = this.storedIncarnationId(claimed) ?? this.storedIncarnationId(claimedSnapshot);
1612
- if (claimedIncarnationId && claimedIncarnationId !== incarnationId) {
1613
- return this.notApplied(response, 'lifecycle-conflict', 'Restore incarnation identity diverged');
1614
- }
1615
- const restoredInput = _.cloneDeep(record);
1616
- const restored = _.cloneDeep(claimedSnapshot);
1617
- for (const field of ['_id', 'id', 'revision', 'incarnationId', 'lifecycleOperationId', 'lastSaveDate']) {
1618
- _.unset(restored, field);
1619
- }
1620
- const requestedBrandId = this.brandIdOf(brand);
1621
- if (restoredInput.redboxOid !== oid ||
1622
- restored.redboxOid !== oid ||
1623
- (requestedBrandId &&
1624
- (String(_.get(restoredInput, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId ||
1625
- String(_.get(restored, 'metaMetadata.brandId', '') ?? '').trim() !== requestedBrandId))) {
1626
- return this.notApplied(response, 'brand-mismatch', 'Record was not found');
1627
- }
1628
- if (this.unsafeCandidateField(restored) !== undefined) {
1629
- return this.notApplied(response, 'lifecycle-conflict', 'Restored record contains an unsupported field');
1630
- }
1631
- const candidate = {
1632
- ...restored,
1633
- redboxOid: oid,
1634
- revision: targetRevision,
1635
- incarnationId,
1636
- lifecycleOperationId: operationId,
1637
- lastSaveDate: new Date().toISOString(),
1638
- };
1639
- try {
1640
- await records.insertOne(candidate);
1641
- return this.committed(response, candidate, 'updated', expectedRevision);
1642
- }
1643
- catch (error) {
1644
- if (!this.isDuplicateKeyError(error)) {
1645
- return this.unknownMutation(response, this.getErrorMessage(error));
1646
- }
1647
- try {
1648
- const existing = this.mutationDocument(await records.findOne({ redboxOid: oid }));
1649
- if (existing === undefined)
1650
- return this.unknownMutation(response, 'Restored active state could not be observed');
1651
- if (existing === null)
1652
- return this.notApplied(response, 'lifecycle-conflict');
1653
- if (!this.isRequestedBrand(existing, requestedBrandId))
1654
- return this.notApplied(response, 'brand-mismatch');
1655
- if (existing.lifecycleOperationId !== operationId ||
1656
- !(0, redbox_core_1.isRecordRevision)(existing.revision) ||
1657
- existing.revision < targetRevision) {
1658
- return this.notApplied(response, 'lifecycle-conflict');
1659
- }
1660
- return this.committed(response, existing, 'updated');
1661
- }
1662
- catch (readError) {
1663
- return this.unknownMutation(response, this.getErrorMessage(readError));
1664
- }
265
+ catch (err) {
266
+ if (err instanceof redbox_core_1.RecordWriteConflict)
267
+ throw err;
268
+ const errorMessage = this.getErrorMessage(err);
269
+ sails.log.error(`${this.logHeader} updateMeta() failed for oid ${oid}: ${errorMessage}`);
270
+ sails.log.error(`${this.logHeader} Failed to save update to MongoDB: ${JSON.stringify({
271
+ error: err,
272
+ response,
273
+ brand,
274
+ oid,
275
+ record,
276
+ user,
277
+ })}`);
278
+ response.success = false;
279
+ response.message = errorMessage;
1665
280
  }
281
+ return response;
1666
282
  }
1667
- async getTombstone(brand, oid) {
1668
- if (!oid.trim())
1669
- throw new Error(`${this.logHeader} getTombstone() -> refusing to search using an empty OID`);
1670
- const collection = this.getNativeTombstoneCollection();
1671
- if (typeof collection?.findOne !== 'function')
1672
- throw new Error('Tombstone reads are unavailable');
1673
- const result = this.mutationDocument(await collection.findOne(this.tombstoneIdentity(brand, oid)));
1674
- if (result === undefined)
1675
- throw new Error('Storage returned an unrecognized tombstone result');
1676
- return result;
1677
- }
1678
- async getLifecycleTombstones(states, limit = 100) {
1679
- const normalizedStates = states.filter(redbox_core_1.isDeletedRecordLifecycleState);
1680
- if (normalizedStates.length === 0)
1681
- return [];
1682
- const collection = this.getNativeTombstoneCollection();
1683
- if (typeof collection?.find !== 'function')
1684
- throw new Error('Lifecycle recovery scans are unavailable');
1685
- const boundedLimit = Math.max(1, Math.min(Number.isSafeInteger(limit) ? limit : 100, 1000));
1686
- return (await collection
1687
- .find({ lifecycleState: { $in: normalizedStates } })
1688
- .limit(boundedLimit)
1689
- .toArray());
283
+ async scanFigshareRecords(afterOid, limit) {
284
+ return this.recordCol.find({ redboxOid: { $gt: afterOid } }).sort({ redboxOid: 1 }).limit(limit).toArray();
285
+ }
286
+ async findFigshareArticleRecords(path, articleId) {
287
+ (0, redbox_core_1.assertRecordFieldPaths)({ [path]: articleId }, [path]);
288
+ return this.recordCol.find({ [path]: { $in: [articleId, Number(articleId)] } }).toArray();
289
+ }
290
+ async setRecordFields(oid, fields, expectedVersion, allowedPaths) {
291
+ (0, redbox_core_1.assertRecordFieldPaths)(fields, allowedPaths);
292
+ const result = await this.recordCol.findOneAndUpdate({ redboxOid: oid, recordVersion: expectedVersion === 0 ? { $in: [0, null] } : expectedVersion }, {
293
+ $set: { ...fields, lastSaveDate: new Date().toISOString() }, $inc: { recordVersion: 1 }
294
+ }, { returnDocument: 'after', includeResultMetadata: false });
295
+ return { updated: result != null, recordVersion: result?.recordVersion };
296
+ }
297
+ async readyFigshareIntent(oid, saveToken) {
298
+ const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken) }, [{ $set: { 'figshareSyncIntent.saves': { $map: { input: priorFigshareSaves, as: 'save',
299
+ in: { $cond: [{ $eq: ['$$save.saveToken', { $literal: saveToken }] }, { $mergeObjects: ['$$save', { readiness: 'ready' }] }, '$$save'] } } } } }, deriveFigshareIntent]);
300
+ return result.matchedCount === 1;
301
+ }
302
+ async pendingFigshareIntents(limit, afterOid = '') {
303
+ return this.recordCol.find({ redboxOid: { $gt: afterOid }, 'figshareSyncIntent.pending': true, 'figshareSyncIntent.readiness': 'ready' })
304
+ .sort({ redboxOid: 1 }).limit(limit).toArray();
305
+ }
306
+ async abandonFigshareIntent(oid, saveToken) {
307
+ // Drop only this save. Other merged saves keep their own policies and readiness.
308
+ const result = await this.recordCol.updateOne({ redboxOid: oid, ...figshareSaveFilter(saveToken, 'initialising') }, [{ $set: {
309
+ 'figshareSyncIntent.saves': { $filter: { input: priorFigshareSaves, as: 'save', cond: { $ne: ['$$save.saveToken', { $literal: saveToken }] } } }
310
+ } }, deriveFigshareIntent]);
311
+ return result.matchedCount === 1;
312
+ }
313
+ async recoverStaleFigshareIntents(staleBefore) {
314
+ const result = await this.recordCol.updateMany({ 'figshareSyncIntent.pending': true, 'figshareSyncIntent.readiness': 'initialising', $or: [
315
+ { 'figshareSyncIntent.saves': { $elemMatch: { readiness: 'initialising', requestedAt: { $lt: staleBefore } } } },
316
+ { 'figshareSyncIntent.saves': { $exists: false }, 'figshareSyncIntent.requestedAt': { $lt: staleBefore } }
317
+ ] }, [{ $set: { 'figshareSyncIntent.saves': { $map: { input: priorFigshareSaves, as: 'save', in: { $cond: [
318
+ { $and: [{ $eq: ['$$save.readiness', 'initialising'] }, { $lt: ['$$save.requestedAt', { $literal: staleBefore }] }] },
319
+ { $mergeObjects: ['$$save', { readiness: 'ready' }] }, '$$save'
320
+ ] } } } } }, deriveFigshareIntent]);
321
+ return result.modifiedCount;
322
+ }
323
+ async acknowledgeFigshareIntent(oid, generation) {
324
+ const result = await this.recordCol.updateOne({ redboxOid: oid, 'figshareSyncIntent.generation': generation, 'figshareSyncIntent.readiness': 'ready' }, { $set: { 'figshareSyncIntent.pending': false } });
325
+ return result.matchedCount === 1;
1690
326
  }
1691
327
  async getMeta(oid) {
1692
328
  if (_.isEmpty(oid)) {
@@ -1709,56 +345,60 @@ var Services;
1709
345
  sails.log.verbose(`${this.logHeader} finding deleted record: `);
1710
346
  sails.log.verbose(JSON.stringify(criteria));
1711
347
  const deletedRecord = await DeletedRecord.findOne(criteria);
1712
- if (!deletedRecord?.deletedRecordMetadata)
1713
- return null;
1714
- const revision = (0, redbox_core_1.isRecordRevision)(deletedRecord.revision) ? deletedRecord.revision : redbox_core_1.INITIAL_RECORD_REVISION;
1715
- // Tombstone wrapper revision is authoritative even when a legacy
1716
- // embedded snapshot still contains a historical active revision.
1717
- return { ...deletedRecord.deletedRecordMetadata, revision };
348
+ return (deletedRecord?.deletedRecordMetadata ?? null);
1718
349
  }
1719
350
  async createBatch(type, data, harvestIdFldName) {
1720
- const response = new redbox_core_1.StorageMutationResponse();
1721
- let notAppliedCount = 0;
1722
- let unknownCount = 0;
1723
- for (const [rowIndex, dataItem] of data.entries()) {
351
+ const response = new redbox_core_1.StorageServiceResponse();
352
+ response.message = '';
353
+ let failFlag = false;
354
+ _.each(data, async (dataItem) => {
1724
355
  dataItem.harvestId = _.get(dataItem, harvestIdFldName, '');
1725
356
  _.set(dataItem, 'metaMetadata.type', type);
1726
357
  try {
1727
- const rowResponse = await this.create(null, dataItem, null, null);
1728
- if (rowResponse.applicationState === 'applied' && rowResponse.success === true) {
1729
- continue;
1730
- }
1731
- if (rowResponse.applicationState === 'not-applied') {
1732
- notAppliedCount += 1;
1733
- sails.log.error(`${this.logHeader} createBatch row was not applied`, {
1734
- event: 'record_batch_create_row_not_applied',
1735
- row_index: rowIndex,
1736
- });
1737
- continue;
1738
- }
1739
- unknownCount += 1;
1740
- sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1741
- event: 'record_batch_create_row_unknown',
1742
- row_index: rowIndex,
1743
- });
358
+ await this.create(null, dataItem, null, null);
1744
359
  }
1745
- catch {
1746
- unknownCount += 1;
1747
- sails.log.error(`${this.logHeader} createBatch row outcome is unknown`, {
1748
- event: 'record_batch_create_row_unknown',
1749
- row_index: rowIndex,
1750
- });
360
+ catch (err) {
361
+ failFlag = true;
362
+ sails.log.error(`${this.logHeader} Failed createBatch entry: `);
363
+ sails.log.error(JSON.stringify(dataItem));
364
+ sails.log.error(`${this.logHeader} Failed createBatch error: `);
365
+ sails.log.error(JSON.stringify(err));
366
+ response.message = `${response.message}, ${err.message}`;
1751
367
  }
1752
- }
1753
- response.success = notAppliedCount === 0 && unknownCount === 0;
1754
- response.applicationState = unknownCount > 0 ? 'unknown' : notAppliedCount > 0 ? 'not-applied' : 'applied';
1755
- response.message = response.success
1756
- ? ''
1757
- : `Batch create incomplete (${notAppliedCount} not applied, ${unknownCount} unknown).`;
368
+ });
369
+ response.success = failFlag === false;
1758
370
  return response;
1759
371
  }
1760
- async provideUserAccessAndRemovePendingAccess(oid, _userid, _pendingValue) {
1761
- return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Permission rewrites require the authoritative RecordsService mutation pipeline');
372
+ provideUserAccessAndRemovePendingAccess(oid, userid, pendingValue) {
373
+ const batchFn = async () => {
374
+ const metadata = (await this.getMeta(oid));
375
+ const pendingEditArray = _.get(metadata, 'authorization.editPending', []);
376
+ const editArray = _.get(metadata, 'authorization.edit', []);
377
+ const pendingEditArrayFiltered = pendingEditArray.filter(value => value !== pendingValue);
378
+ const pendingEditFound = pendingEditArray.length > pendingEditArrayFiltered.length;
379
+ if (pendingEditFound && !editArray.includes(userid)) {
380
+ editArray.push(userid);
381
+ }
382
+ _.set(metadata, 'authorization.editPending', pendingEditArrayFiltered);
383
+ _.set(metadata, 'authorization.edit', editArray);
384
+ const pendingViewArray = _.get(metadata, 'authorization.viewPending', []);
385
+ const viewArray = _.get(metadata, 'authorization.view', []);
386
+ const pendingViewArrayFiltered = pendingViewArray.filter(value => value !== pendingValue);
387
+ const pendingViewFound = pendingViewArray.length > pendingViewArrayFiltered.length;
388
+ if (pendingViewFound && !viewArray.includes(userid)) {
389
+ viewArray.push(userid);
390
+ }
391
+ _.set(metadata, 'authorization.viewPending', pendingViewArrayFiltered);
392
+ _.set(metadata, 'authorization.view', viewArray);
393
+ try {
394
+ await this.updateMeta(null, oid, metadata);
395
+ }
396
+ catch (err) {
397
+ sails.log.error(`${this.logHeader} Failed to update on 'provideUserAccessAndRemovePendingAccess': `);
398
+ sails.log.error(JSON.stringify(err));
399
+ }
400
+ };
401
+ batchFn();
1762
402
  }
1763
403
  async getRelatedRecords(oid, brand, options = {}) {
1764
404
  const mappingContext = await this.walkRelatedRecords(String(oid ?? ''), brand, options);
@@ -1777,8 +417,8 @@ var Services;
1777
417
  const record = (await this.getMeta(normalizedOid));
1778
418
  const currentRecordTypeName = String(recordTypeName ?? _.get(record, 'metaMetadata.type', '')).trim();
1779
419
  const maxDepth = typeof options.depth === 'number' && options.depth >= 0 ? options.depth : Number.POSITIVE_INFINITY;
1780
- const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
1781
- const includeRelationIds = new Set((options.includeRelationIds ?? []).map(value => String(value ?? '').trim()).filter(Boolean));
420
+ const includeRecordTypes = new Set((options.includeRecordTypes ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
421
+ const includeRelationIds = new Set((options.includeRelationIds ?? []).map((value) => String(value ?? '').trim()).filter(Boolean));
1782
422
  if (_.isEmpty(mappingContext)) {
1783
423
  mappingContext = {
1784
424
  rootOid: normalizedOid,
@@ -1873,13 +513,17 @@ var Services;
1873
513
  extractRelationshipLocalValues(record, relationship) {
1874
514
  const rawValue = _.get(record, relationship.localField, relationship.localField === 'redboxOid' ? record.redboxOid : undefined);
1875
515
  const values = Array.isArray(rawValue) ? rawValue : [rawValue];
1876
- return values.map(value => String(value ?? '').trim()).filter(value => value !== '');
516
+ return values
517
+ .map((value) => String(value ?? '').trim())
518
+ .filter((value) => value !== '');
1877
519
  }
1878
520
  buildRelationshipCriteria(relationship, localValues) {
1879
521
  const criteria = {
1880
522
  'metaMetadata.type': relationship.recordType,
1881
523
  };
1882
- criteria[relationship.foreignField] = localValues.length === 1 ? localValues[0] : { in: localValues };
524
+ criteria[relationship.foreignField] = localValues.length === 1
525
+ ? localValues[0]
526
+ : { in: localValues };
1883
527
  return criteria;
1884
528
  }
1885
529
  async findRelatedRecords(relationship, criteria) {
@@ -1887,9 +531,8 @@ var Services;
1887
531
  if (relationship.cardinality === 'one' && typeof query.sort === 'function' && typeof query.limit === 'function') {
1888
532
  const chainedQuery = query.sort('redboxOid ASC');
1889
533
  if (typeof chainedQuery.limit === 'function') {
1890
- return await chainedQuery.limit(1).meta({
1891
- enableExperimentalDeepTargets: true,
1892
- });
534
+ return await chainedQuery.limit(1)
535
+ .meta({ enableExperimentalDeepTargets: true });
1893
536
  }
1894
537
  }
1895
538
  const relatedRecords = await query.meta({ enableExperimentalDeepTargets: true });
@@ -1920,14 +563,46 @@ var Services;
1920
563
  targetRecordType: relationship.recordType,
1921
564
  };
1922
565
  }
1923
- async delete(oid, _permanentlyDelete = false, options) {
1924
- return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record deletion requires staged lifecycle orchestration');
566
+ async delete(oid, permanentlyDelete = false) {
567
+ const response = new redbox_core_1.StorageServiceResponse();
568
+ try {
569
+ if (permanentlyDelete) {
570
+ const datastreams = await this.listDatastreams(oid, null);
571
+ if (_.size(datastreams) > 0) {
572
+ _.each(datastreams, async (file) => {
573
+ sails.log.verbose(`Deleting:`);
574
+ sails.log.verbose(JSON.stringify(file));
575
+ try {
576
+ await this.gridFsBucket.delete(file['_id']);
577
+ }
578
+ catch (err) {
579
+ sails.log.error(`Error deleting: ${file['_id']}`);
580
+ sails.log.error(JSON.stringify(err));
581
+ }
582
+ });
583
+ }
584
+ }
585
+ else {
586
+ const record = (await this.getMeta(oid));
587
+ const deletedRecord = {
588
+ redboxOid: record.redboxOid,
589
+ deletedRecordMetadata: record,
590
+ };
591
+ await DeletedRecord.create(deletedRecord);
592
+ }
593
+ await Record.destroyOne({ redboxOid: oid });
594
+ response.success = true;
595
+ }
596
+ catch (err) {
597
+ sails.log.error(`${this.logHeader} Failed to delete record: ${oid}`);
598
+ sails.log.error(JSON.stringify(err));
599
+ response.success = false;
600
+ response.message = err.message;
601
+ }
602
+ return response;
1925
603
  }
1926
604
  async updateNotificationLog(oid, record, options) {
1927
605
  if (super.metTriggerCondition(oid, record, options) == 'true') {
1928
- if (_.get(options, 'saveRecord', false)) {
1929
- return this.notApplied(this.createMutationResponse(oid), 'capability-unavailable', 'Notification writes require the authoritative RecordsService mutation pipeline');
1930
- }
1931
606
  sails.log.verbose(`${this.logHeader} Updating notification log for oid: ${oid}`);
1932
607
  const logName = _.get(options, 'logName', null);
1933
608
  if (logName) {
@@ -1948,6 +623,16 @@ var Services;
1948
623
  sails.log.verbose(`======== Notification log updates =========`);
1949
624
  sails.log.verbose(JSON.stringify(record));
1950
625
  sails.log.verbose(`======== End update =========`);
626
+ if (_.get(options, 'saveRecord', false)) {
627
+ try {
628
+ await this.updateMeta(null, oid, record, null);
629
+ }
630
+ catch (err) {
631
+ sails.log.error(`${this.logHeader} Failed to update notification log of ${oid}:`);
632
+ sails.log.error(JSON.stringify(err));
633
+ throw err;
634
+ }
635
+ }
1951
636
  }
1952
637
  else {
1953
638
  sails.log.verbose(`Notification log name: '${options.name}', for oid: ${oid}, not running, condition not met: ${options.triggerCondition}`);
@@ -2279,7 +964,7 @@ var Services;
2279
964
  objectMode: true,
2280
965
  transform(record, _encoding, callback) {
2281
966
  callback(null, sanitizeCsvRecord(record));
2282
- },
967
+ }
2283
968
  });
2284
969
  const json2csv = new json2csv_1.Transform({ fields, transforms: [flatten()] }, { objectMode: true });
2285
970
  await (0, promises_1.pipeline)(stream.Readable.from(this.fetchAllRecords(query, { ...options })), sanitize, json2csv, passThrough);
@@ -2409,15 +1094,6 @@ var Services;
2409
1094
  sails.log.verbose(`${this.logHeader} removeDatastream() -> File not found: ${fileName}`);
2410
1095
  }
2411
1096
  }
2412
- async removeStagedDatastream(fileId) {
2413
- const normalizedFileId = (0, redbox_core_1.normalizeAttachmentStagingFileId)(fileId);
2414
- if (!normalizedFileId)
2415
- throw new Error('Invalid staged attachment identity.');
2416
- const stagingDisk = StorageManagerService.stagingDisk();
2417
- if (await stagingDisk.exists(normalizedFileId)) {
2418
- await stagingDisk.delete(normalizedFileId);
2419
- }
2420
- }
2421
1097
  async addDatastream(oid, datastream, stagingDisk) {
2422
1098
  const fileId = datastream.fileId;
2423
1099
  sails.log.verbose(`${this.logHeader} addDatastream() -> Meta: ${fileId}`);
@@ -2501,101 +1177,13 @@ var Services;
2501
1177
  return undefined;
2502
1178
  }
2503
1179
  }
2504
- sanitizeRecordHookExecutionSummary(value) {
2505
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
2506
- return undefined;
2507
- }
2508
- const source = value;
2509
- if (source.schemaVersion !== 1 || source.trigger !== 'record-hook') {
2510
- return undefined;
2511
- }
2512
- const safeStatuses = new Set(['succeeded', 'failed', 'timed_out', 'interrupted', 'skipped', 'dispatched']);
2513
- const safeKinds = new Set([
2514
- 'configuration',
2515
- 'validation',
2516
- 'domain',
2517
- 'transient',
2518
- 'timeout',
2519
- 'interrupted',
2520
- 'unexpected',
2521
- ]);
2522
- const safeReasons = new Set([
2523
- 'prior_action_failed',
2524
- 'phase_not_reached',
2525
- 'save_not_persisted',
2526
- 'trigger_disabled',
2527
- ]);
2528
- const actions = Array.isArray(source.actions)
2529
- ? source.actions.slice(0, 100).flatMap(item => {
2530
- if (!item || typeof item !== 'object' || Array.isArray(item))
2531
- return [];
2532
- const action = item;
2533
- if (typeof action.actionId !== 'string' ||
2534
- typeof action.mode !== 'string' ||
2535
- typeof action.phase !== 'string' ||
2536
- typeof action.status !== 'string' ||
2537
- !safeStatuses.has(action.status))
2538
- return [];
2539
- const result = {
2540
- actionId: action.actionId.slice(0, 128),
2541
- mode: action.mode,
2542
- phase: action.phase,
2543
- status: action.status,
2544
- attempts: Number.isInteger(action.attempts) && Number(action.attempts) >= 0 ? Number(action.attempts) : 0,
2545
- durationMs: Number.isInteger(action.durationMs) && Number(action.durationMs) >= 0 ? Number(action.durationMs) : 0,
2546
- };
2547
- if (typeof action.failureKind === 'string' && safeKinds.has(action.failureKind))
2548
- result.failureKind = action.failureKind;
2549
- if (typeof action.failureCode === 'string' && action.failureCode.length <= 128)
2550
- result.failureCode = action.failureCode;
2551
- if (typeof action.skippedReason === 'string' && safeReasons.has(action.skippedReason))
2552
- result.skippedReason = action.skippedReason;
2553
- return [result];
2554
- })
2555
- : [];
2556
- const counts = {};
2557
- if (source.counts && typeof source.counts === 'object' && !Array.isArray(source.counts)) {
2558
- for (const [key, count] of Object.entries(source.counts)) {
2559
- if (safeStatuses.has(key) && Number.isInteger(count) && Number(count) >= 0)
2560
- counts[key] = Number(count);
2561
- }
2562
- }
2563
- const summary = {
2564
- schemaVersion: 1,
2565
- executionId: typeof source.executionId === 'string' ? source.executionId.slice(0, 128) : '',
2566
- trigger: 'record-hook',
2567
- operation: ['create', 'update', 'delete', 'transition'].includes(String(source.operation))
2568
- ? source.operation
2569
- : 'update',
2570
- partial: source.partial === true,
2571
- durationMs: Number.isInteger(source.durationMs) && Number(source.durationMs) >= 0 ? Number(source.durationMs) : 0,
2572
- totalActions: Number.isInteger(source.totalActions) && Number(source.totalActions) >= 0
2573
- ? Number(source.totalActions)
2574
- : actions.length,
2575
- counts,
2576
- actions,
2577
- truncated: source.truncated === true,
2578
- };
2579
- if (typeof source.requestId === 'string' && source.requestId.length <= 128)
2580
- summary.requestId = source.requestId;
2581
- if (['pre', 'persistence', 'postSync', 'post-dispatch'].includes(String(source.completedThrough))) {
2582
- summary.completedThrough = source.completedThrough;
2583
- }
2584
- if (['complete', 'grace-expired'].includes(String(source.detachedFinalization))) {
2585
- summary.detachedFinalization = source.detachedFinalization;
2586
- }
2587
- if (Number.isInteger(source.detachedPending) && Number(source.detachedPending) > 0) {
2588
- summary.detachedPending = Number(source.detachedPending);
2589
- }
2590
- return summary;
2591
- }
2592
1180
  sanitizeRecordAudit(recordAudit) {
2593
1181
  const payload = {
2594
1182
  redboxOid: recordAudit.redboxOid,
2595
1183
  action: recordAudit.action,
1184
+ ...(recordAudit.occurredAt ? { occurredAt: recordAudit.occurredAt } : {}),
2596
1185
  user: this.toJsonSafe(recordAudit.user),
2597
1186
  record: this.toJsonSafe(recordAudit.record),
2598
- executionSummary: this.sanitizeRecordHookExecutionSummary(recordAudit.executionSummary),
2599
1187
  };
2600
1188
  if (_.isUndefined(payload.user)) {
2601
1189
  delete payload.user;
@@ -2603,9 +1191,6 @@ var Services;
2603
1191
  if (_.isUndefined(payload.record)) {
2604
1192
  delete payload.record;
2605
1193
  }
2606
- if (_.isUndefined(payload.executionSummary)) {
2607
- delete payload.executionSummary;
2608
- }
2609
1194
  return payload;
2610
1195
  }
2611
1196
  sanitizeIntegrationAudit(audit) {
@@ -2781,11 +1366,53 @@ var Services;
2781
1366
  sails.log.verbose(JSON.stringify(criteria));
2782
1367
  return await IntegrationAudit.count(criteria);
2783
1368
  }
2784
- async restoreRecord(oid, options) {
2785
- return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Record restoration requires staged lifecycle orchestration');
1369
+ async restoreRecord(oid) {
1370
+ const response = new redbox_core_1.StorageServiceResponse();
1371
+ if (_.isEmpty(oid)) {
1372
+ const msg = `${this.logHeader} restoreRecord() -> refusing to search using an empty OID`;
1373
+ sails.log.error(msg);
1374
+ throw new Error(msg);
1375
+ }
1376
+ try {
1377
+ sails.log.verbose(`${this.logHeader} Restoring record ${oid} to DB...`);
1378
+ const deletedRecord = await DeletedRecord.findOne({ redboxOid: oid });
1379
+ delete deletedRecord.deletedRecordMetadata._id;
1380
+ const record = await Record.create(deletedRecord.deletedRecordMetadata);
1381
+ response.metadata = record;
1382
+ await DeletedRecord.destroyOne({ redboxOid: oid });
1383
+ response.success = true;
1384
+ sails.log.verbose(`${this.logHeader} Record restored...`);
1385
+ return response;
1386
+ }
1387
+ catch (err) {
1388
+ sails.log.error(`${this.logHeader} Failed to create Record:`);
1389
+ sails.log.error(JSON.stringify(err));
1390
+ response.success = false;
1391
+ response.message = this.getErrorMessage(err);
1392
+ return response;
1393
+ }
2786
1394
  }
2787
- async destroyDeletedRecord(oid, options) {
2788
- return this.notApplied(this.createMutationResponse(oid, options), 'capability-unavailable', 'Tombstone destruction requires staged lifecycle orchestration');
1395
+ async destroyDeletedRecord(oid) {
1396
+ const response = new redbox_core_1.StorageServiceResponse();
1397
+ if (_.isEmpty(oid)) {
1398
+ const msg = `${this.logHeader} destroyRecord() -> refusing to search using an empty OID`;
1399
+ sails.log.error(msg);
1400
+ throw new Error(msg);
1401
+ }
1402
+ try {
1403
+ sails.log.verbose(`${this.logHeader} destroying deleted record ${oid} to DB...`);
1404
+ await DeletedRecord.destroyOne({ redboxOid: oid });
1405
+ response.success = true;
1406
+ sails.log.verbose(`${this.logHeader} deleted record destroyed...`);
1407
+ return response;
1408
+ }
1409
+ catch (err) {
1410
+ sails.log.error(`${this.logHeader} Failed to create Record:`);
1411
+ sails.log.error(JSON.stringify(err));
1412
+ response.success = false;
1413
+ response.message = this.getErrorMessage(err);
1414
+ return response;
1415
+ }
2789
1416
  }
2790
1417
  getFileWithName(fileName, options = { limit: 1 }) {
2791
1418
  return this.gridFsBucket.find({ filename: fileName }, options);
@@ -2796,4 +1423,4 @@ var Services;
2796
1423
  }
2797
1424
  Services.MongoStorageService = MongoStorageService;
2798
1425
  })(Services || (exports.Services = Services = {}));
2799
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBQ3BDLHlDQUE4QztBQUc5QyxpQ0FBaUM7QUFFakMsbUNBQW9DO0FBYXBDLHNDQUF1QztBQUN2QyxtREFBZ0Q7QUFDaEQsdUNBQWlEO0FBQ2pELDhEQW1Dc0M7QUFXdEMsOERBQXFFO0FBQ3JFLDhEQUFrRztBQUNsRywyRUFBc0Y7QUFDdEYsdUVBWW1DO0FBRW5DLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3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
1426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9uZ29TdG9yYWdlU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9Nb25nb1N0b3JhZ2VTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFzRDtBQUN0RCwrQkFBZ0M7QUFDaEMsbUNBQW9DO0FBR3BDLGlDQUFpQztBQUVqQyxtQ0FBb0M7QUFFcEMsc0NBQXVDO0FBQ3ZDLG1EQUFnRDtBQUNoRCx1Q0FBaUQ7QUFDakQsOERBd0JzQztBQUN0Qyw4REFBcUU7QUFDckUsOERBQWtHO0FBRWxHLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxxQkFBVSxDQUFDO0FBQy9CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQixNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDO0FBQzlDLFNBQVMsZUFBZSxDQUFDLEtBQWM7SUFDckMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEUsT0FBTyxHQUFHLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELElBQ0UsS0FBSyxJQUFJLElBQUk7UUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEVBQzVGLENBQUM7UUFDRCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUErQjtJQUN4RCxNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO0lBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFrQ0QsZ0hBQWdIO0FBQ2hILE1BQU0sa0JBQWtCLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsRUFBRTtvQkFDNUgsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSwrQkFBK0I7Z0NBQzFILFNBQVMsRUFBRSwrQkFBK0IsRUFBRSxXQUFXLEVBQUUsaUNBQWlDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2lCQUNoSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ1osNkdBQTZHO0FBQzdHLHFHQUFxRztBQUNyRyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQ25DLDRCQUE0QixFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3JKLDhCQUE4QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsV0FBVztnQkFDekcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsRUFBRSxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUMzRyw0QkFBNEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7S0FDbkYsRUFBRSxDQUFDO0FBQ0osTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQWlCLEVBQUUsU0FBMEIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLDRCQUE0QixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7UUFDeEgsRUFBRSwwQkFBMEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDbEcsRUFBRSwwQkFBMEIsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSw4QkFBOEIsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSw4QkFBOEIsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7S0FDbkssRUFBRSxDQUFDLENBQUM7QUFFTCxJQUFpQixRQUFRLENBZ2hEeEI7QUFoaERELFdBQWlCLFFBQVE7SUFDdkIsTUFBYSxtQkFBb0IsU0FBUSxzQkFBUSxDQUFDLElBQUksQ0FBQyxPQUFPO1FBQzVELFlBQVksQ0FBd0I7UUFDcEMsRUFBRSxDQUFNO1FBQ1IsU0FBUyxDQUFtQztRQUM1QyxnQkFBZ0IsQ0FBbUM7UUFDM0Msb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRTNCLGdCQUFnQixHQUFhO1lBQ3JDLE1BQU07WUFDTixRQUFRO1lBQ1IsWUFBWTtZQUNaLFNBQVM7WUFDVCxpQkFBaUI7WUFDakIscUJBQXFCO1lBQ3JCLDRCQUE0QjtZQUM1QixxQkFBcUI7WUFDckIsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3Qix1QkFBdUI7WUFDdkIsMkJBQTJCO1lBQzNCLGFBQWE7WUFDYix5Q0FBeUM7WUFDekMsbUJBQW1CO1lBQ25CLFFBQVE7WUFDUix1QkFBdUI7WUFDdkIsWUFBWTtZQUNaLGVBQWU7WUFDZixzQkFBc0I7WUFDdEIsbUJBQW1CO1lBQ25CLHNCQUFzQjtZQUN0QixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsZUFBZTtZQUNmLHlCQUF5QjtZQUN6QixlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQix3QkFBd0I7WUFDeEIsZ0JBQWdCO1lBQ2hCLHFCQUFxQjtZQUNyQix1QkFBdUI7WUFDdkIsUUFBUTtTQUNULENBQUM7UUFFRjtZQUNFLEtBQUssRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLFNBQVMsR0FBRyx1QkFBdUIsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRU8sT0FBTztZQUNiLE9BQU8sSUFBQSxtQkFBVSxHQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRU8sZUFBZSxDQUFDLEdBQVk7WUFDbEMsSUFBSSxHQUFHLFlBQVksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxZQUFZLEtBQUs7b0JBQzdDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ25CLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLFlBQVksSUFBSSxJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsSUFBSSxZQUFZLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNoRixZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztnQkFDRCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFFTSxJQUFJO1lBQ1QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVPLGlCQUFpQjtZQUN2QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUM5QixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFO2dCQUNwQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsY0FBc0I7WUFDbkQsSUFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdHLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsZ0JBQWdCLGNBQWMsU0FBUyxDQUFDLENBQUM7b0JBQzVFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQ3ZDLGNBQWMsRUFDZCxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQStCLENBQzlDLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxnQkFBZ0IsY0FBYyxTQUFTLENBQUMsQ0FBQztnQkFDNUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUNkLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUM7UUFFTyxLQUFLLENBQUMsV0FBVztZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDakUsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFhLENBQUM7WUFDOUMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsdUNBQXVDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNwQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBc0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxFQUFFLGdDQUFnQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFzQixhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekYsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzNDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsU0FBUyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVPLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBTTtZQUNoQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLG9CQUFvQixDQUFDLENBQUM7WUFDekQsTUFBTSxjQUFjLEdBQUcsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFzQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQztnQkFDSCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQWlFLENBQUM7Z0JBQ3JHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN4QixNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQXNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BGLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM3QyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDeEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO1FBRU0sS0FBSyxDQUFDLE1BQU0sQ0FDakIsTUFBcUIsRUFDckIsTUFBZSxFQUNmLFdBQW9CLEVBQ3BCLEtBQWUsRUFDZixVQUE4QixFQUFFO1lBRWhDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0JBQW9CLENBQUMsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLG9DQUFzQixFQUFFLENBQUM7WUFDOUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhDLElBQUksQ0FBQztnQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3ZELE9BQU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDO2dCQUNqQyxNQUFNLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztnQkFDekIsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7b0JBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdDLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoSyxDQUFDO2dCQUNELE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0JBQW9CLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDJCQUEyQixDQUFDLENBQUM7Z0JBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGtCQUFrQixDQUFDLENBQUM7WUFDdkQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVNLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBb0IsRUFBRSxHQUFXLEVBQUUsTUFBZSxFQUFFLElBQWdCLEVBQUUsVUFBOEIsRUFBRTtZQUM1SCxNQUFNLFFBQVEsR0FBRyxJQUFJLG9DQUFzQixFQUFFLENBQUM7WUFDOUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDbkIsSUFBSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO2dCQUMvQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUV0QixPQUFPLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztnQkFDakMsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUM1QixNQUFNLE1BQU0sR0FBWSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLElBQUk7b0JBQUUsTUFBTSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsZUFBZSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDekksTUFBTSxXQUFXLEdBQVksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUgsV0FBVyxDQUFDLFlBQVksR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ2xFLFdBQVcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDOUUsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7b0JBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdDLE1BQU0sSUFBSSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hILFdBQVcsQ0FBQyxrQkFBa0IsR0FBRzt3QkFDL0IsYUFBYSxFQUFFOzRCQUNiLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRTs0QkFDdkQsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0NBQzdFLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7eUJBQ3pFO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDNU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLElBQUk7b0JBQUUsTUFBTSxJQUFJLGlDQUFtQixFQUFFLENBQUM7Z0JBQ2hGLFFBQVEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQztnQkFDbEMsSUFBSSxNQUFNO29CQUFFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN6SCxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLEdBQUcsWUFBWSxpQ0FBbUI7b0JBQUUsTUFBTSxHQUFHLENBQUM7Z0JBQ2xELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsZ0NBQWdDLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDYixHQUFHLElBQUksQ0FBQyxTQUFTLHNDQUFzQyxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUNwRSxLQUFLLEVBQUUsR0FBRztvQkFDVixRQUFRO29CQUNSLEtBQUs7b0JBQ0wsR0FBRztvQkFDSCxNQUFNO29CQUNOLElBQUk7aUJBQ0wsQ0FBQyxFQUFFLENBQ0wsQ0FBQztnQkFDRixRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7WUFDbEMsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBZ0IsRUFBRSxLQUFhO1lBQzlELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxSCxDQUFDO1FBQ00sS0FBSyxDQUFDLDBCQUEwQixDQUFDLElBQVksRUFBRSxTQUFpQjtZQUNyRSxJQUFBLG9DQUFzQixFQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekcsQ0FBQztRQUNNLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLE1BQWUsRUFBRSxlQUF1QixFQUFFLFlBQXNCO1lBQ3hHLElBQUEsb0NBQXNCLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLGVBQWUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUNwSixJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUU7YUFDeEYsRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUMzRSxDQUFDO1FBQ00sS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxTQUFpQjtZQUM3RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxNQUFNO2dDQUN4TCxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUMzSyxPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBYSxFQUFFLFFBQVEsR0FBRyxFQUFFO1lBQzlELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWMsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUNuSixJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUNNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxHQUFXLEVBQUUsU0FBaUI7WUFDL0QsaUZBQWlGO1lBQ2pGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRTt3QkFDM0gsMEJBQTBCLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtxQkFDakosRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUM1QixPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDTSxLQUFLLENBQUMsMkJBQTJCLENBQUMsV0FBbUI7WUFDMUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLDRCQUE0QixFQUFFLElBQUksRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFO29CQUN4SSxFQUFFLDBCQUEwQixFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFO29CQUNoSCxFQUFFLDBCQUEwQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLGdDQUFnQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFO2lCQUMzRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLDBCQUEwQixFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFO3dDQUN4RyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO3dDQUNySCxFQUFFLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUTtxQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7WUFDckcsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDO1FBQzlCLENBQUM7UUFDTSxLQUFLLENBQUMseUJBQXlCLENBQUMsR0FBVyxFQUFFLFVBQWtCO1lBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLCtCQUErQixFQUFFLFVBQVUsRUFBRSw4QkFBOEIsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLDRCQUE0QixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzTSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQVc7WUFDOUIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMscURBQXFELENBQUM7Z0JBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDO1lBQ2pELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPLENBQUMsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFnQixDQUFDO1FBQ3pELENBQUM7UUFFTSxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBVztZQUMzQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxrRUFBa0UsQ0FBQztnQkFDaEcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsMkJBQTJCLENBQUMsQ0FBQztZQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxhQUFhLEVBQUUscUJBQXFCLElBQUksSUFBSSxDQUF1QixDQUFDO1FBQzlFLENBQUM7UUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxJQUFlLEVBQUUsZ0JBQXdCO1lBQzlFLE1BQU0sUUFBUSxHQUFHLElBQUksb0NBQXNCLEVBQUUsQ0FBQztZQUM5QyxRQUFRLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUN0QixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQWlCLEVBQUUsRUFBRTtnQkFDdkMsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDYixRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDZCQUE2QixDQUFDLENBQUM7b0JBQ2hFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyw2QkFBNkIsQ0FBQyxDQUFDO29CQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3JDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDM0QsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDO1lBQ3RDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTSx1Q0FBdUMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFlBQVk7WUFDdEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFrQixDQUFDO2dCQUU1RCxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLDJCQUEyQixFQUFFLEVBQUUsQ0FBYSxDQUFDO2dCQUN0RixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLENBQWEsQ0FBQztnQkFDeEUsTUFBTSx3QkFBd0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUM7Z0JBQzFGLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztnQkFFbkYsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekIsQ0FBQztnQkFFRCxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxvQkFBb0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFFakQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSwyQkFBMkIsRUFBRSxFQUFFLENBQWEsQ0FBQztnQkFDdEYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFhLENBQUM7Z0JBQ3hFLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUMxRixNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLENBQUM7Z0JBRW5GLElBQUksZ0JBQWdCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3BELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7Z0JBRUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsMkJBQTJCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztnQkFDdkUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRWpELElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0MsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsa0VBQWtFLENBQUMsQ0FBQztvQkFDckcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxLQUFvQixFQUFFLFVBQTJDLEVBQUU7WUFDN0csTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDeEYsT0FBTztnQkFDTCxPQUFPLEVBQUUsY0FBYyxDQUFDLE9BQU87Z0JBQy9CLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztnQkFDM0IsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjO2dCQUM3QyxlQUFlLEVBQUUsY0FBYyxDQUFDLGVBQWU7YUFDaEQsQ0FBQztRQUNKLENBQUM7UUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLEdBQVcsRUFDWCxLQUFvQixFQUNwQixPQUF3QyxFQUN4QyxpQkFBZ0MsSUFBSSxFQUNwQyxpQkFBK0MsSUFBSSxFQUNuRCxZQUFZLEdBQUcsQ0FBQztZQUVoQixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBWSxDQUFDO1lBQzlELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RHLE1BQU0sUUFBUSxHQUFHLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUNwSCxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2xJLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFFbEksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGNBQWMsR0FBRztvQkFDZixPQUFPLEVBQUUsYUFBYTtvQkFDdEIsc0JBQXNCLEVBQUUsRUFBRTtvQkFDMUIsY0FBYyxFQUFFLEVBQUU7b0JBQ2xCLEtBQUssRUFBRSxFQUFFO29CQUNULGVBQWUsRUFBRSxFQUFFO29CQUNuQixvQkFBb0IsRUFBRSxJQUFJLEdBQUcsRUFBVTtvQkFDdkMsZUFBZSxFQUFFLElBQUksR0FBRyxFQUFVO29CQUNsQyx3QkFBd0IsRUFBRSxJQUFJLEdBQUcsRUFBVTtpQkFDNUMsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQTZCLENBQUMsQ0FBQztZQUM1RixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxDQUFDO2dCQUM5RSxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELElBQUksWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUM3QixPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLHFCQUFjLEVBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7WUFDOUYsTUFBTSxTQUFTLEdBQUcsSUFBQSxzQ0FBd0IsRUFBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxxQ0FBcUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRyxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDO1lBRUQsS0FBSyxNQUFNLFlBQVksSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUM1RSxTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUNwRixTQUFTO2dCQUNYLENBQUM7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsR0FBRyxhQUFhLEtBQUssWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUM1RCxJQUFJLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDMUQsU0FBUztnQkFDWCxDQUFDO2dCQUNELGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRXRELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsMkJBQTJCLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsU0FBUztnQkFDWCxDQUFDO2dCQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzNFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsb0NBQW9DLENBQUMsQ0FBQztnQkFDekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2dCQUU1QyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzdFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsdUJBQXVCLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUVsRCxLQUFLLE1BQU0sYUFBYSxJQUFJLGNBQTJCLEVBQUUsQ0FBQztvQkFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzNHLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsQixTQUFTO29CQUNYLENBQUM7b0JBQ0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0JBRS9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLFVBQVUsRUFBRSxhQUFvQyxDQUFDLENBQUM7b0JBQ3JHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEYsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3RFLENBQUM7b0JBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUMzRSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDakQsY0FBYyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQzVDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUN4QixVQUFVLEVBQUUsWUFBWSxDQUFDLEVBQUU7NEJBQzNCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSzs0QkFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUN6QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7eUJBQ3hDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FDNUMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDTCxPQUFPLEVBQ1AsSUFBSSxFQUNKLGNBQWMsRUFDZCxZQUFZLEdBQUcsQ0FBQyxDQUNqQixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxjQUFjLENBQUM7UUFDeEIsQ0FBQztRQUVPLGdCQUFnQixDQUFDLGNBQXFDLEVBQUUsY0FBc0IsRUFBRSxNQUEyQjtZQUNqSCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFFLE1BQWtCLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyx3QkFBd0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyRSxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUNsRSxPQUFPO1lBQ1QsQ0FBQztZQUNELGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUU5RCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsY0FBYyxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBRU8sOEJBQThCLENBQUMsTUFBZSxFQUFFLFlBQXNDO1lBQzVGLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hJLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMvRCxPQUFPLE1BQU07aUJBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUMxQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRU8seUJBQXlCLENBQUMsWUFBc0MsRUFBRSxXQUFxQjtZQUM3RixNQUFNLFFBQVEsR0FBWTtnQkFDeEIsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLFVBQVU7YUFDN0MsQ0FBQztZQUVGLFFBQVEsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUM1RCxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBRXhCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBc0MsRUFBRSxRQUFpQjtZQUN4RixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FJakMsQ0FBQztZQUVGLElBQUksWUFBWSxDQUFDLFdBQVcsS0FBSyxLQUFLLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQ2hILE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUc5QyxDQUFDO2dCQUNGLElBQUksT0FBTyxZQUFZLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUM3QyxPQUFPLE1BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQXNEO3lCQUNyRixJQUFJLENBQUMsRUFBRSw2QkFBNkIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sY0FBYyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLDZCQUE2QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakYsSUFBSSxZQUFZLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN2QyxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsY0FBYyxDQUFDO2lCQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoSCxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUM7UUFFTyxxQkFBcUIsQ0FDM0IsWUFBc0MsRUFDdEMscUJBQTZCLEVBQzdCLFVBQWtCLEVBQ2xCLGFBQXNCO1lBRXRCLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN0QixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBRUQsSUFBSSxZQUFZLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPO29CQUNMLGdCQUFnQjtvQkFDaEIsU0FBUyxFQUFFLGdCQUFnQjtvQkFDM0IsU0FBUyxFQUFFLFVBQVU7b0JBQ3JCLGdCQUFnQixFQUFFLHFCQUFxQjtpQkFDeEMsQ0FBQztZQUNKLENBQUM7WUFFRCxPQUFPO2dCQUNMLGdCQUFnQjtnQkFDaEIsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLFNBQVMsRUFBRSxnQkFBZ0I7Z0JBQzNCLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxVQUFVO2FBQzFDLENBQUM7UUFDSixDQUFDO1FBQ00sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXLEVBQUUsb0JBQTZCLEtBQUs7WUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQ0FBc0IsRUFBRSxDQUFDO1lBRTlDLElBQUksQ0FBQztnQkFDSCxJQUFJLGlCQUFpQixFQUFFLENBQUM7b0JBQ3RCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFOzRCQUMvQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDOzRCQUN4QyxJQUFJLENBQUM7Z0NBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFxQixDQUFDLENBQUM7NEJBQ2xFLENBQUM7NEJBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQ0FDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDbEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUN2QyxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFZLENBQUM7b0JBQ3BELE1BQU0sYUFBYSxHQUFHO3dCQUNwQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7d0JBQzNCLHFCQUFxQixFQUFFLE1BQU07cUJBQzlCLENBQUM7b0JBQ0YsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUMxQixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDZCQUE2QixHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFDakMsQ0FBQztZQUVELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTSxLQUFLLENBQUMscUJBQXFCLENBQUMsR0FBVyxFQUFFLE1BQWUsRUFBRSxPQUFnQjtZQUMvRSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLHVDQUF1QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUN2QyxNQUFNLEtBQUssR0FBRyxFQUFFLElBQUksRUFBRSxnQkFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7b0JBQ3pFLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ1IsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbEIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoQixDQUFDO29CQUNELENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hELElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztnQkFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO2dCQUNqRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3hDLElBQUksQ0FBQzt3QkFDSCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2pELENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLHlDQUF5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO3dCQUNsRixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3JDLE1BQU0sR0FBRyxDQUFDO29CQUNaLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDZiwyQkFBMkIsT0FBTyxDQUFDLElBQUksZUFBZSxHQUFHLHFDQUFxQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FDekgsQ0FBQztnQkFDRixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUMsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7UUFFTyxnQkFBZ0IsQ0FBQyxTQUFrQjtZQUN6QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkUsUUFBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztvQkFDeEMsS0FBSyxHQUFHLENBQUM7b0JBQ1QsS0FBSyxLQUFLLENBQUM7b0JBQ1gsS0FBSyxXQUFXO3dCQUNkLE9BQU8sQ0FBQyxDQUFDO29CQUNYLEtBQUssSUFBSSxDQUFDO29CQUNWLEtBQUssTUFBTSxDQUFDO29CQUNaLEtBQUssWUFBWTt3QkFDZixPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDekYsT0FBTyxJQUFJLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzlELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BDLENBQUM7WUFDRCxNQUFNLElBQUksK0JBQWlCLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLGFBQWEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsd0ZBQXdGLEVBQUUsQ0FBQzthQUNySSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRU8sYUFBYSxDQUFDLElBQWEsRUFBRSxhQUFzQjtZQUN6RCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25FLElBQUksTUFBZSxDQUFDO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUM5RCxNQUFNLElBQUksK0JBQWlCLENBQUM7d0JBQzFCLE9BQU8sRUFBRSxnQ0FBZ0M7d0JBQ3pDLGFBQWEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsK0RBQStELEVBQUUsQ0FBQztxQkFDNUcsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN4QyxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDL0MsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUM5QyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDbEcsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsTUFBTSxJQUFJLCtCQUFpQixDQUFDO29CQUMxQixPQUFPLEVBQUUsZ0NBQWdDO29CQUN6QyxhQUFhLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlFQUFpRSxFQUFFLENBQUM7aUJBQzlHLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBa0MsTUFBTSxDQUFDLFdBQVcsQ0FDOUQsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3RELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUMxRSxDQUFDO1lBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoRSxNQUFNLElBQUksK0JBQWlCLENBQUM7d0JBQzFCLE9BQU8sRUFBRSwwQ0FBMEM7d0JBQ25ELGFBQWEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsZ0VBQWdFLEVBQUUsQ0FBQztxQkFDN0csQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkQsQ0FBQztZQUNELHVFQUF1RTtZQUN2RSw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUM1QixhQUFxQixFQUNyQixVQUFVLEdBQUcsU0FBUyxFQUN0QixLQUFhLEVBQ2IsSUFBSSxHQUFHLEVBQUUsRUFDVCxRQUFnQixFQUNoQixLQUFrQixFQUNsQixLQUFvQixFQUNwQixlQUFlLEdBQUcsU0FBUyxFQUMzQixXQUFXLEdBQUcsU0FBUyxFQUN2QixJQUFJLEdBQUcsU0FBUyxFQUNoQixZQUFZLEdBQUcsU0FBUyxFQUN4QixZQUFZLEdBQUcsU0FBUyxFQUN4QixhQUFxQixPQUFPLEVBQzVCLGFBQWEsR0FBRyxTQUFTO1lBRXpCLE1BQU0sS0FBSyxHQUFHO2dCQUNaLDRDQUE0QyxFQUFFLEtBQUssQ0FBQyxFQUFFO2FBQ3ZELENBQUM7WUFDRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUN0RixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQztnQkFDMUIsQ0FBQyxPQUFPLEVBQUUsc0NBQXNDLENBQUM7Z0JBQ2pELENBQUMsb0JBQW9CLEVBQUUsbUNBQW1DLENBQUM7Z0JBQzNELENBQUMscUJBQXFCLEVBQUUsb0NBQW9DLENBQUM7Z0JBQzdELENBQUMsb0JBQW9CLEVBQUUsYUFBYSxDQUFDO2FBQ3RDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDdkIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMzRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUM7d0JBQ3ZHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixLQUFLLEVBQUUsQ0FBQztvQkFDN0MsU0FBUztpQkFDVixDQUFDLENBQUM7YUFDSixDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixHQUFHLEVBQUU7b0JBQ0gsRUFBRSwwQ0FBMEMsRUFBRSxRQUFRLEVBQUU7b0JBQ3hELEVBQUUsMENBQTBDLEVBQUUsUUFBUSxFQUFFO29CQUN4RCxFQUFFLCtDQUErQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO29CQUN2RSxFQUFFLCtDQUErQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO2lCQUN4RTthQUNGLENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUseUNBQXlDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdkUsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLGdEQUFnRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzlFLENBQUMsQ0FBQyxDQUFDO2dCQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDMUIsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksQ0FBQztvQkFDMUMsQ0FBQzt5QkFBTSxJQUFJLFVBQVUsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDakMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssbUJBQW1CLElBQUksQ0FBQyxDQUFDO3dCQUNwRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDakMsQ0FBQztvQkFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztZQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7WUFFekIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakcsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQ0FBc0IsRUFBRSxDQUFDO1lBQzlDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQ2pDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTSxLQUFLLENBQUMsVUFBVSxDQUNyQixhQUFxQixFQUNyQixhQUFxQixTQUFTLEVBQzlCLEtBQWEsRUFDYixPQUFlLEVBQUUsRUFDakIsUUFBZ0IsRUFDaEIsS0FBa0IsRUFDbEIsS0FBb0IsRUFDcEIsZUFBZSxHQUFHLFNBQVMsRUFDM0IsV0FBVyxHQUFHLFNBQVMsRUFDdkIsSUFBSSxHQUFHLFNBQVMsRUFDaEIsWUFBWSxHQUFHLFNBQVMsRUFDeEIsWUFBWSxHQUFHLFNBQVMsRUFDeEIsVUFBVSxHQUFHLFNBQVMsRUFDdEIsYUFBYSxHQUFHLFNBQVM7WUFFekIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMvRSxVQUFVLEdBQUcsT0FBTyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRztnQkFDWixzQkFBc0IsRUFBRSxLQUFLLENBQUMsRUFBRTthQUNqQyxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUN2QixJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUM7YUFDOUMsQ0FBQztZQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNwQixNQUFNLFdBQVcsR0FBRztnQkFDbEIsR0FBRyxFQUFFO29CQUNILEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFO29CQUNsQyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRTtvQkFDbEMsRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTtvQkFDakQsRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTtpQkFDbEQ7YUFDRixDQUFDO1lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMxQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO3dCQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDakQsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ25ELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLFVBQVUsSUFBSSxTQUFTLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUN2RCxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDMUMsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUMzQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzNCLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQzFCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSwwQkFBMEIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxDQUFDLENBQUMsQ0FBQztvQkFDSCxLQUFLLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDekQsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ3JELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQztvQkFDL0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLFdBQVcsSUFBSSxTQUFTLElBQUksV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUN6RCxLQUFLLENBQUMsMEJBQTBCLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDbEQsQ0FBQztZQUNELElBQUksYUFBYSxJQUFJLFNBQVMsSUFBSSxhQUFhLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3RELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLGFBQWEsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQzFCLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQ3BDLENBQUM7eUJBQU0sSUFBSSxVQUFVLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ2pDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLG1CQUFtQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3JFLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBRXpCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMxRixNQUFNLFFBQVEsR0FBRyxJQUFJLG9DQUFzQixFQUFFLENBQUM7WUFDOUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDeEIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDdkIsUUFBUSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDakMsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVPLFlBQVksQ0FBQyxNQUFNO1lBQ3pCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRVMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU87WUFDcEQsT0FBTztnQkFDTCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUMxRCxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDOUMsQ0FBQztRQUNKLENBQUM7UUFFUyxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPO1lBQzNELE9BQU87Z0JBQ0wsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUNqRSxVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNyRCxDQUFDO1FBQ0osQ0FBQztRQUVPLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGdCQUF5QixLQUFLO1lBQzNFLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNiLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDNUIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFakUsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUM1QixJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQy9CLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLE1BQU0sQ0FBQztvQkFDZixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUM7UUFFTSxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTztZQUNoRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLG1CQUFtQixFQUFFLE9BQU87YUFDN0IsQ0FBQztZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE1BQU0sV0FBVyxHQUFHO2dCQUNsQixHQUFHLEVBQUU7b0JBQ0gsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUU7b0JBQ2xDLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFO29CQUNsQyxFQUFFLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO29CQUNqRCxFQUFFLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxFQUFFO2lCQUNsRDthQUNGLENBQUM7WUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7Z0JBQ3hELElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO2FBQzNCLENBQUM7WUFDRixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN6QixRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLFlBQVksRUFBRTt3QkFDWixJQUFJLEVBQUUsR0FBRyxRQUFRLEVBQUU7cUJBQ3BCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMxQixRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNaLFlBQVksRUFBRTt3QkFDWixJQUFJLEVBQUUsR0FBRyxTQUFTLEVBQUU7cUJBQ3JCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsMEZBQTBGO2dCQUMxRix3RkFBd0Y7Z0JBQ3hGLDBGQUEwRjtnQkFDMUYsMEZBQTBGO2dCQUMxRixpRUFBaUU7Z0JBQ2pFLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM3QyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUNWLElBQUksQ0FBQzt3QkFDSCxtRkFBbUY7d0JBQ25GLHNGQUFzRjt3QkFDdEYsMENBQTBDO3dCQUMxQyxNQUFNLFdBQVcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO3dCQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUM7NEJBQ2xCLE9BQU87d0JBQ1QsQ0FBQzt3QkFDRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0QkFDdEIsbUZBQW1GOzRCQUNuRiw4RUFBOEU7NEJBQzlFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFDbEIsT0FBTzt3QkFDVCxDQUFDO3dCQUNELHlGQUF5Rjt3QkFDekYsV0FBVyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDOzRCQUNwQyxVQUFVLEVBQUUsSUFBSTs0QkFDaEIsU0FBUyxDQUFDLE1BQStCLEVBQUUsU0FBUyxFQUFFLFFBQVE7Z0NBQzVELFFBQVEsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDNUMsQ0FBQzt5QkFDRixDQUFDLENBQUM7d0JBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUMxRixNQUFNLElBQUEsbUJBQVEsRUFBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3JILENBQUM7b0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLG1DQUFtQyxDQUFDLENBQUM7d0JBQ3RFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNyQixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQVksQ0FBQyxDQUFDO29CQUNwQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQztZQUVELE1BQU0sZUFBZSxHQUFHLElBQUksbUNBQXFCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoRixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRyxDQUFDO1FBRUQsZ0dBQWdHO1FBQ2hHLDRGQUE0RjtRQUM1Riw2REFBNkQ7UUFDckQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsY0FBNkIsR0FBRyxFQUFFLENBQUMsS0FBSztZQUNyRixNQUFNLFNBQVMsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ2pDLElBQUksS0FBSyxFQUFFLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLHFGQUFxRjtnQkFDckYsa0NBQWtDO2dCQUNsQyxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1IsQ0FBQztnQkFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEIsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBRVMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUVyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFTSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQVcsRUFBRSxPQUFxQjtZQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLHVDQUF5QixFQUFFLENBQUM7WUFDakQsUUFBUSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUMzRSxNQUFNLGNBQWMsR0FBRywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUMxRSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDN0csQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQ2xCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMseUNBQXlDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixNQUFNLGNBQWMsR0FBRyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQzdHLENBQUM7WUFDSCxDQUFDO1lBQ0QsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQztZQUMvQixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRU0sZ0JBQWdCLENBQ3JCLEdBQVcsRUFDWCxNQUFxQixFQUNyQixXQUFvQixFQUNwQixRQUFtRSxFQUNuRSxZQUEwQjtZQUUxQixJQUFJLFdBQXNELENBQUM7WUFDM0QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDakMsV0FBVyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxDQUFDO2lCQUFNLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxDQUFDLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDaEUsV0FBVyxHQUFHLFFBQXFELENBQUM7WUFDdEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLENBQUMsU0FBUyw2RkFBNkYsQ0FDL0csQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLFlBQVksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUNqRyxJQUFBLGVBQVEsRUFBQyxJQUFJLENBQUMsRUFBRTtnQkFDZCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FDNUIsVUFBVSxFQUNWLGdDQUFnQyxFQUNoQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FDOUIsQ0FBQztnQkFDZCxNQUFNLElBQUksR0FBdUIsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLENBQUMsWUFBWSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO2dCQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssRUFBQyxRQUFRLEVBQUMsRUFBRTtvQkFDeEMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQXVDLENBQUM7b0JBQ3ZGLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQXVDLENBQUM7b0JBQ25GLE1BQU0sU0FBUyxHQUFpQixFQUFFLENBQUM7b0JBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzt3QkFDN0YsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3dCQUMxRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRTs0QkFDM0IsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO2dDQUNuQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksd0JBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDOzRCQUM1QyxDQUFDO3dCQUNILENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hFLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQzt3QkFDdkUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7NEJBQ3JCLElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQztnQ0FDaEMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLHdCQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQzs0QkFDNUMsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JGLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDO2dCQUNELE9BQU8sSUFBQSxTQUFFLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLFVBQXNCO1lBQ3ZELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDakMsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUN2RSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQztvQkFDSCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztnQkFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO29CQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDbEQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsMkNBQTJDLENBQUMsQ0FBQztZQUNsRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywwQ0FBMEMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztRQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLFVBQXNCLEVBQUUsV0FBdUQ7WUFDN0csTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDZCQUE2QixNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNsRSxNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNwQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLCtCQUErQixRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sb0JBQW9CLEdBQUcsV0FBVyxJQUFJLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sUUFBUSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywyQ0FBMkMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBRU8sa0JBQWtCLENBQUMsUUFBK0IsRUFBRSxRQUFnQixFQUFFLFFBQWlCO1lBQzdGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNoRixRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTVCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLFlBQVksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDN0IsT0FBTyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQzdCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsOENBQThDLFFBQVEsSUFBSSxDQUFDLENBQUM7b0JBQzdGLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7Z0JBRUgsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ3pCLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsdURBQXVELFFBQVEsSUFBSSxDQUFDLENBQUM7b0JBQ3RHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFTSxLQUFLLENBQUMsdUJBQXVCLENBQ2xDLEdBQUcsRUFDSCxNQUFvQixFQUNwQixTQUF1QixFQUN2QixXQUF1RDtZQUV2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMscUVBQXFFLENBQUMsQ0FBQztZQUN6RixDQUFDO1lBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztRQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBVyxFQUFFLE1BQWM7WUFDcEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBVyxFQUFFLE1BQWM7WUFDMUQsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7WUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7WUFDaEUsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksd0JBQVUsRUFBb0MsQ0FBQztZQUNwRSxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0UsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBVyxFQUFFLE1BQXNCO1lBQzlELElBQUksS0FBSyxHQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxxREFBcUQsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMvRixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUF5QyxDQUFDO1FBQ3JHLENBQUM7UUFFTyxVQUFVLENBQUMsS0FBYztZQUMvQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDZCxPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVPLG1CQUFtQixDQUFDLFdBQTZCO1lBQ3ZELE1BQU0sT0FBTyxHQUFxQjtnQkFDaEMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO2dCQUNoQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0JBQzFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBd0M7Z0JBQzlFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQXdDO2FBQ25GLENBQUM7WUFFRixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUN0QixDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDeEIsQ0FBQztZQUVELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFTyx3QkFBd0IsQ0FBQyxLQUE0QjtZQUMzRCxNQUFNLE9BQU8sR0FBbUM7Z0JBQzlDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7Z0JBQ3RDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7Z0JBQzFDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3RCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUNoQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7Z0JBQzFCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO2dCQUM1QixjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUF3QztnQkFDNUYsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBd0M7YUFDL0YsQ0FBQztZQUVGLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN2QyxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ2pDLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRU0sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQTZCO1lBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksb0NBQXNCLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEQsSUFBSSxDQUFDO2dCQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNELFFBQVEsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDbEQsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsMEJBQTBCLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGlDQUFpQyxDQUFDLENBQUM7Z0JBQ3BFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGtCQUFrQixDQUFDLENBQUM7WUFDdkQsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBeUI7WUFDbkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUN2QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFFN0IsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMscURBQXFELENBQUM7Z0JBQ25GLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUMvQyxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN6QyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ3JDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDO1lBQ2pELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxLQUE0QjtZQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLG9DQUFzQixFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQztnQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxRQUFRLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUM1QyxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywrQkFBK0IsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsc0NBQXNDLENBQUMsQ0FBQztnQkFDekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDekIsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsa0NBQWtDLENBQUMsQ0FBQztZQUN2RSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBRU8sc0NBQXNDLENBQUMsTUFBOEI7WUFDM0UsTUFBTSxRQUFRLEdBQTRCLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pELENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9DLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDakUsQ0FBQztRQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUE4QjtZQUM3RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLGlFQUFpRSxDQUFDO2dCQUMvRixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQTRCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDO1lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsc0NBQXNDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDNUMsQ0FBQztZQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBRW5DLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsOEJBQThCLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFNUMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxNQUE4QjtZQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLG1FQUFtRSxDQUFDO2dCQUNqRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQTRCLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM5QixRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDO1lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsc0NBQXNDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7WUFDNUMsQ0FBQztZQUVELEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsK0JBQStCLENBQUMsQ0FBQztZQUNwRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsT0FBTyxNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFXO1lBQzdCLE1BQU0sUUFBUSxHQUFHLElBQUksb0NBQXNCLEVBQUUsQ0FBQztZQUU5QyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUywyREFBMkQsQ0FBQztnQkFDekYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELElBQUksQ0FBQztnQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLGFBQWEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxhQUFhLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDO2dCQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3hFLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO2dCQUUzQixNQUFNLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDbkQsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMscUJBQXFCLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM5RCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEdBQVc7WUFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQ0FBc0IsRUFBRSxDQUFDO1lBRTlDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLDJEQUEyRCxDQUFDO2dCQUN6RixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsOEJBQThCLEdBQUcsV0FBVyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU0sYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxRQUFRLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDeEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUNuRSxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDJCQUEyQixDQUFDLENBQUM7Z0JBQzlELEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckMsUUFBUSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztRQUNILENBQUM7UUFFUyxlQUFlLENBQUMsUUFBZ0IsRUFBRSxVQUF1QixFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUU7WUFDN0UsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFXO1lBQzdCLE9BQU8sQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQ0Y7SUE5Z0RZLDRCQUFtQixzQkE4Z0QvQixDQUFBO0FBQ0gsQ0FBQyxFQWhoRGdCLFFBQVEsd0JBQVIsUUFBUSxRQWdoRHhCIn0=