@nlabs/reaktor 1.10.0 → 1.11.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.
Files changed (41) hide show
  1. package/README.md +4 -0
  2. package/docs/GENERATION.md +86 -0
  3. package/lib/actions/contentGeneration.d.ts +22 -1
  4. package/lib/actions/contentGeneration.js +84 -16
  5. package/lib/actions/databaseAccounts.d.ts +14 -0
  6. package/lib/actions/databaseAccounts.js +211 -0
  7. package/lib/actions/databaseProvisioningLease.d.ts +6 -0
  8. package/lib/actions/databaseProvisioningLease.js +166 -0
  9. package/lib/actions/higgsfield.d.ts +2 -0
  10. package/lib/actions/higgsfield.js +7 -1
  11. package/lib/actions/imageGeneration.d.ts +5 -1
  12. package/lib/actions/imageGeneration.js +13 -2
  13. package/lib/actions/index.d.ts +2 -0
  14. package/lib/actions/index.js +3 -1
  15. package/lib/actions/videoGeneration.d.ts +5 -1
  16. package/lib/actions/videoGeneration.js +13 -2
  17. package/lib/adapters/higgsfieldAdapter.d.ts +21 -15
  18. package/lib/adapters/higgsfieldAdapter.js +24 -11
  19. package/lib/adapters/higgsfieldModelCatalog.d.ts +10 -0
  20. package/lib/adapters/higgsfieldModelCatalog.js +5363 -0
  21. package/lib/adapters/higgsfieldModels.d.ts +2 -0
  22. package/lib/adapters/higgsfieldModels.js +37 -0
  23. package/lib/index.d.ts +4 -0
  24. package/lib/index.js +4 -1
  25. package/lib/objectTypes/contentGeneration.js +26 -3
  26. package/lib/objectTypes/imageGeneration.js +3 -2
  27. package/lib/objectTypes/videoGeneration.js +2 -1
  28. package/lib/types/databaseCredentials.types.d.ts +30 -0
  29. package/lib/types/databaseCredentials.types.js +3 -0
  30. package/lib/types/index.d.ts +1 -0
  31. package/lib/types/index.js +2 -1
  32. package/lib/utils/databaseCredentials.d.ts +5 -0
  33. package/lib/utils/databaseCredentials.js +100 -0
  34. package/lib/utils/generationCallback.d.ts +23 -0
  35. package/lib/utils/generationCallback.js +49 -0
  36. package/lib/utils/index.d.ts +3 -0
  37. package/lib/utils/index.js +4 -1
  38. package/lib/utils/secretDatabase.d.ts +8 -0
  39. package/lib/utils/secretDatabase.js +153 -0
  40. package/lib/utils/testUtils.js +10 -2
  41. package/package.json +12 -10
