@modelprofile.com/authswitch 6.5.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/authority-contract.d.ts +300 -6
- package/dist_ts/authority-contract.js +1 -1
- package/dist_ts/authority-runtime-contract.d.ts +13 -0
- package/dist_ts/classes.accountlist.js +4 -3
- package/dist_ts/classes.authoritybroker.d.ts +25 -5
- package/dist_ts/classes.authoritybroker.js +388 -123
- package/dist_ts/classes.authoritycli.d.ts +24 -0
- package/dist_ts/classes.authoritycli.js +675 -0
- package/dist_ts/classes.authorityclient.d.ts +19 -7
- package/dist_ts/classes.authorityclient.js +51 -14
- package/dist_ts/classes.authoritydaemon.d.ts +28 -1
- package/dist_ts/classes.authoritydaemon.js +477 -36
- package/dist_ts/classes.authoritydatabase.d.ts +155 -11
- package/dist_ts/classes.authoritydatabase.js +1037 -69
- package/dist_ts/classes.authoritymodels.d.ts +229 -23
- package/dist_ts/classes.authoritymodels.js +867 -128
- package/dist_ts/classes.authoritypreuse.d.ts +47 -0
- package/dist_ts/classes.authoritypreuse.js +277 -0
- package/dist_ts/classes.authorityregistry.d.ts +9 -0
- package/dist_ts/classes.authorityregistry.js +32 -0
- package/dist_ts/classes.authoritysecrets.d.ts +1 -1
- package/dist_ts/classes.authoritysecrets.js +2 -2
- package/dist_ts/classes.authorityusage.d.ts +160 -0
- package/dist_ts/classes.authorityusage.js +429 -0
- package/dist_ts/classes.claudeauthority.d.ts +66 -0
- package/dist_ts/classes.claudeauthority.js +528 -0
- package/dist_ts/classes.claudecodeharness.js +3 -2
- package/dist_ts/classes.claudecodelocks.d.ts +13 -0
- package/dist_ts/classes.claudecodelocks.js +75 -3
- package/dist_ts/classes.claudenative.d.ts +130 -0
- package/dist_ts/classes.claudenative.js +708 -0
- package/dist_ts/classes.claudestatus.d.ts +9 -0
- package/dist_ts/classes.claudestatus.js +26 -9
- package/dist_ts/classes.claudetokenrefresh.d.ts +15 -1
- package/dist_ts/classes.claudetokenrefresh.js +74 -21
- package/dist_ts/classes.codexharness.js +4 -2
- package/dist_ts/classes.codexmanaged.d.ts +12 -1
- package/dist_ts/classes.codexmanaged.js +75 -14
- package/dist_ts/classes.codexpreuse.d.ts +8 -0
- package/dist_ts/classes.codexpreuse.js +24 -6
- package/dist_ts/classes.fileharness.d.ts +2 -0
- package/dist_ts/classes.fileharness.js +6 -4
- package/dist_ts/classes.limits.js +12 -7
- package/dist_ts/classes.opencodeharness.js +2 -2
- package/dist_ts/claudehttp.d.ts +10 -0
- package/dist_ts/claudehttp.js +29 -3
- package/dist_ts/index.d.ts +1 -0
- package/dist_ts/index.js +7 -1
- package/dist_ts/interfaces.harness.d.ts +6 -0
- package/dist_ts/interfaces.list.d.ts +9 -3
- package/dist_ts/plugins.d.ts +6 -3
- package/dist_ts/plugins.js +8 -4
- package/dist_ts/ts_migration/0001_authority_meta.d.ts +13 -0
- package/dist_ts/ts_migration/0001_authority_meta.js +44 -0
- package/dist_ts/ts_migration/0002_remove_backup_records.d.ts +17 -0
- package/dist_ts/ts_migration/0002_remove_backup_records.js +48 -0
- package/dist_ts/ts_migration/index.d.ts +6 -0
- package/dist_ts/ts_migration/index.js +12 -0
- package/package.json +3 -3
- package/readme.md +177 -14
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/authority-contract.ts +262 -9
- package/ts/authority-runtime-contract.ts +14 -0
- package/ts/classes.accountlist.ts +3 -2
- package/ts/classes.authoritybroker.ts +385 -121
- package/ts/classes.authoritycli.ts +719 -0
- package/ts/classes.authorityclient.ts +75 -18
- package/ts/classes.authoritydaemon.ts +444 -36
- package/ts/classes.authoritydatabase.ts +1076 -75
- package/ts/classes.authoritymodels.ts +642 -144
- package/ts/classes.authoritypreuse.ts +296 -0
- package/ts/classes.authorityregistry.ts +47 -0
- package/ts/classes.authoritysecrets.ts +1 -1
- package/ts/classes.authorityusage.ts +527 -0
- package/ts/classes.claudeauthority.ts +537 -0
- package/ts/classes.claudecodeharness.ts +2 -1
- package/ts/classes.claudecodelocks.ts +70 -1
- package/ts/classes.claudenative.ts +785 -0
- package/ts/classes.claudestatus.ts +38 -9
- package/ts/classes.claudetokenrefresh.ts +82 -19
- package/ts/classes.codexharness.ts +3 -1
- package/ts/classes.codexmanaged.ts +76 -13
- package/ts/classes.codexpreuse.ts +33 -5
- package/ts/classes.fileharness.ts +7 -3
- package/ts/classes.limits.ts +11 -6
- package/ts/classes.opencodeharness.ts +1 -1
- package/ts/claudehttp.ts +31 -2
- package/ts/index.ts +6 -0
- package/ts/interfaces.harness.ts +6 -0
- package/ts/interfaces.list.ts +9 -3
- package/ts/plugins.ts +8 -3
- package/ts/ts_migration/0001_authority_meta.ts +45 -0
- package/ts/ts_migration/0002_remove_backup_records.ts +49 -0
- package/ts/ts_migration/index.ts +12 -0
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import { AuthSwitchAuthorityAccountModel, AuthSwitchAuthorityBindingModel, AuthSwitchAuthorityCodexHomeModel, AuthSwitchAuthorityEnrollmentModel, AuthSwitchAuthorityEventModel, AuthSwitchAuthorityGrantModel, AuthSwitchAuthorityHandoffModel, AuthSwitchAuthorityMetaModel, AuthSwitchAuthorityMigrationLedgerModel, assertStoredAuthorityAccount, assertStoredAuthorityBinding, assertStoredAuthorityEnrollment, assertStoredAuthorityGrant, assertStoredAuthorityHandoff, assertStoredAuthorityMigrationLedger, } from './classes.authoritymodels.js';
|
|
2
|
+
import { AuthSwitchAuthorityAccountModel, AuthSwitchAuthorityBindingModel, AuthSwitchAuthorityClaudeHandoffModel, AuthSwitchAuthorityClaudeHomeModel, AuthSwitchAuthorityCodexHomeModel, AuthSwitchAuthorityEnrollmentModel, AuthSwitchAuthorityEventModel, AuthSwitchAuthorityGrantModel, AuthSwitchAuthorityHandoffModel, AuthSwitchAuthorityMetaModel, AuthSwitchAuthorityMigrationLedgerModel, AuthSwitchAuthorityOperationModel, AuthSwitchAuthorityUsageModel, authorityUsageId, assertStoredAuthorityAccount, assertStoredAuthorityBinding, assertStoredAuthorityClaudeHandoff, assertStoredAuthorityClaudeHome, assertStoredAuthorityEnrollment, assertStoredAuthorityGrant, assertStoredAuthorityHandoff, assertStoredAuthorityMigrationLedger, assertStoredAuthorityOperation, assertStoredAuthorityUsage, } from './classes.authoritymodels.js';
|
|
3
|
+
import { authorityModelRegistry } from './classes.authorityregistry.js';
|
|
4
|
+
import { runAuthorityMigrations } from './ts_migration/index.js';
|
|
5
|
+
const usageContext = (meta, account, grant) => ({
|
|
6
|
+
epoch: meta.epoch, accountId: account.id, loginId: grant.id, subjectId: account.subject,
|
|
7
|
+
workspaceId: account.workspaceId, providerId: account.providerId,
|
|
8
|
+
purpose: grant.purpose, owner: grant.owner, grantState: grant.state,
|
|
9
|
+
removed: account.removed, authorizationGeneration: grant.authorizationGeneration,
|
|
10
|
+
grantGeneration: grant.grantGeneration, nativeSource: null,
|
|
11
|
+
});
|
|
12
|
+
const sameUsageContext = (left, right) => left.epoch === right.epoch && left.accountId === right.accountId && left.loginId === right.loginId
|
|
13
|
+
&& left.subjectId === right.subjectId && left.workspaceId === right.workspaceId
|
|
14
|
+
&& left.providerId === right.providerId
|
|
15
|
+
&& left.purpose === right.purpose && left.owner === right.owner && left.grantState === right.grantState
|
|
16
|
+
&& left.removed === right.removed && left.authorizationGeneration === right.authorizationGeneration
|
|
17
|
+
&& left.grantGeneration === right.grantGeneration;
|
|
18
|
+
const sameUsageSource = (left, right) => sameUsageContext(left, right) && (left.nativeSource === null ? right.nativeSource === null
|
|
19
|
+
: right.nativeSource !== null && left.nativeSource.homeId === right.nativeSource.homeId
|
|
20
|
+
&& left.nativeSource.credentialDigest === right.nativeSource.credentialDigest
|
|
21
|
+
&& left.nativeSource.configDigest === right.nativeSource.configDigest
|
|
22
|
+
&& left.nativeSource.accessTokenDigest === right.nativeSource.accessTokenDigest);
|
|
23
|
+
const storedOperation = (stored) => {
|
|
24
|
+
const operation = AuthSwitchAuthorityOperationModel.exact.toPersisted(stored);
|
|
25
|
+
assertStoredAuthorityOperation(operation);
|
|
26
|
+
return operation;
|
|
27
|
+
};
|
|
3
28
|
/** Separate account, grant, binding and journal records; the only global record is a revision counter. */
|
|
4
29
|
export class AuthSwitchAuthorityDatabase {
|
|
5
30
|
options;
|
|
@@ -22,33 +47,43 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
22
47
|
throw new Error('Authswitch database is already starting or started.');
|
|
23
48
|
await this.privateDirectory(this.options.dataDirectory);
|
|
24
49
|
await this.privateDirectory(plugins.path.dirname(this.options.socketPath));
|
|
25
|
-
const engine = new plugins.
|
|
50
|
+
const engine = new plugins.nosqldbEngine.LocalNoSqlDb({ folderPath: this.options.dataDirectory, socketPath: this.options.socketPath });
|
|
26
51
|
this.engine = engine;
|
|
27
52
|
try {
|
|
28
53
|
const connection = await engine.start();
|
|
29
|
-
const database = new plugins.
|
|
54
|
+
const database = new plugins.nosqldb.SmartdataDb({ mongoDbUrl: connection.connectionUri, mongoDbName: 'authswitch' });
|
|
30
55
|
this.database = database;
|
|
31
|
-
for (const model of [AuthSwitchAuthorityMetaModel, AuthSwitchAuthorityAccountModel,
|
|
32
|
-
AuthSwitchAuthorityGrantModel, AuthSwitchAuthorityBindingModel, AuthSwitchAuthorityCodexHomeModel, AuthSwitchAuthorityEnrollmentModel,
|
|
33
|
-
AuthSwitchAuthorityHandoffModel, AuthSwitchAuthorityMigrationLedgerModel, AuthSwitchAuthorityEventModel]) {
|
|
34
|
-
plugins.smartdata.setDefaultManagerForDoc({ db: database }, model);
|
|
35
|
-
}
|
|
36
56
|
await database.init();
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
57
|
+
// The LocalNoSqlDb root lease excludes another engine during this catalog admission.
|
|
58
|
+
const inventory = await database.inspectNamespace({ maxCollections: 1024,
|
|
59
|
+
documentCountUpTo: 0, timeoutMs: 30_000 });
|
|
60
|
+
const names = new Set(authorityModelRegistry.map(entry => entry.name));
|
|
61
|
+
for (const collection of inventory.collections) {
|
|
62
|
+
if (collection.namespaceType !== 'collection' || !names.has(collection.collectionName)) {
|
|
63
|
+
throw new Error('Authswitch authority database contains an unknown collection or namespace.');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const fresh = inventory.collections.length === 0;
|
|
67
|
+
if (!fresh) {
|
|
68
|
+
if (!inventory.collections.some(item => item.collectionName === 'authswitch_authority_meta')) {
|
|
69
|
+
throw new Error('Existing authswitch authority database has no metadata collection.');
|
|
70
|
+
}
|
|
71
|
+
await runAuthorityMigrations(database);
|
|
72
|
+
}
|
|
73
|
+
await Promise.all(authorityModelRegistry.map(entry => entry.initialize(database)));
|
|
74
|
+
await Promise.all(authorityModelRegistry.map(entry => entry.prepare()));
|
|
75
|
+
if (fresh) {
|
|
76
|
+
const initial = {
|
|
77
|
+
id: 'authswitch-authority',
|
|
78
|
+
epoch: plugins.crypto.randomUUID(), revision: 0, updateId: plugins.crypto.randomUUID(),
|
|
79
|
+
};
|
|
80
|
+
const result = await AuthSwitchAuthorityMetaModel.exact.insert(initial);
|
|
81
|
+
if (result.status !== 'inserted')
|
|
82
|
+
throw new Error('Authswitch authority could not initialize.');
|
|
83
|
+
}
|
|
84
|
+
else if (!await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' })) {
|
|
85
|
+
throw new Error('Existing authswitch authority metadata is missing.');
|
|
86
|
+
}
|
|
52
87
|
this.started = true;
|
|
53
88
|
}
|
|
54
89
|
catch (error) {
|
|
@@ -98,27 +133,38 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
98
133
|
const stored = await AuthSwitchAuthorityCodexHomeModel.exact.findStoredOne({ id });
|
|
99
134
|
return stored ? AuthSwitchAuthorityCodexHomeModel.exact.toPersisted(stored) : null;
|
|
100
135
|
}
|
|
101
|
-
/**
|
|
102
|
-
async
|
|
136
|
+
/** Durable home claims must be inspected even when the daemon has lost its process map. */
|
|
137
|
+
async codexHomesForAccount(accountId, after) {
|
|
138
|
+
this.db();
|
|
139
|
+
if (!/^[a-f0-9]{64}$/.test(accountId) || (after !== null && !/^[a-f0-9]{64}$/.test(after))) {
|
|
140
|
+
throw new Error('Invalid managed Codex home selector.');
|
|
141
|
+
}
|
|
142
|
+
const stored = await AuthSwitchAuthorityCodexHomeModel.exact.findStored({
|
|
143
|
+
filter: after ? { accountId, id: { $gt: after } } : { accountId }, sort: { id: 1 }, limit: 128,
|
|
144
|
+
});
|
|
145
|
+
return stored.map(item => AuthSwitchAuthorityCodexHomeModel.exact.toPersisted(item));
|
|
146
|
+
}
|
|
147
|
+
/** Home path identity is hashed by the caller; no vendor files or raw paths enter NoSQLDB. */
|
|
148
|
+
async reserveCodexHome(accountId, grantId, scopeId, homeId, updateId) {
|
|
103
149
|
try {
|
|
104
150
|
return await this.transaction(async (session) => {
|
|
105
151
|
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
106
152
|
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
107
|
-
const grantStored =
|
|
108
|
-
? await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: account.primaryGrantId }, { session }) : null;
|
|
153
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: grantId }, { session });
|
|
109
154
|
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
110
155
|
if (!account || account.removed || account.providerId !== 'openai' || grant?.owner !== 'daemon'
|
|
111
|
-
|| grant.purpose !== 'openai_managed' || grant.accountId !== accountId
|
|
156
|
+
|| grant.purpose !== 'openai_managed' || grant.accountId !== accountId
|
|
157
|
+
|| grant.id !== account.primaryGrantId || grant.state === 'removed') {
|
|
112
158
|
throw new Error('Managed Codex requires a daemon-owned OpenAI account.');
|
|
113
159
|
}
|
|
114
160
|
const used = await AuthSwitchAuthorityCodexHomeModel.exact.findStoredOne({ id: homeId }, { session });
|
|
115
161
|
if (used) {
|
|
116
|
-
if (used.accountId !== accountId || used.scopeId !== scopeId) {
|
|
162
|
+
if (used.accountId !== accountId || used.grantId !== grantId || used.scopeId !== scopeId) {
|
|
117
163
|
throw new Error('Managed Codex home already belongs to another account or scope.');
|
|
118
164
|
}
|
|
119
165
|
return { newlyRegistered: false };
|
|
120
166
|
}
|
|
121
|
-
const record = { id: homeId, accountId, scopeId, activeRun: null,
|
|
167
|
+
const record = { id: homeId, accountId, grantId, scopeId, activeRun: null,
|
|
122
168
|
createdAt: new Date().toISOString(), updateId };
|
|
123
169
|
const inserted = await AuthSwitchAuthorityCodexHomeModel.exact.insert(record, { session });
|
|
124
170
|
if (inserted.status !== 'inserted')
|
|
@@ -127,10 +173,10 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
127
173
|
});
|
|
128
174
|
}
|
|
129
175
|
catch (error) {
|
|
130
|
-
if (error instanceof plugins.
|
|
176
|
+
if (error instanceof plugins.nosqldb.SmartdataExactPersistenceError
|
|
131
177
|
&& (error.code === 'ambiguous_write' || error.code === 'unique_conflict')) {
|
|
132
178
|
const assigned = await AuthSwitchAuthorityCodexHomeModel.exact.findStoredOne({ id: homeId });
|
|
133
|
-
if (assigned?.accountId === accountId && assigned.scopeId === scopeId
|
|
179
|
+
if (assigned?.accountId === accountId && assigned.grantId === grantId && assigned.scopeId === scopeId
|
|
134
180
|
&& assigned.updateId === updateId)
|
|
135
181
|
return { newlyRegistered: true };
|
|
136
182
|
throw new Error('Managed Codex home registration changed concurrently; refresh before retrying.');
|
|
@@ -158,7 +204,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
158
204
|
});
|
|
159
205
|
}
|
|
160
206
|
catch (error) {
|
|
161
|
-
if (!(error instanceof plugins.
|
|
207
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
162
208
|
throw error;
|
|
163
209
|
const current = await this.readCodexHome(homeId);
|
|
164
210
|
if (current?.updateId === updateId && JSON.stringify(current.activeRun) === JSON.stringify(activeRun))
|
|
@@ -174,10 +220,10 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
174
220
|
const accountStored = binding
|
|
175
221
|
? await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: binding.accountId }, { session }) : null;
|
|
176
222
|
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
177
|
-
const grantStored = binding && account
|
|
223
|
+
const grantStored = binding && account && !account.removed
|
|
178
224
|
? await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: binding.grantId }, { session }) : null;
|
|
179
225
|
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
180
|
-
return { binding, account, grant };
|
|
226
|
+
return { binding, account, grant: grant?.accountId === account?.id ? grant : null };
|
|
181
227
|
});
|
|
182
228
|
}
|
|
183
229
|
async readGrant(id) {
|
|
@@ -200,6 +246,288 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
200
246
|
const stored = await AuthSwitchAuthorityMigrationLedgerModel.exact.findStoredOne({ id });
|
|
201
247
|
return stored ? AuthSwitchAuthorityMigrationLedgerModel.exact.toPersisted(stored) : null;
|
|
202
248
|
}
|
|
249
|
+
async readOperation(id) {
|
|
250
|
+
this.db();
|
|
251
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id });
|
|
252
|
+
return stored ? storedOperation(stored) : null;
|
|
253
|
+
}
|
|
254
|
+
async operationsPage(after, limit = 128) {
|
|
255
|
+
this.db();
|
|
256
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
257
|
+
throw new Error('Invalid operation page size.');
|
|
258
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStored({
|
|
259
|
+
filter: after
|
|
260
|
+
? { kind: { $in: ['add_openai', 'reauth_openai'] }, id: { $gt: after } }
|
|
261
|
+
: { kind: { $in: ['add_openai', 'reauth_openai'] } },
|
|
262
|
+
sort: { id: 1 }, limit: limit + 1,
|
|
263
|
+
});
|
|
264
|
+
const operations = stored.slice(0, limit).map(storedOperation)
|
|
265
|
+
.filter((item) => item.kind !== 'preuse_openai');
|
|
266
|
+
return { operations, nextCursor: stored.length > limit ? operations.at(-1).id : null };
|
|
267
|
+
}
|
|
268
|
+
async operationsByState(state, after, limit = 128) {
|
|
269
|
+
this.db();
|
|
270
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
271
|
+
throw new Error('Invalid operation page size.');
|
|
272
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStored({
|
|
273
|
+
filter: after ? { state, id: { $gt: after } } : { state }, sort: { id: 1 }, limit,
|
|
274
|
+
});
|
|
275
|
+
return stored.map(storedOperation)
|
|
276
|
+
.filter((item) => item.kind !== 'preuse_openai');
|
|
277
|
+
}
|
|
278
|
+
async preuseOperationsByState(state, after, limit = 128) {
|
|
279
|
+
this.db();
|
|
280
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
281
|
+
throw new Error('Invalid operation page size.');
|
|
282
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStored({
|
|
283
|
+
filter: after ? { kind: 'preuse_openai', state, id: { $gt: after } } : { kind: 'preuse_openai', state },
|
|
284
|
+
sort: { id: 1 }, limit,
|
|
285
|
+
});
|
|
286
|
+
return stored.map(storedOperation)
|
|
287
|
+
.filter((item) => item.kind === 'preuse_openai');
|
|
288
|
+
}
|
|
289
|
+
/** Insert-or-read admission for one exact device-login intent. Existing receipts are never replayed. */
|
|
290
|
+
async createOperation(intent) {
|
|
291
|
+
this.db();
|
|
292
|
+
assertStoredAuthorityOperation({ ...intent,
|
|
293
|
+
expectedGrantGeneration: intent.kind === 'reauth_openai' ? 1 : null });
|
|
294
|
+
const sameRequest = (current) => current.kind !== 'preuse_openai' && current.kind === intent.kind
|
|
295
|
+
&& current.accountId === intent.accountId && current.grantId === intent.grantId
|
|
296
|
+
&& current.purpose === intent.purpose;
|
|
297
|
+
try {
|
|
298
|
+
return await this.transaction(async (session) => {
|
|
299
|
+
const existingStored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: intent.id }, { session });
|
|
300
|
+
if (existingStored) {
|
|
301
|
+
const existing = storedOperation(existingStored);
|
|
302
|
+
if (!sameRequest(existing))
|
|
303
|
+
throw new Error('Account operation ID belongs to a different request.');
|
|
304
|
+
return { operation: existing, created: false };
|
|
305
|
+
}
|
|
306
|
+
let expectedGrantGeneration = null;
|
|
307
|
+
if (intent.kind === 'reauth_openai') {
|
|
308
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: intent.accountId }, { session });
|
|
309
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: intent.grantId }, { session });
|
|
310
|
+
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
311
|
+
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
312
|
+
if (!account || account.removed || account.providerId !== 'openai'
|
|
313
|
+
|| account.primaryGrantId !== intent.grantId || !grant || grant.accountId !== intent.accountId
|
|
314
|
+
|| grant.providerId !== 'openai' || grant.purpose !== 'openai_managed'
|
|
315
|
+
|| grant.owner !== 'daemon' || ['removed', 'exchange_may_have_been_sent'].includes(grant.state)) {
|
|
316
|
+
throw new Error('Selected OpenAI login is unavailable for reauthentication.');
|
|
317
|
+
}
|
|
318
|
+
expectedGrantGeneration = grant.grantGeneration;
|
|
319
|
+
}
|
|
320
|
+
const operation = { ...intent, expectedGrantGeneration };
|
|
321
|
+
assertStoredAuthorityOperation(operation);
|
|
322
|
+
const result = await AuthSwitchAuthorityOperationModel.exact.insert(operation, { session });
|
|
323
|
+
if (result.status !== 'inserted')
|
|
324
|
+
throw new Error('Account operation ID already exists.');
|
|
325
|
+
return { operation, created: true };
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
330
|
+
throw error;
|
|
331
|
+
const stored = await this.readOperation(intent.id);
|
|
332
|
+
if (stored && sameRequest(stored)) {
|
|
333
|
+
return { operation: stored, created: stored.updateId === intent.updateId };
|
|
334
|
+
}
|
|
335
|
+
throw new Error('Account operation creation outcome is unknown; no provider login was started.');
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/** Revalidate the durable owner and exact reauthentication generation after mutable runtime preparation. */
|
|
339
|
+
async confirmOperationMayStart(operationId) {
|
|
340
|
+
return this.transaction(async (session) => {
|
|
341
|
+
const operationStored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operationId }, { session });
|
|
342
|
+
if (!operationStored)
|
|
343
|
+
throw new Error('Account operation was not found.');
|
|
344
|
+
const operation = storedOperation(operationStored);
|
|
345
|
+
if (operation.kind === 'preuse_openai' || operation.state !== 'starting') {
|
|
346
|
+
throw new Error('Account operation is no longer starting.');
|
|
347
|
+
}
|
|
348
|
+
if (operation.kind === 'reauth_openai') {
|
|
349
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: operation.accountId }, { session });
|
|
350
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: operation.grantId }, { session });
|
|
351
|
+
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
352
|
+
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
353
|
+
if (!account || account.removed || account.providerId !== 'openai'
|
|
354
|
+
|| account.primaryGrantId !== operation.grantId || !grant || grant.accountId !== operation.accountId
|
|
355
|
+
|| grant.providerId !== 'openai' || grant.purpose !== 'openai_managed'
|
|
356
|
+
|| grant.owner !== 'daemon' || ['removed', 'exchange_may_have_been_sent'].includes(grant.state)
|
|
357
|
+
|| grant.grantGeneration !== operation.expectedGrantGeneration) {
|
|
358
|
+
throw new Error('Selected OpenAI login changed before reauthentication could start.');
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return operation;
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
async changeOperation(updateId, operationId, change) {
|
|
365
|
+
this.db();
|
|
366
|
+
try {
|
|
367
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operationId });
|
|
368
|
+
if (!stored)
|
|
369
|
+
throw new Error('Account operation was not found.');
|
|
370
|
+
const current = storedOperation(stored);
|
|
371
|
+
if (current.kind === 'preuse_openai')
|
|
372
|
+
throw new Error('Account operation is not a device login.');
|
|
373
|
+
const draft = change(structuredClone(current));
|
|
374
|
+
const allowed = {
|
|
375
|
+
starting: ['pending', 'failed', 'cancelled', 'interrupted'],
|
|
376
|
+
pending: ['committing', 'failed', 'cancelled', 'interrupted'],
|
|
377
|
+
committing: ['complete', 'outcome_unknown'],
|
|
378
|
+
complete: [], failed: [], cancelled: [], interrupted: [], outcome_unknown: [],
|
|
379
|
+
};
|
|
380
|
+
if (draft.id !== current.id || draft.kind !== current.kind || draft.purpose !== current.purpose
|
|
381
|
+
|| draft.accountId !== current.accountId || draft.grantId !== current.grantId
|
|
382
|
+
|| draft.expectedGrantGeneration !== current.expectedGrantGeneration
|
|
383
|
+
|| draft.createdAt !== current.createdAt || draft.updateId !== updateId
|
|
384
|
+
|| draft.revision !== current.revision + 1 || !allowed[current.state].includes(draft.state)) {
|
|
385
|
+
throw new Error('Account operation transition is invalid.');
|
|
386
|
+
}
|
|
387
|
+
assertStoredAuthorityOperation(draft);
|
|
388
|
+
const result = await AuthSwitchAuthorityOperationModel.exact.transition({
|
|
389
|
+
current: stored, change: model => Object.assign(model, draft),
|
|
390
|
+
});
|
|
391
|
+
if (result.status !== 'transitioned')
|
|
392
|
+
throw new Error('Account operation changed concurrently.');
|
|
393
|
+
return draft;
|
|
394
|
+
}
|
|
395
|
+
catch (error) {
|
|
396
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
397
|
+
throw error;
|
|
398
|
+
const stored = await this.readOperation(operationId);
|
|
399
|
+
if (stored?.kind !== 'preuse_openai' && stored?.updateId === updateId)
|
|
400
|
+
return stored;
|
|
401
|
+
throw new Error('Account operation transition outcome is unknown.');
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/** Insert-or-read idempotency for one exact preuse request. Existing records are never resumed here. */
|
|
405
|
+
async createPreuseOperation(operation) {
|
|
406
|
+
this.db();
|
|
407
|
+
assertStoredAuthorityOperation(operation);
|
|
408
|
+
const sameRequest = (current) => current.kind === 'preuse_openai' && current.accountId === operation.accountId
|
|
409
|
+
&& current.grantId === operation.grantId && current.purpose === operation.purpose
|
|
410
|
+
&& current.requestHash === operation.requestHash && current.requestedModel === operation.requestedModel;
|
|
411
|
+
try {
|
|
412
|
+
return await this.transaction(async (session) => {
|
|
413
|
+
const existingStored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operation.id }, { session });
|
|
414
|
+
if (existingStored) {
|
|
415
|
+
const existing = storedOperation(existingStored);
|
|
416
|
+
if (!sameRequest(existing))
|
|
417
|
+
throw new Error('Preuse operation ID belongs to a different request.');
|
|
418
|
+
return { operation: existing, created: false };
|
|
419
|
+
}
|
|
420
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: operation.accountId }, { session });
|
|
421
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: operation.grantId }, { session });
|
|
422
|
+
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
423
|
+
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
424
|
+
if (!account || account.removed || account.providerId !== 'openai' || account.primaryGrantId !== operation.grantId
|
|
425
|
+
|| !grant || grant.accountId !== operation.accountId || grant.providerId !== 'openai'
|
|
426
|
+
|| grant.purpose !== 'openai_managed' || grant.owner !== 'daemon'
|
|
427
|
+
|| !['ready', 'retry_wait'].includes(grant.state)
|
|
428
|
+
|| grant.authorizationGeneration !== operation.authorizationGeneration) {
|
|
429
|
+
throw new Error('Selected OpenAI login is unavailable for preuse.');
|
|
430
|
+
}
|
|
431
|
+
const inserted = await AuthSwitchAuthorityOperationModel.exact.insert(operation, { session });
|
|
432
|
+
if (inserted.status !== 'inserted')
|
|
433
|
+
throw new Error('Preuse operation ID already exists.');
|
|
434
|
+
return { operation, created: true };
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
catch (error) {
|
|
438
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
439
|
+
throw error;
|
|
440
|
+
const stored = await this.readOperation(operation.id);
|
|
441
|
+
if (stored && sameRequest(stored) && stored.updateId === operation.updateId) {
|
|
442
|
+
return { operation: stored, created: true };
|
|
443
|
+
}
|
|
444
|
+
throw new Error('Preuse operation creation outcome is unknown; no provider request was started.');
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
/** The committed marker precedes the only quota-consuming provider call. */
|
|
448
|
+
async markPreuseRequestMayHaveStarted(operationId, updateId, model, grantGeneration, now) {
|
|
449
|
+
try {
|
|
450
|
+
return await this.transaction(async (session) => {
|
|
451
|
+
const operationStored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operationId }, { session });
|
|
452
|
+
if (!operationStored)
|
|
453
|
+
throw new Error('Preuse operation was not found.');
|
|
454
|
+
const current = storedOperation(operationStored);
|
|
455
|
+
if (current.kind !== 'preuse_openai' || current.state !== 'preparing') {
|
|
456
|
+
throw new Error('Preuse operation is no longer preparing.');
|
|
457
|
+
}
|
|
458
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: current.accountId }, { session });
|
|
459
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: current.grantId }, { session });
|
|
460
|
+
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
461
|
+
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
462
|
+
if (!account || account.removed || account.providerId !== 'openai' || account.primaryGrantId !== current.grantId
|
|
463
|
+
|| !grant || grant.accountId !== current.accountId || grant.providerId !== 'openai'
|
|
464
|
+
|| grant.purpose !== current.purpose || grant.owner !== 'daemon'
|
|
465
|
+
|| !['ready', 'retry_wait'].includes(grant.state)
|
|
466
|
+
|| grant.authorizationGeneration !== current.authorizationGeneration
|
|
467
|
+
|| grant.grantGeneration !== grantGeneration) {
|
|
468
|
+
throw new Error('Preuse login changed before its request marker was committed.');
|
|
469
|
+
}
|
|
470
|
+
const draft = { ...current, model, grantGeneration,
|
|
471
|
+
state: 'request_may_have_started', updatedAt: now, revision: current.revision + 1, updateId };
|
|
472
|
+
assertStoredAuthorityOperation(draft);
|
|
473
|
+
const transitioned = await AuthSwitchAuthorityOperationModel.exact.transition({
|
|
474
|
+
current: operationStored, change: stored => Object.assign(stored, draft),
|
|
475
|
+
}, { session });
|
|
476
|
+
if (transitioned.status !== 'transitioned')
|
|
477
|
+
throw new Error('Preuse operation changed concurrently.');
|
|
478
|
+
return draft;
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
catch (error) {
|
|
482
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
483
|
+
throw error;
|
|
484
|
+
const stored = await this.readOperation(operationId);
|
|
485
|
+
if (stored?.kind === 'preuse_openai' && stored.updateId === updateId
|
|
486
|
+
&& stored.state === 'request_may_have_started')
|
|
487
|
+
return stored;
|
|
488
|
+
throw new Error('Preuse request-marker outcome is unknown; no provider request was started.');
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
async changePreuseOperation(updateId, operationId, change) {
|
|
492
|
+
this.db();
|
|
493
|
+
try {
|
|
494
|
+
const stored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operationId });
|
|
495
|
+
if (!stored)
|
|
496
|
+
throw new Error('Preuse operation was not found.');
|
|
497
|
+
const current = storedOperation(stored);
|
|
498
|
+
if (current.kind !== 'preuse_openai')
|
|
499
|
+
throw new Error('Operation is not a preuse request.');
|
|
500
|
+
const draft = change(structuredClone(current));
|
|
501
|
+
const allowed = {
|
|
502
|
+
preparing: ['request_may_have_started', 'not_sent'],
|
|
503
|
+
request_may_have_started: ['complete', 'outcome_unknown'],
|
|
504
|
+
complete: [], not_sent: [], outcome_unknown: [],
|
|
505
|
+
};
|
|
506
|
+
if (draft.id !== current.id || draft.kind !== current.kind || draft.purpose !== current.purpose
|
|
507
|
+
|| draft.accountId !== current.accountId || draft.grantId !== current.grantId
|
|
508
|
+
|| draft.requestHash !== current.requestHash || draft.requestedModel !== current.requestedModel
|
|
509
|
+
|| draft.authorizationGeneration !== current.authorizationGeneration
|
|
510
|
+
|| draft.createdAt !== current.createdAt || draft.updateId !== updateId
|
|
511
|
+
|| draft.revision !== current.revision + 1 || !allowed[current.state].includes(draft.state)) {
|
|
512
|
+
throw new Error('Preuse operation transition is invalid.');
|
|
513
|
+
}
|
|
514
|
+
assertStoredAuthorityOperation(draft);
|
|
515
|
+
const result = await AuthSwitchAuthorityOperationModel.exact.transition({
|
|
516
|
+
current: stored, change: model => Object.assign(model, draft),
|
|
517
|
+
});
|
|
518
|
+
if (result.status !== 'transitioned')
|
|
519
|
+
throw new Error('Preuse operation changed concurrently.');
|
|
520
|
+
return draft;
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
524
|
+
throw error;
|
|
525
|
+
const stored = await this.readOperation(operationId);
|
|
526
|
+
if (stored?.kind === 'preuse_openai' && stored.updateId === updateId)
|
|
527
|
+
return stored;
|
|
528
|
+
throw new Error('Preuse operation transition outcome is unknown.');
|
|
529
|
+
}
|
|
530
|
+
}
|
|
203
531
|
async migrationLedgerByStatus(status, after, limit = 128) {
|
|
204
532
|
this.db();
|
|
205
533
|
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
@@ -218,7 +546,157 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
218
546
|
return { account, grant: grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null };
|
|
219
547
|
});
|
|
220
548
|
}
|
|
221
|
-
async
|
|
549
|
+
async readAccountAndGrant(accountId, grantId) {
|
|
550
|
+
return this.transaction(async (session) => {
|
|
551
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
552
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: grantId }, { session });
|
|
553
|
+
const account = accountStored ? AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored) : null;
|
|
554
|
+
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
555
|
+
return { account, grant: grant?.accountId === accountId ? grant : null };
|
|
556
|
+
});
|
|
557
|
+
}
|
|
558
|
+
/** Epoch, account and exact login are read from one authority snapshot. */
|
|
559
|
+
async readUsageContext(accountId, loginId) {
|
|
560
|
+
return (await this.readUsageAccessView(accountId, loginId))?.context ?? null;
|
|
561
|
+
}
|
|
562
|
+
/** Backend-only view used to validate a usage token before and after unsealing. */
|
|
563
|
+
async readUsageAccessView(accountId, loginId) {
|
|
564
|
+
if (!/^[a-f0-9]{64}$/.test(accountId) || !/^[a-f0-9]{64}$/.test(loginId)) {
|
|
565
|
+
throw new Error('Invalid authority usage identity.');
|
|
566
|
+
}
|
|
567
|
+
return this.transaction(async (session) => {
|
|
568
|
+
const meta = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
569
|
+
const account = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
570
|
+
const grant = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: loginId }, { session });
|
|
571
|
+
if (!meta || !account || !grant || grant.accountId !== accountId)
|
|
572
|
+
return null;
|
|
573
|
+
const accountRecord = AuthSwitchAuthorityAccountModel.exact.toPersisted(account);
|
|
574
|
+
const grantRecord = AuthSwitchAuthorityGrantModel.exact.toPersisted(grant);
|
|
575
|
+
return { context: usageContext(AuthSwitchAuthorityMetaModel.exact.toPersisted(meta), accountRecord, grantRecord),
|
|
576
|
+
account: accountRecord, grant: grantRecord };
|
|
577
|
+
});
|
|
578
|
+
}
|
|
579
|
+
/** Coherent native source ownership, including the home handoff fence. */
|
|
580
|
+
async readClaudeNativeUsageView(homeId, accountId, loginId) {
|
|
581
|
+
if (![homeId, accountId, loginId].every(id => /^[a-f0-9]{64}$/.test(id))) {
|
|
582
|
+
throw new Error('Invalid Claude native usage selector.');
|
|
583
|
+
}
|
|
584
|
+
return this.transaction(async (session) => {
|
|
585
|
+
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
586
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
587
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: loginId }, { session });
|
|
588
|
+
const homeStored = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({ id: homeId }, { session });
|
|
589
|
+
if (!metaStored || !accountStored || !grantStored || !homeStored
|
|
590
|
+
|| grantStored.accountId !== accountId || accountStored.removed
|
|
591
|
+
|| accountStored.providerId !== 'anthropic' || grantStored.providerId !== 'anthropic'
|
|
592
|
+
|| grantStored.purpose !== 'claude_host_native' || grantStored.owner !== 'claude_native'
|
|
593
|
+
|| grantStored.state !== 'native' || homeStored.status !== 'ready'
|
|
594
|
+
|| homeStored.pendingOperationId !== null || homeStored.activeAccountId !== accountId
|
|
595
|
+
|| homeStored.activeGrantId !== loginId)
|
|
596
|
+
return null;
|
|
597
|
+
const account = AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored);
|
|
598
|
+
const grant = AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored);
|
|
599
|
+
return { context: usageContext(AuthSwitchAuthorityMetaModel.exact.toPersisted(metaStored), account, grant),
|
|
600
|
+
account, grant, home: AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(homeStored) };
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
async readUsage(accountId, loginId) {
|
|
604
|
+
this.db();
|
|
605
|
+
if (!/^[a-f0-9]{64}$/.test(accountId) || !/^[a-f0-9]{64}$/.test(loginId)) {
|
|
606
|
+
throw new Error('Invalid authority usage identity.');
|
|
607
|
+
}
|
|
608
|
+
const stored = await AuthSwitchAuthorityUsageModel.exact.findStoredOne({ id: authorityUsageId(accountId, loginId) });
|
|
609
|
+
if (!stored)
|
|
610
|
+
return null;
|
|
611
|
+
const { id: _id, accountId: _accountId, loginId: _loginId, ...record } = AuthSwitchAuthorityUsageModel.exact.toPersisted(stored);
|
|
612
|
+
return record;
|
|
613
|
+
}
|
|
614
|
+
/** Publish one credential-free usage result only if its authority and predecessor still match. */
|
|
615
|
+
async publishUsageIfCurrent(context, previousUpdateId, next) {
|
|
616
|
+
const id = authorityUsageId(context.accountId, context.loginId);
|
|
617
|
+
const draft = { id, accountId: context.accountId,
|
|
618
|
+
loginId: context.loginId, ...next };
|
|
619
|
+
assertStoredAuthorityUsage(draft);
|
|
620
|
+
if (!sameUsageSource(context, next.context)
|
|
621
|
+
|| (previousUpdateId !== null && !/^[a-f0-9-]{36}$/.test(previousUpdateId))) {
|
|
622
|
+
throw new Error('Authority usage publication has an invalid context or predecessor.');
|
|
623
|
+
}
|
|
624
|
+
try {
|
|
625
|
+
return await this.transaction(async (session) => {
|
|
626
|
+
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
627
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: context.accountId }, { session });
|
|
628
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: context.loginId }, { session });
|
|
629
|
+
if (!metaStored || !accountStored || !grantStored || grantStored.accountId !== context.accountId)
|
|
630
|
+
return false;
|
|
631
|
+
const actual = usageContext(AuthSwitchAuthorityMetaModel.exact.toPersisted(metaStored), AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored), AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored));
|
|
632
|
+
if (!sameUsageContext(context, actual) || actual.removed)
|
|
633
|
+
return false;
|
|
634
|
+
if (actual.providerId === 'openai') {
|
|
635
|
+
if (actual.owner !== 'daemon' || actual.purpose !== 'openai_managed'
|
|
636
|
+
|| context.nativeSource !== null || !['ready', 'retry_wait'].includes(actual.grantState))
|
|
637
|
+
return false;
|
|
638
|
+
}
|
|
639
|
+
else if (actual.providerId === 'anthropic' && actual.purpose === 'claude_host_native') {
|
|
640
|
+
if (actual.owner === 'daemon') {
|
|
641
|
+
if (context.nativeSource !== null || !['ready', 'retry_wait'].includes(actual.grantState))
|
|
642
|
+
return false;
|
|
643
|
+
}
|
|
644
|
+
else if (actual.owner === 'claude_native' && actual.grantState === 'native'
|
|
645
|
+
&& context.nativeSource !== null) {
|
|
646
|
+
const homeStored = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({
|
|
647
|
+
id: context.nativeSource.homeId
|
|
648
|
+
}, { session });
|
|
649
|
+
if (!homeStored || homeStored.status !== 'ready' || homeStored.pendingOperationId !== null
|
|
650
|
+
|| homeStored.activeAccountId !== context.accountId
|
|
651
|
+
|| homeStored.activeGrantId !== context.loginId)
|
|
652
|
+
return false;
|
|
653
|
+
}
|
|
654
|
+
else
|
|
655
|
+
return false;
|
|
656
|
+
}
|
|
657
|
+
else
|
|
658
|
+
return false;
|
|
659
|
+
const current = await AuthSwitchAuthorityUsageModel.exact.findStoredOne({ id }, { session });
|
|
660
|
+
if (current) {
|
|
661
|
+
const prior = AuthSwitchAuthorityUsageModel.exact.toPersisted(current);
|
|
662
|
+
if (sameUsageSource(prior.context, context)
|
|
663
|
+
? prior.updateId !== previousUpdateId : previousUpdateId !== null)
|
|
664
|
+
return false;
|
|
665
|
+
const changed = await AuthSwitchAuthorityUsageModel.exact.transition({ current,
|
|
666
|
+
change: model => Object.assign(model, draft) }, { session });
|
|
667
|
+
if (changed.status !== 'transitioned')
|
|
668
|
+
return false;
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
if (previousUpdateId !== null)
|
|
672
|
+
return false;
|
|
673
|
+
const inserted = await AuthSwitchAuthorityUsageModel.exact.insert(draft, { session });
|
|
674
|
+
if (inserted.status !== 'inserted')
|
|
675
|
+
return false;
|
|
676
|
+
}
|
|
677
|
+
await this.appendEvent(session, AuthSwitchAuthorityMetaModel.exact.toPersisted(metaStored), next.updateId, 'account', context.accountId);
|
|
678
|
+
return true;
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
catch (error) {
|
|
682
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError))
|
|
683
|
+
throw error;
|
|
684
|
+
if (error.code === 'unique_conflict')
|
|
685
|
+
return false;
|
|
686
|
+
if (error.code !== 'ambiguous_write')
|
|
687
|
+
throw error;
|
|
688
|
+
const [stored, event] = await Promise.all([
|
|
689
|
+
AuthSwitchAuthorityUsageModel.exact.findStoredOne({ id }),
|
|
690
|
+
AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: next.updateId }),
|
|
691
|
+
]);
|
|
692
|
+
if (stored?.updateId === next.updateId && event?.epoch === context.epoch
|
|
693
|
+
&& event.kind === 'account' && event.accountId === context.accountId
|
|
694
|
+
&& sameUsageSource(stored.context, context))
|
|
695
|
+
return true;
|
|
696
|
+
throw new Error('Authority usage publication outcome is unknown; the provider query must not be replayed.');
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
async page(accountAfter, grantAfter, bindingAfter, limit) {
|
|
222
700
|
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
223
701
|
throw new Error('Invalid authority page size.');
|
|
224
702
|
return this.transaction(async (session) => {
|
|
@@ -229,28 +707,102 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
229
707
|
filter: accountAfter ? { id: { $gt: accountAfter } } : {},
|
|
230
708
|
sort: { id: 1 }, limit: limit + 1, session,
|
|
231
709
|
});
|
|
710
|
+
const grants = await AuthSwitchAuthorityGrantModel.exact.findStored({
|
|
711
|
+
filter: grantAfter ? { id: { $gt: grantAfter } } : {},
|
|
712
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
713
|
+
});
|
|
232
714
|
const bindings = await AuthSwitchAuthorityBindingModel.exact.findStored({
|
|
233
715
|
filter: bindingAfter ? { id: { $gt: bindingAfter } } : {},
|
|
234
716
|
sort: { id: 1 }, limit: limit + 1, session,
|
|
235
717
|
});
|
|
236
718
|
const accountPage = accounts.slice(0, limit).map(item => AuthSwitchAuthorityAccountModel.exact.toPersisted(item));
|
|
719
|
+
const grantPage = grants.slice(0, limit).map(item => AuthSwitchAuthorityGrantModel.exact.toPersisted(item));
|
|
237
720
|
const bindingPage = bindings.slice(0, limit).map(item => AuthSwitchAuthorityBindingModel.exact.toPersisted(item));
|
|
238
|
-
const withGrants = [];
|
|
239
|
-
for (const account of accountPage) {
|
|
240
|
-
const stored = account.primaryGrantId
|
|
241
|
-
? await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: account.primaryGrantId }, { session }) : null;
|
|
242
|
-
if (account.primaryGrantId && !stored)
|
|
243
|
-
throw new Error('Authority account primary grant is missing.');
|
|
244
|
-
withGrants.push({ account, grant: stored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(stored) : null });
|
|
245
|
-
}
|
|
246
721
|
return {
|
|
247
722
|
meta: AuthSwitchAuthorityMetaModel.exact.toPersisted(meta),
|
|
248
|
-
accounts:
|
|
723
|
+
accounts: accountPage, grants: grantPage, bindings: bindingPage,
|
|
249
724
|
nextAccountCursor: accounts.length > limit ? accountPage.at(-1).id : null,
|
|
725
|
+
nextGrantCursor: grants.length > limit ? grantPage.at(-1).id : null,
|
|
250
726
|
nextBindingCursor: bindings.length > limit ? bindingPage.at(-1).id : null,
|
|
251
727
|
};
|
|
252
728
|
});
|
|
253
729
|
}
|
|
730
|
+
/**
|
|
731
|
+
* One bounded, repeatable-read diagnostic page. Its metadata revision is authority state,
|
|
732
|
+
* not a complete change clock for every native-home record.
|
|
733
|
+
*/
|
|
734
|
+
async doctorPage(cursors, limit) {
|
|
735
|
+
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 128) {
|
|
736
|
+
throw new Error('Invalid authority doctor page size.');
|
|
737
|
+
}
|
|
738
|
+
const hashCursor = (value) => value === null || /^[a-f0-9]{64}$/.test(value);
|
|
739
|
+
if (![cursors.accountAfter, cursors.loginAfter, cursors.codexHomeAfter, cursors.claudeHomeAfter,
|
|
740
|
+
cursors.nativeHandoffAfter, cursors.migrationAfter].every(hashCursor)
|
|
741
|
+
|| (cursors.claudeHandoffAfter !== null && !/^[a-f0-9-]{36}$/.test(cursors.claudeHandoffAfter))) {
|
|
742
|
+
throw new Error('Invalid authority doctor cursor.');
|
|
743
|
+
}
|
|
744
|
+
return this.transaction(async (session) => {
|
|
745
|
+
const meta = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
746
|
+
if (!meta)
|
|
747
|
+
throw new Error('Authswitch authority metadata is missing.');
|
|
748
|
+
const accounts = await AuthSwitchAuthorityAccountModel.exact.findStored({
|
|
749
|
+
filter: cursors.accountAfter ? { id: { $gt: cursors.accountAfter } } : {},
|
|
750
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
751
|
+
});
|
|
752
|
+
const logins = await AuthSwitchAuthorityGrantModel.exact.findStored({
|
|
753
|
+
filter: cursors.loginAfter ? { id: { $gt: cursors.loginAfter } } : {},
|
|
754
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
755
|
+
});
|
|
756
|
+
const codexHomes = await AuthSwitchAuthorityCodexHomeModel.exact.findStored({
|
|
757
|
+
filter: cursors.codexHomeAfter ? { id: { $gt: cursors.codexHomeAfter } } : {},
|
|
758
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
759
|
+
});
|
|
760
|
+
const claudeHomes = await AuthSwitchAuthorityClaudeHomeModel.exact.findStored({
|
|
761
|
+
filter: cursors.claudeHomeAfter ? { id: { $gt: cursors.claudeHomeAfter } } : {},
|
|
762
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
763
|
+
});
|
|
764
|
+
const claudeHandoffs = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStored({
|
|
765
|
+
filter: cursors.claudeHandoffAfter ? { id: { $gt: cursors.claudeHandoffAfter } } : {},
|
|
766
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
767
|
+
});
|
|
768
|
+
const nativeHandoffs = await AuthSwitchAuthorityHandoffModel.exact.findStored({
|
|
769
|
+
filter: cursors.nativeHandoffAfter ? { id: { $gt: cursors.nativeHandoffAfter } } : {},
|
|
770
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
771
|
+
});
|
|
772
|
+
const migrations = await AuthSwitchAuthorityMigrationLedgerModel.exact.findStored({
|
|
773
|
+
filter: cursors.migrationAfter ? { id: { $gt: cursors.migrationAfter } } : {},
|
|
774
|
+
sort: { id: 1 }, limit: limit + 1, session,
|
|
775
|
+
});
|
|
776
|
+
const accountPage = accounts.slice(0, limit).map(item => AuthSwitchAuthorityAccountModel.exact.toPersisted(item));
|
|
777
|
+
const loginPage = logins.slice(0, limit).map(item => AuthSwitchAuthorityGrantModel.exact.toPersisted(item));
|
|
778
|
+
const codexHomePage = codexHomes.slice(0, limit).map(item => AuthSwitchAuthorityCodexHomeModel.exact.toPersisted(item));
|
|
779
|
+
const claudeHomePage = claudeHomes.slice(0, limit).map(item => AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(item));
|
|
780
|
+
const claudeHandoffPage = claudeHandoffs.slice(0, limit)
|
|
781
|
+
.map(item => AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(item));
|
|
782
|
+
const nativeHandoffPage = nativeHandoffs.slice(0, limit)
|
|
783
|
+
.map(item => AuthSwitchAuthorityHandoffModel.exact.toPersisted(item));
|
|
784
|
+
const migrationPage = migrations.slice(0, limit)
|
|
785
|
+
.map(item => AuthSwitchAuthorityMigrationLedgerModel.exact.toPersisted(item));
|
|
786
|
+
return {
|
|
787
|
+
observedAt: new Date().toISOString(),
|
|
788
|
+
meta: AuthSwitchAuthorityMetaModel.exact.toPersisted(meta),
|
|
789
|
+
accounts: accountPage,
|
|
790
|
+
logins: loginPage,
|
|
791
|
+
codexHomes: codexHomePage,
|
|
792
|
+
claudeHomes: claudeHomePage,
|
|
793
|
+
claudeHandoffs: claudeHandoffPage,
|
|
794
|
+
nativeHandoffs: nativeHandoffPage,
|
|
795
|
+
migrations: migrationPage,
|
|
796
|
+
nextAccountCursor: accounts.length > limit ? accountPage.at(-1).id : null,
|
|
797
|
+
nextLoginCursor: logins.length > limit ? loginPage.at(-1).id : null,
|
|
798
|
+
nextCodexHomeCursor: codexHomes.length > limit ? codexHomePage.at(-1).id : null,
|
|
799
|
+
nextClaudeHomeCursor: claudeHomes.length > limit ? claudeHomePage.at(-1).id : null,
|
|
800
|
+
nextClaudeHandoffCursor: claudeHandoffs.length > limit ? claudeHandoffPage.at(-1).id : null,
|
|
801
|
+
nextNativeHandoffCursor: nativeHandoffs.length > limit ? nativeHandoffPage.at(-1).id : null,
|
|
802
|
+
nextMigrationCursor: migrations.length > limit ? migrationPage.at(-1).id : null,
|
|
803
|
+
};
|
|
804
|
+
});
|
|
805
|
+
}
|
|
254
806
|
async grantsByState(state, after, limit = 128) {
|
|
255
807
|
this.db();
|
|
256
808
|
if (!Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
@@ -314,7 +866,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
314
866
|
throw new Error('Account was added concurrently.');
|
|
315
867
|
}
|
|
316
868
|
}
|
|
317
|
-
async persistGrant(session, current, draft) {
|
|
869
|
+
async persistGrant(session, current, draft, allowClaudeHandoff = false) {
|
|
318
870
|
assertStoredAuthorityGrant(draft);
|
|
319
871
|
if (current) {
|
|
320
872
|
const prior = AuthSwitchAuthorityGrantModel.exact.toPersisted(current);
|
|
@@ -322,6 +874,12 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
322
874
|
|| draft.providerId !== prior.providerId || draft.purpose !== prior.purpose
|
|
323
875
|
|| draft.audience !== prior.audience)
|
|
324
876
|
throw new Error('Grant identity cannot change.');
|
|
877
|
+
if (!allowClaudeHandoff && draft.purpose === 'claude_host_native'
|
|
878
|
+
&& (['handoff_pending', 'handoff_quarantined'].includes(draft.state)
|
|
879
|
+
|| ['handoff_pending', 'handoff_quarantined'].includes(prior.state)
|
|
880
|
+
|| draft.owner !== prior.owner)) {
|
|
881
|
+
throw new Error('Claude native ownership requires the two-grant handoff transaction.');
|
|
882
|
+
}
|
|
325
883
|
const result = await AuthSwitchAuthorityGrantModel.exact.transition({
|
|
326
884
|
current, change: model => Object.assign(model, draft),
|
|
327
885
|
}, { session });
|
|
@@ -329,6 +887,9 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
329
887
|
throw new Error('Grant changed concurrently.');
|
|
330
888
|
}
|
|
331
889
|
else {
|
|
890
|
+
if (!allowClaudeHandoff && ['handoff_pending', 'handoff_quarantined'].includes(draft.state)) {
|
|
891
|
+
throw new Error('Claude handoff cannot begin with an unassigned grant.');
|
|
892
|
+
}
|
|
332
893
|
const result = await AuthSwitchAuthorityGrantModel.exact.insert(draft, { session });
|
|
333
894
|
if (result.status !== 'inserted')
|
|
334
895
|
throw new Error('Grant was added concurrently.');
|
|
@@ -363,7 +924,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
363
924
|
});
|
|
364
925
|
}
|
|
365
926
|
catch (error) {
|
|
366
|
-
if (!(error instanceof plugins.
|
|
927
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
367
928
|
throw error;
|
|
368
929
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
369
930
|
const { account, grant } = await this.readAccountAndPrimaryGrant(accountId);
|
|
@@ -373,6 +934,72 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
373
934
|
throw new Error('Authswitch account/grant write outcome is unknown; no external exchange may start.');
|
|
374
935
|
}
|
|
375
936
|
}
|
|
937
|
+
/** Device-login result, account and grant are one commit; a lost RPC response remains discoverable by operation ID. */
|
|
938
|
+
async commitLoginOperation(updateId, operationId, accountId, grantId, change) {
|
|
939
|
+
try {
|
|
940
|
+
return await this.transaction(async (session) => {
|
|
941
|
+
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
942
|
+
const operationStored = await AuthSwitchAuthorityOperationModel.exact.findStoredOne({ id: operationId }, { session });
|
|
943
|
+
if (!metaStored || !operationStored)
|
|
944
|
+
throw new Error('Device operation is unavailable.');
|
|
945
|
+
const operation = storedOperation(operationStored);
|
|
946
|
+
if (operation.kind === 'preuse_openai' || operation.state !== 'committing' || operation.commitId !== updateId
|
|
947
|
+
|| (operation.kind === 'reauth_openai' && (operation.accountId !== accountId || operation.grantId !== grantId))) {
|
|
948
|
+
throw new Error('Device operation is not admitted for this login.');
|
|
949
|
+
}
|
|
950
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
951
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: grantId }, { session });
|
|
952
|
+
const oldGrant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
953
|
+
if (operation.kind === 'reauth_openai' && oldGrant?.grantGeneration !== operation.expectedGrantGeneration) {
|
|
954
|
+
throw new Error('Login changed while device reauthentication was pending.');
|
|
955
|
+
}
|
|
956
|
+
const draft = change(accountStored ? structuredClone(AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored)) : null, oldGrant ? structuredClone(oldGrant) : null);
|
|
957
|
+
if (draft.account.id !== accountId || draft.grant.id !== grantId || draft.grant.accountId !== accountId
|
|
958
|
+
|| draft.account.primaryGrantId !== grantId || draft.account.providerId !== draft.grant.providerId
|
|
959
|
+
|| draft.account.updateId !== updateId || draft.grant.updateId !== updateId) {
|
|
960
|
+
throw new Error('Device login account/grant change has an invalid identity.');
|
|
961
|
+
}
|
|
962
|
+
if (accountStored && accountStored.primaryGrantId !== grantId) {
|
|
963
|
+
throw new Error('Primary grant identity cannot be replaced.');
|
|
964
|
+
}
|
|
965
|
+
if (grantStored && ['legacy_native', 'claude_native'].includes(grantStored.owner)
|
|
966
|
+
&& draft.grant.owner === 'daemon') {
|
|
967
|
+
throw new Error('Native ownership requires a verified handoff.');
|
|
968
|
+
}
|
|
969
|
+
const completed = {
|
|
970
|
+
...operation, state: 'complete', prompt: null,
|
|
971
|
+
result: { accountId, grantId, accountRevision: draft.account.revision,
|
|
972
|
+
grantGeneration: draft.grant.grantGeneration },
|
|
973
|
+
error: null, updatedAt: draft.account.statusObservedAt, finishedAt: draft.account.statusObservedAt,
|
|
974
|
+
revision: operation.revision + 1, updateId,
|
|
975
|
+
};
|
|
976
|
+
assertStoredAuthorityOperation(completed);
|
|
977
|
+
await this.persistAccount(session, accountStored, draft.account);
|
|
978
|
+
await this.persistGrant(session, grantStored, draft.grant);
|
|
979
|
+
const transitioned = await AuthSwitchAuthorityOperationModel.exact.transition({
|
|
980
|
+
current: operationStored, change: model => Object.assign(model, completed),
|
|
981
|
+
}, { session });
|
|
982
|
+
if (transitioned.status !== 'transitioned')
|
|
983
|
+
throw new Error('Device operation changed concurrently.');
|
|
984
|
+
await this.appendEvent(session, AuthSwitchAuthorityMetaModel.exact.toPersisted(metaStored), updateId, 'account', accountId);
|
|
985
|
+
return { ...draft, operation: completed };
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
catch (error) {
|
|
989
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
990
|
+
throw error;
|
|
991
|
+
const [event, operation, pair] = await Promise.all([
|
|
992
|
+
AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId }),
|
|
993
|
+
this.readOperation(operationId), this.readAccountAndPrimaryGrant(accountId),
|
|
994
|
+
]);
|
|
995
|
+
if (event && operation?.kind !== 'preuse_openai' && operation?.state === 'complete' && operation.updateId === updateId
|
|
996
|
+
&& pair.account?.updateId === updateId && pair.grant?.updateId === updateId
|
|
997
|
+
&& operation.result?.accountId === accountId && operation.result.grantId === grantId) {
|
|
998
|
+
return { account: pair.account, grant: pair.grant, operation };
|
|
999
|
+
}
|
|
1000
|
+
throw new Error('Device login commit outcome is unknown; inspect the durable operation before retrying.');
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
376
1003
|
/** Grant transition and public account revision share a transaction and one event. */
|
|
377
1004
|
async changeGrant(updateId, grantId, change) {
|
|
378
1005
|
try {
|
|
@@ -390,6 +1017,11 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
390
1017
|
if (draft.id !== grantId || draft.accountId !== account.id || draft.updateId !== updateId) {
|
|
391
1018
|
throw new Error('Grant change has an invalid identity.');
|
|
392
1019
|
}
|
|
1020
|
+
if (grant.purpose === 'claude_host_native' && draft.state === 'exchange_may_have_been_sent'
|
|
1021
|
+
&& grant.state !== 'exchange_may_have_been_sent'
|
|
1022
|
+
&& !(await this.hasVerifiedClaudeGrantReceipt(account.id, grant.id, session))) {
|
|
1023
|
+
throw new Error('Claude refresh requires a verified import receipt.');
|
|
1024
|
+
}
|
|
393
1025
|
const accountDraft = { ...account, revision: account.revision + 1,
|
|
394
1026
|
statusObservedAt: draft.statusObservedAt, updateId };
|
|
395
1027
|
await this.persistGrant(session, grantStored, draft);
|
|
@@ -399,7 +1031,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
399
1031
|
});
|
|
400
1032
|
}
|
|
401
1033
|
catch (error) {
|
|
402
|
-
if (!(error instanceof plugins.
|
|
1034
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
403
1035
|
throw error;
|
|
404
1036
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
405
1037
|
const grant = await this.readGrant(grantId);
|
|
@@ -435,7 +1067,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
435
1067
|
});
|
|
436
1068
|
}
|
|
437
1069
|
catch (error) {
|
|
438
|
-
if (!(error instanceof plugins.
|
|
1070
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
439
1071
|
throw error;
|
|
440
1072
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
441
1073
|
const account = await this.readAccount(accountId);
|
|
@@ -478,6 +1110,9 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
478
1110
|
if (grant.state === 'exchange_may_have_been_sent') {
|
|
479
1111
|
throw new Error('Wait for the account refresh to finish before removing it.');
|
|
480
1112
|
}
|
|
1113
|
+
if (['handoff_pending', 'handoff_quarantined'].includes(grant.state)) {
|
|
1114
|
+
throw new Error('Resolve the Claude native handoff before removing this account.');
|
|
1115
|
+
}
|
|
481
1116
|
});
|
|
482
1117
|
await scan(async (grant, stored) => {
|
|
483
1118
|
if (grant.state === 'removed')
|
|
@@ -529,7 +1164,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
529
1164
|
});
|
|
530
1165
|
}
|
|
531
1166
|
catch (error) {
|
|
532
|
-
if (!(error instanceof plugins.
|
|
1167
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
533
1168
|
throw error;
|
|
534
1169
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
535
1170
|
const account = await this.readAccount(accountId);
|
|
@@ -557,7 +1192,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
557
1192
|
});
|
|
558
1193
|
}
|
|
559
1194
|
catch (error) {
|
|
560
|
-
if (!(error instanceof plugins.
|
|
1195
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
561
1196
|
throw error;
|
|
562
1197
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
563
1198
|
const account = await this.readAccount(accountId);
|
|
@@ -566,7 +1201,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
566
1201
|
throw new Error('Authswitch account write outcome is unknown; no external exchange may start.');
|
|
567
1202
|
}
|
|
568
1203
|
}
|
|
569
|
-
async changeBinding(updateId, bindingId, accountId, change) {
|
|
1204
|
+
async changeBinding(updateId, bindingId, accountId, grantId, change) {
|
|
570
1205
|
try {
|
|
571
1206
|
return await this.transaction(async (session) => {
|
|
572
1207
|
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
@@ -574,15 +1209,15 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
574
1209
|
if (!metaStored || !accountStored)
|
|
575
1210
|
throw new Error('Account is not available for this runtime.');
|
|
576
1211
|
const account = AuthSwitchAuthorityAccountModel.exact.toPersisted(accountStored);
|
|
577
|
-
const grantStored =
|
|
578
|
-
? await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: account.primaryGrantId }, { session }) : null;
|
|
1212
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: grantId }, { session });
|
|
579
1213
|
const grant = grantStored ? AuthSwitchAuthorityGrantModel.exact.toPersisted(grantStored) : null;
|
|
580
1214
|
const current = await AuthSwitchAuthorityBindingModel.exact.findStoredOne({ id: bindingId }, { session });
|
|
581
1215
|
const draft = change(current ? structuredClone(AuthSwitchAuthorityBindingModel.exact.toPersisted(current)) : null, account, grant);
|
|
582
1216
|
if (draft.id !== bindingId || draft.accountId !== accountId || draft.updateId !== updateId)
|
|
583
1217
|
throw new Error('Binding change has an invalid identity.');
|
|
584
|
-
if (draft.grantId !== grant?.
|
|
585
|
-
throw new Error('Binding
|
|
1218
|
+
if (draft.grantId !== grantId || grant?.accountId !== accountId) {
|
|
1219
|
+
throw new Error('Binding login does not belong to the account.');
|
|
1220
|
+
}
|
|
586
1221
|
if (current && (draft.runtime !== current.runtime || draft.scopeId !== current.scopeId)) {
|
|
587
1222
|
throw new Error('Runtime binding identity cannot change.');
|
|
588
1223
|
}
|
|
@@ -604,7 +1239,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
604
1239
|
});
|
|
605
1240
|
}
|
|
606
1241
|
catch (error) {
|
|
607
|
-
if (!(error instanceof plugins.
|
|
1242
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
608
1243
|
throw error;
|
|
609
1244
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
610
1245
|
const binding = await this.readBinding(bindingId);
|
|
@@ -613,15 +1248,15 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
613
1248
|
throw new Error('Authswitch binding write outcome is unknown.');
|
|
614
1249
|
}
|
|
615
1250
|
}
|
|
616
|
-
|
|
617
|
-
async revokeBinding(updateId, bindingId, capabilityHash) {
|
|
1251
|
+
async revokeBindingExact(updateId, bindingId, capabilityHash, externalOnly) {
|
|
618
1252
|
try {
|
|
619
1253
|
return await this.transaction(async (session) => {
|
|
620
1254
|
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
621
1255
|
if (!metaStored)
|
|
622
1256
|
throw new Error('Authswitch authority metadata is missing.');
|
|
623
1257
|
const current = await AuthSwitchAuthorityBindingModel.exact.findStoredOne({ id: bindingId }, { session });
|
|
624
|
-
if (!current || current.capabilityHash !== capabilityHash
|
|
1258
|
+
if (!current || current.capabilityHash !== capabilityHash
|
|
1259
|
+
|| (externalOnly && !['flex', 'opencode'].includes(current.runtime)))
|
|
625
1260
|
return false;
|
|
626
1261
|
const result = await AuthSwitchAuthorityBindingModel.exact.delete({ current }, { session });
|
|
627
1262
|
if (result.status !== 'deleted')
|
|
@@ -631,14 +1266,25 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
631
1266
|
});
|
|
632
1267
|
}
|
|
633
1268
|
catch (error) {
|
|
634
|
-
if (!(error instanceof plugins.
|
|
1269
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
635
1270
|
throw error;
|
|
636
1271
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
637
|
-
|
|
1272
|
+
const binding = await this.readBinding(bindingId);
|
|
1273
|
+
// Every bind mints a fresh random capability. An event plus absence or a different
|
|
1274
|
+
// capability therefore proves that this exact deletion committed before any successor.
|
|
1275
|
+
if (event && (!binding || binding.capabilityHash !== capabilityHash))
|
|
638
1276
|
return true;
|
|
639
1277
|
throw new Error('Authswitch binding revocation outcome is unknown.');
|
|
640
1278
|
}
|
|
641
1279
|
}
|
|
1280
|
+
/** Closing an authority-owned runtime revokes its exact capability after owned cleanup. */
|
|
1281
|
+
revokeBinding(updateId, bindingId, capabilityHash) {
|
|
1282
|
+
return this.revokeBindingExact(updateId, bindingId, capabilityHash, false);
|
|
1283
|
+
}
|
|
1284
|
+
/** External callers can release only Flex/OpenCode bindings; managed Codex cleanup stays daemon-owned. */
|
|
1285
|
+
releaseExternalBinding(updateId, bindingId, capabilityHash) {
|
|
1286
|
+
return this.revokeBindingExact(updateId, bindingId, capabilityHash, true);
|
|
1287
|
+
}
|
|
642
1288
|
/** Enrollment metadata is sealed by the caller and cannot become detached from an account. */
|
|
643
1289
|
async changeEnrollment(updateId, enrollmentId, accountId, change) {
|
|
644
1290
|
try {
|
|
@@ -670,7 +1316,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
670
1316
|
});
|
|
671
1317
|
}
|
|
672
1318
|
catch (error) {
|
|
673
|
-
if (!(error instanceof plugins.
|
|
1319
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
674
1320
|
throw error;
|
|
675
1321
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
676
1322
|
const enrollment = await this.readEnrollment(enrollmentId);
|
|
@@ -755,7 +1401,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
755
1401
|
});
|
|
756
1402
|
}
|
|
757
1403
|
catch (error) {
|
|
758
|
-
if (!(error instanceof plugins.
|
|
1404
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
759
1405
|
throw error;
|
|
760
1406
|
const event = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: updateId });
|
|
761
1407
|
const handoff = await this.readHandoff(handoffId);
|
|
@@ -765,7 +1411,325 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
765
1411
|
throw new Error('Authswitch handoff write outcome is unknown; native ownership remains blocked.');
|
|
766
1412
|
}
|
|
767
1413
|
}
|
|
768
|
-
|
|
1414
|
+
async readClaudeHome(homeId) {
|
|
1415
|
+
this.db();
|
|
1416
|
+
if (!/^[a-f0-9]{64}$/.test(homeId))
|
|
1417
|
+
throw new Error('Invalid Claude home selector.');
|
|
1418
|
+
const stored = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({ id: homeId });
|
|
1419
|
+
return stored ? AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(stored) : null;
|
|
1420
|
+
}
|
|
1421
|
+
async readClaudeHandoff(operationId) {
|
|
1422
|
+
this.db();
|
|
1423
|
+
if (!/^[a-f0-9-]{36}$/.test(operationId))
|
|
1424
|
+
throw new Error('Invalid Claude handoff selector.');
|
|
1425
|
+
const stored = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStoredOne({ id: operationId });
|
|
1426
|
+
return stored ? AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(stored) : null;
|
|
1427
|
+
}
|
|
1428
|
+
/** A verified backend import receipt, not an account snapshot, authorizes an inactive Claude grant. */
|
|
1429
|
+
async hasVerifiedClaudeGrantReceipt(accountId, grantId, session) {
|
|
1430
|
+
this.db();
|
|
1431
|
+
if (!/^[a-f0-9]{64}$/.test(accountId) || !/^[a-f0-9]{64}$/.test(grantId)) {
|
|
1432
|
+
throw new Error('Invalid Claude grant receipt selector.');
|
|
1433
|
+
}
|
|
1434
|
+
for (const status of ['verified', 'complete']) {
|
|
1435
|
+
const stored = await AuthSwitchAuthorityMigrationLedgerModel.exact.findStored({
|
|
1436
|
+
filter: { grantId, status }, sort: { id: 1 }, limit: 128, session,
|
|
1437
|
+
});
|
|
1438
|
+
if (stored.some(item => item.accountId === accountId
|
|
1439
|
+
&& ['authswitch_stash', 'authswitch_backup', 'claude_native'].includes(item.sourceKind)))
|
|
1440
|
+
return true;
|
|
1441
|
+
if (stored.length === 128)
|
|
1442
|
+
throw new Error('Claude grant has too many migration receipts to verify.');
|
|
1443
|
+
}
|
|
1444
|
+
return false;
|
|
1445
|
+
}
|
|
1446
|
+
async claudeHandoffsByPhase(phase, after) {
|
|
1447
|
+
this.db();
|
|
1448
|
+
if (!['reserved', 'prepared', 'quarantined'].includes(phase)
|
|
1449
|
+
|| (after !== null && !/^[a-f0-9-]{36}$/.test(after)))
|
|
1450
|
+
throw new Error('Invalid Claude handoff scan.');
|
|
1451
|
+
const stored = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStored({
|
|
1452
|
+
filter: after === null ? { phase } : { phase, id: { $gt: after } },
|
|
1453
|
+
sort: { id: 1 }, limit: 128,
|
|
1454
|
+
});
|
|
1455
|
+
return stored.map(item => AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(item));
|
|
1456
|
+
}
|
|
1457
|
+
async claudeHandoffsPage(after, limit = 128) {
|
|
1458
|
+
this.db();
|
|
1459
|
+
if ((after !== null && !/^[a-f0-9-]{36}$/.test(after))
|
|
1460
|
+
|| !Number.isSafeInteger(limit) || limit < 1 || limit > 256)
|
|
1461
|
+
throw new Error('Invalid Claude handoff page.');
|
|
1462
|
+
const stored = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStored({
|
|
1463
|
+
filter: after === null ? {} : { id: { $gt: after } }, sort: { id: 1 }, limit: limit + 1,
|
|
1464
|
+
});
|
|
1465
|
+
const handoffs = stored.slice(0, limit).map(item => AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(item));
|
|
1466
|
+
return { handoffs, nextCursor: stored.length > limit ? handoffs.at(-1).id : null };
|
|
1467
|
+
}
|
|
1468
|
+
/** Only a verified backend import receipt may adopt a native home. No startup autodiscovery exists. */
|
|
1469
|
+
async registerClaudeHomeFromReceipt(input) {
|
|
1470
|
+
const { homeId, accountId, grantId, receiptId, sourceDigest, updateId } = input;
|
|
1471
|
+
for (const value of [homeId, accountId, grantId, receiptId, sourceDigest]) {
|
|
1472
|
+
if (!/^[a-f0-9]{64}$/.test(value))
|
|
1473
|
+
throw new Error('Invalid verified Claude home identity.');
|
|
1474
|
+
}
|
|
1475
|
+
if (!/^[a-f0-9-]{36}$/.test(updateId))
|
|
1476
|
+
throw new Error('Invalid Claude home update identity.');
|
|
1477
|
+
try {
|
|
1478
|
+
return await this.transaction(async (session) => {
|
|
1479
|
+
const receiptStored = await AuthSwitchAuthorityMigrationLedgerModel.exact.findStoredOne({ id: receiptId }, { session });
|
|
1480
|
+
const accountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: accountId }, { session });
|
|
1481
|
+
const grantStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: grantId }, { session });
|
|
1482
|
+
const current = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({ id: homeId }, { session });
|
|
1483
|
+
if (!receiptStored || !['verified', 'complete'].includes(receiptStored.status)
|
|
1484
|
+
|| receiptStored.sourceKind !== 'claude_native' || receiptStored.sourcePathHash !== homeId
|
|
1485
|
+
|| receiptStored.sourceDigest !== sourceDigest || receiptStored.accountId !== accountId
|
|
1486
|
+
|| receiptStored.grantId !== grantId || !accountStored || accountStored.removed
|
|
1487
|
+
|| accountStored.providerId !== 'anthropic' || accountStored.subject !== input.accountUuid
|
|
1488
|
+
|| accountStored.workspaceId !== input.organizationUuid || !grantStored
|
|
1489
|
+
|| grantStored.accountId !== accountId || grantStored.purpose !== 'claude_host_native'
|
|
1490
|
+
|| grantStored.owner !== 'claude_native' || grantStored.state !== 'native'
|
|
1491
|
+
|| grantStored.ciphertext !== null) {
|
|
1492
|
+
throw new Error('Verified Claude native source mapping is unavailable.');
|
|
1493
|
+
}
|
|
1494
|
+
if (current) {
|
|
1495
|
+
if (current.activeAccountId !== accountId || current.activeGrantId !== grantId) {
|
|
1496
|
+
throw new Error('Claude native home belongs to another grant.');
|
|
1497
|
+
}
|
|
1498
|
+
return AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(current);
|
|
1499
|
+
}
|
|
1500
|
+
const home = { id: homeId, activeAccountId: accountId,
|
|
1501
|
+
activeGrantId: grantId, pendingOperationId: null, status: 'ready', revision: 1,
|
|
1502
|
+
createdAt: input.now, updateId };
|
|
1503
|
+
assertStoredAuthorityClaudeHome(home);
|
|
1504
|
+
const inserted = await AuthSwitchAuthorityClaudeHomeModel.exact.insert(home, { session });
|
|
1505
|
+
if (inserted.status !== 'inserted')
|
|
1506
|
+
throw new Error('Claude native home changed concurrently.');
|
|
1507
|
+
return home;
|
|
1508
|
+
});
|
|
1509
|
+
}
|
|
1510
|
+
catch (error) {
|
|
1511
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError)
|
|
1512
|
+
|| !['ambiguous_write', 'unique_conflict'].includes(error.code))
|
|
1513
|
+
throw error;
|
|
1514
|
+
const home = await this.readClaudeHome(homeId);
|
|
1515
|
+
if (home?.updateId === updateId && home.activeAccountId === accountId && home.activeGrantId === grantId)
|
|
1516
|
+
return home;
|
|
1517
|
+
throw new Error('Claude native home registration outcome is unknown.');
|
|
1518
|
+
}
|
|
1519
|
+
}
|
|
1520
|
+
async readClaudeHandoffContext(operationId) {
|
|
1521
|
+
if (!/^[a-f0-9-]{36}$/.test(operationId))
|
|
1522
|
+
throw new Error('Invalid Claude handoff selector.');
|
|
1523
|
+
return this.transaction(async (session) => {
|
|
1524
|
+
const stored = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStoredOne({ id: operationId }, { session });
|
|
1525
|
+
if (!stored)
|
|
1526
|
+
return null;
|
|
1527
|
+
const handoff = AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(stored);
|
|
1528
|
+
const homeStored = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({ id: handoff.homeId }, { session });
|
|
1529
|
+
const outgoingStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: handoff.outgoingGrantId }, { session });
|
|
1530
|
+
const incomingStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: handoff.incomingGrantId }, { session });
|
|
1531
|
+
const outgoingAccountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: handoff.outgoingAccountId }, { session });
|
|
1532
|
+
const incomingAccountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: handoff.incomingAccountId }, { session });
|
|
1533
|
+
if (!homeStored || !outgoingStored || !incomingStored || !outgoingAccountStored || !incomingAccountStored) {
|
|
1534
|
+
throw new Error('Claude handoff references a missing authority record.');
|
|
1535
|
+
}
|
|
1536
|
+
return { handoff,
|
|
1537
|
+
home: AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(homeStored),
|
|
1538
|
+
outgoing: AuthSwitchAuthorityGrantModel.exact.toPersisted(outgoingStored),
|
|
1539
|
+
incoming: AuthSwitchAuthorityGrantModel.exact.toPersisted(incomingStored),
|
|
1540
|
+
outgoingAccount: AuthSwitchAuthorityAccountModel.exact.toPersisted(outgoingAccountStored),
|
|
1541
|
+
incomingAccount: AuthSwitchAuthorityAccountModel.exact.toPersisted(incomingAccountStored) };
|
|
1542
|
+
});
|
|
1543
|
+
}
|
|
1544
|
+
/** One phase advances both grants, home, journal and both account events atomically. */
|
|
1545
|
+
async changeClaudeHandoff(input) {
|
|
1546
|
+
const { operationId, homeId, incomingGrantId, updateId, eventIds } = input;
|
|
1547
|
+
if (!/^[a-f0-9-]{36}$/.test(operationId) || !/^[a-f0-9]{64}$/.test(homeId)
|
|
1548
|
+
|| !/^[a-f0-9]{64}$/.test(incomingGrantId)
|
|
1549
|
+
|| ![updateId, ...eventIds].every(value => /^[a-f0-9-]{36}$/.test(value))
|
|
1550
|
+
|| new Set([updateId, ...eventIds]).size !== 3)
|
|
1551
|
+
throw new Error('Invalid Claude handoff identity.');
|
|
1552
|
+
let expectedPhase = null;
|
|
1553
|
+
try {
|
|
1554
|
+
return await this.transaction(async (session) => {
|
|
1555
|
+
const metaStored = await AuthSwitchAuthorityMetaModel.exact.findStoredOne({ id: 'authswitch-authority' }, { session });
|
|
1556
|
+
const homeStored = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({ id: homeId }, { session });
|
|
1557
|
+
const handoffStored = await AuthSwitchAuthorityClaudeHandoffModel.exact.findStoredOne({ id: operationId }, { session });
|
|
1558
|
+
if (!metaStored || !homeStored)
|
|
1559
|
+
throw new Error('Verified Claude home is unavailable.');
|
|
1560
|
+
const home = AuthSwitchAuthorityClaudeHomeModel.exact.toPersisted(homeStored);
|
|
1561
|
+
const handoff = handoffStored ? AuthSwitchAuthorityClaudeHandoffModel.exact.toPersisted(handoffStored) : null;
|
|
1562
|
+
if (home.status !== 'ready' || (handoff === null ? home.pendingOperationId !== null
|
|
1563
|
+
: home.pendingOperationId !== operationId || handoff.homeId !== homeId
|
|
1564
|
+
|| handoff.incomingGrantId !== incomingGrantId)) {
|
|
1565
|
+
throw new Error('Claude home has another pending or quarantined operation.');
|
|
1566
|
+
}
|
|
1567
|
+
const outgoingId = handoff?.outgoingGrantId ?? home.activeGrantId;
|
|
1568
|
+
if (outgoingId === incomingGrantId)
|
|
1569
|
+
throw new Error('Claude home already owns the selected grant.');
|
|
1570
|
+
const outgoingStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: outgoingId }, { session });
|
|
1571
|
+
const incomingStored = await AuthSwitchAuthorityGrantModel.exact.findStoredOne({ id: incomingGrantId }, { session });
|
|
1572
|
+
if (!outgoingStored || !incomingStored)
|
|
1573
|
+
throw new Error('Claude handoff grant is unavailable.');
|
|
1574
|
+
const outgoing = AuthSwitchAuthorityGrantModel.exact.toPersisted(outgoingStored);
|
|
1575
|
+
const incoming = AuthSwitchAuthorityGrantModel.exact.toPersisted(incomingStored);
|
|
1576
|
+
const incomingHome = await AuthSwitchAuthorityClaudeHomeModel.exact.findStoredOne({
|
|
1577
|
+
activeGrantId: incomingGrantId,
|
|
1578
|
+
}, { session });
|
|
1579
|
+
if (incomingHome && incomingHome.id !== homeId) {
|
|
1580
|
+
throw new Error('Claude grant is already active in another native home.');
|
|
1581
|
+
}
|
|
1582
|
+
const outgoingAccountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: outgoing.accountId }, { session });
|
|
1583
|
+
const incomingAccountStored = await AuthSwitchAuthorityAccountModel.exact.findStoredOne({ id: incoming.accountId }, { session });
|
|
1584
|
+
if (!outgoingAccountStored || !incomingAccountStored || outgoingAccountStored.removed || incomingAccountStored.removed
|
|
1585
|
+
|| outgoing.accountId === incoming.accountId || outgoing.providerId !== 'anthropic'
|
|
1586
|
+
|| incoming.providerId !== 'anthropic' || outgoing.purpose !== 'claude_host_native'
|
|
1587
|
+
|| incoming.purpose !== 'claude_host_native' || home.activeGrantId !== outgoing.id
|
|
1588
|
+
|| home.activeAccountId !== outgoing.accountId)
|
|
1589
|
+
throw new Error('Claude handoff account identity is invalid.');
|
|
1590
|
+
const outgoingAccount = AuthSwitchAuthorityAccountModel.exact.toPersisted(outgoingAccountStored);
|
|
1591
|
+
const incomingAccount = AuthSwitchAuthorityAccountModel.exact.toPersisted(incomingAccountStored);
|
|
1592
|
+
const draft = input.change({ home: structuredClone(home), handoff: handoff ? structuredClone(handoff) : null,
|
|
1593
|
+
outgoing: structuredClone(outgoing), incoming: structuredClone(incoming),
|
|
1594
|
+
outgoingAccount: structuredClone(outgoingAccount), incomingAccount: structuredClone(incomingAccount) });
|
|
1595
|
+
expectedPhase = draft.handoff.phase;
|
|
1596
|
+
assertStoredAuthorityClaudeHome(draft.home);
|
|
1597
|
+
assertStoredAuthorityClaudeHandoff(draft.handoff);
|
|
1598
|
+
if (draft.home.id !== homeId || draft.home.createdAt !== home.createdAt
|
|
1599
|
+
|| draft.home.revision !== home.revision + 1 || draft.home.updateId !== updateId
|
|
1600
|
+
|| draft.handoff.id !== operationId || draft.handoff.homeId !== homeId
|
|
1601
|
+
|| draft.handoff.outgoingAccountId !== outgoing.accountId || draft.handoff.outgoingGrantId !== outgoing.id
|
|
1602
|
+
|| draft.handoff.incomingAccountId !== incoming.accountId || draft.handoff.incomingGrantId !== incoming.id
|
|
1603
|
+
|| draft.handoff.sourceIdentity.accountUuid !== outgoingAccount.subject
|
|
1604
|
+
|| draft.handoff.sourceIdentity.organizationUuid !== outgoingAccount.workspaceId
|
|
1605
|
+
|| draft.handoff.targetIdentity.accountUuid !== incomingAccount.subject
|
|
1606
|
+
|| draft.handoff.targetIdentity.organizationUuid !== incomingAccount.workspaceId
|
|
1607
|
+
|| draft.handoff.revision !== (handoff?.revision ?? 0) + 1 || draft.handoff.updateId !== updateId
|
|
1608
|
+
|| draft.outgoing.id !== outgoing.id || draft.incoming.id !== incoming.id
|
|
1609
|
+
|| draft.outgoing.accountId !== outgoing.accountId || draft.incoming.accountId !== incoming.accountId
|
|
1610
|
+
|| draft.outgoing.updateId !== updateId || draft.incoming.updateId !== updateId
|
|
1611
|
+
|| draft.outgoing.revision !== outgoing.revision + 1 || draft.incoming.revision !== incoming.revision + 1) {
|
|
1612
|
+
throw new Error('Claude handoff changed an immutable identity or revision.');
|
|
1613
|
+
}
|
|
1614
|
+
if (handoff && (draft.handoff.startedAt !== handoff.startedAt
|
|
1615
|
+
|| JSON.stringify(draft.handoff.sourceIdentity) !== JSON.stringify(handoff.sourceIdentity)
|
|
1616
|
+
|| JSON.stringify(draft.handoff.targetIdentity) !== JSON.stringify(handoff.targetIdentity)
|
|
1617
|
+
|| (handoff.phase !== 'reserved' && (JSON.stringify(draft.handoff.before) !== JSON.stringify(handoff.before)
|
|
1618
|
+
|| JSON.stringify(draft.handoff.after) !== JSON.stringify(handoff.after)
|
|
1619
|
+
|| draft.handoff.sourceAccessDigest !== handoff.sourceAccessDigest
|
|
1620
|
+
|| draft.handoff.targetAccessDigest !== handoff.targetAccessDigest)))) {
|
|
1621
|
+
throw new Error('Claude handoff proof or identity changed.');
|
|
1622
|
+
}
|
|
1623
|
+
if (!handoff) {
|
|
1624
|
+
let verifiedIncoming = false;
|
|
1625
|
+
for (const status of ['verified', 'complete']) {
|
|
1626
|
+
const receipts = await AuthSwitchAuthorityMigrationLedgerModel.exact.findStored({
|
|
1627
|
+
filter: { grantId: incoming.id, status }, sort: { id: 1 }, limit: 128, session,
|
|
1628
|
+
});
|
|
1629
|
+
if (receipts.length === 128)
|
|
1630
|
+
throw new Error('Claude grant receipt set is unbounded.');
|
|
1631
|
+
verifiedIncoming ||= receipts.some(item => item.accountId === incoming.accountId
|
|
1632
|
+
&& ['authswitch_stash', 'authswitch_backup', 'claude_native'].includes(item.sourceKind));
|
|
1633
|
+
}
|
|
1634
|
+
if (draft.handoff.phase !== 'reserved' || home.pendingOperationId !== null
|
|
1635
|
+
|| !verifiedIncoming
|
|
1636
|
+
|| outgoing.state !== 'native' || outgoing.owner !== 'claude_native' || outgoing.ciphertext !== null
|
|
1637
|
+
|| incoming.state !== 'ready' || incoming.owner !== 'daemon' || incoming.ciphertext === null
|
|
1638
|
+
|| draft.home.activeGrantId !== outgoing.id || draft.home.pendingOperationId !== operationId
|
|
1639
|
+
|| draft.home.status !== 'ready' || draft.outgoing.state !== 'native'
|
|
1640
|
+
|| draft.outgoing.owner !== 'claude_native' || draft.outgoing.ciphertext !== null
|
|
1641
|
+
|| draft.incoming.state !== 'handoff_pending' || draft.incoming.owner !== 'daemon'
|
|
1642
|
+
|| draft.incoming.ciphertext !== incoming.ciphertext)
|
|
1643
|
+
throw new Error('Claude handoff reservation is invalid.');
|
|
1644
|
+
}
|
|
1645
|
+
else if (handoff.phase === 'reserved' && draft.handoff.phase === 'prepared') {
|
|
1646
|
+
if (outgoing.state !== 'native' || incoming.state !== 'handoff_pending'
|
|
1647
|
+
|| draft.outgoing.state !== 'handoff_pending' || draft.outgoing.owner !== 'claude_native'
|
|
1648
|
+
|| draft.outgoing.ciphertext !== null || draft.incoming.state !== 'handoff_pending'
|
|
1649
|
+
|| draft.incoming.owner !== 'daemon' || draft.incoming.ciphertext !== incoming.ciphertext
|
|
1650
|
+
|| draft.home.activeGrantId !== outgoing.id || draft.home.pendingOperationId !== operationId
|
|
1651
|
+
|| draft.home.status !== 'ready')
|
|
1652
|
+
throw new Error('Claude handoff preparation is invalid.');
|
|
1653
|
+
}
|
|
1654
|
+
else if (handoff.phase === 'prepared' && draft.handoff.phase === 'committed') {
|
|
1655
|
+
if (outgoing.state !== 'handoff_pending' || incoming.state !== 'handoff_pending'
|
|
1656
|
+
|| draft.outgoing.state !== 'ready' || draft.outgoing.owner !== 'daemon'
|
|
1657
|
+
|| draft.outgoing.ciphertext !== handoff.sealedOutgoing
|
|
1658
|
+
|| draft.incoming.state !== 'native' || draft.incoming.owner !== 'claude_native'
|
|
1659
|
+
|| draft.incoming.ciphertext !== null || draft.home.activeAccountId !== incoming.accountId
|
|
1660
|
+
|| draft.home.activeGrantId !== incoming.id || draft.home.pendingOperationId !== null
|
|
1661
|
+
|| draft.home.status !== 'ready' || draft.handoff.sealedOutgoing !== null) {
|
|
1662
|
+
throw new Error('Claude handoff completion is invalid.');
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
else if (['reserved', 'prepared'].includes(handoff.phase)
|
|
1666
|
+
&& draft.handoff.phase === 'aborted') {
|
|
1667
|
+
if (incoming.state !== 'handoff_pending' || draft.incoming.state !== 'ready'
|
|
1668
|
+
|| draft.incoming.owner !== 'daemon' || draft.incoming.ciphertext !== incoming.ciphertext
|
|
1669
|
+
|| draft.outgoing.state !== 'native' || draft.outgoing.owner !== 'claude_native'
|
|
1670
|
+
|| draft.outgoing.ciphertext !== null || draft.home.activeGrantId !== outgoing.id
|
|
1671
|
+
|| draft.home.pendingOperationId !== null || draft.home.status !== 'ready'
|
|
1672
|
+
|| draft.handoff.sealedOutgoing !== null)
|
|
1673
|
+
throw new Error('Claude handoff abort is invalid.');
|
|
1674
|
+
}
|
|
1675
|
+
else if (['reserved', 'prepared'].includes(handoff.phase)
|
|
1676
|
+
&& draft.handoff.phase === 'quarantined') {
|
|
1677
|
+
if (draft.outgoing.state !== 'handoff_quarantined' || draft.outgoing.owner !== 'claude_native'
|
|
1678
|
+
|| draft.incoming.state !== 'handoff_quarantined' || draft.incoming.owner !== 'daemon'
|
|
1679
|
+
|| draft.home.activeGrantId !== outgoing.id || draft.home.pendingOperationId !== operationId
|
|
1680
|
+
|| draft.home.status !== 'quarantined' || draft.handoff.problem === 'none') {
|
|
1681
|
+
throw new Error('Claude handoff quarantine is invalid.');
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
else
|
|
1685
|
+
throw new Error('Claude handoff phase transition is invalid.');
|
|
1686
|
+
await this.persistGrant(session, outgoingStored, draft.outgoing, true);
|
|
1687
|
+
await this.persistGrant(session, incomingStored, draft.incoming, true);
|
|
1688
|
+
const homeResult = await AuthSwitchAuthorityClaudeHomeModel.exact.transition({ current: homeStored,
|
|
1689
|
+
change: model => Object.assign(model, draft.home) }, { session });
|
|
1690
|
+
if (homeResult.status !== 'transitioned')
|
|
1691
|
+
throw new Error('Claude home changed concurrently.');
|
|
1692
|
+
if (handoffStored) {
|
|
1693
|
+
const result = await AuthSwitchAuthorityClaudeHandoffModel.exact.transition({ current: handoffStored,
|
|
1694
|
+
change: model => Object.assign(model, draft.handoff) }, { session });
|
|
1695
|
+
if (result.status !== 'transitioned')
|
|
1696
|
+
throw new Error('Claude handoff changed concurrently.');
|
|
1697
|
+
}
|
|
1698
|
+
else {
|
|
1699
|
+
const result = await AuthSwitchAuthorityClaudeHandoffModel.exact.insert(draft.handoff, { session });
|
|
1700
|
+
if (result.status !== 'inserted')
|
|
1701
|
+
throw new Error('Claude handoff operation already exists.');
|
|
1702
|
+
}
|
|
1703
|
+
const outgoingAccountDraft = { ...outgoingAccount, revision: outgoingAccount.revision + 1,
|
|
1704
|
+
statusObservedAt: draft.handoff.updatedAt, updateId };
|
|
1705
|
+
const incomingAccountDraft = { ...incomingAccount, revision: incomingAccount.revision + 1,
|
|
1706
|
+
statusObservedAt: draft.handoff.updatedAt, updateId };
|
|
1707
|
+
await this.persistAccount(session, outgoingAccountStored, outgoingAccountDraft);
|
|
1708
|
+
await this.persistAccount(session, incomingAccountStored, incomingAccountDraft);
|
|
1709
|
+
const first = await this.appendEvent(session, AuthSwitchAuthorityMetaModel.exact.toPersisted(metaStored), eventIds[0], 'account', outgoing.accountId);
|
|
1710
|
+
await this.appendEvent(session, first, eventIds[1], 'account', incoming.accountId);
|
|
1711
|
+
return draft;
|
|
1712
|
+
});
|
|
1713
|
+
}
|
|
1714
|
+
catch (error) {
|
|
1715
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
1716
|
+
throw error;
|
|
1717
|
+
const context = await this.readClaudeHandoffContext(operationId);
|
|
1718
|
+
const first = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: eventIds[0] });
|
|
1719
|
+
const second = await AuthSwitchAuthorityEventModel.exact.findStoredOne({ id: eventIds[1] });
|
|
1720
|
+
if (context && context.handoff.phase === expectedPhase
|
|
1721
|
+
&& [context.handoff, context.home, context.outgoing, context.incoming,
|
|
1722
|
+
context.outgoingAccount, context.incomingAccount].every(item => item.updateId === updateId)
|
|
1723
|
+
&& first?.accountId === context.outgoing.accountId
|
|
1724
|
+
&& second?.accountId === context.incoming.accountId && first.epoch === second.epoch
|
|
1725
|
+
&& second.revision === first.revision + 1) {
|
|
1726
|
+
return { handoff: context.handoff, home: context.home,
|
|
1727
|
+
outgoing: context.outgoing, incoming: context.incoming };
|
|
1728
|
+
}
|
|
1729
|
+
throw new Error('Claude handoff database outcome is unknown; native ownership remains blocked.');
|
|
1730
|
+
}
|
|
1731
|
+
}
|
|
1732
|
+
/** Ledger transitions never silently replace an active credential or waive the verified import. */
|
|
769
1733
|
async changeMigrationLedger(updateId, ledgerId, change) {
|
|
770
1734
|
try {
|
|
771
1735
|
return await this.transaction(async (session) => {
|
|
@@ -774,8 +1738,12 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
774
1738
|
if (draft.id !== ledgerId || draft.updateId !== updateId)
|
|
775
1739
|
throw new Error('Migration ledger identity is invalid.');
|
|
776
1740
|
assertStoredAuthorityMigrationLedger(draft);
|
|
777
|
-
|
|
778
|
-
|
|
1741
|
+
// A source may only be considered migrated after a verified import bound to an account, a grant and a
|
|
1742
|
+
// source digest. This deliberately tightens a flow that has no production caller and has never run.
|
|
1743
|
+
if (draft.status === 'complete' && (current?.status !== 'verified'
|
|
1744
|
+
|| current.accountId !== draft.accountId || current.grantId !== draft.grantId)) {
|
|
1745
|
+
throw new Error('Migration completion requires a verified import of the same account and grant.');
|
|
1746
|
+
}
|
|
779
1747
|
if (current) {
|
|
780
1748
|
if (current.status === 'complete' || current.version !== draft.version
|
|
781
1749
|
|| current.sourceKind !== draft.sourceKind || current.sourcePathHash !== draft.sourcePathHash
|
|
@@ -799,7 +1767,7 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
799
1767
|
});
|
|
800
1768
|
}
|
|
801
1769
|
catch (error) {
|
|
802
|
-
if (!(error instanceof plugins.
|
|
1770
|
+
if (!(error instanceof plugins.nosqldb.SmartdataExactPersistenceError) || error.code !== 'ambiguous_write')
|
|
803
1771
|
throw error;
|
|
804
1772
|
const ledger = await this.readMigrationLedger(ledgerId);
|
|
805
1773
|
if (ledger?.updateId === updateId)
|
|
@@ -832,4 +1800,4 @@ export class AuthSwitchAuthorityDatabase {
|
|
|
832
1800
|
throw new AggregateError(errors, 'Authswitch database shutdown was incomplete.');
|
|
833
1801
|
}
|
|
834
1802
|
}
|
|
835
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdXRob3JpdHlkYXRhYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYXV0aG9yaXR5ZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLCtCQUErQixFQUFFLCtCQUErQixFQUFFLGlDQUFpQyxFQUFFLGtDQUFrQyxFQUN2SSw2QkFBNkIsRUFBRSw2QkFBNkIsRUFBRSwrQkFBK0IsRUFDN0YsNEJBQTRCLEVBQUUsdUNBQXVDLEVBQUUsNEJBQTRCLEVBQ25HLDRCQUE0QixFQUFFLCtCQUErQixFQUFFLDBCQUEwQixFQUN6Riw0QkFBNEIsRUFBRSxvQ0FBb0MsR0FJbkUsTUFBTSw4QkFBOEIsQ0FBQztBQVV0QywwR0FBMEc7QUFDMUcsTUFBTSxPQUFPLDJCQUEyQjtJQUtUO0lBSnJCLE1BQU0sQ0FBZ0M7SUFDdEMsUUFBUSxDQUFpQztJQUN6QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXhCLFlBQTZCLE9BQTRDO1FBQTVDLFlBQU8sR0FBUCxPQUFPLENBQXFDO0lBQUcsQ0FBQztJQUVyRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZTtRQUM1QyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekgsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2pJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN4SCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsK0JBQStCO2dCQUNoRiw2QkFBNkIsRUFBRSwrQkFBK0IsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0M7Z0JBQ3JJLCtCQUErQixFQUFFLHVDQUF1QyxFQUFFLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztnQkFDM0csT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLEVBQUUsK0JBQStCLENBQUMsSUFBSSxFQUFFO2dCQUM1Riw2QkFBNkIsQ0FBQyxJQUFJLEVBQUUsRUFBRSwrQkFBK0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RILGtDQUFrQyxDQUFDLElBQUksRUFBRSxFQUFFLCtCQUErQixDQUFDLElBQUksRUFBRTtnQkFDakYsdUNBQXVDLENBQUMsSUFBSSxFQUFFLEVBQUUsNkJBQTZCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUM5Ryw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsK0JBQStCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pKLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFO2dCQUNuRyx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsNkJBQTZCLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRyxNQUFNLE9BQU8sR0FBeUI7Z0JBQ3BDLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDM0UsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2FBQ3RDLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDckksSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUM7Z0JBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFBQyxDQUFDO1lBQUMsTUFBTSxDQUFDLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUMvRSxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRU8sRUFBRTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDNUYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFVLFFBQWlEO1FBQ2xGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsSUFBSSxNQUFNLEtBQUssU0FBUztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDN0YsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztnQkFBUyxDQUFDO1lBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUNuQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFVO1FBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFVO1FBQ2pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRixDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFVO1FBQ25DLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRixDQUFDO0lBRUQsZ0dBQWdHO0lBQ3pGLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLE9BQWUsRUFBRSxNQUFjLEVBQzlFLFFBQWdCO1FBQ2hCLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEgsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hHLE1BQU0sV0FBVyxHQUFHLE9BQU8sRUFBRSxjQUFjO29CQUN6QyxDQUFDLENBQUMsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDaEgsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLFFBQVE7dUJBQzFGLEtBQUssQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO2dCQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7b0JBQ3JGLENBQUM7b0JBQ0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBOEIsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUk7b0JBQ3pGLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUNwRyxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QjttQkFDaEUsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUM1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0YsSUFBSSxRQUFRLEVBQUUsU0FBUyxLQUFLLFNBQVMsSUFBSSxRQUFRLENBQUMsT0FBTyxLQUFLLE9BQU87dUJBQ2hFLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUTtvQkFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7WUFDcEcsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxnSEFBZ0g7SUFDekcsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjLEVBQUUsYUFBNEIsRUFDdEUsU0FBaUQsRUFBRSxRQUFnQjtRQUNuRSxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUNyQyxNQUFNLE9BQU8sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztnQkFDRCxJQUFJLFNBQVMsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssYUFBYSxFQUFFLENBQUM7b0JBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztnQkFDRCxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZHLE1BQU0sTUFBTSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU87b0JBQy9FLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ3RHLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDMUgsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7Z0JBQUUsT0FBTztZQUM5RyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRCxvR0FBb0c7SUFDN0YsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQVU7UUFLeEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtZQUN0QyxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckcsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDeEcsTUFBTSxhQUFhLEdBQUcsT0FBTztnQkFDM0IsQ0FBQyxDQUFDLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDN0csTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDeEcsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLE9BQU8sRUFBRSxjQUFjLEtBQUssT0FBTyxDQUFDLE9BQU87Z0JBQ3hFLENBQUMsQ0FBQyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pHLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBVTtRQUMvQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakYsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBVTtRQUNwQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEYsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBVTtRQUNqQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFVO1FBQ3pDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUNBQXVDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDekYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMzRixDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQWlELEVBQ3BGLEtBQW9CLEVBQUUsS0FBSyxHQUFHLEdBQUc7UUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM5RyxNQUFNLE1BQU0sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDNUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUs7U0FDcEYsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsdUNBQXVDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBVTtRQUdoRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1lBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNyRyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RyxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsY0FBYztnQkFDekMsQ0FBQyxDQUFDLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQTJCLEVBQUUsWUFBMkIsRUFBRSxLQUFhO1FBS3ZGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUcsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakgsSUFBSSxDQUFDLElBQUk7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDdEUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU87YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN0RSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTzthQUMzQyxDQUFDLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbEgsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE1BQU0sVUFBVSxHQUFxRixFQUFFLENBQUM7WUFDeEcsS0FBSyxNQUFNLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWM7b0JBQ25DLENBQUMsQ0FBQyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoSCxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxNQUFNO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztnQkFDdEcsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9HLENBQUM7WUFDRCxPQUFPO2dCQUNMLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDMUQsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVztnQkFDM0MsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQzFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQzNFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQXFDLEVBQUUsS0FBb0IsRUFBRSxLQUFLLEdBQUcsR0FBRztRQUNqRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNsRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7WUFDekQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxLQUFvQixFQUFFLEtBQUssR0FBRyxHQUFHO1FBQ2hGLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUcsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRTtZQUNqRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxLQUFLLEdBQUcsR0FBRztRQUNwRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDbEUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSztTQUM3RSxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBaUIsRUFBRSxJQUF1RSxFQUNsSCxRQUFnQixFQUFFLElBQWdCLEVBQUUsU0FBaUI7UUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUM1RyxNQUFNLElBQUksR0FBeUIsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDdEYsTUFBTSxZQUFZLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU07WUFDeEYsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxjQUFjO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sUUFBUSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNoRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTO1NBQzFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBaUIsRUFBRSxPQUF3RixFQUN0SSxLQUE4QjtRQUM5Qiw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6RSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNO21CQUNyRSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsV0FBVzttQkFDMUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDL0UsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQ3RELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUN6RixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBaUIsRUFBRSxPQUFzRixFQUNsSSxLQUE0QjtRQUM1QiwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO21CQUMzRCxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTzttQkFDeEUsS0FBSyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDekYsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQ3RELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN2RixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3BGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUVELGlHQUFpRztJQUMxRixLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLE9BQWUsRUFDckYsTUFFQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2SCxJQUFJLENBQUMsVUFBVTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQzlFLE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FDbEIsYUFBYSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3hHLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO3VCQUNsRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO3VCQUMvRixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsY0FBYyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxXQUFXLElBQUksQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7dUJBQzVFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDckcsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQzFILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUUsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDekQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztRQUN4RyxDQUFDO0lBQ0gsQ0FBQztJQUVELHNGQUFzRjtJQUMvRSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUN4RCxNQUFpRztRQUdqRyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVc7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLEtBQUssR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzRSxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLGFBQWE7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMxRixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsTUFBTSxZQUFZLEdBQTRCLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDeEYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDckcsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDMUgsTUFBTSxLQUFLLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQ3BGLE1BQXdHO1FBR3hHLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2SCxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxPQUFPLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUzt1QkFDMUYsS0FBSyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDO29CQUNqRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUMxSCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUTtnQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZHLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdHQUF3RztJQUNqRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUNyRSxnQkFBd0IsRUFBRSxnQkFBd0I7UUFDbEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQzFHLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsS0FDa0csRUFBRSxFQUFFO29CQUN4SCxJQUFJLEtBQUssR0FBa0IsSUFBSSxDQUFDO29CQUNoQyxPQUFPLElBQUksRUFBRSxDQUFDO3dCQUNaLE1BQU0sSUFBSSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs0QkFDaEUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFOzRCQUNqRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPO3lCQUNyQyxDQUFDLENBQUM7d0JBQ0gsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJOzRCQUFFLE1BQU0sS0FBSyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ3hHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHOzRCQUFFLE1BQU07d0JBQzdCLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUU7b0JBQ3ZCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO3dCQUFFLE9BQU87b0JBQ3RDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxlQUFlLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO29CQUNsRyxDQUFDO29CQUNELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyw2QkFBNkIsRUFBRSxDQUFDO3dCQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7b0JBQ2hGLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVM7d0JBQUUsT0FBTztvQkFDdEMsTUFBTSxLQUFLLEdBQTBCO3dCQUNuQyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSTt3QkFDbEYsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzlELGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUM7d0JBQzFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO3dCQUMxRCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUTtxQkFDekQsQ0FBQztvQkFDRixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQztnQkFDdkMsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDWixNQUFNLFFBQVEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3RFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRTt3QkFDL0UsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTztxQkFDckMsQ0FBQyxDQUFDO29CQUNILEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7d0JBQ3JHLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTOzRCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztvQkFDdEcsQ0FBQztvQkFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRzt3QkFBRSxNQUFNO29CQUNqQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxJQUFJLGVBQWUsR0FBa0IsSUFBSSxDQUFDO2dCQUMxQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDNUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFO3dCQUNyRixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPO3FCQUNyQyxDQUFDLENBQUM7b0JBQ0gsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzt3QkFDM0csSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVM7NEJBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO29CQUNoSCxDQUFDO29CQUNELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxHQUFHO3dCQUFFLE1BQU07b0JBQ3BDLGVBQWUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxDQUFDO2dCQUNELE1BQU0sT0FBTyxHQUE0QixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJO29CQUNsRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQy9ELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQzFILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUTtnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFDNUQsTUFBMEU7UUFDMUUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILElBQUksQ0FBQyxVQUFVO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxPQUFPLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ILElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2dCQUNyRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3JHLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQzFILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3RixNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDbEcsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUMvRSxNQUNpRTtRQUdqRSxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWE7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYztvQkFDeEMsQ0FBQyxDQUFDLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hILE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRyxNQUFNLE9BQU8sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuSSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7Z0JBQ3ZKLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLEVBQUUsRUFBRTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ2xHLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ3hGLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztnQkFDRCw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7cUJBQ3RELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYzt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQ3pGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDdEYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2dCQUNyRixDQUFDO2dCQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDckcsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDMUgsTUFBTSxLQUFLLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUTtnQkFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdGLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUVELDhFQUE4RTtJQUN2RSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxjQUFzQjtRQUNwRixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsSUFBSSxDQUFDLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLE9BQU8sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssY0FBYztvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDeEUsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQy9GLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDeEYsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDMUgsTUFBTSxLQUFLLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEYsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMvRCxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFRCw4RkFBOEY7SUFDdkYsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsWUFBb0IsRUFBRSxTQUFpQixFQUNyRixNQUFrRjtRQUNsRixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsT0FBTztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ2xILE1BQU0sT0FBTyxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0SCxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssWUFBWSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzlGLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDaEUsQ0FBQztnQkFDRCwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7cUJBQ3RELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYzt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQzVGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDekYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUMxRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDeEYsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUMxSCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0QsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sVUFBVSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELG1HQUFtRztJQUM1RixLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLE9BQWUsRUFDckYsTUFDeUc7UUFHekcsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDekYsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RILElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU87b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUN2RyxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRTt1QkFDdkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7dUJBQ3hFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELDRCQUE0QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXOzJCQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBUzsyQkFDN0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLFlBQVk7MkJBQ25ELEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxZQUFZOzJCQUNuRCxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztvQkFDOUUsQ0FBQztvQkFDRCxNQUFNLE9BQU8sR0FBaUY7d0JBQzVGLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUM7d0JBQ3ZELGNBQWMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQzt3QkFDbEQsY0FBYyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQzt3QkFDNUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQzt3QkFDdkMsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRTtxQkFDdEQsQ0FBQztvQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7MkJBQ3BELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztvQkFDakUsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXO3VCQUNsQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxXQUFXO3dCQUN6QyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJO3dCQUNwRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztxQkFDN0UsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDaEcsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDOUYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUM5RixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDNUYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQzFILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkcsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0lBRUQsNEZBQTRGO0lBQ3JGLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQ25FLE1BQTRGO1FBQzVGLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDakgsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNILElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztnQkFDbkgsb0NBQW9DLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxJQUFJO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztnQkFDeEksSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87MkJBQ2pFLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxjQUFjOzJCQUMxRixPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM1RixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7b0JBQ2pGLENBQUM7b0JBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO3FCQUN0RCxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUNsRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO29CQUN0SCxNQUFNLE1BQU0sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDOUYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDMUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsSUFBSSxNQUFNLEVBQUUsUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQWMsRUFBRSxDQUFDO1FBQzdCLElBQUksUUFBUTtZQUFFLElBQUksQ0FBQztnQkFBQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxDQUFDO1FBQ25GLElBQUksTUFBTTtZQUFFLElBQUksQ0FBQztnQkFBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7Q0FDRiJ9
|
|
1803
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hdXRob3JpdHlkYXRhYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuYXV0aG9yaXR5ZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLCtCQUErQixFQUFFLCtCQUErQixFQUFFLHFDQUFxQyxFQUN2RyxrQ0FBa0MsRUFBRSxpQ0FBaUMsRUFBRSxrQ0FBa0MsRUFDekcsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsK0JBQStCLEVBQzdGLDRCQUE0QixFQUFFLHVDQUF1QyxFQUFFLGlDQUFpQyxFQUN4Ryw2QkFBNkIsRUFBRSxnQkFBZ0IsRUFBRSw0QkFBNEIsRUFDN0UsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUUsK0JBQStCLEVBQ2pHLCtCQUErQixFQUFFLDBCQUEwQixFQUMzRCw0QkFBNEIsRUFBRSxvQ0FBb0MsRUFBRSw4QkFBOEIsRUFDbEcsMEJBQTBCLEdBTTNCLE1BQU0sOEJBQThCLENBQUM7QUFFdEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFpQmpFLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBMEIsRUFBRSxPQUFnQyxFQUNoRixLQUE0QixFQUEyQixFQUFFLENBQUMsQ0FBQztJQUMzRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDdkYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0lBQ2hFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSztJQUNuRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxLQUFLLENBQUMsdUJBQXVCO0lBQ2hGLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLFlBQVksRUFBRSxJQUFJO0NBQzNELENBQUMsQ0FBQztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUE2QixFQUFFLEtBQThCLEVBQVcsRUFBRSxDQUNsRyxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87T0FDL0YsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLFdBQVc7T0FDNUUsSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsVUFBVTtPQUNwQyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVU7T0FDcEcsSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsS0FBSyxLQUFLLENBQUMsdUJBQXVCO09BQ2hHLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLGVBQWUsQ0FBQztBQUNwRCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQTZCLEVBQUUsS0FBOEIsRUFBVyxFQUFFLENBQ2pHLGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUk7SUFDeEYsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTTtXQUNsRixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsZ0JBQWdCO1dBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWTtXQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN2RixNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWlGLEVBQTZCLEVBQUU7SUFDdkksTUFBTSxTQUFTLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5RSw4QkFBOEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRiwwR0FBMEc7QUFDMUcsTUFBTSxPQUFPLDJCQUEyQjtJQUtUO0lBSnJCLE1BQU0sQ0FBc0M7SUFDNUMsUUFBUSxDQUErQjtJQUN2QyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXhCLFlBQTZCLE9BQTRDO1FBQTVDLFlBQU8sR0FBUCxPQUFPLENBQXFDO0lBQUcsQ0FBQztJQUVyRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsT0FBZTtRQUM1QyxNQUFNLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDekgsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZJLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN0SCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QixxRkFBcUY7WUFDckYsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSTtnQkFDdEUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZFLEtBQUssTUFBTSxVQUFVLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssWUFBWSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztvQkFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7b0JBQzdGLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztnQkFDeEYsQ0FBQztnQkFDRCxNQUFNLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixNQUFNLE9BQU8sR0FBeUI7b0JBQ3BDLEVBQUUsRUFBRSxzQkFBc0I7b0JBQzFCLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO2lCQUN2RixDQUFDO2dCQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ2xHLENBQUM7aUJBQU0sSUFBSSxDQUFDLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDbkcsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUN0QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQztnQkFBQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxNQUFNLENBQUMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQy9FLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFTyxFQUFFO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUM1RixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXLENBQVUsUUFBaUQ7UUFDbEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RCxJQUFJLE1BQU0sS0FBSyxTQUFTO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUM3RixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO2dCQUFTLENBQUM7WUFBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRO1FBQ25CLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDMUUsT0FBTyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQVU7UUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQVU7UUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQVU7UUFDbkMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JGLENBQUM7SUFFRCwyRkFBMkY7SUFDcEYsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQWlCLEVBQUUsS0FBb0I7UUFDdkUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNGLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRztTQUMvRixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELDhGQUE4RjtJQUN2RixLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQUUsT0FBZSxFQUFFLE1BQWMsRUFDL0YsUUFBZ0I7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEcsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLFFBQVE7dUJBQzFGLEtBQUssQ0FBQyxPQUFPLEtBQUssZ0JBQWdCLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO3VCQUNuRSxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO2dCQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RHLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUN6RixNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7b0JBQ3JGLENBQUM7b0JBQ0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxNQUFNLE1BQU0sR0FBOEIsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJO29CQUNsRyxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzNGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxVQUFVO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztnQkFDcEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEI7bUJBQzlELENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzdGLElBQUksUUFBUSxFQUFFLFNBQVMsS0FBSyxTQUFTLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxPQUFPO3VCQUNoRyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVE7b0JBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1lBQ3BHLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0hBQWdIO0lBQ3pHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBYyxFQUFFLGFBQTRCLEVBQ3RFLFNBQWlELEVBQUUsUUFBZ0I7UUFDbkUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDekcsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO29CQUN2RSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7Z0JBQ0QsSUFBSSxTQUFTLElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsRUFBRSxHQUFHLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN2RyxNQUFNLE1BQU0sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPO29CQUMvRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO2dCQUN0RyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUFFLE9BQU87WUFDOUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBRUQsb0dBQW9HO0lBQzdGLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFVO1FBS3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7WUFDdEMsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3JHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hHLE1BQU0sYUFBYSxHQUFHLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hHLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDeEQsQ0FBQyxDQUFDLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDekcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQVU7UUFDL0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2pGLENBQUM7SUFFTSxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQVU7UUFDcEMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RGLENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQVU7UUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBVTtRQUN6QyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDM0YsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBVTtRQUNuQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFvQixFQUFFLEtBQUssR0FBRyxHQUFHO1FBQzNELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUcsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxLQUFLO2dCQUNYLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztTQUNsQyxDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDO2FBQzNELE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBMkMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUM7UUFDNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFGLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBK0MsRUFBRSxLQUFvQixFQUNsRyxLQUFLLEdBQUcsR0FBRztRQUNYLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUcsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3RFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLO1NBQ2xGLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7YUFDL0IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUEyQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLEtBQStDLEVBQUUsS0FBb0IsRUFDeEcsS0FBSyxHQUFHLEdBQUc7UUFDWCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sTUFBTSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUN0RSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFO1lBQ3ZHLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUM7YUFDL0IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUEyQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsd0dBQXdHO0lBQ2pHLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBZ0Q7UUFHM0UsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsOEJBQThCLENBQUMsRUFBRSxHQUFHLE1BQU07WUFDeEMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQWtDLEVBQThDLEVBQUUsQ0FDckcsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSTtlQUM3RCxPQUFPLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsT0FBTztlQUM1RSxPQUFPLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLGNBQWMsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ2hGLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO29CQUNwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7Z0JBQ2pELENBQUM7Z0JBQ0QsSUFBSSx1QkFBdUIsR0FBa0IsSUFBSSxDQUFDO2dCQUNsRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDN0UsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLFNBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDMUMsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN6RSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsT0FBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUN4QyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDeEcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2hHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVE7MkJBQzdELE9BQU8sQ0FBQyxjQUFjLEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxTQUFTOzJCQUMzRixLQUFLLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLGdCQUFnQjsyQkFDbkUsS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2xHLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztvQkFDaEYsQ0FBQztvQkFDRCx1QkFBdUIsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE1BQU0sU0FBUyxHQUFvQyxFQUFFLEdBQUcsTUFBTSxFQUFFLHVCQUF1QixFQUFFLENBQUM7Z0JBQzFGLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLE1BQU0sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDNUYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0UsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUNuRyxDQUFDO0lBQ0gsQ0FBQztJQUVELDRHQUE0RztJQUNyRyxLQUFLLENBQUMsd0JBQXdCLENBQUMsV0FBbUI7UUFDdkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtZQUN0QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ2pGLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsZUFBZTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDMUUsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDN0UsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLFNBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0MsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN6RSxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsT0FBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFFBQVE7dUJBQzdELE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTO3VCQUNqRyxLQUFLLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLGdCQUFnQjt1QkFDbkUsS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt1QkFDNUYsS0FBSyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDakUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO2dCQUN4RixDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxlQUFlLENBQUMsUUFBZ0IsRUFBRSxXQUFtQixFQUNoRSxNQUF1RjtRQUN2RixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsTUFBTTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDakUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUNsRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxPQUFPLEdBQWlHO2dCQUM1RyxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUM7Z0JBQzNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQztnQkFDN0QsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDO2dCQUMzQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFO2FBQzlFLENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTzttQkFDMUYsS0FBSyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU87bUJBQzFFLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxPQUFPLENBQUMsdUJBQXVCO21CQUNqRSxLQUFLLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO21CQUNwRSxLQUFLLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzlGLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUM5RCxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDakcsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDeEgsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JELElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlLElBQUksTUFBTSxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1lBQ3JGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdHQUF3RztJQUNqRyxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBMEM7UUFHM0UsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsOEJBQThCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxPQUFrQyxFQUE4QyxFQUFFLENBQ3JHLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVM7ZUFDMUUsT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLE9BQU87ZUFDOUUsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLGNBQWMsQ0FBQztRQUMxRyxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sY0FBYyxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN0SCxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztvQkFDbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUNqRCxDQUFDO2dCQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxSCxNQUFNLFdBQVcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDcEgsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hHLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLENBQUMsT0FBTzt1QkFDN0csQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUTt1QkFDbEYsS0FBSyxDQUFDLE9BQU8sS0FBSyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVE7dUJBQzlELENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7dUJBQzlDLEtBQUssQ0FBQyx1QkFBdUIsS0FBSyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO2dCQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7Z0JBQzNGLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0ZBQWdGLENBQUMsQ0FBQztRQUNwRyxDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUNyRSxLQUFLLENBQUMsK0JBQStCLENBQUMsV0FBbUIsRUFBRSxRQUFnQixFQUFFLEtBQWEsRUFDL0YsZUFBdUIsRUFBRSxHQUFXO1FBQ3BDLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxDQUFDLGVBQWU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDdEUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO2dCQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN4SCxNQUFNLFdBQVcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hHLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNoRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsT0FBTzt1QkFDM0csQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssUUFBUTt1QkFDaEYsS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUTt1QkFDN0QsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt1QkFDOUMsS0FBSyxDQUFDLHVCQUF1QixLQUFLLE9BQU8sQ0FBQyx1QkFBdUI7dUJBQ2pFLEtBQUssQ0FBQyxlQUFlLEtBQUssZUFBZSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztnQkFDbkYsQ0FBQztnQkFDRCxNQUFNLEtBQUssR0FBb0MsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZTtvQkFDakYsS0FBSyxFQUFFLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUNoRyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztpQkFDekUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxjQUFjO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDdEcsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckQsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVE7bUJBQy9ELE1BQU0sQ0FBQyxLQUFLLEtBQUssMEJBQTBCO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1lBQ2hFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUNoRyxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLFdBQW1CLEVBQ3RFLE1BQXVGO1FBQ3ZGLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0saUNBQWlDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxNQUFNO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUNoRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEMsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWU7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQzVGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBaUc7Z0JBQzVHLFNBQVMsRUFBRSxDQUFDLDBCQUEwQixFQUFFLFVBQVUsQ0FBQztnQkFDbkQsd0JBQXdCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ3pELFFBQVEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRTthQUNoRCxDQUFDO1lBQ0YsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLE9BQU87bUJBQzFGLEtBQUssQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPO21CQUMxRSxLQUFLLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLGNBQWMsS0FBSyxPQUFPLENBQUMsY0FBYzttQkFDNUYsS0FBSyxDQUFDLHVCQUF1QixLQUFLLE9BQU8sQ0FBQyx1QkFBdUI7bUJBQ2pFLEtBQUssQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVE7bUJBQ3BFLEtBQUssQ0FBQyxRQUFRLEtBQUssT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUYsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO2FBQzlELENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUNoRyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckQsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDcEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQWlELEVBQ3BGLEtBQW9CLEVBQUUsS0FBSyxHQUFHLEdBQUc7UUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUM5RyxNQUFNLE1BQU0sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDNUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUs7U0FDcEYsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsdUNBQXVDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBVTtRQUdoRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1lBQ3RDLE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNyRyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN4RyxNQUFNLFdBQVcsR0FBRyxPQUFPLEVBQUUsY0FBYztnQkFDekMsQ0FBQyxDQUFDLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBR2pFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7WUFDdEMsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNoSCxNQUFNLFdBQVcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hHLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJFQUEyRTtJQUNwRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQzlELE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDO0lBQy9FLENBQUM7SUFFRCxtRkFBbUY7SUFDNUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUdqRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqSCxNQUFNLE9BQU8sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFHLE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDOUUsTUFBTSxhQUFhLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRixNQUFNLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQztnQkFDOUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMEVBQTBFO0lBQ25FLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsU0FBaUIsRUFBRSxPQUFlO1FBSXZGLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7WUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEgsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxRyxNQUFNLFVBQVUsR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxVQUFVO21CQUMzRCxXQUFXLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxhQUFhLENBQUMsT0FBTzttQkFDNUQsYUFBYSxDQUFDLFVBQVUsS0FBSyxXQUFXLElBQUksV0FBVyxDQUFDLFVBQVUsS0FBSyxXQUFXO21CQUNsRixXQUFXLENBQUMsT0FBTyxLQUFLLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssZUFBZTttQkFDckYsV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxPQUFPO21CQUMvRCxVQUFVLENBQUMsa0JBQWtCLEtBQUssSUFBSSxJQUFJLFVBQVUsQ0FBQyxlQUFlLEtBQUssU0FBUzttQkFDbEYsVUFBVSxDQUFDLGFBQWEsS0FBSyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakYsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7Z0JBQ3hHLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLFNBQWlCLEVBQUUsT0FBZTtRQUN2RCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNySCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUNwRSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxrR0FBa0c7SUFDM0YsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQWdDLEVBQ2pFLGdCQUErQixFQUFFLElBQTRCO1FBQzdELE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sS0FBSyxHQUEwQixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDckUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN0QywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2VBQ3RDLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN4SCxNQUFNLFdBQVcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDbEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUMvRyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDcEYsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFDaEUsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN2RSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ25DLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLE9BQU8sS0FBSyxnQkFBZ0I7MkJBQy9ELE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7d0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQzNHLENBQUM7cUJBQU0sSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLG9CQUFvQixFQUFFLENBQUM7b0JBQ3hGLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDOUIsSUFBSSxPQUFPLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUMxRyxDQUFDO3lCQUFNLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxlQUFlLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFROzJCQUN4RSxPQUFPLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7NEJBQzlFLEVBQUUsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU07eUJBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7d0JBQ2xELElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksVUFBVSxDQUFDLGtCQUFrQixLQUFLLElBQUk7K0JBQ3JGLFVBQVUsQ0FBQyxlQUFlLEtBQUssT0FBTyxDQUFDLFNBQVM7K0JBQ2hELFVBQVUsQ0FBQyxhQUFhLEtBQUssT0FBTyxDQUFDLE9BQU87NEJBQUUsT0FBTyxLQUFLLENBQUM7b0JBQ2xFLENBQUM7O3dCQUFNLE9BQU8sS0FBSyxDQUFDO2dCQUN0QixDQUFDOztvQkFBTSxPQUFPLEtBQUssQ0FBQztnQkFDcEIsTUFBTSxPQUFPLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUM3RixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE1BQU0sS0FBSyxHQUFHLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO3dCQUN6QyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssSUFBSTt3QkFBRSxPQUFPLEtBQUssQ0FBQztvQkFDbEYsTUFBTSxPQUFPLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTzt3QkFDNUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQy9ELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN0RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxnQkFBZ0IsS0FBSyxJQUFJO3dCQUFFLE9BQU8sS0FBSyxDQUFDO29CQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDdEYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsT0FBTyxLQUFLLENBQUM7Z0JBQ25ELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUN4RixJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQy9DLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3BGLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDbkQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUNsRCxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDeEMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN6RCw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUN6RSxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sRUFBRSxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUUsS0FBSyxLQUFLLE9BQU8sQ0FBQyxLQUFLO21CQUNuRSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTO21CQUNqRSxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDM0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1FBQzlHLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxZQUEyQixFQUFFLFVBQXlCLEVBQUUsWUFBMkIsRUFBRSxLQUFhO1FBS2xILElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUcsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDakgsSUFBSSxDQUFDLElBQUk7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDdEUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDekQsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU87YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUNsRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTzthQUMzQyxDQUFDLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3RFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPO2FBQzNDLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsSCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUcsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE9BQU87Z0JBQ0wsSUFBSSxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUMxRCxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVc7Z0JBQy9ELGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMxRSxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2FBQzNFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLE9BUXZCLEVBQUUsS0FBYTtRQWtCZCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBb0IsRUFBVyxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDN0YsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2VBQ2xFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixLQUFLLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqSCxJQUFJLENBQUMsSUFBSTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDeEUsTUFBTSxRQUFRLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN0RSxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPO2FBQzNDLENBQUMsQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDbEUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTzthQUMzQyxDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQzFFLE1BQU0sRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0UsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU87YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM1RSxNQUFNLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9FLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxPQUFPO2FBQzNDLENBQUMsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0scUNBQXFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDbEYsTUFBTSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDckYsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU87YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM1RSxNQUFNLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsT0FBTzthQUMzQyxDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hGLE1BQU0sRUFBRSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0UsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE9BQU87YUFDM0MsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDeEgsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzNILE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO2lCQUNyRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUUsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7aUJBQ3JELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7aUJBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDcEMsSUFBSSxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUMxRCxRQUFRLEVBQUUsV0FBVztnQkFDckIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFVBQVUsRUFBRSxhQUFhO2dCQUN6QixXQUFXLEVBQUUsY0FBYztnQkFDM0IsY0FBYyxFQUFFLGlCQUFpQjtnQkFDakMsY0FBYyxFQUFFLGlCQUFpQjtnQkFDakMsVUFBVSxFQUFFLGFBQWE7Z0JBQ3pCLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUMxRSxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNoRixvQkFBb0IsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDbkYsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDNUYsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDNUYsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDakYsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBcUMsRUFBRSxLQUFvQixFQUFFLEtBQUssR0FBRyxHQUFHO1FBQ2pHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEdBQUc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDOUcsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2xFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtZQUN6RCxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLEtBQW9CLEVBQUUsS0FBSyxHQUFHLEdBQUc7UUFDaEYsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMxRyxNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDbEUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFO1lBQ2pFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQixFQUFFLEtBQUssR0FBRyxHQUFHO1FBQ3BELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNsRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLO1NBQzdFLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFpQixFQUFFLElBQXVFLEVBQ2xILFFBQWdCLEVBQUUsSUFBZ0IsRUFBRSxTQUFpQjtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVHLE1BQU0sSUFBSSxHQUF5QixFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN0RixNQUFNLFlBQVksR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTTtZQUN4RixNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkcsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLGNBQWM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdEcsTUFBTSxRQUFRLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ2hFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVM7U0FDMUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDcEcsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxPQUFpQixFQUFFLE9BQXdGLEVBQ3RJLEtBQThCO1FBQzlCLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLEtBQUssR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pFLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07bUJBQ3JFLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxXQUFXO21CQUMxRSxLQUFLLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztZQUMvRSxNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3BFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7YUFDdEQsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxNQUFNLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFpQixFQUFFLE9BQXNGLEVBQ2xJLEtBQTRCLEVBQUUsa0JBQWtCLEdBQUcsS0FBSztRQUN4RCwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxTQUFTO21CQUMzRCxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTzttQkFDeEUsS0FBSyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssb0JBQW9CO21CQUM1RCxDQUFDLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt1QkFDL0QsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO3VCQUNoRSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7WUFDekYsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztnQkFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQzthQUN0RCxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNoQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDdkYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsa0JBQWtCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUYsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFFRCxpR0FBaUc7SUFDMUYsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQ3JGLE1BRUM7UUFDRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsSUFBSSxDQUFDLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxNQUFNLFdBQVcsR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQ2xCLGFBQWEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUN4RyxXQUFXLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0RyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUzt1QkFDbEcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVTt1QkFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBQ0QsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLGNBQWMsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksV0FBVyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO3VCQUM1RSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakUsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3JHLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUM1QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVFLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7UUFDeEcsQ0FBQztJQUNILENBQUM7SUFFRCx1SEFBdUg7SUFDaEgsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsV0FBbUIsRUFBRSxTQUFpQixFQUFFLE9BQWUsRUFDekcsTUFFQztRQUNELElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2SCxNQUFNLGVBQWUsR0FBRyxNQUFNLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN0SCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsZUFBZTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQ3pGLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLFlBQVksSUFBSSxTQUFTLENBQUMsUUFBUSxLQUFLLFFBQVE7dUJBQ3hHLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbEgsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDO2dCQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNuRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLFFBQVEsRUFBRSxlQUFlLEtBQUssU0FBUyxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQzFHLE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztnQkFDOUUsQ0FBQztnQkFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQ2xCLGFBQWEsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUN4RyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTO3VCQUNsRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO3VCQUMvRixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztnQkFDaEYsQ0FBQztnQkFDRCxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsY0FBYyxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxXQUFXLElBQUksQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7dUJBQzVFLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQW9DO29CQUNqRCxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJO29CQUM3QyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVE7d0JBQ25FLGVBQWUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRTtvQkFDaEQsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7b0JBQ2xHLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRO2lCQUMzQyxDQUFDO2dCQUNGLDhCQUE4QixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztpQkFDM0UsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxjQUFjO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDdEcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUN4RixRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDakQsNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDO2FBQzVFLENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRSxJQUFJLEtBQUssZUFBZSxJQUFJLFNBQVMsRUFBRSxLQUFLLEtBQUssVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEtBQUssUUFBUTttQkFDakgsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxLQUFLLFFBQVE7bUJBQ3hFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2pFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHdGQUF3RixDQUFDLENBQUM7UUFDNUcsQ0FBQztJQUNILENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFDeEQsTUFBaUc7UUFHakcsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RILElBQUksQ0FBQyxhQUFhO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDckUsTUFBTSxPQUFPLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUMzRCxDQUFDO2dCQUNELElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxvQkFBb0IsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLDZCQUE2Qjt1QkFDdEYsS0FBSyxDQUFDLEtBQUssS0FBSyw2QkFBNkI7dUJBQzdDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNoRixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsTUFBTSxZQUFZLEdBQTRCLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDeEYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDckcsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDeEgsTUFBTSxLQUFLLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZFLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRCxzRkFBc0Y7SUFDL0UsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxPQUFlLEVBQ3BGLE1BQXdHO1FBR3hHLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtnQkFDNUMsTUFBTSxVQUFVLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUN2SCxNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxPQUFPLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN0RixJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUzt1QkFDMUYsS0FBSyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDckQsTUFBTSxjQUFjLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDO29CQUNqRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLElBQUksS0FBSyxJQUFJLE9BQU8sRUFBRSxRQUFRLEtBQUssUUFBUSxJQUFJLEtBQUssRUFBRSxRQUFRLEtBQUssUUFBUTtnQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZHLE1BQU0sSUFBSSxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdHQUF3RztJQUNqRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUNyRSxnQkFBd0IsRUFBRSxnQkFBd0I7UUFDbEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLGdCQUFnQixFQUFFLENBQUM7b0JBQzFHLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsS0FDa0csRUFBRSxFQUFFO29CQUN4SCxJQUFJLEtBQUssR0FBa0IsSUFBSSxDQUFDO29CQUNoQyxPQUFPLElBQUksRUFBRSxDQUFDO3dCQUNaLE1BQU0sSUFBSSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs0QkFDaEUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFOzRCQUNqRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPO3lCQUNyQyxDQUFDLENBQUM7d0JBQ0gsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJOzRCQUFFLE1BQU0sS0FBSyxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ3hHLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHOzRCQUFFLE1BQU07d0JBQzdCLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDO29CQUMxQixDQUFDO2dCQUNILENBQUMsQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxLQUFLLEVBQUMsS0FBSyxFQUFDLEVBQUU7b0JBQ3ZCLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTO3dCQUFFLE9BQU87b0JBQ3RDLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxlQUFlLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO29CQUNsRyxDQUFDO29CQUNELElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyw2QkFBNkIsRUFBRSxDQUFDO3dCQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7b0JBQ2hGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNyRSxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7b0JBQ3JGLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLFNBQVM7d0JBQUUsT0FBTztvQkFDdEMsTUFBTSxLQUFLLEdBQTBCO3dCQUNuQyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSTt3QkFDbEYsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU07d0JBQzlELGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUM7d0JBQzFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO3dCQUMxRCxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUTtxQkFDekQsQ0FBQztvQkFDRixNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQztnQkFDdkMsT0FBTyxJQUFJLEVBQUUsQ0FBQztvQkFDWixNQUFNLFFBQVEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3RFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRTt3QkFDL0UsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTztxQkFDckMsQ0FBQyxDQUFDO29CQUNILEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7d0JBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7d0JBQ3JHLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTOzRCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztvQkFDdEcsQ0FBQztvQkFDRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRzt3QkFBRSxNQUFNO29CQUNqQyxZQUFZLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsQ0FBQztnQkFDRCxJQUFJLGVBQWUsR0FBa0IsSUFBSSxDQUFDO2dCQUMxQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDNUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFO3dCQUNyRixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPO3FCQUNyQyxDQUFDLENBQUM7b0JBQ0gsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzt3QkFDM0csSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVM7NEJBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO29CQUNoSCxDQUFDO29CQUNELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxHQUFHO3dCQUFFLE1BQU07b0JBQ3BDLGVBQWUsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxDQUFDO2dCQUNELE1BQU0sT0FBTyxHQUE0QixFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJO29CQUNsRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQy9ELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUTtnQkFBRSxPQUFPLE9BQU8sQ0FBQztZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFDNUQsTUFBMEU7UUFDMUUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILElBQUksQ0FBQyxVQUFVO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxPQUFPLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ILElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDdEgsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO2dCQUNyRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3JHLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUM3RixNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDbEcsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxTQUFpQixFQUFFLE9BQWUsRUFDaEcsTUFDaUU7UUFHakUsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxhQUFhO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDakcsTUFBTSxPQUFPLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsTUFBTSxXQUFXLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUcsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hHLE1BQU0sT0FBTyxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25JLElBQUksS0FBSyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDdkosSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxLQUFLLEVBQUUsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDeEYsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO2dCQUNELDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzt3QkFDcEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztxQkFDdEQsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDekYsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUN0RixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7Z0JBQ3JGLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUNyRyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxjQUFzQixFQUMxRixZQUFxQjtRQUNyQixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsSUFBSSxDQUFDLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLE9BQU8sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssY0FBYzt1QkFDcEQsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUNyRixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzVGLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDL0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxFQUN4RixRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEQsbUZBQW1GO1lBQ25GLHVGQUF1RjtZQUN2RixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssY0FBYyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ2xGLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQztJQUVELDJGQUEyRjtJQUNwRixhQUFhLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLGNBQXNCO1FBQzlFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCwwR0FBMEc7SUFDbkcsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLGNBQXNCO1FBQ3ZGLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCw4RkFBOEY7SUFDdkYsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsWUFBb0IsRUFBRSxTQUFpQixFQUNyRixNQUFrRjtRQUNsRixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsT0FBTztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7Z0JBQ2xILE1BQU0sT0FBTyxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0SCxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssWUFBWSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzlGLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztnQkFDaEUsQ0FBQztnQkFDRCwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3ZFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7cUJBQ3RELEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNoQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssY0FBYzt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7Z0JBQzVGLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLE1BQU0sR0FBRyxNQUFNLGtDQUFrQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDekYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2dCQUMxRixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFDeEYsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN4RixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0QsSUFBSSxLQUFLLElBQUksVUFBVSxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sVUFBVSxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELG1HQUFtRztJQUM1RixLQUFLLENBQUMscUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLE9BQWUsRUFDckYsTUFDeUc7UUFHekcsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLFVBQVUsR0FBRyxNQUFNLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDekYsTUFBTSxLQUFLLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0UsTUFBTSxhQUFhLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3RILElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU87b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUN2RyxNQUFNLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLGFBQWEsR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDeEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNsSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRTt1QkFDdkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVE7dUJBQ3hFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELDRCQUE0QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FBQyxXQUFXOzJCQUNoRCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsU0FBUzsyQkFDN0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssT0FBTyxDQUFDLFlBQVk7MkJBQ25ELEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxZQUFZOzJCQUNuRCxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztvQkFDOUUsQ0FBQztvQkFDRCxNQUFNLE9BQU8sR0FBaUY7d0JBQzVGLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxTQUFTLENBQUM7d0JBQ3ZELGNBQWMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQzt3QkFDbEQsY0FBYyxFQUFFLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQzt3QkFDNUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQzt3QkFDdkMsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRTtxQkFDdEQsQ0FBQztvQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7MkJBQ3BELEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztvQkFDakUsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXO3VCQUNsQyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN4RixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxXQUFXO3dCQUN6QyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsS0FBSyxJQUFJO3dCQUNwRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEcsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7d0JBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztxQkFDN0UsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7b0JBQ2hCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDaEcsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sTUFBTSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDOUYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUM5RixDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDNUYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3hGLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksT0FBTyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO2dCQUFFLE1BQU0sS0FBSyxDQUFDO1lBQ3hILE1BQU0sS0FBSyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFLFFBQVEsS0FBSyxRQUFRLElBQUksS0FBSyxFQUFFLFFBQVEsS0FBSyxRQUFRO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkcsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQ3hDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEYsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNoRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM5RixNQUFNLE1BQU0sR0FBRyxNQUFNLHFDQUFxQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwRyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMscUNBQXFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pGLENBQUM7SUFFRCx1R0FBdUc7SUFDaEcsS0FBSyxDQUFDLDZCQUE2QixDQUFDLFNBQWlCLEVBQUUsT0FBZSxFQUMzRSxPQUFrQjtRQUNsQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBVSxFQUFFLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUM1RSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTzthQUNsRSxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7bUJBQy9DLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4RyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUE2QyxFQUM5RSxLQUFvQjtRQUNwQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7ZUFDdkQsQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3pHLE1BQU0sTUFBTSxHQUFHLE1BQU0scUNBQXFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxRSxNQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2xFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRztTQUM1QixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVNLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFvQixFQUFFLEtBQUssR0FBRyxHQUFHO1FBRy9ELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2VBQ2pELENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sTUFBTSxHQUFHLE1BQU0scUNBQXFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxRSxNQUFNLEVBQUUsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUM7U0FDeEYsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMscUNBQXFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25ILE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRUQsdUdBQXVHO0lBQ2hHLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxLQUVWO1FBQy9CLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNoRixLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sYUFBYSxHQUFHLE1BQU0sdUNBQXVDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3hILE1BQU0sYUFBYSxHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sV0FBVyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQzt1QkFDekUsYUFBYSxDQUFDLFVBQVUsS0FBSyxlQUFlLElBQUksYUFBYSxDQUFDLGNBQWMsS0FBSyxNQUFNO3VCQUN2RixhQUFhLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLFNBQVM7dUJBQ3BGLGFBQWEsQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPO3VCQUM1RSxhQUFhLENBQUMsVUFBVSxLQUFLLFdBQVcsSUFBSSxhQUFhLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxXQUFXO3VCQUN2RixhQUFhLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVc7dUJBQ3BFLFdBQVcsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssb0JBQW9CO3VCQUNuRixXQUFXLENBQUMsS0FBSyxLQUFLLGVBQWUsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVE7dUJBQ3ZFLFdBQVcsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztnQkFDM0UsQ0FBQztnQkFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLElBQUksT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxPQUFPLEVBQUUsQ0FBQzt3QkFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO29CQUNsRSxDQUFDO29CQUNELE9BQU8sa0NBQWtDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkUsQ0FBQztnQkFDRCxNQUFNLElBQUksR0FBK0IsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTO29CQUMvRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO29CQUM5RSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssVUFBVTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ2hHLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDO21CQUNqRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUMvRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsSUFBSSxJQUFJLEVBQUUsUUFBUSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE9BQU87Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDckgsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUFDLFdBQW1CO1FBS3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN6QixNQUFNLE9BQU8sR0FBRyxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3JILE1BQU0sY0FBYyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdILE1BQU0sY0FBYyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzdILE1BQU0scUJBQXFCLEdBQUcsTUFBTSwrQkFBK0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN4SSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFDRCxPQUFPLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUUsa0NBQWtDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RFLFFBQVEsRUFBRSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQztnQkFDekUsUUFBUSxFQUFFLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO2dCQUN6RSxlQUFlLEVBQUUsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDekYsZUFBZSxFQUFFLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1FBQ2hHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdGQUF3RjtJQUNqRixLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FNSjtRQUMzQixNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUMzRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztlQUNyRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7ZUFDdkMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztlQUN0RSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxhQUFhLEdBQWtELElBQUksQ0FBQztRQUN4RSxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUMsT0FBTyxFQUFDLEVBQUU7Z0JBQzVDLE1BQU0sVUFBVSxHQUFHLE1BQU0sNEJBQTRCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDdkgsTUFBTSxVQUFVLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDN0csTUFBTSxhQUFhLEdBQUcsTUFBTSxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDeEgsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVU7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUN4RixNQUFNLElBQUksR0FBRyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM5RSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDOUcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJO29CQUNqRixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU07MkJBQ2pFLE9BQU8sQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUFDLEVBQUUsQ0FBQztvQkFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUNELE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDbEUsSUFBSSxVQUFVLEtBQUssZUFBZTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ3BHLE1BQU0sY0FBYyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hILE1BQU0sY0FBYyxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3JILElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxjQUFjO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDaEcsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakYsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDakYsTUFBTSxZQUFZLEdBQUcsTUFBTSxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO29CQUNoRixhQUFhLEVBQUUsZUFBZTtpQkFDL0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2hCLElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztnQkFDNUUsQ0FBQztnQkFDRCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNqSSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sK0JBQStCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNqSSxJQUFJLENBQUMscUJBQXFCLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxPQUFPLElBQUkscUJBQXFCLENBQUMsT0FBTzt1QkFDakgsUUFBUSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssV0FBVzt1QkFDaEYsUUFBUSxDQUFDLFVBQVUsS0FBSyxXQUFXLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxvQkFBb0I7dUJBQ2hGLFFBQVEsQ0FBQyxPQUFPLEtBQUssb0JBQW9CLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRLENBQUMsRUFBRTt1QkFDL0UsSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUMsU0FBUztvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0JBQ2pILE1BQU0sZUFBZSxHQUFHLCtCQUErQixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDakcsTUFBTSxlQUFlLEdBQUcsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQzFHLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUM7b0JBQ3hFLGVBQWUsRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFHLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsK0JBQStCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTO3VCQUNsRSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO3VCQUM3RSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTTt1QkFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxRQUFRLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFFBQVEsQ0FBQyxFQUFFO3VCQUN2RyxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixLQUFLLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLEVBQUU7dUJBQ3ZHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsT0FBTzt1QkFDcEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEtBQUssZUFBZSxDQUFDLFdBQVc7dUJBQzdFLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsS0FBSyxlQUFlLENBQUMsT0FBTzt1QkFDcEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEtBQUssZUFBZSxDQUFDLFdBQVc7dUJBQzdFLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUTt1QkFDOUYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRTt1QkFDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxRQUFRLENBQUMsU0FBUzt1QkFDbEcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVE7dUJBQzVFLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzVHLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztnQkFDL0UsQ0FBQztnQkFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTO3VCQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO3VCQUN2RixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO3VCQUN2RixDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQzsyQkFDdkcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQzsyQkFDckUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLENBQUMsa0JBQWtCOzJCQUMvRCxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixLQUFLLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUMxRSxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7Z0JBQy9ELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO29CQUM3QixLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBVSxFQUFFLENBQUM7d0JBQ3ZELE1BQU0sUUFBUSxHQUFHLE1BQU0sdUNBQXVDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQzs0QkFDOUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTzt5QkFDL0UsQ0FBQyxDQUFDO3dCQUNILElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHOzRCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQzt3QkFDdkYsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLFNBQVM7K0JBQzNFLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUM3RixDQUFDO29CQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJOzJCQUNyRSxDQUFDLGdCQUFnQjsyQkFDakIsUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFlLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJOzJCQUNqRyxRQUFRLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUk7MkJBQ3pGLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXOzJCQUN6RixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssUUFBUTsyQkFDbEUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssZUFBZSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUk7MkJBQzlFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVE7MkJBQy9FLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxVQUFVO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDcEgsQ0FBQztxQkFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUM5RSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssaUJBQWlCOzJCQUNsRSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFlOzJCQUN0RixLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssaUJBQWlCOzJCQUNoRixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVU7MkJBQ3RGLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXOzJCQUN6RixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDaEcsQ0FBQztxQkFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLFdBQVcsRUFBRSxDQUFDO29CQUMvRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssaUJBQWlCLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxpQkFBaUI7MkJBQzNFLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFROzJCQUNyRSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsY0FBYzsyQkFDcEQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLGVBQWU7MkJBQzdFLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUMsU0FBUzsyQkFDdkYsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUk7MkJBQ2xGLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDNUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO29CQUMzRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQzt1QkFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3ZDLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxPQUFPOzJCQUN2RSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVU7MkJBQ3RGLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxlQUFlOzJCQUM3RSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxDQUFDLEVBQUU7MkJBQzlFLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU87MkJBQ3ZFLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLElBQUk7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO2dCQUNsRyxDQUFDO3FCQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7dUJBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLGFBQWEsRUFBRSxDQUFDO29CQUMzQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLGVBQWU7MkJBQ3pGLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVE7MkJBQ25GLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxXQUFXOzJCQUN6RixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxhQUFhLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssTUFBTSxFQUFFLENBQUM7d0JBQzdFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztvQkFDM0QsQ0FBQztnQkFDSCxDQUFDOztvQkFBTSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sVUFBVSxHQUFHLE1BQU0sa0NBQWtDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVO29CQUNoRyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxjQUFjO29CQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztnQkFDL0YsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGFBQWE7d0JBQ2xHLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDdkUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxNQUFNLEdBQUcsTUFBTSxxQ0FBcUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO29CQUNwRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVTt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7Z0JBQ2hHLENBQUM7Z0JBQ0QsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsZUFBZSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUSxHQUFHLENBQUM7b0JBQ3ZGLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLG9CQUFvQixHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEdBQUcsQ0FBQztvQkFDdkYsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNoRixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQ3RHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkYsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGlCQUFpQjtnQkFBRSxNQUFNLEtBQUssQ0FBQztZQUN4SCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRixNQUFNLE1BQU0sR0FBRyxNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxhQUFhO21CQUNqRCxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO29CQUNuRSxPQUFPLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQzttQkFDMUYsS0FBSyxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVM7bUJBQy9DLE1BQU0sRUFBRSxTQUFTLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSzttQkFDaEYsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNuRCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtFQUErRSxDQUFDLENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUM7SUFFRCxtR0FBbUc7SUFDNUYsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFFBQWdCLEVBQUUsUUFBZ0IsRUFDbkUsTUFBNEY7UUFDNUYsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO2dCQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNqSCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsdUNBQXVDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDM0gsSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVE7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO2dCQUNuSCxvQ0FBb0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsc0dBQXNHO2dCQUN0RyxvR0FBb0c7Z0JBQ3BHLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFVBQVU7dUJBQzdELE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNqRixNQUFNLElBQUksS0FBSyxDQUFDLGdGQUFnRixDQUFDLENBQUM7Z0JBQ3BHLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU87MkJBQ2pFLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxjQUFjOzJCQUMxRixPQUFPLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM1RixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7b0JBQ2pGLENBQUM7b0JBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSx1Q0FBdUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO3dCQUM1RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDO3FCQUN0RCxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGNBQWM7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO2dCQUNsRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO29CQUN0SCxNQUFNLE1BQU0sR0FBRyxNQUFNLHVDQUF1QyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDOUYsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLDhCQUE4QixDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUI7Z0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDeEgsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEQsSUFBSSxNQUFNLEVBQUUsUUFBUSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQWMsRUFBRSxDQUFDO1FBQzdCLElBQUksUUFBUTtZQUFFLElBQUksQ0FBQztnQkFBQyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxDQUFDO1FBQ25GLElBQUksTUFBTTtZQUFFLElBQUksQ0FBQztnQkFBQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUFDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFBQyxDQUFDO1FBQzlFLElBQUksTUFBTSxDQUFDLE1BQU07WUFBRSxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSw4Q0FBOEMsQ0FBQyxDQUFDO0lBQ3RHLENBQUM7Q0FDRiJ9
|