cnpmcore 4.11.1 → 4.13.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/app/common/AbstractService.d.ts +2 -2
- package/dist/app/common/AbstractService.js +2 -2
- package/dist/app/common/PackageUtil.js +2 -2
- package/dist/app/common/SyncUtil.d.ts +2 -2
- package/dist/app/common/SyncUtil.js +1 -1
- package/dist/app/common/adapter/BugVersionStore.js +2 -2
- package/dist/app/common/adapter/CacheAdapter.js +2 -2
- package/dist/app/common/adapter/NFSAdapter.js +3 -3
- package/dist/app/common/adapter/NPMRegistry.d.ts +11 -7
- package/dist/app/common/adapter/NPMRegistry.js +27 -11
- package/dist/app/common/adapter/binary/AbstractBinary.d.ts +3 -4
- package/dist/app/common/adapter/binary/AbstractBinary.js +3 -3
- package/dist/app/common/adapter/binary/ApiBinary.js +2 -2
- package/dist/app/common/adapter/binary/BucketBinary.js +3 -3
- package/dist/app/common/adapter/binary/ChromeForTestingBinary.js +2 -2
- package/dist/app/common/adapter/binary/CypressBinary.js +2 -2
- package/dist/app/common/adapter/binary/EdgedriverBinary.js +2 -2
- package/dist/app/common/adapter/binary/ElectronBinary.js +3 -3
- package/dist/app/common/adapter/binary/FirefoxBinary.js +3 -3
- package/dist/app/common/adapter/binary/GithubBinary.js +3 -3
- package/dist/app/common/adapter/binary/ImageminBinary.js +3 -3
- package/dist/app/common/adapter/binary/NodeBinary.js +3 -3
- package/dist/app/common/adapter/binary/NodePreGypBinary.js +3 -3
- package/dist/app/common/adapter/binary/NwjsBinary.js +2 -2
- package/dist/app/common/adapter/binary/PlaywrightBinary.js +42 -2
- package/dist/app/common/adapter/binary/PrismaBinary.js +3 -3
- package/dist/app/common/adapter/binary/PuppeteerBinary.js +2 -2
- package/dist/app/common/adapter/binary/SqlcipherBinary.js +2 -2
- package/dist/app/common/adapter/changesStream/AbstractChangesStream.d.ts +3 -4
- package/dist/app/common/adapter/changesStream/AbstractChangesStream.js +4 -4
- package/dist/app/common/adapter/changesStream/CnpmcoreChangesStream.js +5 -5
- package/dist/app/common/adapter/changesStream/CnpmjsorgChangesStream.js +4 -4
- package/dist/app/common/adapter/changesStream/NpmChangesStream.js +5 -5
- package/dist/app/common/aop/AsyncTimer.d.ts +1 -1
- package/dist/app/common/aop/AsyncTimer.js +3 -3
- package/dist/app/common/typing.d.ts +2 -2
- package/dist/app/core/entity/Task.js +1 -1
- package/dist/app/core/event/BugVersionFixHandler.js +2 -2
- package/dist/app/core/event/CacheCleaner.js +2 -2
- package/dist/app/core/event/ChangesStream.d.ts +2 -2
- package/dist/app/core/event/ChangesStream.js +2 -2
- package/dist/app/core/event/StoreManifest.d.ts +2 -2
- package/dist/app/core/event/StoreManifest.js +2 -2
- package/dist/app/core/event/SyncESPackage.d.ts +2 -2
- package/dist/app/core/event/SyncESPackage.js +3 -2
- package/dist/app/core/event/SyncPackageVersionFile.d.ts +3 -3
- package/dist/app/core/event/SyncPackageVersionFile.js +3 -3
- package/dist/app/core/event/TotalHandler.js +2 -2
- package/dist/app/core/event/index.d.ts +1 -2
- package/dist/app/core/event/index.js +1 -2
- package/dist/app/core/service/BinarySyncerService.d.ts +1 -1
- package/dist/app/core/service/BinarySyncerService.js +6 -6
- package/dist/app/core/service/BugVersionService.d.ts +18 -2
- package/dist/app/core/service/BugVersionService.js +30 -16
- package/dist/app/core/service/CacheService.js +2 -2
- package/dist/app/core/service/ChangesStreamService.js +3 -3
- package/dist/app/core/service/CreateHookTriggerService.js +2 -2
- package/dist/app/core/service/EventCorkerAdvice.d.ts +1 -1
- package/dist/app/core/service/EventCorkerAdvice.js +3 -3
- package/dist/app/core/service/FixNoPaddingVersionService.js +2 -2
- package/dist/app/core/service/HomeService.js +3 -3
- package/dist/app/core/service/HookManageService.js +3 -3
- package/dist/app/core/service/HookTriggerService.d.ts +1 -1
- package/dist/app/core/service/HookTriggerService.js +5 -5
- package/dist/app/core/service/PackageManagerService.d.ts +4 -4
- package/dist/app/core/service/PackageManagerService.js +41 -32
- package/dist/app/core/service/PackageSearchService.js +2 -2
- package/dist/app/core/service/PackageSyncerService.d.ts +9 -2
- package/dist/app/core/service/PackageSyncerService.js +465 -44
- package/dist/app/core/service/PackageVersionFileService.js +3 -3
- package/dist/app/core/service/PackageVersionService.js +2 -2
- package/dist/app/core/service/ProxyCacheService.d.ts +2 -2
- package/dist/app/core/service/ProxyCacheService.js +7 -7
- package/dist/app/core/service/RegistryManagerService.js +3 -3
- package/dist/app/core/service/ScopeManagerService.js +2 -2
- package/dist/app/core/service/TaskService.js +5 -2
- package/dist/app/core/service/TokenService.js +3 -3
- package/dist/app/core/service/UserService.js +3 -3
- package/dist/app/core/util/EntityUtil.js +1 -1
- package/dist/app/infra/AuthAdapter.d.ts +2 -2
- package/dist/app/infra/AuthAdapter.js +2 -2
- package/dist/app/infra/NFSClientAdapter.js +4 -3
- package/dist/app/infra/QueueAdapter.js +2 -2
- package/dist/app/infra/SearchAdapter.js +2 -2
- package/dist/app/port/UserRoleManager.d.ts +6 -7
- package/dist/app/port/UserRoleManager.js +3 -3
- package/dist/app/port/config.d.ts +9 -0
- package/dist/app/port/controller/AbstractController.d.ts +7 -8
- package/dist/app/port/controller/AbstractController.js +3 -3
- package/dist/app/port/controller/AccessController.js +3 -3
- package/dist/app/port/controller/BinarySyncController.d.ts +5 -5
- package/dist/app/port/controller/BinarySyncController.js +12 -12
- package/dist/app/port/controller/ChangesStreamController.d.ts +2 -2
- package/dist/app/port/controller/ChangesStreamController.js +4 -4
- package/dist/app/port/controller/DownloadController.js +3 -3
- package/dist/app/port/controller/HomeController.d.ts +4 -4
- package/dist/app/port/controller/HomeController.js +8 -8
- package/dist/app/port/controller/HookController.d.ts +6 -6
- package/dist/app/port/controller/HookController.js +12 -12
- package/dist/app/port/controller/PackageBlockController.d.ts +3 -3
- package/dist/app/port/controller/PackageBlockController.js +7 -7
- package/dist/app/port/controller/PackageSyncController.d.ts +4 -4
- package/dist/app/port/controller/PackageSyncController.js +10 -10
- package/dist/app/port/controller/PackageTagController.d.ts +3 -3
- package/dist/app/port/controller/PackageTagController.js +8 -13
- package/dist/app/port/controller/PackageVersionFileController.d.ts +4 -4
- package/dist/app/port/controller/PackageVersionFileController.js +9 -9
- package/dist/app/port/controller/ProxyCacheController.d.ts +2 -2
- package/dist/app/port/controller/ProxyCacheController.js +5 -5
- package/dist/app/port/controller/RegistryController.d.ts +5 -5
- package/dist/app/port/controller/RegistryController.js +11 -11
- package/dist/app/port/controller/ScopeController.d.ts +3 -3
- package/dist/app/port/controller/ScopeController.js +7 -7
- package/dist/app/port/controller/TokenController.d.ts +5 -5
- package/dist/app/port/controller/TokenController.js +11 -11
- package/dist/app/port/controller/UserController.d.ts +6 -6
- package/dist/app/port/controller/UserController.js +13 -13
- package/dist/app/port/controller/admin/PaddingVersionController.d.ts +2 -2
- package/dist/app/port/controller/admin/PaddingVersionController.js +4 -4
- package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +6 -6
- package/dist/app/port/controller/package/DownloadPackageVersionTar.js +13 -13
- package/dist/app/port/controller/package/RemovePackageVersionController.d.ts +3 -3
- package/dist/app/port/controller/package/RemovePackageVersionController.js +7 -7
- package/dist/app/port/controller/package/SavePackageVersionController.d.ts +2 -2
- package/dist/app/port/controller/package/SavePackageVersionController.js +5 -5
- package/dist/app/port/controller/package/SearchPackageController.d.ts +2 -2
- package/dist/app/port/controller/package/SearchPackageController.js +5 -5
- package/dist/app/port/controller/package/ShowPackageController.d.ts +2 -2
- package/dist/app/port/controller/package/ShowPackageController.js +4 -4
- package/dist/app/port/controller/package/ShowPackageVersionController.d.ts +2 -2
- package/dist/app/port/controller/package/ShowPackageVersionController.js +5 -5
- package/dist/app/port/controller/package/UpdatePackageController.d.ts +2 -2
- package/dist/app/port/controller/package/UpdatePackageController.js +5 -5
- package/dist/app/port/middleware/AdminAccess.d.ts +2 -2
- package/dist/app/port/middleware/AdminAccess.js +2 -2
- package/dist/app/port/middleware/AlwaysAuth.d.ts +2 -2
- package/dist/app/port/middleware/AlwaysAuth.js +1 -1
- package/dist/app/port/middleware/ErrorHandler.d.ts +2 -2
- package/dist/app/port/middleware/ErrorHandler.js +1 -1
- package/dist/app/port/middleware/Tracing.d.ts +1 -1
- package/dist/app/port/middleware/index.js +2 -2
- package/dist/app/port/schedule/ChangesStreamWorker.js +3 -3
- package/dist/app/port/schedule/CheckProxyCacheUpdateWorker.js +3 -3
- package/dist/app/port/schedule/CheckRecentlyUpdatedPackages.d.ts +1 -1
- package/dist/app/port/schedule/CheckRecentlyUpdatedPackages.js +6 -6
- package/dist/app/port/schedule/CleanTempDir.js +3 -3
- package/dist/app/port/schedule/CreateSyncBinaryTask.js +4 -4
- package/dist/app/port/schedule/CreateTriggerHookWorker.js +3 -3
- package/dist/app/port/schedule/SavePackageVersionDownloadCounter.js +3 -3
- package/dist/app/port/schedule/SyncBinaryWorker.js +3 -3
- package/dist/app/port/schedule/SyncPackageWorker.js +3 -3
- package/dist/app/port/schedule/SyncProxyCacheWorker.js +3 -3
- package/dist/app/port/schedule/TaskTimeoutHandler.js +3 -3
- package/dist/app/port/schedule/TriggerHookWorker.js +3 -3
- package/dist/app/port/schedule/UpdateTotalData.js +3 -3
- package/dist/app/port/typebox.d.ts +4 -4
- package/dist/app/port/typebox.js +7 -3
- package/dist/app/port/webauth/WebauthController.d.ts +1 -2
- package/dist/app/port/webauth/WebauthController.js +10 -10
- package/dist/app/repository/AbstractRepository.d.ts +2 -2
- package/dist/app/repository/AbstractRepository.js +2 -2
- package/dist/app/repository/BinaryRepository.js +2 -2
- package/dist/app/repository/ChangeRepository.js +2 -2
- package/dist/app/repository/DistRepository.js +2 -2
- package/dist/app/repository/HookRepository.js +2 -2
- package/dist/app/repository/PackageRepository.d.ts +1 -1
- package/dist/app/repository/PackageRepository.js +2 -2
- package/dist/app/repository/PackageVersionBlockRepository.js +2 -2
- package/dist/app/repository/PackageVersionDownloadRepository.js +2 -2
- package/dist/app/repository/PackageVersionFileRepository.js +2 -2
- package/dist/app/repository/PackageVersionRepository.d.ts +7 -0
- package/dist/app/repository/PackageVersionRepository.js +17 -2
- package/dist/app/repository/ProxyCacheRepository.js +2 -2
- package/dist/app/repository/RegistryRepository.js +2 -2
- package/dist/app/repository/ScopeRepository.js +2 -2
- package/dist/app/repository/SearchRepository.js +2 -2
- package/dist/app/repository/TaskRepository.js +2 -2
- package/dist/app/repository/TotalRepository.js +2 -2
- package/dist/app/repository/UserRepository.js +2 -2
- package/dist/app/repository/model/Binary.js +2 -2
- package/dist/app/repository/model/Change.js +2 -2
- package/dist/app/repository/model/Dist.js +2 -2
- package/dist/app/repository/model/HistoryTask.js +2 -2
- package/dist/app/repository/model/Hook.js +2 -2
- package/dist/app/repository/model/Maintainer.js +2 -2
- package/dist/app/repository/model/Package.js +2 -2
- package/dist/app/repository/model/PackageDep.js +2 -2
- package/dist/app/repository/model/PackageTag.js +2 -2
- package/dist/app/repository/model/PackageVersion.js +2 -2
- package/dist/app/repository/model/PackageVersionBlock.js +2 -2
- package/dist/app/repository/model/PackageVersionDownload.js +2 -2
- package/dist/app/repository/model/PackageVersionFile.js +2 -2
- package/dist/app/repository/model/PackageVersionManifest.js +2 -2
- package/dist/app/repository/model/ProxyCache.js +2 -2
- package/dist/app/repository/model/Registry.js +2 -2
- package/dist/app/repository/model/Scope.js +2 -2
- package/dist/app/repository/model/Task.js +2 -2
- package/dist/app/repository/model/Token.js +2 -2
- package/dist/app/repository/model/TokenPackage.js +2 -2
- package/dist/app/repository/model/Total.js +2 -2
- package/dist/app/repository/model/User.js +2 -2
- package/dist/app/repository/model/WebauthnCredential.js +2 -2
- package/dist/app/repository/util/EntityProperty.js +1 -2
- package/dist/app/repository/util/ModelConvertor.d.ts +1 -1
- package/dist/app/repository/util/ModelConvertor.js +2 -2
- package/dist/app/repository/util/ModelConvertorUtil.d.ts +1 -1
- package/dist/app/repository/util/ModelConvertorUtil.js +2 -2
- package/dist/app.js +2 -2
- package/dist/config/binaries.d.ts +7 -0
- package/dist/config/binaries.js +8 -1
- package/dist/config/config.default.js +4 -1
- package/dist/config/plugin.js +3 -33
- package/package.json +12 -20
|
@@ -10,11 +10,12 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
import os from 'node:os';
|
|
11
11
|
import { setTimeout } from 'node:timers/promises';
|
|
12
12
|
import { rm } from 'node:fs/promises';
|
|
13
|
-
import { AccessLevel, Inject, SingletonProto } from '
|
|
14
|
-
import { Pointcut } from '
|
|
13
|
+
import { AccessLevel, Inject, SingletonProto, HttpClient } from 'egg';
|
|
14
|
+
import { Pointcut } from 'egg/aop';
|
|
15
15
|
import { isEmpty, isEqual } from 'lodash-es';
|
|
16
16
|
import semver from 'semver';
|
|
17
|
-
import { BadRequestError } from 'egg
|
|
17
|
+
import { BadRequestError } from 'egg/errors';
|
|
18
|
+
import { Package as Packument } from '@cnpmjs/packument';
|
|
18
19
|
import { detectInstallScript, getScopeAndName, } from "../../common/PackageUtil.js";
|
|
19
20
|
import { downloadToTempfile } from "../../common/FileUtil.js";
|
|
20
21
|
import { TaskState, TaskType } from "../../common/enum/Task.js";
|
|
@@ -77,7 +78,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
77
78
|
logs.push(`[${isoNow()}][DownloadData] 🚧 HTTP [${status}] timing: ${JSON.stringify(res.timing)}, downloads: ${downloads.length}`);
|
|
78
79
|
}
|
|
79
80
|
catch (err) {
|
|
80
|
-
const status = err.status || '
|
|
81
|
+
const status = err.status || 'unknown';
|
|
81
82
|
logs.push(`[${isoNow()}][DownloadData] ❌ Get download data error: ${err}, status: ${status}`);
|
|
82
83
|
logs.push(`[${isoNow()}][DownloadData] ${failEnd}`);
|
|
83
84
|
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
@@ -120,7 +121,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
120
121
|
logId = data.logId;
|
|
121
122
|
}
|
|
122
123
|
catch (err) {
|
|
123
|
-
const status = err.status || '
|
|
124
|
+
const status = err.status || 'unknown';
|
|
124
125
|
// 可能会抛出 AggregateError 异常
|
|
125
126
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError
|
|
126
127
|
logs.push(`[${isoNow()}][UP] ❌ Sync ${fullname} fail, create sync task error: ${err}, status: ${status} ${err instanceof AggregateError ? err.errors : ''}`);
|
|
@@ -163,7 +164,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
163
164
|
}
|
|
164
165
|
catch (err) {
|
|
165
166
|
useTime = Date.now() - startTime;
|
|
166
|
-
const status = err.status || '
|
|
167
|
+
const status = err.status || 'unknown';
|
|
167
168
|
logs.push(`[${isoNow()}][UP] 🚧 HTTP [${status}] [${useTime}ms] error: ${err}`);
|
|
168
169
|
}
|
|
169
170
|
}
|
|
@@ -172,21 +173,33 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
172
173
|
logs.push(`[${isoNow()}][UP] ${failEnd}`);
|
|
173
174
|
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
174
175
|
}
|
|
175
|
-
isRemovedInRemote(
|
|
176
|
-
|
|
177
|
-
// deleted or blocked
|
|
178
|
-
if (status === 451) {
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
181
|
-
const hasMaintainers = data?.maintainers && data?.maintainers.length !== 0;
|
|
182
|
-
if (hasMaintainers) {
|
|
176
|
+
isRemovedInRemote(maintainers, time, versions) {
|
|
177
|
+
if (maintainers && maintainers.length > 0) {
|
|
183
178
|
return false;
|
|
184
179
|
}
|
|
185
180
|
// unpublished
|
|
186
|
-
|
|
187
|
-
|
|
181
|
+
// https://registry.npmjs.com/babel-plugin-autocss
|
|
182
|
+
// {
|
|
183
|
+
// "_id": "babel-plugin-autocss",
|
|
184
|
+
// "name": "babel-plugin-autocss",
|
|
185
|
+
// "time": {
|
|
186
|
+
// "created": "2021-10-29T08:21:56.032Z",
|
|
187
|
+
// "0.0.1": "2021-10-29T08:21:56.206Z",
|
|
188
|
+
// "modified": "2022-01-14T12:34:23.941Z",
|
|
189
|
+
// "unpublished": {
|
|
190
|
+
// "time": "2022-01-14T12:34:23.941Z",
|
|
191
|
+
// "versions": [
|
|
192
|
+
// "0.0.1"
|
|
193
|
+
// ]
|
|
194
|
+
// }
|
|
195
|
+
// }
|
|
196
|
+
// }
|
|
197
|
+
if (time?.unpublished) {
|
|
188
198
|
return true;
|
|
189
199
|
}
|
|
200
|
+
if (!versions) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
190
203
|
// security holder
|
|
191
204
|
// test/fixtures/registry.npmjs.org/security-holding-package.json
|
|
192
205
|
// {
|
|
@@ -207,7 +220,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
207
220
|
// "_attachments": {}
|
|
208
221
|
// }
|
|
209
222
|
let isSecurityHolder = true;
|
|
210
|
-
for (const versionInfo of Object.entries(
|
|
223
|
+
for (const versionInfo of Object.entries(versions)) {
|
|
211
224
|
const [v, info] = versionInfo;
|
|
212
225
|
// >=0.0.1-security <0.0.2-0
|
|
213
226
|
const isSecurityVersion = semver.satisfies(v, '^0.0.1-security');
|
|
@@ -231,10 +244,11 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
231
244
|
const fullname = task.targetName;
|
|
232
245
|
const failEnd = `❌❌❌❌❌ ${url || fullname} ❌❌❌❌❌`;
|
|
233
246
|
const syncDeleteMode = this.config.cnpmcore.syncDeleteMode;
|
|
234
|
-
|
|
247
|
+
const dataString = data.toString().substring(0, 1024);
|
|
248
|
+
logs.push(`[${isoNow()}] 🟢 Package "${fullname}" was removed in remote registry, response data: ${dataString}, config.syncDeleteMode = ${syncDeleteMode}`);
|
|
235
249
|
// pkg not exists in local registry
|
|
236
250
|
if (!pkg) {
|
|
237
|
-
task.error = `Package not exists, response data: ${
|
|
251
|
+
task.error = `Package not exists, response data: ${dataString}`;
|
|
238
252
|
logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
|
|
239
253
|
logs.push(`[${isoNow()}] ${failEnd}`);
|
|
240
254
|
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
@@ -322,7 +336,10 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
322
336
|
registry.name === PresetRegistryName.default);
|
|
323
337
|
const logUrl = `${this.config.cnpmcore.registry}/-/package/${fullname}/syncs/${task.taskId}/log`;
|
|
324
338
|
this.logger.info('[PackageSyncerService.executeTask:start] taskId: %s, targetName: %s, attempts: %s, taskQueue: %s/%s, syncUpstream: %s, log: %s', task.taskId, task.targetName, task.attempts, taskQueueLength, taskQueueHighWaterSize, syncUpstream, logUrl);
|
|
325
|
-
logs.push(`[${isoNow()}] 🚧🚧🚧🚧🚧 Syncing from ${registryHost}/${fullname},
|
|
339
|
+
logs.push(`[${isoNow()}] 🚧🚧🚧🚧🚧 Syncing from ${registryHost}/${fullname}, \
|
|
340
|
+
skipDependencies: ${skipDependencies}, syncUpstream: ${syncUpstream}, syncDownloadData: ${!!syncDownloadData}, \
|
|
341
|
+
forceSyncHistory: ${!!forceSyncHistory}, attempts: ${task.attempts}, worker: "${os.hostname()}/${process.pid}", \
|
|
342
|
+
taskQueue: ${taskQueueLength}/${taskQueueHighWaterSize} 🚧🚧🚧🚧🚧`);
|
|
326
343
|
if (specificVersions) {
|
|
327
344
|
logs.push(`[${isoNow()}] 👉 syncing specific versions: ${specificVersions.join(' | ')} 👈`);
|
|
328
345
|
}
|
|
@@ -333,7 +350,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
333
350
|
this.logger.info('[PackageSyncerService.executeTask:fail] taskId: %s, targetName: %s, invalid registryId', task.taskId, task.targetName);
|
|
334
351
|
return;
|
|
335
352
|
}
|
|
336
|
-
if (pkg && pkg
|
|
353
|
+
if (pkg && pkg.registryId !== registry.registryId) {
|
|
337
354
|
if (pkg.registryId) {
|
|
338
355
|
logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} registry is ${pkg.registryId} not belong to ${registry.registryId}, skip sync ❌❌❌❌❌`);
|
|
339
356
|
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
@@ -370,7 +387,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
370
387
|
}
|
|
371
388
|
let registryFetchResult;
|
|
372
389
|
try {
|
|
373
|
-
registryFetchResult = await this.npmRegistry.
|
|
390
|
+
registryFetchResult = await this.npmRegistry.getFullManifestsBuffer(fullname, {
|
|
374
391
|
remoteAuthToken,
|
|
375
392
|
});
|
|
376
393
|
}
|
|
@@ -383,13 +400,13 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
383
400
|
await this.taskService.retryTask(task, logs.join('\n'));
|
|
384
401
|
return;
|
|
385
402
|
}
|
|
386
|
-
const { url, data, headers, res, status } = registryFetchResult;
|
|
387
|
-
|
|
388
|
-
if (status >= 500 || !data) {
|
|
403
|
+
const { url: remoteUrl, data: remoteData, headers, res, status } = registryFetchResult;
|
|
404
|
+
if (status >= 500) {
|
|
389
405
|
// GET https://registry.npmjs.org/%40modern-js%2Fstyle-compiler?t=1683348626499&cache=0, status: 522
|
|
390
406
|
// registry will response status 522 and data will be null
|
|
391
407
|
// > TypeError: Cannot read properties of null (reading 'readme')
|
|
392
|
-
task.error = `request manifests response error, status: ${status}, data: ${
|
|
408
|
+
task.error = `request manifests response error, status: ${status}, data size: ${remoteData.length}, \
|
|
409
|
+
data sample: ${remoteData.subarray(0, 200).toString()}`;
|
|
393
410
|
logs.push(`[${isoNow()}] ❌ response headers: ${JSON.stringify(headers)}`);
|
|
394
411
|
logs.push(`[${isoNow()}] ❌ Synced ${fullname} fail, ${task.error}, log: ${logUrl}`);
|
|
395
412
|
logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
|
|
@@ -399,8 +416,8 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
399
416
|
}
|
|
400
417
|
if (status === 404) {
|
|
401
418
|
// ignore 404 status
|
|
402
|
-
// https://github.com/
|
|
403
|
-
task.error = `Package not found, status 404, data: ${
|
|
419
|
+
// https://github.com/cnpm/cnpmcore/issues/739
|
|
420
|
+
task.error = `Package not found, status 404, data size: ${remoteData.length}, data sample: ${remoteData.subarray(0, 200).toString()}`;
|
|
404
421
|
logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
|
|
405
422
|
logs.push(`[${isoNow()}] ❌ Synced ${fullname} fail, ${task.error}, log: ${logUrl}`);
|
|
406
423
|
logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
|
|
@@ -408,6 +425,29 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
408
425
|
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
409
426
|
return;
|
|
410
427
|
}
|
|
428
|
+
// deleted or blocked
|
|
429
|
+
if (status === 451) {
|
|
430
|
+
await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
logs.push(`[${isoNow()}] HTTP [${status}] body size: ${remoteData.length}, timing: ${JSON.stringify(res.timing)}`);
|
|
434
|
+
if (this.config.cnpmcore.experimental.syncPackageWithPackument && !this.config.cnpmcore.strictSyncSpecivicVersion) {
|
|
435
|
+
await this.syncPackageWithPackument({ task, remoteData, pkg, registry, logUrl, remoteUrl, logs });
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
let data;
|
|
439
|
+
try {
|
|
440
|
+
// @ts-expect-error JSON.parse accepts Buffer in Node.js, though TypeScript types don't reflect this
|
|
441
|
+
data = JSON.parse(remoteData);
|
|
442
|
+
}
|
|
443
|
+
catch (err) {
|
|
444
|
+
task.error = `parse manifest error: ${err}, data: ${remoteData.toString().substring(0, 1024)}`;
|
|
445
|
+
logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
|
|
446
|
+
logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
|
|
447
|
+
this.logger.info('[PackageSyncerService.executeTask:fail-parse-manifest] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
|
|
448
|
+
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
411
451
|
let readme = data.readme || '';
|
|
412
452
|
if (typeof readme !== 'string') {
|
|
413
453
|
readme = JSON.stringify(readme);
|
|
@@ -416,24 +456,22 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
416
456
|
// "created": "2021-03-27T12:30:23.891Z",
|
|
417
457
|
// "0.0.2": "2021-03-27T12:30:24.349Z",
|
|
418
458
|
// "modified": "2021-12-08T14:59:57.264Z",
|
|
419
|
-
const timeMap = data.time
|
|
420
|
-
const failEnd = `❌❌❌❌❌ ${
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
if (this.isRemovedInRemote(registryFetchResult)) {
|
|
424
|
-
await this.syncDeletePkg({ task, pkg, logs, logUrl, url, data });
|
|
459
|
+
const timeMap = (data.time ?? {});
|
|
460
|
+
const failEnd = `❌❌❌❌❌ ${remoteUrl || fullname} ❌❌❌❌❌`;
|
|
461
|
+
if (this.isRemovedInRemote(data.maintainers, timeMap, data.versions)) {
|
|
462
|
+
await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
|
|
425
463
|
return;
|
|
426
464
|
}
|
|
427
|
-
const versionMap = data.versions || {};
|
|
465
|
+
const versionMap = (data.versions || {});
|
|
428
466
|
const distTags = data['dist-tags'] || {};
|
|
429
467
|
// show latest information
|
|
430
468
|
if (distTags.latest) {
|
|
431
|
-
logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest
|
|
469
|
+
logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest}, published time: ${timeMap[distTags.latest]}`);
|
|
432
470
|
}
|
|
433
471
|
// 1. save maintainers
|
|
434
472
|
// maintainers: [
|
|
435
|
-
// { name: '
|
|
436
|
-
// { name: '
|
|
473
|
+
// { name: 'foo', email: 'foo@gmail.com' },
|
|
474
|
+
// { name: 'bar', email: 'bar.laster.11@gmail.com' }
|
|
437
475
|
// ],
|
|
438
476
|
let maintainers = data.maintainers;
|
|
439
477
|
const maintainersMap = {};
|
|
@@ -513,6 +551,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
513
551
|
logs.push(`[${isoNow()}] 📦 Add latest tag version "${fullname}: ${distTags.latest}"`);
|
|
514
552
|
specificVersions.push(distTags.latest);
|
|
515
553
|
}
|
|
554
|
+
// Get the list of versions to sync this time
|
|
516
555
|
const versions = specificVersions
|
|
517
556
|
? Object.values(versionMap).filter(verItem => specificVersions.includes(verItem.version))
|
|
518
557
|
: Object.values(versionMap);
|
|
@@ -546,6 +585,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
546
585
|
let syncIndex = 0;
|
|
547
586
|
for (const item of versions) {
|
|
548
587
|
const version = item.version;
|
|
588
|
+
// Skip empty versions, handle abnormal data
|
|
549
589
|
if (!version)
|
|
550
590
|
continue;
|
|
551
591
|
let existsItem = existsVersionMap[version];
|
|
@@ -612,10 +652,14 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
612
652
|
diffMeta.readme = undefined;
|
|
613
653
|
}
|
|
614
654
|
if (!isEmpty(diffMeta)) {
|
|
655
|
+
// Differences found, need to sync the changed metadata
|
|
615
656
|
differentMetas.push([existsItem, diffMeta]);
|
|
616
657
|
}
|
|
658
|
+
// Skip versions that have already been synced
|
|
659
|
+
// Avoid duplicate syncing
|
|
617
660
|
continue;
|
|
618
661
|
}
|
|
662
|
+
// New version found, start syncing
|
|
619
663
|
syncIndex++;
|
|
620
664
|
const description = item.description;
|
|
621
665
|
// "dist": {
|
|
@@ -639,7 +683,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
639
683
|
logs.push(`[${isoNow()}] 🚧 [${syncIndex}] Syncing version ${version}, delay: ${delay}ms [${publishTimeISO}], tarball: ${tarball}`);
|
|
640
684
|
let localFile;
|
|
641
685
|
try {
|
|
642
|
-
const { tmpfile, headers, timing } = await downloadToTempfile(this.
|
|
686
|
+
const { tmpfile, headers, timing } = await downloadToTempfile(this.httpClient, this.config.dataDir, tarball, { remoteAuthToken });
|
|
643
687
|
localFile = tmpfile;
|
|
644
688
|
logs.push(`[${isoNow()}] 🚧 [${syncIndex}] HTTP content-length: ${headers['content-length']}, timing: ${JSON.stringify(timing)} => ${localFile}`);
|
|
645
689
|
}
|
|
@@ -805,7 +849,7 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
805
849
|
}
|
|
806
850
|
}
|
|
807
851
|
// 3.2 should add latest tag
|
|
808
|
-
// 在同步
|
|
852
|
+
// 在同步 specific version 时如果没有同步 latestTag 的版本会出现 latestTag 丢失或指向版本不正确的情况
|
|
809
853
|
if (specificVersions && this.config.cnpmcore.strictSyncSpecivicVersion) {
|
|
810
854
|
// 不允许自动同步 latest 版本,从已同步版本中选出 latest
|
|
811
855
|
let latestStableVersion = semver.maxSatisfying(sortedAvailableVersions, '*');
|
|
@@ -879,7 +923,380 @@ let PackageSyncerService = class PackageSyncerService extends AbstractService {
|
|
|
879
923
|
await this.cacheService.removeCache(fullname);
|
|
880
924
|
logs.push(`[${isoNow()}] 🗑️ Clean cache`);
|
|
881
925
|
logs.push(`[${isoNow()}] 📝 Log URL: ${logUrl}`);
|
|
882
|
-
logs.push(`[${isoNow()}] 🔗 ${
|
|
926
|
+
logs.push(`[${isoNow()}] 🔗 ${remoteUrl}`);
|
|
927
|
+
task.error = lastErrorMessage;
|
|
928
|
+
this.logger.info('[PackageSyncerService.executeTask:success] taskId: %s, targetName: %s', task.taskId, task.targetName);
|
|
929
|
+
await this.taskService.finishTask(task, TaskState.Success, logs.join('\n'));
|
|
930
|
+
}
|
|
931
|
+
/**
|
|
932
|
+
* sync package with packument
|
|
933
|
+
* TODO:
|
|
934
|
+
* - [ ] support specificVersions
|
|
935
|
+
*/
|
|
936
|
+
async syncPackageWithPackument(options) {
|
|
937
|
+
let { task, remoteData, pkg, registry, logUrl, remoteUrl, logs } = options;
|
|
938
|
+
const fullname = task.targetName;
|
|
939
|
+
const { syncDownloadData, skipDependencies, forceSyncHistory } = task.data;
|
|
940
|
+
const [scope, name] = getScopeAndName(fullname);
|
|
941
|
+
let packument;
|
|
942
|
+
try {
|
|
943
|
+
packument = new Packument(remoteData);
|
|
944
|
+
}
|
|
945
|
+
catch (err) {
|
|
946
|
+
task.error = `parse packument error: ${err}, data: ${remoteData.toString().substring(0, 1024)}`;
|
|
947
|
+
logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
|
|
948
|
+
logs.push(`[${isoNow()}] ❌❌❌❌❌ ${fullname} ❌❌❌❌❌`);
|
|
949
|
+
this.logger.info('[PackageSyncerService.executeTask:fail-parse-packument] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
|
|
950
|
+
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
951
|
+
return;
|
|
952
|
+
}
|
|
953
|
+
let readme = packument.readme ?? '';
|
|
954
|
+
// "time": {
|
|
955
|
+
// "created": "2021-03-27T12:30:23.891Z",
|
|
956
|
+
// "0.0.2": "2021-03-27T12:30:24.349Z",
|
|
957
|
+
// "modified": "2021-12-08T14:59:57.264Z",
|
|
958
|
+
const timeMap = packument.time ?? {};
|
|
959
|
+
// maintainers: [
|
|
960
|
+
// { name: 'foo', email: 'foo@gmail.com' },
|
|
961
|
+
// { name: 'bar', email: 'bar.laster.11@gmail.com' }
|
|
962
|
+
// ],
|
|
963
|
+
let maintainers = (packument.maintainers ?? []);
|
|
964
|
+
// only maintainers is empty and package is unpublished, then delete the package
|
|
965
|
+
if (maintainers.length === 0 && packument.isUnpublished) {
|
|
966
|
+
await this.syncDeletePkg({ task, pkg, logs, logUrl, url: remoteUrl, data: remoteData });
|
|
967
|
+
return;
|
|
968
|
+
}
|
|
969
|
+
const failEnd = `❌❌❌❌❌ ${remoteUrl || fullname} ❌❌❌❌❌`;
|
|
970
|
+
const distTags = packument.distTags ?? {};
|
|
971
|
+
// show latest information
|
|
972
|
+
if (distTags.latest) {
|
|
973
|
+
logs.push(`[${isoNow()}] 📖 ${fullname} latest version: ${distTags.latest}, published time: ${timeMap[distTags.latest]}`);
|
|
974
|
+
}
|
|
975
|
+
// #region save maintainers
|
|
976
|
+
const maintainersMap = {};
|
|
977
|
+
const users = [];
|
|
978
|
+
let changedUserCount = 0;
|
|
979
|
+
if (maintainers.length === 0) {
|
|
980
|
+
const description = packument.description;
|
|
981
|
+
const repository = packument.repository;
|
|
982
|
+
// https://r.cnpmjs.org/webpack.js.org/sync/log/61dbc7c8ff747911a5701068
|
|
983
|
+
// https://registry.npmjs.org/webpack.js.org
|
|
984
|
+
// security holding package will not contains maintainers, auto set npm and npm@npmjs.com to maintainer
|
|
985
|
+
// "description": "security holding package",
|
|
986
|
+
// "repository": "npm/security-holder"
|
|
987
|
+
if (description === 'security holding package' ||
|
|
988
|
+
repository === 'npm/security-holder') {
|
|
989
|
+
maintainers = [{ name: 'npm', email: 'npm@npmjs.com' }];
|
|
990
|
+
}
|
|
991
|
+
else {
|
|
992
|
+
// try to use latest tag version's maintainers instead
|
|
993
|
+
const latestPackageVersion = packument.getLatestVersion();
|
|
994
|
+
if (latestPackageVersion &&
|
|
995
|
+
Array.isArray(latestPackageVersion.maintainers)) {
|
|
996
|
+
maintainers = latestPackageVersion.maintainers;
|
|
997
|
+
logs.push(`[${isoNow()}] 📖 Use the latest version(${latestPackageVersion.version}) maintainers instead`);
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
if (maintainers.length > 0) {
|
|
1002
|
+
logs.push(`[${isoNow()}] 🚧 Syncing maintainers: ${JSON.stringify(maintainers)}`);
|
|
1003
|
+
for (const maintainer of maintainers) {
|
|
1004
|
+
if (maintainer.name && maintainer.email) {
|
|
1005
|
+
maintainersMap[maintainer.name] = maintainer;
|
|
1006
|
+
const { changed, user } = await this.userService.saveUser(maintainer.name, maintainer.email, registry.userPrefix);
|
|
1007
|
+
users.push(user);
|
|
1008
|
+
if (changed) {
|
|
1009
|
+
changedUserCount++;
|
|
1010
|
+
logs.push(`[${isoNow()}] 🟢 [${changedUserCount}] Synced ${maintainer.name} => ${user.name}(${user.userId})`);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
// #endregion
|
|
1016
|
+
const firstUser = users[0];
|
|
1017
|
+
if (users.length === 0) {
|
|
1018
|
+
// check unpublished
|
|
1019
|
+
// https://r.cnpmjs.org/-/package/babel-plugin-autocss/syncs/61e4be46c7cbfac94d2ec597/log
|
|
1020
|
+
// {
|
|
1021
|
+
// "name": "babel-plugin-autocss",
|
|
1022
|
+
// "time": {
|
|
1023
|
+
// "created": "2021-10-29T08:21:56.032Z",
|
|
1024
|
+
// "0.0.1": "2021-10-29T08:21:56.206Z",
|
|
1025
|
+
// "modified": "2022-01-14T12:34:23.941Z",
|
|
1026
|
+
// "unpublished": {
|
|
1027
|
+
// "time": "2022-01-14T12:34:23.941Z",
|
|
1028
|
+
// "versions": [
|
|
1029
|
+
// "0.0.1"
|
|
1030
|
+
// ]
|
|
1031
|
+
// }
|
|
1032
|
+
// }
|
|
1033
|
+
// }
|
|
1034
|
+
// invalid maintainers, sync fail, should be a bug here
|
|
1035
|
+
task.error = `invalid maintainers: ${JSON.stringify(maintainers)}`;
|
|
1036
|
+
logs.push(`[${isoNow()}] ❌ ${task.error}, log: ${logUrl}`);
|
|
1037
|
+
logs.push(`[${isoNow()}] ${failEnd}`);
|
|
1038
|
+
this.logger.info('[PackageSyncerService.executeTask:fail-invalid-maintainers] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
|
|
1039
|
+
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
1040
|
+
return;
|
|
1041
|
+
}
|
|
1042
|
+
let lastErrorMessage = '';
|
|
1043
|
+
const dependenciesSet = new Set();
|
|
1044
|
+
let existsVersions = await this.packageVersionRepository.findAllVersions(scope, name);
|
|
1045
|
+
// remove all versions for force sync history, only allow by admin
|
|
1046
|
+
if (forceSyncHistory === true && pkg) {
|
|
1047
|
+
for (const version of existsVersions) {
|
|
1048
|
+
const pkgVer = await this.packageRepository.findPackageVersion(pkg.packageId, version);
|
|
1049
|
+
if (pkgVer) {
|
|
1050
|
+
logs.push(`[${isoNow()}] 🚧 Remove version ${version} for force sync history`);
|
|
1051
|
+
await this.packageManagerService.removePackageVersion(pkg, pkgVer, true);
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
existsVersions = [];
|
|
1055
|
+
}
|
|
1056
|
+
const existsVersionsSet = new Set(existsVersions);
|
|
1057
|
+
const diff = packument.diff(existsVersions);
|
|
1058
|
+
const totalVersionCount = existsVersions.length + diff.addedVersions.length - diff.removedVersions.length;
|
|
1059
|
+
logs.push(`[${isoNow()}] 🚧 Syncing versions ${existsVersions.length} => ${totalVersionCount}, ${diff.addedVersions.length} added, ${diff.removedVersions.length} removed`);
|
|
1060
|
+
const updateVersions = [];
|
|
1061
|
+
let syncIndex = 0;
|
|
1062
|
+
// #region sync added versions
|
|
1063
|
+
for (const [version, [offsetStart, offsetEnd]] of diff.addedVersions) {
|
|
1064
|
+
// @ts-expect-error JSON.parse accepts Buffer in Node.js, though TypeScript types don't reflect this
|
|
1065
|
+
const item = JSON.parse(remoteData.subarray(offsetStart, offsetEnd));
|
|
1066
|
+
// New version found, start syncing
|
|
1067
|
+
syncIndex++;
|
|
1068
|
+
const description = item.description;
|
|
1069
|
+
// "dist": {
|
|
1070
|
+
// "shasum": "943e0ec03df00ebeb6273a5b94b916ba54b47581",
|
|
1071
|
+
// "tarball": "https://registry.npmjs.org/foo/-/foo-1.0.0.tgz"
|
|
1072
|
+
// },
|
|
1073
|
+
const dist = item.dist;
|
|
1074
|
+
const tarball = dist?.tarball;
|
|
1075
|
+
if (!tarball) {
|
|
1076
|
+
lastErrorMessage = `missing tarball, dist: ${JSON.stringify(dist)}`;
|
|
1077
|
+
logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} fail, ${lastErrorMessage}`);
|
|
1078
|
+
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
1079
|
+
logs = [];
|
|
1080
|
+
continue;
|
|
1081
|
+
}
|
|
1082
|
+
const publishTimeISO = timeMap[version];
|
|
1083
|
+
const publishTime = publishTimeISO
|
|
1084
|
+
? new Date(publishTimeISO)
|
|
1085
|
+
: new Date();
|
|
1086
|
+
const delay = Date.now() - publishTime.getTime();
|
|
1087
|
+
logs.push(`[${isoNow()}] 🚧 [${syncIndex}] Syncing version ${version}, delay: ${delay}ms [${publishTimeISO}], tarball: ${tarball}`);
|
|
1088
|
+
let localFile;
|
|
1089
|
+
try {
|
|
1090
|
+
const { tmpfile, headers, timing } = await downloadToTempfile(this.httpClient, this.config.dataDir, tarball, { remoteAuthToken: registry.authToken });
|
|
1091
|
+
localFile = tmpfile;
|
|
1092
|
+
logs.push(`[${isoNow()}] 🚧 [${syncIndex}] HTTP content-length: ${headers['content-length']}, timing: ${JSON.stringify(timing)} => ${localFile}`);
|
|
1093
|
+
}
|
|
1094
|
+
catch (err) {
|
|
1095
|
+
if (err.name === 'DownloadNotFoundError' ||
|
|
1096
|
+
err.name === 'DownloadStatusInvalidError') {
|
|
1097
|
+
this.logger.warn('Download tarball %s error: %s', tarball, err);
|
|
1098
|
+
}
|
|
1099
|
+
else {
|
|
1100
|
+
this.logger.error('Download tarball %s error: %s', tarball, err);
|
|
1101
|
+
}
|
|
1102
|
+
lastErrorMessage = `download tarball error: ${err}`;
|
|
1103
|
+
logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} fail, ${lastErrorMessage}`);
|
|
1104
|
+
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
1105
|
+
logs = [];
|
|
1106
|
+
continue;
|
|
1107
|
+
}
|
|
1108
|
+
if (!pkg) {
|
|
1109
|
+
// try to read package entity again after first sync
|
|
1110
|
+
pkg = await this.packageRepository.findPackage(scope, name);
|
|
1111
|
+
}
|
|
1112
|
+
const publishCmd = {
|
|
1113
|
+
scope,
|
|
1114
|
+
name,
|
|
1115
|
+
version,
|
|
1116
|
+
description,
|
|
1117
|
+
packageJson: item,
|
|
1118
|
+
readme,
|
|
1119
|
+
registryId: registry.registryId,
|
|
1120
|
+
dist: {
|
|
1121
|
+
localFile,
|
|
1122
|
+
},
|
|
1123
|
+
isPrivate: false,
|
|
1124
|
+
publishTime,
|
|
1125
|
+
skipRefreshPackageManifests: true,
|
|
1126
|
+
};
|
|
1127
|
+
try {
|
|
1128
|
+
// if version record already exists, need to check if pkg.manifests exists
|
|
1129
|
+
const npmUserName = item._npmUser?.name;
|
|
1130
|
+
const publisher = (npmUserName && users.find(user => user.displayName === npmUserName)) || firstUser;
|
|
1131
|
+
const pkgVersion = await this.packageManagerService.publish(publishCmd, publisher);
|
|
1132
|
+
updateVersions.push(pkgVersion.version);
|
|
1133
|
+
logs.push(`[${isoNow()}] 🎉 [${syncIndex}] Synced version ${version} success, packageVersionId: ${pkgVersion.packageVersionId}, db id: ${pkgVersion.id}`);
|
|
1134
|
+
}
|
|
1135
|
+
catch (err) {
|
|
1136
|
+
if (err.name === 'ForbiddenError') {
|
|
1137
|
+
logs.push(`[${isoNow()}] 🐛 [${syncIndex}] Synced version ${version} already exists, skip publish, try to set in local manifest`);
|
|
1138
|
+
// if pkg.maintainers not exists, need to supplement it
|
|
1139
|
+
updateVersions.push(version);
|
|
1140
|
+
}
|
|
1141
|
+
else {
|
|
1142
|
+
err.taskId = task.taskId;
|
|
1143
|
+
this.logger.error(err);
|
|
1144
|
+
lastErrorMessage = `publish error: ${err}`;
|
|
1145
|
+
logs.push(`[${isoNow()}] ❌ [${syncIndex}] Synced version ${version} error, ${lastErrorMessage}`);
|
|
1146
|
+
if (err.name === 'BadRequestError') {
|
|
1147
|
+
// if current version's dependencies not satisfied, try to retry
|
|
1148
|
+
// will retry at the end of the current queue
|
|
1149
|
+
this.logger.info('[PackageSyncerService.executeTask:fail-validate-deps] taskId: %s, targetName: %s, %s', task.taskId, task.targetName, task.error);
|
|
1150
|
+
await this.taskService.retryTask(task, logs.join('\n'));
|
|
1151
|
+
return;
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
}
|
|
1155
|
+
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
1156
|
+
logs = [];
|
|
1157
|
+
await rm(localFile, { force: true });
|
|
1158
|
+
if (!skipDependencies) {
|
|
1159
|
+
const dependencies = item.dependencies || {};
|
|
1160
|
+
for (const dependencyName in dependencies) {
|
|
1161
|
+
dependenciesSet.add(dependencyName);
|
|
1162
|
+
}
|
|
1163
|
+
const optionalDependencies = item.optionalDependencies || {};
|
|
1164
|
+
for (const dependencyName in optionalDependencies) {
|
|
1165
|
+
dependenciesSet.add(dependencyName);
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
// #endregion
|
|
1170
|
+
// try to read package entity again after new versions sync
|
|
1171
|
+
if (!pkg) {
|
|
1172
|
+
pkg = await this.packageRepository.findPackage(scope, name);
|
|
1173
|
+
}
|
|
1174
|
+
if (!pkg?.id) {
|
|
1175
|
+
// sync all versions fail in the first time
|
|
1176
|
+
logs.push(`[${isoNow()}] ❌ All versions sync fail, package not exists, log: ${logUrl}`);
|
|
1177
|
+
logs.push(`[${isoNow()}] ${failEnd}`);
|
|
1178
|
+
task.error = lastErrorMessage;
|
|
1179
|
+
this.logger.info('[PackageSyncerService.executeTask:fail] taskId: %s, targetName: %s, package not exists', task.taskId, task.targetName);
|
|
1180
|
+
await this.taskService.finishTask(task, TaskState.Fail, logs.join('\n'));
|
|
1181
|
+
return;
|
|
1182
|
+
}
|
|
1183
|
+
// #region sync removed versions
|
|
1184
|
+
for (const version of diff.removedVersions) {
|
|
1185
|
+
const pkgVersion = await this.packageRepository.findPackageVersion(pkg.packageId, version);
|
|
1186
|
+
if (pkgVersion) {
|
|
1187
|
+
await this.packageManagerService.removePackageVersion(pkg, pkgVersion, true);
|
|
1188
|
+
logs.push(`[${isoNow()}] 🟢 Removed version ${version} success`);
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
logs.push(`[${isoNow()}] 🟢 Synced updated ${updateVersions.length} versions, removed ${diff.removedVersions.length} versions`);
|
|
1192
|
+
if (updateVersions.length > 0 || diff.removedVersions.length > 0) {
|
|
1193
|
+
logs.push(`[${isoNow()}] 🚧 Refreshing manifests to dists ......`);
|
|
1194
|
+
const start = Date.now();
|
|
1195
|
+
await this.taskService.appendTaskLog(task, logs.join('\n'));
|
|
1196
|
+
logs = [];
|
|
1197
|
+
await this.packageManagerService.refreshPackageChangeVersionsToDists(pkg, updateVersions, diff.removedVersions);
|
|
1198
|
+
logs.push(`[${isoNow()}] 🟢 Refresh use ${Date.now() - start}ms`);
|
|
1199
|
+
}
|
|
1200
|
+
// #endregion
|
|
1201
|
+
// #region update tags
|
|
1202
|
+
// "dist-tags": {
|
|
1203
|
+
// "latest": "0.0.7"
|
|
1204
|
+
// },
|
|
1205
|
+
const changedTags = [];
|
|
1206
|
+
const existsDistTags = await this.packageManagerService.distTags(pkg);
|
|
1207
|
+
let shouldRefreshDistTags = false;
|
|
1208
|
+
for (const tag in distTags) {
|
|
1209
|
+
const version = distTags[tag];
|
|
1210
|
+
const utf8mb3Regex = /[\u0020-\uD7FF\uE000-\uFFFD]/;
|
|
1211
|
+
if (!utf8mb3Regex.test(tag)) {
|
|
1212
|
+
logs.push(`[${isoNow()}] 🚧 invalid tag(${tag}: ${version}), tag name is out of utf8mb3, skip`);
|
|
1213
|
+
continue;
|
|
1214
|
+
}
|
|
1215
|
+
// new tag's version is not exists in exists versions and update versions
|
|
1216
|
+
// e.g: if latest version's version write failed, skip it
|
|
1217
|
+
if (!existsVersionsSet.has(version) && !updateVersions.includes(version)) {
|
|
1218
|
+
logs.push(`[${isoNow()}] 🚧 invalid tag(${tag}: ${version}), version is not exists, skip`);
|
|
1219
|
+
continue;
|
|
1220
|
+
}
|
|
1221
|
+
const changed = await this.packageManagerService.savePackageTag(pkg, tag, version);
|
|
1222
|
+
if (changed) {
|
|
1223
|
+
changedTags.push({ action: 'change', tag, version });
|
|
1224
|
+
shouldRefreshDistTags = false;
|
|
1225
|
+
}
|
|
1226
|
+
else if (version !== existsDistTags[tag]) {
|
|
1227
|
+
shouldRefreshDistTags = true;
|
|
1228
|
+
logs.push(`[${isoNow()}] 🚧 Remote tag(${tag}: ${version}) not exists in local dist-tags`);
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
// find out remove tags
|
|
1232
|
+
for (const tag in existsDistTags) {
|
|
1233
|
+
if (!(tag in distTags)) {
|
|
1234
|
+
const changed = await this.packageManagerService.removePackageTag(pkg, tag);
|
|
1235
|
+
if (changed) {
|
|
1236
|
+
changedTags.push({ action: 'remove', tag });
|
|
1237
|
+
shouldRefreshDistTags = false;
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
if (changedTags.length > 0) {
|
|
1242
|
+
logs.push(`[${isoNow()}] 🟢 Synced ${changedTags.length} tags: ${JSON.stringify(changedTags)}`);
|
|
1243
|
+
}
|
|
1244
|
+
if (shouldRefreshDistTags) {
|
|
1245
|
+
await this.packageManagerService.refreshPackageDistTagsToDists(pkg);
|
|
1246
|
+
logs.push(`[${isoNow()}] 🟢 Refresh dist-tags`);
|
|
1247
|
+
}
|
|
1248
|
+
// #endregion
|
|
1249
|
+
// #region update package maintainers
|
|
1250
|
+
const hasNewMaintainers = await this.packageManagerService.savePackageMaintainers(pkg, users);
|
|
1251
|
+
// find out remove maintainers
|
|
1252
|
+
const removedMaintainers = [];
|
|
1253
|
+
const existsMaintainers = await this.packageManagerService.maintainers(pkg);
|
|
1254
|
+
for (const maintainer of existsMaintainers) {
|
|
1255
|
+
const { name } = maintainer;
|
|
1256
|
+
if (!(name in maintainersMap)) {
|
|
1257
|
+
const user = await this.userRepository.findUserByName(`${registry.userPrefix || 'npm:'}${name}`);
|
|
1258
|
+
if (user) {
|
|
1259
|
+
await this.packageManagerService.removePackageMaintainer(pkg, user);
|
|
1260
|
+
removedMaintainers.push(maintainer);
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
if (removedMaintainers.length > 0) {
|
|
1265
|
+
logs.push(`[${isoNow()}] 🟢 Removed ${removedMaintainers.length} maintainers: ${JSON.stringify(removedMaintainers)}`);
|
|
1266
|
+
}
|
|
1267
|
+
// update package maintainers in dist
|
|
1268
|
+
// The event is initialized in the repository and distributed after uncork.
|
|
1269
|
+
// maintainers' information is updated in bulk to ensure consistency.
|
|
1270
|
+
if (hasNewMaintainers || removedMaintainers.length > 0) {
|
|
1271
|
+
logs.push(`[${isoNow()}] 🚧 Syncing maintainers to package manifest, from: ${JSON.stringify(maintainers)} to: ${JSON.stringify(existsMaintainers)}`);
|
|
1272
|
+
await this.packageManagerService.refreshPackageMaintainersToDists(pkg);
|
|
1273
|
+
logs.push(`[${isoNow()}] 🟢 Syncing maintainers to package manifest done`);
|
|
1274
|
+
}
|
|
1275
|
+
// #endregion
|
|
1276
|
+
// #region add deps sync task
|
|
1277
|
+
for (const dependencyName of dependenciesSet) {
|
|
1278
|
+
const existsTask = await this.taskRepository.findTaskByTargetName(dependencyName, TaskType.SyncPackage, TaskState.Waiting);
|
|
1279
|
+
if (existsTask) {
|
|
1280
|
+
logs.push(`[${isoNow()}] 📖 Has dependency "${dependencyName}" sync task: ${existsTask.taskId}, db id: ${existsTask.id}`);
|
|
1281
|
+
continue;
|
|
1282
|
+
}
|
|
1283
|
+
const tips = `Sync cause by "${fullname}" dependencies, parent task: ${task.taskId}`;
|
|
1284
|
+
const dependencyTask = await this.createTask(dependencyName, {
|
|
1285
|
+
authorId: task.authorId,
|
|
1286
|
+
authorIp: task.authorIp,
|
|
1287
|
+
tips,
|
|
1288
|
+
});
|
|
1289
|
+
logs.push(`[${isoNow()}] 📦 Add dependency "${dependencyName}" sync task: ${dependencyTask.taskId}, db id: ${dependencyTask.id}`);
|
|
1290
|
+
}
|
|
1291
|
+
// #endregion
|
|
1292
|
+
if (syncDownloadData) {
|
|
1293
|
+
await this.syncDownloadData(task, pkg);
|
|
1294
|
+
}
|
|
1295
|
+
// clean cache
|
|
1296
|
+
await this.cacheService.removeCache(fullname);
|
|
1297
|
+
logs.push(`[${isoNow()}] 🗑️ Clean cache`);
|
|
1298
|
+
logs.push(`[${isoNow()}] 📝 Log URL: ${logUrl}`);
|
|
1299
|
+
logs.push(`[${isoNow()}] 🔗 ${remoteUrl}`);
|
|
883
1300
|
task.error = lastErrorMessage;
|
|
884
1301
|
this.logger.info('[PackageSyncerService.executeTask:success] taskId: %s, targetName: %s', task.taskId, task.targetName);
|
|
885
1302
|
await this.taskService.finishTask(task, TaskState.Success, logs.join('\n'));
|
|
@@ -897,6 +1314,10 @@ __decorate([
|
|
|
897
1314
|
Inject(),
|
|
898
1315
|
__metadata("design:type", Function)
|
|
899
1316
|
], PackageSyncerService.prototype, "packageVersionDownloadRepository", void 0);
|
|
1317
|
+
__decorate([
|
|
1318
|
+
Inject(),
|
|
1319
|
+
__metadata("design:type", Function)
|
|
1320
|
+
], PackageSyncerService.prototype, "packageVersionRepository", void 0);
|
|
900
1321
|
__decorate([
|
|
901
1322
|
Inject(),
|
|
902
1323
|
__metadata("design:type", Function)
|
|
@@ -923,8 +1344,8 @@ __decorate([
|
|
|
923
1344
|
], PackageSyncerService.prototype, "cacheService", void 0);
|
|
924
1345
|
__decorate([
|
|
925
1346
|
Inject(),
|
|
926
|
-
__metadata("design:type",
|
|
927
|
-
], PackageSyncerService.prototype, "
|
|
1347
|
+
__metadata("design:type", HttpClient)
|
|
1348
|
+
], PackageSyncerService.prototype, "httpClient", void 0);
|
|
928
1349
|
__decorate([
|
|
929
1350
|
Inject(),
|
|
930
1351
|
__metadata("design:type", Function)
|
|
@@ -945,4 +1366,4 @@ PackageSyncerService = __decorate([
|
|
|
945
1366
|
})
|
|
946
1367
|
], PackageSyncerService);
|
|
947
1368
|
export { PackageSyncerService };
|
|
948
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVN5bmNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1BhY2thZ2VTeW5jZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNN0MsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFTbEUsT0FBTyxFQUdMLElBQUksR0FDTCxNQUFNLG1CQUFtQixDQUFDO0FBVTNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFXL0UsU0FBUyxNQUFNO0lBQ2IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxD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
|
|
1369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVN5bmNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1BhY2thZ2VTeW5jZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDdEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxJQUFJLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTXpELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBV2xFLE9BQU8sRUFHTCxJQUFJLEdBQ0wsTUFBTSxtQkFBbUIsQ0FBQztBQVUzQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVy9FLFNBQVMsTUFBTTtJQUNiLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGVBQWU7Q0FBRztBQUt0RCxJQUFNLG9CQUFvQixHQUExQixNQUFNLG9CQUFxQixTQUFRLGVBQWU7SUE0QmhELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxPQUFnQztRQUN4RSxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLDZEQUE2RDtRQUM3RCxJQUNFLEdBQUc7WUFDSCxHQUFHLENBQUMsVUFBVTtZQUNkLE9BQU8sRUFBRSxVQUFVO1lBQ25CLEdBQUcsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLFVBQVUsRUFDckMsQ0FBQztZQUNELE1BQU0sSUFBSSxxQkFBcUIsQ0FDN0IsV0FBVyxRQUFRLHVCQUF1QixPQUFPLENBQUMsVUFBVSxFQUFFLENBQy9ELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUN6QyxJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQWM7UUFDbEMsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVU7UUFDakMsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUMxQixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDNUMsUUFBUSxDQUFDLFdBQVcsQ0FDckIsQ0FBMEIsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxxQkFBcUI7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFDRSxNQUFNLENBQUMsc0JBQXNCO1lBQzdCLE1BQU0sQ0FBQyw4QkFBOEI7WUFDckMsTUFBTSxDQUFDLHVCQUF1QixFQUM5QixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQVUsRUFBRSxHQUFZO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDO1FBQ3JFLE1BQU0sZUFBZSxHQUNuQixNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7UUFDMUIsSUFBSSxTQUErQyxDQUFDO1FBRXBELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsdUNBQXVDLFFBQVEsb0JBQW9CLEtBQUssSUFBSSxHQUFHLFFBQVEsUUFBUSxhQUFhLENBQ3pILENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRywyQkFBMkIsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQ3BFLFFBQVEsRUFDUixRQUFRLEVBQ1IsS0FBSyxFQUNMLEdBQUcsRUFDSCxFQUFFLGVBQWUsRUFBRSxDQUNwQixDQUFDO1lBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsNEJBQTRCLE1BQU0sYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FDeEgsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSw4Q0FBOEMsR0FBRyxhQUFhLE1BQU0sRUFBRSxDQUNuRixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxtQkFBbUIsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztRQUNwRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzdCLElBQUk7WUFDSix5QkFBeUI7WUFDekIsb0JBQW9CO1lBQ3BCLEtBQUs7WUFDTCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3JCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLG1FQUFtRTtZQUNuRSxRQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsbUJBQW1CLENBQzdELEdBQUcsQ0FBQyxTQUFTLEVBQ2IsU0FBUyxFQUNULFFBQVEsQ0FDVCxDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxzQkFBc0IsU0FBUyxLQUFLLFFBQVEsQ0FBQyxNQUFNLE9BQU8sQ0FDdkUsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLDhCQUE4QixRQUFRLElBQUksUUFBUSxhQUFhLENBQzVFLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBVTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUMzQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLE1BQU0sZUFBZSxHQUNuQixNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxJQUFJLElBQUksR0FBYSxFQUFFLENBQUM7UUFDeEIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxrQ0FBa0MsUUFBUSxhQUFhLFFBQVEsYUFBYSxDQUN6RixDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsY0FBYyxRQUFRLElBQUksUUFBUSxzQkFBc0IsQ0FBQztRQUN6RSxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUNqRSxRQUFRLEVBQ1IsRUFBRSxlQUFlLEVBQUUsQ0FDcEIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsa0JBQWtCLE1BQU0sYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQzdHLENBQUM7WUFDRixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO1lBQ3ZDLDBCQUEwQjtZQUMxQixrR0FBa0c7WUFDbEcsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxnQkFBZ0IsUUFBUSxrQ0FBa0MsR0FBRyxhQUFhLE1BQU0sSUFBSSxHQUFHLFlBQVksY0FBYyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbEosQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsU0FBUyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsZ0JBQWdCLFFBQVEsc0JBQXNCLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUM7UUFDbEUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDckMsT0FBTyxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDNUIsMEJBQTBCO1lBQzFCLE1BQU0sS0FBSyxHQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztZQUN0RSxNQUFNLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FDOUQsUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sRUFBRSxlQUFlLEVBQUUsQ0FDcEIsQ0FBQztnQkFDRixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNaLE1BQU0sR0FBRyxHQUFHLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDckIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGlCQUFpQixRQUFRLGFBQWEsT0FBTyxhQUFhLE1BQU0sYUFBYSxNQUFNLEVBQUUsQ0FDbEcsQ0FBQztvQkFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLFlBQVksUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQzFELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsT0FBTztnQkFDVCxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsa0JBQWtCLE1BQU0sTUFBTSxPQUFPLGdCQUFnQixNQUFNLEVBQUUsQ0FDMUUsQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVELElBQUksR0FBRyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDakMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsa0JBQWtCLE1BQU0sTUFBTSxPQUFPLGNBQWMsR0FBRyxFQUFFLENBQ3JFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELFVBQVU7UUFDVixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGdCQUFnQixRQUFRLHdCQUF3QixNQUFNLGFBQWEsTUFBTSxFQUFFLENBQ3hGLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQTBCLEVBQUUsSUFBNkIsRUFBRSxRQUE4QjtRQUNqSCxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELGNBQWM7UUFDZCxrREFBa0Q7UUFDbEQsSUFBSTtRQUNKLG1DQUFtQztRQUNuQyxvQ0FBb0M7UUFDcEMsY0FBYztRQUNkLDZDQUE2QztRQUM3QywyQ0FBMkM7UUFDM0MsOENBQThDO1FBQzlDLHVCQUF1QjtRQUN2Qiw0Q0FBNEM7UUFDNUMsc0JBQXNCO1FBQ3RCLGtCQUFrQjtRQUNsQixVQUFVO1FBQ1YsUUFBUTtRQUNSLE1BQU07UUFDTixJQUFJO1FBQ0osSUFBSSxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLGlFQUFpRTtRQUNqRSxJQUFJO1FBQ0osa0JBQWtCO1FBQ2xCLGtEQUFrRDtRQUNsRCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLDhDQUE4QztRQUM5Qyw2Q0FBNkM7UUFDN0MsMkNBQTJDO1FBQzNDLDJDQUEyQztRQUMzQyxvREFBb0Q7UUFDcEQsdUJBQXVCO1FBQ3ZCLDRDQUE0QztRQUM1Qyx1QkFBdUI7UUFDdkIsUUFBUTtRQUNSLE9BQU87UUFDUCx1QkFBdUI7UUFDdkIsSUFBSTtRQUNKLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLEtBQUssTUFBTSxXQUFXLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBa0MsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNwRixNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUM5Qiw0QkFBNEI7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUNqRCxJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixNQUFNO1lBQ1IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsNkNBQTZDO0lBQzdDLG1EQUFtRDtJQUNuRCxvRkFBb0Y7SUFDcEYsOEJBQThCO0lBQzlCLDBCQUEwQjtJQUMxQixpQ0FBaUM7SUFDakMsb0NBQW9DO0lBQzVCLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDMUIsSUFBSSxFQUNKLEdBQUcsRUFDSCxNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDSixJQUFJLEdBQ2lCO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsU0FBUyxHQUFHLElBQUksUUFBUSxRQUFRLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUMzRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGlCQUFpQixRQUFRLG9EQUFvRCxVQUFVLDZCQUE2QixjQUFjLEVBQUUsQ0FDakosQ0FBQztRQUVGLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsS0FBSyxHQUFHLHNDQUFzQyxVQUFVLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLDRFQUE0RSxFQUM1RSxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLGNBQWMsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsdURBQXVELENBQ3BFLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxjQUFjLEtBQUssY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25ELHdCQUF3QjtZQUN4QixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQzNDLEdBQUcsRUFDSCw0QkFBNEIsQ0FDN0IsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsNERBQTRELENBQ3pFLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxjQUFjLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BELGlCQUFpQjtZQUNqQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLDhEQUE4RCxDQUMzRSxDQUFDO1FBQ0osQ0FBQztRQUVELGFBQWE7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLGlCQUFpQixNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLDhFQUE4RSxFQUM5RSxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGtEQUFrRDtJQUNsRCw0Q0FBNEM7SUFDNUMsK0NBQStDO0lBQy9DLHdEQUF3RDtJQUNqRCxLQUFLLENBQUMsZ0JBQWdCLENBQzNCLElBQVUsRUFDVixNQUFzQixJQUFJLEVBQzFCLEtBQWM7UUFFZCxNQUFNLFVBQVUsR0FDZCxHQUFHLEVBQUUsVUFBVSxJQUFLLElBQUksQ0FBQyxJQUErQixDQUFDLFVBQVUsQ0FBQztRQUN0RSxJQUFJLFVBQVUsR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDN0QsSUFBSSxRQUFRLEdBQW9CLElBQUksQ0FBQztRQUVyQyxrQ0FBa0M7UUFDbEMsNEJBQTRCO1FBQzVCLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUUsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BFLElBQUksVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO2dCQUMzQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQzNELFVBQVUsRUFBRSxVQUFVLENBQ3ZCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RSxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLHlCQUF5QjtRQUN6QixJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0MsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCwrQkFBK0I7SUFDL0IsNkNBQTZDO0lBQzdDLDZDQUE2QztJQUM3QyxrQ0FBa0M7SUFFckIsQUFBTixLQUFLLENBQUMsV0FBVyxDQUFDLElBQVU7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLEVBQ0osSUFBSSxFQUNKLGdCQUFnQixFQUFFLHNCQUFzQixFQUN4QyxnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixHQUFHLElBQUksQ0FBQyxJQUE4QixDQUFDO1FBQ3hDLElBQUksR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUMvQyxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQzNDLElBQUksSUFBSSxHQUFhLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxzQkFBc0IsSUFBSSxhQUFhLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUMvRCxJQUFJLENBQUMsSUFBSSxDQUNWLENBQUM7UUFDRixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDO1FBQzNFLE1BQU0seUJBQXlCLEdBQUcsZUFBZSxJQUFJLHNCQUFzQixDQUFDO1FBQzVFLE1BQU0sZ0JBQWdCLEdBQUcseUJBQXlCO1lBQ2hELENBQUMsQ0FBQyxJQUFJO1lBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FDckIsQ0FBQyx5QkFBeUI7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CO1lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQjtZQUN0QyxRQUFRLENBQUMsSUFBSSxLQUFLLGtCQUFrQixDQUFDLE9BQU8sQ0FDN0MsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxjQUFjLFFBQVEsVUFBVSxJQUFJLENBQUMsTUFBTSxNQUFNLENBQUM7UUFDakcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsZ0lBQWdJLEVBQ2hJLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsUUFBUSxFQUNiLGVBQWUsRUFDZixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLE1BQU0sQ0FDUCxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSw2QkFBNkIsWUFBWSxJQUFJLFFBQVE7b0JBQ25ELGdCQUFnQixtQkFBbUIsWUFBWSx1QkFBdUIsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDeEYsQ0FBQyxDQUFDLGdCQUFnQixlQUFlLElBQUksQ0FBQyxRQUFRLGNBQWMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHO2FBQy9GLGVBQWUsSUFBSSxzQkFBc0IsYUFBYSxDQUM5RCxDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsbUNBQW1DLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUNqRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsYUFBYSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFdBQVcsUUFBUSwyREFBMkQsQ0FDM0YsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHdGQUF3RixFQUN4RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xELElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFdBQVcsUUFBUSxnQkFBZ0IsR0FBRyxDQUFDLFVBQVUsa0JBQWtCLFFBQVEsQ0FBQyxVQUFVLG1CQUFtQixDQUN0SCxDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQy9CLElBQUksRUFDSixTQUFTLENBQUMsSUFBSSxFQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2hCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsd0ZBQXdGLEVBQ3hGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztnQkFDRixPQUFPO1lBQ1QsQ0FBQztZQUNELHNCQUFzQjtZQUN0QixrQ0FBa0M7WUFDbEMsY0FBYztZQUNkLEdBQUcsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNyQyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksZ0JBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsYUFBYSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsc0JBQXNCLFFBQVEsb0NBQW9DLENBQy9FLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUMvQixJQUFJLEVBQ0osU0FBUyxDQUFDLE9BQU8sRUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDaEIsQ0FBQztZQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHVFQUF1RSxFQUN2RSxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixpRUFBaUU7WUFDakUsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsNEJBQTRCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxXQUFXLFFBQVEsUUFBUSxDQUFDLENBQUM7WUFDbkQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsbUZBQW1GLEVBQ25GLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksbUJBQTZDLENBQUM7UUFDbEQsSUFBSSxDQUFDO1lBQ0gsbUJBQW1CLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtnQkFDNUUsZUFBZTthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsNEJBQTRCLEdBQUcsYUFBYSxNQUFNLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGNBQWMsUUFBUSxVQUFVLElBQUksQ0FBQyxLQUFLLFVBQVUsTUFBTSxFQUFFLENBQ3pFLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLFdBQVcsUUFBUSxRQUFRLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxzRkFBc0YsRUFDdEYsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUN2RixJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNsQixvR0FBb0c7WUFDcEcsMERBQTBEO1lBQzFELGlFQUFpRTtZQUNqRSxJQUFJLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxNQUFNLGdCQUFnQixVQUFVLENBQUMsTUFBTTtlQUN4RixVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUseUJBQXlCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDL0QsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsY0FBYyxRQUFRLFVBQVUsSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FDekUsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsV0FBVyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHNGQUFzRixFQUN0RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbkIsb0JBQW9CO1lBQ3BCLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLDZDQUE2QyxVQUFVLENBQUMsTUFBTSxrQkFBa0IsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUN0SSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsY0FBYyxRQUFRLFVBQVUsSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FDekUsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsV0FBVyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHNGQUFzRixFQUN0RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTztRQUNULENBQUM7UUFDRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDeEYsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFdBQVcsTUFBTSxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN4RyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2xILE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNsRyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBeUIsQ0FBQztRQUM5QixJQUFJLENBQUM7WUFDSCxvR0FBb0c7WUFDcEcsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLHlCQUF5QixHQUFHLFdBQVcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsV0FBVyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHVGQUF1RixFQUN2RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxZQUFZO1FBQ1osMkNBQTJDO1FBQzNDLHlDQUF5QztRQUN6Qyw0Q0FBNEM7UUFDNUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBc0MsQ0FBQztRQUN2RSxNQUFNLE9BQU8sR0FBRyxTQUFTLFNBQVMsSUFBSSxRQUFRLFFBQVEsQ0FBQztRQUV2RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN4RixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQW9DLENBQUM7UUFDNUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV6QywwQkFBMEI7UUFDMUIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxRQUFRLFFBQVEsb0JBQW9CLFFBQVEsQ0FBQyxNQUFNLHFCQUFxQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQy9HLENBQUM7UUFDSixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQiw2Q0FBNkM7UUFDN0Msc0RBQXNEO1FBQ3RELEtBQUs7UUFDTCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25DLE1BQU0sY0FBYyxHQUErQixFQUFFLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUQsd0VBQXdFO1lBQ3hFLDRDQUE0QztZQUM1Qyx1R0FBdUc7WUFDdkcsNkNBQTZDO1lBQzdDLHNDQUFzQztZQUN0QyxJQUNFLElBQUksQ0FBQyxXQUFXLEtBQUssMEJBQTBCO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxLQUFLLHFCQUFxQixFQUN6QyxDQUFDO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQzdELFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixzREFBc0Q7Z0JBQ3RELE1BQU0sb0JBQW9CLEdBQ3hCLFFBQVEsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakQsSUFDRSxvQkFBb0I7b0JBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQy9DLENBQUM7b0JBQ0QsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQTJCLENBQUM7b0JBQy9ELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsK0JBQStCLG9CQUFvQixDQUFDLE9BQU8sdUJBQXVCLENBQy9GLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSw2QkFBNkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUN2RSxDQUFDO1lBQ0YsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FDdkQsVUFBVSxDQUFDLElBQUksRUFDZixVQUFVLENBQUMsS0FBSyxFQUNoQixRQUFRLENBQUMsVUFBVSxDQUNwQixDQUFDO29CQUNGLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ1osZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLGdCQUFnQixZQUFZLFVBQVUsQ0FBQyxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQ25HLENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsb0JBQW9CO1lBQ3BCLHlGQUF5RjtZQUN6RixJQUFJO1lBQ0osb0NBQW9DO1lBQ3BDLGNBQWM7WUFDZCw2Q0FBNkM7WUFDN0MsMkNBQTJDO1lBQzNDLDhDQUE4QztZQUM5Qyx1QkFBdUI7WUFDdkIsNENBQTRDO1lBQzVDLHNCQUFzQjtZQUN0QixrQkFBa0I7WUFDbEIsVUFBVTtZQUNWLFFBQVE7WUFDUixNQUFNO1lBQ04sSUFBSTtZQUVKLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLHdCQUF3QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLFVBQVUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCw0RkFBNEYsRUFDNUYsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMxQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUN4QixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekUsTUFBTSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxHQUNsQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywrQkFBK0IsQ0FDOUQsS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO1FBQ0osTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNwRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDaEUsTUFBTSxxQkFBcUIsR0FBRyxvQkFBb0IsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ25FLG1CQUFtQjtRQUNuQixJQUNFLGdCQUFnQjtZQUNoQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QjtZQUMvQyxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzNDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGdDQUFnQyxRQUFRLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUM1RSxDQUFDO1lBQ0YsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsNkNBQTZDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLGdCQUFnQjtZQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBa0IsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQzFELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQzNDO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQWtCLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLFlBQVk7UUFDWixNQUFNLHVCQUF1QixHQUFHLGdCQUFnQjtZQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUMxRCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsNERBQTREO1FBQzVELElBQUksZ0JBQWdCLElBQUksdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLEtBQUssR0FBRyxxREFBcUQsQ0FBQztZQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLEtBQUssVUFBVSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsV0FBVyxRQUFRLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLG1GQUFtRixFQUNuRixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDekUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIseUNBQXlDO1lBQ3pDLE1BQU0sdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUNyRCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUMxQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxtQ0FBbUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3JGLENBQUM7WUFDRixJQUFJLHVCQUF1QixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLElBQUksQ0FDUCxtREFBbUQsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQzVGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHlCQUF5QixrQkFBa0IsT0FBTyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQ2hGLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sY0FBYyxHQUFrRCxFQUFFLENBQUM7UUFDekUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyQyw0Q0FBNEM7WUFDNUMsSUFBSSxDQUFDLE9BQU87Z0JBQUUsU0FBUztZQUN2QixJQUFJLFVBQVUsR0FDWixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1QixJQUFJLHFCQUFxQixHQUVULHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsQ0FBQztZQUNwRSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksVUFBVSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDekMscUNBQXFDO29CQUNyQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM3QixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHVCQUF1QixPQUFPLDZEQUE2RCxDQUN4RyxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxVQUFVLElBQUksZ0JBQWdCLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUM1RCxHQUFHLENBQUMsU0FBUyxFQUNiLE9BQU8sQ0FDUixDQUFDO29CQUNGLElBQUksTUFBTSxFQUFFLENBQUM7d0JBQ1gsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLFNBQVMsb0JBQW9CLE9BQU8seUJBQXlCLENBQ25GLENBQUM7d0JBQ0YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQ25ELEdBQUcsRUFDSCxNQUFNLEVBQ04sSUFBSSxDQUNMLENBQUM7d0JBQ0YsVUFBVSxHQUFHLFNBQVMsQ0FBQzt3QkFDdkIscUJBQXFCLEdBQUcsU0FBUyxDQUFDO3dCQUNsQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUM7d0JBQ3RDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQztvQkFDN0MsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsOERBQThEO2dCQUM5RCxpREFBaUQ7Z0JBQ2pELDhEQUE4RDtnQkFDOUQsdUVBQXVFO2dCQUN2RSxNQUFNLFlBQVksR0FBRztvQkFDbkIsc0JBQXNCO29CQUN0QixJQUFJO29CQUNKLEtBQUs7b0JBQ0wsTUFBTTtvQkFDTixZQUFZO29CQUNaLGtCQUFrQjtvQkFDbEIsWUFBWTtvQkFDWixVQUFVO29CQUNWLFNBQVM7b0JBQ1QsOENBQThDO29CQUM5QyxvQkFBb0I7aUJBQ3JCLENBQUM7Z0JBQ0YsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sUUFBUSxHQUE2QixFQUFFLENBQUM7Z0JBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQy9CLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEMsb0NBQW9DO29CQUNwQyxJQUNFLEdBQUcsS0FBSyxrQkFBa0I7d0JBQzFCLGVBQWUsS0FBSyxTQUFTO3dCQUM3QixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFDekIsQ0FBQzt3QkFDRCxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN6QixDQUFDO29CQUNELElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQy9DLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUM7b0JBQ2xDLENBQUM7eUJBQU0sSUFDTCxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0JBQzdCLHFCQUFxQjt3QkFDckIsQ0FBQyxPQUFPLENBQ04sZUFBZSxFQUNkLHFCQUFpRCxDQUFDLEdBQUcsQ0FBQyxDQUN4RCxFQUNELENBQUM7d0JBQ0QsMENBQTBDO3dCQUMxQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDO29CQUNsQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsdUJBQXVCO2dCQUN2QixJQUFJLGtCQUFrQixFQUFFLENBQUM7b0JBQ3ZCLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUM5QixDQUFDO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDdkIsdURBQXVEO29CQUN2RCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7Z0JBRUQsOENBQThDO2dCQUM5QywwQkFBMEI7Z0JBQzFCLFNBQVM7WUFDWCxDQUFDO1lBRUQsbUNBQW1DO1lBQ25DLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxZQUFZO1lBQ1osMERBQTBEO1lBQzFELGdFQUFnRTtZQUNoRSxLQUFLO1lBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsZ0JBQWdCLEdBQUcsMEJBQTBCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxRQUFRLFNBQVMsb0JBQW9CLE9BQU8sVUFBVSxnQkFBZ0IsRUFBRSxDQUNyRixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDVixTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxjQUFjO2dCQUNoQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUMxQixDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNmLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLFNBQVMscUJBQXFCLE9BQU8sWUFBWSxLQUFLLE9BQU8sY0FBYyxlQUFlLE9BQU8sRUFBRSxDQUN6SCxDQUFDO1lBQ0YsSUFBSSxTQUFpQixDQUFDO1lBQ3RCLElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLGtCQUFrQixDQUMzRCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUNuQixPQUFPLEVBQ1AsRUFBRSxlQUFlLEVBQUUsQ0FDcEIsQ0FBQztnQkFDRixTQUFTLEdBQUcsT0FBTyxDQUFDO2dCQUNwQixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFNBQVMsU0FBUywwQkFBMEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxTQUFTLEVBQUUsQ0FDdkksQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQ0UsR0FBRyxDQUFDLElBQUksS0FBSyx1QkFBdUI7b0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLEtBQUssNEJBQTRCLEVBQ3pDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuRSxDQUFDO2dCQUNELGdCQUFnQixHQUFHLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxRQUFRLFNBQVMsb0JBQW9CLE9BQU8sVUFBVSxnQkFBZ0IsRUFBRSxDQUNyRixDQUFDO2dCQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDVixTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLEtBQUs7Z0JBQ0wsSUFBSTtnQkFDSixPQUFPO2dCQUNQLFdBQVc7Z0JBQ1gsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE1BQU07Z0JBQ04sVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO2dCQUMvQixJQUFJLEVBQUU7b0JBQ0osU0FBUztpQkFDVjtnQkFDRCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsV0FBVztnQkFDWCwyQkFBMkIsRUFBRSxJQUFJO2FBQ2xDLENBQUM7WUFDRixJQUFJLENBQUM7Z0JBQ0gsK0NBQStDO2dCQUMvQyxNQUFNLFNBQVMsR0FDYixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztvQkFDNUQsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNYLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FDekQsVUFBVSxFQUNWLFNBQVMsQ0FDVixDQUFDO2dCQUNGLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFNBQVMsU0FBUyxvQkFBb0IsT0FBTywrQkFBK0IsVUFBVSxDQUFDLGdCQUFnQixZQUFZLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FDL0ksQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFNBQVMsU0FBUyxvQkFBb0IsT0FBTyw2REFBNkQsQ0FDdkgsQ0FBQztvQkFDRiw4QkFBOEI7b0JBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixnQkFBZ0IsR0FBRyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7b0JBQzNDLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsUUFBUSxTQUFTLG9CQUFvQixPQUFPLFdBQVcsZ0JBQWdCLEVBQUUsQ0FDdEYsQ0FBQztvQkFDRixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUUsQ0FBQzt3QkFDbkMsb0JBQW9CO3dCQUNwQixlQUFlO3dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHNGQUFzRixFQUN0RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO3dCQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDeEQsT0FBTztvQkFDVCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxZQUFZLEdBQTJCLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO2dCQUNyRSxLQUFLLE1BQU0sY0FBYyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUMxQyxlQUFlLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELE1BQU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLEtBQUssTUFBTSxjQUFjLElBQUksb0JBQW9CLEVBQUUsQ0FBQztvQkFDbEQsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0Qsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BCLDJDQUEyQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHdEQUF3RCxNQUFNLEVBQUUsQ0FDN0UsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsd0ZBQXdGLEVBQ3hGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87UUFDVCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FDaEUsR0FBRyxDQUFDLFNBQVMsRUFDYixVQUFVLENBQUMsT0FBTyxDQUNuQixDQUFDO1lBQ0YsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FDekQsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLENBQ1QsQ0FBQztnQkFDRixjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxRQUFRLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ3pCLFlBQVksSUFBSSx3QkFBd0IsQ0FBQztnQkFDM0MsQ0FBQztnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHVCQUF1QixVQUFVLENBQUMsT0FBTyw2QkFBNkIsWUFBWSxFQUFFLENBQ2pHLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQztRQUNwQywrQkFBK0I7UUFDL0IsS0FBSyxNQUFNLGFBQWEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxDQUFDLGFBQWEsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FDaEUsR0FBRyxDQUFDLFNBQVMsRUFDYixhQUFhLENBQ2QsQ0FBQztnQkFDRixJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUNmLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUNuRCxHQUFHLEVBQ0gsVUFBVSxFQUNWLElBQUksQ0FDTCxDQUFDO29CQUNGLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsd0JBQXdCLGFBQWEsVUFBVSxDQUM1RCxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsdUJBQXVCLGNBQWMsQ0FBQyxNQUFNLHNCQUFzQixjQUFjLENBQUMsTUFBTSxXQUFXLENBQy9HLENBQUM7UUFDRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1DQUFtQyxDQUNsRSxHQUFHLEVBQ0gsY0FBYyxFQUNkLGNBQWMsQ0FDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsc0JBQXNCO1FBQ3RCLEtBQUs7UUFDTCxNQUFNLFdBQVcsR0FBd0QsRUFBRSxDQUFDO1FBQzVFLE1BQU0sY0FBYyxHQUFHLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyRSxJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNLFlBQVksR0FBRyw4QkFBOEIsQ0FBQztZQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLG9CQUFvQixHQUFHLEtBQUssT0FBTyxxQ0FBcUMsQ0FDckYsQ0FBQztnQkFDRixTQUFTO1lBQ1gsQ0FBQztZQUNELG1DQUFtQztZQUNuQywrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLG9CQUFvQixHQUFHLEtBQUssT0FBTyxnQ0FBZ0MsQ0FDaEYsQ0FBQztnQkFDRixTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FDN0QsR0FBRyxFQUNILEdBQUcsRUFDSCxPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3JELHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsS0FBSyxPQUFPLGlDQUFpQyxDQUNoRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCwyQkFBMkI7UUFDM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQy9ELEdBQUcsRUFDSCxHQUFHLENBQ0osQ0FBQztnQkFDRixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzVDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsNEJBQTRCO1FBQzVCLHdFQUF3RTtRQUN4RSxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDdkUscUNBQXFDO1lBQ3JDLElBQUksbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FDNUMsdUJBQXVCLEVBQ3ZCLEdBQUcsQ0FDSixDQUFDO1lBQ0Ysa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUN6QixtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFDRSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2dCQUN0QixNQUFNLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQ2pFLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxpREFBaUQsQ0FDOUQsQ0FBQztnQkFDRixXQUFXLENBQUMsSUFBSSxDQUFDO29CQUNmLE1BQU0sRUFBRSxRQUFRO29CQUNoQixHQUFHLEVBQUUsUUFBUTtvQkFDYixPQUFPLEVBQUUsbUJBQW1CO2lCQUM3QixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUM3QyxHQUFHLEVBQ0gsUUFBUSxFQUNSLG1CQUFtQixDQUNwQixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxlQUFlLFdBQVcsQ0FBQyxNQUFNLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNyRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEUsa0NBQWtDO1FBQ2xDLE1BQU0sa0JBQWtCLEdBQWMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxLQUFLLE1BQU0sVUFBVSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FDbkQsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FDMUMsQ0FBQztnQkFDRixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGdCQUFnQixrQkFBa0IsQ0FBQyxNQUFNLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFFRCx5Q0FBeUM7UUFDekMsMkVBQTJFO1FBQzNFLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx1REFBdUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FDMUksQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdDQUFnQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsbURBQW1ELENBQ2hFLENBQUM7UUFDSixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUMvRCxjQUFjLEVBQ2QsUUFBUSxDQUFDLFdBQVcsRUFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQztZQUNGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsY0FBYyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sWUFBWSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQy9HLENBQUM7Z0JBQ0YsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsUUFBUSxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JGLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsY0FBYyxnQkFBZ0IsY0FBYyxDQUFDLE1BQU0sWUFBWSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQ3ZILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsY0FBYztRQUNkLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsaUJBQWlCLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCx1RUFBdUUsRUFDdkUsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FRdEM7UUFDQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLElBQThCLENBQUM7UUFDckcsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEQsSUFBSSxTQUFvQixDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsMEJBQTBCLEdBQUcsV0FBVyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxXQUFXLFFBQVEsUUFBUSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsd0ZBQXdGLEVBQ3hGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3BDLFlBQVk7UUFDWiwyQ0FBMkM7UUFDM0MseUNBQXlDO1FBQ3pDLDRDQUE0QztRQUM1QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxpQkFBaUI7UUFDakIsNkNBQTZDO1FBQzdDLHNEQUFzRDtRQUN0RCxLQUFLO1FBQ0wsSUFBSSxXQUFXLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBaUIsQ0FBQztRQUNoRSxnRkFBZ0Y7UUFDaEYsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDeEYsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxTQUFTLFNBQVMsSUFBSSxRQUFRLFFBQVEsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMxQywwQkFBMEI7UUFDMUIsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxRQUFRLFFBQVEsb0JBQW9CLFFBQVEsQ0FBQyxNQUFNLHFCQUFxQixPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQy9HLENBQUM7UUFDSixDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0sY0FBYyxHQUErQixFQUFFLENBQUM7UUFDdEQsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM3QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDeEMsd0VBQXdFO1lBQ3hFLDRDQUE0QztZQUM1Qyx1R0FBdUc7WUFDdkcsNkNBQTZDO1lBQzdDLHNDQUFzQztZQUN0QyxJQUNFLFdBQVcsS0FBSywwQkFBMEI7Z0JBQzFDLFVBQVUsS0FBSyxxQkFBcUIsRUFDcEMsQ0FBQztnQkFDRCxXQUFXLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNEQUFzRDtnQkFDdEQsTUFBTSxvQkFBb0IsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUQsSUFDRSxvQkFBb0I7b0JBQ3BCLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQy9DLENBQUM7b0JBQ0QsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQTJCLENBQUM7b0JBQy9ELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsK0JBQStCLG9CQUFvQixDQUFDLE9BQU8sdUJBQXVCLENBQy9GLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsNkJBQTZCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDdkUsQ0FBQztZQUNGLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3hDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBd0IsQ0FBQztvQkFDM0QsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUN2RCxVQUFVLENBQUMsSUFBSSxFQUNmLFVBQVUsQ0FBQyxLQUFLLEVBQ2hCLFFBQVEsQ0FBQyxVQUFVLENBQ3BCLENBQUM7b0JBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDakIsSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDWixnQkFBZ0IsRUFBRSxDQUFDO3dCQUNuQixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFNBQVMsZ0JBQWdCLFlBQVksVUFBVSxDQUFDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FDbkcsQ0FBQztvQkFDSixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGFBQWE7UUFFYixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLG9CQUFvQjtZQUNwQix5RkFBeUY7WUFDekYsSUFBSTtZQUNKLG9DQUFvQztZQUNwQyxjQUFjO1lBQ2QsNkNBQTZDO1lBQzdDLDJDQUEyQztZQUMzQyw4Q0FBOEM7WUFDOUMsdUJBQXVCO1lBQ3ZCLDRDQUE0QztZQUM1QyxzQkFBc0I7WUFDdEIsa0JBQWtCO1lBQ2xCLFVBQVU7WUFDVixRQUFRO1lBQ1IsTUFBTTtZQUNOLElBQUk7WUFFSix1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLEtBQUssR0FBRyx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxVQUFVLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsNEZBQTRGLEVBQzVGLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDMUMsSUFBSSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RixrRUFBa0U7UUFDbEUsSUFBSSxnQkFBZ0IsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQzVELEdBQUcsQ0FBQyxTQUFTLEVBQ2IsT0FBTyxDQUNSLENBQUM7Z0JBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHVCQUF1QixPQUFPLHlCQUF5QixDQUNwRSxDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUNuRCxHQUFHLEVBQ0gsTUFBTSxFQUNOLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBQ0QsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVsRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUMxRyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHlCQUF5QixjQUFjLENBQUMsTUFBTSxPQUFPLGlCQUFpQixLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxXQUFXLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxVQUFVLENBQ2pLLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBYSxFQUFFLENBQUM7UUFDcEMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDhCQUE4QjtRQUM5QixLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckUsb0dBQW9HO1lBQ3BHLE1BQU0sSUFBSSxHQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdEYsbUNBQW1DO1lBQ25DLFNBQVMsRUFBRSxDQUFDO1lBQ1osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNyQyxZQUFZO1lBQ1osMERBQTBEO1lBQzFELGdFQUFnRTtZQUNoRSxLQUFLO1lBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixnQkFBZ0IsR0FBRywwQkFBMEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFFBQVEsU0FBUyxvQkFBb0IsT0FBTyxVQUFVLGdCQUFnQixFQUFFLENBQ3JGLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNWLFNBQVM7WUFDWCxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLGNBQWM7Z0JBQ2hDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFNBQVMsU0FBUyxxQkFBcUIsT0FBTyxZQUFZLEtBQUssT0FBTyxjQUFjLGVBQWUsT0FBTyxFQUFFLENBQ3pILENBQUM7WUFDRixJQUFJLFNBQWlCLENBQUM7WUFDdEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sa0JBQWtCLENBQzNELElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQ25CLE9BQU8sRUFDUCxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQ3hDLENBQUM7Z0JBQ0YsU0FBUyxHQUFHLE9BQU8sQ0FBQztnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLFNBQVMsMEJBQTBCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQ3ZJLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUNFLEdBQUcsQ0FBQyxJQUFJLEtBQUssdUJBQXVCO29CQUNwQyxHQUFHLENBQUMsSUFBSSxLQUFLLDRCQUE0QixFQUN6QyxDQUFDO29CQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztnQkFDRCxnQkFBZ0IsR0FBRywyQkFBMkIsR0FBRyxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsUUFBUSxTQUFTLG9CQUFvQixPQUFPLFVBQVUsZ0JBQWdCLEVBQUUsQ0FDckYsQ0FBQztnQkFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVELElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1YsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ1Qsb0RBQW9EO2dCQUNwRCxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBRUQsTUFBTSxVQUFVLEdBQXNCO2dCQUNwQyxLQUFLO2dCQUNMLElBQUk7Z0JBQ0osT0FBTztnQkFDUCxXQUFXO2dCQUNYLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixNQUFNO2dCQUNOLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtnQkFDL0IsSUFBSSxFQUFFO29CQUNKLFNBQVM7aUJBQ1Y7Z0JBQ0QsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFdBQVc7Z0JBQ1gsMkJBQTJCLEVBQUUsSUFBSTthQUNsQyxDQUFDO1lBQ0YsSUFBSSxDQUFDO2dCQUNILDBFQUEwRTtnQkFDMUUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7Z0JBQ3hDLE1BQU0sU0FBUyxHQUFHLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO2dCQUNyRyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQ3pELFVBQVUsRUFDVixTQUFTLENBQ1YsQ0FBQztnQkFDRixjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLFNBQVMsb0JBQW9CLE9BQU8sK0JBQStCLFVBQVUsQ0FBQyxnQkFBZ0IsWUFBWSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQy9JLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztvQkFDbEMsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxTQUFTLFNBQVMsb0JBQW9CLE9BQU8sNkRBQTZELENBQ3ZILENBQUM7b0JBQ0YsdURBQXVEO29CQUN2RCxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvQixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO29CQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkIsZ0JBQWdCLEdBQUcsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO29CQUMzQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLFFBQVEsU0FBUyxvQkFBb0IsT0FBTyxXQUFXLGdCQUFnQixFQUFFLENBQ3RGLENBQUM7b0JBQ0YsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFLENBQUM7d0JBQ25DLGdFQUFnRTt3QkFDaEUsNkNBQTZDO3dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxzRkFBc0YsRUFDdEYsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxLQUFLLENBQ1gsQ0FBQzt3QkFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3hELE9BQU87b0JBQ1QsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sWUFBWSxHQUEyQixJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDckUsS0FBSyxNQUFNLGNBQWMsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDMUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdEMsQ0FBQztnQkFDRCxNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO2dCQUNsQyxLQUFLLE1BQU0sY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUM7b0JBQ2xELGVBQWUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELGFBQWE7UUFFYiwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDYiwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3REFBd0QsTUFBTSxFQUFFLENBQzdFLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHdGQUF3RixFQUN4RixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7WUFDRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPO1FBQ1QsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FDaEUsR0FBRyxDQUFDLFNBQVMsRUFDYixPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQ25ELEdBQUcsRUFDSCxVQUFVLEVBQ1YsSUFBSSxDQUNMLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsT0FBTyxVQUFVLENBQ3RELENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsdUJBQXVCLGNBQWMsQ0FBQyxNQUFNLHNCQUFzQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sV0FBVyxDQUNySCxDQUFDO1FBQ0YsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLDJDQUEyQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsbUNBQW1DLENBQ2xFLEdBQUcsRUFDSCxjQUFjLEVBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FDckIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsb0JBQW9CLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxhQUFhO1FBRWIsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQixzQkFBc0I7UUFDdEIsS0FBSztRQUNMLE1BQU0sV0FBVyxHQUF3RCxFQUFFLENBQUM7UUFDNUUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDM0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sWUFBWSxHQUFHLDhCQUE4QixDQUFDO1lBQ3BELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsb0JBQW9CLEdBQUcsS0FBSyxPQUFPLHFDQUFxQyxDQUNyRixDQUFDO2dCQUNGLFNBQVM7WUFDWCxDQUFDO1lBQ0QseUVBQXlFO1lBQ3pFLHlEQUF5RDtZQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUN6RSxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLG9CQUFvQixHQUFHLEtBQUssT0FBTyxnQ0FBZ0MsQ0FDaEYsQ0FBQztnQkFDRixTQUFTO1lBQ1gsQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FDN0QsR0FBRyxFQUNILEdBQUcsRUFDSCxPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3JELHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNoQyxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsS0FBSyxPQUFPLGlDQUFpQyxDQUNoRixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFDRCx1QkFBdUI7UUFDdkIsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQy9ELEdBQUcsRUFDSCxHQUFHLENBQ0osQ0FBQztnQkFDRixJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQzVDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxNQUFNLEVBQUUsZUFBZSxXQUFXLENBQUMsTUFBTSxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDckYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxhQUFhO1FBRWIscUNBQXFDO1FBQ3JDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlGLDhCQUE4QjtRQUM5QixNQUFNLGtCQUFrQixHQUFjLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1RSxLQUFLLE1BQU0sVUFBVSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDM0MsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUM1QixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FDbkQsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLE1BQU0sR0FBRyxJQUFJLEVBQUUsQ0FDMUMsQ0FBQztnQkFDRixJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDcEUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLGdCQUFnQixrQkFBa0IsQ0FBQyxNQUFNLGlCQUFpQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDM0csQ0FBQztRQUNKLENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsMkVBQTJFO1FBQzNFLHFFQUFxRTtRQUNyRSxJQUFJLGlCQUFpQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksTUFBTSxFQUFFLHVEQUF1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUMxSSxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSxtREFBbUQsQ0FDaEUsQ0FBQztRQUNKLENBQUM7UUFDRCxhQUFhO1FBRWIsNkJBQTZCO1FBQzdCLEtBQUssTUFBTSxjQUFjLElBQUksZUFBZSxFQUFFLENBQUM7WUFDN0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUMvRCxjQUFjLEVBQ2QsUUFBUSxDQUFDLFdBQVcsRUFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQztZQUNGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsY0FBYyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sWUFBWSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQy9HLENBQUM7Z0JBQ0YsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxrQkFBa0IsUUFBUSxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JGLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLE1BQU0sRUFBRSx3QkFBd0IsY0FBYyxnQkFBZ0IsY0FBYyxDQUFDLE1BQU0sWUFBWSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQ3ZILENBQUM7UUFDSixDQUFDO1FBQ0QsYUFBYTtRQUViLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELGNBQWM7UUFDZCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLGlCQUFpQixNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsUUFBUSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsdUVBQXVFLEVBQ3ZFLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7Q0FDRixDQUFBO0FBMXlEa0I7SUFEaEIsTUFBTSxFQUFFOzs0REFDdUM7QUFFL0I7SUFEaEIsTUFBTSxFQUFFOzsrREFDNkM7QUFFckM7SUFEaEIsTUFBTSxFQUFFOzs4RUFDMkU7QUFFbkU7SUFEaEIsTUFBTSxFQUFFOztzRUFDMkQ7QUFFbkQ7SUFEaEIsTUFBTSxFQUFFOzs0REFDdUM7QUFFL0I7SUFEaEIsTUFBTSxFQUFFOzt5REFDaUM7QUFFekI7SUFEaEIsTUFBTSxFQUFFOzt5REFDaUM7QUFFekI7SUFEaEIsTUFBTSxFQUFFOzt5REFDaUM7QUFFekI7SUFEaEIsTUFBTSxFQUFFOzttRUFDcUQ7QUFFN0M7SUFEaEIsTUFBTSxFQUFFOzswREFDbUM7QUFFM0I7SUFEaEIsTUFBTSxFQUFFOzhCQUNvQixVQUFVO3dEQUFDO0FBRXZCO0lBRGhCLE1BQU0sRUFBRTs7b0VBQ3VEO0FBRS9DO0lBRGhCLE1BQU0sRUFBRTs7aUVBQ2lEO0FBd1k3QztJQURaLFFBQVEsQ0FBQyxlQUFlLENBQUM7O3FDQUNLLElBQUk7O3VEQWs0QmxDO0FBcHlDVSxvQkFBb0I7SUFIaEMsY0FBYyxDQUFDO1FBQ2QsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNO0tBQ2hDLENBQUM7R0FDVyxvQkFBb0IsQ0E0eURoQyJ9
|