@gomomento/sdk-core 1.111.0 → 1.112.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/auth/credential-provider.d.ts +10 -16
- package/dist/src/auth/credential-provider.js +30 -66
- package/dist/src/config/retry/subscription-retry-eligibility-strategy.d.ts +7 -0
- package/dist/src/config/retry/subscription-retry-eligibility-strategy.js +3 -0
- package/dist/src/config/retry/subscription-retry-strategy.d.ts +11 -0
- package/dist/src/config/retry/subscription-retry-strategy.js +5 -0
- package/dist/src/errors/errors.d.ts +7 -0
- package/dist/src/errors/errors.js +12 -2
- package/dist/src/index.d.ts +2 -3
- package/dist/src/index.js +4 -6
- package/dist/src/internal/clients/index.d.ts +0 -1
- package/dist/src/internal/clients/index.js +1 -2
- package/dist/src/internal/clients/pubsub/AbstractPubsubClient.d.ts +6 -3
- package/dist/src/internal/clients/pubsub/AbstractPubsubClient.js +23 -22
- package/dist/src/internal/clients/pubsub/AbstractTopicClient.d.ts +11 -2
- package/dist/src/internal/clients/pubsub/AbstractTopicClient.js +50 -7
- package/dist/src/internal/utils/auth.d.ts +4 -9
- package/dist/src/internal/utils/auth.js +8 -22
- package/dist/src/utils/topic-call-options.d.ts +4 -0
- package/dist/src/utils/topic-call-options.js +1 -1
- package/package.json +1 -1
- package/dist/src/clients/IStorageClient.d.ts +0 -13
- package/dist/src/clients/IStorageClient.js +0 -3
- package/dist/src/internal/clients/storage/AbstractStorageClient.d.ts +0 -21
- package/dist/src/internal/clients/storage/AbstractStorageClient.js +0 -48
- package/dist/src/internal/clients/storage/IStorageControlClient.d.ts +0 -7
- package/dist/src/internal/clients/storage/IStorageControlClient.js +0 -3
- package/dist/src/internal/clients/storage/IStorageDataClient.d.ts +0 -10
- package/dist/src/internal/clients/storage/IStorageDataClient.js +0 -3
- package/dist/src/internal/clients/storage/index.d.ts +0 -4
- package/dist/src/internal/clients/storage/index.js +0 -21
- package/dist/src/messages/responses/storage/control/create-store.d.ts +0 -34
- package/dist/src/messages/responses/storage/control/create-store.js +0 -43
- package/dist/src/messages/responses/storage/control/delete-store.d.ts +0 -28
- package/dist/src/messages/responses/storage/control/delete-store.js +0 -33
- package/dist/src/messages/responses/storage/control/index.d.ts +0 -3
- package/dist/src/messages/responses/storage/control/index.js +0 -7
- package/dist/src/messages/responses/storage/control/list-stores.d.ts +0 -37
- package/dist/src/messages/responses/storage/control/list-stores.js +0 -45
- package/dist/src/messages/responses/storage/index.d.ts +0 -2
- package/dist/src/messages/responses/storage/index.js +0 -19
- package/dist/src/messages/responses/storage/scalar/index.d.ts +0 -3
- package/dist/src/messages/responses/storage/scalar/index.js +0 -7
- package/dist/src/messages/responses/storage/scalar/storage-delete.d.ts +0 -28
- package/dist/src/messages/responses/storage/scalar/storage-delete.js +0 -33
- package/dist/src/messages/responses/storage/scalar/storage-get.d.ts +0 -79
- package/dist/src/messages/responses/storage/scalar/storage-get.js +0 -99
- package/dist/src/messages/responses/storage/scalar/storage-put.d.ts +0 -28
- package/dist/src/messages/responses/storage/scalar/storage-put.js +0 -33
- package/dist/src/messages/responses/storage/scalar/storage-value.d.ts +0 -61
- package/dist/src/messages/responses/storage/scalar/storage-value.js +0 -87
- package/dist/src/messages/store-info.d.ts +0 -16
- package/dist/src/messages/store-info.js +0 -24
@@ -27,7 +27,7 @@ export declare abstract class CredentialProvider {
|
|
27
27
|
*/
|
28
28
|
abstract getControlEndpoint(): string;
|
29
29
|
/**
|
30
|
-
* @
|
30
|
+
* @deprecated use isEndpointSecure() instead
|
31
31
|
*/
|
32
32
|
abstract isControlEndpointSecure(): boolean;
|
33
33
|
/**
|
@@ -35,23 +35,15 @@ export declare abstract class CredentialProvider {
|
|
35
35
|
*/
|
36
36
|
abstract getCacheEndpoint(): string;
|
37
37
|
/**
|
38
|
-
* @
|
38
|
+
* @deprecated use isEndpointSecure() instead
|
39
39
|
*/
|
40
40
|
abstract isCacheEndpointSecure(): boolean;
|
41
|
-
/**
|
42
|
-
* @returns {string} The host which the Momento client will connect to for Momento storage operations
|
43
|
-
*/
|
44
|
-
abstract getStorageEndpoint(): string;
|
45
|
-
/**
|
46
|
-
* @returns {boolean} true if connecting to the storage endpoint connection with TLS; false if not using TLS
|
47
|
-
*/
|
48
|
-
abstract isStorageEndpointSecure(): boolean;
|
49
41
|
/**
|
50
42
|
* @returns {string} The host which the Momento client will connect to for Momento token operations
|
51
43
|
*/
|
52
44
|
abstract getTokenEndpoint(): string;
|
53
45
|
/**
|
54
|
-
* @
|
46
|
+
* @deprecated use isEndpointSecure() instead
|
55
47
|
*/
|
56
48
|
abstract isTokenEndpointSecure(): boolean;
|
57
49
|
/**
|
@@ -65,6 +57,10 @@ export declare abstract class CredentialProvider {
|
|
65
57
|
* @returns {boolean} true if the endpoints were manually overridden at construction time; false otherwise
|
66
58
|
*/
|
67
59
|
abstract areEndpointsOverridden(): boolean;
|
60
|
+
/**
|
61
|
+
* @returns {boolean} true if connecting to the endpoint connection with TLS; false if not using TLS
|
62
|
+
*/
|
63
|
+
abstract isEndpointSecure(): boolean;
|
68
64
|
static fromEnvironmentVariable(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
|
69
65
|
static fromEnvVar(props: EnvMomentoTokenProviderProps | string): CredentialProvider;
|
70
66
|
static fromString(props: StringMomentoTokenProviderProps | string): CredentialProvider;
|
@@ -82,11 +78,10 @@ declare abstract class CredentialProviderBase implements CredentialProvider {
|
|
82
78
|
abstract isCacheEndpointSecure(): boolean;
|
83
79
|
abstract getControlEndpoint(): string;
|
84
80
|
abstract isControlEndpointSecure(): boolean;
|
85
|
-
abstract getStorageEndpoint(): string;
|
86
|
-
abstract isStorageEndpointSecure(): boolean;
|
87
81
|
abstract getTokenEndpoint(): string;
|
88
82
|
abstract isTokenEndpointSecure(): boolean;
|
89
83
|
abstract areEndpointsOverridden(): boolean;
|
84
|
+
abstract isEndpointSecure(): boolean;
|
90
85
|
abstract withMomentoLocal(): CredentialProvider;
|
91
86
|
valueOf(): object;
|
92
87
|
}
|
@@ -123,9 +118,9 @@ export declare class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
123
118
|
isControlEndpointSecure(): boolean;
|
124
119
|
getTokenEndpoint(): string;
|
125
120
|
isTokenEndpointSecure(): boolean;
|
126
|
-
getStorageEndpoint(): string;
|
127
121
|
isStorageEndpointSecure(): boolean;
|
128
122
|
areEndpointsOverridden(): boolean;
|
123
|
+
isEndpointSecure(): boolean;
|
129
124
|
withMomentoLocal(): CredentialProvider;
|
130
125
|
}
|
131
126
|
export interface EnvMomentoTokenProviderProps extends CredentialProviderProps {
|
@@ -171,9 +166,8 @@ export declare class MomentoLocalProvider implements CredentialProvider {
|
|
171
166
|
isControlEndpointSecure(): boolean;
|
172
167
|
getTokenEndpoint(): string;
|
173
168
|
isTokenEndpointSecure(): boolean;
|
174
|
-
getStorageEndpoint(): string;
|
175
|
-
isStorageEndpointSecure(): boolean;
|
176
169
|
areEndpointsOverridden(): boolean;
|
170
|
+
isEndpointSecure(): boolean;
|
177
171
|
withMomentoLocal(): CredentialProvider;
|
178
172
|
}
|
179
173
|
export {};
|
@@ -83,22 +83,10 @@ class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
83
83
|
if (decodedToken.tokenEndpoint === undefined) {
|
84
84
|
throw new Error('Malformed token; unable to determine token endpoint. Depending on the type of token you are using, you may need to specify the tokenEndpoint explicitly.');
|
85
85
|
}
|
86
|
-
if (decodedToken.storageEndpoint === undefined) {
|
87
|
-
throw new Error('Malformed token; unable to determine storage endpoint. Depending on the type of token you are using, you may need to specify the storageEndpoint explicitly.');
|
88
|
-
}
|
89
86
|
this.allEndpoints = {
|
90
|
-
controlEndpoint:
|
91
|
-
|
92
|
-
|
93
|
-
cacheEndpoint: {
|
94
|
-
endpoint: decodedToken.cacheEndpoint,
|
95
|
-
},
|
96
|
-
tokenEndpoint: {
|
97
|
-
endpoint: decodedToken.tokenEndpoint,
|
98
|
-
},
|
99
|
-
storageEndpoint: {
|
100
|
-
endpoint: decodedToken.storageEndpoint,
|
101
|
-
},
|
87
|
+
controlEndpoint: decodedToken.controlEndpoint,
|
88
|
+
cacheEndpoint: decodedToken.cacheEndpoint,
|
89
|
+
tokenEndpoint: decodedToken.tokenEndpoint,
|
102
90
|
};
|
103
91
|
}
|
104
92
|
else if (isAllEndpoints(props.endpointOverrides)) {
|
@@ -119,44 +107,35 @@ class StringMomentoTokenProvider extends CredentialProviderBase {
|
|
119
107
|
return this.apiKey;
|
120
108
|
}
|
121
109
|
getCacheEndpoint() {
|
122
|
-
return this.allEndpoints.cacheEndpoint
|
110
|
+
return this.allEndpoints.cacheEndpoint;
|
123
111
|
}
|
124
112
|
isCacheEndpointSecure() {
|
125
|
-
|
126
|
-
return true;
|
127
|
-
}
|
128
|
-
return this.allEndpoints.cacheEndpoint.secureConnection;
|
113
|
+
return this.isEndpointSecure();
|
129
114
|
}
|
130
115
|
getControlEndpoint() {
|
131
|
-
return this.allEndpoints.controlEndpoint
|
116
|
+
return this.allEndpoints.controlEndpoint;
|
132
117
|
}
|
133
118
|
isControlEndpointSecure() {
|
134
|
-
|
135
|
-
return true;
|
136
|
-
}
|
137
|
-
return this.allEndpoints.controlEndpoint.secureConnection;
|
119
|
+
return this.isEndpointSecure();
|
138
120
|
}
|
139
121
|
getTokenEndpoint() {
|
140
|
-
return this.allEndpoints.tokenEndpoint
|
122
|
+
return this.allEndpoints.tokenEndpoint;
|
141
123
|
}
|
142
124
|
isTokenEndpointSecure() {
|
143
|
-
|
144
|
-
return true;
|
145
|
-
}
|
146
|
-
return this.allEndpoints.tokenEndpoint.secureConnection;
|
147
|
-
}
|
148
|
-
getStorageEndpoint() {
|
149
|
-
return this.allEndpoints.storageEndpoint.endpoint;
|
125
|
+
return this.isEndpointSecure();
|
150
126
|
}
|
151
127
|
isStorageEndpointSecure() {
|
152
|
-
|
153
|
-
return true;
|
154
|
-
}
|
155
|
-
return this.allEndpoints.storageEndpoint.secureConnection;
|
128
|
+
return this.isEndpointSecure();
|
156
129
|
}
|
157
130
|
areEndpointsOverridden() {
|
158
131
|
return this.endpointsOverridden;
|
159
132
|
}
|
133
|
+
isEndpointSecure() {
|
134
|
+
if (this.allEndpoints.secureConnection === undefined) {
|
135
|
+
return true;
|
136
|
+
}
|
137
|
+
return this.allEndpoints.secureConnection;
|
138
|
+
}
|
160
139
|
withMomentoLocal() {
|
161
140
|
return new MomentoLocalProvider();
|
162
141
|
}
|
@@ -198,17 +177,14 @@ class MomentoLocalProvider {
|
|
198
177
|
constructor(props) {
|
199
178
|
const hostname = (props === null || props === void 0 ? void 0 : props.hostname) || '127.0.0.1';
|
200
179
|
const port = (props === null || props === void 0 ? void 0 : props.port) || 8080;
|
201
|
-
const momentoLocalEndpoint = {
|
202
|
-
endpoint: `${hostname}:${port}`,
|
203
|
-
secureConnection: false,
|
204
|
-
};
|
180
|
+
const momentoLocalEndpoint = `${hostname}:${port}`;
|
205
181
|
if (props === undefined || props.endpointOverrides === undefined) {
|
206
182
|
this.endpointsOverridden = false;
|
207
183
|
this.allEndpoints = {
|
208
184
|
controlEndpoint: momentoLocalEndpoint,
|
209
185
|
cacheEndpoint: momentoLocalEndpoint,
|
210
186
|
tokenEndpoint: momentoLocalEndpoint,
|
211
|
-
|
187
|
+
secureConnection: false,
|
212
188
|
};
|
213
189
|
}
|
214
190
|
else if (isAllEndpoints(props.endpointOverrides)) {
|
@@ -229,47 +205,35 @@ class MomentoLocalProvider {
|
|
229
205
|
return '';
|
230
206
|
}
|
231
207
|
getCacheEndpoint() {
|
232
|
-
return this.allEndpoints.cacheEndpoint
|
208
|
+
return this.allEndpoints.cacheEndpoint;
|
233
209
|
}
|
234
210
|
isCacheEndpointSecure() {
|
235
|
-
|
236
|
-
return true;
|
237
|
-
}
|
238
|
-
return this.allEndpoints.cacheEndpoint.secureConnection;
|
211
|
+
return this.isEndpointSecure();
|
239
212
|
}
|
240
213
|
getControlEndpoint() {
|
241
|
-
return this.allEndpoints.controlEndpoint
|
214
|
+
return this.allEndpoints.controlEndpoint;
|
242
215
|
}
|
243
216
|
isControlEndpointSecure() {
|
244
|
-
|
245
|
-
return true;
|
246
|
-
}
|
247
|
-
return this.allEndpoints.controlEndpoint.secureConnection;
|
217
|
+
return this.isEndpointSecure();
|
248
218
|
}
|
249
219
|
getTokenEndpoint() {
|
250
|
-
return this.allEndpoints.tokenEndpoint
|
220
|
+
return this.allEndpoints.tokenEndpoint;
|
251
221
|
}
|
252
222
|
isTokenEndpointSecure() {
|
253
|
-
|
254
|
-
return true;
|
255
|
-
}
|
256
|
-
return this.allEndpoints.tokenEndpoint.secureConnection;
|
223
|
+
return this.isEndpointSecure();
|
257
224
|
}
|
258
|
-
|
259
|
-
return this.
|
225
|
+
areEndpointsOverridden() {
|
226
|
+
return this.endpointsOverridden;
|
260
227
|
}
|
261
|
-
|
262
|
-
if (this.allEndpoints.
|
228
|
+
isEndpointSecure() {
|
229
|
+
if (this.allEndpoints.secureConnection === undefined) {
|
263
230
|
return true;
|
264
231
|
}
|
265
|
-
return this.allEndpoints.
|
266
|
-
}
|
267
|
-
areEndpointsOverridden() {
|
268
|
-
return this.endpointsOverridden;
|
232
|
+
return this.allEndpoints.secureConnection;
|
269
233
|
}
|
270
234
|
withMomentoLocal() {
|
271
235
|
return new MomentoLocalProvider();
|
272
236
|
}
|
273
237
|
}
|
274
238
|
exports.MomentoLocalProvider = MomentoLocalProvider;
|
275
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSzJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUEyRHRDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsS0FBNEM7UUFFNUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUNmLEtBQTRDO1FBRTVDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFnQztRQUNyRCxPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBdEZELGdEQXNGQztBQUVELE1BQWUsc0JBQXNCO0lBdUJuQyxPQUFPO1FBQ0wsNkRBQTZEO1FBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0s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QWUsQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUE3RkQsb0RBNkZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWxsRW5kcG9pbnRzLFxuICBkZWNvZGVBdXRoVG9rZW4sXG4gIGZyb21FbnRyaWVzLFxuICBwb3B1bGF0ZUFsbEVuZHBvaW50c0Zyb21CYXNlRW5kcG9pbnQsXG59IGZyb20gJy4uL2ludGVybmFsL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRW5kcG9pbnRPdmVycmlkZSB7XG4gIGJhc2VFbmRwb2ludDogc3RyaW5nO1xuICBlbmRwb2ludFByZWZpeD86IHN0cmluZztcbiAgc2VjdXJlQ29ubmVjdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEVuZHBvaW50T3ZlcnJpZGVzID0gQmFzZUVuZHBvaW50T3ZlcnJpZGUgfCBBbGxFbmRwb2ludHM7XG5cbmZ1bmN0aW9uIGlzQmFzZUVuZHBvaW50T3ZlcnJpZGUoXG4gIGVuZHBvaW50T3ZlcnJpZGVzOiBFbmRwb2ludE92ZXJyaWRlc1xuKTogZW5kcG9pbnRPdmVycmlkZXMgaXMgQmFzZUVuZHBvaW50T3ZlcnJpZGUge1xuICByZXR1cm4gKGVuZHBvaW50T3ZlcnJpZGVzIGFzIEJhc2VFbmRwb2ludE92ZXJyaWRlKS5iYXNlRW5kcG9pbnQgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNBbGxFbmRwb2ludHMoXG4gIGVuZHBvaW50T3ZlcnJpZGVzOiBFbmRwb2ludE92ZXJyaWRlc1xuKTogZW5kcG9pbnRPdmVycmlkZXMgaXMgQWxsRW5kcG9pbnRzIHtcbiAgY29uc3QgYWxsRW5kcG9pbnRzID0gZW5kcG9pbnRPdmVycmlkZXMgYXMgQWxsRW5kcG9pbnRzO1xuICByZXR1cm4gKFxuICAgIGFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICBhbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICBhbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludCAhPT0gdW5kZWZpbmVkXG4gICk7XG59XG5cbi8qKlxuICogRW5jYXBzdWxhdGVzIGFyZ3VtZW50cyBmb3IgaW5zdGFudGlhdGluZyBhbiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5pbnRlcmZhY2UgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICBlbmRwb2ludE92ZXJyaWRlcz86IEVuZHBvaW50T3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGluZm9ybWF0aW9uIHRoYXQgdGhlIENhY2hlQ2xpZW50IG5lZWRzIGluIG9yZGVyIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdG8gYW5kIGF1dGhlbnRpY2F0ZSB3aXRoXG4gKiB0aGUgTW9tZW50byBzZXJ2aWNlLlxuICogQGV4cG9ydFxuICogQGludGVyZmFjZSBDcmVkZW50aWFsUHJvdmlkZXJcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlciB7XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBdXRoIHRva2VuIHByb3ZpZGVkIGJ5IHVzZXIsIHJlcXVpcmVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBzZXJ2aWNlXG4gICAqL1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIGNvbnRyb2wgcGxhbmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29ubmVjdGluZyB0byB0aGUgY29udHJvbCBwbGFuZSBlbmRwb2ludCBjb25uZWN0aW9uIHdpdGggVExTOyBmYWxzZSBpZiBub3QgdXNpbmcgVExTXG4gICAqL1xuICBhYnN0cmFjdCBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIGRhdGEgcGxhbmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGNvbm5lY3RpbmcgdG8gdGhlIGRhdGEgcGxhbmUgZW5kcG9pbnQgY29ubmVjdGlvbiB3aXRoIFRMUzsgZmFsc2UgaWYgbm90IHVzaW5nIFRMU1xuICAgKi9cbiAgYWJzdHJhY3QgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gc3RvcmFnZSBvcGVyYXRpb25zXG4gICAqL1xuICBhYnN0cmFjdCBnZXRTdG9yYWdlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb25uZWN0aW5nIHRvIHRoZSBzdG9yYWdlIGVuZHBvaW50IGNvbm5lY3Rpb24gd2l0aCBUTFM7IGZhbHNlIGlmIG5vdCB1c2luZyBUTFNcbiAgICovXG4gIGFic3RyYWN0IGlzU3RvcmFnZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBob3N0IHdoaWNoIHRoZSBNb21lbnRvIGNsaWVudCB3aWxsIGNvbm5lY3QgdG8gZm9yIE1vbWVudG8gdG9rZW4gb3BlcmF0aW9uc1xuICAgKi9cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGNvbm5lY3RpbmcgdG8gdGhlIHRva2VuIGVuZHBvaW50IGNvbm5lY3Rpb24gd2l0aCBUTFM7IGZhbHNlIGlmIG5vdCB1c2luZyBUTFNcbiAgICovXG4gIGFic3RyYWN0IGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB0aGUgc3RhdGljIG1ldGhvZCBmb3JNb21lbnRvTG9jYWwgaW5zdGVhZFxuICAgKlxuICAgKiBNb2RpZmllcyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdG8gb3ZlcnJpZGUgZW5kcG9pbnRzIHRvXG4gICAqIGFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICovXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZW5kcG9pbnRzIHdlcmUgbWFudWFsbHkgb3ZlcnJpZGRlbiBhdCBjb25zdHJ1Y3Rpb24gdGltZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudlZhcihcbiAgICBwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoXG4gICAgcHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqIERvZXMgbm90IHJlcXVpcmUgYSBNb21lbnRvIEFQSSBrZXkuXG4gICAqIEBwYXJhbSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsUHJvdmlkZXJcbiAgICovXG4gIHN0YXRpYyBmb3JNb21lbnRvTG9jYWwocHJvcHM6IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRTdG9yYWdlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzU3RvcmFnZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgZ2V0VG9rZW5FbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNUb2tlbkVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0FwaUtleVByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhcGlLZXkgdGhlIG1vbWVudG8gQVBJIGtleVxuICAgKi9cbiAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhdXRoVG9rZW4gdGhlIG1vbWVudG8gYXV0aCB0b2tlblxuICAgKi9cbiAgYXV0aFRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgPVxuICB8IFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIHwgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHM7XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIG1vbWVudG8gYXV0aCB0b2tlbiBzdG9yZWQgaW4gYSBTdHJpbmdcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5leHBvcnQgY2xhc3MgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNPdmVycmlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHthcGlLZXk6IHByb3BzfTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgaWYgKCdhdXRoVG9rZW4nIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hdXRoVG9rZW47XG4gICAgfSBlbHNlIGlmICgnYXBpS2V5JyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXBpS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGF1dGhUb2tlbiBvciBhcGlLZXknKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFRva2VuID0gZGVjb2RlQXV0aFRva2VuKGtleSk7XG4gICAgdGhpcy5hcGlLZXkgPSBkZWNvZGVkVG9rZW4uYXV0aFRva2VuO1xuICAgIGlmIChwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSBmYWxzZTtcbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY29udHJvbCBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udHJvbEVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY2FjaGUgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNhY2hlRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSB0b2tlbiBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgdG9rZW5FbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uc3RvcmFnZUVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgc3RvcmFnZSBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgc3RvcmFnZUVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDoge1xuICAgICAgICAgIGVuZHBvaW50OiBkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50LFxuICAgICAgICB9LFxuICAgICAgICBjYWNoZUVuZHBvaW50OiB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50LFxuICAgICAgICB9LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50LFxuICAgICAgICB9LFxuICAgICAgICBzdG9yYWdlRW5kcG9pbnQ6IHtcbiAgICAgICAgICBlbmRwb2ludDogZGVjb2RlZFRva2VuLnN0b3JhZ2VFbmRwb2ludCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hcGlLZXk7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQuZW5kcG9pbnQ7XG4gIH1cblxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQuZW5kcG9pbnQ7XG4gIH1cblxuICBpc0NvbnRyb2xFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50LnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jb250cm9sRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludC5lbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludC5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludC5zZWN1cmVDb25uZWN0aW9uO1xuICB9XG5cbiAgZ2V0U3RvcmFnZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnN0b3JhZ2VFbmRwb2ludC5lbmRwb2ludDtcbiAgfVxuXG4gIGlzU3RvcmFnZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zdG9yYWdlRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnN0b3JhZ2VFbmRwb2ludC5zZWN1cmVDb25uZWN0aW9uO1xuICB9XG5cbiAgYXJlRW5kcG9pbnRzT3ZlcnJpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuO1xuICB9XG5cbiAgd2l0aE1vbWVudG9Mb2NhbCgpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZnJvbSB3aGljaCB0aGUgYXV0aCB0b2tlbiB3aWxsIGJlIHJlYWRcbiAgICovXG4gIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIG1vbWVudG8gYXV0aCB0b2tlbiBzdG9yZWQgYXMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgRW52TW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuZXhwb3J0IGNsYXNzIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyIGV4dGVuZHMgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIge1xuICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQHBhcmFtIHtFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0b2tlbiBwcm92aWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM6IEVudk1vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvcHMgPSB7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHByb3BzfTtcbiAgICB9XG4gICAgY29uc3QgYXV0aFRva2VuID0gcHJvY2Vzcy5lbnZbcHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdO1xuICAgIGlmICghYXV0aFRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlICR7cHJvcHMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YFxuICAgICAgKTtcbiAgICB9XG4gICAgc3VwZXIoe1xuICAgICAgYXV0aFRva2VuOiBhdXRoVG9rZW4sXG4gICAgICBlbmRwb2ludE92ZXJyaWRlczogcHJvcHMuZW5kcG9pbnRPdmVycmlkZXMsXG4gICAgfSk7XG4gICAgdGhpcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9IHByb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q3JlZGVudGlhbFByb3ZpZGVyKCk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gIHJldHVybiBDcmVkZW50aWFsUHJvdmlkZXIuZnJvbUVudlZhcignTU9NRU5UT19BUElfS0VZJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wcyBleHRlbmRzIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBob3N0bmFtZSBvZiB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlXG4gICAqL1xuICBob3N0bmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwb3J0IG9mIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2VcbiAgICovXG4gIHBvcnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBNb21lbnRvTG9jYWxQcm92aWRlciBpbXBsZW1lbnRzIENyZWRlbnRpYWxQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsRW5kcG9pbnRzOiBBbGxFbmRwb2ludHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzT3ZlcnJpZGRlbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIHtNb21lbnRvTG9jYWxQcm92aWRlclByb3BzfSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBNb21lbnRvTG9jYWxQcm92aWRlclByb3BzKSB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSBwcm9wcz8uaG9zdG5hbWUgfHwgJzEyNy4wLjAuMSc7XG4gICAgY29uc3QgcG9ydCA9IHByb3BzPy5wb3J0IHx8IDgwODA7XG4gICAgY29uc3QgbW9tZW50b0xvY2FsRW5kcG9pbnQgPSB7XG4gICAgICBlbmRwb2ludDogYCR7aG9zdG5hbWV9OiR7cG9ydH1gLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvbjogZmFsc2UsXG4gICAgfTtcblxuICAgIGlmIChwcm9wcyA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIGNhY2hlRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICB0b2tlbkVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgc3RvcmFnZUVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgZ2V0Q2FjaGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50LmVuZHBvaW50O1xuICB9XG5cbiAgaXNDYWNoZUVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50LnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5jYWNoZUVuZHBvaW50LnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICBnZXRDb250cm9sRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50LmVuZHBvaW50O1xuICB9XG5cbiAgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludC5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY29udHJvbEVuZHBvaW50LnNlY3VyZUNvbm5lY3Rpb247XG4gIH1cblxuICBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQuZW5kcG9pbnQ7XG4gIH1cblxuICBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldFN0b3JhZ2VFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5zdG9yYWdlRW5kcG9pbnQuZW5kcG9pbnQ7XG4gIH1cblxuICBpc1N0b3JhZ2VFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5hbGxFbmRwb2ludHMuc3RvcmFnZUVuZHBvaW50LnNlY3VyZUNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbEVuZHBvaW50cy5zdG9yYWdlRW5kcG9pbnQuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGFyZUVuZHBvaW50c092ZXJyaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cbiJdfQ==
|
239
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdXRoL2NyZWRlbnRpYWwtcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBSzJCO0FBVTNCLFNBQVMsc0JBQXNCLENBQzdCLGlCQUFvQztJQUVwQyxPQUFRLGlCQUEwQyxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDaEYsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUNyQixpQkFBb0M7SUFFcEMsTUFBTSxZQUFZLEdBQUcsaUJBQWlDLENBQUM7SUFDdkQsT0FBTyxDQUNMLFlBQVksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUN4QyxZQUFZLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDMUMsWUFBWSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBU0Q7Ozs7O0dBS0c7QUFDSCxNQUFzQixrQkFBa0I7SUFxRHRDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsS0FBNEM7UUFFNUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUNmLEtBQTRDO1FBRTVDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUErQztRQUUvQyxPQUFPLElBQUksMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFnQztRQUNyRCxPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNGO0FBaEZELGdEQWdGQztBQUVELE1BQWUsc0JBQXNCO0lBcUJuQyxPQUFPO1FBQ0wsNkRBQTZEO1FBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0s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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFsbEVuZHBvaW50cyxcbiAgZGVjb2RlQXV0aFRva2VuLFxuICBmcm9tRW50cmllcyxcbiAgcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50LFxufSBmcm9tICcuLi9pbnRlcm5hbC91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUVuZHBvaW50T3ZlcnJpZGUge1xuICBiYXNlRW5kcG9pbnQ6IHN0cmluZztcbiAgZW5kcG9pbnRQcmVmaXg/OiBzdHJpbmc7XG4gIHNlY3VyZUNvbm5lY3Rpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBFbmRwb2ludE92ZXJyaWRlcyA9IEJhc2VFbmRwb2ludE92ZXJyaWRlIHwgQWxsRW5kcG9pbnRzO1xuXG5mdW5jdGlvbiBpc0Jhc2VFbmRwb2ludE92ZXJyaWRlKFxuICBlbmRwb2ludE92ZXJyaWRlczogRW5kcG9pbnRPdmVycmlkZXNcbik6IGVuZHBvaW50T3ZlcnJpZGVzIGlzIEJhc2VFbmRwb2ludE92ZXJyaWRlIHtcbiAgcmV0dXJuIChlbmRwb2ludE92ZXJyaWRlcyBhcyBCYXNlRW5kcG9pbnRPdmVycmlkZSkuYmFzZUVuZHBvaW50ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQWxsRW5kcG9pbnRzKFxuICBlbmRwb2ludE92ZXJyaWRlczogRW5kcG9pbnRPdmVycmlkZXNcbik6IGVuZHBvaW50T3ZlcnJpZGVzIGlzIEFsbEVuZHBvaW50cyB7XG4gIGNvbnN0IGFsbEVuZHBvaW50cyA9IGVuZHBvaW50T3ZlcnJpZGVzIGFzIEFsbEVuZHBvaW50cztcbiAgcmV0dXJuIChcbiAgICBhbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludCAhPT0gdW5kZWZpbmVkICYmXG4gICAgYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludCAhPT0gdW5kZWZpbmVkICYmXG4gICAgYWxsRW5kcG9pbnRzLnRva2VuRW5kcG9pbnQgIT09IHVuZGVmaW5lZFxuICApO1xufVxuXG4vKipcbiAqIEVuY2Fwc3VsYXRlcyBhcmd1bWVudHMgZm9yIGluc3RhbnRpYXRpbmcgYW4gRW52TW9tZW50b1Rva2VuUHJvdmlkZXJcbiAqL1xuaW50ZXJmYWNlIENyZWRlbnRpYWxQcm92aWRlclByb3BzIHtcbiAgZW5kcG9pbnRPdmVycmlkZXM/OiBFbmRwb2ludE92ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBpbmZvcm1hdGlvbiB0aGF0IHRoZSBDYWNoZUNsaWVudCBuZWVkcyBpbiBvcmRlciB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIGFuZCBhdXRoZW50aWNhdGUgd2l0aFxuICogdGhlIE1vbWVudG8gc2VydmljZS5cbiAqIEBleHBvcnRcbiAqIEBpbnRlcmZhY2UgQ3JlZGVudGlhbFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gQXV0aCB0b2tlbiBwcm92aWRlZCBieSB1c2VyLCByZXF1aXJlZCB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgc2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0QXV0aFRva2VuKCk6IHN0cmluZztcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byBjb250cm9sIHBsYW5lIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBpc0VuZHBvaW50U2VjdXJlKCkgaW5zdGVhZFxuICAgKi9cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGhvc3Qgd2hpY2ggdGhlIE1vbWVudG8gY2xpZW50IHdpbGwgY29ubmVjdCB0byBmb3IgTW9tZW50byBkYXRhIHBsYW5lIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaG9zdCB3aGljaCB0aGUgTW9tZW50byBjbGllbnQgd2lsbCBjb25uZWN0IHRvIGZvciBNb21lbnRvIHRva2VuIG9wZXJhdGlvbnNcbiAgICovXG4gIGFic3RyYWN0IGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgaXNFbmRwb2ludFNlY3VyZSgpIGluc3RlYWRcbiAgICovXG4gIGFic3RyYWN0IGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB0aGUgc3RhdGljIG1ldGhvZCBmb3JNb21lbnRvTG9jYWwgaW5zdGVhZFxuICAgKlxuICAgKiBNb2RpZmllcyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGNyZWRlbnRpYWwgcHJvdmlkZXIgdG8gb3ZlcnJpZGUgZW5kcG9pbnRzIHRvXG4gICAqIGFsbG93IGluc2VjdXJlIGNvbm5lY3Rpb25zIHRvIHRoZSBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXNcbiAgICovXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiB0aGUgZW5kcG9pbnRzIHdlcmUgbWFudWFsbHkgb3ZlcnJpZGRlbiBhdCBjb25zdHJ1Y3Rpb24gdGltZTsgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBjb25uZWN0aW5nIHRvIHRoZSBlbmRwb2ludCBjb25uZWN0aW9uIHdpdGggVExTOyBmYWxzZSBpZiBub3QgdXNpbmcgVExTXG4gICAqL1xuICBhYnN0cmFjdCBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW47XG5cbiAgc3RhdGljIGZyb21FbnZpcm9ubWVudFZhcmlhYmxlKFxuICAgIHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nXG4gICk6IENyZWRlbnRpYWxQcm92aWRlciB7XG4gICAgcmV0dXJuIG5ldyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlcihwcm9wcyk7XG4gIH1cblxuICBzdGF0aWMgZnJvbUVudlZhcihcbiAgICBwcm9wczogRW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZ1xuICApOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgRW52TW9tZW50b1Rva2VuUHJvdmlkZXIocHJvcHMpO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoXG4gICAgcHJvcHM6IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgfCBzdHJpbmdcbiAgKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyKHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBpbnNlY3VyZSBjb25uZWN0aW9ucyB0byBtb21lbnRvLWxvY2FsIHNlcnZpY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqIERvZXMgbm90IHJlcXVpcmUgYSBNb21lbnRvIEFQSSBrZXkuXG4gICAqIEBwYXJhbSBwcm9wcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGNvbm5lY3RpbmcgdG8gbW9tZW50by1sb2NhbFxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFsUHJvdmlkZXJcbiAgICovXG4gIHN0YXRpYyBmb3JNb21lbnRvTG9jYWwocHJvcHM6IE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICAgIHJldHVybiBuZXcgTW9tZW50b0xvY2FsUHJvdmlkZXIocHJvcHMpO1xuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIENyZWRlbnRpYWxQcm92aWRlckJhc2UgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBhYnN0cmFjdCBnZXRBdXRoVG9rZW4oKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nO1xuXG4gIGFic3RyYWN0IGlzQ2FjaGVFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IGdldENvbnRyb2xFbmRwb2ludCgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaXNDb250cm9sRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBnZXRUb2tlbkVuZHBvaW50KCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpc1Rva2VuRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbjtcblxuICBhYnN0cmFjdCBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW47XG5cbiAgYWJzdHJhY3QgaXNFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuO1xuXG4gIGFic3RyYWN0IHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyO1xuXG4gIHZhbHVlT2YoKTogb2JqZWN0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMpLmZpbHRlcigoW2tdKSA9PiBrICE9PSAnYXV0aFRva2VuJyk7XG4gICAgY29uc3QgY2xvbmUgPSBmcm9tRW50cmllcyhlbnRyaWVzKTtcbiAgICByZXR1cm4gY2xvbmUudmFsdWVPZigpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0FwaUtleVByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhcGlLZXkgdGhlIG1vbWVudG8gQVBJIGtleVxuICAgKi9cbiAgYXBpS2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHNcbiAgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBhdXRoVG9rZW4gdGhlIG1vbWVudG8gYXV0aCB0b2tlblxuICAgKi9cbiAgYXV0aFRva2VuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHMgPVxuICB8IFN0cmluZ01vbWVudG9BcGlLZXlQcm92aWRlclByb3BzXG4gIHwgU3RyaW5nTW9tZW50b0F1dGhUb2tlblByb3ZpZGVyUHJvcHM7XG5cbi8qKlxuICogUmVhZHMgYW5kIHBhcnNlcyBhIG1vbWVudG8gYXV0aCB0b2tlbiBzdG9yZWQgaW4gYSBTdHJpbmdcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBTdHJpbmdNb21lbnRvVG9rZW5Qcm92aWRlclxuICovXG5leHBvcnQgY2xhc3MgU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXIgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGlLZXk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxFbmRwb2ludHM6IEFsbEVuZHBvaW50cztcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludHNPdmVycmlkZGVuOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyUHJvcHN9IHByb3BzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRva2VuIHByb3ZpZGVyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wczogU3RyaW5nTW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wcyB8IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm9wcyA9IHthcGlLZXk6IHByb3BzfTtcbiAgICB9XG4gICAgc3VwZXIoKTtcbiAgICBsZXQga2V5OiBzdHJpbmc7XG4gICAgaWYgKCdhdXRoVG9rZW4nIGluIHByb3BzKSB7XG4gICAgICBrZXkgPSBwcm9wcy5hdXRoVG9rZW47XG4gICAgfSBlbHNlIGlmICgnYXBpS2V5JyBpbiBwcm9wcykge1xuICAgICAga2V5ID0gcHJvcHMuYXBpS2V5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHk6IGF1dGhUb2tlbiBvciBhcGlLZXknKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZFRva2VuID0gZGVjb2RlQXV0aFRva2VuKGtleSk7XG4gICAgdGhpcy5hcGlLZXkgPSBkZWNvZGVkVG9rZW4uYXV0aFRva2VuO1xuICAgIGlmIChwcm9wcy5lbmRwb2ludE92ZXJyaWRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW4gPSBmYWxzZTtcbiAgICAgIGlmIChkZWNvZGVkVG9rZW4uY29udHJvbEVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY29udHJvbCBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgY29udHJvbEVuZHBvaW50IGV4cGxpY2l0bHkuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGRlY29kZWRUb2tlbi5jYWNoZUVuZHBvaW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdNYWxmb3JtZWQgdG9rZW47IHVuYWJsZSB0byBkZXRlcm1pbmUgY2FjaGUgZW5kcG9pbnQuICBEZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgdG9rZW4geW91IGFyZSB1c2luZywgeW91IG1heSBuZWVkIHRvIHNwZWNpZnkgdGhlIGNhY2hlRW5kcG9pbnQgZXhwbGljaXRseS4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlZFRva2VuLnRva2VuRW5kcG9pbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ01hbGZvcm1lZCB0b2tlbjsgdW5hYmxlIHRvIGRldGVybWluZSB0b2tlbiBlbmRwb2ludC4gIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiB0b2tlbiB5b3UgYXJlIHVzaW5nLCB5b3UgbWF5IG5lZWQgdG8gc3BlY2lmeSB0aGUgdG9rZW5FbmRwb2ludCBleHBsaWNpdGx5LidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbGxFbmRwb2ludHMgPSB7XG4gICAgICAgIGNvbnRyb2xFbmRwb2ludDogZGVjb2RlZFRva2VuLmNvbnRyb2xFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogZGVjb2RlZFRva2VuLmNhY2hlRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IGRlY29kZWRUb2tlbi50b2tlbkVuZHBvaW50LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzQWxsRW5kcG9pbnRzKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzKSkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0gcHJvcHMuZW5kcG9pbnRPdmVycmlkZXM7XG4gICAgfSBlbHNlIGlmIChpc0Jhc2VFbmRwb2ludE92ZXJyaWRlKHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzKSkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWxsRW5kcG9pbnRzID0gcG9wdWxhdGVBbGxFbmRwb2ludHNGcm9tQmFzZUVuZHBvaW50KFxuICAgICAgICBwcm9wcy5lbmRwb2ludE92ZXJyaWRlc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgIGBVbnN1cHBvcnRlZCBlbmRwb2ludE92ZXJyaWRlczogJHtwcm9wcy5lbmRwb2ludE92ZXJyaWRlc31gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF1dGhUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFwaUtleTtcbiAgfVxuXG4gIGdldENhY2hlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuY2FjaGVFbmRwb2ludDtcbiAgfVxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBpc1N0b3JhZ2VFbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW47XG4gIH1cblxuICBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIGV4dGVuZHMgQ3JlZGVudGlhbFByb3ZpZGVyUHJvcHMge1xuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGZyb20gd2hpY2ggdGhlIGF1dGggdG9rZW4gd2lsbCBiZSByZWFkXG4gICAqL1xuICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgYSBtb21lbnRvIGF1dGggdG9rZW4gc3RvcmVkIGFzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQGV4cG9ydFxuICogQGNsYXNzIEVudk1vbWVudG9Ub2tlblByb3ZpZGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZNb21lbnRvVG9rZW5Qcm92aWRlciBleHRlbmRzIFN0cmluZ01vbWVudG9Ub2tlblByb3ZpZGVyIHtcbiAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBwYXJhbSB7RW52TW9tZW50b1Rva2VuUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgdG9rZW4gcHJvdmlkZXJcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBFbnZNb21lbnRvVG9rZW5Qcm92aWRlclByb3BzIHwgc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3BzID0ge2Vudmlyb25tZW50VmFyaWFibGVOYW1lOiBwcm9wc307XG4gICAgfVxuICAgIGNvbnN0IGF1dGhUb2tlbiA9IHByb2Nlc3MuZW52W3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lXTtcbiAgICBpZiAoIWF1dGhUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAke3Byb3BzLmVudmlyb25tZW50VmFyaWFibGVOYW1lfWBcbiAgICAgICk7XG4gICAgfVxuICAgIHN1cGVyKHtcbiAgICAgIGF1dGhUb2tlbjogYXV0aFRva2VuLFxuICAgICAgZW5kcG9pbnRPdmVycmlkZXM6IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzLFxuICAgIH0pO1xuICAgIHRoaXMuZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPSBwcm9wcy5lbnZpcm9ubWVudFZhcmlhYmxlTmFtZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdENyZWRlbnRpYWxQcm92aWRlcigpOiBDcmVkZW50aWFsUHJvdmlkZXIge1xuICByZXR1cm4gQ3JlZGVudGlhbFByb3ZpZGVyLmZyb21FbnZWYXIoJ01PTUVOVE9fQVBJX0tFWScpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbWVudG9Mb2NhbFByb3ZpZGVyUHJvcHMgZXh0ZW5kcyBDcmVkZW50aWFsUHJvdmlkZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgaG9zdG5hbWUgb2YgdGhlIG1vbWVudG8tbG9jYWwgc2VydmljZVxuICAgKi9cbiAgaG9zdG5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcG9ydCBvZiB0aGUgbW9tZW50by1sb2NhbCBzZXJ2aWNlXG4gICAqL1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgTW9tZW50b0xvY2FsUHJvdmlkZXIgaW1wbGVtZW50cyBDcmVkZW50aWFsUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbEVuZHBvaW50czogQWxsRW5kcG9pbnRzO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50c092ZXJyaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7TW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wc30gcHJvcHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBjb25uZWN0aW5nIHRvIG1vbWVudG8tbG9jYWxcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogTW9tZW50b0xvY2FsUHJvdmlkZXJQcm9wcykge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gcHJvcHM/Lmhvc3RuYW1lIHx8ICcxMjcuMC4wLjEnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm9wcz8ucG9ydCB8fCA4MDgwO1xuICAgIGNvbnN0IG1vbWVudG9Mb2NhbEVuZHBvaW50ID0gYCR7aG9zdG5hbWV9OiR7cG9ydH1gO1xuXG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQgfHwgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5lbmRwb2ludHNPdmVycmlkZGVuID0gZmFsc2U7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHtcbiAgICAgICAgY29udHJvbEVuZHBvaW50OiBtb21lbnRvTG9jYWxFbmRwb2ludCxcbiAgICAgICAgY2FjaGVFbmRwb2ludDogbW9tZW50b0xvY2FsRW5kcG9pbnQsXG4gICAgICAgIHRva2VuRW5kcG9pbnQ6IG1vbWVudG9Mb2NhbEVuZHBvaW50LFxuICAgICAgICBzZWN1cmVDb25uZWN0aW9uOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc0FsbEVuZHBvaW50cyhwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHByb3BzLmVuZHBvaW50T3ZlcnJpZGVzO1xuICAgIH0gZWxzZSBpZiAoaXNCYXNlRW5kcG9pbnRPdmVycmlkZShwcm9wcy5lbmRwb2ludE92ZXJyaWRlcykpIHtcbiAgICAgIHRoaXMuZW5kcG9pbnRzT3ZlcnJpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmFsbEVuZHBvaW50cyA9IHBvcHVsYXRlQWxsRW5kcG9pbnRzRnJvbUJhc2VFbmRwb2ludChcbiAgICAgICAgcHJvcHMuZW5kcG9pbnRPdmVycmlkZXNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICBgVW5zdXBwb3J0ZWQgZW5kcG9pbnRPdmVycmlkZXM6ICR7cHJvcHMuZW5kcG9pbnRPdmVycmlkZXN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBdXRoVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRDYWNoZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNhY2hlRW5kcG9pbnQ7XG4gIH1cblxuICBpc0NhY2hlRW5kcG9pbnRTZWN1cmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFbmRwb2ludFNlY3VyZSgpO1xuICB9XG5cbiAgZ2V0Q29udHJvbEVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWxsRW5kcG9pbnRzLmNvbnRyb2xFbmRwb2ludDtcbiAgfVxuXG4gIGlzQ29udHJvbEVuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRW5kcG9pbnRTZWN1cmUoKTtcbiAgfVxuXG4gIGdldFRva2VuRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMudG9rZW5FbmRwb2ludDtcbiAgfVxuXG4gIGlzVG9rZW5FbmRwb2ludFNlY3VyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VuZHBvaW50U2VjdXJlKCk7XG4gIH1cblxuICBhcmVFbmRwb2ludHNPdmVycmlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVuZHBvaW50c092ZXJyaWRkZW47XG4gIH1cblxuICBpc0VuZHBvaW50U2VjdXJlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmFsbEVuZHBvaW50cy5zZWN1cmVDb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbGxFbmRwb2ludHMuc2VjdXJlQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHdpdGhNb21lbnRvTG9jYWwoKTogQ3JlZGVudGlhbFByb3ZpZGVyIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudG9Mb2NhbFByb3ZpZGVyKCk7XG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,3 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXJldHJ5LWVsaWdpYmlsaXR5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy9yZXRyeS9zdWJzY3JpcHRpb24tcmV0cnktZWxpZ2liaWxpdHktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2RrRXJyb3J9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5cbmV4cG9ydCB0eXBlIEVsaWdpYmxlRm9yUmVzdWJzY3JpYmVQcm9wcyA9IHtcbiAgc2RrRXJyb3I6IFNka0Vycm9yO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb25SZXRyeUVsaWdpYmlsaXR5U3RyYXRlZ3kge1xuICBpc0VsaWdpYmxlRm9yUmVzdWJzY3JpYmUocHJvcHM6IEVsaWdpYmxlRm9yUmVzdWJzY3JpYmVQcm9wcyk6IGJvb2xlYW47XG59XG4iXX0=
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { SdkError } from '../../errors';
|
2
|
+
import { SubscriptionRetryEligibilityStrategy } from './subscription-retry-eligibility-strategy';
|
3
|
+
export declare const DEFAULT_SUBSCRIPTION_RETRY_DELAY_MILLIS = 500;
|
4
|
+
export interface DetermineWhenToResubscribeProps {
|
5
|
+
sdkError: SdkError;
|
6
|
+
}
|
7
|
+
export interface SubscriptionRetryStrategy {
|
8
|
+
eligibilityStrategy: SubscriptionRetryEligibilityStrategy;
|
9
|
+
retryDelayMillis: number;
|
10
|
+
determineWhenToResubscribe(props: DetermineWhenToResubscribeProps): number | null;
|
11
|
+
}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DEFAULT_SUBSCRIPTION_RETRY_DELAY_MILLIS = void 0;
|
4
|
+
exports.DEFAULT_SUBSCRIPTION_RETRY_DELAY_MILLIS = 500;
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXJldHJ5LXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbmZpZy9yZXRyeS9zdWJzY3JpcHRpb24tcmV0cnktc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR2EsUUFBQSx1Q0FBdUMsR0FBRyxHQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1Nka0Vycm9yfSBmcm9tICcuLi8uLi9lcnJvcnMnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb25SZXRyeUVsaWdpYmlsaXR5U3RyYXRlZ3l9IGZyb20gJy4vc3Vic2NyaXB0aW9uLXJldHJ5LWVsaWdpYmlsaXR5LXN0cmF0ZWd5JztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU1VCU0NSSVBUSU9OX1JFVFJZX0RFTEFZX01JTExJUyA9IDUwMDtcblxuZXhwb3J0IGludGVyZmFjZSBEZXRlcm1pbmVXaGVuVG9SZXN1YnNjcmliZVByb3BzIHtcbiAgc2RrRXJyb3I6IFNka0Vycm9yO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvblJldHJ5U3RyYXRlZ3kge1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciB0byByZWNvbm5lY3QgYWZ0ZXIgYW4gZXJyb3JcbiAgZWxpZ2liaWxpdHlTdHJhdGVneTogU3Vic2NyaXB0aW9uUmV0cnlFbGlnaWJpbGl0eVN0cmF0ZWd5O1xuXG4gIC8vIEF0dGVtcHQgdG8gcmVjb25uZWN0IGFmdGVyIGEgZml4ZWQgdGltZSBpbnRlcnZhbCAoZGVmYXVsdHMgdG8gNTAwbXMpXG4gIHJldHJ5RGVsYXlNaWxsaXM6IG51bWJlcjtcblxuICBkZXRlcm1pbmVXaGVuVG9SZXN1YnNjcmliZShcbiAgICBwcm9wczogRGV0ZXJtaW5lV2hlblRvUmVzdWJzY3JpYmVQcm9wc1xuICApOiBudW1iZXIgfCBudWxsO1xufVxuIl19
|
@@ -189,4 +189,11 @@ export declare class UnknownServiceError extends SdkError {
|
|
189
189
|
_errorCode: MomentoErrorCode;
|
190
190
|
_messageWrapper: string;
|
191
191
|
}
|
192
|
+
/**
|
193
|
+
* Error raised when a client resource is exhausted, such as memory or number of subscriptions (stream connections).
|
194
|
+
*/
|
195
|
+
export declare class ClientResourceExhaustedError extends SdkError {
|
196
|
+
_errorCode: MomentoErrorCode;
|
197
|
+
constructor(message?: string | undefined);
|
198
|
+
}
|
192
199
|
export {};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.UnknownServiceError = exports.UnknownError = exports.TimeoutError = exports.ServerUnavailableError = exports.PermissionError = exports.StoreItemNotFoundError = exports.StoreNotFoundError = exports.CacheNotFoundError = exports.LimitExceededError = exports.InvalidArgumentError = exports.InternalServerError = exports.FailedPreconditionError = exports.ConnectionError = exports.CancelledError = exports.BadRequestError = exports.AuthenticationError = exports.StoreAlreadyExistsError = exports.CacheAlreadyExistsError = exports.SdkError = exports.MomentoErrorTransportDetails = exports.MomentoGrpcErrorDetails = exports.MomentoErrorCode = void 0;
|
3
|
+
exports.ClientResourceExhaustedError = exports.UnknownServiceError = exports.UnknownError = exports.TimeoutError = exports.ServerUnavailableError = exports.PermissionError = exports.StoreItemNotFoundError = exports.StoreNotFoundError = exports.CacheNotFoundError = exports.LimitExceededError = exports.InvalidArgumentError = exports.InternalServerError = exports.FailedPreconditionError = exports.ConnectionError = exports.CancelledError = exports.BadRequestError = exports.AuthenticationError = exports.StoreAlreadyExistsError = exports.CacheAlreadyExistsError = exports.SdkError = exports.MomentoErrorTransportDetails = exports.MomentoGrpcErrorDetails = exports.MomentoErrorCode = void 0;
|
4
4
|
var MomentoErrorCode;
|
5
5
|
(function (MomentoErrorCode) {
|
6
6
|
// Invalid argument passed to Momento client
|
@@ -343,4 +343,14 @@ class UnknownServiceError extends SdkError {
|
|
343
343
|
}
|
344
344
|
}
|
345
345
|
exports.UnknownServiceError = UnknownServiceError;
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxnQkEyQ1g7QUEzQ0QsV0FBWSxnQkFBZ0I7SUFDMUIsNENBQTRDO0lBQzVDLHFFQUFpRCxDQUFBO0lBQ2pELHVDQUF1QztJQUN2QyxtRUFBK0MsQ0FBQTtJQUMvQywyQ0FBMkM7SUFDM0MsdUVBQW1ELENBQUE7SUFDbkQseURBQXlEO0lBQ3pELGlFQUE2QyxDQUFBO0lBQzdDLDJDQUEyQztJQUMzQyx1RUFBbUQsQ0FBQTtJQUNuRCwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsb0RBQW9EO0lBQ3BELHVEQUFtQyxDQUFBO0lBQ25DLDBDQUEwQztJQUMxQyxtRUFBK0MsQ0FBQTtJQUMvQyx3Q0FBd0M7SUFDeEMsNkVBQXlELENBQUE7SUFDekQsbUVBQW1FO0lBQ25FLG1FQUErQyxDQUFBO0lBQy9DLGdEQUFnRDtJQUNoRCx5REFBcUMsQ0FBQTtJQUNyQyxpRUFBaUU7SUFDakUsaUVBQTZDLENBQUE7SUFDN0Msc0NBQXNDO0lBQ3RDLHVEQUFtQyxDQUFBO0lBQ25DLHNDQUFzQztJQUN0Qyx5REFBcUMsQ0FBQTtJQUNyQyw4RUFBOEU7SUFDOUUsaUVBQTZDLENBQUE7SUFDN0Msc0JBQXNCO0lBQ3RCLDJEQUF1QyxDQUFBO0lBQ3ZDLDJDQUEyQztJQUMzQyxtREFBK0IsQ0FBQTtJQUMvQiwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsdURBQXVEO0lBQ3ZELDJFQUF1RCxDQUFBO0lBQ3ZELGtFQUFrRTtJQUNsRSwyRUFBdUQsQ0FBQTtJQUN2RCw2QkFBNkI7SUFDN0IsbURBQStCLENBQUE7QUFDakMsQ0FBQyxFQTNDVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQTJDM0I7QUFFRCxNQUFhLHVCQUF1QjtJQUlsQyxZQUFZLElBQVksRUFBRSxP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ekksQ0FBQztDQUFBO0FBSkQsd0RBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLFFBQVE7SUFBMUM7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUM1QyxvQkFBZSxHQUN0Qiw4R0FBOEcsQ0FBQztJQUNuSCxDQUFDO0NBQUE7QUFKRCxvQ0FJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsUUFBUTtJQUExQzs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsNEJBQTRCLENBQUM7SUFDMUQsQ0FBQztDQUFBO0FBSEQsb0NBR0M7QUFFRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsUUFBUTtJQUFqRDs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7UUFDcEQsb0JBQWUsR0FDdEIsa0ZBQWtGLENBQUM7SUFDdkYsQ0FBQztDQUFBO0FBSkQsa0RBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBNb21lbnRvRXJyb3JDb2RlIHtcbiAgLy8gSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gTW9tZW50byBjbGllbnRcbiAgSU5WQUxJRF9BUkdVTUVOVF9FUlJPUiA9ICdJTlZBTElEX0FSR1VNRU5UX0VSUk9SJyxcbiAgLy8gU2VydmljZSByZXR1cm5lZCBhbiB1bmtub3duIHJlc3BvbnNlXG4gIFVOS05PV05fU0VSVklDRV9FUlJPUiA9ICdVTktOT1dOX1NFUlZJQ0VfRVJST1InLFxuICAvLyBDYWNoZSB3aXRoIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzXG4gIENBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SID0gJ0FMUkVBRFlfRVhJU1RTX0VSUk9SJyxcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBDQUNIRV9BTFJFQURZX0VYSVNUU19FUlJPUiBpbnN0ZWFkICovXG4gIEFMUkVBRFlfRVhJU1RTX0VSUk9SID0gJ0FMUkVBRFlfRVhJU1RTX0VSUk9SJyxcbiAgLy8gU3RvcmUgd2l0aCBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0c1xuICBTVE9SRV9BTFJFQURZX0VYSVNUU19FUlJPUiA9ICdBTFJFQURZX0VYSVNUU19FUlJPUicsXG4gIC8vIENhY2hlIHdpdGggc3BlY2lmaWVkIG5hbWUgZG9lc24ndCBleGlzdFxuICBDQUNIRV9OT1RfRk9VTkRfRVJST1IgPSAnTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSBDQUNIRV9OT1RfRk9VTkRfRVJST1IgaW5zdGVhZCAqL1xuICBOT1RfRk9VTkRfRVJST1IgPSAnTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLy8gU3RvcmUgd2l0aCBzcGVjaWZpZWQgbmFtZSBkb2Vzbid0IGV4aXN0XG4gIFNUT1JFX05PVF9GT1VORF9FUlJPUiA9ICdTVE9SRV9OT1RfRk9VTkRfRVJST1InLFxuICAvLyBJdGVtIHdpdGggc3BlY2lmaWVkIGtleSBkb2Vzbid0IGV4aXN0XG4gIFNUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SID0gJ1NUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLy8gQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdFxuICBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSAnSU5URVJOQUxfU0VSVkVSX0VSUk9SJyxcbiAgLy8gSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gb3BlcmF0aW9uXG4gIFBFUk1JU1NJT05fRVJST1IgPSAnUEVSTUlTU0lPTl9FUlJPUicsXG4gIC8vIEludmFsaWQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gY29ubmVjdCB0byBjYWNoZSBzZXJ2aWNlXG4gIEFVVEhFTlRJQ0FUSU9OX0VSUk9SID0gJ0FVVEhFTlRJQ0FUSU9OX0VSUk9SJyxcbiAgLy8gUmVxdWVzdCB3YXMgY2FuY2VsbGVkIGJ5IHRoZSBzZXJ2ZXJcbiAgQ0FOQ0VMTEVEX0VSUk9SID0gJ0NBTkNFTExFRF9FUlJPUicsXG4gIC8vIEVycm9yIGNvbm5lY3RpbmcgdG8gTW9tZW50byBzZXJ2ZXJzXG4gIENPTk5FQ1RJT05fRVJST1IgPSAnQ09OTkVDVElPTl9FUlJPUicsXG4gIC8vIFJlcXVlc3QgcmF0ZSwgYmFuZHdpZHRoLCBvciBvYmplY3Qgc2l6ZSBleGNlZWRlZCB0aGUgbGltaXRzIGZvciB0aGUgYWNjb3VudFxuICBMSU1JVF9FWENFRURFRF9FUlJPUiA9ICdMSU1JVF9FWENFRURFRF9FUlJPUicsXG4gIC8vIFJlcXVlc3Qgd2FzIGludmFsaWRcbiAgQkFEX1JFUVVFU1RfRVJST1IgPSAnQkFEX1JFUVVFU1RfRVJST1InLFxuICAvLyBDbGllbnQncyBjb25maWd1cmVkIHRpbWVvdXQgd2FzIGV4Y2VlZGVkXG4gIFRJTUVPVVRfRVJST1IgPSAnVElNRU9VVF9FUlJPUicsXG4gIC8vIFNlcnZlciB3YXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcmVxdWVzdFxuICBTRVJWRVJfVU5BVkFJTEFCTEUgPSAnU0VSVkVSX1VOQVZBSUxBQkxFJyxcbiAgLy8gQSBjbGllbnQgcmVzb3VyY2UgKG1vc3QgbGlrZWx5IG1lbW9yeSkgd2FzIGV4aGF1c3RlZFxuICBDTElFTlRfUkVTT1VSQ0VfRVhIQVVTVEVEID0gJ0NMSUVOVF9SRVNPVVJDRV9FWEhBVVNURUQnLFxuICAvLyBTeXN0ZW0gaXMgbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb25cbiAgRkFJTEVEX1BSRUNPTkRJVElPTl9FUlJPUiA9ICdGQUlMRURfUFJFQ09ORElUSU9OX0VSUk9SJyxcbiAgLy8gVW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWRcbiAgVU5LTk9XTl9FUlJPUiA9ICdVTktOT1dOX0VSUk9SJyxcbn1cblxuZXhwb3J0IGNsYXNzIE1vbWVudG9HcnBjRXJyb3JEZXRhaWxzIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvZGU6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhPzogb2JqZWN0O1xuICBjb25zdHJ1Y3Rvcihjb2RlOiBudW1iZXIsIGRldGFpbHM6IHN0cmluZywgbWV0YWRhdGE/OiBvYmplY3QpIHtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb21lbnRvRXJyb3JUcmFuc3BvcnREZXRhaWxzIHtcbiAgcHVibGljIHJlYWRvbmx5IGdycGM6IE1vbWVudG9HcnBjRXJyb3JEZXRhaWxzO1xuICBjb25zdHJ1Y3RvcihncnBjOiBNb21lbnRvR3JwY0Vycm9yRGV0YWlscykge1xuICAgIHRoaXMuZ3JwYyA9IGdycGM7XG4gIH1cbn1cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIGVycm9ycyB0aHJvd24gYnkgdGhlIHNka1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2RrRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZXJyb3JDb2RlOiBNb21lbnRvRXJyb3JDb2RlO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21lc3NhZ2VXcmFwcGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdHJhbnNwb3J0RGV0YWlsczogTW9tZW50b0Vycm9yVHJhbnNwb3J0RGV0YWlscztcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGUgPSAwLFxuICAgIG1ldGFkYXRhOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICBjb25zdCBncnBjRGV0YWlscyA9IG5ldyBNb21lbnRvR3JwY0Vycm9yRGV0YWlscyhjb2RlLCBtZXNzYWdlLCBtZXRhZGF0YSk7XG4gICAgdGhpcy5fdHJhbnNwb3J0RGV0YWlscyA9IG5ldyBNb21lbnRvRXJyb3JUcmFuc3BvcnREZXRhaWxzKGdycGNEZXRhaWxzKTtcbiAgICB0aGlzLnN0YWNrID0gc3RhY2sgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHdyYXBwZWRFcnJvck1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5fbWVzc2FnZVdyYXBwZXJ9OiAke3RoaXMubWVzc2FnZX1gO1xuICB9XG5cbiAgcHVibGljIGVycm9yQ29kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JDb2RlO1xuICB9XG5cbiAgcHVibGljIHRyYW5zcG9ydERldGFpbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydERldGFpbHM7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBjYWNoZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIGNhY2hlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBjYWNoZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBQ0hFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBjYWNoZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBjcmVhdGUgYSBzdG9yZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY2FjaGUuIFRvIHJlc29sdmUgdGhpcyBlcnJvcixcbiAqIGVpdGhlciBkZWxldGUgdGhlIGV4aXN0aW5nIHN0b3JlIGFuZCBtYWtlIGEgbmV3IG9uZSwgb3IgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBzdG9yZSB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgdG9cbiAqIG9uZSB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgU3RvcmVBbHJlYWR5RXhpc3RzRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX0FMUkVBRFlfRVhJU1RTX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGFscmVhZHkgZXhpc3RzLiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBzdG9yZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIHVzZSBhIGRpZmZlcmVudCBuYW1lJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGF1dGhlbnRpY2F0aW9uIHdpdGggQ2FjaGUgU2VydmljZSBmYWlsc1xuICovXG5leHBvcnQgY2xhc3MgQXV0aGVudGljYXRpb25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuQVVUSEVOVElDQVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0ludmFsaWQgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgdG8gY29ubmVjdCB0byBjYWNoZSBzZXJ2aWNlJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gaW52YWxpZCByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBCYWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkJBRF9SRVFVRVNUX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdUaGUgcmVxdWVzdCB3YXMgaW52YWxpZDsgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGFuIG9wZXJhdGlvbiB3aXRoIENhY2hlIFNlcnZpY2Ugd2FzIGNhbmNlbGxlZFxuICovXG5leHBvcnQgY2xhc3MgQ2FuY2VsbGVkRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBTkNFTExFRF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnVGhlIHJlcXVlc3Qgd2FzIGNhbmNlbGxlZDsgcGxlYXNlIGNvbnRhY3QgdXMgaWYgdGhpcyB3YXMgdW5leHBlY3RlZCBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuXG4vKipcbiAqIEVycm9yIHdoZW4gdGhlcmUncyBhIGZhaWx1cmUgdG8gY29ubmVjdCB0byBNb21lbnRvIHNlcnZlcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNPTk5FQ1RJT05fRVJST1I7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIHdoZW4gc3lzdGVtIGluIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3Mgc3VjY2Vzc1xuICovXG5leHBvcnQgY2xhc3MgRmFpbGVkUHJlY29uZGl0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkZBSUxFRF9QUkVDT05ESVRJT05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgXCJTeXN0ZW0gaXMgbm90IGluIGEgc3RhdGUgcmVxdWlyZWQgZm9yIHRoZSBvcGVyYXRpb24ncyBleGVjdXRpb25cIjtcbn1cblxuLyoqXG4gKiBDYWNoZSBTZXJ2aWNlIGVuY291bnRlcmVkIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdoaWxlIHRyeWluZyB0byBmdWxmaWxsIHRoZSByZXF1ZXN0XG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3Q7IHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBlcnJvcnMgdGhyb3duIHdoZW4gaW52YWxpZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gdGhlIE1vbWVudG8gQ2FjaGVcbiAqL1xuZXhwb3J0IGNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5JTlZBTElEX0FSR1VNRU5UX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgdG8gTW9tZW50byBjbGllbnQnO1xufVxuXG5lbnVtIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlciB7XG4gIFRPUElDX1NVQlNDUklQVElPTlNfTElNSVRfRVhDRUVERUQgPSAnVG9waWMgc3Vic2NyaXB0aW9ucyBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgT1BFUkFUSU9OU19SQVRFX0xJTUlUX0VYQ0VFREVEID0gJ1JlcXVlc3QgcmF0ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgVEhST1VHSFBVVF9SQVRFX0xJTUlUX0VYQ0VFREVEID0gJ0JhbmR3aWR0aCBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgUkVRVUVTVF9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ1JlcXVlc3Qgc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgSVRFTV9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ0l0ZW0gc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgRUxFTUVOVF9TSVpFX0xJTUlUX0VYQ0VFREVEID0gJ0VsZW1lbnQgc2l6ZSBsaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50JyxcbiAgVU5LTk9XTl9MSU1JVF9FWENFRURFRCA9ICdMaW1pdCBleGNlZWRlZCBmb3IgdGhpcyBhY2NvdW50Jyxcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGNhbGxzIGFyZSB0aHJvdHRsZWQgZHVlIHRvIHJlcXVlc3QgbGltaXQgcmF0ZVxuICovXG5leHBvcnQgY2xhc3MgTGltaXRFeGNlZWRlZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5MSU1JVF9FWENFRURFRF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gdGhpcy5kZXRlcm1pbmVNZXNzYWdlV3JhcHBlcigpO1xuICBwcml2YXRlIGVyckNhdXNlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvZGUgPSAwLFxuICAgIG1ldGFkYXRhOiBvYmplY3QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgc3RhY2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBlcnJDYXVzZT86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjb2RlLCBtZXRhZGF0YSwgc3RhY2spO1xuICAgIHRoaXMuZXJyQ2F1c2UgPSBlcnJDYXVzZTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lTWVzc2FnZVdyYXBwZXIoKSB7XG4gICAgLy8gSWYgcHJvdmlkZWQsIHdlIHVzZSB0aGUgYGVycmAgbWV0YWRhdGEgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBtb3N0XG4gICAgLy8gYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSB0byByZXR1cm4uXG4gICAgaWYgKHRoaXMuZXJyQ2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoICh0aGlzLmVyckNhdXNlKSB7XG4gICAgICAgIGNhc2UgJ3RvcGljX3N1YnNjcmlwdGlvbnNfbGltaXRfZXhjZWVkZWQnOlxuICAgICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuVE9QSUNfU1VCU0NSSVBUSU9OU19MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnb3BlcmF0aW9uc19yYXRlX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLk9QRVJBVElPTlNfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAndGhyb3VnaHB1dF9yYXRlX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlRIUk9VR0hQVVRfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAncmVxdWVzdF9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlJFUVVFU1RfU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnaXRlbV9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLklURU1fU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgY2FzZSAnZWxlbWVudF9zaXplX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLkVMRU1FTlRfU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlVOS05PV05fTElNSVRfRVhDRUVERUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYGVycmAgbWV0YWRhdGEgaXMgdW5hdmFpbGFibGUsIHRyeSB0byB1c2UgdGhlIGVycm9yIGRldGFpbHMgZmllbGRcbiAgICAvLyB0byByZXR1cm4gdGhlIGFuIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UuXG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydERldGFpbHMuZ3JwYy5kZXRhaWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLl90cmFuc3BvcnREZXRhaWxzLmdycGMuZGV0YWlscy50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ3N1YnNjcmliZXJzJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5UT1BJQ19TVUJTQ1JJUFRJT05TX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzLmluY2x1ZGVzKCdvcGVyYXRpb25zJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5PUEVSQVRJT05TX1JBVEVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ3Rocm91Z2hwdXQnKSkge1xuICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlRIUk9VR0hQVVRfUkFURV9MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygncmVxdWVzdCBsaW1pdCcpKSB7XG4gICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuUkVRVUVTVF9TSVpFX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzLmluY2x1ZGVzKCdpdGVtIHNpemUnKSkge1xuICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLklURU1fU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygnZWxlbWVudCBzaXplJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5FTEVNRU5UX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHJldHVybiBhIGdlbmVyaWMgXCJsaW1pdCBleGNlZWRlZFwiIG1lc3NhZ2VcbiAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlVOS05PV05fTElNSVRfRVhDRUVERUQ7XG4gIH1cbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBnZXQgYSBjYWNoZSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFRvIHJlc29sdmUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBjYWNoZSB5b3UgYXJlIHRyeWluZ1xuICogdG8gZ2V0IGV4aXN0cy4gSWYgaXQgZG9lc24ndCBjcmVhdGUgaXQgZmlyc3QgYW5kIHRoZW4gdHJ5IGFnYWluXG4gKi9cbmV4cG9ydCBjbGFzcyBDYWNoZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkNBQ0hFX05PVF9GT1VORF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnQSBjYWNoZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2VzIG5vdCBleGlzdC4gIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgbWFrZSBzdXJlIHlvdSBoYXZlIGNyZWF0ZWQgdGhlIGNhY2hlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVzZSBpdCc7XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZ2V0IGEgc3RvcmUgdGhhdCBkb2Vzbid0IGV4aXN0LiBUbyByZXNvbHZlLCBtYWtlIHN1cmUgdGhhdCB0aGUgc3RvcmUgeW91IGFyZSB0cnlpbmdcbiAqIHRvIGdldCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgY3JlYXRlIGl0IGZpcnN0IGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlTm90Rm91bmRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuU1RPUkVfTk9UX0ZPVU5EX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBIHN0b3JlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lIGRvZXMgbm90IGV4aXN0LiAgVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCBtYWtlIHN1cmUgeW91IGhhdmUgY3JlYXRlZCB0aGUgc3RvcmUgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXNlIGl0Jztcbn1cblxuLyoqXG4gKiBFcnJvciB0aGF0IG9jY3VycyB3aGVuIHRyeWluZyB0byBnZXQgYW4gaXRlbSBmcm9tIHN0b3JlIHRoYXQgZG9lc24ndCBleGlzdC4gVG8gcmVzb2x2ZSwgbWFrZSBzdXJlIHRoYXQgdGhlIGl0ZW0geW91IGFyZSB0cnlpbmdcbiAqIHRvIGdldCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgY3JlYXRlIGl0IGZpcnN0IGFuZCB0aGVuIHRyeSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlSXRlbU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX0lURU1fTk9UX0ZPVU5EX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPSAnQW4gaXRlbSB3aXRoIHRoZSBzcGVjaWZpZWQga2V5IGRvZXMgbm90IGV4aXN0Jztcbn1cblxuLyoqXG4gKiBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gQ2FjaGUgU2VydmljZVxuICovXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbkVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5QRVJNSVNTSU9OX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gb24gYSBjYWNoZSc7XG59XG5cbi8qKlxuICogU2VydmVyIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LlxuICovXG5leHBvcnQgY2xhc3MgU2VydmVyVW5hdmFpbGFibGVFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuU0VSVkVSX1VOQVZBSUxBQkxFO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdUaGUgc2VydmVyIHdhcyB1bmFibGUgdG8gaGFuZGxlIHRoZSByZXF1ZXN0OyBjb25zaWRlciByZXRyeWluZy4gIElmIHRoZSBlcnJvciBwZXJzaXN0cywgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIGFuIG9wZXJhdGlvbiBkaWQgbm90IGNvbXBsZXRlIGluIHRpbWVcbiAqL1xuZXhwb3J0IGNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuVElNRU9VVF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICBcIlRoZSBjbGllbnQncyBjb25maWd1cmVkIHRpbWVvdXQgd2FzIGV4Y2VlZGVkOyB5b3UgbWF5IG5lZWQgdG8gdXNlIGEgQ29uZmlndXJhdGlvbiB3aXRoIG1vcmUgbGVuaWVudCB0aW1lb3V0c1wiO1xufVxuXG4vKipcbiAqIEVycm9yIHJhaXNlZCB3aGVuIHRoZSB1bmRlcmx5aW5nIGNhdXNlIGluIHVua25vd25cbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuVU5LTk9XTl9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gJ1Vua25vd24gZXJyb3IgaGFzIG9jY3VycmVkJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgd2hlbiB0aGUgc2VydmljZSByZXR1cm5zIGFuIHVua25vd24gcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIFVua25vd25TZXJ2aWNlRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlVOS05PV05fU0VSVklDRV9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnU2VydmljZSByZXR1cm5lZCBhbiB1bmtub3duIHJlc3BvbnNlOyBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuIl19
|
346
|
+
/**
|
347
|
+
* Error raised when a client resource is exhausted, such as memory or number of subscriptions (stream connections).
|
348
|
+
*/
|
349
|
+
class ClientResourceExhaustedError extends SdkError {
|
350
|
+
constructor(message = undefined) {
|
351
|
+
super(message !== null && message !== void 0 ? message : 'A client resource is exhausted, such as memory or number of subscriptions (stream connections).');
|
352
|
+
this._errorCode = MomentoErrorCode.CLIENT_RESOURCE_EXHAUSTED;
|
353
|
+
}
|
354
|
+
}
|
355
|
+
exports.ClientResourceExhaustedError = ClientResourceExhaustedError;
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxnQkEyQ1g7QUEzQ0QsV0FBWSxnQkFBZ0I7SUFDMUIsNENBQTRDO0lBQzVDLHFFQUFpRCxDQUFBO0lBQ2pELHVDQUF1QztJQUN2QyxtRUFBK0MsQ0FBQTtJQUMvQywyQ0FBMkM7SUFDM0MsdUVBQW1ELENBQUE7SUFDbkQseURBQXlEO0lBQ3pELGlFQUE2QyxDQUFBO0lBQzdDLDJDQUEyQztJQUMzQyx1RUFBbUQsQ0FBQTtJQUNuRCwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsb0RBQW9EO0lBQ3BELHVEQUFtQyxDQUFBO0lBQ25DLDBDQUEwQztJQUMxQyxtRUFBK0MsQ0FBQTtJQUMvQyx3Q0FBd0M7SUFDeEMsNkVBQXlELENBQUE7SUFDekQsbUVBQW1FO0lBQ25FLG1FQUErQyxDQUFBO0lBQy9DLGdEQUFnRDtJQUNoRCx5REFBcUMsQ0FBQTtJQUNyQyxpRUFBaUU7SUFDakUsaUVBQTZDLENBQUE7SUFDN0Msc0NBQXNDO0lBQ3RDLHVEQUFtQyxDQUFBO0lBQ25DLHNDQUFzQztJQUN0Qyx5REFBcUMsQ0FBQTtJQUNyQyw4RUFBOEU7SUFDOUUsaUVBQTZDLENBQUE7SUFDN0Msc0JBQXNCO0lBQ3RCLDJEQUF1QyxDQUFBO0lBQ3ZDLDJDQUEyQztJQUMzQyxtREFBK0IsQ0FBQTtJQUMvQiwwQ0FBMEM7SUFDMUMsNkRBQXlDLENBQUE7SUFDekMsdURBQXVEO0lBQ3ZELDJFQUF1RCxDQUFBO0lBQ3ZELGtFQUFrRTtJQUNsRSwyRUFBdUQsQ0FBQTtJQUN2RCw2QkFBNkI7SUFDN0IsbURBQStCLENBQUE7QUFDakMsQ0FBQyxFQTNDVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQTJDM0I7QUFFRCxNQUFhLHVCQUF1QjtJQUlsQyxZQUFZLElBQVksRUFBRSxP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ekksQ0FBQztDQUFBO0FBSkQsd0RBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLFFBQVE7SUFBMUM7O1FBQ1csZUFBVSxHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztRQUM1QyxvQkFBZSxHQUN0Qiw4R0FBOEcsQ0FBQztJQUNuSCxDQUFDO0NBQUE7QUFKRCxvQ0FJQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsUUFBUTtJQUExQzs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1FBQzVDLG9CQUFlLEdBQUcsNEJBQTRCLENBQUM7SUFDMUQsQ0FBQztDQUFBO0FBSEQsb0NBR0M7QUFFRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsUUFBUTtJQUFqRDs7UUFDVyxlQUFVLEdBQUcsZ0JBQWdCLENBQUMscUJBQXFCLENBQUM7UUFDcEQsb0JBQWUsR0FDdEIsa0ZBQWtGLENBQUM7SUFDdkYsQ0FBQztDQUFBO0FBSkQsa0RBSUM7QUFFRDs7R0FFRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsUUFBUTtJQUd4RCxZQUFZLFVBQThCLFNBQVM7UUFDakQsS0FBSyxDQUNILE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUNMLGlHQUFpRyxDQUNwRyxDQUFDO1FBTkssZUFBVSxHQUFHLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDO0lBT2pFLENBQUM7Q0FDRjtBQVRELG9FQVNDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gTW9tZW50b0Vycm9yQ29kZSB7XG4gIC8vIEludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIE1vbWVudG8gY2xpZW50XG4gIElOVkFMSURfQVJHVU1FTlRfRVJST1IgPSAnSU5WQUxJRF9BUkdVTUVOVF9FUlJPUicsXG4gIC8vIFNlcnZpY2UgcmV0dXJuZWQgYW4gdW5rbm93biByZXNwb25zZVxuICBVTktOT1dOX1NFUlZJQ0VfRVJST1IgPSAnVU5LTk9XTl9TRVJWSUNFX0VSUk9SJyxcbiAgLy8gQ2FjaGUgd2l0aCBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0c1xuICBDQUNIRV9BTFJFQURZX0VYSVNUU19FUlJPUiA9ICdBTFJFQURZX0VYSVNUU19FUlJPUicsXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgQ0FDSEVfQUxSRUFEWV9FWElTVFNfRVJST1IgaW5zdGVhZCAqL1xuICBBTFJFQURZX0VYSVNUU19FUlJPUiA9ICdBTFJFQURZX0VYSVNUU19FUlJPUicsXG4gIC8vIFN0b3JlIHdpdGggc3BlY2lmaWVkIG5hbWUgYWxyZWFkeSBleGlzdHNcbiAgU1RPUkVfQUxSRUFEWV9FWElTVFNfRVJST1IgPSAnQUxSRUFEWV9FWElTVFNfRVJST1InLFxuICAvLyBDYWNoZSB3aXRoIHNwZWNpZmllZCBuYW1lIGRvZXNuJ3QgZXhpc3RcbiAgQ0FDSEVfTk9UX0ZPVU5EX0VSUk9SID0gJ05PVF9GT1VORF9FUlJPUicsXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgQ0FDSEVfTk9UX0ZPVU5EX0VSUk9SIGluc3RlYWQgKi9cbiAgTk9UX0ZPVU5EX0VSUk9SID0gJ05PVF9GT1VORF9FUlJPUicsXG4gIC8vIFN0b3JlIHdpdGggc3BlY2lmaWVkIG5hbWUgZG9lc24ndCBleGlzdFxuICBTVE9SRV9OT1RfRk9VTkRfRVJST1IgPSAnU1RPUkVfTk9UX0ZPVU5EX0VSUk9SJyxcbiAgLy8gSXRlbSB3aXRoIHNwZWNpZmllZCBrZXkgZG9lc24ndCBleGlzdFxuICBTVE9SRV9JVEVNX05PVF9GT1VORF9FUlJPUiA9ICdTVE9SRV9JVEVNX05PVF9GT1VORF9FUlJPUicsXG4gIC8vIEFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGZ1bGZpbGwgdGhlIHJlcXVlc3RcbiAgSU5URVJOQUxfU0VSVkVSX0VSUk9SID0gJ0lOVEVSTkFMX1NFUlZFUl9FUlJPUicsXG4gIC8vIEluc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBwZXJmb3JtIG9wZXJhdGlvblxuICBQRVJNSVNTSU9OX0VSUk9SID0gJ1BFUk1JU1NJT05fRVJST1InLFxuICAvLyBJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIHRvIGNvbm5lY3QgdG8gY2FjaGUgc2VydmljZVxuICBBVVRIRU5USUNBVElPTl9FUlJPUiA9ICdBVVRIRU5USUNBVElPTl9FUlJPUicsXG4gIC8vIFJlcXVlc3Qgd2FzIGNhbmNlbGxlZCBieSB0aGUgc2VydmVyXG4gIENBTkNFTExFRF9FUlJPUiA9ICdDQU5DRUxMRURfRVJST1InLFxuICAvLyBFcnJvciBjb25uZWN0aW5nIHRvIE1vbWVudG8gc2VydmVyc1xuICBDT05ORUNUSU9OX0VSUk9SID0gJ0NPTk5FQ1RJT05fRVJST1InLFxuICAvLyBSZXF1ZXN0IHJhdGUsIGJhbmR3aWR0aCwgb3Igb2JqZWN0IHNpemUgZXhjZWVkZWQgdGhlIGxpbWl0cyBmb3IgdGhlIGFjY291bnRcbiAgTElNSVRfRVhDRUVERURfRVJST1IgPSAnTElNSVRfRVhDRUVERURfRVJST1InLFxuICAvLyBSZXF1ZXN0IHdhcyBpbnZhbGlkXG4gIEJBRF9SRVFVRVNUX0VSUk9SID0gJ0JBRF9SRVFVRVNUX0VSUk9SJyxcbiAgLy8gQ2xpZW50J3MgY29uZmlndXJlZCB0aW1lb3V0IHdhcyBleGNlZWRlZFxuICBUSU1FT1VUX0VSUk9SID0gJ1RJTUVPVVRfRVJST1InLFxuICAvLyBTZXJ2ZXIgd2FzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHJlcXVlc3RcbiAgU0VSVkVSX1VOQVZBSUxBQkxFID0gJ1NFUlZFUl9VTkFWQUlMQUJMRScsXG4gIC8vIEEgY2xpZW50IHJlc291cmNlIChtb3N0IGxpa2VseSBtZW1vcnkpIHdhcyBleGhhdXN0ZWRcbiAgQ0xJRU5UX1JFU09VUkNFX0VYSEFVU1RFRCA9ICdDTElFTlRfUkVTT1VSQ0VfRVhIQVVTVEVEJyxcbiAgLy8gU3lzdGVtIGlzIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgZXhlY3V0aW9uXG4gIEZBSUxFRF9QUkVDT05ESVRJT05fRVJST1IgPSAnRkFJTEVEX1BSRUNPTkRJVElPTl9FUlJPUicsXG4gIC8vIFVua25vd24gZXJyb3IgaGFzIG9jY3VycmVkXG4gIFVOS05PV05fRVJST1IgPSAnVU5LTk9XTl9FUlJPUicsXG59XG5cbmV4cG9ydCBjbGFzcyBNb21lbnRvR3JwY0Vycm9yRGV0YWlscyB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZWFkb25seSBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtZXRhZGF0YT86IG9iamVjdDtcbiAgY29uc3RydWN0b3IoY29kZTogbnVtYmVyLCBkZXRhaWxzOiBzdHJpbmcsIG1ldGFkYXRhPzogb2JqZWN0KSB7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9tZW50b0Vycm9yVHJhbnNwb3J0RGV0YWlscyB7XG4gIHB1YmxpYyByZWFkb25seSBncnBjOiBNb21lbnRvR3JwY0Vycm9yRGV0YWlscztcbiAgY29uc3RydWN0b3IoZ3JwYzogTW9tZW50b0dycGNFcnJvckRldGFpbHMpIHtcbiAgICB0aGlzLmdycGMgPSBncnBjO1xuICB9XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBlcnJvcnMgdGhyb3duIGJ5IHRoZSBzZGtcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNka0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Vycm9yQ29kZTogTW9tZW50b0Vycm9yQ29kZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9tZXNzYWdlV3JhcHBlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RyYW5zcG9ydERldGFpbHM6IE1vbWVudG9FcnJvclRyYW5zcG9ydERldGFpbHM7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb2RlID0gMCxcbiAgICBtZXRhZGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHN0YWNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgY29uc3QgZ3JwY0RldGFpbHMgPSBuZXcgTW9tZW50b0dycGNFcnJvckRldGFpbHMoY29kZSwgbWVzc2FnZSwgbWV0YWRhdGEpO1xuICAgIHRoaXMuX3RyYW5zcG9ydERldGFpbHMgPSBuZXcgTW9tZW50b0Vycm9yVHJhbnNwb3J0RGV0YWlscyhncnBjRGV0YWlscyk7XG4gICAgdGhpcy5zdGFjayA9IHN0YWNrID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwcGVkRXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuX21lc3NhZ2VXcmFwcGVyfTogJHt0aGlzLm1lc3NhZ2V9YDtcbiAgfVxuXG4gIHB1YmxpYyBlcnJvckNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yQ29kZTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFuc3BvcnREZXRhaWxzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnREZXRhaWxzO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgY2FjaGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNhY2hlLiBUbyByZXNvbHZlIHRoaXMgZXJyb3IsXG4gKiBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBjYWNoZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgY2FjaGUgeW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIHRvXG4gKiBvbmUgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIENhY2hlQWxyZWFkeUV4aXN0c0Vycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5DQUNIRV9BTFJFQURZX0VYSVNUU19FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnQSBjYWNoZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4gIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgZWl0aGVyIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2FjaGUgYW5kIG1ha2UgYSBuZXcgb25lLCBvciB1c2UgYSBkaWZmZXJlbnQgbmFtZSc7XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gY3JlYXRlIGEgc3RvcmUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGFuIGV4aXN0aW5nIGNhY2hlLiBUbyByZXNvbHZlIHRoaXMgZXJyb3IsXG4gKiBlaXRoZXIgZGVsZXRlIHRoZSBleGlzdGluZyBzdG9yZSBhbmQgbWFrZSBhIG5ldyBvbmUsIG9yIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgc3RvcmUgeW91IGFyZSB0cnlpbmcgdG8gY3JlYXRlIHRvXG4gKiBvbmUgdGhhdCBkb2Vzbid0IGFscmVhZHkgZXhpc3RcbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlQWxyZWFkeUV4aXN0c0Vycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5TVE9SRV9BTFJFQURZX0VYSVNUU19FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnQSBzdG9yZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4gIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgZWl0aGVyIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgc3RvcmUgYW5kIG1ha2UgYSBuZXcgb25lLCBvciB1c2UgYSBkaWZmZXJlbnQgbmFtZSc7XG59XG5cbi8qKlxuICogRXJyb3Igd2hlbiBhdXRoZW50aWNhdGlvbiB3aXRoIENhY2hlIFNlcnZpY2UgZmFpbHNcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLkFVVEhFTlRJQ0FUSU9OX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdJbnZhbGlkIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIHRvIGNvbm5lY3QgdG8gY2FjaGUgc2VydmljZSc7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGludmFsaWQgcmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgQmFkUmVxdWVzdEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5CQURfUkVRVUVTVF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnVGhlIHJlcXVlc3Qgd2FzIGludmFsaWQ7IHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG5cbi8qKlxuICogRXJyb3Igd2hlbiBhbiBvcGVyYXRpb24gd2l0aCBDYWNoZSBTZXJ2aWNlIHdhcyBjYW5jZWxsZWRcbiAqL1xuZXhwb3J0IGNsYXNzIENhbmNlbGxlZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5DQU5DRUxMRURfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ1RoZSByZXF1ZXN0IHdhcyBjYW5jZWxsZWQ7IHBsZWFzZSBjb250YWN0IHVzIGlmIHRoaXMgd2FzIHVuZXhwZWN0ZWQgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciB3aGVuIHRoZXJlJ3MgYSBmYWlsdXJlIHRvIGNvbm5lY3QgdG8gTW9tZW50byBzZXJ2ZXJzLlxuICovXG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5DT05ORUNUSU9OX0VSUk9SO1xufVxuXG4vKipcbiAqIEVycm9yIHJhaXNlZCB3aGVuIHN5c3RlbSBpbiBub3QgaW4gYSBzdGF0ZSByZXF1aXJlZCBmb3IgdGhlIG9wZXJhdGlvbidzIHN1Y2Nlc3NcbiAqL1xuZXhwb3J0IGNsYXNzIEZhaWxlZFByZWNvbmRpdGlvbkVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5GQUlMRURfUFJFQ09ORElUSU9OX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgIFwiU3lzdGVtIGlzIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgZXhlY3V0aW9uXCI7XG59XG5cbi8qKlxuICogQ2FjaGUgU2VydmljZSBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aGlsZSB0cnlpbmcgdG8gZnVsZmlsbCB0aGUgcmVxdWVzdFxuICovXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxTZXJ2ZXJFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuSU5URVJOQUxfU0VSVkVSX0VSUk9SO1xuICBvdmVycmlkZSBfbWVzc2FnZVdyYXBwZXIgPVxuICAgICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byBmdWxmaWxsIHRoZSByZXF1ZXN0OyBwbGVhc2UgY29udGFjdCB1cyBhdCBzdXBwb3J0QG1vbWVudG9ocS5jb20nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgZXJyb3JzIHRocm93biB3aGVuIGludmFsaWQgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIHRoZSBNb21lbnRvIENhY2hlXG4gKi9cbmV4cG9ydCBjbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuSU5WQUxJRF9BUkdVTUVOVF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gJ0ludmFsaWQgYXJndW1lbnQgcGFzc2VkIHRvIE1vbWVudG8gY2xpZW50Jztcbn1cblxuZW51bSBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIge1xuICBUT1BJQ19TVUJTQ1JJUFRJT05TX0xJTUlUX0VYQ0VFREVEID0gJ1RvcGljIHN1YnNjcmlwdGlvbnMgbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIE9QRVJBVElPTlNfUkFURV9MSU1JVF9FWENFRURFRCA9ICdSZXF1ZXN0IHJhdGUgbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIFRIUk9VR0hQVVRfUkFURV9MSU1JVF9FWENFRURFRCA9ICdCYW5kd2lkdGggbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIFJFUVVFU1RfU0laRV9MSU1JVF9FWENFRURFRCA9ICdSZXF1ZXN0IHNpemUgbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIElURU1fU0laRV9MSU1JVF9FWENFRURFRCA9ICdJdGVtIHNpemUgbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIEVMRU1FTlRfU0laRV9MSU1JVF9FWENFRURFRCA9ICdFbGVtZW50IHNpemUgbGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG4gIFVOS05PV05fTElNSVRfRVhDRUVERUQgPSAnTGltaXQgZXhjZWVkZWQgZm9yIHRoaXMgYWNjb3VudCcsXG59XG5cbi8qKlxuICogRXJyb3Igd2hlbiBjYWxscyBhcmUgdGhyb3R0bGVkIGR1ZSB0byByZXF1ZXN0IGxpbWl0IHJhdGVcbiAqL1xuZXhwb3J0IGNsYXNzIExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuTElNSVRfRVhDRUVERURfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9IHRoaXMuZGV0ZXJtaW5lTWVzc2FnZVdyYXBwZXIoKTtcbiAgcHJpdmF0ZSBlcnJDYXVzZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBjb2RlID0gMCxcbiAgICBtZXRhZGF0YTogb2JqZWN0IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHN0YWNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgZXJyQ2F1c2U/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY29kZSwgbWV0YWRhdGEsIHN0YWNrKTtcbiAgICB0aGlzLmVyckNhdXNlID0gZXJyQ2F1c2U7XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZU1lc3NhZ2VXcmFwcGVyKCkge1xuICAgIC8vIElmIHByb3ZpZGVkLCB3ZSB1c2UgdGhlIGBlcnJgIG1ldGFkYXRhIHZhbHVlIHRvIGRldGVybWluZSB0aGUgbW9zdFxuICAgIC8vIGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgdG8gcmV0dXJuLlxuICAgIGlmICh0aGlzLmVyckNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHN3aXRjaCAodGhpcy5lcnJDYXVzZSkge1xuICAgICAgICBjYXNlICd0b3BpY19zdWJzY3JpcHRpb25zX2xpbWl0X2V4Y2VlZGVkJzpcbiAgICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlRPUElDX1NVQlNDUklQVElPTlNfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGNhc2UgJ29wZXJhdGlvbnNfcmF0ZV9saW1pdF9leGNlZWRlZCc6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5PUEVSQVRJT05TX1JBVEVfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGNhc2UgJ3Rocm91Z2hwdXRfcmF0ZV9saW1pdF9leGNlZWRlZCc6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5USFJPVUdIUFVUX1JBVEVfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGNhc2UgJ3JlcXVlc3Rfc2l6ZV9saW1pdF9leGNlZWRlZCc6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5SRVFVRVNUX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGNhc2UgJ2l0ZW1fc2l6ZV9saW1pdF9leGNlZWRlZCc6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5JVEVNX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGNhc2UgJ2VsZW1lbnRfc2l6ZV9saW1pdF9leGNlZWRlZCc6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5FTEVNRU5UX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5VTktOT1dOX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGBlcnJgIG1ldGFkYXRhIGlzIHVuYXZhaWxhYmxlLCB0cnkgdG8gdXNlIHRoZSBlcnJvciBkZXRhaWxzIGZpZWxkXG4gICAgLy8gdG8gcmV0dXJuIHRoZSBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLlxuICAgIGlmICh0aGlzLl90cmFuc3BvcnREZXRhaWxzLmdycGMuZGV0YWlscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5fdHJhbnNwb3J0RGV0YWlscy5ncnBjLmRldGFpbHMudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChkZXRhaWxzLmluY2x1ZGVzKCdzdWJzY3JpYmVycycpKSB7XG4gICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuVE9QSUNfU1VCU0NSSVBUSU9OU19MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygnb3BlcmF0aW9ucycpKSB7XG4gICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuT1BFUkFUSU9OU19SQVRFX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfSBlbHNlIGlmIChkZXRhaWxzLmluY2x1ZGVzKCd0aHJvdWdocHV0JykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5USFJPVUdIUFVUX1JBVEVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ3JlcXVlc3QgbGltaXQnKSkge1xuICAgICAgICByZXR1cm4gTGltaXRFeGNlZWRlZE1lc3NhZ2VXcmFwcGVyLlJFUVVFU1RfU0laRV9MSU1JVF9FWENFRURFRDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlscy5pbmNsdWRlcygnaXRlbSBzaXplJykpIHtcbiAgICAgICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5JVEVNX1NJWkVfTElNSVRfRVhDRUVERUQ7XG4gICAgICB9IGVsc2UgaWYgKGRldGFpbHMuaW5jbHVkZXMoJ2VsZW1lbnQgc2l6ZScpKSB7XG4gICAgICAgIHJldHVybiBMaW1pdEV4Y2VlZGVkTWVzc2FnZVdyYXBwZXIuRUxFTUVOVF9TSVpFX0xJTUlUX0VYQ0VFREVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGFsbCBlbHNlIGZhaWxzLCByZXR1cm4gYSBnZW5lcmljIFwibGltaXQgZXhjZWVkZWRcIiBtZXNzYWdlXG4gICAgcmV0dXJuIExpbWl0RXhjZWVkZWRNZXNzYWdlV3JhcHBlci5VTktOT1dOX0xJTUlUX0VYQ0VFREVEO1xuICB9XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZ2V0IGEgY2FjaGUgdGhhdCBkb2Vzbid0IGV4aXN0LiBUbyByZXNvbHZlLCBtYWtlIHN1cmUgdGhhdCB0aGUgY2FjaGUgeW91IGFyZSB0cnlpbmdcbiAqIHRvIGdldCBleGlzdHMuIElmIGl0IGRvZXNuJ3QgY3JlYXRlIGl0IGZpcnN0IGFuZCB0aGVuIHRyeSBhZ2FpblxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVOb3RGb3VuZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5DQUNIRV9OT1RfRk9VTkRfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ0EgY2FjaGUgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZG9lcyBub3QgZXhpc3QuICBUbyByZXNvbHZlIHRoaXMgZXJyb3IsIG1ha2Ugc3VyZSB5b3UgaGF2ZSBjcmVhdGVkIHRoZSBjYWNoZSBiZWZvcmUgYXR0ZW1wdGluZyB0byB1c2UgaXQnO1xufVxuXG4vKipcbiAqIEVycm9yIHRoYXQgb2NjdXJzIHdoZW4gdHJ5aW5nIHRvIGdldCBhIHN0b3JlIHRoYXQgZG9lc24ndCBleGlzdC4gVG8gcmVzb2x2ZSwgbWFrZSBzdXJlIHRoYXQgdGhlIHN0b3JlIHlvdSBhcmUgdHJ5aW5nXG4gKiB0byBnZXQgZXhpc3RzLiBJZiBpdCBkb2Vzbid0IGNyZWF0ZSBpdCBmaXJzdCBhbmQgdGhlbiB0cnkgYWdhaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNUT1JFX05PVF9GT1VORF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnQSBzdG9yZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBkb2VzIG5vdCBleGlzdC4gIFRvIHJlc29sdmUgdGhpcyBlcnJvciwgbWFrZSBzdXJlIHlvdSBoYXZlIGNyZWF0ZWQgdGhlIHN0b3JlIGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVzZSBpdCc7XG59XG5cbi8qKlxuICogRXJyb3IgdGhhdCBvY2N1cnMgd2hlbiB0cnlpbmcgdG8gZ2V0IGFuIGl0ZW0gZnJvbSBzdG9yZSB0aGF0IGRvZXNuJ3QgZXhpc3QuIFRvIHJlc29sdmUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBpdGVtIHlvdSBhcmUgdHJ5aW5nXG4gKiB0byBnZXQgZXhpc3RzLiBJZiBpdCBkb2Vzbid0IGNyZWF0ZSBpdCBmaXJzdCBhbmQgdGhlbiB0cnkgYWdhaW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yZUl0ZW1Ob3RGb3VuZEVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5TVE9SRV9JVEVNX05PVF9GT1VORF9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID0gJ0FuIGl0ZW0gd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBkb2VzIG5vdCBleGlzdCc7XG59XG5cbi8qKlxuICogSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIENhY2hlIFNlcnZpY2VcbiAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25FcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuUEVSTUlTU0lPTl9FUlJPUjtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uIG9uIGEgY2FjaGUnO1xufVxuXG4vKipcbiAqIFNlcnZlciB3YXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZlclVuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlNFUlZFUl9VTkFWQUlMQUJMRTtcbiAgb3ZlcnJpZGUgX21lc3NhZ2VXcmFwcGVyID1cbiAgICAnVGhlIHNlcnZlciB3YXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcmVxdWVzdDsgY29uc2lkZXIgcmV0cnlpbmcuICBJZiB0aGUgZXJyb3IgcGVyc2lzdHMsIHBsZWFzZSBjb250YWN0IHVzIGF0IHN1cHBvcnRAbW9tZW50b2hxLmNvbSc7XG59XG5cbi8qKlxuICogRXJyb3Igd2hlbiBhbiBvcGVyYXRpb24gZGlkIG5vdCBjb21wbGV0ZSBpbiB0aW1lXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlRJTUVPVVRfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgXCJUaGUgY2xpZW50J3MgY29uZmlndXJlZCB0aW1lb3V0IHdhcyBleGNlZWRlZDsgeW91IG1heSBuZWVkIHRvIHVzZSBhIENvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIGxlbmllbnQgdGltZW91dHNcIjtcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgd2hlbiB0aGUgdW5kZXJseWluZyBjYXVzZSBpbiB1bmtub3duXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmtub3duRXJyb3IgZXh0ZW5kcyBTZGtFcnJvciB7XG4gIG92ZXJyaWRlIF9lcnJvckNvZGUgPSBNb21lbnRvRXJyb3JDb2RlLlVOS05PV05fRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9ICdVbmtub3duIGVycm9yIGhhcyBvY2N1cnJlZCc7XG59XG5cbi8qKlxuICogRXJyb3IgcmFpc2VkIHdoZW4gdGhlIHNlcnZpY2UgcmV0dXJucyBhbiB1bmtub3duIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBjbGFzcyBVbmtub3duU2VydmljZUVycm9yIGV4dGVuZHMgU2RrRXJyb3Ige1xuICBvdmVycmlkZSBfZXJyb3JDb2RlID0gTW9tZW50b0Vycm9yQ29kZS5VTktOT1dOX1NFUlZJQ0VfRVJST1I7XG4gIG92ZXJyaWRlIF9tZXNzYWdlV3JhcHBlciA9XG4gICAgJ1NlcnZpY2UgcmV0dXJuZWQgYW4gdW5rbm93biByZXNwb25zZTsgcGxlYXNlIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBtb21lbnRvaHEuY29tJztcbn1cblxuLyoqXG4gKiBFcnJvciByYWlzZWQgd2hlbiBhIGNsaWVudCByZXNvdXJjZSBpcyBleGhhdXN0ZWQsIHN1Y2ggYXMgbWVtb3J5IG9yIG51bWJlciBvZiBzdWJzY3JpcHRpb25zIChzdHJlYW0gY29ubmVjdGlvbnMpLlxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50UmVzb3VyY2VFeGhhdXN0ZWRFcnJvciBleHRlbmRzIFNka0Vycm9yIHtcbiAgb3ZlcnJpZGUgX2Vycm9yQ29kZSA9IE1vbWVudG9FcnJvckNvZGUuQ0xJRU5UX1JFU09VUkNFX0VYSEFVU1RFRDtcblxuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICBzdXBlcihcbiAgICAgIG1lc3NhZ2UgPz9cbiAgICAgICAgJ0EgY2xpZW50IHJlc291cmNlIGlzIGV4aGF1c3RlZCwgc3VjaCBhcyBtZW1vcnkgb3IgbnVtYmVyIG9mIHN1YnNjcmlwdGlvbnMgKHN0cmVhbSBjb25uZWN0aW9ucykuJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/index.d.ts
CHANGED
@@ -75,8 +75,6 @@ export * from './messages/responses/leaderboard';
|
|
75
75
|
export * as webhook from './messages/responses/webhook';
|
76
76
|
export * from './messages/responses/webhook';
|
77
77
|
export { Webhook, WebhookId } from './messages/webhook';
|
78
|
-
export * from './messages/responses/storage';
|
79
|
-
export { StoreInfo } from './messages/store-info';
|
80
78
|
import { CacheInfo } from './messages/cache-info';
|
81
79
|
import { SubscribeCallOptions, CollectionTtl, SortedSetOrder, LeaderboardOrder, ExpiresIn, ExpiresAt, ItemType, WebhookDestination, PostUrlWebhookDestination, WebhookDestinationType, SetBatchItem } from './utils';
|
82
80
|
export * as utils from './utils';
|
@@ -86,7 +84,6 @@ export { MomentoLogger, MomentoLoggerFactory, } from './config/logging/momento-l
|
|
86
84
|
export * from './messages/responses/enums';
|
87
85
|
export { NoopMomentoLogger, NoopMomentoLoggerFactory, } from './config/logging/noop-momento-logger';
|
88
86
|
export { ICacheClient, DictionaryIncrementOptions, DictionarySetFieldOptions, DictionarySetFieldsOptions, SetOptions, SetIfNotExistsOptions, SetIfAbsentOptions, SetIfPresentOptions, SetIfEqualOptions, SetIfNotEqualOptions, SetIfPresentAndNotEqualOptions, SetIfAbsentOrEqualOptions, SortedSetPutElementsOptions, IncrementOptions, } from './clients/ICacheClient';
|
89
|
-
export { IStorageClient } from './clients/IStorageClient';
|
90
87
|
export { IMomentoCache } from './clients/IMomentoCache';
|
91
88
|
export { ILeaderboardClient } from './clients/ILeaderboardClient';
|
92
89
|
export { ILeaderboard } from './clients/ILeaderboard';
|
@@ -104,6 +101,8 @@ export * as TokenScopes from './auth/tokens/permission-scopes';
|
|
104
101
|
export * as DisposableTokenScopes from './auth/tokens/disposable-token-scopes';
|
105
102
|
export { ReadConcern } from './config/read-concern';
|
106
103
|
export { CompressionLevel } from './compression/compression-level';
|
104
|
+
export { SubscriptionRetryStrategy, DetermineWhenToResubscribeProps, DEFAULT_SUBSCRIPTION_RETRY_DELAY_MILLIS, } from './config/retry/subscription-retry-strategy';
|
105
|
+
export { SubscriptionRetryEligibilityStrategy, EligibleForResubscribeProps, } from './config/retry/subscription-retry-eligibility-strategy';
|
107
106
|
export { ExpiresIn, ExpiresAt, CollectionTtl, ItemType, WebhookDestination, PostUrlWebhookDestination, WebhookDestinationType, SortedSetOrder, LeaderboardOrder, CredentialProvider, StringMomentoTokenProvider, EnvMomentoTokenProvider, MomentoLocalProvider, getDefaultCredentialProvider, SetBatchItem, CacheGet, CacheListConcatenateBack, CacheListConcatenateFront, CacheListFetch, CacheListLength, CacheListPopBack, CacheListPopFront, CacheListPushBack, CacheListPushFront, CacheListRemoveValue, CacheListRetain, CacheSet, CacheSetIfNotExists, CacheSetIfPresent, CacheSetIfAbsent, CacheSetIfEqual, CacheSetIfNotEqual, CacheSetIfPresentAndNotEqual, CacheSetIfAbsentOrEqual, CacheDelete, CacheFlush, CreateCache, DeleteCache, ListCaches, CacheIncrement, CacheSetFetch, CacheDictionaryFetch, CacheDictionarySetField, CacheDictionarySetFields, CacheDictionaryGetField, CacheDictionaryGetFields, CacheDictionaryRemoveField, CacheDictionaryRemoveFields, CacheDictionaryIncrement, CacheDictionaryLength, CacheSetAddElements, CacheSetAddElement, CacheSetContainsElement, CacheSetContainsElements, CacheSetRemoveElements, CacheSetRemoveElement, CacheSetSample, CacheSetPop, CacheSetLength, CacheSortedSetPutElement, CacheSortedSetPutElements, CacheSortedSetFetch, CacheSortedSetGetRank, CacheSortedSetGetScore, CacheSortedSetGetScores, CacheSortedSetIncrementScore, CacheSortedSetRemoveElement, CacheSortedSetRemoveElements, CacheSortedSetLength, CacheSortedSetLengthByScore, CacheItemGetType, CacheItemGetTtl, CacheKeyExists, CacheKeysExist, CacheUpdateTtl, CacheIncreaseTtl, CacheDecreaseTtl, CacheInfo, CacheSetBatch, CacheGetBatch, TopicPublish, TopicSubscribe, TopicItem, TopicDiscontinuity, TopicHeartbeat, SubscribeCallOptions, GenerateApiKey,
|
108
107
|
/**
|
109
108
|
* @deprecated - please use GenerateApiKey
|