@serve.zone/dcrouter 32.1.1 → 32.1.2

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.
Files changed (48) hide show
  1. package/deno.json +1 -1
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.dcrouter.js +2 -2
  4. package/dist_ts/config/classes.gateway-client-manager.js +1 -1
  5. package/dist_ts/db/documents/classes.cached.email.d.ts +0 -1
  6. package/dist_ts/db/documents/classes.cached.email.js +45 -48
  7. package/dist_ts/db/documents/classes.email-traffic-bucket.doc.d.ts +0 -1
  8. package/dist_ts/db/documents/classes.email-traffic-bucket.doc.js +61 -50
  9. package/dist_ts/db/documents/classes.gateway-client.doc.d.ts +9 -2
  10. package/dist_ts/db/documents/classes.gateway-client.doc.js +9 -11
  11. package/dist_ts/db/documents/classes.ip-intelligence.doc.d.ts +4 -3
  12. package/dist_ts/db/documents/classes.ip-intelligence.doc.js +27 -31
  13. package/dist_ts/db/documents/classes.ops-config-event.doc.d.ts +0 -2
  14. package/dist_ts/db/documents/classes.ops-config-event.doc.js +70 -68
  15. package/dist_ts/db/documents/classes.smartmta-storage.doc.d.ts +14 -0
  16. package/dist_ts/db/documents/classes.smartmta-storage.doc.js +17 -3
  17. package/dist_ts/db/documents/classes.webpush-admission.doc.d.ts +0 -1
  18. package/dist_ts/db/documents/classes.webpush-admission.doc.js +14 -5
  19. package/dist_ts/db/documents/classes.webpush-binding.doc.d.ts +1 -1
  20. package/dist_ts/db/documents/classes.webpush-binding.doc.js +45 -7
  21. package/dist_ts/db/documents/classes.webpush-spool.doc.d.ts +0 -1
  22. package/dist_ts/db/documents/classes.webpush-spool.doc.js +33 -5
  23. package/dist_ts/dns/manager.dns.js +7 -3
  24. package/dist_ts/email/classes.smartmta-storage-manager.d.ts +15 -3
  25. package/dist_ts/email/classes.smartmta-storage-manager.js +62 -36
  26. package/dist_ts/security/classes.security-policy-manager.js +11 -9
  27. package/dist_ts/webpush/classes.webpush-manager.d.ts +5 -1
  28. package/dist_ts/webpush/classes.webpush-manager.js +162 -232
  29. package/dist_ts_web/00_commitinfo_data.js +1 -1
  30. package/package.json +3 -3
  31. package/readme.md +1 -0
  32. package/ts/00_commitinfo_data.ts +1 -1
  33. package/ts/classes.dcrouter.ts +1 -1
  34. package/ts/config/classes.gateway-client-manager.ts +4 -2
  35. package/ts/db/documents/classes.cached.email.ts +51 -66
  36. package/ts/db/documents/classes.email-traffic-bucket.doc.ts +65 -59
  37. package/ts/db/documents/classes.gateway-client.doc.ts +38 -18
  38. package/ts/db/documents/classes.ip-intelligence.doc.ts +37 -40
  39. package/ts/db/documents/classes.ops-config-event.doc.ts +80 -77
  40. package/ts/db/documents/classes.smartmta-storage.doc.ts +16 -1
  41. package/ts/db/documents/classes.webpush-admission.doc.ts +14 -5
  42. package/ts/db/documents/classes.webpush-binding.doc.ts +53 -7
  43. package/ts/db/documents/classes.webpush-spool.doc.ts +39 -5
  44. package/ts/dns/manager.dns.ts +6 -2
  45. package/ts/email/classes.smartmta-storage-manager.ts +66 -50
  46. package/ts/security/classes.security-policy-manager.ts +10 -8
  47. package/ts/webpush/classes.webpush-manager.ts +175 -280
  48. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -45,6 +45,7 @@ export declare class WebPushBindingDoc extends plugins.smartdata.SmartDataDbDoc<
45
45
  ownerAppInstanceId: string;
46
46
  enabled: boolean;
47
47
  status: plugins.servezoneInterfaces.data.TWebPushBindingStatus;
48
+ /** `credential.id` is the compare-and-set anchor of credential rotation and a unique index. */
48
49
  credential: IWebPushStoredCredential;
49
50
  /** At most one still-valid overlap credential; expired entries are scrubbed. */
50
51
  previousCredentials: IWebPushStoredCredential[];
