@serve.zone/interfaces 32.55.1 → 32.56.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/changelog.md +22 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/appstore/catalog.d.ts +1 -1
- package/dist_ts/appstore/catalog.js +2 -1
- package/dist_ts/appstore/types.d.ts +36 -0
- package/dist_ts/appstore/types.js +11 -1
- package/dist_ts/appstore/versionconfig.d.ts +11 -3
- package/dist_ts/appstore/versionconfig.js +146 -7
- package/package.json +1 -1
- package/readme.md +17 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/appstore/catalog.ts +1 -0
- package/ts/appstore/types.ts +38 -0
- package/ts/appstore/versionconfig.ts +163 -5
package/changelog.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-10-13 - 32.56.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- `IAppStoreVersionConfig.backupExclusions` (`IAppStoreBackupExclusion[]`): object keys a version
|
|
8
|
+
keeps only for observability, such as workload logs. A backup leaves them out; a restore neither
|
|
9
|
+
brings them back nor removes them. Each entry names one objectStorage request of the version
|
|
10
|
+
(`storageRequest`: an explicit request id, or `legacy-s3` with `platformRequirements.s3`; a
|
|
11
|
+
filesystem request is refused), 1 to 16 `keyPrefixes` (each 1 to 512 UTF-8 bytes, ending in `/`,
|
|
12
|
+
no leading `/`, no empty, `.` or `..` segment, no control character, strictly increasing, none
|
|
13
|
+
inside another) and a one-line `reason`; entries are in strictly increasing `storageRequest`
|
|
14
|
+
order, each request at most once. `appStoreBackupExclusionLimits` states the bounds, and
|
|
15
|
+
`appStoreVersionConfigKeys` and `appStoreCatalogVersionConfigKeys` carry the member.
|
|
16
|
+
- `validateAppStoreBackupExclusionKeyPrefixes(value, label?)`: the one key-prefix-list rule the
|
|
17
|
+
version-config check applies to each backup exclusion, exported so a reader of the same prefixes
|
|
18
|
+
elsewhere (a backup manifest) judges them identically; it answers one `Invalid <label>` reason or
|
|
19
|
+
none.
|
|
20
|
+
- `appStoreStorageFeatureIds.objectStorageBackupExclusions` (`storage.object-storage.backup-exclusions`):
|
|
21
|
+
a version declaring any backup exclusion must name it in `requiresFeatures`, and naming it
|
|
22
|
+
without one is refused. A host that does not advertise it lists such a version without
|
|
23
|
+
installing it or interpreting its config, so existing hosts keep reading the catalog.
|
|
24
|
+
|
|
3
25
|
## 2026-10-13 - 32.55.1
|
|
4
26
|
|
|
5
27
|
### Fixes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '32.
|
|
6
|
+
version: '32.56.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -55,7 +55,7 @@ export interface IAppStoreCatalogContractIdentity {
|
|
|
55
55
|
* the app states its upgrade strategy once and the version entry names its own version.
|
|
56
56
|
*/
|
|
57
57
|
export type TAppStoreCatalogVersionConfig = Omit<IAppStoreVersionConfig, 'source' | 'resolvedSource' | 'resolvedImageDigest' | 'upgradeStrategy' | 'appStoreVersion'>;
|
|
58
|
-
declare const versionConfigKeyList: readonly ['image', 'port', 'containerArgs', 'targetPorts', 'domains', 'publicPortMappings', 'envVars', 'volumes', 'storageClasses', 'storageRequests', 'publishedPorts', 'platformRequirements', 'platformOidc', 'minOneboxVersion', 'minCloudlyVersion', 'changelog', 'breaking', 'requiresManualReview', 'migrationRequired', 'backupBeforeUpgrade', 'requiresFeatures', 'healthCheck'];
|
|
58
|
+
declare const versionConfigKeyList: readonly ['image', 'port', 'containerArgs', 'targetPorts', 'domains', 'publicPortMappings', 'envVars', 'volumes', 'storageClasses', 'storageRequests', 'backupExclusions', 'publishedPorts', 'platformRequirements', 'platformOidc', 'minOneboxVersion', 'minCloudlyVersion', 'changelog', 'breaking', 'requiresManualReview', 'migrationRequired', 'backupBeforeUpgrade', 'requiresFeatures', 'healthCheck'];
|
|
59
59
|
/** Every member a catalog version config may carry; any other member is refused. */
|
|
60
60
|
export declare const appStoreCatalogVersionConfigKeys: TCompleteKeyList<TAppStoreCatalogVersionConfig, typeof versionConfigKeyList>;
|
|
61
61
|
/** Why and when a publisher withdrew a published version. */
|
|
@@ -41,6 +41,7 @@ const versionConfigKeyList = [
|
|
|
41
41
|
'volumes',
|
|
42
42
|
'storageClasses',
|
|
43
43
|
'storageRequests',
|
|
44
|
+
'backupExclusions',
|
|
44
45
|
'publishedPorts',
|
|
45
46
|
'platformRequirements',
|
|
46
47
|
'platformOidc',
|
|
@@ -655,4 +656,4 @@ export const judgeAppStoreCatalogSuccession = (activeArg, candidateArg) => {
|
|
|
655
656
|
}
|
|
656
657
|
return { outcome: 'activate' };
|
|
657
658
|
};
|
|
658
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL2NhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9uRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsRUFBRSxFQUFFLDZCQUE2QjtJQUNqQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsZUFBZSxFQUFFLFFBQVE7SUFDekIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEUsbUJBQW1CLEVBQUUscUNBQXFDO0lBQzFELGVBQWUsRUFBRSx1Q0FBdUM7SUFDeEQsa0JBQWtCLEVBQUUseUNBQXlDO0lBQzdELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxFQUFFO0lBQ2hCLHdCQUF3QixFQUFFLEdBQUc7SUFDN0IsdUJBQXVCLEVBQUUsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFzQlosTUFBTSxvQkFBb0IsR0FBRztJQUMzQixPQUFPO0lBQ1AsTUFBTTtJ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
|
|
659
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL2NhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9uRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsRUFBRSxFQUFFLDZCQUE2QjtJQUNqQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsZUFBZSxFQUFFLFFBQVE7SUFDekIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEUsbUJBQW1CLEVBQUUscUNBQXFDO0lBQzFELGVBQWUsRUFBRSx1Q0FBdUM7SUFDeEQsa0JBQWtCLEVBQUUseUNBQXlDO0lBQzdELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxFQUFFO0lBQ2hCLHdCQUF3QixFQUFFLEdBQUc7SUFDN0IsdUJBQXVCLEVBQUUsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFzQlosTUFBTSxvQkFBb0IsR0FBRztJQUMzQixPQUFPO0lBQ1AsTUFBTTtJ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
|
|
@@ -29,6 +29,8 @@ export declare const appStoreStorageFeatureIds: {
|
|
|
29
29
|
readonly filesystem: 'storage.filesystem';
|
|
30
30
|
readonly objectStorage: 'storage.object-storage';
|
|
31
31
|
readonly objectStorageFile: 'storage.object-storage.file';
|
|
32
|
+
/** The version declares `backupExclusions`; a consumer naming it leaves those keys out of backups. */
|
|
33
|
+
readonly objectStorageBackupExclusions: 'storage.object-storage.backup-exclusions';
|
|
32
34
|
};
|
|
33
35
|
export type TAppStoreStorageFeatureId = typeof appStoreStorageFeatureIds[keyof typeof appStoreStorageFeatureIds];
|
|
34
36
|
export type TAppStoreStoragePurpose = 'runtime' | 'database' | 'registry' | 'backup';
|
|
@@ -75,6 +77,33 @@ export interface IAppStoreObjectStorageRequest extends IAppStoreStorageRequestBa
|
|
|
75
77
|
protection?: IAppStoreObjectStorageProtection;
|
|
76
78
|
}
|
|
77
79
|
export type TAppStoreStorageRequest = IAppStoreFilesystemStorageRequest | IAppStoreObjectStorageRequest;
|
|
80
|
+
/** The bounds of `IAppStoreVersionConfig.backupExclusions`. */
|
|
81
|
+
export declare const appStoreBackupExclusionLimits: Readonly<{
|
|
82
|
+
/** At most one entry per object-storage request; a version config holds at most 64 requests. */
|
|
83
|
+
readonly maximumEntries: 64;
|
|
84
|
+
readonly maximumKeyPrefixes: 16;
|
|
85
|
+
readonly maximumKeyPrefixBytes: 512;
|
|
86
|
+
readonly maximumReasonLength: 512;
|
|
87
|
+
}>;
|
|
88
|
+
/**
|
|
89
|
+
* Keys of one object-storage request that the app keeps only for observability, such as its
|
|
90
|
+
* workload logs. A backup leaves them out; a restore neither brings them back nor removes them.
|
|
91
|
+
*/
|
|
92
|
+
export interface IAppStoreBackupExclusion {
|
|
93
|
+
/**
|
|
94
|
+
* An objectStorage request of this version: an explicit request id, or `legacy-s3` when the
|
|
95
|
+
* version declares `platformRequirements.s3`. A filesystem request cannot declare exclusions.
|
|
96
|
+
*/
|
|
97
|
+
storageRequest: string;
|
|
98
|
+
/**
|
|
99
|
+
* 1 to 16 object key prefixes in strictly increasing UTF-16 code-unit order, none a prefix of
|
|
100
|
+
* another. Each is 1 to 512 UTF-8 bytes, ends in `/`, does not start with `/`, has no empty,
|
|
101
|
+
* `.` or `..` segment and no control character or unpaired surrogate.
|
|
102
|
+
*/
|
|
103
|
+
keyPrefixes: string[];
|
|
104
|
+
/** One operator-readable line, e.g. "Workload logs; a restore brings back state, not past logs." */
|
|
105
|
+
reason: string;
|
|
106
|
+
}
|
|
78
107
|
export interface IAppStoreInlineSource {
|
|
79
108
|
type: 'inline';
|
|
80
109
|
}
|
|
@@ -248,6 +277,13 @@ export interface IAppStoreVersionConfig {
|
|
|
248
277
|
storageClasses?: Record<string, IAppStoreStorageClass>;
|
|
249
278
|
/** Stable named filesystem and managed object-storage requests. */
|
|
250
279
|
storageRequests?: TAppStoreStorageRequest[];
|
|
280
|
+
/**
|
|
281
|
+
* Data the app keeps only for observability, in strictly increasing `storageRequest` order with
|
|
282
|
+
* each request at most once. A backup leaves it out; a restore neither brings it back nor
|
|
283
|
+
* removes it. A version declaring any entry names
|
|
284
|
+
* `appStoreStorageFeatureIds.objectStorageBackupExclusions` in `requiresFeatures`.
|
|
285
|
+
*/
|
|
286
|
+
backupExclusions?: IAppStoreBackupExclusion[];
|
|
251
287
|
publishedPorts?: IAppStorePublishedPort[];
|
|
252
288
|
platformRequirements?: IAppStorePlatformRequirements;
|
|
253
289
|
/**
|
|
@@ -5,7 +5,17 @@ export const appStoreStorageFeatureIds = {
|
|
|
5
5
|
filesystem: 'storage.filesystem',
|
|
6
6
|
objectStorage: 'storage.object-storage',
|
|
7
7
|
objectStorageFile: 'storage.object-storage.file',
|
|
8
|
+
/** The version declares `backupExclusions`; a consumer naming it leaves those keys out of backups. */
|
|
9
|
+
objectStorageBackupExclusions: 'storage.object-storage.backup-exclusions',
|
|
8
10
|
};
|
|
11
|
+
/** The bounds of `IAppStoreVersionConfig.backupExclusions`. */
|
|
12
|
+
export const appStoreBackupExclusionLimits = Object.freeze({
|
|
13
|
+
/** At most one entry per object-storage request; a version config holds at most 64 requests. */
|
|
14
|
+
maximumEntries: 64,
|
|
15
|
+
maximumKeyPrefixes: 16,
|
|
16
|
+
maximumKeyPrefixBytes: 512,
|
|
17
|
+
maximumReasonLength: 512,
|
|
18
|
+
});
|
|
9
19
|
const appStorePublicEnvKeyRegex = /^[A-Za-z_][A-Za-z0-9_]{0,252}$/;
|
|
10
20
|
const appStoreSecretKeyRegex = /^[A-Z_][A-Z0-9_]{0,252}$/;
|
|
11
21
|
export const validateAppStorePlatformOidcCapability = (capabilityArg) => {
|
|
@@ -282,4 +292,4 @@ export const validateAppStoreInstallRequest = async (requestArg, configArg, acti
|
|
|
282
292
|
}
|
|
283
293
|
return errors;
|
|
284
294
|
};
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBzdG9yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMENBQTBDLEVBQzFDLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsb0NBQW9DLEdBS3JDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGdDQUFnQyxHQUVqQyxNQUFNLHNCQUFzQixDQUFDO0FBOEM5QixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2QyxpQkFBaUIsRUFBRSw2QkFBNkI7Q0FDeEMsQ0FBQztBQThLWCxNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBQ25FLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FDcEQsYUFBc0IsRUFDWixFQUFFO0lBQ1osSUFBSSxhQUFhLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNDLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBd0MsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUTtXQUMxQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztXQUN4QyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7V0FDeEMsVUFBVSxDQUFD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
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBzdG9yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMENBQTBDLEVBQzFDLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsb0NBQW9DLEdBS3JDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGdDQUFnQyxHQUVqQyxNQUFNLHNCQUFzQixDQUFDO0FBOEM5QixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2QyxpQkFBaUIsRUFBRSw2QkFBNkI7SUFDaEQsc0dBQXNHO0lBQ3RHLDZCQUE2QixFQUFFLDBDQUEwQztDQUNqRSxDQUFDO0FBaUVYLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pELGdHQUFnRztJQUNoRyxjQUFjLEVBQUUsRUFBRTtJQUNsQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLHFCQUFxQixFQUFFLEdBQUc7SUFDMUIsbUJBQW1CLEVBQUUsR0FBRztDQUNoQixDQUFDLENBQUM7QUFtSVosTUFBTSx5QkFBeUIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUNuRSxNQUFNLHNCQUFzQixHQUFHLDBCQUEwQixDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUFHLENBQ3BELGFBQXNCLEVBQ1osRUFBRTtJQUNaLElBQUksYUFBYSxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQyxJQUFJLENBQUMsYUFBYSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDeEYsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TCompleteKeyList } from '../private/keylist.js';
|
|
2
2
|
import type { IAppStoreVersionConfig } from './types.js';
|
|
3
|
-
declare const versionConfigMemberList: readonly ['image', 'port', 'containerArgs', 'targetPorts', 'domains', 'publicPortMappings', 'envVars', 'volumes', 'storageClasses', 'storageRequests', 'publishedPorts', 'platformRequirements', 'platformOidc', 'minOneboxVersion', 'minCloudlyVersion', 'appStoreVersion', 'upgradeStrategy', 'source', 'resolvedSource', 'resolvedImageDigest', 'changelog', 'breaking', 'requiresManualReview', 'migrationRequired', 'backupBeforeUpgrade', 'requiresFeatures', 'healthCheck'];
|
|
3
|
+
declare const versionConfigMemberList: readonly ['image', 'port', 'containerArgs', 'targetPorts', 'domains', 'publicPortMappings', 'envVars', 'volumes', 'storageClasses', 'storageRequests', 'backupExclusions', 'publishedPorts', 'platformRequirements', 'platformOidc', 'minOneboxVersion', 'minCloudlyVersion', 'appStoreVersion', 'upgradeStrategy', 'source', 'resolvedSource', 'resolvedImageDigest', 'changelog', 'breaking', 'requiresManualReview', 'migrationRequired', 'backupBeforeUpgrade', 'requiresFeatures', 'healthCheck'];
|
|
4
4
|
/** Every member an `IAppStoreVersionConfig` may carry; any other member is refused. */
|
|
5
5
|
export declare const appStoreVersionConfigKeys: TCompleteKeyList<IAppStoreVersionConfig, typeof versionConfigMemberList>;
|
|
6
6
|
/** `port`, `targetPorts`, `domains` and `publicPortMappings`, resolved as a host resolves them. */
|
|
@@ -9,10 +9,18 @@ export declare const validateAppStoreVersionPortModel: (configArg: unknown, labe
|
|
|
9
9
|
export declare const validateAppStorePublishedPorts: (publishedPortsArg: unknown, labelArg?: string) => string[];
|
|
10
10
|
/**
|
|
11
11
|
* The config's member set and its storage: legacy `volumes`, `storageClasses`, `storageRequests`,
|
|
12
|
-
* `platformRequirements`, the storage feature ids `requiresFeatures` must name,
|
|
13
|
-
* environment, secret-file and mount destination being used once.
|
|
12
|
+
* `platformRequirements`, `backupExclusions`, the storage feature ids `requiresFeatures` must name,
|
|
13
|
+
* and every environment, secret-file and mount destination being used once.
|
|
14
14
|
*/
|
|
15
15
|
export declare const validateAppStoreVersionStorage: (configArg: unknown, labelArg?: string) => string[];
|
|
16
|
+
/**
|
|
17
|
+
* One backup exclusion's `keyPrefixes`, the rule `validateAppStoreVersionStorage` applies to each
|
|
18
|
+
* `IAppStoreBackupExclusion`: 1 to 16 prefixes in strictly increasing UTF-16 code-unit order, none
|
|
19
|
+
* inside another, each 1 to 512 UTF-8 bytes ending in `/`, without a leading `/`, an empty, `.` or
|
|
20
|
+
* `..` segment, a control character or an unpaired surrogate. A reader of a list that carries such
|
|
21
|
+
* prefixes elsewhere, such as a backup manifest, judges it here.
|
|
22
|
+
*/
|
|
23
|
+
export declare const validateAppStoreBackupExclusionKeyPrefixes: (valueArg: unknown, labelArg?: string) => string[];
|
|
16
24
|
/**
|
|
17
25
|
* Every member rule of a version config, in the order a host applies them: image, port model,
|
|
18
26
|
* container arguments, environment declarations, storage, platform OIDC, published ports.
|
|
@@ -15,13 +15,15 @@
|
|
|
15
15
|
* `platform.normalizeStorageRequest`), reporting through this module's rejection. What this module
|
|
16
16
|
* adds are the rules a request can only break inside a version config: its class is declared and of
|
|
17
17
|
* its kind, the class backs a declared limit or protection, ids and destinations are used once, the
|
|
18
|
-
* legacy names stay reserved,
|
|
18
|
+
* legacy names stay reserved, a backup exclusion names an object-storage request, and the storage
|
|
19
|
+
* feature ids are named.
|
|
19
20
|
*/
|
|
20
21
|
import { normalizeServiceAbsolutePath, validateServiceContainerArgs } from '../data/service.js';
|
|
21
22
|
import { normalizeServicePortConfig } from '../data/serviceports.js';
|
|
23
|
+
import { compareWireTokens } from '../private/canonicaljson.js';
|
|
22
24
|
import { readDataElements, readDataProperties } from '../private/dataproperties.js';
|
|
23
25
|
import { createStorageContractReaders } from '../private/storagecontract.js';
|
|
24
|
-
import { appStoreStorageFeatureIds, validateAppStoreEnvironmentDeclarations, validateAppStoreVersionPlatformOidc, } from './types.js';
|
|
26
|
+
import { appStoreBackupExclusionLimits, appStoreStorageFeatureIds, validateAppStoreEnvironmentDeclarations, validateAppStoreVersionPlatformOidc, } from './types.js';
|
|
25
27
|
const versionConfigMemberList = [
|
|
26
28
|
'image',
|
|
27
29
|
'port',
|
|
@@ -33,6 +35,7 @@ const versionConfigMemberList = [
|
|
|
33
35
|
'volumes',
|
|
34
36
|
'storageClasses',
|
|
35
37
|
'storageRequests',
|
|
38
|
+
'backupExclusions',
|
|
36
39
|
'publishedPorts',
|
|
37
40
|
'platformRequirements',
|
|
38
41
|
'platformOidc',
|
|
@@ -72,6 +75,8 @@ const legacyObjectStorageClassKey = 'legacyObjectStorage';
|
|
|
72
75
|
const legacyObjectStorageRequestId = 'legacy-s3';
|
|
73
76
|
const knownStorageFeatureIds = Object.values(appStoreStorageFeatureIds);
|
|
74
77
|
const platformRequirementKeys = ['mongodb', 's3', 'clickhouse', 'valkey', 'mariadb', 'mail'];
|
|
78
|
+
const controlCharacterPattern = /[\u0000-\u001f\u007f]/;
|
|
79
|
+
const utf8Encoder = new TextEncoder();
|
|
75
80
|
/** Thrown inside this module only; every exported validator answers it as its result. */
|
|
76
81
|
class AppStoreVersionConfigRejection extends Error {
|
|
77
82
|
}
|
|
@@ -507,7 +512,7 @@ function checkExplicitStorageRequests(requestsArg, classesArg, destinationsArg,
|
|
|
507
512
|
}
|
|
508
513
|
return requests;
|
|
509
514
|
}
|
|
510
|
-
function checkFeatureDeclaration(requiresFeaturesArg, explicitRequestsArg, labelArg) {
|
|
515
|
+
function checkFeatureDeclaration(requiresFeaturesArg, explicitRequestsArg, backupExclusionsArg, labelArg) {
|
|
511
516
|
const derivedFeatures = new Set();
|
|
512
517
|
if (explicitRequestsArg.length > 0)
|
|
513
518
|
derivedFeatures.add(appStoreStorageFeatureIds.bindings);
|
|
@@ -520,6 +525,9 @@ function checkFeatureDeclaration(requiresFeaturesArg, explicitRequestsArg, label
|
|
|
520
525
|
if (explicitRequestsArg.some((requestArg) => requestArg.kind === 'objectStorage' && requestArg.delivery.type === 'file')) {
|
|
521
526
|
derivedFeatures.add(appStoreStorageFeatureIds.objectStorageFile);
|
|
522
527
|
}
|
|
528
|
+
if (backupExclusionsArg.length > 0) {
|
|
529
|
+
derivedFeatures.add(appStoreStorageFeatureIds.objectStorageBackupExclusions);
|
|
530
|
+
}
|
|
523
531
|
const declaredEntries = requiresFeaturesArg === undefined
|
|
524
532
|
? []
|
|
525
533
|
: readDataElements(requiresFeaturesArg, Number.MAX_SAFE_INTEGER);
|
|
@@ -546,6 +554,119 @@ function checkFeatureDeclaration(requiresFeaturesArg, explicitRequestsArg, label
|
|
|
546
554
|
}
|
|
547
555
|
}
|
|
548
556
|
}
|
|
557
|
+
const hasUnpairedSurrogate = (valueArg) => {
|
|
558
|
+
for (let index = 0; index < valueArg.length; index++) {
|
|
559
|
+
const codeUnit = valueArg.charCodeAt(index);
|
|
560
|
+
if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {
|
|
561
|
+
const following = valueArg.charCodeAt(index + 1);
|
|
562
|
+
if (!(following >= 0xdc00 && following <= 0xdfff))
|
|
563
|
+
return true;
|
|
564
|
+
index++;
|
|
565
|
+
}
|
|
566
|
+
else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return false;
|
|
571
|
+
};
|
|
572
|
+
/** One object key prefix: a relative key path that names a whole subtree. */
|
|
573
|
+
function checkBackupExclusionKeyPrefix(valueArg, labelArg) {
|
|
574
|
+
if (typeof valueArg !== 'string')
|
|
575
|
+
return reject(`Invalid ${labelArg}: expected a string`);
|
|
576
|
+
if (controlCharacterPattern.test(valueArg) || hasUnpairedSurrogate(valueArg)) {
|
|
577
|
+
reject(`Invalid ${labelArg}: must not contain a control character or an unpaired surrogate`);
|
|
578
|
+
}
|
|
579
|
+
const byteLength = utf8Encoder.encode(valueArg).byteLength;
|
|
580
|
+
if (byteLength < 1 || byteLength > appStoreBackupExclusionLimits.maximumKeyPrefixBytes) {
|
|
581
|
+
reject(`Invalid ${labelArg}: must be 1 to ${appStoreBackupExclusionLimits.maximumKeyPrefixBytes} UTF-8 bytes`);
|
|
582
|
+
}
|
|
583
|
+
if (valueArg.startsWith('/'))
|
|
584
|
+
reject(`Invalid ${labelArg}: must not start with '/'`);
|
|
585
|
+
if (!valueArg.endsWith('/'))
|
|
586
|
+
reject(`Invalid ${labelArg}: must end with '/'`);
|
|
587
|
+
if (valueArg.slice(0, -1).split('/').some((segmentArg) => segmentArg === '' || segmentArg === '.' || segmentArg === '..')) {
|
|
588
|
+
reject(`Invalid ${labelArg}: must not contain an empty, '.' or '..' segment`);
|
|
589
|
+
}
|
|
590
|
+
return valueArg;
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* One exclusion's key prefix list: 1 to 16 prefixes, strictly increasing, none inside another.
|
|
594
|
+
* `validateAppStoreBackupExclusionKeyPrefixes` exports it, so every reader of a prefix list judges
|
|
595
|
+
* it by this one rule.
|
|
596
|
+
*/
|
|
597
|
+
function checkBackupExclusionKeyPrefixes(valueArg, labelArg) {
|
|
598
|
+
const { maximumKeyPrefixes } = appStoreBackupExclusionLimits;
|
|
599
|
+
const prefixEntries = readDataElements(valueArg, maximumKeyPrefixes);
|
|
600
|
+
if (prefixEntries === null || prefixEntries.length === 0) {
|
|
601
|
+
return reject(`Invalid ${labelArg}: expected an array of 1 to ${maximumKeyPrefixes} key prefixes`);
|
|
602
|
+
}
|
|
603
|
+
const keyPrefixes = [];
|
|
604
|
+
prefixEntries.forEach((prefixArg, indexArg) => {
|
|
605
|
+
const prefixLabel = `${labelArg}[${indexArg}]`;
|
|
606
|
+
const prefix = checkBackupExclusionKeyPrefix(prefixArg, prefixLabel);
|
|
607
|
+
const previousPrefix = keyPrefixes[keyPrefixes.length - 1];
|
|
608
|
+
if (previousPrefix !== undefined && compareWireTokens(previousPrefix, prefix) >= 0) {
|
|
609
|
+
reject(`Invalid ${labelArg}: must be strictly increasing`);
|
|
610
|
+
}
|
|
611
|
+
const covering = keyPrefixes.find((existingArg) => prefix.startsWith(existingArg));
|
|
612
|
+
if (covering !== undefined) {
|
|
613
|
+
reject(`Invalid ${prefixLabel}: '${prefix}' lies inside '${covering}'`);
|
|
614
|
+
}
|
|
615
|
+
keyPrefixes.push(prefix);
|
|
616
|
+
});
|
|
617
|
+
return keyPrefixes;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* The members of each backup exclusion, its key prefixes and the entry order. Which request an
|
|
621
|
+
* entry names is judged once the config's requests are known (`checkBackupExclusionTargets`).
|
|
622
|
+
*/
|
|
623
|
+
function checkBackupExclusions(valueArg, labelArg) {
|
|
624
|
+
if (valueArg === undefined)
|
|
625
|
+
return [];
|
|
626
|
+
const { maximumEntries, maximumReasonLength } = appStoreBackupExclusionLimits;
|
|
627
|
+
const entries = readDataElements(valueArg, maximumEntries);
|
|
628
|
+
if (entries === null || entries.length === 0) {
|
|
629
|
+
return reject(`Invalid ${labelArg}: backupExclusions must contain between 1 and ${maximumEntries} entries`);
|
|
630
|
+
}
|
|
631
|
+
let previousRequest = null;
|
|
632
|
+
return entries.map((entryArg, indexArg) => {
|
|
633
|
+
const entryLabel = `${labelArg} backupExclusions[${indexArg}]`;
|
|
634
|
+
const entry = readRecord(entryArg, entryLabel);
|
|
635
|
+
assertExactKeys(entry, ['storageRequest', 'keyPrefixes', 'reason'], entryLabel);
|
|
636
|
+
const { storageRequest, reason } = entry;
|
|
637
|
+
if (typeof storageRequest !== 'string')
|
|
638
|
+
return reject(`Invalid ${entryLabel}.storageRequest: expected a string`);
|
|
639
|
+
if (previousRequest !== null && compareWireTokens(previousRequest, storageRequest) >= 0) {
|
|
640
|
+
reject(previousRequest === storageRequest
|
|
641
|
+
? `Invalid ${labelArg}: backupExclusions name storage request '${storageRequest}' more than once`
|
|
642
|
+
: `Invalid ${labelArg}: backupExclusions must be in strictly increasing storageRequest order`);
|
|
643
|
+
}
|
|
644
|
+
previousRequest = storageRequest;
|
|
645
|
+
const keyPrefixes = checkBackupExclusionKeyPrefixes(entry.keyPrefixes, `${entryLabel}.keyPrefixes`);
|
|
646
|
+
if (typeof reason !== 'string'
|
|
647
|
+
|| reason.length === 0
|
|
648
|
+
|| reason.length > maximumReasonLength
|
|
649
|
+
|| reason.trim() !== reason
|
|
650
|
+
|| controlCharacterPattern.test(reason)
|
|
651
|
+
|| hasUnpairedSurrogate(reason)) {
|
|
652
|
+
reject(`Invalid ${entryLabel}.reason: must be one trimmed line of 1 to ${maximumReasonLength} characters`);
|
|
653
|
+
}
|
|
654
|
+
return { storageRequest, keyPrefixes, reason };
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
/** Each backup exclusion names an object-storage request of the normalized config. */
|
|
658
|
+
function checkBackupExclusionTargets(exclusionsArg, objectStorageRequestIdsArg, filesystemRequestIdsArg, labelArg) {
|
|
659
|
+
exclusionsArg.forEach((exclusionArg, indexArg) => {
|
|
660
|
+
const { storageRequest } = exclusionArg;
|
|
661
|
+
if (objectStorageRequestIdsArg.has(storageRequest))
|
|
662
|
+
return;
|
|
663
|
+
const requestLabel = `${labelArg} backupExclusions[${indexArg}].storageRequest`;
|
|
664
|
+
if (filesystemRequestIdsArg.has(storageRequest)) {
|
|
665
|
+
reject(`Invalid ${requestLabel}: '${storageRequest}' is a filesystem request; only an objectStorage request declares backup exclusions`);
|
|
666
|
+
}
|
|
667
|
+
reject(`Invalid ${requestLabel}: '${storageRequest}' does not name an objectStorage request of this version`);
|
|
668
|
+
});
|
|
669
|
+
}
|
|
549
670
|
function checkLegacyVolumes(volumesArg, labelArg) {
|
|
550
671
|
if (volumesArg === undefined)
|
|
551
672
|
return [];
|
|
@@ -605,7 +726,8 @@ function checkStorage(configArg, labelArg) {
|
|
|
605
726
|
}
|
|
606
727
|
const storageClasses = checkStorageClasses(configArg.storageClasses, labelArg);
|
|
607
728
|
const explicitRequests = checkExplicitStorageRequests(configArg.storageRequests, storageClasses, destinations, labelArg);
|
|
608
|
-
|
|
729
|
+
const backupExclusions = checkBackupExclusions(configArg.backupExclusions, labelArg);
|
|
730
|
+
checkFeatureDeclaration(configArg.requiresFeatures, explicitRequests, backupExclusions, labelArg);
|
|
609
731
|
const legacyS3 = platformRequirements.s3 === true;
|
|
610
732
|
if (legacyS3 && explicitRequests.some((requestArg) => requestArg.kind === 'objectStorage')) {
|
|
611
733
|
reject(`Invalid ${labelArg}: platformRequirements.s3 cannot coexist with explicit objectStorage requests`);
|
|
@@ -617,6 +739,7 @@ function checkStorage(configArg, labelArg) {
|
|
|
617
739
|
reject(`Invalid ${labelArg}: storageClasses key '${legacyFilesystemClassKey}' is reserved for legacy volume normalization`);
|
|
618
740
|
}
|
|
619
741
|
const allMounts = explicitRequests.flatMap((requestArg) => (requestArg.kind === 'filesystem' ? [{ id: requestArg.id, mountPath: requestArg.mountPath }] : []));
|
|
742
|
+
const legacyVolumeRequestIds = [];
|
|
620
743
|
legacyVolumes.forEach((volumeArg, indexArg) => {
|
|
621
744
|
const requestId = legacyVolumeRequestId(volumeArg, indexArg, labelArg);
|
|
622
745
|
if (requestIds.has(requestId))
|
|
@@ -625,6 +748,7 @@ function checkStorage(configArg, labelArg) {
|
|
|
625
748
|
requestIds.add(requestId);
|
|
626
749
|
mountPaths.push(volumeArg.mountPath);
|
|
627
750
|
allMounts.push({ id: requestId, mountPath: volumeArg.mountPath });
|
|
751
|
+
legacyVolumeRequestIds.push(requestId);
|
|
628
752
|
});
|
|
629
753
|
if (legacyS3) {
|
|
630
754
|
if (storageClasses.has(legacyObjectStorageClassKey)) {
|
|
@@ -634,6 +758,13 @@ function checkStorage(configArg, labelArg) {
|
|
|
634
758
|
reject(`Invalid ${labelArg}: storage request id '${legacyObjectStorageRequestId}' is reserved for legacy S3 normalization`);
|
|
635
759
|
}
|
|
636
760
|
}
|
|
761
|
+
checkBackupExclusionTargets(backupExclusions, new Set([
|
|
762
|
+
...explicitRequests.flatMap((requestArg) => (requestArg.kind === 'objectStorage' ? [requestArg.id] : [])),
|
|
763
|
+
...(legacyS3 ? [legacyObjectStorageRequestId] : []),
|
|
764
|
+
]), new Set([
|
|
765
|
+
...explicitRequests.flatMap((requestArg) => (requestArg.kind === 'filesystem' ? [requestArg.id] : [])),
|
|
766
|
+
...legacyVolumeRequestIds,
|
|
767
|
+
]), labelArg);
|
|
637
768
|
const checkedMounts = [];
|
|
638
769
|
for (const mount of allMounts) {
|
|
639
770
|
assertNoPathCollision(mount.mountPath, checkedMounts, `${labelArg} request '${mount.id}'`);
|
|
@@ -657,10 +788,18 @@ export const validateAppStoreVersionPortModel = (configArg, labelArg = defaultLa
|
|
|
657
788
|
export const validateAppStorePublishedPorts = (publishedPortsArg, labelArg = defaultLabel) => firstRejection(() => checkPublishedPorts(publishedPortsArg, labelArg));
|
|
658
789
|
/**
|
|
659
790
|
* The config's member set and its storage: legacy `volumes`, `storageClasses`, `storageRequests`,
|
|
660
|
-
* `platformRequirements`, the storage feature ids `requiresFeatures` must name,
|
|
661
|
-
* environment, secret-file and mount destination being used once.
|
|
791
|
+
* `platformRequirements`, `backupExclusions`, the storage feature ids `requiresFeatures` must name,
|
|
792
|
+
* and every environment, secret-file and mount destination being used once.
|
|
662
793
|
*/
|
|
663
794
|
export const validateAppStoreVersionStorage = (configArg, labelArg = defaultLabel) => firstRejection(() => checkStorage(readConfig(configArg, labelArg), labelArg));
|
|
795
|
+
/**
|
|
796
|
+
* One backup exclusion's `keyPrefixes`, the rule `validateAppStoreVersionStorage` applies to each
|
|
797
|
+
* `IAppStoreBackupExclusion`: 1 to 16 prefixes in strictly increasing UTF-16 code-unit order, none
|
|
798
|
+
* inside another, each 1 to 512 UTF-8 bytes ending in `/`, without a leading `/`, an empty, `.` or
|
|
799
|
+
* `..` segment, a control character or an unpaired surrogate. A reader of a list that carries such
|
|
800
|
+
* prefixes elsewhere, such as a backup manifest, judges it here.
|
|
801
|
+
*/
|
|
802
|
+
export const validateAppStoreBackupExclusionKeyPrefixes = (valueArg, labelArg = 'keyPrefixes') => firstRejection(() => checkBackupExclusionKeyPrefixes(valueArg, labelArg));
|
|
664
803
|
/**
|
|
665
804
|
* Every member rule of a version config, in the order a host applies them: image, port model,
|
|
666
805
|
* container arguments, environment declarations, storage, platform OIDC, published ports.
|
|
@@ -682,4 +821,4 @@ export const validateAppStoreVersionConfig = (configArg, labelArg = defaultLabel
|
|
|
682
821
|
reject(`Invalid ${labelArg}: ${platformOidcErrors.join('; ')}`);
|
|
683
822
|
checkPublishedPorts(config.publishedPorts, labelArg);
|
|
684
823
|
});
|
|
685
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL3ZlcnNpb25jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXBGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTdFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxHQUNwQyxNQUFNLFlBQVksQ0FBQztBQUdwQixNQUFNLHVCQUF1QixHQUFHO0lBQzlCLE9BQU87SUFDUCxNQUFNO0lBQ04sZUFBZTtJQUNmLGFBQWE7SUFDYixTQUFTO0lBQ1Qsb0JBQW9CO0lBQ3BCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsV0FBVztJQUNYLFVBQVU7SUFDVixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsYUFBYTtDQUNMLENBQUM7QUFFWCx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBR2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUUzQyxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUN2QyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLHNCQUFzQixHQUFHLDhCQUE4QixDQUFDO0FBQzlEOzs7O0dBSUc7QUFDSCxNQUFNLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO0FBQ3pEOzs7R0FHRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsb0RBQW9ELENBQUM7QUFDckYsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNwRCxNQUFNLDJCQUEyQixHQUFHLHFCQUFxQixDQUFDO0FBQzFELE1BQU0sNEJBQTRCLEdBQUcsV0FBVyxDQUFDO0FBQ2pELE1BQU0sc0JBQXNCLEdBQXNCLE1BQU0sQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUMzRixNQUFNLHVCQUF1QixHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQVUsQ0FBQztBQUV0Ryx5RkFBeUY7QUFDekYsTUFBTSw4QkFBK0IsU0FBUSxLQUFLO0NBQUc7QUFFckQsU0FBUyxNQUFNLENBQUMsVUFBa0I7SUFDaEMsTUFBTSxJQUFJLDhCQUE4QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQWtCLEVBQVksRUFBRTtJQUN0RCxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsQ0FBQztRQUNULE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSw4QkFBOEI7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFcEcsU0FBUyxVQUFVLENBQUMsUUFBaUIsRUFBRSxRQUFnQjtJQUNyRCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLFFBQVEsc0JBQXNCLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLFNBQWtDLEVBQ2xDLGNBQWlDLEVBQ2pDLFFBQWdCO0lBRWhCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLFdBQVcsUUFBUSxzQkFBc0IsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsUUFBaUIsRUFDakIsZ0JBQW1DLEVBQ25DLFFBQWdCO0lBRWhCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxXQUFXLFFBQVEscUJBQXFCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUMzQixRQUFpQixFQUNqQixnQkFBbUMsRUFDbkMsUUFBZ0I7SUFFaEIsSUFBSSxRQUFRLEtBQUssU0FBUztRQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE9BQWdCLEVBQUUsUUFBZ0I7SUFDekQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLElBQUksT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQ2hHLE1BQU0sQ0FBQyxXQUFXLFFBQVEsS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7SUFDbkcsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFXLEVBQUU7SUFDbEUsTUFBTSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkQsTUFBTSxLQUFLLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMvQyxPQUFPLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsU0FBUyxxQkFBcUIsQ0FBQyxPQUFlLEVBQUUsUUFBMkIsRUFBRSxRQUFnQjtJQUMzRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0YsSUFBSSxTQUFTO1FBQUUsTUFBTSxDQUFDLFdBQVcsUUFBUSxXQUFXLE9BQU8sZUFBZSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzFGLENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcsUUFBUTtBQUVSLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxRQUFpQixFQUFzQyxFQUFFLENBQ3hGLFFBQVEsS0FBSyxNQUFNLElBQUksUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFFBQVEsS0FBSyxLQUFLO09BQ3BGLFFBQVEsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRTVGLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBaUIsRUFBcUMsRUFBRSxDQUMvRSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDO0FBRS9ELFNBQVMsUUFBUSxDQUFDLFFBQWlCLEVBQUUsUUFBZ0I7SUFDbkQsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUM7V0FDcEQsTUFBTSxDQUFDLFdBQVcsUUFBUSxvQ0FBb0Msc0JBQXNCLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFNBQWtDLEVBQUUsTUFBYyxFQUFFLFFBQWdCO0lBQzlGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE1BQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSxNQUFNLHFCQUFxQixDQUFDLENBQUM7SUFDakgsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFNBQWtDLEVBQUUsTUFBYyxFQUFFLFFBQWdCO0lBQzlGLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE1BQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSxNQUFNLHFCQUFxQixDQUFDLENBQUM7SUFDakgsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFNBQWtDLEVBQUUsTUFBYyxFQUFFLFFBQWdCO0lBQy9GLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztRQUFFLE1BQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSxNQUFNLHNCQUFzQixDQUFDLENBQUM7SUFDbkgsT0FBTyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQUUsUUFBZ0IsRUFBd0IsRUFBRSxDQUNwRixRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7SUFDdkUsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLGdCQUFnQixRQUFRLEdBQUcsQ0FBQztJQUMxRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RHLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUN2QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxXQUFXLFVBQVUsMEJBQTBCLENBQUMsQ0FBQztJQUM3RixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQyxXQUFXLFVBQVUsMEJBQTBCLENBQUMsQ0FBQztJQUM3RixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLFVBQVUsaUVBQWlFLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRSxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDcEUsT0FBTztRQUNMLElBQUk7UUFDSixJQUFJO1FBQ0osUUFBUTtRQUNSLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0MsR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNyRCxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztLQUMzRCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFTCxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQWlCLEVBQUUsUUFBZ0IsRUFBeUIsRUFBRSxDQUNqRixRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7SUFDbkUsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLFlBQVksUUFBUSxHQUFHLENBQUM7SUFDdEQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMvQyxlQUFlLENBQ2IsS0FBSyxFQUNMLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxTQUFTLENBQUMsRUFDckYsVUFBVSxDQUNYLENBQUM7SUFDRixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDN0MsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsV0FBVyxVQUFVLDBCQUEwQixDQUFDLENBQUM7SUFDN0YsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDN0QsT0FBTyxNQUFNLENBQUMsV0FBVyxVQUFVLG9EQUFvRCxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUNELG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQVUsRUFBRSxHQUFHLFVBQVUsV0FBVyxDQUFDLENBQUM7SUFDckYsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRSxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNELE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25GLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEUsT0FBTztRQUNMLElBQUk7UUFDSixHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDbkQsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQy9DLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9ELEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7S0FDOUMsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUwsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFFBQWlCLEVBQUUsUUFBZ0IsRUFBK0IsRUFBRSxDQUNsRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtJQUM5RSxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsdUJBQXVCLFFBQVEsR0FBRyxDQUFDO0lBQ2pFLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsZUFBZSxDQUNiLEtBQUssRUFDTCxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLEVBQ2xHLFVBQVUsQ0FDWCxDQUFDO0lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDcEUsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsV0FBVyxVQUFVLDBCQUEwQixDQUFDLENBQUM7SUFDN0YsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsV0FBVyxVQUFVLGdDQUFnQyxDQUFDLENBQUM7SUFDekcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLFdBQVcsVUFBVSxvREFBb0QsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFDRCw2RkFBNkY7SUFDN0YsSUFBSSxTQUFTLEtBQUssSUFBSTtRQUFFLE9BQU8sTUFBTSxDQUFDLFdBQVcsUUFBUSwwQkFBMEIsSUFBSSxRQUFRLFFBQVEsb0JBQW9CLENBQUMsQ0FBQztJQUM3SCxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzdDLE9BQU8sTUFBTSxDQUFDLFdBQVcsUUFBUSwwQkFBMEIsSUFBSSxRQUFRLFFBQVEsOEJBQThCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEksQ0FBQztJQUNELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbkYsT0FBTztRQUNMLElBQUk7UUFDSixVQUFVO1FBQ1YsVUFBVTtRQUNWLFFBQVE7UUFDUixTQUFTO1FBQ1QsR0FBRyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQztRQUN6RCxHQUFHLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztLQUNoRSxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFTCxTQUFTLGNBQWMsQ0FBQyxTQUFrQyxFQUFFLFFBQWdCO0lBQzFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDM0IsSUFBSSxJQUFJLEtBQUssU0FBUztRQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEtBQUssU0FBUztRQUNyRCxDQUFDLENBQUMsU0FBUztRQUNYLENBQUMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyRCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxDQUFDLFdBQVcsUUFBUSwwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RyxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO1FBQ25FLENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRSxJQUFJLENBQUM7UUFDSCwwQkFBMEIsQ0FBQztZQUN6QixJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNyRCxXQUFXO1lBQ1gsT0FBTztZQUNQLGtCQUFrQjtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxXQUFXLFFBQVEsS0FBSyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxpQkFBMEIsRUFBRSxRQUFnQjtJQUN2RSxJQUFJLGlCQUFpQixLQUFLLFNBQVM7UUFBRSxPQUFPO0lBQzVDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLFFBQVEsaUJBQWlCLENBQUMsQ0FBQztJQUMxRSxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsbUJBQW1CLFFBQVEsR0FBRyxDQUFDO1FBQzdELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsZUFBZSxDQUNiLEtBQUssRUFDTCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFDMUYsVUFBVSxDQUNYLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUN6QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ3pDLElBQUksUUFBUSxLQUFLLEtBQUssSUFBSSxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLFdBQVcsUUFBUSw4QkFBOEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVE7WUFBRSxNQUFNLENBQUMsV0FBVyxVQUFVLDRCQUE0QixDQUFDLENBQUM7UUFDMUYsZUFBZSxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsYUFBYSxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUM7UUFDckQsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLFFBQVEsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsYUFBYSxJQUFJLFdBQVcsQ0FBQztRQUMxRCxlQUFlLENBQUMsY0FBYyxFQUFFLEdBQUcsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzVGLGVBQWUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxRQUFRLG1CQUFtQixDQUFDLENBQUM7UUFDOUQsSUFBSSxTQUFTLEdBQUcsV0FBVyxJQUFJLFlBQVksR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUM3RCxNQUFNLENBQUMsV0FBVyxRQUFRLDJDQUEyQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxNQUFNLENBQUMsV0FBVyxRQUFRLDREQUE0RCxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLFdBQVcsUUFBUSxtREFBbUQsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7UUFDRCxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksU0FBUyxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sYUFBYSxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUM7WUFDOUMsTUFBTSxZQUFZLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ3RFLE1BQU0sV0FBVyxHQUFHLFdBQVcsUUFBUSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzNELE1BQU0scUJBQXFCLEdBQUcsTUFBTSxLQUFLLFNBQVM7Z0JBQ2hELENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRSxDQUFDLENBQUM7Z0JBQ25HLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQztnQkFDbEUsTUFBTSxDQUFDLFdBQVcsUUFBUSw4QkFBOEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLENBQUM7WUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWdCRCxTQUFTLDJCQUEyQixDQUFDLFNBQWtDLEVBQUUsUUFBZ0I7SUFDdkYsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2xELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNuRCxNQUFNLGNBQWMsR0FBRyxDQUNyQixTQUE4QixFQUM5QixjQUFzQixFQUN0QixRQUFnQixFQUNoQixPQUFzQyxFQUNoQyxFQUFFO1FBQ1IsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxXQUFXLFFBQVEsS0FBSyxPQUFPLGlCQUFpQixjQUFjLHFCQUFxQixhQUFhLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBQ0QsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0lBRUYsaUZBQWlGO0lBQ2pGLEtBQUssTUFBTSxjQUFjLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUNoRyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN2RCxJQUFJLFdBQVcsS0FBSyxJQUFJLElBQUksT0FBTyxXQUFXLENBQUMsR0FBRyxLQUFLLFFBQVE7WUFBRSxTQUFTO1FBQzFFLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsV0FBVyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxJQUFJLFFBQVEsRUFBRSxJQUFJLEtBQUssc0JBQXNCLElBQUksT0FBTyxRQUFRLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMzRixjQUFjLENBQUMsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDeEYsQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUN4RSxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDOUUsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sY0FBYyxDQUFDLHdCQUF3QixFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUNsSCxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzlFLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMsY0FBYyxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsS0FBSyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEcsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsdUJBQXVCO1FBQ3ZCLHNCQUFzQixFQUFFLElBQUksR0FBRyxDQUFDLHdCQUF3QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLG1CQUFtQixFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3RELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxlQUF3QixFQUFFLFFBQWdCO0lBQzNFLElBQUksZUFBZSxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM3QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsZUFBZSxFQUFFLEdBQUcsUUFBUSx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JGLGVBQWUsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxRQUFRLHVCQUF1QixDQUFDLENBQUM7SUFDM0YsS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLE9BQU8sUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxXQUFXLFFBQVEseUJBQXlCLE1BQU0sc0JBQXNCLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLGNBQXVCLEVBQUUsUUFBZ0I7SUFDdEUsSUFBSSxjQUFjLEtBQUssU0FBUztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ25ELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsZUFBZSxDQUFDLFdBQVcsRUFBRTtRQUMzQixpQkFBaUI7UUFDakIsWUFBWTtRQUNaLFVBQVU7UUFDVixXQUFXO1FBQ1gsV0FBVztRQUNYLFFBQVE7UUFDUixvQkFBb0I7S0FDckIsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNiLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3ZILG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUUsR0FBRyxRQUFRLGFBQWEsQ0FBQyxDQUFDO0lBQ3BHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUUsR0FBRyxRQUFRLFdBQVcsQ0FBQyxDQUFDO0lBQ2hHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxRQUFRLFlBQVksQ0FBQyxDQUFDO0lBQzdGLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFVLEVBQUUsQ0FBQztRQUNoRixJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlFLE1BQU0sQ0FBQyxXQUFXLFFBQVEsSUFBSSxVQUFVLDZCQUE2QixDQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxVQUFtQixFQUFFLFFBQWdCO0lBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBQ3RELElBQUksVUFBVSxLQUFLLFNBQVM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxRQUFRLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUNyRixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDaEQsTUFBTSxDQUFDLFdBQVcsUUFBUSx3REFBd0QsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sQ0FBQyxXQUFXLFFBQVEsd0JBQXdCLFFBQVEsaUJBQWlCLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxRQUFRLG1CQUFtQixRQUFRLEVBQUUsQ0FBQztRQUM1RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssZUFBZSxFQUFFLENBQUM7WUFDdEQsT0FBTyxNQUFNLENBQUMsV0FBVyxVQUFVLDRDQUE0QyxDQUFDLENBQUM7UUFDbkYsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFHLE1BQU0sQ0FBQyxXQUFXLFVBQVUsNEJBQTRCLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxHQUFHLFVBQVUsV0FBVyxDQUFDLENBQUM7UUFDckYsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxHQUFHLFVBQVUsWUFBWSxDQUFDLENBQUM7UUFDeEYsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7WUFDMUIsS0FBSyxNQUFNLGNBQWMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxLQUFLLFNBQVMsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLEtBQUssUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RHLE1BQU0sQ0FBQyxXQUFXLFVBQVUsZUFBZSxjQUFjLDRCQUE0QixjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLFNBQVMsc0NBQXNDLENBQzdDLFdBQW1DLEVBQ25DLGVBQXVCLEVBQ3ZCLGVBQXNDLEVBQ3RDLDBCQUF1QyxFQUN2QyxzQkFBbUM7SUFFbkMsTUFBTSxhQUFhLEdBQUcsR0FBRyxlQUFlLFdBQVcsQ0FBQztJQUNwRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDeEQsSUFBSSxlQUFlLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQzttQkFDckQsZUFBZSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLENBQUMsV0FBVyxhQUFhLHNCQUFzQixTQUFTLHNDQUFzQyxDQUFDLENBQUM7WUFDeEcsQ0FBQztZQUNELElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxXQUFXLGFBQWEsc0JBQXNCLFNBQVMsc0NBQXNDLENBQUMsQ0FBQztZQUN4RyxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQUUsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25HLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUNuQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLFdBQVcsYUFBYSxpRUFBaUUsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLENBQUMsV0FBVyxhQUFhLG1EQUFtRCxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLFdBQVcsYUFBYSxpREFBaUQsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNEJBQTRCLENBQ25DLFdBQW9CLEVBQ3BCLFVBQTJDLEVBQzNDLGVBQXNDLEVBQ3RDLFFBQWdCO0lBRWhCLElBQUksV0FBVyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEQsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0MsT0FBTyxNQUFNLENBQUMsV0FBVyxRQUFRLHlEQUF5RCxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDckMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUN4QyxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTlDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUEyQixFQUFFO1FBQy9FLE1BQU0sWUFBWSxHQUFHLEdBQUcsUUFBUSxvQkFBb0IsUUFBUSxHQUFHLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLHVCQUF1QixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxXQUFXLFlBQVksNENBQTRDLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFBRSxNQUFNLENBQUMsV0FBVyxRQUFRLHlCQUF5QixPQUFPLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hILFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztlQUNwRCxNQUFNLENBQUMsV0FBVyxZQUFZLG1CQUFtQixPQUFPLENBQUMsWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO1FBQy9GLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkMsTUFBTSxDQUFDLFdBQVcsWUFBWSxpREFBaUQsQ0FBQyxDQUFDO1FBQ25GLENBQUM7UUFDRCxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2RixNQUFNLENBQUMsV0FBVyxZQUFZLDJEQUEyRCxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEtBQUssVUFBVSxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hGLE1BQU0sQ0FBQyxXQUFXLFlBQVkseURBQXlELENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO1lBQ2hELElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUUsTUFBTSxDQUFDLFdBQVcsWUFBWSw0REFBNEQsQ0FBQyxDQUFDO1lBQzlGLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0Qsc0NBQXNDLENBQ3BDLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLG1CQUFtQixDQUNwQixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7SUFFSCxLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLFdBQVcsUUFBUSxvQkFBb0IsUUFBUSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLG1CQUE0QixFQUM1QixtQkFBdUQsRUFDdkQsUUFBZ0I7SUFFaEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUMxQyxJQUFJLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RixJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQy9FLGVBQWUsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDbEYsZUFBZSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDekgsZUFBZSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsS0FBSyxTQUFTO1FBQ3ZELENBQUMsQ0FBQyxFQUFFO1FBQ0osQ0FBQyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBQ3RDLEtBQUssTUFBTSxLQUFLLElBQUksZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxXQUFXLFFBQVEsZ0RBQWdELENBQUMsQ0FBQztRQUNsSCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0QsTUFBTSxDQUFDLFdBQVcsUUFBUSxnREFBZ0QsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFDRCxLQUFLLE1BQU0sY0FBYyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLENBQUMsV0FBVyxRQUFRLGtDQUFrQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxNQUFNLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQy9DLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2hHLE1BQU0sQ0FBQyxXQUFXLFFBQVEsOEJBQThCLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUNELElBQUksc0JBQXNCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sQ0FBQyxXQUFXLFFBQVEsc0JBQXNCLGVBQWUsZUFBZSxDQUFDLENBQUM7UUFDbEYsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBT0QsU0FBUyxrQkFBa0IsQ0FBQyxVQUFtQixFQUFFLFFBQWdCO0lBQy9ELElBQUksVUFBVSxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1dBQzNDLE1BQU0sQ0FBQyxXQUFXLFFBQVEsb0RBQW9ELENBQUMsQ0FBQztJQUNyRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDekMsTUFBTSxXQUFXLEdBQUcsR0FBRyxRQUFRLFlBQVksUUFBUSxHQUFHLENBQUM7UUFDdkQsTUFBTSxNQUFNLEdBQTRCLE9BQU8sU0FBUyxLQUFLLFFBQVE7WUFDbkUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRTtZQUMxQixDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2QyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDakgsS0FBSyxNQUFNLFlBQVksSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLFdBQVcsV0FBVyxxQkFBcUIsWUFBWSxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ25HLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN4QiwwRkFBMEY7UUFDMUYsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsV0FBVyxZQUFZLENBQUMsQ0FBQztRQUM5RixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVGLE1BQU0sQ0FBQyxXQUFXLFdBQVcsOENBQThDLENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBQ0QsS0FBSyxNQUFNLFVBQVUsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLFNBQVMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDaEYsTUFBTSxDQUFDLFdBQVcsV0FBVyxJQUFJLFVBQVUsc0JBQXNCLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU87WUFDTCxTQUFTO1lBQ1QsR0FBRyxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzlDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLFNBQTZCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjtJQUM5RixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQyxTQUFTO1NBQ3JELFdBQVcsRUFBRTtTQUNiLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNULE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDO1NBQzVCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0IsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLFVBQVUsRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLENBQUMsV0FBVyxRQUFRLFlBQVksUUFBUSx3RUFBd0UsQ0FBQyxDQUFDO0lBQzFILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsU0FBa0MsRUFBRSxRQUFnQjtJQUN4RSxlQUFlLENBQUMsU0FBUyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0saUJBQWlCLEdBQUcsdUNBQXVDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JGLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsV0FBVyxRQUFRLEtBQUssaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRyxNQUFNLFlBQVksR0FBRywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEUsTUFBTSxvQkFBb0IsR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDM0YsTUFBTSxDQUFDLFdBQVcsUUFBUSxnRUFBZ0UsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFDRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQy9FLE1BQU0sZ0JBQWdCLEdBQUcsNEJBQTRCLENBQ25ELFNBQVMsQ0FBQyxlQUFlLEVBQ3pCLGNBQWMsRUFDZCxZQUFZLEVBQ1osUUFBUSxDQUNULENBQUM7SUFDRix1QkFBdUIsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDaEYsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQztJQUNsRCxJQUFJLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUMzRixNQUFNLENBQUMsV0FBVyxRQUFRLCtFQUErRSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUMxRCxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDL0QsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0RSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO1FBQzdFLE1BQU0sQ0FBQyxXQUFXLFFBQVEseUJBQXlCLHdCQUF3QiwrQ0FBK0MsQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBNkMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUNuRyxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNqRyxDQUFDLENBQUM7SUFDSCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxFQUFFO1FBQzVDLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLE1BQU0sQ0FBQyxXQUFXLFFBQVEseUJBQXlCLFNBQVMsaUJBQWlCLENBQUMsQ0FBQztRQUM5RyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsa0JBQWtCLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxDQUFDLFdBQVcsUUFBUSx5QkFBeUIsMkJBQTJCLDJDQUEyQyxDQUFDLENBQUM7UUFDN0gsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxDQUFDLFdBQVcsUUFBUSx5QkFBeUIsNEJBQTRCLDJDQUEyQyxDQUFDLENBQUM7UUFDOUgsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBYSxFQUFFLENBQUM7SUFDbkMsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM5QixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLFFBQVEsYUFBYSxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMzRixhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQ2pFLFVBQVUsQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25ILENBQUMsQ0FBQztJQUNILEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztRQUNyRixJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pGLE1BQU0sQ0FBQyxXQUFXLFFBQVEsb0JBQW9CLFVBQVUsK0JBQStCLENBQUMsQ0FBQztRQUMzRixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxnR0FBZ0c7QUFDaEcsc0JBQXNCO0FBRXRCLFNBQVMsVUFBVSxDQUFDLFNBQWtCLEVBQUUsUUFBZ0I7SUFDdEQsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxRQUFRLDRCQUE0QixDQUFDLENBQUM7QUFDbEcsQ0FBQztBQUVELG1HQUFtRztBQUNuRyxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxDQUFDLFNBQWtCLEVBQUUsUUFBUSxHQUFHLFlBQVksRUFBWSxFQUFFLENBQ3hHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBRWxGLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLGlCQUEwQixFQUFFLFFBQVEsR0FBRyxZQUFZLEVBQVksRUFBRSxDQUM5RyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUV6RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxTQUFrQixFQUFFLFFBQVEsR0FBRyxZQUFZLEVBQVksRUFBRSxDQUN0RyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVoRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFNBQWtCLEVBQUUsUUFBUSxHQUFHLFlBQVksRUFBWSxFQUFFLENBQ3JHLGNBQWMsQ0FBQyxHQUFHLEVBQUU7SUFDbEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUTtRQUFFLE1BQU0sQ0FBQyxXQUFXLFFBQVEscUJBQXFCLENBQUMsQ0FBQztJQUN4RyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsV0FBVyxRQUFRLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRyxNQUFNLGlCQUFpQixHQUFHLHVDQUF1QyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsRixJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsTUFBTSxDQUFDLFdBQVcsUUFBUSxLQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvQixNQUFNLGtCQUFrQixHQUFHLG1DQUFtQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsV0FBVyxRQUFRLEtBQUssa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQyxDQUFDIn0=
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL3ZlcnNpb25jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQVFyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU3RSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLHlCQUF5QixFQUN6Qix1Q0FBdUMsRUFDdkMsbUNBQW1DLEdBQ3BDLE1BQU0sWUFBWSxDQUFDO0FBT3BCLE1BQU0sdUJBQXVCLEdBQUc7SUFDOUIsT0FBTztJQUNQLE1BQU07SUFDTixlQUFlO0lBQ2YsYUFBYTtJQUNiLFNBQVM7SUFDVCxvQkFBb0I7SUFDcEIsU0FBUztJQUNULFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsUUFBUTtJQUNSLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsV0FBVztJQUNYLFVBQVU7SUFDVixzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixrQkFBa0I7SUFDbEIsYUFBYTtDQUNMLENBQUM7QUFFWCx1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBR2xDLE1BQU0s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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -3611,9 +3611,25 @@ The catalog validator judges every supported version config in full; no consumer
|
|
|
3611
3611
|
|
|
3612
3612
|
- `image`, then the port model (`appstore.validateAppStoreVersionPortModel`): `port` or `targetPorts` is required, and `targetPorts`, `domains` and `publicPortMappings` are read as exactly their types and resolved through `data.normalizeServicePortConfig`.
|
|
3613
3613
|
- `containerArgs` and the environment declarations.
|
|
3614
|
-
- Storage (`appstore.validateAppStoreVersionStorage`): the exact config member set (`appstore.appStoreVersionConfigKeys`), `platformRequirements`, `storageClasses` and `storageRequests` (declared together, every class used), the storage feature ids `requiresFeatures` must name, portable legacy `volumes`, and every environment, secret-file and mount destination used once.
|
|
3614
|
+
- Storage (`appstore.validateAppStoreVersionStorage`): the exact config member set (`appstore.appStoreVersionConfigKeys`), `platformRequirements`, `storageClasses` and `storageRequests` (declared together, every class used), `backupExclusions`, the storage feature ids `requiresFeatures` must name, portable legacy `volumes`, and every environment, secret-file and mount destination used once.
|
|
3615
3615
|
- Platform OIDC, then Docker `publishedPorts` (`appstore.validateAppStorePublishedPorts`).
|
|
3616
3616
|
|
|
3617
|
+
A version declares data it keeps only for observability, such as workload logs, as `backupExclusions` (`IAppStoreBackupExclusion[]`): a backup leaves those object keys out, and a restore neither brings them back nor removes them. Each entry names one objectStorage request of the version (`storageRequest`: an explicit request id, or `legacy-s3` when the version declares `platformRequirements.s3`; a filesystem request is refused), 1 to 16 `keyPrefixes` and a one-line `reason` an operator reads:
|
|
3618
|
+
|
|
3619
|
+
```typescript
|
|
3620
|
+
const cloudlyVersion: Partial<appstore.IAppStoreVersionConfig> = {
|
|
3621
|
+
platformRequirements: { s3: true },
|
|
3622
|
+
backupExclusions: [{
|
|
3623
|
+
storageRequest: 'legacy-s3',
|
|
3624
|
+
keyPrefixes: ['runtime-logs/'],
|
|
3625
|
+
reason: 'Workload logs; a restore brings back state, not past logs.',
|
|
3626
|
+
}],
|
|
3627
|
+
requiresFeatures: [appstore.appStoreStorageFeatureIds.objectStorageBackupExclusions],
|
|
3628
|
+
};
|
|
3629
|
+
```
|
|
3630
|
+
|
|
3631
|
+
Entries are in strictly increasing `storageRequest` order with each request at most once. A key prefix is 1 to 512 UTF-8 bytes, ends in `/`, does not start with `/`, has no empty, `.` or `..` segment and no control character; the prefixes of an entry are strictly increasing and none lies inside another. `appstore.appStoreBackupExclusionLimits` states the bounds, and `appstore.validateAppStoreBackupExclusionKeyPrefixes(value, label?)` is the one prefix-list rule: the version-config check applies it to each entry, and a reader of a list carrying such prefixes elsewhere, such as a backup manifest, judges it there too (an empty list means valid, otherwise one `Invalid <label>` reason). A version declaring any entry names `storage.object-storage.backup-exclusions` (`appStoreStorageFeatureIds.objectStorageBackupExclusions`) in `requiresFeatures`, so a host that does not leave the keys out of its backups lists the version without installing it, and an older host never reads the member.
|
|
3632
|
+
|
|
3617
3633
|
Each storage request is judged on its own by the storage contract behind `platform.normalizeStorageRequest`: members, capacity quantities and limits, protection, delivery and mount path, with that contract's messages and bounds, and a legacy volume's mount path as the request it becomes. The version config adds what only holds between requests: each request's class is declared, of its kind and backs a declared limit (`hardQuota`), backup or snapshots; ids, environment keys, secret files and mounts are used once; the legacy names `legacyFilesystem`, `legacyObjectStorage` and `legacy-s3` stay reserved. Two App Store narrowings apply on top: a request id is a stable lowercase identifier (it shares a namespace with the derived `legacy-volume-*` ids), and a file delivery targets one file directly below `/run/secrets`.
|
|
3618
3634
|
|
|
3619
3635
|
Each of these validators stops at the first violation and answers it as a one-element list starting `Invalid <label>`, so a config is refused for the same reason everywhere.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/appstore/catalog.ts
CHANGED
package/ts/appstore/types.ts
CHANGED
|
@@ -62,6 +62,8 @@ export const appStoreStorageFeatureIds = {
|
|
|
62
62
|
filesystem: 'storage.filesystem',
|
|
63
63
|
objectStorage: 'storage.object-storage',
|
|
64
64
|
objectStorageFile: 'storage.object-storage.file',
|
|
65
|
+
/** The version declares `backupExclusions`; a consumer naming it leaves those keys out of backups. */
|
|
66
|
+
objectStorageBackupExclusions: 'storage.object-storage.backup-exclusions',
|
|
65
67
|
} as const;
|
|
66
68
|
|
|
67
69
|
export type TAppStoreStorageFeatureId =
|
|
@@ -127,6 +129,35 @@ export type TAppStoreStorageRequest =
|
|
|
127
129
|
| IAppStoreFilesystemStorageRequest
|
|
128
130
|
| IAppStoreObjectStorageRequest;
|
|
129
131
|
|
|
132
|
+
/** The bounds of `IAppStoreVersionConfig.backupExclusions`. */
|
|
133
|
+
export const appStoreBackupExclusionLimits = Object.freeze({
|
|
134
|
+
/** At most one entry per object-storage request; a version config holds at most 64 requests. */
|
|
135
|
+
maximumEntries: 64,
|
|
136
|
+
maximumKeyPrefixes: 16,
|
|
137
|
+
maximumKeyPrefixBytes: 512,
|
|
138
|
+
maximumReasonLength: 512,
|
|
139
|
+
} as const);
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Keys of one object-storage request that the app keeps only for observability, such as its
|
|
143
|
+
* workload logs. A backup leaves them out; a restore neither brings them back nor removes them.
|
|
144
|
+
*/
|
|
145
|
+
export interface IAppStoreBackupExclusion {
|
|
146
|
+
/**
|
|
147
|
+
* An objectStorage request of this version: an explicit request id, or `legacy-s3` when the
|
|
148
|
+
* version declares `platformRequirements.s3`. A filesystem request cannot declare exclusions.
|
|
149
|
+
*/
|
|
150
|
+
storageRequest: string;
|
|
151
|
+
/**
|
|
152
|
+
* 1 to 16 object key prefixes in strictly increasing UTF-16 code-unit order, none a prefix of
|
|
153
|
+
* another. Each is 1 to 512 UTF-8 bytes, ends in `/`, does not start with `/`, has no empty,
|
|
154
|
+
* `.` or `..` segment and no control character or unpaired surrogate.
|
|
155
|
+
*/
|
|
156
|
+
keyPrefixes: string[];
|
|
157
|
+
/** One operator-readable line, e.g. "Workload logs; a restore brings back state, not past logs." */
|
|
158
|
+
reason: string;
|
|
159
|
+
}
|
|
160
|
+
|
|
130
161
|
export interface IAppStoreInlineSource {
|
|
131
162
|
type: 'inline';
|
|
132
163
|
}
|
|
@@ -402,6 +433,13 @@ export interface IAppStoreVersionConfig {
|
|
|
402
433
|
storageClasses?: Record<string, IAppStoreStorageClass>;
|
|
403
434
|
/** Stable named filesystem and managed object-storage requests. */
|
|
404
435
|
storageRequests?: TAppStoreStorageRequest[];
|
|
436
|
+
/**
|
|
437
|
+
* Data the app keeps only for observability, in strictly increasing `storageRequest` order with
|
|
438
|
+
* each request at most once. A backup leaves it out; a restore neither brings it back nor
|
|
439
|
+
* removes it. A version declaring any entry names
|
|
440
|
+
* `appStoreStorageFeatureIds.objectStorageBackupExclusions` in `requiresFeatures`.
|
|
441
|
+
*/
|
|
442
|
+
backupExclusions?: IAppStoreBackupExclusion[];
|
|
405
443
|
publishedPorts?: IAppStorePublishedPort[];
|
|
406
444
|
platformRequirements?: IAppStorePlatformRequirements;
|
|
407
445
|
/**
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
* `platform.normalizeStorageRequest`), reporting through this module's rejection. What this module
|
|
16
16
|
* adds are the rules a request can only break inside a version config: its class is declared and of
|
|
17
17
|
* its kind, the class backs a declared limit or protection, ids and destinations are used once, the
|
|
18
|
-
* legacy names stay reserved,
|
|
18
|
+
* legacy names stay reserved, a backup exclusion names an object-storage request, and the storage
|
|
19
|
+
* feature ids are named.
|
|
19
20
|
*/
|
|
20
21
|
import { normalizeServiceAbsolutePath, validateServiceContainerArgs } from '../data/service.js';
|
|
21
22
|
import { normalizeServicePortConfig } from '../data/serviceports.js';
|
|
@@ -26,16 +27,22 @@ import type {
|
|
|
26
27
|
TServiceTargetPortRef,
|
|
27
28
|
TServiceTargetProtocol,
|
|
28
29
|
} from '../data/serviceports.js';
|
|
30
|
+
import { compareWireTokens } from '../private/canonicaljson.js';
|
|
29
31
|
import { readDataElements, readDataProperties } from '../private/dataproperties.js';
|
|
30
32
|
import type { TCompleteKeyList } from '../private/keylist.js';
|
|
31
33
|
import { createStorageContractReaders } from '../private/storagecontract.js';
|
|
32
34
|
import type { TObjectStorageDelivery } from '../platform/storage.js';
|
|
33
35
|
import {
|
|
36
|
+
appStoreBackupExclusionLimits,
|
|
34
37
|
appStoreStorageFeatureIds,
|
|
35
38
|
validateAppStoreEnvironmentDeclarations,
|
|
36
39
|
validateAppStoreVersionPlatformOidc,
|
|
37
40
|
} from './types.js';
|
|
38
|
-
import type {
|
|
41
|
+
import type {
|
|
42
|
+
IAppStoreBackupExclusion,
|
|
43
|
+
IAppStoreVersionConfig,
|
|
44
|
+
TAppStoreStorageRequest,
|
|
45
|
+
} from './types.js';
|
|
39
46
|
|
|
40
47
|
const versionConfigMemberList = [
|
|
41
48
|
'image',
|
|
@@ -48,6 +55,7 @@ const versionConfigMemberList = [
|
|
|
48
55
|
'volumes',
|
|
49
56
|
'storageClasses',
|
|
50
57
|
'storageRequests',
|
|
58
|
+
'backupExclusions',
|
|
51
59
|
'publishedPorts',
|
|
52
60
|
'platformRequirements',
|
|
53
61
|
'platformOidc',
|
|
@@ -92,6 +100,8 @@ const legacyObjectStorageClassKey = 'legacyObjectStorage';
|
|
|
92
100
|
const legacyObjectStorageRequestId = 'legacy-s3';
|
|
93
101
|
const knownStorageFeatureIds: readonly string[] = Object.values(appStoreStorageFeatureIds);
|
|
94
102
|
const platformRequirementKeys = ['mongodb', 's3', 'clickhouse', 'valkey', 'mariadb', 'mail'] as const;
|
|
103
|
+
const controlCharacterPattern = /[\u0000-\u001f\u007f]/;
|
|
104
|
+
const utf8Encoder = new TextEncoder();
|
|
95
105
|
|
|
96
106
|
/** Thrown inside this module only; every exported validator answers it as its result. */
|
|
97
107
|
class AppStoreVersionConfigRejection extends Error {}
|
|
@@ -601,6 +611,7 @@ function checkExplicitStorageRequests(
|
|
|
601
611
|
function checkFeatureDeclaration(
|
|
602
612
|
requiresFeaturesArg: unknown,
|
|
603
613
|
explicitRequestsArg: readonly TAppStoreStorageRequest[],
|
|
614
|
+
backupExclusionsArg: readonly IAppStoreBackupExclusion[],
|
|
604
615
|
labelArg: string,
|
|
605
616
|
): void {
|
|
606
617
|
const derivedFeatures = new Set<string>();
|
|
@@ -614,6 +625,9 @@ function checkFeatureDeclaration(
|
|
|
614
625
|
if (explicitRequestsArg.some((requestArg) => requestArg.kind === 'objectStorage' && requestArg.delivery.type === 'file')) {
|
|
615
626
|
derivedFeatures.add(appStoreStorageFeatureIds.objectStorageFile);
|
|
616
627
|
}
|
|
628
|
+
if (backupExclusionsArg.length > 0) {
|
|
629
|
+
derivedFeatures.add(appStoreStorageFeatureIds.objectStorageBackupExclusions);
|
|
630
|
+
}
|
|
617
631
|
|
|
618
632
|
const declaredEntries = requiresFeaturesArg === undefined
|
|
619
633
|
? []
|
|
@@ -641,6 +655,123 @@ function checkFeatureDeclaration(
|
|
|
641
655
|
}
|
|
642
656
|
}
|
|
643
657
|
|
|
658
|
+
const hasUnpairedSurrogate = (valueArg: string): boolean => {
|
|
659
|
+
for (let index = 0; index < valueArg.length; index++) {
|
|
660
|
+
const codeUnit = valueArg.charCodeAt(index);
|
|
661
|
+
if (codeUnit >= 0xd800 && codeUnit <= 0xdbff) {
|
|
662
|
+
const following = valueArg.charCodeAt(index + 1);
|
|
663
|
+
if (!(following >= 0xdc00 && following <= 0xdfff)) return true;
|
|
664
|
+
index++;
|
|
665
|
+
} else if (codeUnit >= 0xdc00 && codeUnit <= 0xdfff) {
|
|
666
|
+
return true;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
return false;
|
|
670
|
+
};
|
|
671
|
+
|
|
672
|
+
/** One object key prefix: a relative key path that names a whole subtree. */
|
|
673
|
+
function checkBackupExclusionKeyPrefix(valueArg: unknown, labelArg: string): string {
|
|
674
|
+
if (typeof valueArg !== 'string') return reject(`Invalid ${labelArg}: expected a string`);
|
|
675
|
+
if (controlCharacterPattern.test(valueArg) || hasUnpairedSurrogate(valueArg)) {
|
|
676
|
+
reject(`Invalid ${labelArg}: must not contain a control character or an unpaired surrogate`);
|
|
677
|
+
}
|
|
678
|
+
const byteLength = utf8Encoder.encode(valueArg).byteLength;
|
|
679
|
+
if (byteLength < 1 || byteLength > appStoreBackupExclusionLimits.maximumKeyPrefixBytes) {
|
|
680
|
+
reject(`Invalid ${labelArg}: must be 1 to ${appStoreBackupExclusionLimits.maximumKeyPrefixBytes} UTF-8 bytes`);
|
|
681
|
+
}
|
|
682
|
+
if (valueArg.startsWith('/')) reject(`Invalid ${labelArg}: must not start with '/'`);
|
|
683
|
+
if (!valueArg.endsWith('/')) reject(`Invalid ${labelArg}: must end with '/'`);
|
|
684
|
+
if (valueArg.slice(0, -1).split('/').some((segmentArg) => segmentArg === '' || segmentArg === '.' || segmentArg === '..')) {
|
|
685
|
+
reject(`Invalid ${labelArg}: must not contain an empty, '.' or '..' segment`);
|
|
686
|
+
}
|
|
687
|
+
return valueArg;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* One exclusion's key prefix list: 1 to 16 prefixes, strictly increasing, none inside another.
|
|
692
|
+
* `validateAppStoreBackupExclusionKeyPrefixes` exports it, so every reader of a prefix list judges
|
|
693
|
+
* it by this one rule.
|
|
694
|
+
*/
|
|
695
|
+
function checkBackupExclusionKeyPrefixes(valueArg: unknown, labelArg: string): string[] {
|
|
696
|
+
const { maximumKeyPrefixes } = appStoreBackupExclusionLimits;
|
|
697
|
+
const prefixEntries = readDataElements(valueArg, maximumKeyPrefixes);
|
|
698
|
+
if (prefixEntries === null || prefixEntries.length === 0) {
|
|
699
|
+
return reject(`Invalid ${labelArg}: expected an array of 1 to ${maximumKeyPrefixes} key prefixes`);
|
|
700
|
+
}
|
|
701
|
+
const keyPrefixes: string[] = [];
|
|
702
|
+
prefixEntries.forEach((prefixArg, indexArg) => {
|
|
703
|
+
const prefixLabel = `${labelArg}[${indexArg}]`;
|
|
704
|
+
const prefix = checkBackupExclusionKeyPrefix(prefixArg, prefixLabel);
|
|
705
|
+
const previousPrefix = keyPrefixes[keyPrefixes.length - 1];
|
|
706
|
+
if (previousPrefix !== undefined && compareWireTokens(previousPrefix, prefix) >= 0) {
|
|
707
|
+
reject(`Invalid ${labelArg}: must be strictly increasing`);
|
|
708
|
+
}
|
|
709
|
+
const covering = keyPrefixes.find((existingArg) => prefix.startsWith(existingArg));
|
|
710
|
+
if (covering !== undefined) {
|
|
711
|
+
reject(`Invalid ${prefixLabel}: '${prefix}' lies inside '${covering}'`);
|
|
712
|
+
}
|
|
713
|
+
keyPrefixes.push(prefix);
|
|
714
|
+
});
|
|
715
|
+
return keyPrefixes;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
/**
|
|
719
|
+
* The members of each backup exclusion, its key prefixes and the entry order. Which request an
|
|
720
|
+
* entry names is judged once the config's requests are known (`checkBackupExclusionTargets`).
|
|
721
|
+
*/
|
|
722
|
+
function checkBackupExclusions(valueArg: unknown, labelArg: string): IAppStoreBackupExclusion[] {
|
|
723
|
+
if (valueArg === undefined) return [];
|
|
724
|
+
const { maximumEntries, maximumReasonLength } = appStoreBackupExclusionLimits;
|
|
725
|
+
const entries = readDataElements(valueArg, maximumEntries);
|
|
726
|
+
if (entries === null || entries.length === 0) {
|
|
727
|
+
return reject(`Invalid ${labelArg}: backupExclusions must contain between 1 and ${maximumEntries} entries`);
|
|
728
|
+
}
|
|
729
|
+
let previousRequest: string | null = null;
|
|
730
|
+
return entries.map((entryArg, indexArg): IAppStoreBackupExclusion => {
|
|
731
|
+
const entryLabel = `${labelArg} backupExclusions[${indexArg}]`;
|
|
732
|
+
const entry = readRecord(entryArg, entryLabel);
|
|
733
|
+
assertExactKeys(entry, ['storageRequest', 'keyPrefixes', 'reason'], entryLabel);
|
|
734
|
+
const { storageRequest, reason } = entry;
|
|
735
|
+
if (typeof storageRequest !== 'string') return reject(`Invalid ${entryLabel}.storageRequest: expected a string`);
|
|
736
|
+
if (previousRequest !== null && compareWireTokens(previousRequest, storageRequest) >= 0) {
|
|
737
|
+
reject(previousRequest === storageRequest
|
|
738
|
+
? `Invalid ${labelArg}: backupExclusions name storage request '${storageRequest}' more than once`
|
|
739
|
+
: `Invalid ${labelArg}: backupExclusions must be in strictly increasing storageRequest order`);
|
|
740
|
+
}
|
|
741
|
+
previousRequest = storageRequest;
|
|
742
|
+
|
|
743
|
+
const keyPrefixes = checkBackupExclusionKeyPrefixes(entry.keyPrefixes, `${entryLabel}.keyPrefixes`);
|
|
744
|
+
|
|
745
|
+
if (typeof reason !== 'string'
|
|
746
|
+
|| reason.length === 0
|
|
747
|
+
|| reason.length > maximumReasonLength
|
|
748
|
+
|| reason.trim() !== reason
|
|
749
|
+
|| controlCharacterPattern.test(reason)
|
|
750
|
+
|| hasUnpairedSurrogate(reason)) {
|
|
751
|
+
reject(`Invalid ${entryLabel}.reason: must be one trimmed line of 1 to ${maximumReasonLength} characters`);
|
|
752
|
+
}
|
|
753
|
+
return { storageRequest, keyPrefixes, reason };
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/** Each backup exclusion names an object-storage request of the normalized config. */
|
|
758
|
+
function checkBackupExclusionTargets(
|
|
759
|
+
exclusionsArg: readonly IAppStoreBackupExclusion[],
|
|
760
|
+
objectStorageRequestIdsArg: ReadonlySet<string>,
|
|
761
|
+
filesystemRequestIdsArg: ReadonlySet<string>,
|
|
762
|
+
labelArg: string,
|
|
763
|
+
): void {
|
|
764
|
+
exclusionsArg.forEach((exclusionArg, indexArg) => {
|
|
765
|
+
const { storageRequest } = exclusionArg;
|
|
766
|
+
if (objectStorageRequestIdsArg.has(storageRequest)) return;
|
|
767
|
+
const requestLabel = `${labelArg} backupExclusions[${indexArg}].storageRequest`;
|
|
768
|
+
if (filesystemRequestIdsArg.has(storageRequest)) {
|
|
769
|
+
reject(`Invalid ${requestLabel}: '${storageRequest}' is a filesystem request; only an objectStorage request declares backup exclusions`);
|
|
770
|
+
}
|
|
771
|
+
reject(`Invalid ${requestLabel}: '${storageRequest}' does not name an objectStorage request of this version`);
|
|
772
|
+
});
|
|
773
|
+
}
|
|
774
|
+
|
|
644
775
|
interface ILegacyVolumeFacts {
|
|
645
776
|
name?: string;
|
|
646
777
|
mountPath: string;
|
|
@@ -710,7 +841,8 @@ function checkStorage(configArg: Record<string, unknown>, labelArg: string): voi
|
|
|
710
841
|
destinations,
|
|
711
842
|
labelArg,
|
|
712
843
|
);
|
|
713
|
-
|
|
844
|
+
const backupExclusions = checkBackupExclusions(configArg.backupExclusions, labelArg);
|
|
845
|
+
checkFeatureDeclaration(configArg.requiresFeatures, explicitRequests, backupExclusions, labelArg);
|
|
714
846
|
const legacyS3 = platformRequirements.s3 === true;
|
|
715
847
|
if (legacyS3 && explicitRequests.some((requestArg) => requestArg.kind === 'objectStorage')) {
|
|
716
848
|
reject(`Invalid ${labelArg}: platformRequirements.s3 cannot coexist with explicit objectStorage requests`);
|
|
@@ -727,6 +859,7 @@ function checkStorage(configArg: Record<string, unknown>, labelArg: string): voi
|
|
|
727
859
|
const allMounts: Array<{ id: string; mountPath: string }> = explicitRequests.flatMap((requestArg) => (
|
|
728
860
|
requestArg.kind === 'filesystem' ? [{ id: requestArg.id, mountPath: requestArg.mountPath }] : []
|
|
729
861
|
));
|
|
862
|
+
const legacyVolumeRequestIds: string[] = [];
|
|
730
863
|
legacyVolumes.forEach((volumeArg, indexArg) => {
|
|
731
864
|
const requestId = legacyVolumeRequestId(volumeArg, indexArg, labelArg);
|
|
732
865
|
if (requestIds.has(requestId)) reject(`Invalid ${labelArg}: storage request id '${requestId}' is duplicated`);
|
|
@@ -734,6 +867,7 @@ function checkStorage(configArg: Record<string, unknown>, labelArg: string): voi
|
|
|
734
867
|
requestIds.add(requestId);
|
|
735
868
|
mountPaths.push(volumeArg.mountPath);
|
|
736
869
|
allMounts.push({ id: requestId, mountPath: volumeArg.mountPath });
|
|
870
|
+
legacyVolumeRequestIds.push(requestId);
|
|
737
871
|
});
|
|
738
872
|
|
|
739
873
|
if (legacyS3) {
|
|
@@ -744,6 +878,18 @@ function checkStorage(configArg: Record<string, unknown>, labelArg: string): voi
|
|
|
744
878
|
reject(`Invalid ${labelArg}: storage request id '${legacyObjectStorageRequestId}' is reserved for legacy S3 normalization`);
|
|
745
879
|
}
|
|
746
880
|
}
|
|
881
|
+
checkBackupExclusionTargets(
|
|
882
|
+
backupExclusions,
|
|
883
|
+
new Set([
|
|
884
|
+
...explicitRequests.flatMap((requestArg) => (requestArg.kind === 'objectStorage' ? [requestArg.id] : [])),
|
|
885
|
+
...(legacyS3 ? [legacyObjectStorageRequestId] : []),
|
|
886
|
+
]),
|
|
887
|
+
new Set([
|
|
888
|
+
...explicitRequests.flatMap((requestArg) => (requestArg.kind === 'filesystem' ? [requestArg.id] : [])),
|
|
889
|
+
...legacyVolumeRequestIds,
|
|
890
|
+
]),
|
|
891
|
+
labelArg,
|
|
892
|
+
);
|
|
747
893
|
|
|
748
894
|
const checkedMounts: string[] = [];
|
|
749
895
|
for (const mount of allMounts) {
|
|
@@ -777,12 +923,24 @@ export const validateAppStorePublishedPorts = (publishedPortsArg: unknown, label
|
|
|
777
923
|
|
|
778
924
|
/**
|
|
779
925
|
* The config's member set and its storage: legacy `volumes`, `storageClasses`, `storageRequests`,
|
|
780
|
-
* `platformRequirements`, the storage feature ids `requiresFeatures` must name,
|
|
781
|
-
* environment, secret-file and mount destination being used once.
|
|
926
|
+
* `platformRequirements`, `backupExclusions`, the storage feature ids `requiresFeatures` must name,
|
|
927
|
+
* and every environment, secret-file and mount destination being used once.
|
|
782
928
|
*/
|
|
783
929
|
export const validateAppStoreVersionStorage = (configArg: unknown, labelArg = defaultLabel): string[] =>
|
|
784
930
|
firstRejection(() => checkStorage(readConfig(configArg, labelArg), labelArg));
|
|
785
931
|
|
|
932
|
+
/**
|
|
933
|
+
* One backup exclusion's `keyPrefixes`, the rule `validateAppStoreVersionStorage` applies to each
|
|
934
|
+
* `IAppStoreBackupExclusion`: 1 to 16 prefixes in strictly increasing UTF-16 code-unit order, none
|
|
935
|
+
* inside another, each 1 to 512 UTF-8 bytes ending in `/`, without a leading `/`, an empty, `.` or
|
|
936
|
+
* `..` segment, a control character or an unpaired surrogate. A reader of a list that carries such
|
|
937
|
+
* prefixes elsewhere, such as a backup manifest, judges it here.
|
|
938
|
+
*/
|
|
939
|
+
export const validateAppStoreBackupExclusionKeyPrefixes = (
|
|
940
|
+
valueArg: unknown,
|
|
941
|
+
labelArg = 'keyPrefixes',
|
|
942
|
+
): string[] => firstRejection(() => checkBackupExclusionKeyPrefixes(valueArg, labelArg));
|
|
943
|
+
|
|
786
944
|
/**
|
|
787
945
|
* Every member rule of a version config, in the order a host applies them: image, port model,
|
|
788
946
|
* container arguments, environment declarations, storage, platform OIDC, published ports.
|