@data-client/core 0.14.24 → 0.15.0-beta-20251006024044-92bd01c4976f2921993b8c9f1e4dbb87af87ba7b
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/README.md +2 -2
- package/dist/index.js +100 -97
- package/dist/index.umd.min.js +1 -1
- package/legacy/controller/Controller.js +31 -46
- package/legacy/index.js +1 -1
- package/legacy/manager/NetworkManager.js +44 -33
- package/legacy/state/GCPolicy.js +20 -12
- package/legacy/state/reducer/createReducer.js +4 -4
- package/legacy/state/reducer/setReducer.js +3 -3
- package/legacy/state/reducer/setResponseReducer.js +4 -4
- package/legacy/types.js +1 -1
- package/lib/controller/Controller.d.ts +3 -3
- package/lib/controller/Controller.d.ts.map +1 -1
- package/lib/controller/Controller.js +31 -46
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/manager/NetworkManager.d.ts +7 -12
- package/lib/manager/NetworkManager.d.ts.map +1 -1
- package/lib/manager/NetworkManager.js +44 -34
- package/lib/state/GCPolicy.d.ts.map +1 -1
- package/lib/state/GCPolicy.js +20 -12
- package/lib/state/reducer/createReducer.js +4 -4
- package/lib/state/reducer/expireReducer.d.ts +1 -1
- package/lib/state/reducer/invalidateReducer.d.ts +1 -1
- package/lib/state/reducer/setReducer.d.ts +1 -1
- package/lib/state/reducer/setReducer.js +3 -3
- package/lib/state/reducer/setResponseReducer.d.ts +1 -1
- package/lib/state/reducer/setResponseReducer.js +4 -4
- package/lib/types.d.ts +1 -1
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -1
- package/package.json +3 -3
- package/src/controller/Controller.ts +38 -80
- package/src/controller/__tests__/Controller.ts +2 -2
- package/src/controller/__tests__/__snapshots__/get.ts.snap +34 -8
- package/src/controller/__tests__/__snapshots__/getResponse.ts.snap +1 -1
- package/src/controller/__tests__/get.ts +163 -22
- package/src/controller/__tests__/getResponse.ts +1 -1
- package/src/index.ts +4 -0
- package/src/manager/NetworkManager.ts +46 -32
- package/src/manager/__tests__/__snapshots__/pollingSubscription.ts.snap +1 -1
- package/src/manager/__tests__/pollingSubscription.ts +9 -5
- package/src/state/GCPolicy.ts +12 -10
- package/src/state/__tests__/GCPolicy.test.ts +6 -6
- package/src/state/__tests__/__snapshots__/reducer.ts.snap +3 -3
- package/src/state/__tests__/reducer.ts +17 -9
- package/src/state/reducer/createReducer.ts +2 -2
- package/src/state/reducer/setReducer.ts +2 -2
- package/src/state/reducer/setResponseReducer.ts +3 -3
- package/src/types.ts +1 -1
- package/ts3.4/controller/Controller.d.ts +3 -3
- package/ts3.4/index.d.ts +2 -1
- package/ts3.4/manager/NetworkManager.d.ts +7 -12
- package/ts3.4/state/reducer/expireReducer.d.ts +1 -1
- package/ts3.4/state/reducer/invalidateReducer.d.ts +1 -1
- package/ts3.4/state/reducer/setReducer.d.ts +1 -1
- package/ts3.4/state/reducer/setResponseReducer.d.ts +1 -1
- package/ts3.4/types.d.ts +1 -1
|
@@ -72,7 +72,7 @@ export default class Controller {
|
|
|
72
72
|
data,
|
|
73
73
|
expiresAt,
|
|
74
74
|
expiryStatus
|
|
75
|
-
} = this.
|
|
75
|
+
} = this.getResponseMeta(endpoint, ...args, this.getState());
|
|
76
76
|
if (expiryStatus !== ExpiryStatus.Invalid && Date.now() <= expiresAt) return data;
|
|
77
77
|
return this.fetch(endpoint, ...args);
|
|
78
78
|
};
|
|
@@ -243,7 +243,7 @@ export default class Controller {
|
|
|
243
243
|
const shouldQuery = cacheEndpoints === undefined && schema !== undefined;
|
|
244
244
|
const input = shouldQuery ?
|
|
245
245
|
// nothing in endpoints cache, so try querying if we have a schema to do so
|
|
246
|
-
this.memo.buildQueryKey(schema, args, state
|
|
246
|
+
this.memo.buildQueryKey(schema, args, state, key) : cacheEndpoints;
|
|
247
247
|
if (!isActive) {
|
|
248
248
|
// when not active simply return the query input without denormalizing
|
|
249
249
|
return {
|
|
@@ -260,24 +260,32 @@ export default class Controller {
|
|
|
260
260
|
} else if (!schema || !schemaHasEntity(schema)) {
|
|
261
261
|
return {
|
|
262
262
|
data: cacheEndpoints,
|
|
263
|
-
expiryStatus:
|
|
263
|
+
expiryStatus: this.getExpiryStatus(!cacheEndpoints, !!endpoint.invalidIfStale, meta),
|
|
264
264
|
expiresAt: expiresAt || 0,
|
|
265
265
|
countRef: this.gcPolicy.createCountRef({
|
|
266
266
|
key
|
|
267
267
|
})
|
|
268
268
|
};
|
|
269
269
|
}
|
|
270
|
-
|
|
271
|
-
// second argument is false if any entities are missing
|
|
272
|
-
|
|
273
270
|
const {
|
|
274
271
|
data,
|
|
275
272
|
paths
|
|
276
273
|
} = this.memo.denormalize(schema, input, state.entities, args);
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
274
|
+
if (!expiresAt) {
|
|
275
|
+
// note: isInvalid can only be true if shouldQuery is true
|
|
276
|
+
if (isInvalid) expiresAt = 1;
|
|
277
|
+
// fallback to entity expiry time
|
|
278
|
+
else expiresAt = entityExpiresAt(paths, state.entitiesMeta);
|
|
279
|
+
}
|
|
280
|
+
return {
|
|
281
|
+
data,
|
|
282
|
+
expiryStatus: this.getExpiryStatus(typeof data === 'symbol', !!endpoint.invalidIfStale || isInvalid, meta),
|
|
283
|
+
expiresAt,
|
|
284
|
+
countRef: this.gcPolicy.createCountRef({
|
|
285
|
+
key,
|
|
286
|
+
paths
|
|
287
|
+
})
|
|
288
|
+
};
|
|
281
289
|
}
|
|
282
290
|
|
|
283
291
|
/**
|
|
@@ -288,7 +296,10 @@ export default class Controller {
|
|
|
288
296
|
const state = rest[rest.length - 1];
|
|
289
297
|
// this is typescript generics breaking
|
|
290
298
|
const args = rest.slice(0, rest.length - 1).map(ensurePojo);
|
|
291
|
-
|
|
299
|
+
const {
|
|
300
|
+
data
|
|
301
|
+
} = this.memo.query(schema, args, state);
|
|
302
|
+
return typeof data === 'symbol' ? undefined : data;
|
|
292
303
|
}
|
|
293
304
|
|
|
294
305
|
/**
|
|
@@ -299,20 +310,10 @@ export default class Controller {
|
|
|
299
310
|
const state = rest[rest.length - 1];
|
|
300
311
|
// this is typescript generics breaking
|
|
301
312
|
const args = rest.slice(0, rest.length - 1).map(ensurePojo);
|
|
302
|
-
|
|
303
|
-
// TODO: breaking: Switch back to this.memo.query(schema, args, state.entities as any, state.indexes) to do
|
|
304
|
-
// this logic
|
|
305
|
-
const input = this.memo.buildQueryKey(schema, args, state.entities, state.indexes, JSON.stringify(args));
|
|
306
|
-
if (!input) {
|
|
307
|
-
return {
|
|
308
|
-
data: undefined,
|
|
309
|
-
countRef: () => () => undefined
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
313
|
const {
|
|
313
314
|
data,
|
|
314
315
|
paths
|
|
315
|
-
} = this.memo.
|
|
316
|
+
} = this.memo.query(schema, args, state);
|
|
316
317
|
return {
|
|
317
318
|
data: typeof data === 'symbol' ? undefined : data,
|
|
318
319
|
countRef: this.gcPolicy.createCountRef({
|
|
@@ -320,40 +321,24 @@ export default class Controller {
|
|
|
320
321
|
})
|
|
321
322
|
};
|
|
322
323
|
}
|
|
323
|
-
|
|
324
|
-
const invalidDenormalize = typeof data === 'symbol';
|
|
325
|
-
|
|
326
|
-
// fallback to entity expiry time
|
|
327
|
-
if (!expiresAt) {
|
|
328
|
-
expiresAt = entityExpiresAt(paths, entityMeta);
|
|
329
|
-
}
|
|
330
|
-
|
|
324
|
+
getExpiryStatus(invalidData, invalidIfStale, meta = {}) {
|
|
331
325
|
// https://dataclient.io/docs/concepts/expiry-policy#expiry-status
|
|
332
326
|
// we don't track the difference between stale or fresh because that is tied to triggering
|
|
333
327
|
// conditions
|
|
334
|
-
|
|
335
|
-
return {
|
|
336
|
-
data,
|
|
337
|
-
expiryStatus,
|
|
338
|
-
expiresAt,
|
|
339
|
-
countRef: this.gcPolicy.createCountRef({
|
|
340
|
-
key,
|
|
341
|
-
paths
|
|
342
|
-
})
|
|
343
|
-
};
|
|
328
|
+
return meta.invalidated || invalidData && !meta.error ? ExpiryStatus.Invalid : invalidData || invalidIfStale ? ExpiryStatus.InvalidIfStale : ExpiryStatus.Valid;
|
|
344
329
|
}
|
|
345
330
|
}
|
|
346
331
|
|
|
347
332
|
// benchmark: https://www.measurethat.net/Benchmarks/Show/24691/0/min-reducer-vs-imperative-with-paths
|
|
348
333
|
// earliest expiry dictates age
|
|
349
|
-
function entityExpiresAt(paths,
|
|
334
|
+
function entityExpiresAt(paths, entitiesMeta) {
|
|
350
335
|
let expiresAt = Infinity;
|
|
351
336
|
for (const {
|
|
352
|
-
|
|
353
|
-
|
|
337
|
+
key,
|
|
338
|
+
pk
|
|
354
339
|
} of paths) {
|
|
355
|
-
var
|
|
356
|
-
const entityExpiry = (
|
|
340
|
+
var _entitiesMeta$key;
|
|
341
|
+
const entityExpiry = (_entitiesMeta$key = entitiesMeta[key]) == null || (_entitiesMeta$key = _entitiesMeta$key[pk]) == null ? void 0 : _entitiesMeta$key.expiresAt;
|
|
357
342
|
// expiresAt will always resolve to false with any comparison
|
|
358
343
|
if (entityExpiry < expiresAt) expiresAt = entityExpiry;
|
|
359
344
|
}
|
|
@@ -423,4 +408,4 @@ class Snapshot {
|
|
|
423
408
|
}
|
|
424
409
|
}
|
|
425
410
|
Snapshot.abort = new AbortOptimistic();
|
|
426
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwiY3JlYXRlRXhwaXJlQWxsIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlSW52YWxpZGF0ZUFsbCIsImNyZWF0ZVJlc2V0IiwiY3JlYXRlU2V0IiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbnN1cmVQb2pvIiwiSW1tb3J0YWxHQ1BvbGljeSIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm1lbW8iLCJnY1BvbGljeSIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2UiLCJJbnZhbGlkIiwiRGF0ZSIsIm5vdyIsImludmFsaWRhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImludmFsaWRhdGVBbGwiLCJvcHRpb25zIiwia2V5IiwidGVzdEtleSIsImV4cGlyZUFsbCIsInJlc2V0RW50aXJlU3RvcmUiLCJzZXRSZXNwb25zZSIsInJlc3QiLCJyZXNwb25zZSIsImxlbmd0aCIsInNsaWNlIiwic2V0RXJyb3IiLCJlcnJvciIsInN1YnNjcmliZSIsInVuc3Vic2NyaWJlIiwic25hcHNob3QiLCJzdGF0ZSIsImZldGNoZWRBdCIsIlNuYXBzaG90IiwiX2Rpc3BhdGNoIiwiYmluZE1pZGRsZXdhcmUiLCJzZXQiLCJ2YWx1ZSIsImdldEVycm9yIiwiZW5kcG9pbnRzIiwidW5kZWZpbmVkIiwiZXJyb3JQb2xpY3kiLCJnZXRSZXNwb25zZU1ldGEiLCJtYXAiLCJpc0FjdGl2ZSIsImNhY2hlRW5kcG9pbnRzIiwic2hvdWxkUXVlcnkiLCJidWlsZFF1ZXJ5S2V5IiwiZW50aXRpZXMiLCJpbmRleGVzIiwiVmFsaWQiLCJJbmZpbml0eSIsImNvdW50UmVmIiwiaXNJbnZhbGlkIiwic2NoZW1hSGFzRW50aXR5IiwiaW52YWxpZGF0ZWQiLCJpbnZhbGlkSWZTdGFsZSIsIkludmFsaWRJZlN0YWxlIiwiY3JlYXRlQ291bnRSZWYiLCJwYXRocyIsImdldFNjaGVtYVJlc3BvbnNlIiwiZW50aXR5TWV0YSIsImdldCIsInF1ZXJ5IiwiZ2V0UXVlcnlNZXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImludmFsaWREZW5vcm1hbGl6ZSIsImVudGl0eUV4cGlyZXNBdCIsInBrIiwiX2VudGl0eU1ldGEka2V5IiwiZW50aXR5RXhwaXJ5IiwiQXJyYXkiLCJpc0FycmF5IiwibmVzdGVkU2NoZW1hIiwiT2JqZWN0IiwidmFsdWVzIiwic29tZSIsIngiLCJjb250cm9sbGVyIiwiYWJvcnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgRXJyb3JUeXBlcyxcbiAgU25hcHNob3RJbnRlcmZhY2UsXG4gIFNjaGVtYSxcbiAgRGVub3JtYWxpemUsXG4gIFF1ZXJ5YWJsZSxcbiAgU2NoZW1hQXJncyxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5pbXBvcnQge1xuICBFeHBpcnlTdGF0dXMsXG4gIEVuZHBvaW50SW50ZXJmYWNlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBSZXNvbHZlVHlwZSxcbiAgRGVub3JtYWxpemVOdWxsYWJsZSxcbiAgRW50aXR5UGF0aCxcbiAgTWVtb0NhY2hlLFxuICBpc0VudGl0eSxcbiAgZGVub3JtYWxpemUsXG4gIHZhbGlkYXRlUXVlcnlLZXksXG59IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuXG5pbXBvcnQgQWJvcnRPcHRpbWlzdGljIGZyb20gJy4vQWJvcnRPcHRpbWlzdGljLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVVuc3Vic2NyaXB0aW9uLFxuICBjcmVhdGVTdWJzY3JpcHRpb24sXG59IGZyb20gJy4vYWN0aW9ucy9jcmVhdGVTdWJzY3JpcHRpb24uanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlRXhwaXJlQWxsLFxuICBjcmVhdGVGZXRjaCxcbiAgY3JlYXRlSW52YWxpZGF0ZSxcbiAgY3JlYXRlSW52YWxpZGF0ZUFsbCxcbiAgY3JlYXRlUmVzZXQsXG4gIGNyZWF0ZVNldCxcbiAgY3JlYXRlU2V0UmVzcG9uc2UsXG59IGZyb20gJy4vYWN0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQgZW5zdXJlUG9qbyBmcm9tICcuL2Vuc3VyZVBvam8uanMnO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludFVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBSZWR1eE1pZGRsZXdhcmVBUEkgfSBmcm9tICcuLi9tYW5hZ2VyL2FwcGx5TWFuYWdlci5qcyc7XG5pbXBvcnQgdHlwZSB7IEdDSW50ZXJmYWNlIH0gZnJvbSAnLi4vc3RhdGUvR0NQb2xpY3kuanMnO1xuaW1wb3J0IHsgSW1tb3J0YWxHQ1BvbGljeSB9IGZyb20gJy4uL3N0YXRlL0dDUG9saWN5LmpzJztcbmltcG9ydCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJy4uL3N0YXRlL3JlZHVjZXIvY3JlYXRlUmVkdWNlci5qcyc7XG5pbXBvcnQgc2VsZWN0TWV0YSBmcm9tICcuLi9zdGF0ZS9zZWxlY3RNZXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQWN0aW9uVHlwZXMsIERpc3BhdGNoLCBTdGF0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgR2VuZXJpY0Rpc3BhdGNoID0gKHZhbHVlOiBhbnkpID0+IFByb21pc2U8dm9pZD47XG5leHBvcnQgdHlwZSBEYXRhQ2xpZW50RGlzcGF0Y2ggPSAodmFsdWU6IEFjdGlvblR5cGVzKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xsZXJDb25zdHJ1Y3RvclByb3BzPFxuICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gRGF0YUNsaWVudERpc3BhdGNoLFxuPiB7XG4gIGRpc3BhdGNoPzogRDtcbiAgZ2V0U3RhdGU/OiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgbWVtbz86IFBpY2s8TWVtb0NhY2hlLCAnZGVub3JtYWxpemUnIHwgJ3F1ZXJ5JyB8ICdidWlsZFF1ZXJ5S2V5Jz47XG4gIGdjUG9saWN5PzogR0NJbnRlcmZhY2U7XG59XG5cbmNvbnN0IHVuc2V0RGlzcGF0Y2ggPSAoYWN0aW9uOiB1bmtub3duKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRGlzcGF0Y2hpbmcgd2hpbGUgY29uc3RydWN0aW5nIHlvdXIgbWlkZGxld2FyZSBpcyBub3QgYWxsb3dlZC4gYCArXG4gICAgICBgT3RoZXIgbWlkZGxld2FyZSB3b3VsZCBub3QgYmUgYXBwbGllZCB0byB0aGlzIGRpc3BhdGNoLmAsXG4gICk7XG59O1xuY29uc3QgdW5zZXRTdGF0ZSA9ICgpOiBTdGF0ZTx1bmtub3duPiA9PiB7XG4gIC8vIFRoaXMgaXMgb25seSB0aGUgdmFsdWUgdW50aWwgaXQgaXMgc2V0IGJ5IHRoZSBEYXRhUHJvdmlkZXJcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5cbi8qKlxuICogSW1wZXJhdGl2ZSBjb250cm9sIG9mIFJlYWN0aXZlIERhdGEgQ2xpZW50IHN0b3JlXG4gKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRyb2xsZXI8XG4gIC8vIE5PVEU6IFdlIHRlbXBsYXRlIG9uIGVudGlyZSBkaXNwYXRjaCwgc28gd2UgY2FuIGJlIGNvbnRyYXZhcmlhbnQgb24gQWN0aW9uVHlwZXNcbiAgRCBleHRlbmRzIEdlbmVyaWNEaXNwYXRjaCA9IERhdGFDbGllbnREaXNwYXRjaCxcbj4ge1xuICAvKipcbiAgICogRGlzcGF0Y2hlcyBhbiBhY3Rpb24gdG8gUmVhY3RpdmUgRGF0YSBDbGllbnQgcmVkdWNlci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNkaXNwYXRjaFxuICAgKi9cbiAgZGVjbGFyZSBwcm90ZWN0ZWQgX2Rpc3BhdGNoOiBEO1xuICAvKipcbiAgICogR2V0cyB0aGUgbGF0ZXN0IHN0YXRlIHNuYXBzaG90IHRoYXQgaXMgZnVsbHkgY29tbWl0dGVkLlxuICAgKlxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGltcGVyYXRpdmUgdXNlLWNhc2VzIGxpa2UgZXZlbnQgaGFuZGxlcnMuXG4gICAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgdG8gcmVuZGVyOyBpbnN0ZWFkIHVzZVN1c3BlbnNlKCkgb3IgdXNlQ2FjaGUoKVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFN0YXRlXG4gICAqL1xuICBkZWNsYXJlIGdldFN0YXRlOiAoKSA9PiBTdGF0ZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIFNpbmdsZXRvbiB0byBtYWludGFpbiByZWZlcmVudGlhbCBlcXVhbGl0eSBiZXR3ZWVuIGNhbGxzXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IG1lbW86IFBpY2s8XG4gICAgTWVtb0NhY2hlLFxuICAgICdkZW5vcm1hbGl6ZScgfCAncXVlcnknIHwgJ2J1aWxkUXVlcnlLZXknXG4gID47XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAqL1xuICBkZWNsYXJlIHJlYWRvbmx5IGdjUG9saWN5OiBHQ0ludGVyZmFjZTtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGlzcGF0Y2ggPSB1bnNldERpc3BhdGNoIGFzIGFueSxcbiAgICBnZXRTdGF0ZSA9IHVuc2V0U3RhdGUsXG4gICAgbWVtbyA9IG5ldyBNZW1vQ2FjaGUoKSxcbiAgICBnY1BvbGljeSA9IG5ldyBJbW1vcnRhbEdDUG9saWN5KCksXG4gIH06IENvbnRyb2xsZXJDb25zdHJ1Y3RvclByb3BzPEQ+ID0ge30pIHtcbiAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgICB0aGlzLm1lbW8gPSBtZW1vO1xuICAgIHRoaXMuZ2NQb2xpY3kgPSBnY1BvbGljeTtcbiAgfVxuXG4gIC8vIFRPRE86IGRyb3Agd2hlbiBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgKDAuMTQgYW5kIGJlbG93KVxuICBzZXQgZGlzcGF0Y2goZGlzcGF0Y2g6IEQpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRoaXMuX2Rpc3BhdGNoID0gZGlzcGF0Y2g7XG4gIH1cblxuICAvLyBUT0RPOiBkcm9wIHdoZW4gZHJvcCBzdXBwb3J0IGZvciBkZXN0cnVjdHVyaW5nICgwLjE0IGFuZCBiZWxvdylcbiAgZ2V0IGRpc3BhdGNoKCk6IEQge1xuICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaDtcbiAgfVxuXG4gIGJpbmRNaWRkbGV3YXJlKHtcbiAgICBkaXNwYXRjaCxcbiAgICBnZXRTdGF0ZSxcbiAgfToge1xuICAgIGRpc3BhdGNoOiBEO1xuICAgIGdldFN0YXRlOiBSZWR1eE1pZGRsZXdhcmVBUElbJ2dldFN0YXRlJ107XG4gIH0pIHtcbiAgICB0aGlzLl9kaXNwYXRjaCA9IGRpc3BhdGNoO1xuICAgIHRoaXMuZ2V0U3RhdGUgPSBnZXRTdGF0ZTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKiogQWN0aW9uIERpc3BhdGNoZXJzICoqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZW5kcG9pbnQgd2l0aCBnaXZlbiBhcmdzLCB1cGRhdGluZyB0aGUgUmVhY3RpdmUgRGF0YSBDbGllbnQgY2FjaGUgd2l0aCB0aGUgcmVzcG9uc2Ugb3IgZXJyb3IgdXBvbiBjb21wbGV0aW9uLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ZldGNoXG4gICAqL1xuICBmZXRjaCA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsID8gUmV0dXJuVHlwZTxFPlxuICA6IFByb21pc2U8RGVub3JtYWxpemU8RVsnc2NoZW1hJ10+PiA9PiB7XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlRmV0Y2goZW5kcG9pbnQsIHtcbiAgICAgIGFyZ3MsXG4gICAgfSk7XG4gICAgdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuXG4gICAgaWYgKGVuZHBvaW50LnNjaGVtYSkge1xuICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UudGhlbihpbnB1dCA9PlxuICAgICAgICBkZW5vcm1hbGl6ZShlbmRwb2ludC5zY2hlbWEsIGlucHV0LCB7fSwgYXJncyksXG4gICAgICApIGFzIGFueTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5tZXRhLnByb21pc2UgYXMgYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9ubHkgaWYgZW5kcG9pbnQgaXMgY29uc2lkZXJlZCAnc3RhbGUnOyBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWRcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNmZXRjaElmU3RhbGVcbiAgICovXG4gIGZldGNoSWZTdGFsZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2UgJiB7IHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT4gfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKTogRVsnc2NoZW1hJ10gZXh0ZW5kcyB1bmRlZmluZWQgfCBudWxsID8gUmV0dXJuVHlwZTxFPiB8IFJlc29sdmVUeXBlPEU+XG4gIDogUHJvbWlzZTxEZW5vcm1hbGl6ZTxFWydzY2hlbWEnXT4+IHwgRGVub3JtYWxpemU8RVsnc2NoZW1hJ10+ID0+IHtcbiAgICBjb25zdCB7IGRhdGEsIGV4cGlyZXNBdCwgZXhwaXJ5U3RhdHVzIH0gPSB0aGlzLmdldFJlc3BvbnNlKFxuICAgICAgZW5kcG9pbnQsXG4gICAgICAuLi5hcmdzLFxuICAgICAgdGhpcy5nZXRTdGF0ZSgpLFxuICAgICk7XG4gICAgaWYgKGV4cGlyeVN0YXR1cyAhPT0gRXhwaXJ5U3RhdHVzLkludmFsaWQgJiYgRGF0ZS5ub3coKSA8PSBleHBpcmVzQXQpXG4gICAgICByZXR1cm4gZGF0YSBhcyBhbnk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goZW5kcG9pbnQsIC4uLmFyZ3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugd2l0aCB0aGUgc2FtZSBFbmRwb2ludCBhbmQgcGFyYW1ldGVycy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNpbnZhbGlkYXRlXG4gICAqL1xuICBpbnZhbGlkYXRlID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsID9cbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICBhcmdzOiBhcmdzIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VTdXNwZW5zZSBvbiBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbnZhbGlkYXRpb24gaXMgY29tbWl0ZWQuXG4gICAqL1xuICBpbnZhbGlkYXRlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVJbnZhbGlkYXRlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogU2V0cyBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMgdG8gYmUgU1RBTEUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZXhwaXJlQWxsXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV4cGlyeSBpcyBjb21taXRlZC4gKk5PVCogZmV0Y2ggcHJvbWlzZVxuICAgKi9cbiAgZXhwaXJlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVFeHBpcmVBbGwoKGtleTogc3RyaW5nKSA9PiBvcHRpb25zLnRlc3RLZXkoa2V5KSkpO1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVudGlyZSBSZWFjdGl2ZSBEYXRhIENsaWVudCBjYWNoZS4gQWxsIGluZmxpZ2h0IHJlcXVlc3RzIHdpbGwgbm90IHJlc29sdmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVzZXRFbnRpcmVTdG9yZVxuICAgKi9cbiAgcmVzZXRFbnRpcmVTdG9yZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuZGlzcGF0Y2goY3JlYXRlUmVzZXQoKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgdmFsdWUgZm9yIHRoZSBRdWVyeWFibGUgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0XG4gICAqL1xuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCAocHJldmlvdXNWYWx1ZTogRGVub3JtYWxpemU8Uz4pID0+IHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsdWUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0KHNjaGVtYSwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFNjaGVtYUFyZ3M8Uz4sXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiByZWplY3Qgd2l0aCBlcnJvciBpZiB0aGlzIGZhaWxzIGluIHJlZHVjZXJcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVzcG9uc2UgZm9yIHRoZSBFbmRwb2ludCBhbmQgYXJncy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRSZXNwb25zZVxuICAgKi9cbiAgc2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNvbHZlVHlwZTxFPiA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGVycm9yIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0RXJyb3JcbiAgICovXG4gIHNldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgRXJyb3JdXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBFcnJvciA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGluZmxpZ2h0IGZldGNoLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc29sdmVcbiAgICovXG4gIHJlc29sdmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIG1ldGE6XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IEVycm9yO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IGFueTtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcj86IGZhbHNlIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwgbWV0YSBhcyBhbnkpKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFya3MgYSBuZXcgc3Vic2NyaXB0aW9uIHRvIGEgZ2l2ZW4gRW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Vuc3Vic2NyaWJlXG4gICAqL1xuICB1bnN1YnNjcmliZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U8XG4gICAgICBGZXRjaEZ1bmN0aW9uLFxuICAgICAgU2NoZW1hIHwgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkIHwgZmFsc2VcbiAgICA+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVVbnN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKioqKioqKioqKioqKioqIE1vcmUgKioqKioqKioqKioqKioqL1xuXG4gIC8qIFRPRE86XG4gIGFib3J0ID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IFByb21pc2U8dm9pZD5cbiAgKi9cblxuICAvKipcbiAgICogR2V0cyBhIHNuYXBzaG90IChodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3Q8dW5rbm93bj4gPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldEVycm9yXG4gICAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcihcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIGlmIChyZXN0WzBdID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGtleSA9IGVuZHBvaW50LmtleSguLi5hcmdzKTtcblxuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGNvbnN0IGVycm9yID0gc3RhdGUuZW5kcG9pbnRzW2tleV07XG5cbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIChnbG9iYWxseSByZWZlcmVudGlhbGx5IHN0YWJsZSkgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQvYXJncyBwYWlyIGZyb20gc3RhdGUgZ2l2ZW4uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLihyZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdKSxcbiAgICAgIFN0YXRlPHVua25vd24+LFxuICAgIF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlKFxuICAgIGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4udW5rbm93bltdLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IHVua25vd247XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH0ge1xuICAgIC8vIFRPRE86IGJyZWFraW5nOiBvbmx5IHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzcG9uc2VNZXRhKGVuZHBvaW50LCAuLi5yZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlTWV0YVxuICAgKi9cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi4ocmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSksXG4gICAgICBTdGF0ZTx1bmtub3duPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGEoXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi51bmtub3duW10sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdFxuICAgICAgLnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSlcbiAgICAgIC8vIGhhbmRsZSBGb3JtRGF0YVxuICAgICAgLm1hcChlbnN1cmVQb2pvKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZUVuZHBvaW50cyA9IGlzQWN0aXZlID8gc3RhdGUuZW5kcG9pbnRzW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2NoZW1hID0gZW5kcG9pbnQuc2NoZW1hO1xuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGxldCBleHBpcmVzQXQgPSBtZXRhPy5leHBpcmVzQXQ7XG4gICAgLy8gaWYgd2UgaGF2ZSBubyBlbmRwb2ludCBlbnRyeSwgYW5kIG91ciBlbmRwb2ludCBoYXMgYSBzY2hlbWEgLSB0cnkgcXVlcnlpbmcgdGhlIHN0b3JlXG4gICAgY29uc3Qgc2hvdWxkUXVlcnkgPSBjYWNoZUVuZHBvaW50cyA9PT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgaW5wdXQgPVxuICAgICAgc2hvdWxkUXVlcnkgP1xuICAgICAgICAvLyBub3RoaW5nIGluIGVuZHBvaW50cyBjYWNoZSwgc28gdHJ5IHF1ZXJ5aW5nIGlmIHdlIGhhdmUgYSBzY2hlbWEgdG8gZG8gc29cbiAgICAgICAgdGhpcy5tZW1vLmJ1aWxkUXVlcnlLZXkoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgc3RhdGUuZW50aXRpZXMgYXMgYW55LFxuICAgICAgICAgIHN0YXRlLmluZGV4ZXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICApXG4gICAgICA6IGNhY2hlRW5kcG9pbnRzO1xuXG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgLy8gd2hlbiBub3QgYWN0aXZlIHNpbXBseSByZXR1cm4gdGhlIHF1ZXJ5IGlucHV0IHdpdGhvdXQgZGVub3JtYWxpemluZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogaW5wdXQgYXMgYW55LFxuICAgICAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cy5WYWxpZCxcbiAgICAgICAgZXhwaXJlc0F0OiBJbmZpbml0eSxcbiAgICAgICAgY291bnRSZWY6ICgpID0+ICgpID0+IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGlzSW52YWxpZCA9IGZhbHNlO1xuICAgIGlmIChzaG91bGRRdWVyeSkge1xuICAgICAgaXNJbnZhbGlkID0gIXZhbGlkYXRlUXVlcnlLZXkoaW5wdXQpO1xuICAgICAgLy8gZW5kcG9pbnQgd2l0aG91dCBlbnRpdGllc1xuICAgIH0gZWxzZSBpZiAoIXNjaGVtYSB8fCAhc2NoZW1hSGFzRW50aXR5KHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGNhY2hlRW5kcG9pbnRzLFxuICAgICAgICBleHBpcnlTdGF0dXM6XG4gICAgICAgICAgbWV0YT8uaW52YWxpZGF0ZWQgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgICAgIDogY2FjaGVFbmRwb2ludHMgJiYgIWVuZHBvaW50LmludmFsaWRJZlN0YWxlID8gRXhwaXJ5U3RhdHVzLlZhbGlkXG4gICAgICAgICAgOiBFeHBpcnlTdGF0dXMuSW52YWxpZElmU3RhbGUsXG4gICAgICAgIGV4cGlyZXNBdDogZXhwaXJlc0F0IHx8IDAsXG4gICAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsga2V5IH0pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBzZWNvbmQgYXJndW1lbnQgaXMgZmFsc2UgaWYgYW55IGVudGl0aWVzIGFyZSBtaXNzaW5nXG5cbiAgICBjb25zdCB7IGRhdGEsIHBhdGhzIH0gPSB0aGlzLm1lbW8uZGVub3JtYWxpemUoXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnB1dCxcbiAgICAgIHN0YXRlLmVudGl0aWVzLFxuICAgICAgYXJncyxcbiAgICApIGFzIHsgZGF0YTogYW55OyBwYXRoczogRW50aXR5UGF0aFtdIH07XG5cbiAgICAvLyBub3RlOiBpc0ludmFsaWQgY2FuIG9ubHkgYmUgdHJ1ZSBpZiBzaG91bGRRdWVyeSBpcyB0cnVlXG4gICAgaWYgKCFleHBpcmVzQXQgJiYgaXNJbnZhbGlkKSBleHBpcmVzQXQgPSAxO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hUmVzcG9uc2UoXG4gICAgICBkYXRhLFxuICAgICAga2V5LFxuICAgICAgcGF0aHMsXG4gICAgICBzdGF0ZS5lbnRpdHlNZXRhLFxuICAgICAgZXhwaXJlc0F0LFxuICAgICAgZW5kcG9pbnQuaW52YWxpZElmU3RhbGUgfHwgaXNJbnZhbGlkLFxuICAgICAgbWV0YSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJpZXMgdGhlIHN0b3JlIGZvciBhIFF1ZXJhYmxlIHNjaGVtYVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFxuICAgKi9cbiAgZ2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi5TY2hlbWFBcmdzPFM+LFxuICAgICAgUGljazxTdGF0ZTx1bmtub3duPiwgJ2VudGl0aWVzJyB8ICdlbnRpdHlNZXRhJz4sXG4gICAgXVxuICApOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTxhbnk+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz47XG5cbiAgICByZXR1cm4gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUuZW50aXRpZXMgYXMgYW55LCBzdGF0ZS5pbmRleGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWE7IHByb3ZpZGluZyByZWxhdGVkIG1ldGFkYXRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UXVlcnlNZXRhXG4gICAqL1xuICBnZXRRdWVyeU1ldGE8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLlNjaGVtYUFyZ3M8Uz4sXG4gICAgICBQaWNrPFN0YXRlPHVua25vd24+LCAnZW50aXRpZXMnIHwgJ2VudGl0eU1ldGEnPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICBjb25zdCBzdGF0ZSA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXSBhcyBTdGF0ZTxhbnk+O1xuICAgIC8vIHRoaXMgaXMgdHlwZXNjcmlwdCBnZW5lcmljcyBicmVha2luZ1xuICAgIGNvbnN0IGFyZ3M6IGFueSA9IHJlc3RcbiAgICAgIC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpXG4gICAgICAubWFwKGVuc3VyZVBvam8pIGFzIFNjaGVtYUFyZ3M8Uz47XG5cbiAgICAvLyBUT0RPOiBicmVha2luZzogU3dpdGNoIGJhY2sgdG8gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUuZW50aXRpZXMgYXMgYW55LCBzdGF0ZS5pbmRleGVzKSB0byBkb1xuICAgIC8vIHRoaXMgbG9naWNcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMubWVtby5idWlsZFF1ZXJ5S2V5KFxuICAgICAgc2NoZW1hLFxuICAgICAgYXJncyxcbiAgICAgIHN0YXRlLmVudGl0aWVzIGFzIGFueSxcbiAgICAgIHN0YXRlLmluZGV4ZXMsXG4gICAgICBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICApO1xuXG4gICAgaWYgKCFpbnB1dCkge1xuICAgICAgcmV0dXJuIHsgZGF0YTogdW5kZWZpbmVkLCBjb3VudFJlZjogKCkgPT4gKCkgPT4gdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gdGhpcy5tZW1vLmRlbm9ybWFsaXplKFxuICAgICAgc2NoZW1hLFxuICAgICAgaW5wdXQsXG4gICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgIGFyZ3MsXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogdHlwZW9mIGRhdGEgPT09ICdzeW1ib2wnID8gdW5kZWZpbmVkIDogKGRhdGEgYXMgYW55KSxcbiAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsgcGF0aHMgfSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2NoZW1hUmVzcG9uc2U8VD4oXG4gICAgZGF0YTogVCxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBwYXRoczogRW50aXR5UGF0aFtdLFxuICAgIGVudGl0eU1ldGE6IFN0YXRlPHVua25vd24+WydlbnRpdHlNZXRhJ10sXG4gICAgZXhwaXJlc0F0OiBudW1iZXIsXG4gICAgaW52YWxpZElmU3RhbGU6IGJvb2xlYW4sXG4gICAgbWV0YTogeyBlcnJvcj86IHVua25vd247IGludmFsaWRhdGVkPzogdW5rbm93biB9ID0ge30sXG4gICk6IHtcbiAgICBkYXRhOiBUO1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICBjb25zdCBpbnZhbGlkRGVub3JtYWxpemUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N5bWJvbCc7XG5cbiAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICBpZiAoIWV4cGlyZXNBdCkge1xuICAgICAgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBlbnRpdHlNZXRhKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9jb25jZXB0cy9leHBpcnktcG9saWN5I2V4cGlyeS1zdGF0dXNcbiAgICAvLyB3ZSBkb24ndCB0cmFjayB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YWxlIG9yIGZyZXNoIGJlY2F1c2UgdGhhdCBpcyB0aWVkIHRvIHRyaWdnZXJpbmdcbiAgICAvLyBjb25kaXRpb25zXG4gICAgY29uc3QgZXhwaXJ5U3RhdHVzID1cbiAgICAgIG1ldGE/LmludmFsaWRhdGVkIHx8IChpbnZhbGlkRGVub3JtYWxpemUgJiYgIW1ldGE/LmVycm9yKSA/XG4gICAgICAgIEV4cGlyeVN0YXR1cy5JbnZhbGlkXG4gICAgICA6IGludmFsaWREZW5vcm1hbGl6ZSB8fCBpbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGV4cGlyeVN0YXR1cyxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICAgIGNvdW50UmVmOiB0aGlzLmdjUG9saWN5LmNyZWF0ZUNvdW50UmVmKHsga2V5LCBwYXRocyB9KSxcbiAgICB9O1xuICB9XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogRW50aXR5UGF0aFtdLFxuICBlbnRpdHlNZXRhOiB7XG4gICAgcmVhZG9ubHkgW2VudGl0eUtleTogc3RyaW5nXToge1xuICAgICAgcmVhZG9ubHkgW3BrOiBzdHJpbmddOiB7XG4gICAgICAgIHJlYWRvbmx5IGRhdGU6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyOyAvLyBUaGlzIGlzIG9ubHkgdGhlIHZhbHVlIHVudGlsIGl0IGlzIHNldCBieSB0aGUgRGF0YVByb3ZpZGVyXG4gICAgICB9O1xuICAgIH07XG4gIH0sXG4pIHtcbiAgbGV0IGV4cGlyZXNBdCA9IEluZmluaXR5O1xuICBmb3IgKGNvbnN0IHsgcGssIGtleSB9IG9mIHBhdGhzKSB7XG4gICAgY29uc3QgZW50aXR5RXhwaXJ5ID0gZW50aXR5TWV0YVtrZXldPy5bcGtdPy5leHBpcmVzQXQ7XG4gICAgLy8gZXhwaXJlc0F0IHdpbGwgYWx3YXlzIHJlc29sdmUgdG8gZmFsc2Ugd2l0aCBhbnkgY29tcGFyaXNvblxuICAgIGlmIChlbnRpdHlFeHBpcnkgPCBleHBpcmVzQXQpIGV4cGlyZXNBdCA9IGVudGl0eUV4cGlyeTtcbiAgfVxuICByZXR1cm4gZXhwaXJlc0F0O1xufVxuXG4vKiogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHNjaGVtYSBoYXMgYW55IGVudGl0aWVzLlxuICpcbiAqIFdpdGhvdXQgZW50aXRpZXMsIGRlbm9ybWFsaXphdGlvbiBpcyBub3QgbmVlZGVkLCBhbmQgcmVzdWx0cyBzaG91bGQgbm90IGJlIHF1ZXJpZWQuXG4gKi9cbmZ1bmN0aW9uIHNjaGVtYUhhc0VudGl0eShzY2hlbWE6IFNjaGVtYSk6IGJvb2xlYW4ge1xuICBpZiAoaXNFbnRpdHkoc2NoZW1hKSkgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpXG4gICAgcmV0dXJuIHNjaGVtYS5sZW5ndGggIT09IDAgJiYgc2NoZW1hSGFzRW50aXR5KHNjaGVtYVswXSk7XG4gIGlmIChzY2hlbWEgJiYgKHR5cGVvZiBzY2hlbWEgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBzY2hlbWEgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY29uc3QgbmVzdGVkU2NoZW1hID1cbiAgICAgICdzY2hlbWEnIGluIHNjaGVtYSA/IChzY2hlbWEuc2NoZW1hIGFzIFJlY29yZDxzdHJpbmcsIFNjaGVtYT4pIDogc2NoZW1hO1xuICAgIGlmICh0eXBlb2YgbmVzdGVkU2NoZW1hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2NoZW1hSGFzRW50aXR5KG5lc3RlZFNjaGVtYSk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKG5lc3RlZFNjaGVtYSkuc29tZSh4ID0+IHNjaGVtYUhhc0VudGl0eSh4KSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgdHlwZSB7IEVycm9yVHlwZXMgfTtcblxuY2xhc3MgU25hcHNob3Q8VCA9IHVua25vd24+IGltcGxlbWVudHMgU25hcHNob3RJbnRlcmZhY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgYWJvcnQgPSBuZXcgQWJvcnRPcHRpbWlzdGljKCk7XG5cbiAgcHJpdmF0ZSBzdGF0ZTogU3RhdGU8VD47XG4gIHByaXZhdGUgY29udHJvbGxlcjogQ29udHJvbGxlcjtcbiAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGFib3J0ID0gU25hcHNob3QuYWJvcnQ7XG5cbiAgY29uc3RydWN0b3IoY29udHJvbGxlcjogQ29udHJvbGxlciwgc3RhdGU6IFN0YXRlPFQ+LCBmZXRjaGVkQXQgPSAwKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgdGhpcy5mZXRjaGVkQXQgPSBmZXRjaGVkQXQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqIERhdGEgQWNjZXNzICoqKioqKioqKioqKioqKi9cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFJlc3BvbnNlICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRSZXNwb25zZU1ldGEgKi9cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlTWV0YTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlTWV0YTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFJlc3BvbnNlTWV0YShlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0RXJyb3IgKi9cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcjxFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleSc+PihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknPj4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldEVycm9yKGVuZHBvaW50LCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZWQgbWVtb2l6ZWQgdmFsdWUgZm9yIGFueSBRdWVyYWJsZSBzY2hlbWFcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0XG4gICAqL1xuICBnZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLmFyZ3M6IFNjaGVtYUFyZ3M8Uz5cbiAgKTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXQoc2NoZW1hLCAuLi5hcmdzLCB0aGlzLnN0YXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWE7IHByb3ZpZGluZyByZWxhdGVkIG1ldGFkYXRhXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFF1ZXJ5TWV0YVxuICAgKi9cbiAgZ2V0UXVlcnlNZXRhPFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5hcmdzOiBTY2hlbWFBcmdzPFM+XG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPFM+IHwgdW5kZWZpbmVkO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9IHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyLmdldFF1ZXJ5TWV0YShzY2hlbWEsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiJBQVFBLFNBQ0VBLFlBQVksRUFNWkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLFdBQVcsRUFDWEMsZ0JBQWdCLFFBQ1gsd0JBQXdCO0FBRS9CLE9BQU9DLGVBQWUsTUFBTSxzQkFBc0I7QUFDbEQsU0FDRUMsb0JBQW9CLEVBQ3BCQyxrQkFBa0IsUUFDYixpQ0FBaUM7QUFDeEMsU0FDRUMsZUFBZSxFQUNmQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsbUJBQW1CLEVBQ25CQyxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsaUJBQWlCLFFBQ1osb0JBQW9CO0FBQzNCLE9BQU9DLFVBQVUsTUFBTSxpQkFBaUI7QUFJeEMsU0FBU0MsZ0JBQWdCLFFBQVEsc0JBQXNCO0FBQ3ZELFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsT0FBT0MsVUFBVSxNQUFNLHdCQUF3QjtBQWUvQyxNQUFNQyxhQUFhLEdBQUlDLE1BQWUsSUFBb0I7RUFDeEQsTUFBTSxJQUFJQyxLQUFLLENBQ2IsaUVBQWlFLEdBQy9ELHlEQUNKLENBQUM7QUFDSCxDQUFDO0FBQ0QsTUFBTUMsVUFBVSxHQUFHQSxDQUFBLEtBQXNCO0VBQ3ZDO0VBQ0E7RUFDQSxPQUFPTCxZQUFZO0FBQ3JCLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLE1BQU1NLFVBQVUsQ0FHN0I7RUFDQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztFQUVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFNRTtBQUNGO0FBQ0E7O0VBR0VDLFdBQVdBLENBQUM7SUFDVkMsUUFBUSxHQUFHTixhQUFvQjtJQUMvQk8sUUFB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
|
|
411
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHBpcnlTdGF0dXMiLCJNZW1vQ2FjaGUiLCJpc0VudGl0eSIsImRlbm9ybWFsaXplIiwidmFsaWRhdGVRdWVyeUtleSIsIkFib3J0T3B0aW1pc3RpYyIsImNyZWF0ZVVuc3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uIiwiY3JlYXRlRXhwaXJlQWxsIiwiY3JlYXRlRmV0Y2giLCJjcmVhdGVJbnZhbGlkYXRlIiwiY3JlYXRlSW52YWxpZGF0ZUFsbCIsImNyZWF0ZVJlc2V0IiwiY3JlYXRlU2V0IiwiY3JlYXRlU2V0UmVzcG9uc2UiLCJlbnN1cmVQb2pvIiwiSW1tb3J0YWxHQ1BvbGljeSIsImluaXRpYWxTdGF0ZSIsInNlbGVjdE1ldGEiLCJ1bnNldERpc3BhdGNoIiwiYWN0aW9uIiwiRXJyb3IiLCJ1bnNldFN0YXRlIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiZGlzcGF0Y2giLCJnZXRTdGF0ZSIsIm1lbW8iLCJnY1BvbGljeSIsImZldGNoIiwiZW5kcG9pbnQiLCJhcmdzIiwic2NoZW1hIiwibWV0YSIsInByb21pc2UiLCJ0aGVuIiwiaW5wdXQiLCJmZXRjaElmU3RhbGUiLCJkYXRhIiwiZXhwaXJlc0F0IiwiZXhwaXJ5U3RhdHVzIiwiZ2V0UmVzcG9uc2VNZXRhIiwiSW52YWxpZCIsIkRhdGUiLCJub3ciLCJpbnZhbGlkYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnZhbGlkYXRlQWxsIiwib3B0aW9ucyIsImtleSIsInRlc3RLZXkiLCJleHBpcmVBbGwiLCJyZXNldEVudGlyZVN0b3JlIiwic2V0UmVzcG9uc2UiLCJyZXN0IiwicmVzcG9uc2UiLCJsZW5ndGgiLCJzbGljZSIsInNldEVycm9yIiwiZXJyb3IiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsInNuYXBzaG90Iiwic3RhdGUiLCJmZXRjaGVkQXQiLCJTbmFwc2hvdCIsIl9kaXNwYXRjaCIsImJpbmRNaWRkbGV3YXJlIiwic2V0IiwidmFsdWUiLCJnZXRFcnJvciIsImVuZHBvaW50cyIsInVuZGVmaW5lZCIsImVycm9yUG9saWN5IiwiZ2V0UmVzcG9uc2UiLCJtYXAiLCJpc0FjdGl2ZSIsImNhY2hlRW5kcG9pbnRzIiwic2hvdWxkUXVlcnkiLCJidWlsZFF1ZXJ5S2V5IiwiVmFsaWQiLCJJbmZpbml0eSIsImNvdW50UmVmIiwiaXNJbnZhbGlkIiwic2NoZW1hSGFzRW50aXR5IiwiZ2V0RXhwaXJ5U3RhdHVzIiwiaW52YWxpZElmU3RhbGUiLCJjcmVhdGVDb3VudFJlZiIsInBhdGhzIiwiZW50aXRpZXMiLCJlbnRpdHlFeHBpcmVzQXQiLCJlbnRpdGllc01ldGEiLCJnZXQiLCJxdWVyeSIsImdldFF1ZXJ5TWV0YSIsImludmFsaWREYXRhIiwiaW52YWxpZGF0ZWQiLCJJbnZhbGlkSWZTdGFsZSIsInBrIiwiX2VudGl0aWVzTWV0YSRrZXkiLCJlbnRpdHlFeHBpcnkiLCJBcnJheSIsImlzQXJyYXkiLCJuZXN0ZWRTY2hlbWEiLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb21lIiwieCIsImNvbnRyb2xsZXIiLCJhYm9ydCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBFcnJvclR5cGVzLFxuICBTbmFwc2hvdEludGVyZmFjZSxcbiAgU2NoZW1hLFxuICBEZW5vcm1hbGl6ZSxcbiAgUXVlcnlhYmxlLFxuICBTY2hlbWFBcmdzLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmltcG9ydCB7XG4gIEV4cGlyeVN0YXR1cyxcbiAgRW5kcG9pbnRJbnRlcmZhY2UsXG4gIEZldGNoRnVuY3Rpb24sXG4gIFJlc29sdmVUeXBlLFxuICBEZW5vcm1hbGl6ZU51bGxhYmxlLFxuICBFbnRpdHlQYXRoLFxuICBNZW1vQ2FjaGUsXG4gIGlzRW50aXR5LFxuICBkZW5vcm1hbGl6ZSxcbiAgdmFsaWRhdGVRdWVyeUtleSxcbn0gZnJvbSAnQGRhdGEtY2xpZW50L25vcm1hbGl6cic7XG5cbmltcG9ydCBBYm9ydE9wdGltaXN0aWMgZnJvbSAnLi9BYm9ydE9wdGltaXN0aWMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlVW5zdWJzY3JpcHRpb24sXG4gIGNyZWF0ZVN1YnNjcmlwdGlvbixcbn0gZnJvbSAnLi9hY3Rpb25zL2NyZWF0ZVN1YnNjcmlwdGlvbi5qcyc7XG5pbXBvcnQge1xuICBjcmVhdGVFeHBpcmVBbGwsXG4gIGNyZWF0ZUZldGNoLFxuICBjcmVhdGVJbnZhbGlkYXRlLFxuICBjcmVhdGVJbnZhbGlkYXRlQWxsLFxuICBjcmVhdGVSZXNldCxcbiAgY3JlYXRlU2V0LFxuICBjcmVhdGVTZXRSZXNwb25zZSxcbn0gZnJvbSAnLi9hY3Rpb25zL2luZGV4LmpzJztcbmltcG9ydCBlbnN1cmVQb2pvIGZyb20gJy4vZW5zdXJlUG9qby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50VXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IFJlZHV4TWlkZGxld2FyZUFQSSB9IGZyb20gJy4uL21hbmFnZXIvYXBwbHlNYW5hZ2VyLmpzJztcbmltcG9ydCB0eXBlIHsgR0NJbnRlcmZhY2UgfSBmcm9tICcuLi9zdGF0ZS9HQ1BvbGljeS5qcyc7XG5pbXBvcnQgeyBJbW1vcnRhbEdDUG9saWN5IH0gZnJvbSAnLi4vc3RhdGUvR0NQb2xpY3kuanMnO1xuaW1wb3J0IHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLmpzJztcbmltcG9ydCBzZWxlY3RNZXRhIGZyb20gJy4uL3N0YXRlL3NlbGVjdE1ldGEuanMnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb25UeXBlcywgRGlzcGF0Y2gsIFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHZW5lcmljRGlzcGF0Y2ggPSAodmFsdWU6IGFueSkgPT4gUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB0eXBlIERhdGFDbGllbnREaXNwYXRjaCA9ICh2YWx1ZTogQWN0aW9uVHlwZXMpID0+IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbGxlckNvbnN0cnVjdG9yUHJvcHM8XG4gIEQgZXh0ZW5kcyBHZW5lcmljRGlzcGF0Y2ggPSBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4+IHtcbiAgZGlzcGF0Y2g/OiBEO1xuICBnZXRTdGF0ZT86ICgpID0+IFN0YXRlPHVua25vd24+O1xuICBtZW1vPzogUGljazxNZW1vQ2FjaGUsICdkZW5vcm1hbGl6ZScgfCAncXVlcnknIHwgJ2J1aWxkUXVlcnlLZXknPjtcbiAgZ2NQb2xpY3k/OiBHQ0ludGVyZmFjZTtcbn1cblxuY29uc3QgdW5zZXREaXNwYXRjaCA9IChhY3Rpb246IHVua25vd24pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBEaXNwYXRjaGluZyB3aGlsZSBjb25zdHJ1Y3RpbmcgeW91ciBtaWRkbGV3YXJlIGlzIG5vdCBhbGxvd2VkLiBgICtcbiAgICAgIGBPdGhlciBtaWRkbGV3YXJlIHdvdWxkIG5vdCBiZSBhcHBsaWVkIHRvIHRoaXMgZGlzcGF0Y2guYCxcbiAgKTtcbn07XG5jb25zdCB1bnNldFN0YXRlID0gKCk6IFN0YXRlPHVua25vd24+ID0+IHtcbiAgLy8gVGhpcyBpcyBvbmx5IHRoZSB2YWx1ZSB1bnRpbCBpdCBpcyBzZXQgYnkgdGhlIERhdGFQcm92aWRlclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcblxuLyoqXG4gKiBJbXBlcmF0aXZlIGNvbnRyb2wgb2YgUmVhY3RpdmUgRGF0YSBDbGllbnQgc3RvcmVcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlcjxcbiAgLy8gTk9URTogV2UgdGVtcGxhdGUgb24gZW50aXJlIGRpc3BhdGNoLCBzbyB3ZSBjYW4gYmUgY29udHJhdmFyaWFudCBvbiBBY3Rpb25UeXBlc1xuICBEIGV4dGVuZHMgR2VuZXJpY0Rpc3BhdGNoID0gRGF0YUNsaWVudERpc3BhdGNoLFxuPiB7XG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbiB0byBSZWFjdGl2ZSBEYXRhIENsaWVudCByZWR1Y2VyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2Rpc3BhdGNoXG4gICAqL1xuICBkZWNsYXJlIHByb3RlY3RlZCBfZGlzcGF0Y2g6IEQ7XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXRlc3Qgc3RhdGUgc25hcHNob3QgdGhhdCBpcyBmdWxseSBjb21taXR0ZWQuXG4gICAqXG4gICAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgaW1wZXJhdGl2ZSB1c2UtY2FzZXMgbGlrZSBldmVudCBoYW5kbGVycy5cbiAgICogVGhpcyBzaG91bGQgKm5vdCogYmUgdXNlZCB0byByZW5kZXI7IGluc3RlYWQgdXNlU3VzcGVuc2UoKSBvciB1c2VDYWNoZSgpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0U3RhdGVcbiAgICovXG4gIGRlY2xhcmUgZ2V0U3RhdGU6ICgpID0+IFN0YXRlPHVua25vd24+O1xuICAvKipcbiAgICogU2luZ2xldG9uIHRvIG1haW50YWluIHJlZmVyZW50aWFsIGVxdWFsaXR5IGJldHdlZW4gY2FsbHNcbiAgICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgbWVtbzogUGljazxcbiAgICBNZW1vQ2FjaGUsXG4gICAgJ2Rlbm9ybWFsaXplJyB8ICdxdWVyeScgfCAnYnVpbGRRdWVyeUtleSdcbiAgPjtcblxuICAvKipcbiAgICogSGFuZGxlcyBnYXJiYWdlIGNvbGxlY3Rpb25cbiAgICovXG4gIGRlY2xhcmUgcmVhZG9ubHkgZ2NQb2xpY3k6IEdDSW50ZXJmYWNlO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBkaXNwYXRjaCA9IHVuc2V0RGlzcGF0Y2ggYXMgYW55LFxuICAgIGdldFN0YXRlID0gdW5zZXRTdGF0ZSxcbiAgICBtZW1vID0gbmV3IE1lbW9DYWNoZSgpLFxuICAgIGdjUG9saWN5ID0gbmV3IEltbW9ydGFsR0NQb2xpY3koKSxcbiAgfTogQ29udHJvbGxlckNvbnN0cnVjdG9yUHJvcHM8RD4gPSB7fSkge1xuICAgIHRoaXMuX2Rpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICAgIHRoaXMubWVtbyA9IG1lbW87XG4gICAgdGhpcy5nY1BvbGljeSA9IGdjUG9saWN5O1xuICB9XG5cbiAgLy8gVE9ETzogZHJvcCB3aGVuIGRyb3Agc3VwcG9ydCBmb3IgZGVzdHJ1Y3R1cmluZyAoMC4xNCBhbmQgYmVsb3cpXG4gIHNldCBkaXNwYXRjaChkaXNwYXRjaDogRCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdGhpcy5fZGlzcGF0Y2ggPSBkaXNwYXRjaDtcbiAgfVxuXG4gIC8vIFRPRE86IGRyb3Agd2hlbiBkcm9wIHN1cHBvcnQgZm9yIGRlc3RydWN0dXJpbmcgKDAuMTQgYW5kIGJlbG93KVxuICBnZXQgZGlzcGF0Y2goKTogRCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoO1xuICB9XG5cbiAgYmluZE1pZGRsZXdhcmUoe1xuICAgIGRpc3BhdGNoLFxuICAgIGdldFN0YXRlLFxuICB9OiB7XG4gICAgZGlzcGF0Y2g6IEQ7XG4gICAgZ2V0U3RhdGU6IFJlZHV4TWlkZGxld2FyZUFQSVsnZ2V0U3RhdGUnXTtcbiAgfSkge1xuICAgIHRoaXMuX2Rpc3BhdGNoID0gZGlzcGF0Y2g7XG4gICAgdGhpcy5nZXRTdGF0ZSA9IGdldFN0YXRlO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBBY3Rpb24gRGlzcGF0Y2hlcnMgKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBlbmRwb2ludCB3aXRoIGdpdmVuIGFyZ3MsIHVwZGF0aW5nIHRoZSBSZWFjdGl2ZSBEYXRhIENsaWVudCBjYWNoZSB3aXRoIHRoZSByZXNwb25zZSBvciBlcnJvciB1cG9uIGNvbXBsZXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZmV0Y2hcbiAgICovXG4gIGZldGNoID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPiB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBFWydzY2hlbWEnXSBleHRlbmRzIHVuZGVmaW5lZCB8IG51bGwgPyBSZXR1cm5UeXBlPEU+XG4gIDogUHJvbWlzZTxEZW5vcm1hbGl6ZTxFWydzY2hlbWEnXT4+ID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVGZXRjaChlbmRwb2ludCwge1xuICAgICAgYXJncyxcbiAgICB9KTtcbiAgICB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG5cbiAgICBpZiAoZW5kcG9pbnQuc2NoZW1hKSB7XG4gICAgICByZXR1cm4gYWN0aW9uLm1ldGEucHJvbWlzZS50aGVuKGlucHV0ID0+XG4gICAgICAgIGRlbm9ybWFsaXplKGVuZHBvaW50LnNjaGVtYSwgaW5wdXQsIHt9LCBhcmdzKSxcbiAgICAgICkgYXMgYW55O1xuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uLm1ldGEucHJvbWlzZSBhcyBhbnk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb25seSBpZiBlbmRwb2ludCBpcyBjb25zaWRlcmVkICdzdGFsZSc7IG90aGVyd2lzZSByZXR1cm5zIHVuZGVmaW5lZFxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2ZldGNoSWZTdGFsZVxuICAgKi9cbiAgZmV0Y2hJZlN0YWxlID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHsgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPiB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XVxuICApOiBFWydzY2hlbWEnXSBleHRlbmRzIHVuZGVmaW5lZCB8IG51bGwgPyBSZXR1cm5UeXBlPEU+IHwgUmVzb2x2ZVR5cGU8RT5cbiAgOiBQcm9taXNlPERlbm9ybWFsaXplPEVbJ3NjaGVtYSddPj4gfCBEZW5vcm1hbGl6ZTxFWydzY2hlbWEnXT4gPT4ge1xuICAgIGNvbnN0IHsgZGF0YSwgZXhwaXJlc0F0LCBleHBpcnlTdGF0dXMgfSA9IHRoaXMuZ2V0UmVzcG9uc2VNZXRhKFxuICAgICAgZW5kcG9pbnQsXG4gICAgICAuLi5hcmdzLFxuICAgICAgdGhpcy5nZXRTdGF0ZSgpLFxuICAgICk7XG4gICAgaWYgKGV4cGlyeVN0YXR1cyAhPT0gRXhwaXJ5U3RhdHVzLkludmFsaWQgJiYgRGF0ZS5ub3coKSA8PSBleHBpcmVzQXQpXG4gICAgICByZXR1cm4gZGF0YSBhcyBhbnk7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2goZW5kcG9pbnQsIC4uLmFyZ3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgcmVmZXRjaGluZyBhbmQgc3VzcGVuc2Ugb24gdXNlU3VzcGVuc2Ugd2l0aCB0aGUgc2FtZSBFbmRwb2ludCBhbmQgcGFyYW1ldGVycy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNpbnZhbGlkYXRlXG4gICAqL1xuICBpbnZhbGlkYXRlID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICBhcmdzWzBdICE9PSBudWxsID9cbiAgICAgIHRoaXMuZGlzcGF0Y2goXG4gICAgICAgIGNyZWF0ZUludmFsaWRhdGUoZW5kcG9pbnQsIHtcbiAgICAgICAgICBhcmdzOiBhcmdzIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgLyoqXG4gICAqIEZvcmNlcyByZWZldGNoaW5nIGFuZCBzdXNwZW5zZSBvbiB1c2VTdXNwZW5zZSBvbiBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjaW52YWxpZGF0ZUFsbFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbnZhbGlkYXRpb24gaXMgY29tbWl0ZWQuXG4gICAqL1xuICBpbnZhbGlkYXRlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVJbnZhbGlkYXRlQWxsKChrZXk6IHN0cmluZykgPT4gb3B0aW9ucy50ZXN0S2V5KGtleSkpKTtcblxuICAvKipcbiAgICogU2V0cyBhbGwgbWF0Y2hpbmcgZW5kcG9pbnQgcmVzdWx0IGtleXMgdG8gYmUgU1RBTEUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZXhwaXJlQWxsXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV4cGlyeSBpcyBjb21taXRlZC4gKk5PVCogZmV0Y2ggcHJvbWlzZVxuICAgKi9cbiAgZXhwaXJlQWxsID0gKG9wdGlvbnM6IHsgdGVzdEtleTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH0pID0+XG4gICAgdGhpcy5kaXNwYXRjaChjcmVhdGVFeHBpcmVBbGwoKGtleTogc3RyaW5nKSA9PiBvcHRpb25zLnRlc3RLZXkoa2V5KSkpO1xuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVudGlyZSBSZWFjdGl2ZSBEYXRhIENsaWVudCBjYWNoZS4gQWxsIGluZmxpZ2h0IHJlcXVlc3RzIHdpbGwgbm90IHJlc29sdmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjcmVzZXRFbnRpcmVTdG9yZVxuICAgKi9cbiAgcmVzZXRFbnRpcmVTdG9yZSA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IHRoaXMuZGlzcGF0Y2goY3JlYXRlUmVzZXQoKSk7XG5cbiAgLyoqXG4gICAqIFNldHMgdmFsdWUgZm9yIHRoZSBRdWVyeWFibGUgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0XG4gICAqL1xuICBzZXQ8UyBleHRlbmRzIFF1ZXJ5YWJsZT4oXG4gICAgc2NoZW1hOiBTLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5TY2hlbWFBcmdzPFM+LCAocHJldmlvdXNWYWx1ZTogRGVub3JtYWxpemU8Uz4pID0+IHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIHt9XVxuICApOiBQcm9taXNlPHZvaWQ+O1xuXG4gIHNldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLlNjaGVtYUFyZ3M8Uz4sIGFueV1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmFsdWUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWN0aW9uID0gY3JlYXRlU2V0KHNjaGVtYSwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFNjaGVtYUFyZ3M8Uz4sXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiByZWplY3Qgd2l0aCBlcnJvciBpZiB0aGlzIGZhaWxzIGluIHJlZHVjZXJcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVzcG9uc2UgZm9yIHRoZSBFbmRwb2ludCBhbmQgYXJncy5cbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNzZXRSZXNwb25zZVxuICAgKi9cbiAgc2V0UmVzcG9uc2UgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+LCBhbnldXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNvbHZlVHlwZTxFPiA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChhY3Rpb24pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIGFuIGVycm9yIHJlc3BvbnNlIGZvciB0aGUgRW5kcG9pbnQgYW5kIGFyZ3MuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc2V0RXJyb3JcbiAgICovXG4gIHNldEVycm9yID0gPFxuICAgIEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZSAmIHtcbiAgICAgIHVwZGF0ZT86IEVuZHBvaW50VXBkYXRlRnVuY3Rpb248RT47XG4gICAgfSxcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgRXJyb3JdXG4gICk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBFcnJvciA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhY3Rpb24gPSBjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwge1xuICAgICAgYXJnczogcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpIGFzIFBhcmFtZXRlcnM8RT4sXG4gICAgICByZXNwb25zZSxcbiAgICAgIGVycm9yOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGFuIGluZmxpZ2h0IGZldGNoLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Jlc29sdmVcbiAgICovXG4gIHJlc29sdmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlICYge1xuICAgICAgdXBkYXRlPzogRW5kcG9pbnRVcGRhdGVGdW5jdGlvbjxFPjtcbiAgICB9LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIG1ldGE6XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IEVycm9yO1xuICAgICAgICAgIGZldGNoZWRBdDogbnVtYmVyO1xuICAgICAgICAgIGVycm9yOiB0cnVlO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICBhcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl07XG4gICAgICAgICAgcmVzcG9uc2U6IGFueTtcbiAgICAgICAgICBmZXRjaGVkQXQ6IG51bWJlcjtcbiAgICAgICAgICBlcnJvcj86IGZhbHNlIHwgdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaChjcmVhdGVTZXRSZXNwb25zZShlbmRwb2ludCwgbWV0YSBhcyBhbnkpKTtcbiAgfTtcblxuICAvKipcbiAgICogTWFya3MgYSBuZXcgc3Vic2NyaXB0aW9uIHRvIGEgZ2l2ZW4gRW5kcG9pbnQuXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc3Vic2NyaWJlXG4gICAqL1xuICBzdWJzY3JpYmUgPSA8XG4gICAgRSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPFxuICAgICAgRmV0Y2hGdW5jdGlvbixcbiAgICAgIFNjaGVtYSB8IHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCB8IGZhbHNlXG4gICAgPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgIGFyZ3NbMF0gIT09IG51bGwgP1xuICAgICAgdGhpcy5kaXNwYXRjaChcbiAgICAgICAgY3JlYXRlU3Vic2NyaXB0aW9uKGVuZHBvaW50LCB7XG4gICAgICAgICAgYXJnczogYXJncyBhcyBQYXJhbWV0ZXJzPEU+LFxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIC8qKlxuICAgKiBNYXJrcyBjb21wbGV0aW9uIG9mIHN1YnNjcmlwdGlvbiB0byBhIGdpdmVuIEVuZHBvaW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI3Vuc3Vic2NyaWJlXG4gICAqL1xuICB1bnN1YnNjcmliZSA9IDxcbiAgICBFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U8XG4gICAgICBGZXRjaEZ1bmN0aW9uLFxuICAgICAgU2NoZW1hIHwgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkIHwgZmFsc2VcbiAgICA+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEU+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgYXJnc1swXSAhPT0gbnVsbCA/XG4gICAgICB0aGlzLmRpc3BhdGNoKFxuICAgICAgICBjcmVhdGVVbnN1YnNjcmlwdGlvbihlbmRwb2ludCwge1xuICAgICAgICAgIGFyZ3M6IGFyZ3MgYXMgUGFyYW1ldGVyczxFPixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgOiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAvKioqKioqKioqKioqKioqIE1vcmUgKioqKioqKioqKioqKioqL1xuXG4gIC8qIFRPRE86XG4gIGFib3J0ID0gPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IFByb21pc2U8dm9pZD5cbiAgKi9cblxuICAvKipcbiAgICogR2V0cyBhIHNuYXBzaG90IChodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QpXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjc25hcHNob3RcbiAgICovXG4gIHNuYXBzaG90ID0gKHN0YXRlOiBTdGF0ZTx1bmtub3duPiwgZmV0Y2hlZEF0PzogbnVtYmVyKTogU25hcHNob3Q8dW5rbm93bj4gPT4ge1xuICAgIHJldHVybiBuZXcgU25hcHNob3QodGhpcywgc3RhdGUsIGZldGNoZWRBdCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGVycm9yLCBpZiBhbnksIGZvciBhIGdpdmVuIGVuZHBvaW50LiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igbm8gZXJyb3JzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldEVycm9yXG4gICAqL1xuICBnZXRFcnJvcjxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT4sIFN0YXRlPHVua25vd24+XVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6XG4gICAgICB8IHJlYWRvbmx5IFtudWxsLCBTdGF0ZTx1bmtub3duPl1cbiAgICAgIHwgcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+LCBTdGF0ZTx1bmtub3duPl1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZDtcblxuICBnZXRFcnJvcihcbiAgICBlbmRwb2ludDogRW5kcG9pbnRJbnRlcmZhY2UsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgWy4uLnVua25vd25bXSwgU3RhdGU8dW5rbm93bj5dXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQge1xuICAgIGlmIChyZXN0WzBdID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdC5zbGljZSgwLCByZXN0Lmxlbmd0aCAtIDEpO1xuICAgIGNvbnN0IGtleSA9IGVuZHBvaW50LmtleSguLi5hcmdzKTtcblxuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGNvbnN0IGVycm9yID0gc3RhdGUuZW5kcG9pbnRzW2tleV07XG5cbiAgICBpZiAoZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBtZXRhPy5lcnJvclBvbGljeSA9PT0gJ3NvZnQnKSByZXR1cm47XG5cbiAgICByZXR1cm4gbWV0YT8uZXJyb3IgYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIChnbG9iYWxseSByZWZlcmVudGlhbGx5IHN0YWJsZSkgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gZW5kcG9pbnQvYXJncyBwYWlyIGZyb20gc3RhdGUgZ2l2ZW4uXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL0NvbnRyb2xsZXIjZ2V0UmVzcG9uc2VcbiAgICovXG4gIGdldFJlc3BvbnNlPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZTxcbiAgICBFIGV4dGVuZHMgUGljazxFbmRwb2ludEludGVyZmFjZSwgJ2tleScgfCAnc2NoZW1hJyB8ICdpbnZhbGlkSWZTdGFsZSc+LFxuICA+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFtcbiAgICAgIC4uLihyZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdKSxcbiAgICAgIFN0YXRlPHVua25vd24+LFxuICAgIF1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB2b2lkO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlKFxuICAgIGVuZHBvaW50OiBFbmRwb2ludEludGVyZmFjZSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbLi4udW5rbm93bltdLCBTdGF0ZTx1bmtub3duPl1cbiAgKToge1xuICAgIGRhdGE6IHVua25vd247XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgY291bnRSZWY6ICgpID0+ICgpID0+IHZvaWQ7XG4gIH0ge1xuICAgIC8vIFRPRE86IGJyZWFraW5nOiBvbmx5IHJldHVybiBkYXRhXG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzcG9uc2VNZXRhKGVuZHBvaW50LCAuLi5yZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSAoZ2xvYmFsbHkgcmVmZXJlbnRpYWxseSBzdGFibGUpIHJlc3BvbnNlIGZvciBhIGdpdmVuIGVuZHBvaW50L2FyZ3MgcGFpciBmcm9tIHN0YXRlIGdpdmVuLlxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFJlc3BvbnNlTWV0YVxuICAgKi9cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4ucmVzdDpcbiAgICAgIHwgcmVhZG9ubHkgW251bGwsIFN0YXRlPHVua25vd24+XVxuICAgICAgfCByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPiwgU3RhdGU8dW5rbm93bj5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi4ocmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXSksXG4gICAgICBTdGF0ZTx1bmtub3duPixcbiAgICBdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGEoXG4gICAgZW5kcG9pbnQ6IEVuZHBvaW50SW50ZXJmYWNlLFxuICAgIC4uLnJlc3Q6IHJlYWRvbmx5IFsuLi51bmtub3duW10sIFN0YXRlPHVua25vd24+XVxuICApOiB7XG4gICAgZGF0YTogdW5rbm93bjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8dW5rbm93bj47XG4gICAgLy8gdGhpcyBpcyB0eXBlc2NyaXB0IGdlbmVyaWNzIGJyZWFraW5nXG4gICAgY29uc3QgYXJnczogYW55ID0gcmVzdFxuICAgICAgLnNsaWNlKDAsIHJlc3QubGVuZ3RoIC0gMSlcbiAgICAgIC8vIGhhbmRsZSBGb3JtRGF0YVxuICAgICAgLm1hcChlbnN1cmVQb2pvKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGFyZ3MubGVuZ3RoICE9PSAxIHx8IGFyZ3NbMF0gIT09IG51bGw7XG4gICAgY29uc3Qga2V5ID0gaXNBY3RpdmUgPyBlbmRwb2ludC5rZXkoLi4uYXJncykgOiAnJztcbiAgICBjb25zdCBjYWNoZUVuZHBvaW50cyA9IGlzQWN0aXZlID8gc3RhdGUuZW5kcG9pbnRzW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc2NoZW1hID0gZW5kcG9pbnQuc2NoZW1hO1xuICAgIGNvbnN0IG1ldGEgPSBzZWxlY3RNZXRhKHN0YXRlLCBrZXkpO1xuICAgIGxldCBleHBpcmVzQXQgPSBtZXRhPy5leHBpcmVzQXQ7XG4gICAgLy8gaWYgd2UgaGF2ZSBubyBlbmRwb2ludCBlbnRyeSwgYW5kIG91ciBlbmRwb2ludCBoYXMgYSBzY2hlbWEgLSB0cnkgcXVlcnlpbmcgdGhlIHN0b3JlXG4gICAgY29uc3Qgc2hvdWxkUXVlcnkgPSBjYWNoZUVuZHBvaW50cyA9PT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgaW5wdXQgPVxuICAgICAgc2hvdWxkUXVlcnkgP1xuICAgICAgICAvLyBub3RoaW5nIGluIGVuZHBvaW50cyBjYWNoZSwgc28gdHJ5IHF1ZXJ5aW5nIGlmIHdlIGhhdmUgYSBzY2hlbWEgdG8gZG8gc29cbiAgICAgICAgdGhpcy5tZW1vLmJ1aWxkUXVlcnlLZXkoc2NoZW1hLCBhcmdzLCBzdGF0ZSwga2V5KVxuICAgICAgOiBjYWNoZUVuZHBvaW50cztcblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIC8vIHdoZW4gbm90IGFjdGl2ZSBzaW1wbHkgcmV0dXJuIHRoZSBxdWVyeSBpbnB1dCB3aXRob3V0IGRlbm9ybWFsaXppbmdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGlucHV0IGFzIGFueSxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXMuVmFsaWQsXG4gICAgICAgIGV4cGlyZXNBdDogSW5maW5pdHksXG4gICAgICAgIGNvdW50UmVmOiAoKSA9PiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBpc0ludmFsaWQgPSBmYWxzZTtcbiAgICBpZiAoc2hvdWxkUXVlcnkpIHtcbiAgICAgIGlzSW52YWxpZCA9ICF2YWxpZGF0ZVF1ZXJ5S2V5KGlucHV0KTtcbiAgICAgIC8vIGVuZHBvaW50IHdpdGhvdXQgZW50aXRpZXNcbiAgICB9IGVsc2UgaWYgKCFzY2hlbWEgfHwgIXNjaGVtYUhhc0VudGl0eShzY2hlbWEpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjYWNoZUVuZHBvaW50cyxcbiAgICAgICAgZXhwaXJ5U3RhdHVzOiB0aGlzLmdldEV4cGlyeVN0YXR1cyhcbiAgICAgICAgICAhY2FjaGVFbmRwb2ludHMsXG4gICAgICAgICAgISFlbmRwb2ludC5pbnZhbGlkSWZTdGFsZSxcbiAgICAgICAgICBtZXRhLFxuICAgICAgICApLFxuICAgICAgICBleHBpcmVzQXQ6IGV4cGlyZXNBdCB8fCAwLFxuICAgICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IGtleSB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gdGhpcy5tZW1vLmRlbm9ybWFsaXplKFxuICAgICAgc2NoZW1hLFxuICAgICAgaW5wdXQsXG4gICAgICBzdGF0ZS5lbnRpdGllcyxcbiAgICAgIGFyZ3MsXG4gICAgKSBhcyB7IGRhdGE6IGFueTsgcGF0aHM6IEVudGl0eVBhdGhbXSB9O1xuXG4gICAgaWYgKCFleHBpcmVzQXQpIHtcbiAgICAgIC8vIG5vdGU6IGlzSW52YWxpZCBjYW4gb25seSBiZSB0cnVlIGlmIHNob3VsZFF1ZXJ5IGlzIHRydWVcbiAgICAgIGlmIChpc0ludmFsaWQpIGV4cGlyZXNBdCA9IDE7XG4gICAgICAvLyBmYWxsYmFjayB0byBlbnRpdHkgZXhwaXJ5IHRpbWVcbiAgICAgIGVsc2UgZXhwaXJlc0F0ID0gZW50aXR5RXhwaXJlc0F0KHBhdGhzLCBzdGF0ZS5lbnRpdGllc01ldGEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhLFxuICAgICAgZXhwaXJ5U3RhdHVzOiB0aGlzLmdldEV4cGlyeVN0YXR1cyhcbiAgICAgICAgdHlwZW9mIGRhdGEgPT09ICdzeW1ib2wnLFxuICAgICAgICAhIWVuZHBvaW50LmludmFsaWRJZlN0YWxlIHx8IGlzSW52YWxpZCxcbiAgICAgICAgbWV0YSxcbiAgICAgICksXG4gICAgICBleHBpcmVzQXQsXG4gICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IGtleSwgcGF0aHMgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWVyaWVzIHRoZSBzdG9yZSBmb3IgYSBRdWVyYWJsZSBzY2hlbWFcbiAgICogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQ29udHJvbGxlciNnZXRcbiAgICovXG4gIGdldDxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4ucmVzdDogcmVhZG9ubHkgW1xuICAgICAgLi4uU2NoZW1hQXJnczxTPixcbiAgICAgIFBpY2s8U3RhdGU8dW5rbm93bj4sICdlbnRpdGllcycgfCAnaW5kZXhlcyc+LFxuICAgIF1cbiAgKTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8YW55PjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLm1hcChlbnN1cmVQb2pvKSBhcyBTY2hlbWFBcmdzPFM+O1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLm1lbW8ucXVlcnkoc2NoZW1hLCBhcmdzLCBzdGF0ZSk7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3ltYm9sJyA/IHVuZGVmaW5lZCA6IGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyB0aGUgc3RvcmUgZm9yIGEgUXVlcmFibGUgc2NoZW1hOyBwcm92aWRpbmcgcmVsYXRlZCBtZXRhZGF0YVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9Db250cm9sbGVyI2dldFF1ZXJ5TWV0YVxuICAgKi9cbiAgZ2V0UXVlcnlNZXRhPFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5yZXN0OiByZWFkb25seSBbXG4gICAgICAuLi5TY2hlbWFBcmdzPFM+LFxuICAgICAgUGljazxTdGF0ZTx1bmtub3duPiwgJ2VudGl0aWVzJyB8ICdpbmRleGVzJz4sXG4gICAgXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZDtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgY29uc3Qgc3RhdGUgPSByZXN0W3Jlc3QubGVuZ3RoIC0gMV0gYXMgU3RhdGU8YW55PjtcbiAgICAvLyB0aGlzIGlzIHR5cGVzY3JpcHQgZ2VuZXJpY3MgYnJlYWtpbmdcbiAgICBjb25zdCBhcmdzOiBhbnkgPSByZXN0XG4gICAgICAuc2xpY2UoMCwgcmVzdC5sZW5ndGggLSAxKVxuICAgICAgLm1hcChlbnN1cmVQb2pvKSBhcyBTY2hlbWFBcmdzPFM+O1xuXG4gICAgY29uc3QgeyBkYXRhLCBwYXRocyB9ID0gdGhpcy5tZW1vLnF1ZXJ5KHNjaGVtYSwgYXJncywgc3RhdGUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHR5cGVvZiBkYXRhID09PSAnc3ltYm9sJyA/IHVuZGVmaW5lZCA6IGRhdGEsXG4gICAgICBjb3VudFJlZjogdGhpcy5nY1BvbGljeS5jcmVhdGVDb3VudFJlZih7IHBhdGhzIH0pLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEV4cGlyeVN0YXR1cyhcbiAgICBpbnZhbGlkRGF0YTogYm9vbGVhbixcbiAgICBpbnZhbGlkSWZTdGFsZTogYm9vbGVhbixcbiAgICBtZXRhOiB7IGVycm9yPzogdW5rbm93bjsgaW52YWxpZGF0ZWQ/OiB1bmtub3duIH0gPSB7fSxcbiAgKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvY29uY2VwdHMvZXhwaXJ5LXBvbGljeSNleHBpcnktc3RhdHVzXG4gICAgLy8gd2UgZG9uJ3QgdHJhY2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFsZSBvciBmcmVzaCBiZWNhdXNlIHRoYXQgaXMgdGllZCB0byB0cmlnZ2VyaW5nXG4gICAgLy8gY29uZGl0aW9uc1xuICAgIHJldHVybiAoXG4gICAgICBtZXRhLmludmFsaWRhdGVkIHx8IChpbnZhbGlkRGF0YSAmJiAhbWV0YS5lcnJvcikgPyBFeHBpcnlTdGF0dXMuSW52YWxpZFxuICAgICAgOiBpbnZhbGlkRGF0YSB8fCBpbnZhbGlkSWZTdGFsZSA/IEV4cGlyeVN0YXR1cy5JbnZhbGlkSWZTdGFsZVxuICAgICAgOiBFeHBpcnlTdGF0dXMuVmFsaWRcbiAgICApO1xuICB9XG59XG5cbi8vIGJlbmNobWFyazogaHR0cHM6Ly93d3cubWVhc3VyZXRoYXQubmV0L0JlbmNobWFya3MvU2hvdy8yNDY5MS8wL21pbi1yZWR1Y2VyLXZzLWltcGVyYXRpdmUtd2l0aC1wYXRoc1xuLy8gZWFybGllc3QgZXhwaXJ5IGRpY3RhdGVzIGFnZVxuZnVuY3Rpb24gZW50aXR5RXhwaXJlc0F0KFxuICBwYXRoczogRW50aXR5UGF0aFtdLFxuICBlbnRpdGllc01ldGE6IHtcbiAgICByZWFkb25seSBbZW50aXR5S2V5OiBzdHJpbmddOiB7XG4gICAgICByZWFkb25seSBbcGs6IHN0cmluZ106IHtcbiAgICAgICAgcmVhZG9ubHkgZGF0ZTogbnVtYmVyO1xuICAgICAgICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgICAgcmVhZG9ubHkgZmV0Y2hlZEF0OiBudW1iZXI7IC8vIFRoaXMgaXMgb25seSB0aGUgdmFsdWUgdW50aWwgaXQgaXMgc2V0IGJ5IHRoZSBEYXRhUHJvdmlkZXJcbiAgICAgIH07XG4gICAgfTtcbiAgfSxcbikge1xuICBsZXQgZXhwaXJlc0F0ID0gSW5maW5pdHk7XG4gIGZvciAoY29uc3QgeyBrZXksIHBrIH0gb2YgcGF0aHMpIHtcbiAgICBjb25zdCBlbnRpdHlFeHBpcnkgPSBlbnRpdGllc01ldGFba2V5XT8uW3BrXT8uZXhwaXJlc0F0O1xuICAgIC8vIGV4cGlyZXNBdCB3aWxsIGFsd2F5cyByZXNvbHZlIHRvIGZhbHNlIHdpdGggYW55IGNvbXBhcmlzb25cbiAgICBpZiAoZW50aXR5RXhwaXJ5IDwgZXhwaXJlc0F0KSBleHBpcmVzQXQgPSBlbnRpdHlFeHBpcnk7XG4gIH1cbiAgcmV0dXJuIGV4cGlyZXNBdDtcbn1cblxuLyoqIERldGVybWluZSB3aGV0aGVyIHRoZSBzY2hlbWEgaGFzIGFueSBlbnRpdGllcy5cbiAqXG4gKiBXaXRob3V0IGVudGl0aWVzLCBkZW5vcm1hbGl6YXRpb24gaXMgbm90IG5lZWRlZCwgYW5kIHJlc3VsdHMgc2hvdWxkIG5vdCBiZSBxdWVyaWVkLlxuICovXG5mdW5jdGlvbiBzY2hlbWFIYXNFbnRpdHkoc2NoZW1hOiBTY2hlbWEpOiBib29sZWFuIHtcbiAgaWYgKGlzRW50aXR5KHNjaGVtYSkpIHJldHVybiB0cnVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKVxuICAgIHJldHVybiBzY2hlbWEubGVuZ3RoICE9PSAwICYmIHNjaGVtYUhhc0VudGl0eShzY2hlbWFbMF0pO1xuICBpZiAoc2NoZW1hICYmICh0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygc2NoZW1hID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNvbnN0IG5lc3RlZFNjaGVtYSA9XG4gICAgICAnc2NoZW1hJyBpbiBzY2hlbWEgPyAoc2NoZW1hLnNjaGVtYSBhcyBSZWNvcmQ8c3RyaW5nLCBTY2hlbWE+KSA6IHNjaGVtYTtcbiAgICBpZiAodHlwZW9mIG5lc3RlZFNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNjaGVtYUhhc0VudGl0eShuZXN0ZWRTY2hlbWEpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhuZXN0ZWRTY2hlbWEpLnNvbWUoeCA9PiBzY2hlbWFIYXNFbnRpdHkoeCkpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IHR5cGUgeyBFcnJvclR5cGVzIH07XG5cbmNsYXNzIFNuYXBzaG90PFQgPSB1bmtub3duPiBpbXBsZW1lbnRzIFNuYXBzaG90SW50ZXJmYWNlIHtcbiAgc3RhdGljIHJlYWRvbmx5IGFib3J0ID0gbmV3IEFib3J0T3B0aW1pc3RpYygpO1xuXG4gIHByaXZhdGUgc3RhdGU6IFN0YXRlPFQ+O1xuICBwcml2YXRlIGNvbnRyb2xsZXI6IENvbnRyb2xsZXI7XG4gIHJlYWRvbmx5IGZldGNoZWRBdDogbnVtYmVyO1xuICByZWFkb25seSBhYm9ydCA9IFNuYXBzaG90LmFib3J0O1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXI6IENvbnRyb2xsZXIsIHN0YXRlOiBTdGF0ZTxUPiwgZmV0Y2hlZEF0ID0gMCkge1xuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyO1xuICAgIHRoaXMuZmV0Y2hlZEF0ID0gZmV0Y2hlZEF0O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKiBEYXRhIEFjY2VzcyAqKioqKioqKioqKioqKiovXG4gIC8qKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRSZXNwb25zZSAqL1xuICBnZXRSZXNwb25zZTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8RSBleHRlbmRzIEVuZHBvaW50SW50ZXJmYWNlPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFPl1cbiAgKToge1xuICAgIGRhdGE6IERlbm9ybWFsaXplTnVsbGFibGU8RVsnc2NoZW1hJ10+O1xuICAgIGV4cGlyeVN0YXR1czogRXhwaXJ5U3RhdHVzO1xuICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICB9O1xuXG4gIGdldFJlc3BvbnNlPFxuICAgIEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5JyB8ICdzY2hlbWEnIHwgJ2ludmFsaWRJZlN0YWxlJz4sXG4gID4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2U8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRSZXNwb25zZShlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvU25hcHNob3QjZ2V0UmVzcG9uc2VNZXRhICovXG4gIGdldFJlc3BvbnNlTWV0YTxFIGV4dGVuZHMgRW5kcG9pbnRJbnRlcmZhY2U+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFtudWxsXVxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxFWydzY2hlbWEnXT47XG4gICAgZXhwaXJ5U3RhdHVzOiBFeHBpcnlTdGF0dXM7XG4gICAgZXhwaXJlc0F0OiBudW1iZXI7XG4gIH07XG5cbiAgZ2V0UmVzcG9uc2VNZXRhPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfTtcblxuICBnZXRSZXNwb25zZU1ldGE8XG4gICAgRSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknIHwgJ3NjaGVtYScgfCAnaW52YWxpZElmU3RhbGUnPixcbiAgPihcbiAgICBlbmRwb2ludDogRSxcbiAgICAuLi5hcmdzOiByZWFkb25seSBbLi4uUGFyYW1ldGVyczxFWydrZXknXT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IHtcbiAgICBkYXRhOiBEZW5vcm1hbGl6ZU51bGxhYmxlPEVbJ3NjaGVtYSddPjtcbiAgICBleHBpcnlTdGF0dXM6IEV4cGlyeVN0YXR1cztcbiAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRSZXNwb25zZU1ldGEoZW5kcG9pbnQsIC4uLmFyZ3MsIHRoaXMuc3RhdGUpO1xuICB9XG5cbiAgLyoqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldEVycm9yICovXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBFbmRwb2ludEludGVyZmFjZT4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RT5dIHwgcmVhZG9ubHkgW251bGxdXG4gICk6IEVycm9yVHlwZXMgfCB1bmRlZmluZWQ7XG5cbiAgZ2V0RXJyb3I8RSBleHRlbmRzIFBpY2s8RW5kcG9pbnRJbnRlcmZhY2UsICdrZXknPj4oXG4gICAgZW5kcG9pbnQ6IEUsXG4gICAgLi4uYXJnczogcmVhZG9ubHkgWy4uLlBhcmFtZXRlcnM8RVsna2V5J10+XSB8IHJlYWRvbmx5IFtudWxsXVxuICApOiBFcnJvclR5cGVzIHwgdW5kZWZpbmVkO1xuXG4gIGdldEVycm9yPEUgZXh0ZW5kcyBQaWNrPEVuZHBvaW50SW50ZXJmYWNlLCAna2V5Jz4+KFxuICAgIGVuZHBvaW50OiBFLFxuICAgIC4uLmFyZ3M6IHJlYWRvbmx5IFsuLi5QYXJhbWV0ZXJzPEVbJ2tleSddPl0gfCByZWFkb25seSBbbnVsbF1cbiAgKTogRXJyb3JUeXBlcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRFcnJvcihlbmRwb2ludCwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVkIG1lbW9pemVkIHZhbHVlIGZvciBhbnkgUXVlcmFibGUgc2NoZW1hXG4gICAqIEBzZWUgaHR0cHM6Ly9kYXRhY2xpZW50LmlvL2RvY3MvYXBpL1NuYXBzaG90I2dldFxuICAgKi9cbiAgZ2V0PFMgZXh0ZW5kcyBRdWVyeWFibGU+KFxuICAgIHNjaGVtYTogUyxcbiAgICAuLi5hcmdzOiBTY2hlbWFBcmdzPFM+XG4gICk6IERlbm9ybWFsaXplTnVsbGFibGU8Uz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXIuZ2V0KHNjaGVtYSwgLi4uYXJncywgdGhpcy5zdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUXVlcmllcyB0aGUgc3RvcmUgZm9yIGEgUXVlcmFibGUgc2NoZW1hOyBwcm92aWRpbmcgcmVsYXRlZCBtZXRhZGF0YVxuICAgKiBAc2VlIGh0dHBzOi8vZGF0YWNsaWVudC5pby9kb2NzL2FwaS9TbmFwc2hvdCNnZXRRdWVyeU1ldGFcbiAgICovXG4gIGdldFF1ZXJ5TWV0YTxTIGV4dGVuZHMgUXVlcnlhYmxlPihcbiAgICBzY2hlbWE6IFMsXG4gICAgLi4uYXJnczogU2NoZW1hQXJnczxTPlxuICApOiB7XG4gICAgZGF0YTogRGVub3JtYWxpemVOdWxsYWJsZTxTPiB8IHVuZGVmaW5lZDtcbiAgICBjb3VudFJlZjogKCkgPT4gKCkgPT4gdm9pZDtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbGxlci5nZXRRdWVyeU1ldGEoc2NoZW1hLCAu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
|
package/legacy/index.js
CHANGED
|
@@ -16,4 +16,4 @@ export { _actionTypes as actionTypes };
|
|
|
16
16
|
/* istanbul ignore next */
|
|
17
17
|
export * from './types.js';
|
|
18
18
|
export * from './manager/index.js';
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSU5URVJOQUxfXyIsIl9fSU5URVJOQUxfXyIsIkV4cGlyeVN0YXR1cyIsImRlZmF1bHQiLCJOZXR3b3JrTWFuYWdlciIsIlJlc2V0RXJyb3IiLCJjcmVhdGVSZWR1Y2VyIiwiaW5pdGlhbFN0YXRlIiwiYXBwbHlNYW5hZ2VyIiwiaW5pdE1hbmFnZXIiLCJDb250cm9sbGVyIiwiX2FjdGlvbnMiLCJhY3Rpb25zIiwiX2FjdGlvblR5cGVzIiwiYWN0aW9uVHlwZXMiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgX19JTlRFUk5BTF9fIGZyb20gJy4vaW50ZXJuYWwuanMnO1xuZXhwb3J0IHR5cGUge1xuICBOZXR3b3JrRXJyb3IsXG4gIFVua25vd25FcnJvcixcbiAgRXJyb3JUeXBlcyxcbiAgU2NoZW1hLFxuICBFbmRwb2ludEludGVyZmFjZSxcbiAgRW50aXR5SW50ZXJmYWNlLFxuICBTY2hlbWFDbGFzcyxcbiAgUmVzb2x2ZVR5cGUsXG4gIERlbm9ybWFsaXplTnVsbGFibGUsXG4gIERlbm9ybWFsaXplLFxuICBOb3JtYWxpemUsXG4gIE5vcm1hbGl6ZU51bGxhYmxlLFxuICBGZXRjaEZ1bmN0aW9uLFxuICBFbmRwb2ludEV4dHJhT3B0aW9ucyxcbiAgUXVlcnlhYmxlLFxuICBTY2hlbWFBcmdzLFxuICBNZXJnZWFibGUsXG4gIElRdWVyeURlbGVnYXRlLFxuICBJTm9ybWFsaXplRGVsZWdhdGUsXG4gIE5JLFxufSBmcm9tICdAZGF0YS1jbGllbnQvbm9ybWFsaXpyJztcbmV4cG9ydCB7IEV4cGlyeVN0YXR1cyB9IGZyb20gJ0BkYXRhLWNsaWVudC9ub3JtYWxpenInO1xuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBOZXR3b3JrTWFuYWdlcixcbiAgUmVzZXRFcnJvcixcbn0gZnJvbSAnLi9tYW5hZ2VyL05ldHdvcmtNYW5hZ2VyLmpzJztcbmV4cG9ydCB0eXBlIHsgRmV0Y2hpbmdNZXRhIH0gZnJvbSAnLi9tYW5hZ2VyL05ldHdvcmtNYW5hZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RhdGUvR0NQb2xpY3kuanMnO1xuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBjcmVhdGVSZWR1Y2VyLFxuICBpbml0aWFsU3RhdGUsXG59IGZyb20gJy4vc3RhdGUvcmVkdWNlci9jcmVhdGVSZWR1Y2VyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwbHlNYW5hZ2VyIH0gZnJvbSAnLi9tYW5hZ2VyL2FwcGx5TWFuYWdlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGluaXRNYW5hZ2VyIH0gZnJvbSAnLi9tYW5hZ2VyL2luaXRNYW5hZ2VyLmpzJztcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb250cm9sbGVyIH0gZnJvbSAnLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHR5cGUge1xuICBEYXRhQ2xpZW50RGlzcGF0Y2gsXG4gIEdlbmVyaWNEaXNwYXRjaCxcbn0gZnJvbSAnLi9jb250cm9sbGVyL0NvbnRyb2xsZXIuanMnO1xuZXhwb3J0ICogYXMgYWN0aW9ucyBmcm9tICcuL2NvbnRyb2xsZXIvYWN0aW9ucy9pbmRleC5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29udHJvbGxlci90eXBlcy5qcyc7XG4vKiogQHNlZSBodHRwczovL2RhdGFjbGllbnQuaW8vZG9jcy9hcGkvQWN0aW9ucyAqL1xuZXhwb3J0ICogYXMgYWN0aW9uVHlwZXMgZnJvbSAnLi9hY3Rpb25UeXBlcy5qcyc7XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21hbmFnZXIvaW5kZXguanMnO1xuIl0sIm1hcHBpbmdzIjoiNkJBQThCLGVBQWU7QUFBQSxTQUFBQSxXQUFBLElBQWpDQyxZQUFZO0FBdUJ4QixTQUFTQyxZQUFZLFFBQVEsd0JBQXdCO0FBQ3JELFNBQ0VDLE9BQU8sSUFBSUMsY0FBYyxFQUN6QkMsVUFBVSxRQUNMLDZCQUE2QjtBQUVwQyxjQUFjLHFCQUFxQjtBQUNuQyxTQUNFRixPQUFPLElBQUlHLGFBQWEsRUFDeEJDLFlBQVksUUFDUCxrQ0FBa0M7QUFDekMsU0FBU0osT0FBTyxJQUFJSyxZQUFZLFFBQVEsMkJBQTJCO0FBQ25FLFNBQVNMLE9BQU8sSUFBSU0sV0FBVyxRQUFRLDBCQUEwQjtBQUVqRSxTQUFTTixPQUFPLElBQUlPLFVBQVUsUUFBUSw0QkFBNEI7QUFBQyxZQUFBQyxRQUFBLE1BSzFDLCtCQUErQjtBQUFBLFNBQUFBLFFBQUEsSUFBNUNDLE9BQU87QUFFbkIsY0FBYyx1QkFBdUI7QUFDckM7QUFBQSxZQUFBQyxZQUFBLE1BQzZCLGtCQUFrQjtBQUFBLFNBQUFBLFlBQUEsSUFBbkNDLFdBQVc7QUFDdkI7QUFDQSxjQUFjLFlBQVk7QUFDMUIsY0FBYyxvQkFBb0IiLCJpZ25vcmVMaXN0IjpbXX0=
|