@@ -0,0 +1,153 @@
1
+ import { GetSecretValueCommand, SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
2
+ import { Database } from 'arangojs';
3
+ import { parseDatabaseCredentialSecret } from './databaseCredentials.js';
4
+ const CACHE_TTL_MS = 5 * 60 * 1000;
5
+ const MAX_CACHE_ENTRIES = 100;
6
+ const cache = new Map();
7
+ const secretsManager = new SecretsManagerClient({});
8
+ const assertIdentity = (actual, expected)=>{
9
+ for (const key of [
10
+ 'appId',
11
+ 'databaseName',
12
+ 'environment',
13
+ 'secretName',
14
+ 'username'
15
+ ]){
16
+ if (actual[key] !== expected[key]) {
17
+ throw new Error('invalid_database_credential_identity');
18
+ }
19
+ }
20
+ };
21
+ const isAuthenticationFailure = (error)=>{
22
+ if (!error || typeof error !== 'object') {
23
+ return false;
24
+ }
25
+ const { code, response, statusCode } = error;
26
+ return code === 401 || response?.status === 401 || statusCode === 401;
27
+ };
28
+ const readCredential = async (secretArn)=>{
29
+ let result;
30
+ try {
31
+ result = await secretsManager.send(new GetSecretValueCommand({
32
+ SecretId: secretArn
33
+ }));
34
+ } catch {
35
+ throw new Error('database_credential_unavailable');
36
+ }
37
+ if (!result.SecretString || !result.VersionId) {
38
+ throw new Error('invalid_database_credential_secret');
39
+ }
40
+ let value;
41
+ try {
42
+ value = JSON.parse(result.SecretString);
43
+ } catch {
44
+ throw new Error('invalid_database_credential_secret');
45
+ }
46
+ return {
47
+ value,
48
+ versionId: result.VersionId
49
+ };
50
+ };
51
+ const loadConnection = async (secretArn, identity, envelope, allowRefresh = true)=>{
52
+ const secret = parseDatabaseCredentialSecret(envelope.value, identity);
53
+ let client;
54
+ try {
55
+ client = new Database({
56
+ auth: {
57
+ password: secret.password,
58
+ username: secret.username
59
+ },
60
+ databaseName: secret.databaseName,
61
+ url: `${secret.host}:${secret.port}`
62
+ });
63
+ await client.get();
64
+ } catch (error) {
65
+ if (allowRefresh && isAuthenticationFailure(error)) {
66
+ return loadConnection(secretArn, identity, await readCredential(secretArn), false);
67
+ }
68
+ throw new Error('database_credential_unavailable');
69
+ }
70
+ return {
71
+ client,
72
+ envelope,
73
+ identity: secret,
74
+ versionId: envelope.versionId
75
+ };
76
+ };
77
+ export const invalidateSecretDatabase = (secretArn)=>{
78
+ cache.delete(secretArn);
79
+ };
80
+ export const getSecretDatabase = async (options)=>{
81
+ const secretArn = options.secretArn ?? process.env.ARANGODB_SECRET_ARN;
82
+ if (!secretArn) {
83
+ throw new Error('missing_database_secret_arn');
84
+ }
85
+ let entry = cache.get(secretArn);
86
+ const expired = entry?.expiresAt !== undefined && entry.expiresAt <= Date.now();
87
+ const refreshReady = options.refresh === true && entry?.ready === true;
88
+ const refreshPending = options.refresh === true && entry !== undefined && !entry.refresh && !entry.ready;
89
+ if (entry && (expired || refreshReady || refreshPending)) {
90
+ cache.delete(secretArn);
91
+ entry = undefined;
92
+ }
93
+ if (!entry) {
94
+ const pending = readCredential(secretArn);
95
+ entry = {
96
+ refresh: options.refresh === true,
97
+ secretPromise: pending
98
+ };
99
+ const currentEntry = entry;
100
+ currentEntry.secretPromise = pending.then((envelope)=>{
101
+ if (cache.get(secretArn) === currentEntry) {
102
+ currentEntry.expiresAt = Date.now() + CACHE_TTL_MS;
103
+ }
104
+ return envelope;
105
+ }, (error)=>{
106
+ if (cache.get(secretArn) === currentEntry) {
107
+ cache.delete(secretArn);
108
+ }
109
+ throw error;
110
+ });
111
+ cache.set(secretArn, currentEntry);
112
+ while(cache.size > MAX_CACHE_ENTRIES){
113
+ const oldestArn = cache.keys().next().value;
114
+ if (oldestArn !== undefined) {
115
+ cache.delete(oldestArn);
116
+ }
117
+ }
118
+ } else {
119
+ cache.delete(secretArn);
120
+ cache.set(secretArn, entry);
121
+ }
122
+ const envelope = await entry.secretPromise;
123
+ try {
124
+ parseDatabaseCredentialSecret(envelope.value, options.identity);
125
+ } catch (error) {
126
+ if (error instanceof Error && error.message === 'invalid_database_credential_secret' && cache.get(secretArn) === entry) {
127
+ cache.delete(secretArn);
128
+ }
129
+ throw error;
130
+ }
131
+ if (!entry.connectionPromise) {
132
+ const currentEntry = entry;
133
+ const pending = loadConnection(secretArn, options.identity, envelope);
134
+ currentEntry.connectionPromise = pending.then((connection)=>{
135
+ if (cache.get(secretArn) === currentEntry) {
136
+ currentEntry.secretPromise = Promise.resolve(connection.envelope);
137
+ currentEntry.expiresAt = Date.now() + CACHE_TTL_MS;
138
+ currentEntry.ready = true;
139
+ }
140
+ return connection;
141
+ }, (error)=>{
142
+ if (cache.get(secretArn) === currentEntry) {
143
+ cache.delete(secretArn);
144
+ }
145
+ throw error;
146
+ });
147
+ }
148
+ const connection = await entry.connectionPromise;
149
+ assertIdentity(connection.identity, options.identity);
150
+ return connection.client;
151
+ };
152
+
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvdXRpbHMvc2VjcmV0RGF0YWJhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHZXRTZWNyZXRWYWx1ZUNvbW1hbmQsIFNlY3JldHNNYW5hZ2VyQ2xpZW50fSBmcm9tICdAYXdzLXNkay9jbGllbnQtc2VjcmV0cy1tYW5hZ2VyJztcbmltcG9ydCB7RGF0YWJhc2V9IGZyb20gJ2FyYW5nb2pzJztcblxuaW1wb3J0IHtwYXJzZURhdGFiYXNlQ3JlZGVudGlhbFNlY3JldH0gZnJvbSAnLi9kYXRhYmFzZUNyZWRlbnRpYWxzLmpzJztcblxuaW1wb3J0IHR5cGUge0dldFNlY3JldFZhbHVlQ29tbWFuZE91dHB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7RGF0YWJhc2VDcmVkZW50aWFsSWRlbnRpdHksIERhdGFiYXNlQ3JlZGVudGlhbFNlY3JldH0gZnJvbSAnLi4vdHlwZXMvZGF0YWJhc2VDcmVkZW50aWFscy50eXBlcy5qcyc7XG5cbnR5cGUgQ3JlZGVudGlhbENvbm5lY3Rpb24gPSBSZWFkb25seTx7XG4gIGNsaWVudDogRGF0YWJhc2U7XG4gIGVudmVsb3BlOiBTZWNyZXRFbnZlbG9wZTtcbiAgaWRlbnRpdHk6IERhdGFiYXNlQ3JlZGVudGlhbElkZW50aXR5O1xuICB2ZXJzaW9uSWQ6IHN0cmluZztcbn0+O1xuXG50eXBlIFNlY3JldEVudmVsb3BlID0gUmVhZG9ubHk8e1xuICB2YWx1ZTogdW5rbm93bjtcbiAgdmVyc2lvbklkOiBzdHJpbmc7XG59PjtcblxudHlwZSBDYWNoZUVudHJ5ID0ge1xuICBjb25uZWN0aW9uUHJvbWlzZT86IFByb21pc2U8Q3JlZGVudGlhbENvbm5lY3Rpb24+O1xuICBleHBpcmVzQXQ/OiBudW1iZXI7XG4gIHJlYWR5PzogYm9vbGVhbjtcbiAgcmVmcmVzaDogYm9vbGVhbjtcbiAgc2VjcmV0UHJvbWlzZTogUHJvbWlzZTxTZWNyZXRFbnZlbG9wZT47XG59O1xuXG5jb25zdCBDQUNIRV9UVExfTVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgTUFYX0NBQ0hFX0VOVFJJRVMgPSAxMDA7XG5jb25zdCBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDYWNoZUVudHJ5PigpO1xuY29uc3Qgc2VjcmV0c01hbmFnZXIgPSBuZXcgU2VjcmV0c01hbmFnZXJDbGllbnQoe30pO1xuXG5jb25zdCBhc3NlcnRJZGVudGl0eSA9IChhY3R1YWw6IERhdGFiYXNlQ3JlZGVudGlhbElkZW50aXR5LCBleHBlY3RlZDogRGF0YWJhc2VDcmVkZW50aWFsSWRlbnRpdHkpOiB2b2lkID0+IHtcbiAgZm9yKGNvbnN0IGtleSBvZiBbJ2FwcElkJywgJ2RhdGFiYXNlTmFtZScsICdlbnZpcm9ubWVudCcsICdzZWNyZXROYW1lJywgJ3VzZXJuYW1lJ10gYXMgY29uc3QpIHtcbiAgICBpZihhY3R1YWxba2V5XSAhPT0gZXhwZWN0ZWRba2V5XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX2RhdGFiYXNlX2NyZWRlbnRpYWxfaWRlbnRpdHknKTtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGlzQXV0aGVudGljYXRpb25GYWlsdXJlID0gKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHtjb2RlLCByZXNwb25zZSwgc3RhdHVzQ29kZX0gPSBlcnJvciBhcyB7Y29kZT86IHVua25vd247IHJlc3BvbnNlPzoge3N0YXR1cz86IHVua25vd259OyBzdGF0dXNDb2RlPzogdW5rbm93bn07XG4gIHJldHVybiBjb2RlID09PSA0MDEgfHwgcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxIHx8IHN0YXR1c0NvZGUgPT09IDQwMTtcbn07XG5cbmNvbnN0IHJlYWRDcmVkZW50aWFsID0gYXN5bmMgKHNlY3JldEFybjogc3RyaW5nKTogUHJvbWlzZTxTZWNyZXRFbnZlbG9wZT4gPT4ge1xuICBsZXQgcmVzdWx0OiBHZXRTZWNyZXRWYWx1ZUNvbW1hbmRPdXRwdXQ7XG4gIHRyeSB7XG4gICAgcmVzdWx0ID0gYXdhaXQgc2VjcmV0c01hbmFnZXIuc2VuZChuZXcgR2V0U2VjcmV0VmFsdWVDb21tYW5kKHtTZWNyZXRJZDogc2VjcmV0QXJufSkpO1xuICB9IGNhdGNoe1xuICAgIHRocm93IG5ldyBFcnJvcignZGF0YWJhc2VfY3JlZGVudGlhbF91bmF2YWlsYWJsZScpO1xuICB9XG4gIGlmKCFyZXN1bHQuU2VjcmV0U3RyaW5nIHx8ICFyZXN1bHQuVmVyc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX2RhdGFiYXNlX2NyZWRlbnRpYWxfc2VjcmV0Jyk7XG4gIH1cbiAgbGV0IHZhbHVlOiB1bmtub3duO1xuICB0cnkge1xuICAgIHZhbHVlID0gSlNPTi5wYXJzZShyZXN1bHQuU2VjcmV0U3RyaW5nKTtcbiAgfSBjYXRjaHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWRfZGF0YWJhc2VfY3JlZGVudGlhbF9zZWNyZXQnKTtcbiAgfVxuICByZXR1cm4ge3ZhbHVlLCB2ZXJzaW9uSWQ6IHJlc3VsdC5WZXJzaW9uSWR9O1xufTtcblxuY29uc3QgbG9hZENvbm5lY3Rpb24gPSBhc3luYyAoXG4gIHNlY3JldEFybjogc3RyaW5nLFxuICBpZGVudGl0eTogRGF0YWJhc2VDcmVkZW50aWFsSWRlbnRpdHksXG4gIGVudmVsb3BlOiBTZWNyZXRFbnZlbG9wZSxcbiAgYWxsb3dSZWZyZXNoID0gdHJ1ZVxuKTogUHJvbWlzZTxDcmVkZW50aWFsQ29ubmVjdGlvbj4gPT4ge1xuICBjb25zdCBzZWNyZXQ6IERhdGFiYXNlQ3JlZGVudGlhbFNlY3JldCA9IHBhcnNlRGF0YWJhc2VDcmVkZW50aWFsU2VjcmV0KGVudmVsb3BlLnZhbHVlLCBpZGVudGl0eSk7XG4gIGxldCBjbGllbnQ6IERhdGFiYXNlO1xuICB0cnkge1xuICAgIGNsaWVudCA9IG5ldyBEYXRhYmFzZSh7XG4gICAgICBhdXRoOiB7cGFzc3dvcmQ6IHNlY3JldC5wYXNzd29yZCwgdXNlcm5hbWU6IHNlY3JldC51c2VybmFtZX0sXG4gICAgICBkYXRhYmFzZU5hbWU6IHNlY3JldC5kYXRhYmFzZU5hbWUsXG4gICAgICB1cmw6IGAke3NlY3JldC5ob3N0fToke3NlY3JldC5wb3J0fWBcbiAgICB9KTtcbiAgICBhd2FpdCBjbGllbnQuZ2V0KCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihhbGxvd1JlZnJlc2ggJiYgaXNBdXRoZW50aWNhdGlvbkZhaWx1cmUoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbG9hZENvbm5lY3Rpb24oc2VjcmV0QXJuLCBpZGVudGl0eSwgYXdhaXQgcmVhZENyZWRlbnRpYWwoc2VjcmV0QXJuKSwgZmFsc2UpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGFiYXNlX2NyZWRlbnRpYWxfdW5hdmFpbGFibGUnKTtcbiAgfVxuICByZXR1cm4ge2NsaWVudCwgZW52ZWxvcGUsIGlkZW50aXR5OiBzZWNyZXQsIHZlcnNpb25JZDogZW52ZWxvcGUudmVyc2lvbklkfTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkYXRlU2VjcmV0RGF0YWJhc2UgPSAoc2VjcmV0QXJuOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgY2FjaGUuZGVsZXRlKHNlY3JldEFybik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VjcmV0RGF0YWJhc2UgPSBhc3luYyAob3B0aW9uczogUmVhZG9ubHk8e1xuICBzZWNyZXRBcm4/OiBzdHJpbmc7XG4gIGlkZW50aXR5OiBEYXRhYmFzZUNyZWRlbnRpYWxJZGVudGl0eTtcbiAgcmVmcmVzaD86IGJvb2xlYW47XG59Pik6IFByb21pc2U8RGF0YWJhc2U+ID0+IHtcbiAgY29uc3Qgc2VjcmV0QXJuID0gb3B0aW9ucy5zZWNyZXRBcm4gPz8gcHJvY2Vzcy5lbnYuQVJBTkdPREJfU0VDUkVUX0FSTjtcbiAgaWYoIXNlY3JldEFybikge1xuICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZ19kYXRhYmFzZV9zZWNyZXRfYXJuJyk7XG4gIH1cblxuICBsZXQgZW50cnkgPSBjYWNoZS5nZXQoc2VjcmV0QXJuKTtcbiAgY29uc3QgZXhwaXJlZCA9IGVudHJ5Py5leHBpcmVzQXQgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS5leHBpcmVzQXQgPD0gRGF0ZS5ub3coKTtcbiAgY29uc3QgcmVmcmVzaFJlYWR5ID0gb3B0aW9ucy5yZWZyZXNoID09PSB0cnVlICYmIGVudHJ5Py5yZWFkeSA9PT0gdHJ1ZTtcbiAgY29uc3QgcmVmcmVzaFBlbmRpbmcgPSBvcHRpb25zLnJlZnJlc2ggPT09IHRydWUgJiYgZW50cnkgIT09IHVuZGVmaW5lZFxuICAgICYmICFlbnRyeS5yZWZyZXNoICYmICFlbnRyeS5yZWFkeTtcbiAgaWYoZW50cnkgJiYgKGV4cGlyZWQgfHwgcmVmcmVzaFJlYWR5IHx8IHJlZnJlc2hQZW5kaW5nKSkge1xuICAgIGNhY2hlLmRlbGV0ZShzZWNyZXRBcm4pO1xuICAgIGVudHJ5ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYoIWVudHJ5KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHJlYWRDcmVkZW50aWFsKHNlY3JldEFybik7XG4gICAgZW50cnkgPSB7cmVmcmVzaDogb3B0aW9ucy5yZWZyZXNoID09PSB0cnVlLCBzZWNyZXRQcm9taXNlOiBwZW5kaW5nfTtcbiAgICBjb25zdCBjdXJyZW50RW50cnkgPSBlbnRyeTtcbiAgICBjdXJyZW50RW50cnkuc2VjcmV0UHJvbWlzZSA9IHBlbmRpbmcudGhlbigoZW52ZWxvcGUpID0+IHtcbiAgICAgIGlmKGNhY2hlLmdldChzZWNyZXRBcm4pID09PSBjdXJyZW50RW50cnkpIHtcbiAgICAgICAgY3VycmVudEVudHJ5LmV4cGlyZXNBdCA9IERhdGUubm93KCkgKyBDQUNIRV9UVExfTVM7XG4gICAgICB9XG4gICAgICByZXR1cm4gZW52ZWxvcGU7XG4gICAgfSwgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBpZihjYWNoZS5nZXQoc2VjcmV0QXJuKSA9PT0gY3VycmVudEVudHJ5KSB7XG4gICAgICAgIGNhY2hlLmRlbGV0ZShzZWNyZXRBcm4pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgY2FjaGUuc2V0KHNlY3JldEFybiwgY3VycmVudEVudHJ5KTtcbiAgICB3aGlsZShjYWNoZS5zaXplID4gTUFYX0NBQ0hFX0VOVFJJRVMpIHtcbiAgICAgIGNvbnN0IG9sZGVzdEFybiA9IGNhY2hlLmtleXMoKS5uZXh0KCkudmFsdWU7XG4gICAgICBpZihvbGRlc3RBcm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWNoZS5kZWxldGUob2xkZXN0QXJuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FjaGUuZGVsZXRlKHNlY3JldEFybik7XG4gICAgY2FjaGUuc2V0KHNlY3JldEFybiwgZW50cnkpO1xuICB9XG5cbiAgY29uc3QgZW52ZWxvcGUgPSBhd2FpdCBlbnRyeS5zZWNyZXRQcm9taXNlO1xuICB0cnkge1xuICAgIHBhcnNlRGF0YWJhc2VDcmVkZW50aWFsU2VjcmV0KGVudmVsb3BlLnZhbHVlLCBvcHRpb25zLmlkZW50aXR5KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZSA9PT0gJ2ludmFsaWRfZGF0YWJhc2VfY3JlZGVudGlhbF9zZWNyZXQnICYmIGNhY2hlLmdldChzZWNyZXRBcm4pID09PSBlbnRyeSkge1xuICAgICAgY2FjaGUuZGVsZXRlKHNlY3JldEFybik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmKCFlbnRyeS5jb25uZWN0aW9uUHJvbWlzZSkge1xuICAgIGNvbnN0IGN1cnJlbnRFbnRyeSA9IGVudHJ5O1xuICAgIGNvbnN0IHBlbmRpbmcgPSBsb2FkQ29ubmVjdGlvbihzZWNyZXRBcm4sIG9wdGlvbnMuaWRlbnRpdHksIGVudmVsb3BlKTtcbiAgICBjdXJyZW50RW50cnkuY29ubmVjdGlvblByb21pc2UgPSBwZW5kaW5nLnRoZW4oKGNvbm5lY3Rpb24pID0+IHtcbiAgICAgIGlmKGNhY2hlLmdldChzZWNyZXRBcm4pID09PSBjdXJyZW50RW50cnkpIHtcbiAgICAgICAgY3VycmVudEVudHJ5LnNlY3JldFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29ubmVjdGlvbi5lbnZlbG9wZSk7XG4gICAgICAgIGN1cnJlbnRFbnRyeS5leHBpcmVzQXQgPSBEYXRlLm5vdygpICsgQ0FDSEVfVFRMX01TO1xuICAgICAgICBjdXJyZW50RW50cnkucmVhZHkgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfSwgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICBpZihjYWNoZS5nZXQoc2VjcmV0QXJuKSA9PT0gY3VycmVudEVudHJ5KSB7XG4gICAgICAgIGNhY2hlLmRlbGV0ZShzZWNyZXRBcm4pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGVudHJ5LmNvbm5lY3Rpb25Qcm9taXNlO1xuICBhc3NlcnRJZGVudGl0eShjb25uZWN0aW9uLmlkZW50aXR5LCBvcHRpb25zLmlkZW50aXR5KTtcbiAgcmV0dXJuIGNvbm5lY3Rpb24uY2xpZW50O1xufTtcbiJdLCJuYW1lcyI6WyJHZXRTZWNyZXRWYWx1ZUNvbW1hbmQiLCJTZWNyZXRzTWFuYWdlckNsaWVudCIsIkRhdGFiYXNlIiwicGFyc2VEYXRhYmFzZUNyZWRlbnRpYWxTZWNyZXQiLCJDQUNIRV9UVExfTVMiLCJNQVhfQ0FDSEVfRU5UUklFUyIsImNhY2hlIiwiTWFwIiwic2VjcmV0c01hbmFnZXIiLCJhc3NlcnRJZGVudGl0eSIsImFjdHVhbCIsImV4cGVjdGVkIiwia2V5IiwiRXJyb3IiLCJpc0F1dGhlbnRpY2F0aW9uRmFpbHVyZSIsImVycm9yIiwiY29kZSIsInJlc3BvbnNlIiwic3RhdHVzQ29kZSIsInN0YXR1cyIsInJlYWRDcmVkZW50aWFsIiwic2VjcmV0QXJuIiwicmVzdWx0Iiwic2VuZCIsIlNlY3JldElkIiwiU2VjcmV0U3RyaW5nIiwiVmVyc2lvbklkIiwidmFsdWUiLCJKU09OIiwicGFyc2UiLCJ2ZXJzaW9uSWQiLCJsb2FkQ29ubmVjdGlvbiIsImlkZW50aXR5IiwiZW52ZWxvcGUiLCJhbGxvd1JlZnJlc2giLCJzZWNyZXQiLCJjbGllbnQiLCJhdXRoIiwicGFzc3dvcmQiLCJ1c2VybmFtZSIsImRhdGFiYXNlTmFtZSIsInVybCIsImhvc3QiLCJwb3J0IiwiZ2V0IiwiaW52YWxpZGF0ZVNlY3JldERhdGFiYXNlIiwiZGVsZXRlIiwiZ2V0U2VjcmV0RGF0YWJhc2UiLCJvcHRpb25zIiwicHJvY2VzcyIsImVudiIsIkFSQU5HT0RCX1NFQ1JFVF9BUk4iLCJlbnRyeSIsImV4cGlyZWQiLCJleHBpcmVzQXQiLCJ1bmRlZmluZWQiLCJEYXRlIiwibm93IiwicmVmcmVzaFJlYWR5IiwicmVmcmVzaCIsInJlYWR5IiwicmVmcmVzaFBlbmRpbmciLCJwZW5kaW5nIiwic2VjcmV0UHJvbWlzZSIsImN1cnJlbnRFbnRyeSIsInRoZW4iLCJzZXQiLCJzaXplIiwib2xkZXN0QXJuIiwia2V5cyIsIm5leHQiLCJtZXNzYWdlIiwiY29ubmVjdGlvblByb21pc2UiLCJjb25uZWN0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLHFCQUFxQixFQUFFQyxvQkFBb0IsUUFBTyxrQ0FBa0M7QUFDNUYsU0FBUUMsUUFBUSxRQUFPLFdBQVc7QUFFbEMsU0FBUUMsNkJBQTZCLFFBQU8sMkJBQTJCO0FBeUJ2RSxNQUFNQyxlQUFlLElBQUksS0FBSztBQUM5QixNQUFNQyxvQkFBb0I7QUFDMUIsTUFBTUMsUUFBUSxJQUFJQztBQUNs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
@@ -43,6 +43,11 @@ export const createMockResolveInfo = (fieldName = 'test')=>{
43
43
  fieldName,
44
44
  fieldNodes: [],
45
45
  fragments: {},
46
+ getAbortSignal: ()=>undefined,
47
+ getAsyncHelpers: ()=>({
48
+ promiseAll: (values)=>Promise.all(values),
49
+ track: ()=>undefined
50
+ }),
46
51
  operation,
47
52
  parentType,
48
53
  path: {
@@ -53,7 +58,10 @@ export const createMockResolveInfo = (fieldName = 'test')=>{
53
58
  returnType,
54
59
  rootValue: {},
55
60
  schema,
56
- variableValues: {}
61
+ variableValues: {
62
+ coerced: {},
63
+ sources: {}
64
+ }
57
65
  };
58
66
  };
59
67
  // Utility to mock actions module
@@ -297,4 +305,4 @@ export const createUtilsTestSuite = (name, utilsPath, testCases)=>{
297
305
  });
298
306
  };