@@ -60,6 +61,5 @@ export declare class WebPushBindingDoc extends plugins.smartdata.SmartDataDbDoc<
60
61
  controllerFence?: IWebPushStoredControllerFence;
61
62
  /** MUST BE ABSENT unless this owner-reserving binding is a deletion tombstone. */
62
63
  deletedAt?: number;
63
- static getNativeCollection(): plugins.smartdata.SmartdataCollection<WebPushBindingDoc>['mongoDbCollection'];
64
64
  createSavableObject(): Promise<WebPushBindingDoc>;
65
65
  }
@@ -35,8 +35,45 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import * as plugins from '../../plugins.js';
36
36
  import { DcRouterDb } from '../classes.dcrouter-db.js';
37
37
  const getDb = () => DcRouterDb.getInstance().getDb();
38
+ // Every index is declared under the exact name the released Web Push schema migration created
39
+ // it with (`ts_migrations/index.ts` via `ts/webpush/webpush-indexes.ts`), so model initialization
40
+ // verifies the existing topology instead of installing a second, differently named index over the
41
+ // same key. `test/test.webpush-persisted-bytes.node.ts` keeps both declarations in lockstep.
38
42
  let WebPushBindingDoc = (() => {
39
- let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
43
+ let _classDecorators = [plugins.smartdata.namedIndex({
44
+ name: 'web_push_binding_id_unique',
45
+ key: { id: 1 },
46
+ options: { unique: true },
47
+ }), plugins.smartdata.namedIndex({
48
+ name: 'web_push_binding_owner_unique',
49
+ key: { ownerGatewayClientType: 1, ownerGatewayClientId: 1, ownerAppInstanceId: 1 },
50
+ options: { unique: true },
51
+ }), plugins.smartdata.namedIndex({
52
+ name: 'web_push_binding_credential_unique',
53
+ key: { 'credential.id': 1 },
54
+ options: { unique: true },
55
+ }), plugins.smartdata.namedIndex({
56
+ name: 'web_push_binding_previous_credential_lookup',
57
+ key: { 'previousCredentials.id': 1 },
58
+ }), plugins.smartdata.namedIndex({
59
+ name: 'web_push_binding_previous_credential_cleanup',
60
+ key: { 'previousCredentials.validUntil': 1 },
61
+ }), plugins.smartdata.namedIndex({
62
+ name: 'web_push_binding_rotation_recovery_cleanup',
63
+ key: { 'credentialRotationRecovery.expiresAt': 1 },
64
+ }), plugins.smartdata.namedIndex({
65
+ name: 'web_push_binding_vapid_status_cleanup',
66
+ key: { 'vapidKeys.status': 1 },
67
+ }), plugins.smartdata.namedIndex({
68
+ name: 'web_push_binding_vapid_retire_after_cleanup',
69
+ key: { 'vapidKeys.retireAfter': 1 },
70
+ }), plugins.smartdata.namedIndex({
71
+ name: 'web_push_binding_disabled_cleanup',
72
+ key: { enabled: 1, lifecycleGeneration: 1 },
73
+ }), plugins.smartdata.namedIndex({
74
+ name: 'web_push_binding_deleted_cleanup',
75
+ key: { deletedAt: 1, lifecycleGeneration: 1 },
76
+ }), plugins.smartdata.Collection(() => getDb())];
40
77
  let _classDescriptor;
41
78
  let _classExtraInitializers = [];
42
79
  let _classThis;
@@ -102,9 +139,12 @@ let WebPushBindingDoc = (() => {
102
139
  _ownerAppInstanceId_decorators = [plugins.smartdata.svDb()];
103
140
  _enabled_decorators = [plugins.smartdata.svDb()];
104
141
  _status_decorators = [plugins.smartdata.svDb()];
105
- _credential_decorators = [plugins.smartdata.svDb()];
142
+ _credential_decorators = [plugins.smartdata.svDb({ atomicPaths: ['id'] })];
106
143
  _previousCredentials_decorators = [plugins.smartdata.svDb()];
107
- _credentialRotationRecovery_decorators = [plugins.smartdata.svDb()];
144
+ _credentialRotationRecovery_decorators = [plugins.smartdata.svDb({
145
+ // Expiry cleanup fences on the exact recovery record it observed.
146
+ atomicPaths: ['requestedCredentialId', 'resultingCredentialId', 'expiresAt'],
147
+ })];
108
148
  _vapidKeys_decorators = [plugins.smartdata.svDb()];
109
149
  _createdAt_decorators = [plugins.smartdata.svDb()];
110
150
  _updatedAt_decorators = [plugins.smartdata.svDb()];
@@ -141,6 +181,7 @@ let WebPushBindingDoc = (() => {
141
181
  ownerAppInstanceId = (__runInitializers(this, _ownerGatewayClientId_extraInitializers), __runInitializers(this, _ownerAppInstanceId_initializers, void 0));
142
182
  enabled = (__runInitializers(this, _ownerAppInstanceId_extraInitializers), __runInitializers(this, _enabled_initializers, void 0));
143
183
  status = (__runInitializers(this, _enabled_extraInitializers), __runInitializers(this, _status_initializers, void 0));
184
+ /** `credential.id` is the compare-and-set anchor of credential rotation and a unique index. */
144
185
  credential = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _credential_initializers, void 0));
145
186
  /** At most one still-valid overlap credential; expired entries are scrubbed. */
146
187
  previousCredentials = (__runInitializers(this, _credential_extraInitializers), __runInitializers(this, _previousCredentials_initializers, []));
@@ -156,9 +197,6 @@ let WebPushBindingDoc = (() => {
156
197
  controllerFence = (__runInitializers(this, _lifecycleGeneration_extraInitializers), __runInitializers(this, _controllerFence_initializers, void 0));
157
198
  /** MUST BE ABSENT unless this owner-reserving binding is a deletion tombstone. */
158
199
  deletedAt = (__runInitializers(this, _controllerFence_extraInitializers), __runInitializers(this, _deletedAt_initializers, void 0));
159
- static getNativeCollection() {
160
- return getDb().mongoDb.collection('WebPushBindingDoc');
161
- }
162
200
  async createSavableObject() {
163
201
  const savable = await super.createSavableObject();
164
202
  if (savable.credential.secretHash === undefined) {
@@ -202,4 +240,4 @@ let WebPushBindingDoc = (() => {
202
240
  return WebPushBindingDoc = _classThis;
203
241
  })();
204
242
  export { WebPushBindingDoc };
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJwdXNoLWJpbmRpbmcuZG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvZGIvZG9jdW1lbnRzL2NsYXNzZXMud2VicHVzaC1iaW5kaW5nLmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUE4Q3ZELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUd4QyxpQkFBaUI7NEJBRDdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDOzs7O3NCQUNMLE9BQU8sQ0FBQyxTQUFTLENBQUMsY0FBYzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBeEMsU0FBUSxXQUd0Qzs7Ozs4QkFDRSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrREFHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0RBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzhDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTttQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7a0NBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3NDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQ0FJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0RBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFD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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJwdXNoLWJpbmRpbmcuZG9jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvZGIvZG9jdW1lbnRzL2NsYXNzZXMud2VicHVzaC1iaW5kaW5nLmRvYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUE4Q3ZELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUVyRCw4RkFBOEY7QUFDOUYsa0dBQWtHO0FBQ2xHLGtHQUFrRztBQUNsRyw2RkFBNkY7SUE2Q2hGLGlCQUFpQjs0QkE1QzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQzVCLElBQUksRUFBRSw0QkFBNEI7WUFDbEMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtZQUNkLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDMUIsQ0FBQyxFQUNELE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQzVCLElBQUksRUFBRSwrQkFBK0I7WUFDckMsR0FBRyxFQUFFLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLEVBQUU7WUFDbEYsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtTQUMxQixDQUFDLEVBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDNUIsSUFBSSxFQUFFLG9DQUFvQztZQUMxQyxHQUFHLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFO1lBQzNCLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFB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
@@ -38,6 +38,5 @@ export declare class WebPushSpoolDoc extends plugins.smartdata.SmartDataDbDoc<We
38
38
  errorCode: string | null;
39
39
  /** MUST BE ABSENT until terminal retention begins. */
40
40
  purgeAt?: Date;
41
- static getNativeCollection(): plugins.smartdata.SmartdataCollection<WebPushSpoolDoc>['mongoDbCollection'];
42
41
  createSavableObject(): Promise<WebPushSpoolDoc>;
43
42
  }
@@ -35,8 +35,39 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import * as plugins from '../../plugins.js';
36
36
  import { DcRouterDb } from '../classes.dcrouter-db.js';
37
37
  const getDb = () => DcRouterDb.getInstance().getDb();
38
+ // Every index is declared under the exact name the released Web Push schema migration created
39
+ // it with (`ts_migrations/index.ts` via `ts/webpush/webpush-indexes.ts`), so model initialization
40
+ // verifies the existing topology instead of installing a second, differently named index over the
41
+ // same key. `test/test.webpush-persisted-bytes.node.ts` keeps both declarations in lockstep.
38
42
  let WebPushSpoolDoc = (() => {
39
- let _classDecorators = [plugins.smartdata.Collection(() => getDb())];
43
+ let _classDecorators = [plugins.smartdata.namedIndex({
44
+ name: 'web_push_spool_id_unique',
45
+ key: { id: 1 },
46
+ options: { unique: true },
47
+ }), plugins.smartdata.namedIndex({
48
+ name: 'web_push_spool_idempotency_unique',
49
+ key: { bindingId: 1, lifecycleGeneration: 1, credentialId: 1, idempotencyKeyDigest: 1 },
50
+ options: { unique: true },
51
+ }), plugins.smartdata.namedIndex({
52
+ name: 'web_push_spool_delivery_scan',
53
+ key: { state: 1, nextAttemptAt: 1, leaseExpiresAt: 1 },
54
+ }), plugins.smartdata.namedIndex({
55
+ name: 'web_push_spool_cancellation_scan',
56
+ key: { bindingId: 1, lifecycleGeneration: 1, subscriptionId: 1, state: 1 },
57
+ }), plugins.smartdata.namedIndex({
58
+ name: 'web_push_spool_cancelled_lease_scan',
59
+ key: { state: 1, cancelRequestedAt: 1, leaseExpiresAt: 1, id: 1 },
60
+ }), plugins.smartdata.namedIndex({
61
+ name: 'web_push_spool_lifecycle_drain_scan',
62
+ key: { bindingId: 1, lifecycleGeneration: 1, state: 1, leaseExpiresAt: 1 },
63
+ }), plugins.smartdata.namedIndex({
64
+ name: 'web_push_spool_vapid_retirement_scan',
65
+ key: { bindingId: 1, lifecycleGeneration: 1, vapidKeyId: 1, state: 1 },
66
+ }), plugins.smartdata.namedIndex({
67
+ name: 'web_push_spool_terminal_ttl',
68
+ key: { purgeAt: 1 },
69
+ options: { expireAfterSeconds: 0 },
70
+ }), plugins.smartdata.Collection(() => getDb())];
40
71
  let _classDescriptor;
41
72
  let _classExtraInitializers = [];
42
73
  let _classThis;
@@ -237,9 +268,6 @@ let WebPushSpoolDoc = (() => {
237
268
  errorCode = (__runInitializers(this, _pushServiceStatusCode_extraInitializers), __runInitializers(this, _errorCode_initializers, null));
238
269
  /** MUST BE ABSENT until terminal retention begins. */
239
270
  purgeAt = (__runInitializers(this, _errorCode_extraInitializers), __runInitializers(this, _purgeAt_initializers, void 0));
240
- static getNativeCollection() {
241
- return getDb().mongoDb.collection('WebPushSpoolDoc');
242
- }
243
271
  async createSavableObject() {
244
272
  const savable = await super.createSavableObject();
245
273
  for (const field of [
@@ -268,4 +296,4 @@ let WebPushSpoolDoc = (() => {
268
296
  return WebPushSpoolDoc = _classThis;
269
297
  })();
270
298
  export { WebPushSpoolDoc };
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJwdXNoLXNwb29sLmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLndlYnB1c2gtc3Bvb2wuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFHeEMsZUFBZTs0QkFEM0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1AsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQUF4QyxTQUFRLFdBR3BDOzs7OzhCQUNFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0NBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnREFHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7eUNBR3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzBDQUd4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTswQ0FHeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJ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
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy53ZWJwdXNoLXNwb29sLmRvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL2RiL2RvY3VtZW50cy9jbGFzc2VzLndlYnB1c2gtc3Bvb2wuZG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd2RCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7QUFFckQsOEZBQThGO0FBQzlGLGtHQUFrRztBQUNsRyxrR0FBa0c7QUFDbEcsNkZBQTZGO0lBcUNoRixlQUFlOzRCQXBDM0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDNUIsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2QsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtTQUMxQixDQUFDLEVBQ0QsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDNUIsSUFBSSxFQUFFLG1DQUFtQztZQUN6QyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRTtZQUN2RixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1NBQzFCLENBQUMsRUFDRCxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1QixJQUFJLEVBQUUsOEJBQThCO1lBQ3BDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFB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