299
307
 
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvdXRpbHMvdGVzdFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2JlZm9yZUFsbCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUge01vY2t9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgdHlwZSB7R3JhcGhRTFJlc29sdmVJbmZvfSBmcm9tICdncmFwaHFsJztcblxuY29uc3QgamVzdCA9IE9iamVjdC5hc3NpZ24odmkgYXMgYW55LCB7XG4gIGlzb2xhdGVNb2R1bGVzQXN5bmM6IGFzeW5jIChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIHZpLnJlc2V0TW9kdWxlcygpO1xuICAgIGF3YWl0IGZuKCk7XG4gIH0sXG4gIHJlcXVpcmVBY3R1YWw6IHZpLmltcG9ydEFjdHVhbCxcbiAgdW5zdGFibGVfbW9ja01vZHVsZTogdmkuZG9Nb2NrXG59KSBhcyBhbnk7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuLy8gRGVmaW5lIHByb3BlciB0eXBlcyBmb3IgdGVzdCB1dGlsaXRpZXNcbnR5cGUgTW9ja092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xudHlwZSBUZXN0Q29udGV4dCA9IFBhcnRpYWw8QXBpQ29udGV4dD4gJiB7c2Vzc2lvbj86IFBhcnRpYWw8e3VzZXJJZDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyB1c2VyQWNjZXNzOiBudW1iZXJ9Pn07XG50eXBlIFRlc3RBcmdzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG50eXBlIFRlc3RSZXR1cm5WYWx1ZSA9IHVua25vd247XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrQ29udGV4dCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSk6IEFwaUNvbnRleHQgPT4ge1xuICBjb25zdCBkZWZhdWx0U2Vzc2lvbiA9IHtcbiAgICB1c2VyQWNjZXNzOiAxLFxuICAgIHVzZXJJZDogJ3VzZXIxJyxcbiAgICB1c2VybmFtZTogJ3Rlc3R1c2VyJ1xuICB9O1xuICBjb25zdCBvdmVycmlkZVNlc3Npb246IFBhcnRpYWw8dHlwZW9mIGRlZmF1bHRTZXNzaW9uPiA9IG92ZXJyaWRlcy5zZXNzaW9uIHx8IHt9O1xuICBjb25zdCBjb250ZXh0OiBUZXN0Q29udGV4dCA9IHtcbiAgICBkYXRhYmFzZU5hbWU6IChvdmVycmlkZXMuZGF0YWJhc2VOYW1lIGFzIHN0cmluZykgPz8gJ3Rlc3QnLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xuICBkZWxldGUgY29udGV4dC5zZXNzaW9uO1xuICBjb250ZXh0LnNlc3Npb24gPSB7XG4gICAgdXNlckFjY2Vzczogb3ZlcnJpZGVTZXNzaW9uLnVzZXJBY2Nlc3MgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VyQWNjZXNzIDogZGVmYXVsdFNlc3Npb24udXNlckFjY2VzcyxcbiAgICB1c2VySWQ6IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgOiBkZWZhdWx0U2Vzc2lvbi51c2VySWQsXG4gICAgdXNlcm5hbWU6IG92ZXJyaWRlU2Vzc2lvbi51c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gb3ZlcnJpZGVTZXNzaW9uLnVzZXJuYW1lIDogZGVmYXVsdFNlc3Npb24udXNlcm5hbWVcbiAgfTtcbiAgcmV0dXJuIGNvbnRleHQgYXMgQXBpQ29udGV4dDtcbn07XG5cbi8vIENvbW1vbiBtb2NrIHJlc29sdmUgaW5mbyBmb3IgR3JhcGhRTCByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVzb2x2ZUluZm8gPSAoZmllbGROYW1lOiBzdHJpbmcgPSAndGVzdCcpOiBHcmFwaFFMUmVzb2x2ZUluZm8gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1snb3BlcmF0aW9uJ107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgY29uc3QgcGFyZW50VHlwZSA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1sncGFyZW50VHlwZSddO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IHJldHVyblR5cGUgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3JldHVyblR5cGUnXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCBzY2hlbWEgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3NjaGVtYSddO1xuXG4gIHJldHVybiB7XG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkTm9kZXM6IFtdLFxuICAgIGZyYWdtZW50czoge30sXG4gICAgb3BlcmF0aW9uLFxuICAgIHBhcmVudFR5cGUsXG4gICAgcGF0aDoge2tleTogZmllbGROYW1lLCBwcmV2OiB1bmRlZmluZWQsIHR5cGVuYW1lOiAnVGVzdCd9LFxuICAgIHJldHVyblR5cGUsXG4gICAgcm9vdFZhbHVlOiB7fSxcbiAgICBzY2hlbWEsXG4gICAgdmFyaWFibGVWYWx1ZXM6IHt9XG4gIH07XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgYWN0aW9ucyBtb2R1bGVcbmV4cG9ydCBjb25zdCBtb2NrQWN0aW9uc01vZHVsZSA9IGFzeW5jIChtb2R1bGVQYXRoOiBzdHJpbmcsIG1vY2tBY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBNb2NrPikgPT4ge1xuICBjb25zdCBtb2NrcyA9IE9iamVjdC5lbnRyaWVzKG1vY2tBY3Rpb25zKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgYWNjW2tleV0gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKHZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBNb2NrPik7XG5cbiAgYXdhaXQgamVzdC5pc29sYXRlTW9kdWxlc0FzeW5jKGFzeW5jICgpID0+IHtcbiAgICBqZXN0LnVuc3RhYmxlX21vY2tNb2R1bGUobW9kdWxlUGF0aCwgKCkgPT4gKHtcbiAgICAgIF9fZXNNb2R1bGU6IHRydWUsXG4gICAgICAuLi5tb2NrcyxcbiAgICAgIGRlZmF1bHQ6IG1vY2tzXG4gICAgfSkpO1xuICB9KTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gbW9jayBvYmplY3QgdHlwZXNcbmV4cG9ydCBjb25zdCBtb2NrT2JqZWN0VHlwZSA9IGFzeW5jIChtb2R1bGVQYXRoOiBzdHJpbmcsIHR5cGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgbW9jayA9IHtcbiAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgIFt0eXBlTmFtZV06IHtcbiAgICAgIGdldEZpZWxkOiBqZXN0LmZuKCgpID0+ICh7cmVzb2x2ZTogamVzdC5mbigpfSkpLFxuICAgICAgZ2V0RmllbGRzOiBqZXN0LmZuKCgpID0+ICh7fSkpXG4gICAgfSxcbiAgICBkZWZhdWx0OiB7XG4gICAgICBbdHlwZU5hbWVdOiB7XG4gICAgICAgIGdldEZpZWxkOiBqZXN0LmZuKCgpID0+ICh7cmVzb2x2ZTogamVzdC5mbigpfSkpLFxuICAgICAgICBnZXRGaWVsZHM6IGplc3QuZm4oKCkgPT4gKHt9KSlcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGF3YWl0IGplc3QuaXNvbGF0ZU1vZHVsZXNBc3luYyhhc3luYyAoKSA9PiB7XG4gICAgamVzdC51bnN0YWJsZV9tb2NrTW9kdWxlKG1vZHVsZVBhdGgsICgpID0+IG1vY2spO1xuICB9KTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGEgdGVzdCBzdWl0ZSBmb3IgcXVlcnkgcmVzb2x2ZXJzXG5leHBvcnQgY29uc3QgY3JlYXRlUXVlcnlUZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWN0aW9uc1BhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBhcmdzOiBUZXN0QXJncztcbiAgICBleHBlY3RlZENhbGw6IChjb250ZXh0OiBUZXN0Q29udGV4dCwgYXJnczogVGVzdEFyZ3MpID0+IFRlc3RBcmdzO1xuICAgIG1vY2tSZXR1cm5WYWx1ZTogVGVzdFJldHVyblZhbHVlO1xuICAgIGVycm9yQ2FzZT86IGJvb2xlYW47XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gUXVlcmllc2AsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuICAgIGNvbnN0IG1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQoKTtcblxuICAgIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgICBhY3Rpb25zID0ge307XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe25hbWU6IHRlc3ROYW1lLCBhY3Rpb25OYW1lLCBhcmdzLCBleHBlY3RlZENhbGwsIG1vY2tSZXR1cm5WYWx1ZSwgZXJyb3JDYXNlID0gZmFsc2V9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgJHthY3Rpb25OYW1lfSBhY3Rpb24gd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnNgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG1vY2tSZXR1cm5WYWx1ZSkpO1xuICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChtb2NrUmV0dXJuVmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmKGVycm9yQ2FzZSkge1xuICAgICAgICBpdChgc2hvdWxkIGhhbmRsZSAke2FjdGlvbk5hbWV9IHdoZW4gbm8gZGF0YSBmb3VuZGAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKSk7XG4gICAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgICAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NvbnRleHQsIGV4cGVjdGVkQ2FsbChtb2NrQ29udGV4dCwgYXJncykpO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGEgdGVzdCBzdWl0ZSBmb3IgbXV0YXRpb24gcmVzb2x2ZXJzXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb25UZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWN0aW9uc1BhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBhcmdzOiBUZXN0QXJncztcbiAgICBleHBlY3RlZENhbGw6IChjb250ZXh0OiBUZXN0Q29udGV4dCwgYXJnczogVGVzdEFyZ3MpID0+IFRlc3RBcmdzO1xuICAgIG1vY2tSZXR1cm5WYWx1ZTogVGVzdFJldHVyblZhbHVlO1xuICAgIHJlcXVpcmVzQXV0aD86IGJvb2xlYW47XG4gICAgYXV0aFVzZXJJZD86IHN0cmluZztcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShgJHtuYW1lfSBNdXRhdGlvbnNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcblxuICAgIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgICBhY3Rpb25zID0ge307XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe1xuICAgICAgYWN0aW9uTmFtZSxcbiAgICAgIGFyZ3MsXG4gICAgICBleHBlY3RlZENhbGwsXG4gICAgICBtb2NrUmV0dXJuVmFsdWUsXG4gICAgICByZXF1aXJlc0F1dGggPSBmYWxzZSxcbiAgICAgIGF1dGhVc2VySWRcbiAgICB9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGNhbGwgJHthY3Rpb25OYW1lfSBhY3Rpb24gd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnNgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQoKTtcbiAgICAgICAgaWYocmVxdWlyZXNBdXRoICYmIGF1dGhVc2VySWQpIHtcbiAgICAgICAgICAobW9ja0NvbnRleHQuc2Vzc2lvbiBhcyB7dXNlcklkOiBzdHJpbmd9KS51c2VySWQgPSBhdXRoVXNlcklkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUobW9ja1JldHVyblZhbHVlKSk7XG4gICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0ZuKG1vY2tDb250ZXh0LCBhcmdzKTtcbiAgICAgICAgZXhwZWN0KG1vY2tGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja0NvbnRleHQsIGV4cGVjdGVkQ2FsbChtb2NrQ29udGV4dCwgYXJncykpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKG1vY2tSZXR1cm5WYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBpbnRlZ3JhdGlvbiB0ZXN0IHN1aXRlXG5leHBvcnQgY29uc3QgY3JlYXRlSW50ZWdyYXRpb25UZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWN0aW9uc1BhdGg6IHN0cmluZyxcbiAgb2JqZWN0VHlwZVBhdGg6IHN0cmluZyxcbiAgdHlwZU5hbWU6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGFjdGlvbk5hbWU6IHN0cmluZztcbiAgICBhcmdzOiBUZXN0QXJncztcbiAgICBleHBlY3RlZENhbGw6IChjb250ZXh0OiBUZXN0Q29udGV4dCwgYXJnczogVGVzdEFyZ3MpID0+IFRlc3RBcmdzO1xuICAgIHN1Y2Nlc3NSZXR1cm5WYWx1ZTogVGVzdFJldHVyblZhbHVlO1xuICAgIGVycm9yUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICB0ZXN0RXJyb3JDYXNlOiBib29sZWFuO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IEludGVncmF0aW9uYCwgKCkgPT4ge1xuICAgIGxldCBhY3Rpb25zOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtcbiAgICAgIG5hbWU6IHRlc3ROYW1lLFxuICAgICAgYWN0aW9uTmFtZSxcbiAgICAgIGFyZ3MsXG4gICAgICBleHBlY3RlZENhbGwsXG4gICAgICBzdWNjZXNzUmV0dXJuVmFsdWUsXG4gICAgICBlcnJvclJldHVyblZhbHVlLFxuICAgICAgdGVzdEVycm9yQ2FzZVxuICAgIH0pID0+IHtcbiAgICAgIGRlc2NyaWJlKHRlc3ROYW1lLCAoKSA9PiB7XG4gICAgICAgIGl0KGBzaG91bGQgcmV0dXJuIGRhdGEgd2hlbiAke2FjdGlvbk5hbWV9IHN1Y2NlZWRzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQoKTtcbiAgICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShzdWNjZXNzUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0ZuKG1vY2tDb250ZXh0LCBhcmdzKTtcblxuICAgICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHN1Y2Nlc3NSZXR1cm5WYWx1ZSB8fCB7fSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmKHRlc3RFcnJvckNhc2UpIHtcbiAgICAgICAgICBpdChgc2hvdWxkIGhhbmRsZSAke2FjdGlvbk5hbWV9IHdoZW4gbm8gZGF0YSBmb3VuZGAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGVycm9yUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXJyb3JSZXR1cm5WYWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vIENvbW1vbiBtb2NrIGRhdGEgZ2VuZXJhdG9yc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tVc2VyID0gKG92ZXJyaWRlczogTW9ja092ZXJyaWRlcyA9IHt9KSA9PiAoe1xuICBlbWFpbDogJ3Rlc3RAZXhhbXBsZS5jb20nLFxuICBmaXJzdE5hbWU6ICdUZXN0JyxcbiAgbGFzdE5hbWU6ICdVc2VyJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICB1c2VybmFtZTogJ3Rlc3R1c2VyJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tQb3N0ID0gKG92ZXJyaWRlczogTW9ja092ZXJyaWRlcyA9IHt9KSA9PiAoe1xuICBjb250ZW50OiAnVGVzdCBwb3N0IGNvbnRlbnQnLFxuICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgcG9zdElkOiAncG9zdDEnLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrTWVzc2FnZSA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY29udGVudDogJ1Rlc3QgbWVzc2FnZScsXG4gIGNvbnZlcnNhdGlvbklkOiAnY29udjEnLFxuICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgbWVzc2FnZUlkOiAnbXNnMScsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tSZWFjdGlvbiA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIHBvc3RJZDogJ3Bvc3QxJyxcbiAgcmVhY3Rpb25JZDogJ3JlYWN0MScsXG4gIHR5cGU6ICdsaWtlJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja1RhZyA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgZGVzY3JpcHRpb246ICdUZXN0IHRhZyBkZXNjcmlwdGlvbicsXG4gIG5hbWU6ICd0ZXN0LXRhZycsXG4gIHRhZ0lkOiAndGFnMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbi8vIFV0aWxpdHkgdG8gc2V0IHVwIGNvbW1vbiBtb2Nrc1xuZXhwb3J0IGNvbnN0IHNldHVwQ29tbW9uTW9ja3MgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IG1vY2sgPSB7XG4gICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICB1c2VEYjogamVzdC5mbigpLFxuICAgIGdldExpbWl0OiBqZXN0LmZuKCksXG4gICAgZ2V0RG9jSWQ6IGplc3QuZm4oKSxcbiAgICBzb3J0SWRzOiBqZXN0LmZuKCksXG4gICAgZ2V0R3FsRmllbGRzOiBqZXN0LmZuKCksXG4gICAgZGVmYXVsdDoge1xuICAgICAgdXNlRGI6IGplc3QuZm4oKSxcbiAgICAgIGdldExpbWl0OiBqZXN0LmZuKCksXG4gICAgICBnZXREb2NJZDogamVzdC5mbigpLFxuICAgICAgc29ydElkczogamVzdC5mbigpLFxuICAgICAgZ2V0R3FsRmllbGRzOiBqZXN0LmZuKClcbiAgICB9XG4gIH07XG4gIGF3YWl0IGplc3QuaXNvbGF0ZU1vZHVsZXNBc3luYyhhc3luYyAoKSA9PiB7XG4gICAgamVzdC51bnN0YWJsZV9tb2NrTW9kdWxlKCcuL2FyYW5nb2RiVXRpbHMuanMnLCAoKSA9PiBtb2NrKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNsZWFyIGFsbCBtb2Nrc1xuZXhwb3J0IGNvbnN0IGNsZWFyQWxsTW9ja3MgPSAoKSA9PiB7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgYSB0ZXN0IHN1aXRlIGZvciBhY3Rpb24gZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgY3JlYXRlQWN0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgbW9ja1F1ZXJ5OiBNb2NrO1xuICAgIGV4cGVjdGVkUmVzdWx0OiBUZXN0UmV0dXJuVmFsdWU7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gYWN0aW9uc2AsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSBhd2FpdCBpbXBvcnQoYWN0aW9uc1BhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgbW9ja1F1ZXJ5LCBleHBlY3RlZFJlc3VsdH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgZXhlY3V0ZSAke2FjdGlvbk5hbWV9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG1vY2tEYiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIHF1ZXJ5OiBtb2NrUXVlcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGFjdHVhbCA9IGplc3QucmVxdWlyZUFjdHVhbCgnLi9hcmFuZ29kYlV0aWxzLmpzJykgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGplc3QuZG9Nb2NrKCcuL2FyYW5nb2RiVXRpbHMuanMnLCAoKSA9PiAoe1xuICAgICAgICAgIHVzZURiOiBtb2NrRGIsXG4gICAgICAgICAgLi4uYWN0dWFsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoYWN0aW9uc1thY3Rpb25OYW1lXSBhcyBNb2NrKShtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFkYXB0ZXJUZXN0U3VpdGUgPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgYWRhcHRlclBhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBhbnlbXVxuKSA9PiB7XG4gIGRlc2NyaWJlKG5hbWUsICgpID0+IHtcbiAgICBsZXQgYWRhcHRlcjogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIGFkYXB0ZXIgPSBhd2FpdCBpbXBvcnQoYWRhcHRlclBhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgaW5wdXQsIGV4cGVjdGVkT3V0cHV0fSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCAke3Rlc3ROYW1lfWAsICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGFkYXB0ZXIgYXMge3BhcnNlVGFnOiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5wYXJzZVRhZyhpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWRPdXRwdXQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVV0aWxzVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIHV0aWxzUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaW5wdXQ6IFRlc3RBcmdzO1xuICAgIGV4cGVjdGVkT3V0cHV0OiBUZXN0UmV0dXJuVmFsdWU7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUobmFtZSwgKCkgPT4ge1xuICAgIGxldCB1dGlsczogYW55O1xuXG4gICAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICAgIHV0aWxzID0gYXdhaXQgaW1wb3J0KHV0aWxzUGF0aCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe25hbWU6IHRlc3ROYW1lLCBpbnB1dCwgZXhwZWN0ZWRPdXRwdXR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkICR7dGVzdE5hbWV9YCwgKCkgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBpZigodXRpbHMgYXMge2xvZ0luZm8/OiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5sb2dJbmZvKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKHV0aWxzIGFzIHtsb2dJbmZvOiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5sb2dJbmZvKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIGlmKCh1dGlscyBhcyB7cmVtb3ZlRW1wdHlLZXlzPzogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkucmVtb3ZlRW1wdHlLZXlzKSB7XG4gICAgICAgICAgcmVzdWx0ID0gKHV0aWxzIGFzIHtyZW1vdmVFbXB0eUtleXM6IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLnJlbW92ZUVtcHR5S2V5cyhpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzdWl0YWJsZSBmdW5jdGlvbiBmb3VuZCBpbiAke3V0aWxzUGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG4iXSwibmFtZXMiOlsiYmVmb3JlQWxsIiwiZGVzY3JpYmUiLCJleHBlY3QiLCJpdCIsInZpIiwiamVzdCIsIk9iamVjdCIsImFzc2lnbiIsImlzb2xhdGVNb2R1bGVzQXN5bmMiLCJmbiIsInJlc2V0TW9kdWxlcyIsInJlcXVpcmVBY3R1YWwiLCJpbXBvcnRBY3R1YWwiLCJ1bnN0YWJsZV9tb2NrTW9kdWxlIiwiZG9Nb2NrIiwiY3JlYXRlTW9ja0NvbnRleHQiLCJvdmVycmlkZXMiLCJkZWZhdWx0U2Vzc2lvbiIsInVzZXJBY2Nlc3MiLCJ1c2VySWQiLCJ1c2VybmFtZSIsIm92ZXJyaWRlU2Vzc2lvbiIsInNlc3Npb24iLCJjb250ZXh0IiwiZGF0YWJhc2VOYW1lIiwidW5kZWZpbmVkIiwiY3JlYXRlTW9ja1Jlc29sdmVJbmZvIiwiZmllbGROYW1lIiwib3BlcmF0aW9uIiwicGFyZW50VHlwZSIsInJldHVyblR5cGUiLCJzY2hlbWEiLCJmaWVsZE5vZGVzIiwiZnJhZ21lbnRzIiwicGF0aCIsImtleSIsInByZXYiLCJ0eXBlbmFtZSIsInJvb3RWYWx1ZSIsInZhcmlhYmxlVmFsdWVzIiwibW9ja0FjdGlvbnNNb2R1bGUiLCJtb2R1bGVQYXRoIiwibW9ja0FjdGlvbnMiLCJtb2NrcyIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibW9ja09iamVjdFR5cGUiLCJ0eXBlTmFtZSIsIm1vY2siLCJnZXRGaWVsZCIsInJlc29sdmUiLCJnZXRGaWVsZHMiLCJjcmVhdGVRdWVyeVRlc3RTdWl0ZSIsIm5hbWUiLCJhY3Rpb25zUGF0aCIsInRlc3RDYXNlcyIsImFjdGlvbnMiLCJtb2NrQ29udGV4dCIsImZvckVhY2giLCJ0ZXN0TmFtZSIsImFjdGlvbk5hbWUiLCJhcmdzIiwiZXhwZWN0ZWRDYWxsIiwibW9ja1JldHVyblZhbHVlIiwiZXJyb3JDYXNlIiwibW9ja0ZuIiwiUHJvbWlzZSIsInJlc3VsdCIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidG9FcXVhbCIsInRvQmVOdWxsIiwiY3JlYXRlTXV0YXRpb25UZXN0U3VpdGUiLCJyZXF1aXJlc0F1dGgiLCJhdXRoVXNlcklkIiwiY3JlYXRlSW50ZWdyYXRpb25UZXN0U3VpdGUiLCJvYmplY3RUeXBlUGF0aCIsInN1Y2Nlc3NSZXR1cm5WYWx1ZSIsImVycm9yUmV0dXJuVmFsdWUiLCJ0ZXN0RXJyb3JDYXNlIiwiY3JlYXRlTW9ja1VzZXIiLCJlbWFpbCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY3JlYXRlTW9ja1Bvc3QiLCJjb250ZW50IiwiY3JlYXRlZEF0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicG9zdElkIiwiY3JlYXRlTW9ja01lc3NhZ2UiLCJjb252ZXJzYXRpb25JZCIsIm1lc3NhZ2VJZCIsImNyZWF0ZU1vY2tSZWFjdGlvbiIsInJlYWN0aW9uSWQiLCJ0eXBlIiwiY3JlYXRlTW9ja1RhZyIsImRlc2NyaXB0aW9uIiwidGFnSWQiLCJzZXR1cENvbW1vbk1vY2tzIiwidXNlRGIiLCJnZXRMaW1pdCIsImdldERvY0lkIiwic29ydElkcyIsImdldEdxbEZpZWxkcyIsImNsZWFyQWxsTW9ja3MiLCJjcmVhdGVBY3Rpb25UZXN0U3VpdGUiLCJtb2NrUXVlcnkiLCJleHBlY3RlZFJlc3VsdCIsIm1vY2tEYiIsInF1ZXJ5IiwiYWN0dWFsIiwiY3JlYXRlQWRhcHRlclRlc3RTdWl0ZSIsImFkYXB0ZXJQYXRoIiwiYWRhcHRlciIsImlucHV0IiwiZXhwZWN0ZWRPdXRwdXQiLCJwYXJzZVRhZyIsImNyZWF0ZVV0aWxzVGVzdFN1aXRlIiwidXRpbHNQYXRoIiwidXRpbHMiLCJsb2dJbmZvIiwicmVtb3ZlRW1wdHlLZXlzIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxRQUFPLFNBQVM7QUFJM0QsTUFBTUMsT0FBT0MsT0FBT0MsTUFBTSxDQUFDSCxJQUFXO0lBQ3BDSSxxQkFBcUIsT0FBT0M7UUFDMUJMLEdBQUdNLFlBQVk7UUFDZixNQUFNRDtJQUNSO0lBQ0FFLGVBQWVQLEdBQUdRLFlBQVk7SUFDOUJDLHFCQUFxQlQsR0FBR1UsTUFBTTtBQUNoQztBQVVBLE9BQU8sTUFBTUMsb0JBQW9CLENBQUNDLFlBQTJCLENBQUMsQ0FBQztJQUM3RCxNQUFNQyxpQkFBaUI7UUFDckJDLFlBQVk7UUFDWkMsUUFBUTtRQUNSQyxVQUFVO0lBQ1o7SUFDQSxNQUFNQyxrQkFBa0RMLFVBQVVNLE9BQU8sSUFBSSxDQUFDO0lBQzlFLE1BQU1DLFVBQXVCO1FBQzNCQyxjQUFjLEFBQUNSLFVBQVVRLFlBQVksSUFBZTtRQUNwRCxHQUFHUixTQUFTO0lBQ2Q7SUFDQSxPQUFPTyxRQUFRRCxPQUFPO0lBQ3RCQyxRQUFRRCxPQUFPLEdBQUc7UUFDaEJKLFlBQVlHLGdCQUFnQkgsVUFBVSxLQUFLTyxZQUFZSixnQkFBZ0JILFVBQVUsR0FBR0QsZUFBZUMsVUFBVTtRQUM3R0MsUUFBUUUsZ0JBQWdCRixNQUFNLEtBQUtNLFlBQVlKLGdCQUFnQkYsTUFBTSxHQUFHRixlQUFlRSxNQUFNO1FBQzdGQyxVQUFVQyxnQkFBZ0JELFFBQVEsS0FBS0ssWUFBWUos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
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvdXRpbHMvdGVzdFV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2JlZm9yZUFsbCwgZGVzY3JpYmUsIGV4cGVjdCwgaXQsIHZpfSBmcm9tICd2aXRlc3QnO1xuaW1wb3J0IHR5cGUge01vY2t9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgdHlwZSB7R3JhcGhRTFJlc29sdmVJbmZvfSBmcm9tICdncmFwaHFsJztcblxuY29uc3QgamVzdCA9IE9iamVjdC5hc3NpZ24odmkgYXMgYW55LCB7XG4gIGlzb2xhdGVNb2R1bGVzQXN5bmM6IGFzeW5jIChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikgPT4ge1xuICAgIHZpLnJlc2V0TW9kdWxlcygpO1xuICAgIGF3YWl0IGZuKCk7XG4gIH0sXG4gIHJlcXVpcmVBY3R1YWw6IHZpLmltcG9ydEFjdHVhbCxcbiAgdW5zdGFibGVfbW9ja01vZHVsZTogdmkuZG9Nb2NrXG59KSBhcyBhbnk7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuLy8gRGVmaW5lIHByb3BlciB0eXBlcyBmb3IgdGVzdCB1dGlsaXRpZXNcbnR5cGUgTW9ja092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xudHlwZSBUZXN0Q29udGV4dCA9IFBhcnRpYWw8QXBpQ29udGV4dD4gJiB7c2Vzc2lvbj86IFBhcnRpYWw8e3VzZXJJZDogc3RyaW5nOyB1c2VybmFtZTogc3RyaW5nOyB1c2VyQWNjZXNzOiBudW1iZXJ9Pn07XG50eXBlIFRlc3RBcmdzID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG50eXBlIFRlc3RSZXR1cm5WYWx1ZSA9IHVua25vd247XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrQ29udGV4dCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSk6IEFwaUNvbnRleHQgPT4ge1xuICBjb25zdCBkZWZhdWx0U2Vzc2lvbiA9IHtcbiAgICB1c2VyQWNjZXNzOiAxLFxuICAgIHVzZXJJZDogJ3VzZXIxJyxcbiAgICB1c2VybmFtZTogJ3Rlc3R1c2VyJ1xuICB9O1xuICBjb25zdCBvdmVycmlkZVNlc3Npb246IFBhcnRpYWw8dHlwZW9mIGRlZmF1bHRTZXNzaW9uPiA9IG92ZXJyaWRlcy5zZXNzaW9uIHx8IHt9O1xuICBjb25zdCBjb250ZXh0OiBUZXN0Q29udGV4dCA9IHtcbiAgICBkYXRhYmFzZU5hbWU6IChvdmVycmlkZXMuZGF0YWJhc2VOYW1lIGFzIHN0cmluZykgPz8gJ3Rlc3QnLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xuICBkZWxldGUgY29udGV4dC5zZXNzaW9uO1xuICBjb250ZXh0LnNlc3Npb24gPSB7XG4gICAgdXNlckFjY2Vzczogb3ZlcnJpZGVTZXNzaW9uLnVzZXJBY2Nlc3MgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VyQWNjZXNzIDogZGVmYXVsdFNlc3Npb24udXNlckFjY2VzcyxcbiAgICB1c2VySWQ6IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgIT09IHVuZGVmaW5lZCA/IG92ZXJyaWRlU2Vzc2lvbi51c2VySWQgOiBkZWZhdWx0U2Vzc2lvbi51c2VySWQsXG4gICAgdXNlcm5hbWU6IG92ZXJyaWRlU2Vzc2lvbi51c2VybmFtZSAhPT0gdW5kZWZpbmVkID8gb3ZlcnJpZGVTZXNzaW9uLnVzZXJuYW1lIDogZGVmYXVsdFNlc3Npb24udXNlcm5hbWVcbiAgfTtcbiAgcmV0dXJuIGNvbnRleHQgYXMgQXBpQ29udGV4dDtcbn07XG5cbi8vIENvbW1vbiBtb2NrIHJlc29sdmUgaW5mbyBmb3IgR3JhcGhRTCByZXNvbHZlcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVzb2x2ZUluZm8gPSAoZmllbGROYW1lOiBzdHJpbmcgPSAndGVzdCcpOiBHcmFwaFFMUmVzb2x2ZUluZm8gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IG9wZXJhdGlvbiA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1snb3BlcmF0aW9uJ107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC10eXBlLWFzc2VydGlvbnNcbiAgY29uc3QgcGFyZW50VHlwZSA9IHt9IGFzIEdyYXBoUUxSZXNvbHZlSW5mb1sncGFyZW50VHlwZSddO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtdHlwZS1hc3NlcnRpb25zXG4gIGNvbnN0IHJldHVyblR5cGUgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3JldHVyblR5cGUnXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICBjb25zdCBzY2hlbWEgPSB7fSBhcyBHcmFwaFFMUmVzb2x2ZUluZm9bJ3NjaGVtYSddO1xuXG4gIHJldHVybiB7XG4gICAgZmllbGROYW1lLFxuICAgIGZpZWxkTm9kZXM6IFtdLFxuICAgIGZyYWdtZW50czoge30sXG4gICAgZ2V0QWJvcnRTaWduYWw6ICgpID0+IHVuZGVmaW5lZCxcbiAgICBnZXRBc3luY0hlbHBlcnM6ICgpID0+ICh7cHJvbWlzZUFsbDogKHZhbHVlcykgPT4gUHJvbWlzZS5hbGwodmFsdWVzKSwgdHJhY2s6ICgpID0+IHVuZGVmaW5lZH0pLFxuICAgIG9wZXJhdGlvbixcbiAgICBwYXJlbnRUeXBlLFxuICAgIHBhdGg6IHtrZXk6IGZpZWxkTmFtZSwgcHJldjogdW5kZWZpbmVkLCB0eXBlbmFtZTogJ1Rlc3QnfSxcbiAgICByZXR1cm5UeXBlLFxuICAgIHJvb3RWYWx1ZToge30sXG4gICAgc2NoZW1hLFxuICAgIHZhcmlhYmxlVmFsdWVzOiB7Y29lcmNlZDoge30sIHNvdXJjZXM6IHt9fVxuICB9O1xufTtcblxuLy8gVXRpbGl0eSB0byBtb2NrIGFjdGlvbnMgbW9kdWxlXG5leHBvcnQgY29uc3QgbW9ja0FjdGlvbnNNb2R1bGUgPSBhc3luYyAobW9kdWxlUGF0aDogc3RyaW5nLCBtb2NrQWN0aW9uczogUmVjb3JkPHN0cmluZywgTW9jaz4pID0+IHtcbiAgY29uc3QgbW9ja3MgPSBPYmplY3QuZW50cmllcyhtb2NrQWN0aW9ucykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGFjY1trZXldID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbih2YWx1ZSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30gYXMgUmVjb3JkPHN0cmluZywgTW9jaz4pO1xuXG4gIGF3YWl0IGplc3QuaXNvbGF0ZU1vZHVsZXNBc3luYyhhc3luYyAoKSA9PiB7XG4gICAgamVzdC51bnN0YWJsZV9tb2NrTW9kdWxlKG1vZHVsZVBhdGgsICgpID0+ICh7XG4gICAgICBfX2VzTW9kdWxlOiB0cnVlLFxuICAgICAgLi4ubW9ja3MsXG4gICAgICBkZWZhdWx0OiBtb2Nrc1xuICAgIH0pKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIG1vY2sgb2JqZWN0IHR5cGVzXG5leHBvcnQgY29uc3QgbW9ja09iamVjdFR5cGUgPSBhc3luYyAobW9kdWxlUGF0aDogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG1vY2sgPSB7XG4gICAgX19lc01vZHVsZTogdHJ1ZSxcbiAgICBbdHlwZU5hbWVdOiB7XG4gICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgIGdldEZpZWxkczogamVzdC5mbigoKSA9PiAoe30pKVxuICAgIH0sXG4gICAgZGVmYXVsdDoge1xuICAgICAgW3R5cGVOYW1lXToge1xuICAgICAgICBnZXRGaWVsZDogamVzdC5mbigoKSA9PiAoe3Jlc29sdmU6IGplc3QuZm4oKX0pKSxcbiAgICAgICAgZ2V0RmllbGRzOiBqZXN0LmZuKCgpID0+ICh7fSkpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZShtb2R1bGVQYXRoLCAoKSA9PiBtb2NrKTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIHF1ZXJ5IHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5VGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvckNhc2U/OiBib29sZWFuO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IFF1ZXJpZXNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcbiAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgYWN0aW9uTmFtZSwgYXJncywgZXhwZWN0ZWRDYWxsLCBtb2NrUmV0dXJuVmFsdWUsIGVycm9yQ2FzZSA9IGZhbHNlfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShtb2NrUmV0dXJuVmFsdWUpKTtcbiAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwobW9ja1JldHVyblZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZihlcnJvckNhc2UpIHtcbiAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUobnVsbCkpO1xuICAgICAgICAgIGFjdGlvbnNbYWN0aW9uTmFtZV0gPSBtb2NrRm47XG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBVdGlsaXR5IHRvIGNyZWF0ZSBhIHRlc3Qgc3VpdGUgZm9yIG11dGF0aW9uIHJlc29sdmVyc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZU11dGF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBtb2NrUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICByZXF1aXJlc0F1dGg/OiBib29sZWFuO1xuICAgIGF1dGhVc2VySWQ/OiBzdHJpbmc7XG4gIH0+XG4pID0+IHtcbiAgZGVzY3JpYmUoYCR7bmFtZX0gTXV0YXRpb25zYCwgKCkgPT4ge1xuICAgIGxldCBhY3Rpb25zOiBhbnk7XG5cbiAgICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgICAgYWN0aW9ucyA9IHt9O1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgbW9ja1JldHVyblZhbHVlLFxuICAgICAgcmVxdWlyZXNBdXRoID0gZmFsc2UsXG4gICAgICBhdXRoVXNlcklkXG4gICAgfSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCBjYWxsICR7YWN0aW9uTmFtZX0gYWN0aW9uIHdpdGggY29ycmVjdCBwYXJhbWV0ZXJzYCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgIGlmKHJlcXVpcmVzQXV0aCAmJiBhdXRoVXNlcklkKSB7XG4gICAgICAgICAgKG1vY2tDb250ZXh0LnNlc3Npb24gYXMge3VzZXJJZDogc3RyaW5nfSkudXNlcklkID0gYXV0aFVzZXJJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vY2tGbiA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gUHJvbWlzZS5yZXNvbHZlKG1vY2tSZXR1cm5WYWx1ZSkpO1xuICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG4gICAgICAgIGV4cGVjdChtb2NrRm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKG1vY2tDb250ZXh0LCBleHBlY3RlZENhbGwobW9ja0NvbnRleHQsIGFyZ3MpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChtb2NrUmV0dXJuVmFsdWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjcmVhdGUgaW50ZWdyYXRpb24gdGVzdCBzdWl0ZVxuZXhwb3J0IGNvbnN0IGNyZWF0ZUludGVncmF0aW9uVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbnNQYXRoOiBzdHJpbmcsXG4gIG9iamVjdFR5cGVQYXRoOiBzdHJpbmcsXG4gIHR5cGVOYW1lOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogQXJyYXk8e1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBhY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgYXJnczogVGVzdEFyZ3M7XG4gICAgZXhwZWN0ZWRDYWxsOiAoY29udGV4dDogVGVzdENvbnRleHQsIGFyZ3M6IFRlc3RBcmdzKSA9PiBUZXN0QXJncztcbiAgICBzdWNjZXNzUmV0dXJuVmFsdWU6IFRlc3RSZXR1cm5WYWx1ZTtcbiAgICBlcnJvclJldHVyblZhbHVlOiBUZXN0UmV0dXJuVmFsdWU7XG4gICAgdGVzdEVycm9yQ2FzZTogYm9vbGVhbjtcbiAgfT5cbikgPT4ge1xuICBkZXNjcmliZShgJHtuYW1lfSBJbnRlZ3JhdGlvbmAsICgpID0+IHtcbiAgICBsZXQgYWN0aW9uczogYW55O1xuXG4gICAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICAgIGFjdGlvbnMgPSB7fTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7XG4gICAgICBuYW1lOiB0ZXN0TmFtZSxcbiAgICAgIGFjdGlvbk5hbWUsXG4gICAgICBhcmdzLFxuICAgICAgZXhwZWN0ZWRDYWxsLFxuICAgICAgc3VjY2Vzc1JldHVyblZhbHVlLFxuICAgICAgZXJyb3JSZXR1cm5WYWx1ZSxcbiAgICAgIHRlc3RFcnJvckNhc2VcbiAgICB9KSA9PiB7XG4gICAgICBkZXNjcmliZSh0ZXN0TmFtZSwgKCkgPT4ge1xuICAgICAgICBpdChgc2hvdWxkIHJldHVybiBkYXRhIHdoZW4gJHthY3Rpb25OYW1lfSBzdWNjZWVkc2AsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiBQcm9taXNlLnJlc29sdmUoc3VjY2Vzc1JldHVyblZhbHVlKSk7XG4gICAgICAgICAgYWN0aW9uc1thY3Rpb25OYW1lXSA9IG1vY2tGbjtcblxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tGbihtb2NrQ29udGV4dCwgYXJncyk7XG5cbiAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChzdWNjZXNzUmV0dXJuVmFsdWUgfHwge30pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZih0ZXN0RXJyb3JDYXNlKSB7XG4gICAgICAgICAgaXQoYHNob3VsZCBoYW5kbGUgJHthY3Rpb25OYW1lfSB3aGVuIG5vIGRhdGEgZm91bmRgLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtb2NrQ29udGV4dCA9IGNyZWF0ZU1vY2tDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBtb2NrRm4gPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IFByb21pc2UucmVzb2x2ZShlcnJvclJldHVyblZhbHVlKSk7XG4gICAgICAgICAgICBhY3Rpb25zW2FjdGlvbk5hbWVdID0gbW9ja0ZuO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrRm4obW9ja0NvbnRleHQsIGFyZ3MpO1xuXG4gICAgICAgICAgICBleHBlY3QobW9ja0ZuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChtb2NrQ29udGV4dCwgZXhwZWN0ZWRDYWxsKG1vY2tDb250ZXh0LCBhcmdzKSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGVycm9yUmV0dXJuVmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vLyBDb21tb24gbW9jayBkYXRhIGdlbmVyYXRvcnNcbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrVXNlciA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgZW1haWw6ICd0ZXN0QGV4YW1wbGUuY29tJyxcbiAgZmlyc3ROYW1lOiAnVGVzdCcsXG4gIGxhc3ROYW1lOiAnVXNlcicsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgdXNlcm5hbWU6ICd0ZXN0dXNlcicsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUG9zdCA9IChvdmVycmlkZXM6IE1vY2tPdmVycmlkZXMgPSB7fSkgPT4gKHtcbiAgY29udGVudDogJ1Rlc3QgcG9zdCBjb250ZW50JyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIHBvc3RJZDogJ3Bvc3QxJyxcbiAgdXNlcklkOiAndXNlcjEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTW9ja01lc3NhZ2UgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNvbnRlbnQ6ICdUZXN0IG1lc3NhZ2UnLFxuICBjb252ZXJzYXRpb25JZDogJ2NvbnYxJyxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIG1lc3NhZ2VJZDogJ21zZzEnLFxuICB1c2VySWQ6ICd1c2VyMScsXG4gIC4uLm92ZXJyaWRlc1xufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNb2NrUmVhY3Rpb24gPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBwb3N0SWQ6ICdwb3N0MScsXG4gIHJlYWN0aW9uSWQ6ICdyZWFjdDEnLFxuICB0eXBlOiAnbGlrZScsXG4gIHVzZXJJZDogJ3VzZXIxJyxcbiAgLi4ub3ZlcnJpZGVzXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1vY2tUYWcgPSAob3ZlcnJpZGVzOiBNb2NrT3ZlcnJpZGVzID0ge30pID0+ICh7XG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB0YWcgZGVzY3JpcHRpb24nLFxuICBuYW1lOiAndGVzdC10YWcnLFxuICB0YWdJZDogJ3RhZzEnLFxuICAuLi5vdmVycmlkZXNcbn0pO1xuXG4vLyBVdGlsaXR5IHRvIHNldCB1cCBjb21tb24gbW9ja3NcbmV4cG9ydCBjb25zdCBzZXR1cENvbW1vbk1vY2tzID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIF9fZXNNb2R1bGU6IHRydWUsXG4gICAgdXNlRGI6IGplc3QuZm4oKSxcbiAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgIGdldERvY0lkOiBqZXN0LmZuKCksXG4gICAgc29ydElkczogamVzdC5mbigpLFxuICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpLFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHVzZURiOiBqZXN0LmZuKCksXG4gICAgICBnZXRMaW1pdDogamVzdC5mbigpLFxuICAgICAgZ2V0RG9jSWQ6IGplc3QuZm4oKSxcbiAgICAgIHNvcnRJZHM6IGplc3QuZm4oKSxcbiAgICAgIGdldEdxbEZpZWxkczogamVzdC5mbigpXG4gICAgfVxuICB9O1xuICBhd2FpdCBqZXN0Lmlzb2xhdGVNb2R1bGVzQXN5bmMoYXN5bmMgKCkgPT4ge1xuICAgIGplc3QudW5zdGFibGVfbW9ja01vZHVsZSgnLi9hcmFuZ29kYlV0aWxzLmpzJywgKCkgPT4gbW9jayk7XG4gIH0pO1xufTtcblxuLy8gVXRpbGl0eSB0byBjbGVhciBhbGwgbW9ja3NcbmV4cG9ydCBjb25zdCBjbGVhckFsbE1vY2tzID0gKCkgPT4ge1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbn07XG5cbi8vIFV0aWxpdHkgdG8gY3JlYXRlIGEgdGVzdCBzdWl0ZSBmb3IgYWN0aW9uIGZ1bmN0aW9uc1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvblRlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBhY3Rpb25zUGF0aDogc3RyaW5nLFxuICB0ZXN0Q2FzZXM6IEFycmF5PHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIGFyZ3M6IFRlc3RBcmdzO1xuICAgIG1vY2tRdWVyeTogTW9jaztcbiAgICBleHBlY3RlZFJlc3VsdDogVGVzdFJldHVyblZhbHVlO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKGAke25hbWV9IGFjdGlvbnNgLCAoKSA9PiB7XG4gICAgbGV0IGFjdGlvbnM6IGFueTtcblxuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBhY3Rpb25zID0gYXdhaXQgaW1wb3J0KGFjdGlvbnNQYXRoKTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGFjdGlvbk5hbWUsIGFyZ3MsIG1vY2tRdWVyeSwgZXhwZWN0ZWRSZXN1bHR9KSA9PiB7XG4gICAgICBpdChgc2hvdWxkIGV4ZWN1dGUgJHthY3Rpb25OYW1lfWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgbW9ja0NvbnRleHQgPSBjcmVhdGVNb2NrQ29udGV4dCgpO1xuICAgICAgICBjb25zdCBtb2NrRGIgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICBxdWVyeTogbW9ja1F1ZXJ5XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhY3R1YWwgPSBqZXN0LnJlcXVpcmVBY3R1YWwoJy4vYXJhbmdvZGJVdGlscy5qcycpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBqZXN0LmRvTW9jaygnLi9hcmFuZ29kYlV0aWxzLmpzJywgKCkgPT4gKHtcbiAgICAgICAgICB1c2VEYjogbW9ja0RiLFxuICAgICAgICAgIC4uLmFjdHVhbFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGFjdGlvbnNbYWN0aW9uTmFtZV0gYXMgTW9jaykobW9ja0NvbnRleHQsIGFyZ3MpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBZGFwdGVyVGVzdFN1aXRlID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGFkYXB0ZXJQYXRoOiBzdHJpbmcsXG4gIHRlc3RDYXNlczogYW55W11cbikgPT4ge1xuICBkZXNjcmliZShuYW1lLCAoKSA9PiB7XG4gICAgbGV0IGFkYXB0ZXI6IGFueTtcblxuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICBhZGFwdGVyID0gYXdhaXQgaW1wb3J0KGFkYXB0ZXJQYXRoKTtcbiAgICB9KTtcblxuICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7bmFtZTogdGVzdE5hbWUsIGlucHV0LCBleHBlY3RlZE91dHB1dH0pID0+IHtcbiAgICAgIGl0KGBzaG91bGQgJHt0ZXN0TmFtZX1gLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChhZGFwdGVyIGFzIHtwYXJzZVRhZzogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkucGFyc2VUYWcoaW5wdXQpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkT3V0cHV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVdGlsc1Rlc3RTdWl0ZSA9IChcbiAgbmFtZTogc3RyaW5nLFxuICB1dGlsc1BhdGg6IHN0cmluZyxcbiAgdGVzdENhc2VzOiBBcnJheTx7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGlucHV0OiBUZXN0QXJncztcbiAgICBleHBlY3RlZE91dHB1dDogVGVzdFJldHVyblZhbHVlO1xuICB9PlxuKSA9PiB7XG4gIGRlc2NyaWJlKG5hbWUsICgpID0+IHtcbiAgICBsZXQgdXRpbHM6IGFueTtcblxuICAgIGJlZm9yZUFsbChhc3luYyAoKSA9PiB7XG4gICAgICB1dGlscyA9IGF3YWl0IGltcG9ydCh1dGlsc1BhdGgpO1xuICAgIH0pO1xuXG4gICAgdGVzdENhc2VzLmZvckVhY2goKHtuYW1lOiB0ZXN0TmFtZSwgaW5wdXQsIGV4cGVjdGVkT3V0cHV0fSkgPT4ge1xuICAgICAgaXQoYHNob3VsZCAke3Rlc3ROYW1lfWAsICgpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgaWYoKHV0aWxzIGFzIHtsb2dJbmZvPzogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkubG9nSW5mbykge1xuICAgICAgICAgIHJlc3VsdCA9ICh1dGlscyBhcyB7bG9nSW5mbzogKGlucHV0OiBUZXN0QXJncykgPT4gVGVzdFJldHVyblZhbHVlfSkubG9nSW5mbyhpbnB1dCk7XG4gICAgICAgIH0gZWxzZSBpZigodXRpbHMgYXMge3JlbW92ZUVtcHR5S2V5cz86IChpbnB1dDogVGVzdEFyZ3MpID0+IFRlc3RSZXR1cm5WYWx1ZX0pLnJlbW92ZUVtcHR5S2V5cykge1xuICAgICAgICAgIHJlc3VsdCA9ICh1dGlscyBhcyB7cmVtb3ZlRW1wdHlLZXlzOiAoaW5wdXQ6IFRlc3RBcmdzKSA9PiBUZXN0UmV0dXJuVmFsdWV9KS5yZW1vdmVFbXB0eUtleXMoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc3VpdGFibGUgZnVuY3Rpb24gZm91bmQgaW4gJHt1dGlsc1BhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChleHBlY3RlZE91dHB1dCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbImJlZm9yZUFsbCIsImRlc2NyaWJlIiwiZXhwZWN0IiwiaXQiLCJ2aSIsImplc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJpc29sYXRlTW9kdWxlc0FzeW5jIiwiZm4iLCJyZXNldE1vZHVsZXMiLCJyZXF1aXJlQWN0dWFsIiwiaW1wb3J0QWN0dWFsIiwidW5zdGFibGVfbW9ja01vZHVsZSIsImRvTW9jayIsImNyZWF0ZU1vY2tDb250ZXh0Iiwib3ZlcnJpZGVzIiwiZGVmYXVsdFNlc3Npb24iLCJ1c2VyQWNjZXNzIiwidXNlcklkIiwidXNlcm5hbWUiLCJvdmVycmlkZVNlc3Npb24iLCJzZXNzaW9uIiwiY29udGV4dCIsImRhdGFiYXNlTmFtZSIsInVuZGVmaW5lZCIsImNyZWF0ZU1vY2tSZXNvbHZlSW5mbyIsImZpZWxkTmFtZSIsIm9wZXJhdGlvbiIsInBhcmVudFR5cGUiLCJyZXR1cm5UeXBlIiwic2NoZW1hIiwiZmllbGROb2RlcyIsImZyYWdtZW50cyIsImdldEFib3J0U2lnbmFsIiwiZ2V0QXN5bmNIZWxwZXJzIiwicHJvbWlzZUFsbCIsInZhbHVlcyIsIlByb21pc2UiLCJhbGwiLCJ0cmFjayIsInBhdGgiLCJrZXkiLCJwcmV2IiwidHlwZW5hbWUiLCJyb290VmFsdWUiLCJ2YXJpYWJsZVZhbHVlcyIsImNvZXJjZWQiLCJzb3VyY2VzIiwibW9ja0FjdGlvbnNNb2R1bGUiLCJtb2R1bGVQYXRoIiwibW9ja0FjdGlvbnMiLCJtb2NrcyIsImVudHJpZXMiLCJyZWR1Y2UiLCJhY2MiLCJ2YWx1ZSIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibW9ja09iamVjdFR5cGUiLCJ0eXBlTmFtZSIsIm1vY2siLCJnZXRGaWVsZCIsInJlc29sdmUiLCJnZXRGaWVsZHMiLCJjcmVhdGVRdWVyeVRlc3RTdWl0ZSIsIm5hbWUiLCJhY3Rpb25zUGF0aCIsInRlc3RDYXNlcyIsImFjdGlvbnMiLCJtb2NrQ29udGV4dCIsImZvckVhY2giLCJ0ZXN0TmFtZSIsImFjdGlvbk5hbWUiLCJhcmdzIiwiZXhwZWN0ZWRDYWxsIiwibW9ja1JldHVyblZhbHVlIiwiZXJyb3JDYXNlIiwibW9ja0ZuIiwicmVzdWx0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJ0b0VxdWFsIiwidG9CZU51bGwiLCJjcmVhdGVNdXRhdGlvblRlc3RTdWl0ZSIsInJlcXVpcmVzQXV0aCIsImF1dGhVc2VySWQiLCJjcmVhdGVJbnRlZ3JhdGlvblRlc3RTdWl0ZSIsIm9iamVjdFR5cGVQYXRoIiwic3VjY2Vzc1JldHVyblZhbHVlIiwiZXJyb3JSZXR1cm5WYWx1ZSIsInRlc3RFcnJvckNhc2UiLCJjcmVhdGVNb2NrVXNlciIsImVtYWlsIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjcmVhdGVNb2NrUG9zdCIsImNvbnRlbnQiLCJjcmVhdGVkQXQiLCJEYXRlIiwidG9JU09TdHJpbmciLCJwb3N0SWQiLCJjcmVhdGVNb2NrTWVzc2FnZSIsImNvbnZlcnNhdGlvbklkIiwibWVzc2FnZUlkIiwiY3JlYXRlTW9ja1JlYWN0aW9uIiwicmVhY3Rpb25JZCIsInR5cGUiLCJjcmVhdGVNb2NrVGFnIiwiZGVzY3JpcHRpb24iLCJ0YWdJZCIsInNldHVwQ29tbW9uTW9ja3MiLCJ1c2VEYiIsImdldExpbWl0IiwiZ2V0RG9jSWQiLCJzb3J0SWRzIiwiZ2V0R3FsRmllbGRzIiwiY2xlYXJBbGxNb2NrcyIsImNyZWF0ZUFjdGlvblRlc3RTdWl0ZSIsIm1vY2tRdWVyeSIsImV4cGVjdGVkUmVzdWx0IiwibW9ja0RiIiwicXVlcnkiLCJhY3R1YWwiLCJjcmVhdGVBZGFwdGVyVGVzdFN1aXRlIiwiYWRhcHRlclBhdGgiLCJhZGFwdGVyIiwiaW5wdXQiLCJleHBlY3RlZE91dHB1dCIsInBhcnNlVGFnIiwiY3JlYXRlVXRpbHNUZXN0U3VpdGUiLCJ1dGlsc1BhdGgiLCJ1dGlscyIsImxvZ0luZm8iLCJyZW1vdmVFbXB0eUtleXMiLCJFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsRUFBRSxFQUFFQyxFQUFFLFFBQU8sU0FBUztBQUkzRCxNQUFNQyxPQUFPQyxPQUFPQyxNQUFNLENBQUNILElBQVc7SUFDcENJLHFCQUFxQixPQUFPQztRQUMxQkwsR0FBR00sWUFBWTtRQUNmLE1BQU1EO0lBQ1I7SUFDQUUsZUFBZVAsR0FBR1EsWUFBWTtJQUM5QkMscUJBQXFCVCxHQUFHVSxNQUFNO0FBQ2hDO0FBVUEsT0FBTyxNQUFNQyxvQkFBb0IsQ0FBQ0MsWUFBMkIsQ0FBQyxDQUFDO0lBQzdELE1BQU1DLGlCQUFpQjtRQUNyQkMsWUFBWTtRQUNaQyxRQUFRO1FBQ1JDLFVBQVU7SUFDWjtJQUNBLE1BQU1DLGtCQUFrREwsVUFBVU0sT0FBTyxJQUFJLENBQUM7SUFDOUUsTUFBTUMsVUFBdUI7UUFDM0JDLGNBQWMsQUFBQ1IsVUFB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/reaktor",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "GraphQL and ArangoDB application platform for typed actions, authentication, billing, media, messaging, and realtime services.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "type": "module",
@@ -82,17 +82,19 @@
82
82
  "watch": "lex compile --remove --watch"
83
83
  },
84
84
  "dependencies": {
85
- "@aws-sdk/client-apigatewaymanagementapi": "^3.1137.0",
86
- "@aws-sdk/client-dynamodb": "^3.1137.0",
87
- "@aws-sdk/client-mediaconvert": "^3.1137.0",
88
- "@aws-sdk/client-rum": "^3.1137.0",
89
- "@aws-sdk/client-s3": "^3.1137.0",
90
- "@aws-sdk/client-ses": "^3.1137.0",
91
- "@aws-sdk/client-sns": "^3.1137.0",
92
- "@aws-sdk/s3-request-presigner": "^3.1137.0",
85
+ "@aws-sdk/client-apigatewaymanagementapi": "^3.1138.0",
86
+ "@aws-sdk/client-dynamodb": "^3.1138.0",
87
+ "@aws-sdk/client-mediaconvert": "^3.1138.0",
88
+ "@aws-sdk/client-rum": "^3.1138.0",
89
+ "@aws-sdk/client-s3": "^3.1138.0",
90
+ "@aws-sdk/client-secrets-manager": "3.1138.0",
91
+ "@aws-sdk/client-ses": "^3.1138.0",
92
+ "@aws-sdk/client-sns": "^3.1138.0",
93
+ "@aws-sdk/s3-request-presigner": "^3.1138.0",
93
94
  "@nlabs/arkhamjs": "3.31.16",
94
95
  "@nlabs/rip-hunter": "^3.1.2",
95
96
  "@nlabs/utils": "^2.11.0",
97
+ "ajv": "^8.20.0",
96
98
  "apn": "npm:@parse/node-apn@^8.1.0",
97
99
  "arangojs": "^10.5.0",
98
100
  "busboy": "^1.6.0",
@@ -101,7 +103,7 @@
101
103
  "exif-reader": "^2.0.3",
102
104
  "file-type": "^22.1.1",
103
105
  "google-libphonenumber": "^3.2.46",
104
- "graphql": "^16.14.2",
106
+ "graphql": "^17.0.2",
105
107
  "graphql-compose": "^9.2.2",
106
108
  "graphql-fields": "^2.0.3",
107
109
  "i18next": "^26.4.2",