@eo-sdk/client 9.3.0-rc.1 → 9.3.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/app/eo-framework/actions/actions/delete-action/delete/delete.component.d.ts +2 -1
  2. package/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts +4 -3
  3. package/app/eo-framework-core/search/app-search.service.d.ts +5 -0
  4. package/assets/_default/i18n/de.json +6 -1
  5. package/assets/_default/i18n/en.json +6 -1
  6. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js +71 -61
  7. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.js.map +1 -1
  8. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js +2 -2
  9. package/bundles/eo-sdk-client-projects-eo-sdk-core.umd.min.js.map +1 -1
  10. package/bundles/eo-sdk-client.umd.js +40 -10
  11. package/bundles/eo-sdk-client.umd.js.map +1 -1
  12. package/bundles/eo-sdk-client.umd.min.js +1 -1
  13. package/bundles/eo-sdk-client.umd.min.js.map +1 -1
  14. package/eo-sdk-client.metadata.json +1 -1
  15. package/esm2015/app/eo-client/about-state/about-state.component.js +3 -3
  16. package/esm2015/app/eo-framework/actions/actions/delete-action/delete/delete.component.js +14 -6
  17. package/esm2015/app/eo-framework/app-shell/app-bar/app-search/app-search.component.js +10 -4
  18. package/esm2015/app/eo-framework/ui/signature-tab/signature-tab.component.js +3 -3
  19. package/esm2015/app/eo-framework-core/search/app-search.service.js +15 -1
  20. package/esm2015/projects/eo-sdk/core/lib/service/dms/dms.service.js +6 -2
  21. package/esm2015/projects/eo-sdk/core/lib/service/search/search-query.model.js +64 -62
  22. package/esm2015/projects/eo-sdk/core/lib/service/search/search.service.js +5 -2
  23. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js +71 -62
  24. package/fesm2015/eo-sdk-client-projects-eo-sdk-core.js.map +1 -1
  25. package/fesm2015/eo-sdk-client.js +38 -10
  26. package/fesm2015/eo-sdk-client.js.map +1 -1
  27. package/package.json +2 -2
  28. package/projects/eo-sdk/core/eo-sdk-client-projects-eo-sdk-core.metadata.json +1 -1
  29. package/projects/eo-sdk/core/lib/service/dms/dms.service.d.ts +2 -1
  30. package/projects/eo-sdk/core/lib/service/search/search-query.model.d.ts +3 -1
  31. package/projects/eo-sdk/core/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { DatePipe } from "@angular/common";
1
+ import { DatePipe } from '@angular/common';
2
2
  //export type QueryScope = 'indexdate' | 'content' | 'all';
3
3
  export var QueryScope;
4
4
  (function (QueryScope) {
@@ -165,7 +165,7 @@ export class SearchQuery {
165
165
  const queryJson = {};
166
166
  // add type filters
167
167
  if (this.types.length > 0) {
168
- queryJson.types = this.types.map(t => typeof t === "string" ? t : t.name);
168
+ queryJson.types = this.types.map(t => typeof t === 'string' ? t : t.name);
169
169
  }
170
170
  // add context folder type filters
171
171
  if (this.contextFolderTypes.length > 0) {
@@ -235,73 +235,75 @@ export class SearchQuery {
235
235
  * Base Parameters for a Search Query
236
236
  */
237
237
  SearchQuery.BASE_PARAMS = {
238
- TYPE: "type",
239
- CREATOR: "creator",
240
- CREATED: "created",
241
- MODIFIER: "modifier",
242
- MODIFIED: "modified",
243
- FILESIZE: "filesize",
244
- FILENAME: "filename",
245
- MIMETYPEGROUP: "mimetypegroup"
238
+ TYPE: 'type',
239
+ CREATOR: 'creator',
240
+ CREATED: 'created',
241
+ MODIFIER: 'modifier',
242
+ MODIFIED: 'modified',
243
+ FILESIZE: 'filesize',
244
+ FILENAME: 'filename',
245
+ MIMETYPEGROUP: 'mimetypegroup',
246
+ FOLDER: 'folder'
246
247
  };
247
248
  /**
248
249
  * Time period buckets property names
249
250
  */
250
251
  SearchQuery.TIME_PERIOD_BUCKETS = {
251
- TODAY: "today",
252
- YESTERDAY: "yesterday",
253
- THIS_WEEK: "thisweek",
254
- LAST_WEEK: "lastweek",
255
- THIS_MONTH: "thismonth",
256
- LAST_MONTH: "lastmonth",
257
- THIS_YEAR: "thisyear",
258
- LAST_YEAR: "lastyear"
252
+ TODAY: 'today',
253
+ YESTERDAY: 'yesterday',
254
+ THIS_WEEK: 'thisweek',
255
+ LAST_WEEK: 'lastweek',
256
+ THIS_MONTH: 'thismonth',
257
+ LAST_MONTH: 'lastmonth',
258
+ THIS_YEAR: 'thisyear',
259
+ LAST_YEAR: 'lastyear'
259
260
  };
260
261
  /**
261
262
  * mimetype buckets property names
262
263
  */
263
264
  SearchQuery.MIMETYPEGROUP_BUCKETS = {
264
- PDF: "pdf",
265
- MAIL: "mail",
266
- WORD: "word",
267
- IMAGE: "image",
268
- OCTET_STREAM: "octet-stream",
269
- TXT: "txt",
270
- EXCEL: "excel",
271
- POWERPOINT: "powerpoint",
272
- VIDEO: "video",
273
- HTML: "html",
274
- AUDIO: "audio",
275
- ZIP: "zip"
265
+ PDF: 'pdf',
266
+ MAIL: 'mail',
267
+ WORD: 'word',
268
+ IMAGE: 'image',
269
+ OCTET_STREAM: 'octet-stream',
270
+ TXT: 'txt',
271
+ EXCEL: 'excel',
272
+ POWERPOINT: 'powerpoint',
273
+ VIDEO: 'video',
274
+ HTML: 'html',
275
+ AUDIO: 'audio',
276
+ ZIP: 'zip'
276
277
  };
277
278
  /**
278
279
  * filesize buckets property names
279
280
  */
280
281
  SearchQuery.FILE_SIZE_BUCKETS = {
281
- LT1MB: "lt1MB",
282
- LT10MB: "lt10MB",
283
- LT100MB: "lt100MB",
284
- GT100MB: "gt100MB"
282
+ NONE: 'none',
283
+ LT1MB: 'lt1MB',
284
+ LT10MB: 'lt10MB',
285
+ LT100MB: 'lt100MB',
286
+ GT100MB: 'gt100MB'
285
287
  };
286
288
  // list of things that may have changed the current query
287
289
  SearchQuery.UPDATE_CAUSE = {
288
- TOGGLED_TYPE: "cause.type.toggled",
289
- TOGGLED_EXPERTMODE: "cause.expertmode.toggled",
290
- TERM_SET: "cause.term.set",
291
- TYPES_SET: "cause.types.set",
292
- CONTEXT_FOLDER_SET: "cause.contextfolder.set",
293
- TOGGLED_FILTER: "cause.filter.toggled",
294
- ADDED_FILTER: "cause.filter.added",
295
- REMOVED_FILTER: "cause.filter.removed",
290
+ TOGGLED_TYPE: 'cause.type.toggled',
291
+ TOGGLED_EXPERTMODE: 'cause.expertmode.toggled',
292
+ TERM_SET: 'cause.term.set',
293
+ TYPES_SET: 'cause.types.set',
294
+ CONTEXT_FOLDER_SET: 'cause.contextfolder.set',
295
+ TOGGLED_FILTER: 'cause.filter.toggled',
296
+ ADDED_FILTER: 'cause.filter.added',
297
+ REMOVED_FILTER: 'cause.filter.removed',
296
298
  };
297
299
  /**
298
300
  * Detault Search mode Index
299
301
  */
300
- SearchQuery.DEFAULT_SEARCH_MODE = "idxs";
302
+ SearchQuery.DEFAULT_SEARCH_MODE = 'idxs';
301
303
  /**
302
304
  * Search mode for Full test Search
303
305
  */
304
- SearchQuery.FULLTEXT_SEARCH_MODE = "fts";
306
+ SearchQuery.FULLTEXT_SEARCH_MODE = 'fts';
305
307
  /**
306
308
  * @ignore
307
309
  * Creates the Model of Sort Options
@@ -353,7 +355,7 @@ export class SearchState {
353
355
  }
354
356
  addAggregations(type, key, value, agg) {
355
357
  switch (type) {
356
- case "contexttype": {
358
+ case 'contexttype': {
357
359
  this.aggregations.contextType.set(key, value);
358
360
  break;
359
361
  }
@@ -388,7 +390,7 @@ export class SearchState {
388
390
  value: value,
389
391
  from: agg.from,
390
392
  to: agg.to || Infinity,
391
- label: key.replace("gt", "> ").replace("lt", "< ")
393
+ label: key.replace('gt', '> ').replace('lt', '< ')
392
394
  });
393
395
  break;
394
396
  }
@@ -422,10 +424,10 @@ export class SearchFilter {
422
424
  formatDate(value) {
423
425
  return this.transformDate && value
424
426
  ? this.transformDate.timezone
425
- ? new DatePipe("en").transform(value, "yyyy-MM-ddTZ")
427
+ ? new DatePipe('en').transform(value, 'yyyy-MM-ddTZ')
426
428
  : this.transformDate.time
427
- ? new Date(value).toISOString().slice(0, 16) + "Z"
428
- : new DatePipe("en").transform(value, "yyyy-MM-dd")
429
+ ? new Date(value).toISOString().slice(0, 16) + 'Z'
430
+ : new DatePipe('en').transform(value, 'yyyy-MM-dd')
429
431
  : value;
430
432
  }
431
433
  toQuery() {
@@ -480,21 +482,21 @@ export class SearchFilter {
480
482
  */
481
483
  SearchFilter.OPERATOR = {
482
484
  /** equal */
483
- EQUAL: "eq",
485
+ EQUAL: 'eq',
484
486
  /** match (for string with classification "path6666") */
485
- MATCH: "match",
487
+ MATCH: 'match',
486
488
  /** match at least one of the provided values (value has to be an array) */
487
- IN: "in",
489
+ IN: 'in',
488
490
  /** greater than */
489
- GREATER_THAN: "gt",
491
+ GREATER_THAN: 'gt',
490
492
  /** greater than or equal */
491
- GREATER_OR_EQUAL: "gte",
492
- LESS_THAN: "lt",
493
- LESS_OR_EQUAL: "lte",
494
- INTERVAL: "gtlt",
495
- INTERVAL_INCLUDE_BOTH: "gtelte",
496
- INTERVAL_INCLUDE_TO: "gtlte",
497
- INTERVAL_INCLUDE_FROM: "gtelt",
498
- RANGE: "rg" // aggegation ranges
493
+ GREATER_OR_EQUAL: 'gte',
494
+ LESS_THAN: 'lt',
495
+ LESS_OR_EQUAL: 'lte',
496
+ INTERVAL: 'gtlt',
497
+ INTERVAL_INCLUDE_BOTH: 'gtelte',
498
+ INTERVAL_INCLUDE_TO: 'gtlte',
499
+ INTERVAL_INCLUDE_FROM: 'gtelt',
500
+ RANGE: 'rg' // aggegation ranges
499
501
  };
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXF1ZXJ5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL3NlYXJjaC9zZWFyY2gtcXVlcnkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLDJEQUEyRDtBQUUzRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLHlCQUFXLENBQUE7SUFDWCxpQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBd0IsQ0FBQTtBQUMxQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUF1SXRCO1FBbkRBOztXQUVHO1FBQ0ksVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDaEM7O1dBRUc7UUFDSSx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBQzdDOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixFQUFFLENBQUM7UUFLcEM7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ0ksZUFBVSxHQUFXLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM1RDs7V0FFRztRQUNJLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUN0Qzs7V0FFRztRQUNJLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQjs7V0FFRztRQUNJLFVBQUssR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUV2QyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztJQVNyQixDQUFDO0lBRWhCOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FB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Q2hCLFVBQWUsRUFDZixXQUFpQjtRQUVqQixPQUFPLENBQ0wsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQzFCLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUTtZQUMxQixJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVc7WUFDaEMsQ0FBQyxJQUFJLENBQUMsVUFBVSxZQUFZLEtBQUs7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssVUFBVSxDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FDcEMsQ0FBQztJQUNKLENBQUM7O0FBbEhEOztHQUVHO0FBQ1cscUJBQVEsR0FBRztJQUN2QixZQUFZO0lBQ1osS0FBSyxFQUFFLElBQUk7SUFDWCx3REFBd0Q7SUFDeEQsS0FBSyxFQUFFLE9BQU87SUFDZCw0RUFBNEU7SUFDNUUsRUFBRSxFQUFFLElBQUk7SUFDUixtQkFBbUI7SUFDbkIsWUFBWSxFQUFFLElBQUk7SUFDbEIsNEJBQTRCO0lBQzVCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsU0FBUyxFQUFFLElBQUk7SUFDZixhQUFhLEVBQUUsS0FBSztJQUNwQixRQUFRLEVBQUUsTUFBTTtJQUNoQixxQkFBcUIsRUFBRSxRQUFRO0lBQy9CLG1CQUFtQixFQUFFLE9BQU87SUFDNUIscUJBQXFCLEVBQUUsT0FBTztJQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtDQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZWR1Y2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JqZWN0VHlwZX0gZnJvbSBcIi4uLy4uL21vZGVsL29iamVjdC10eXBlLm1vZGVsXCI7XG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbi8vZXhwb3J0IHR5cGUgUXVlcnlTY29wZSA9ICdpbmRleGRhdGUnIHwgJ2NvbnRlbnQnIHwgJ2FsbCc7XG5cbmV4cG9ydCBlbnVtIFF1ZXJ5U2NvcGUge1xuICBBTEwgPSAnYWxsJyxcbiAgQ09OVEVOVCA9ICdjb250ZW50JyxcbiAgSU5ERVhfREFUQSA9ICdpbmRleGRhdGEnXG59XG5cbi8qKlxuICogVGhlIFNlYXJjaFF1ZXJ5IENsYXNzXG4gKlxuICogU2VlIHtAbGluayBTZWFyY2hTZXJ2aWNlfSBmb3IgVXNhZ2VcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFF1ZXJ5IHtcbiAgLyoqXG4gICAqIEJhc2UgUGFyYW1ldGVycyBmb3IgYSBTZWFyY2ggUXVlcnlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgQkFTRV9QQVJBTVMgPSB7XG4gICAgVFlQRTogXCJ0eXBlXCIsXG4gICAgQ1JFQVRPUjogXCJjcmVhdG9yXCIsXG4gICAgQ1JFQVRFRDogXCJjcmVhdGVkXCIsXG4gICAgTU9ESUZJRVI6IFwibW9kaWZpZXJcIixcbiAgICBNT0RJRklFRDogXCJtb2RpZmllZFwiLFxuICAgIEZJTEVTSVpFOiBcImZpbGVzaXplXCIsXG4gICAgRklMRU5BTUU6IFwiZmlsZW5hbWVcIixcbiAgICBNSU1FVFlQRUdST1VQOiBcIm1pbWV0eXBlZ3JvdXBcIlxuICB9O1xuXG4gIC8qKlxuICAgKiBUaW1lIHBlcmlvZCBidWNrZXRzIHByb3BlcnR5IG5hbWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIFRJTUVfUEVSSU9EX0JVQ0tFVFMgPSB7XG4gICAgVE9EQVk6IFwidG9kYXlcIixcbiAgICBZRVNURVJEQVk6IFwieWVzdGVyZGF5XCIsXG4gICAgVEhJU19XRUVLOiBcInRoaXN3ZWVrXCIsXG4gICAgTEFTVF9XRUVLOiBcImxhc3R3ZWVrXCIsXG4gICAgVEhJU19NT05USDogXCJ0aGlzbW9udGhcIixcbiAgICBMQVNUX01PTlRIOiBcImxhc3Rtb250aFwiLFxuICAgIFRISVNfWUVBUjogXCJ0aGlzeWVhclwiLFxuICAgIExBU1RfWUVBUjogXCJsYXN0eWVhclwiXG4gIH07XG5cbiAgLyoqXG4gICAqIG1pbWV0eXBlIGJ1Y2tldHMgcHJvcGVydHkgbmFtZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgTUlNRVRZUEVHUk9VUF9CVUNLRVRTID0ge1xuICAgIFBERjogXCJwZGZcIixcbiAgICBNQUlMOiBcIm1haWxcIixcbiAgICBXT1JEOiBcIndvcmRcIixcbiAgICBJTUFHRTogXCJpbWFnZVwiLFxuICAgIE9DVEVUX1NUUkVBTTogXCJvY3RldC1zdHJlYW1cIixcbiAgICBUWFQ6IFwidHh0XCIsXG4gICAgRVhDRUw6IFwiZXhjZWxcIixcbiAgICBQT1dFUlBPSU5UOiBcInBvd2VycG9pbnRcIixcbiAgICBWSURFTzogXCJ2aWRlb1wiLFxuICAgIEhUTUw6IFwiaHRtbFwiLFxuICAgIEFVRElPOiBcImF1ZGlvXCIsXG4gICAgWklQOiBcInppcFwiXG4gIH07XG5cbiAgLyoqXG4gICAqIGZpbGVzaXplIGJ1Y2tldHMgcHJvcGVydHkgbmFtZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRklMRV9TSVpFX0JVQ0tFVFMgPSB7XG4gICAgTFQxTUI6IFwibHQxTUJcIixcbiAgICBMVDEwTUI6IFwibHQxME1CXCIsXG4gICAgTFQxMDBNQjogXCJsdDEwME1CXCIsXG4gICAgR1QxMDBNQjogXCJndDEwME1CXCJcbiAgfTtcblxuICAvLyBsaXN0IG9mIHRoaW5ncyB0aGF0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGN1cnJlbnQgcXVlcnlcbiAgcHVibGljIHN0YXRpYyBVUERBVEVfQ0FVU0UgPSB7XG4gICAgVE9HR0xFRF9UWVBFOiBcImNhdXNlLnR5cGUudG9nZ2xlZFwiLFxuICAgIFRPR0dMRURfRVhQRVJUTU9ERTogXCJjYXVzZS5leHBlcnRtb2RlLnRvZ2dsZWRcIixcbiAgICBURVJNX1NFVDogXCJjYXVzZS50ZXJtLnNldFwiLFxuICAgIFRZUEVTX1NFVDogXCJjYXVzZS50eXBlcy5zZXRcIixcbiAgICBDT05URVhUX0ZPTERFUl9TRVQ6IFwiY2F1c2UuY29udGV4dGZvbGRlci5zZXRcIixcbiAgICBUT0dHTEVEX0ZJTFRFUjogXCJjYXVzZS5maWx0ZXIudG9nZ2xlZFwiLFxuICAgIEFEREVEX0ZJTFRFUjogXCJjYXVzZS5maWx0ZXIuYWRkZWRcIixcbiAgICBSRU1PVkVEX0ZJTFRFUjogXCJjYXVzZS5maWx0ZXIucmVtb3ZlZFwiLFxuICB9O1xuICAvKipcbiAgICogRGV0YXVsdCBTZWFyY2ggbW9kZSBJbmRleFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBERUZBVUxUX1NFQVJDSF9NT0RFID0gXCJpZHhzXCI7XG4gIC8qKlxuICAgKiBTZWFyY2ggbW9kZSBmb3IgRnVsbCB0ZXN0IFNlYXJjaFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGVUxMVEVYVF9TRUFSQ0hfTU9ERSA9IFwiZnRzXCI7XG4gIC8qKlxuICAgKiBmdWxsdGV4dCBzZWFyY2ggdGVybVxuICAgKi9cbiAgcHVibGljIHRlcm06IHN0cmluZztcbiAgLyoqXG4gICAqIEFycmF5IG9mIGZpZWxkcyB0byByZXF1ZXN0IGZyb20gdGhlIHNlYXJjaCBzZXJ2aWNlLCBsZWF2aW5nIHRoaXMgYmxhbmsgd2lsbCByZXR1cm4gdGhlIGZpZWxkcyBzcGVjaWZpZWQgaW4gdGhlIHJlc3VsdCBmaWVsZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgZmllbGRzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2Ygb2JqZWN0IHR5cGVzIHRvIGJlIGZldGNoZWQgYnkgdGhlIHF1ZXJ5LiBMZWF2aW5nIHRoaXMgYmxhbmsgd2lsbCByZXR1cm4gcmVzdWx0cyBmcm9tIGFueSB0eXBlXG4gICAqL1xuICBwdWJsaWMgdHlwZXM6IE9iamVjdFR5cGVbXSA9IFtdO1xuICAvKipcbiAgICogTGlzdCBvZiBjb250ZXh0IGZvbGRlciB0eXBlc1xuICAgKi9cbiAgcHVibGljIGNvbnRleHRGb2xkZXJUeXBlczogT2JqZWN0VHlwZVtdID0gW107XG4gIC8qKlxuICAgKiBMaXN0IG9mIGZpbHRlcnMgdG8gZGVmaW5lIHRoZSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gW107XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byByZXRyaWV2ZSBzdWdnZXN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN1Z2dlc3Q6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgdGVybSBpcyBhbiBleHBlcnQgbW9kZSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGV4cGVydE1vZGUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBzY29wZSBvZiB0aGUgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBzY29wZTogUXVlcnlTY29wZTtcbiAgLyoqXG4gICAqIFRoZSBzZWFyY2ggbW9kZSB0byBiZSB1c2VkIChTZWFyY2hRdWVyeS5ERUZBVUxUX1NFQVJDSF9NT0RFIG9yIFNlYXJjaFF1ZXJ5LkZVTExURVhUX1NFQVJDSF9NT0RFKVxuICAgKi9cbiAgcHVibGljIHNlYXJjaE1vZGU6IHN0cmluZyA9IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREU7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYmUgYXBwbGllZCB0byB0aGUgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBzb3J0T3B0aW9uczogU29ydE9wdGlvbltdID0gW107XG4gIC8qKlxuICAgKiBSZXNvbHZlIHJlZmVyZW5jZXMgd2l0aCB0aGVpciB0aXRsZSBpbnN0ZWFkIG9mIHRoZWlyIGFjdHVhbCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlc29sdmVSZWZlcmVuY2UgPSB0cnVlO1xuICAvKipcbiAgICogVGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgc3RhdGU6IFNlYXJjaFN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCk7XG5cbiAgcHVibGljIGhpZ2hsaWdodGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgd2l0aENvbnRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgbmFtZT86IHN0cmluZztcblxuICAvLyBJbmRpY2F0b3Igd2hhdCBjYXVzZWQgdGhlIHVwZGF0ZSBvZiBhIFNlYXJjaFF1ZXJ5IG9iamVjdC5cbiAgLy8gVXNlZnVsbCBmb3IgY29tcG9uZW50cyB0aGF0IHN1YnNjcmliZWQgdG8gYSBxdWVyeSwgYW5kIG5lZWQgdG9cbiAgLy8gdHJhY2sgdGhlIGtpbmQgb2YgY2hhbmdlcyBtYWRlXG4gIF9fdXBkYXRlQ2F1c2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgdGFyZ2V0IHR5cGUgdG8gdGhlIHF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIE9iamVjdCB0eXBlIHRvIGJlIGFkZGVkXG4gICAqL1xuICBwdWJsaWMgYWRkVHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgaWYgKCF0aGlzLnR5cGVzLmZpbmQodCA9PiB0LmlkID09PSB0eXBlLmlkKSkge1xuICAgICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdHlwZSBmcm9tIHRoZSB0YXJnZXQgdHlwZXMgbGlzdFxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgb2JqZWN0IHR5cGUgdG8gYmUgcmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHRoaXMudHlwZXMgPSB0aGlzLnR5cGVzLmZpbHRlcih0ID0+IHQuaWQgIT09IHR5cGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb3IgcmVtb3ZlcyB0aGUgZ2l2ZW4gdHlwZSBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgb2JqZWN0IHR5cGUgdG8gYmUgdG9nZ2xlZFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIGlmICh0aGlzLnR5cGVzLmZpbmQodCA9PiB0LmlkID09PSB0eXBlLmlkKSkge1xuICAgICAgdGhpcy5yZW1vdmVUeXBlKHR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnR5cGVzLnB1c2godHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgZmlsdGVyIHRvIHRoZSBxdWVyeS4gSWYgdGhlcmUgYWxyZWFkeSBpcyBhIGZpbHRlciBzZXQgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYmUgYWRkZWRcbiAgICovXG4gIHB1YmxpYyBhZGRGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICBpZiAoIWZpbHRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZ2V0RmlsdGVyKGZpbHRlci5wcm9wZXJ0eSkpIHtcbiAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFscmVhZHkgaXMgYSBmaWx0ZXIgc2V0IGZvciB0aGUgdGFyZ2V0IHByb3BlcnR5XG4gICAgICAvLyB3ZSdsbCBqdXN0IG92ZXJyaWRlIGl0IHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIoZmlsdGVyLnByb3BlcnR5KTtcbiAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBmaWx0ZXIgZnJvbSB0aGUgcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXJQcm9wZXJ0eU5hbWUgVGhlIGZpbHRlciAoaXRzIHByb3BlcnR5IG5hbWUpIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWx0ZXIoZmlsdGVyUHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnMuZmlsdGVyKGYgPT4gZi5wcm9wZXJ0eSAhPT0gZmlsdGVyUHJvcGVydHlOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgdGhlIGdpdmVuIGZpbHRlciBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXR0aW5nc1xuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gYmUgdG9nZ2xlZFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlciwgb3ZlcnJpZGU/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZ2V0RmlsdGVyKGZpbHRlci5wcm9wZXJ0eSkpIHtcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgZmlsdGVyIGJ5IGl0cyBwcm9wZXJ0eSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBmaWx0ZXJzIHByb3BlcnR5IG5hbWUgKHFuYW1lIG9mIGZvcm0gZWxlbWVudClcbiAgICogQHJldHVybnMgU2VhcmNoIEZpbHRlciBPYmplY3RcbiAgICovXG4gIHB1YmxpYyBnZXRGaWx0ZXIocHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXIge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5TmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFibGVGaWx0ZXJzKHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2VhcmNoRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlcnMuZmlsdGVyKGYgPT4gZi5wcm9wZXJ0eS5zdGFydHNXaXRoKHByb3BlcnR5TmFtZSArICcuJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZGluZyBuZXcgU29ydCBPcHRpb25zXG4gICAqIFNvcnQgT3B0aW9ucyBhcmUgb25seSBhZGRlZCBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBwcmVzZW50XG4gICAqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqIEBwYXJhbSBvcmRlclxuICAgKiBAcGFyYW0gbWlzc2luZ1xuICAgKi9cbiAgcHVibGljIGFkZFNvcnRPcHRpb24obmFtZTogc3RyaW5nLCBvcmRlcjogc3RyaW5nLCBtaXNzaW5nPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNvcnRPcHRpb25zLmZpbmQocyA9PiBzLmZpZWxkID09PSBuYW1lKSkge1xuICAgICAgdGhpcy5zb3J0T3B0aW9ucy5wdXNoKG5ldyBTb3J0T3B0aW9uKG5hbWUsIG9yZGVyLCBtaXNzaW5nKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlU29ydE9wdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRPcHRpb25zID0gdGhpcy5zb3J0T3B0aW9ucy5maWx0ZXIocyA9PiBzLmZpZWxkICE9PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHF1ZXJ5IEpTT04gZnJvbSB0aGUgY3VycmVudCBTZWFyY2hRdWVyeSB0aGF0IGNhbiBiZSBzZW5kIHRvIHRoZSBzZWFyY2ggc2VydmljZS5cbiAgICpcbiAgICogQHBhcmFtIHJlc29sdmVSZWZlcmVuY2UgaW4gY2FzZSBvZiBjc3YgZXhwb3J0IHRoZSByZXNvbHZpbmcgb2YgcmVmZXJlbmNlcyBpcyBzZXQgYnkgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldFF1ZXJ5SnNvbihyZXNvbHZlUmVmZXJlbmNlPzogYm9vbGVhbikge1xuICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgcXVlcnkgb2JqZWN0IHRvIGEgcXVlcnkgSlNPTiB0aGF0IGNhbiBiZSBjb25zdW1lZCBieSB0aGUgc2VhcmNoIHNlcnZpY2UgYmFja2VuZC5cbiAgICAvLyBUbyBrZWVwIGl0IHNob3J0LCB3ZSdsbCBvbmx5IGFkZCBwcm9wZXJ0aWVzIHRoYXQgYXJlIHNldCBhbmQgZGlmZmVyIGZyb20gZGVmYXVsdCB2YWx1ZXNcbiAgICBjb25zdCBxdWVyeUpzb246IGFueSA9IHt9O1xuXG4gICAgLy8gYWRkIHR5cGUgZmlsdGVyc1xuICAgIGlmICh0aGlzLnR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHF1ZXJ5SnNvbi50eXBlcyA9IHRoaXMudHlwZXMubWFwKHQgPT5cbiAgICAgICAgdHlwZW9mIHQgPT09IFwic3RyaW5nXCIgPyB0IDogdC5uYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZXh0IGZvbGRlciB0eXBlIGZpbHRlcnNcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgcXVlcnlKc29uLmNvbnRleHRmb2xkZXJ0eXBlcyA9IHRoaXMuY29udGV4dEZvbGRlclR5cGVzLm1hcCh0ID0+IHQubmFtZSk7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyc1xuICAgIGlmICh0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgcXVlcnlKc29uLmZpbHRlcnMgPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBxdWVyeUpzb24uZmlsdGVyc1tmLnByb3BlcnR5XSA9IGYudG9RdWVyeSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlcm0pIHtcbiAgICAgIHF1ZXJ5SnNvbi50ZXJtID0gdGhpcy50ZXJtO1xuICAgIH1cbiAgICAvLyBzZWFyY2ggZmllbGRzXG4gICAgaWYgKHRoaXMuZmllbGRzKSB7XG4gICAgICBxdWVyeUpzb24uZmllbGRzID0gdGhpcy5maWVsZHM7XG4gICAgfVxuICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgIHF1ZXJ5SnNvbi5uYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cbiAgICAvLyBhZGQgb3B0aW9ucyB3aGVuIHRoZXkgZGlmZmVyIGZyb20gdGhlIGRlZmF1bHQgdmFsdWVzXG4gICAgaWYgKHRoaXMuYXBwbHlPcHRpb25zKCkpIHtcbiAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zID0ge307XG4gICAgICBxdWVyeUpzb24ub3B0aW9ucy5zY29wZSA9IHRoaXMuc2NvcGU7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0KSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnN1Z2dlc3QgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZXhwZXJ0TW9kZSkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy5leHBlcnRtb2RlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcXVlcnlKc29uLm9wdGlvbnMucmVzb2x2ZXJlZmVyZW5jZSA9IHJlc29sdmVSZWZlcmVuY2UgIT09IHVuZGVmaW5lZCA/IHJlc29sdmVSZWZlcmVuY2UgOiB0cnVlO1xuXG4gICAgICBpZiAodGhpcy5zZWFyY2hNb2RlICE9PSBTZWFyY2hRdWVyeS5ERUZBVUxUX1NFQVJDSF9NT0RFKSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNlYXJjaG1vZGUgPSB0aGlzLnNlYXJjaE1vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zb3J0T3B0aW9ucyAmJiB0aGlzLnNvcnRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy5zb3J0ID0ge307XG4gICAgICAgIHRoaXMuc29ydE9wdGlvbnMuZm9yRWFjaCgoc29ydE9wdGlvbjogU29ydE9wdGlvbikgPT4ge1xuICAgICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNvcnRbc29ydE9wdGlvbi5maWVsZF0gPSB7XG4gICAgICAgICAgICBvcmRlcjogc29ydE9wdGlvbi5vcmRlclxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5oaWdobGlnaHRpbmcpIHtcbiAgICAgICAgcXVlcnlKc29uLm9wdGlvbnMuaGlnaGxpZ2h0aW5nID0gdGhpcy5oaWdobGlnaHRpbmc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy53aXRoQ29udGV4dCkge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy53aXRoY29udGV4dCA9IHRoaXMud2l0aENvbnRleHQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeUpzb247XG4gIH1cblxuICAvLyBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBxdWVyeSBzZW5kIHRvIHRoZSBzZWFyY2ggc2VydmljZSBzaG91bGQgY29udGFpbiBvcHRpb25zXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmV4cGVydE1vZGUgfHxcbiAgICAgICEhdGhpcy5zY29wZSB8fFxuICAgICAgdGhpcy5zdWdnZXN0IHx8XG4gICAgICB0aGlzLmhpZ2hsaWdodGluZyB8fFxuICAgICAgdGhpcy5yZXNvbHZlUmVmZXJlbmNlIHx8XG4gICAgICB0aGlzLndpdGhDb250ZXh0IHx8XG4gICAgICB0aGlzLnNlYXJjaE1vZGUgIT09IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREUgfHxcbiAgICAgIHRoaXMuc29ydE9wdGlvbnMubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAaWdub3JlXG4gKiBDcmVhdGVzIHRoZSBNb2RlbCBvZiBTb3J0IE9wdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIFNvcnRPcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZmllbGQ6IHN0cmluZyxcbiAgICBwdWJsaWMgb3JkZXI6IHN0cmluZyxcbiAgICBwdWJsaWMgbWlzc2luZz86IHN0cmluZ1xuICApIHt9XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQ3JlYXRlcyB0aGUgTW9kZWwgb2YgRmllbGQgRGVmaW5pdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEZpZWxkRGVmaW5pdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50czogYW55W10gPSBbXSxcbiAgICBwdWJsaWMgc29ydG9yZGVyOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBncm91cG9yZGVyOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBwaW5uZWQ6IGFueVtdID0gW10sXG4gICAgcHVibGljIGFsaWdubWVudHg6IHtxbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nfVtdID0gW10sXG4gICAgcHVibGljIG1vZGU/OiBzdHJpbmdcbiAgKSB7fVxufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIENsYXNzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBxdWVyeVxuICovXG5leHBvcnQgY2xhc3MgU2VhcmNoU3RhdGUge1xuICBwdWJsaWMgY291bnQ6IHt2YWx1ZTogbnVtYmVyLCByZWxhdGlvbj86IHN0cmluZ307XG4gIHB1YmxpYyBhZ2dyZWdhdGlvbnM7XG4gIHB1YmxpYyBsYXN0Q2hhbmdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9ucyA9IHtcbiAgICAgIHR5cGU6IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCksXG4gICAgICBjb250ZXh0VHlwZTogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICAgIGNyZWF0ZWQ6IFtdLFxuICAgICAgbW9kaWZpZWQ6IFtdLFxuICAgICAgbWltZXR5cGVncm91cDogW10sXG4gICAgICBmaWxlc2l6ZTogW11cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHRvdGFsQ291bnQoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5hZ2dyZWdhdGlvbnMudHlwZS52YWx1ZXMoKSkucmVkdWNlKChhY2M6IG51bWJlciwgY3VyOiBudW1iZXIpID0+IGFjYyArIGN1ciwgMCkgYXMgbnVtYmVyO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuICEodGhpcy5jb3VudCAmJiB0aGlzLmNvdW50LnZhbHVlKTtcbiAgfVxuXG4gIGFkZEFnZ3JlZ2F0aW9ucyh0eXBlOiBzdHJpbmcsIGtleTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBhZ2c/KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFwiY29udGV4dHR5cGVcIjoge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFOiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25zLnR5cGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRDoge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5jcmVhdGVkLnB1c2goe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEOiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25zLm1vZGlmaWVkLnB1c2goe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVA6IHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMubWltZXR5cGVncm91cC5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRToge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5maWxlc2l6ZS5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgZnJvbTogYWdnLmZyb20sXG4gICAgICAgICAgdG86IGFnZy50byB8fCBJbmZpbml0eSxcbiAgICAgICAgICBsYWJlbDoga2V5LnJlcGxhY2UoXCJndFwiLCBcIj4gXCIpLnJlcGxhY2UoXCJsdFwiLCBcIjwgXCIpXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAaWdub3JlXG4gKiBDcmVhdGVzIHRoZSBNb2RlbCBvZiBTZWFyY2ggUmVzdWx0c1xuICovXG5leHBvcnQgY2xhc3MgU2VhcmNoUmVzdWx0IHtcbiAgcHVibGljIGNvdW50OiB7dmFsdWU6IG51bWJlciwgcmVsYXRpb24/OiBzdHJpbmd9O1xuICBwdWJsaWMgc3VnZ2VzdHM6IHN0cmluZ1tdO1xuICBwdWJsaWMgaGl0czogYW55W107XG4gIHB1YmxpYyB0eXBlTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgZmllbGRzOiBGaWVsZERlZmluaXRpb247XG5cbiAgY29uc3RydWN0b3IoKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyIHtcbiAgLyoqXG4gICAqIGF2YWlsYWJsZSBvcGVyYXRvcnMgZm9yIGEgc2VhcmNoIGZpbHRlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBPUEVSQVRPUiA9IHtcbiAgICAvKiogZXF1YWwgKi9cbiAgICBFUVVBTDogXCJlcVwiLFxuICAgIC8qKiBtYXRjaCAoZm9yIHN0cmluZyB3aXRoIGNsYXNzaWZpY2F0aW9uIFwicGF0aDY2NjZcIikgKi9cbiAgICBNQVRDSDogXCJtYXRjaFwiLFxuICAgIC8qKiBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcyAodmFsdWUgaGFzIHRvIGJlIGFuIGFycmF5KSAgKi9cbiAgICBJTjogXCJpblwiLFxuICAgIC8qKiBncmVhdGVyIHRoYW4gKi9cbiAgICBHUkVBVEVSX1RIQU46IFwiZ3RcIixcbiAgICAvKiogZ3JlYXRlciB0aGFuIG9yIGVxdWFsICovXG4gICAgR1JFQVRFUl9PUl9FUVVBTDogXCJndGVcIiwgLy9cbiAgICBMRVNTX1RIQU46IFwibHRcIiwgLy8gbGVzcyB0aGFuXG4gICAgTEVTU19PUl9FUVVBTDogXCJsdGVcIiwgLy8gbGVzcyB0aGFuIG9yIGVxdWFsXG4gICAgSU5URVJWQUw6IFwiZ3RsdFwiLCAvLyBpbnRlcnZhbFxuICAgIElOVEVSVkFMX0lOQ0xVREVfQk9USDogXCJndGVsdGVcIiwgLy8gaW50ZXJ2YWwgaW5jbHVkZSBsZWZ0IGFuZCByaWdodFxuICAgIElOVEVSVkFMX0lOQ0xVREVfVE86IFwiZ3RsdGVcIiwgLy8gaW50ZXJ2YWwgaW5jbHVkZSByaWdodFxuICAgIElOVEVSVkFMX0lOQ0xVREVfRlJPTTogXCJndGVsdFwiLCAvLyBpbnRlcnZhbCBpbmNsdWRlIGxlZnRcbiAgICBSQU5HRTogXCJyZ1wiIC8vIGFnZ2VnYXRpb24gcmFuZ2VzXG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBhIG5ldyBTZWFyY2hGaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZpZWxkIHRoaXMgZmlsdGVyIHNob3VsZCBhcHBseSB0by5cbiAgICogQHBhcmFtIG9wZXJhdG9yIE9wZXJhdG9yIGluZGljYXRpbmcgaG93IHRvIGhhbmRsZSB0aGUgZmlsdGVycyB2YWx1ZShzKS4gU2VlIFNlYXJjaEZpbHRlci5PUEVSQVRPUiBmb3IgYXZhaWxhYmxlIG9wZXJhdG9ycy5cbiAgICogQHBhcmFtIGZpcnN0VmFsdWUgVGhlIGZpbHRlcnMgdmFsdWVcbiAgICogQHBhcmFtIHNlY29uZFZhbHVlIE9wdGlvbmFsIHNlY29uZCB2YWx1ZSBmb3IgZmlsdGVycyB0aGF0IGZvciBleGFtcGxlIGRlZmluZSByYW5nZXMgb2YgdmFsdWVzXG4gICAqIEBwYXJhbSB0cmFuc2Zvcm1EYXRlIEZsYWcgdG8gdHJhbnNmb3JtIGRhdGUgaG91cnMgYW5kIG1pbnV0ZXMgYmFzZWQgb24gb3BlcmF0b3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwcm9wZXJ0eTogc3RyaW5nLFxuICAgIHB1YmxpYyBvcGVyYXRvcjogc3RyaW5nLFxuICAgIHB1YmxpYyBmaXJzdFZhbHVlOiBhbnksXG4gICAgcHVibGljIHNlY29uZFZhbHVlPzogYW55LFxuICAgIHB1YmxpYyB0cmFuc2Zvcm1EYXRlPzoge3RpbWU/OiBib29sZWFuOyB0aW1lem9uZT86IGJvb2xlYW59XG4gICkge31cblxuICBmb3JtYXREYXRlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1EYXRlICYmIHZhbHVlXG4gICAgICA/IHRoaXMudHJhbnNmb3JtRGF0ZS50aW1lem9uZVxuICAgICAgICA/IG5ldyBEYXRlUGlwZShcImVuXCIpLnRyYW5zZm9ybSh2YWx1ZSwgXCJ5eXl5LU1NLWRkVFpcIilcbiAgICAgICAgOiB0aGlzLnRyYW5zZm9ybURhdGUudGltZVxuICAgICAgICAgID8gbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpICsgXCJaXCJcbiAgICAgICAgICA6IG5ldyBEYXRlUGlwZShcImVuXCIpLnRyYW5zZm9ybSh2YWx1ZSwgXCJ5eXl5LU1NLWRkXCIpXG4gICAgICA6IHZhbHVlO1xuICB9XG5cbiAgdG9RdWVyeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbzogdGhpcy5vcGVyYXRvcixcbiAgICAgIHYxOiB0aGlzLmZvcm1hdERhdGUodGhpcy5maXJzdFZhbHVlKSxcbiAgICAgIC4uLih0aGlzLnNlY29uZFZhbHVlICYmIHt2MjogdGhpcy5mb3JtYXREYXRlKHRoaXMuc2Vjb25kVmFsdWUpfSlcbiAgICB9O1xuICB9XG5cbiAgdG9EYXRlVGltZVF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnRyYW5zZm9ybURhdGUgJiYgdGhpcy50cmFuc2Zvcm1EYXRlLnRpbWV6b25lICYmIHRoaXMuZmlyc3RWYWx1ZSkge1xuICAgICAgbGV0IGZpcnN0VmFsdWUgPSB0aGlzLmZpcnN0VmFsdWU7XG4gICAgICBsZXQgc2Vjb25kVmFsdWUgPSB0aGlzLnNlY29uZFZhbHVlO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKHNlY29uZFZhbHVlIHx8IGZpcnN0VmFsdWUpO1xuICAgICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgaWYgKHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5MRVNTX09SX0VRVUFMKSB7XG4gICAgICAgIGZpcnN0VmFsdWUgPSBlbmREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShmaXJzdFZhbHVlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX1RIQU4gfHxcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGZpcnN0VmFsdWUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USCB8fFxuICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUxcbiAgICAgICkge1xuICAgICAgICBzZWNvbmRWYWx1ZSA9IGVuZERhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG86XG4gICAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMXG4gICAgICAgICAgICA/IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEhcbiAgICAgICAgICAgIDogdGhpcy5vcGVyYXRvcixcbiAgICAgICAgdjE6IGZpcnN0VmFsdWUsXG4gICAgICAgIC4uLihzZWNvbmRWYWx1ZSAmJiB7djI6IHNlY29uZFZhbHVlfSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnRvUXVlcnkoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbWF0Y2goXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBvcGVyYXRvcjogc3RyaW5nLFxuICAgIGZpcnN0VmFsdWU6IGFueSxcbiAgICBzZWNvbmRWYWx1ZT86IGFueVxuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IgPT09IG9wZXJhdG9yICYmXG4gICAgICB0aGlzLnNlY29uZFZhbHVlID09PSBzZWNvbmRWYWx1ZSAmJlxuICAgICAgKHRoaXMuZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgID8gISF0aGlzLmZpcnN0VmFsdWUuZmluZCh2ID0+IHYgPT09IGZpcnN0VmFsdWUpXG4gICAgICAgIDogdGhpcy5maXJzdFZhbHVlID09PSBmaXJzdFZhbHVlKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXF1ZXJ5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZW8tc2RrL2NvcmUvc3JjL2xpYi9zZXJ2aWNlL3NlYXJjaC9zZWFyY2gtcXVlcnkubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXpDLDJEQUEyRDtBQUUzRCxNQUFNLENBQU4sSUFBWSxVQUlYO0FBSkQsV0FBWSxVQUFVO0lBQ3BCLHlCQUFXLENBQUE7SUFDWCxpQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBd0IsQ0FBQTtBQUMxQixDQUFDLEVBSlcsVUFBVSxLQUFWLFVBQVUsUUFJckI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUF5SXRCO1FBbkRBOztXQUVHO1FBQ0ksVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDaEM7O1dBRUc7UUFDSSx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBQzdDOztXQUVHO1FBQ0ksWUFBTyxHQUFtQixFQUFFLENBQUM7UUFLcEM7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBSzFCOztXQUVHO1FBQ0ksZUFBVSxHQUFXLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM1RDs7V0FFRztRQUNJLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUN0Qzs7V0FFRztRQUNJLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQjs7V0FFRztRQUNJLFVBQUssR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUV2QyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixnQkFBVyxHQUFZLEtBQUssQ0FBQztJQVNyQixDQUFDO0lBRWhCOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsSUFBZ0I7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FB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O09BRUc7SUFDSCxLQUFLLENBQ0gsUUFBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsVUFBZSxFQUNmLFdBQWlCO1FBRWpCLE9BQU8sQ0FDTCxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDMUIsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRO1lBQzFCLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVztZQUNoQyxDQUFDLElBQUksQ0FBQyxVQUFVLFlBQVksS0FBSztnQkFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxDQUNwQyxDQUFDO0lBQ0osQ0FBQzs7QUFsSEQ7O0dBRUc7QUFDVyxxQkFBUSxHQUFHO0lBQ3ZCLFlBQVk7SUFDWixLQUFLLEVBQUUsSUFBSTtJQUNYLHdEQUF3RDtJQUN4RCxLQUFLLEVBQUUsT0FBTztJQUNkLDRFQUE0RTtJQUM1RSxFQUFFLEVBQUUsSUFBSTtJQUNSLG1CQUFtQjtJQUNuQixZQUFZLEVBQUUsSUFBSTtJQUNsQiw0QkFBNEI7SUFDNUIsZ0JBQWdCLEVBQUUsS0FBSztJQUN2QixTQUFTLEVBQUUsSUFBSTtJQUNmLGFBQWEsRUFBRSxLQUFLO0lBQ3BCLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLHFCQUFxQixFQUFFLFFBQVE7SUFDL0IsbUJBQW1CLEVBQUUsT0FBTztJQUM1QixxQkFBcUIsRUFBRSxPQUFPO0lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CO0NBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JlZHVjZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPYmplY3RUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9vYmplY3QtdHlwZS5tb2RlbCc7XG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vL2V4cG9ydCB0eXBlIFF1ZXJ5U2NvcGUgPSAnaW5kZXhkYXRlJyB8ICdjb250ZW50JyB8ICdhbGwnO1xuXG5leHBvcnQgZW51bSBRdWVyeVNjb3BlIHtcbiAgQUxMID0gJ2FsbCcsXG4gIENPTlRFTlQgPSAnY29udGVudCcsXG4gIElOREVYX0RBVEEgPSAnaW5kZXhkYXRhJ1xufVxuXG4vKipcbiAqIFRoZSBTZWFyY2hRdWVyeSBDbGFzc1xuICpcbiAqIFNlZSB7QGxpbmsgU2VhcmNoU2VydmljZX0gZm9yIFVzYWdlXG4gKi9cbmV4cG9ydCBjbGFzcyBTZWFyY2hRdWVyeSB7XG4gIC8qKlxuICAgKiBCYXNlIFBhcmFtZXRlcnMgZm9yIGEgU2VhcmNoIFF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEJBU0VfUEFSQU1TID0ge1xuICAgIFRZUEU6ICd0eXBlJyxcbiAgICBDUkVBVE9SOiAnY3JlYXRvcicsXG4gICAgQ1JFQVRFRDogJ2NyZWF0ZWQnLFxuICAgIE1PRElGSUVSOiAnbW9kaWZpZXInLFxuICAgIE1PRElGSUVEOiAnbW9kaWZpZWQnLFxuICAgIEZJTEVTSVpFOiAnZmlsZXNpemUnLFxuICAgIEZJTEVOQU1FOiAnZmlsZW5hbWUnLFxuICAgIE1JTUVUWVBFR1JPVVA6ICdtaW1ldHlwZWdyb3VwJyxcbiAgICBGT0xERVI6ICdmb2xkZXInXG4gIH07XG5cbiAgLyoqXG4gICAqIFRpbWUgcGVyaW9kIGJ1Y2tldHMgcHJvcGVydHkgbmFtZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgVElNRV9QRVJJT0RfQlVDS0VUUyA9IHtcbiAgICBUT0RBWTogJ3RvZGF5JyxcbiAgICBZRVNURVJEQVk6ICd5ZXN0ZXJkYXknLFxuICAgIFRISVNfV0VFSzogJ3RoaXN3ZWVrJyxcbiAgICBMQVNUX1dFRUs6ICdsYXN0d2VlaycsXG4gICAgVEhJU19NT05USDogJ3RoaXNtb250aCcsXG4gICAgTEFTVF9NT05USDogJ2xhc3Rtb250aCcsXG4gICAgVEhJU19ZRUFSOiAndGhpc3llYXInLFxuICAgIExBU1RfWUVBUjogJ2xhc3R5ZWFyJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBtaW1ldHlwZSBidWNrZXRzIHByb3BlcnR5IG5hbWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIE1JTUVUWVBFR1JPVVBfQlVDS0VUUyA9IHtcbiAgICBQREY6ICdwZGYnLFxuICAgIE1BSUw6ICdtYWlsJyxcbiAgICBXT1JEOiAnd29yZCcsXG4gICAgSU1BR0U6ICdpbWFnZScsXG4gICAgT0NURVRfU1RSRUFNOiAnb2N0ZXQtc3RyZWFtJyxcbiAgICBUWFQ6ICd0eHQnLFxuICAgIEVYQ0VMOiAnZXhjZWwnLFxuICAgIFBPV0VSUE9JTlQ6ICdwb3dlcnBvaW50JyxcbiAgICBWSURFTzogJ3ZpZGVvJyxcbiAgICBIVE1MOiAnaHRtbCcsXG4gICAgQVVESU86ICdhdWRpbycsXG4gICAgWklQOiAnemlwJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBmaWxlc2l6ZSBidWNrZXRzIHByb3BlcnR5IG5hbWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIEZJTEVfU0laRV9CVUNLRVRTID0ge1xuICAgIE5PTkU6ICdub25lJyxcbiAgICBMVDFNQjogJ2x0MU1CJyxcbiAgICBMVDEwTUI6ICdsdDEwTUInLFxuICAgIExUMTAwTUI6ICdsdDEwME1CJyxcbiAgICBHVDEwME1COiAnZ3QxMDBNQidcbiAgfTtcblxuICAvLyBsaXN0IG9mIHRoaW5ncyB0aGF0IG1heSBoYXZlIGNoYW5nZWQgdGhlIGN1cnJlbnQgcXVlcnlcbiAgcHVibGljIHN0YXRpYyBVUERBVEVfQ0FVU0UgPSB7XG4gICAgVE9HR0xFRF9UWVBFOiAnY2F1c2UudHlwZS50b2dnbGVkJyxcbiAgICBUT0dHTEVEX0VYUEVSVE1PREU6ICdjYXVzZS5leHBlcnRtb2RlLnRvZ2dsZWQnLFxuICAgIFRFUk1fU0VUOiAnY2F1c2UudGVybS5zZXQnLFxuICAgIFRZUEVTX1NFVDogJ2NhdXNlLnR5cGVzLnNldCcsXG4gICAgQ09OVEVYVF9GT0xERVJfU0VUOiAnY2F1c2UuY29udGV4dGZvbGRlci5zZXQnLFxuICAgIFRPR0dMRURfRklMVEVSOiAnY2F1c2UuZmlsdGVyLnRvZ2dsZWQnLFxuICAgIEFEREVEX0ZJTFRFUjogJ2NhdXNlLmZpbHRlci5hZGRlZCcsXG4gICAgUkVNT1ZFRF9GSUxURVI6ICdjYXVzZS5maWx0ZXIucmVtb3ZlZCcsXG4gIH07XG4gIC8qKlxuICAgKiBEZXRhdWx0IFNlYXJjaCBtb2RlIEluZGV4XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfU0VBUkNIX01PREUgPSAnaWR4cyc7XG4gIC8qKlxuICAgKiBTZWFyY2ggbW9kZSBmb3IgRnVsbCB0ZXN0IFNlYXJjaFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGVUxMVEVYVF9TRUFSQ0hfTU9ERSA9ICdmdHMnO1xuICAvKipcbiAgICogZnVsbHRleHQgc2VhcmNoIHRlcm1cbiAgICovXG4gIHB1YmxpYyB0ZXJtOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBmaWVsZHMgdG8gcmVxdWVzdCBmcm9tIHRoZSBzZWFyY2ggc2VydmljZSwgbGVhdmluZyB0aGlzIGJsYW5rIHdpbGwgcmV0dXJuIHRoZSBmaWVsZHMgc3BlY2lmaWVkIGluIHRoZSByZXN1bHQgZmllbGQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGZpZWxkczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBMaXN0IG9mIG9iamVjdCB0eXBlcyB0byBiZSBmZXRjaGVkIGJ5IHRoZSBxdWVyeS4gTGVhdmluZyB0aGlzIGJsYW5rIHdpbGwgcmV0dXJuIHJlc3VsdHMgZnJvbSBhbnkgdHlwZVxuICAgKi9cbiAgcHVibGljIHR5cGVzOiBPYmplY3RUeXBlW10gPSBbXTtcbiAgLyoqXG4gICAqIExpc3Qgb2YgY29udGV4dCBmb2xkZXIgdHlwZXNcbiAgICovXG4gIHB1YmxpYyBjb250ZXh0Rm9sZGVyVHlwZXM6IE9iamVjdFR5cGVbXSA9IFtdO1xuICAvKipcbiAgICogTGlzdCBvZiBmaWx0ZXJzIHRvIGRlZmluZSB0aGUgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSA9IFtdO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcmV0cmlldmUgc3VnZ2VzdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdWdnZXN0OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIHRlcm0gaXMgYW4gZXhwZXJ0IG1vZGUgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBleHBlcnRNb2RlID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgb2YgdGhlIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgc2NvcGU6IFF1ZXJ5U2NvcGU7XG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIG1vZGUgdG8gYmUgdXNlZCAoU2VhcmNoUXVlcnkuREVGQVVMVF9TRUFSQ0hfTU9ERSBvciBTZWFyY2hRdWVyeS5GVUxMVEVYVF9TRUFSQ0hfTU9ERSlcbiAgICovXG4gIHB1YmxpYyBzZWFyY2hNb2RlOiBzdHJpbmcgPSBTZWFyY2hRdWVyeS5ERUZBVUxUX1NFQVJDSF9NT0RFO1xuICAvKipcbiAgICogQWRkaXRpb25hbCBvcHRpb25zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgc29ydE9wdGlvbnM6IFNvcnRPcHRpb25bXSA9IFtdO1xuICAvKipcbiAgICogUmVzb2x2ZSByZWZlcmVuY2VzIHdpdGggdGhlaXIgdGl0bGUgaW5zdGVhZCBvZiB0aGVpciBhY3R1YWwgdmFsdWVcbiAgICovXG4gIHB1YmxpYyByZXNvbHZlUmVmZXJlbmNlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBxdWVyeVxuICAgKi9cbiAgcHVibGljIHN0YXRlOiBTZWFyY2hTdGF0ZSA9IG5ldyBTZWFyY2hTdGF0ZSgpO1xuXG4gIHB1YmxpYyBoaWdobGlnaHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHdpdGhDb250ZXh0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG5cbiAgLy8gSW5kaWNhdG9yIHdoYXQgY2F1c2VkIHRoZSB1cGRhdGUgb2YgYSBTZWFyY2hRdWVyeSBvYmplY3QuXG4gIC8vIFVzZWZ1bGwgZm9yIGNvbXBvbmVudHMgdGhhdCBzdWJzY3JpYmVkIHRvIGEgcXVlcnksIGFuZCBuZWVkIHRvXG4gIC8vIHRyYWNrIHRoZSBraW5kIG9mIGNoYW5nZXMgbWFkZVxuICBfX3VwZGF0ZUNhdXNlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IHRhcmdldCB0eXBlIHRvIHRoZSBxdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBPYmplY3QgdHlwZSB0byBiZSBhZGRlZFxuICAgKi9cbiAgcHVibGljIGFkZFR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIGlmICghdGhpcy50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gdHlwZS5pZCkpIHtcbiAgICAgIHRoaXMudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHR5cGUgZnJvbSB0aGUgdGFyZ2V0IHR5cGVzIGxpc3RcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIG9iamVjdCB0eXBlIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICB0aGlzLnR5cGVzID0gdGhpcy50eXBlcy5maWx0ZXIodCA9PiB0LmlkICE9PSB0eXBlLmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgdGhlIGdpdmVuIHR5cGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dGluZ3NcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIG9iamVjdCB0eXBlIHRvIGJlIHRvZ2dsZWRcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gdHlwZS5pZCkpIHtcbiAgICAgIHRoaXMucmVtb3ZlVHlwZSh0eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50eXBlcy5wdXNoKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGZpbHRlciB0byB0aGUgcXVlcnkuIElmIHRoZXJlIGFscmVhZHkgaXMgYSBmaWx0ZXIgc2V0IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHksIGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGJlIGFkZGVkXG4gICAqL1xuICBwdWJsaWMgYWRkRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmdldEZpbHRlcihmaWx0ZXIucHJvcGVydHkpKSB7XG4gICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpZiB0aGVyZSBhbHJlYWR5IGlzIGEgZmlsdGVyIHNldCBmb3IgdGhlIHRhcmdldCBwcm9wZXJ0eVxuICAgICAgLy8gd2UnbGwganVzdCBvdmVycmlkZSBpdCB3aXRoIHRoZSBuZXcgdmFsdWVcbiAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgICB0aGlzLmZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgZmlsdGVyIGZyb20gdGhlIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyUHJvcGVydHlOYW1lIFRoZSBmaWx0ZXIgKGl0cyBwcm9wZXJ0eSBuYW1lKSB0byBiZSByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlclByb3BlcnR5TmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5maWx0ZXJzLmZpbHRlcihmID0+IGYucHJvcGVydHkgIT09IGZpbHRlclByb3BlcnR5TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIHRoZSBnaXZlbiBmaWx0ZXIgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2V0dGluZ3NcbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciBUaGUgZmlsdGVyIHRvIGJlIHRvZ2dsZWRcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIG92ZXJyaWRlPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmdldEZpbHRlcihmaWx0ZXIucHJvcGVydHkpKSB7XG4gICAgICB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXIucHJvcGVydHkpO1xuICAgICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGZpbHRlciBieSBpdHMgcHJvcGVydHkgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgZmlsdGVycyBwcm9wZXJ0eSBuYW1lIChxbmFtZSBvZiBmb3JtIGVsZW1lbnQpXG4gICAqIEByZXR1cm5zIFNlYXJjaCBGaWx0ZXIgT2JqZWN0XG4gICAqL1xuICBwdWJsaWMgZ2V0RmlsdGVyKHByb3BlcnR5TmFtZTogc3RyaW5nKTogU2VhcmNoRmlsdGVyIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlRmlsdGVycyhwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmZpbHRlcihmID0+IGYucHJvcGVydHkuc3RhcnRzV2l0aChwcm9wZXJ0eU5hbWUgKyAnLicpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRpbmcgbmV3IFNvcnQgT3B0aW9uc1xuICAgKiBTb3J0IE9wdGlvbnMgYXJlIG9ubHkgYWRkZWQgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgcHJlc2VudFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiBAcGFyYW0gb3JkZXJcbiAgICogQHBhcmFtIG1pc3NpbmdcbiAgICovXG4gIHB1YmxpYyBhZGRTb3J0T3B0aW9uKG5hbWU6IHN0cmluZywgb3JkZXI6IHN0cmluZywgbWlzc2luZz86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zb3J0T3B0aW9ucy5maW5kKHMgPT4gcy5maWVsZCA9PT0gbmFtZSkpIHtcbiAgICAgIHRoaXMuc29ydE9wdGlvbnMucHVzaChuZXcgU29ydE9wdGlvbihuYW1lLCBvcmRlciwgbWlzc2luZykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVNvcnRPcHRpb24obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zb3J0T3B0aW9ucyA9IHRoaXMuc29ydE9wdGlvbnMuZmlsdGVyKHMgPT4gcy5maWVsZCAhPT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBxdWVyeSBKU09OIGZyb20gdGhlIGN1cnJlbnQgU2VhcmNoUXVlcnkgdGhhdCBjYW4gYmUgc2VuZCB0byB0aGUgc2VhcmNoIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvbHZlUmVmZXJlbmNlIGluIGNhc2Ugb2YgY3N2IGV4cG9ydCB0aGUgcmVzb2x2aW5nIG9mIHJlZmVyZW5jZXMgaXMgc2V0IGJ5IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRRdWVyeUpzb24ocmVzb2x2ZVJlZmVyZW5jZT86IGJvb2xlYW4pIHtcbiAgICAvLyBDb252ZXJ0IHRoZSBjdXJyZW50IHF1ZXJ5IG9iamVjdCB0byBhIHF1ZXJ5IEpTT04gdGhhdCBjYW4gYmUgY29uc3VtZWQgYnkgdGhlIHNlYXJjaCBzZXJ2aWNlIGJhY2tlbmQuXG4gICAgLy8gVG8ga2VlcCBpdCBzaG9ydCwgd2UnbGwgb25seSBhZGQgcHJvcGVydGllcyB0aGF0IGFyZSBzZXQgYW5kIGRpZmZlciBmcm9tIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgcXVlcnlKc29uOiBhbnkgPSB7fTtcblxuICAgIC8vIGFkZCB0eXBlIGZpbHRlcnNcbiAgICBpZiAodGhpcy50eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVyeUpzb24udHlwZXMgPSB0aGlzLnR5cGVzLm1hcCh0ID0+XG4gICAgICAgIHR5cGVvZiB0ID09PSAnc3RyaW5nJyA/IHQgOiB0Lm5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGNvbnRleHQgZm9sZGVyIHR5cGUgZmlsdGVyc1xuICAgIGlmICh0aGlzLmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVyeUpzb24uY29udGV4dGZvbGRlcnR5cGVzID0gdGhpcy5jb250ZXh0Rm9sZGVyVHlwZXMubWFwKHQgPT4gdC5uYW1lKTtcbiAgICB9XG5cbiAgICAvLyBmaWx0ZXJzXG4gICAgaWYgKHRoaXMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBxdWVyeUpzb24uZmlsdGVycyA9IHt9O1xuICAgICAgdGhpcy5maWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgICAgIHF1ZXJ5SnNvbi5maWx0ZXJzW2YucHJvcGVydHldID0gZi50b1F1ZXJ5KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGVybSkge1xuICAgICAgcXVlcnlKc29uLnRlcm0gPSB0aGlzLnRlcm07XG4gICAgfVxuICAgIC8vIHNlYXJjaCBmaWVsZHNcbiAgICBpZiAodGhpcy5maWVsZHMpIHtcbiAgICAgIHF1ZXJ5SnNvbi5maWVsZHMgPSB0aGlzLmZpZWxkcztcbiAgICB9XG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgcXVlcnlKc29uLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuICAgIC8vIGFkZCBvcHRpb25zIHdoZW4gdGhleSBkaWZmZXIgZnJvbSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICBpZiAodGhpcy5hcHBseU9wdGlvbnMoKSkge1xuICAgICAgcXVlcnlKc29uLm9wdGlvbnMgPSB7fTtcbiAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNjb3BlID0gdGhpcy5zY29wZTtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3QpIHtcbiAgICAgICAgcXVlcnlKc29uLm9wdGlvbnMuc3VnZ2VzdCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5leHBlcnRNb2RlKSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLmV4cGVydG1vZGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBxdWVyeUpzb24ub3B0aW9ucy5yZXNvbHZlcmVmZXJlbmNlID0gcmVzb2x2ZVJlZmVyZW5jZSAhPT0gdW5kZWZpbmVkID8gcmVzb2x2ZVJlZmVyZW5jZSA6IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaE1vZGUgIT09IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREUpIHtcbiAgICAgICAgcXVlcnlKc29uLm9wdGlvbnMuc2VhcmNobW9kZSA9IHRoaXMuc2VhcmNoTW9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNvcnRPcHRpb25zICYmIHRoaXMuc29ydE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLnNvcnQgPSB7fTtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucy5mb3JFYWNoKChzb3J0T3B0aW9uOiBTb3J0T3B0aW9uKSA9PiB7XG4gICAgICAgICAgcXVlcnlKc29uLm9wdGlvbnMuc29ydFtzb3J0T3B0aW9uLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIG9yZGVyOiBzb3J0T3B0aW9uLm9yZGVyXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmhpZ2hsaWdodGluZykge1xuICAgICAgICBxdWVyeUpzb24ub3B0aW9ucy5oaWdobGlnaHRpbmcgPSB0aGlzLmhpZ2hsaWdodGluZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLndpdGhDb250ZXh0KSB7XG4gICAgICAgIHF1ZXJ5SnNvbi5vcHRpb25zLndpdGhjb250ZXh0ID0gdGhpcy53aXRoQ29udGV4dDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5SnNvbjtcbiAgfVxuXG4gIC8vIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHF1ZXJ5IHNlbmQgdG8gdGhlIHNlYXJjaCBzZXJ2aWNlIHNob3VsZCBjb250YWluIG9wdGlvbnNcbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZXhwZXJ0TW9kZSB8fFxuICAgICAgISF0aGlzLnNjb3BlIHx8XG4gICAgICB0aGlzLnN1Z2dlc3QgfHxcbiAgICAgIHRoaXMuaGlnaGxpZ2h0aW5nIHx8XG4gICAgICB0aGlzLnJlc29sdmVSZWZlcmVuY2UgfHxcbiAgICAgIHRoaXMud2l0aENvbnRleHQgfHxcbiAgICAgIHRoaXMuc2VhcmNoTW9kZSAhPT0gU2VhcmNoUXVlcnkuREVGQVVMVF9TRUFSQ0hfTU9ERSB8fFxuICAgICAgdGhpcy5zb3J0T3B0aW9ucy5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBpZ25vcmVcbiAqIENyZWF0ZXMgdGhlIE1vZGVsIG9mIFNvcnQgT3B0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgU29ydE9wdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBmaWVsZDogc3RyaW5nLFxuICAgIHB1YmxpYyBvcmRlcjogc3RyaW5nLFxuICAgIHB1YmxpYyBtaXNzaW5nPzogc3RyaW5nXG4gICkge31cbn1cblxuLyoqXG4gKiBAaWdub3JlXG4gKiBDcmVhdGVzIHRoZSBNb2RlbCBvZiBGaWVsZCBEZWZpbml0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgRmllbGREZWZpbml0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsZW1lbnRzOiBhbnlbXSA9IFtdLFxuICAgIHB1YmxpYyBzb3J0b3JkZXI6IGFueVtdID0gW10sXG4gICAgcHVibGljIGdyb3Vwb3JkZXI6IGFueVtdID0gW10sXG4gICAgcHVibGljIHBpbm5lZDogYW55W10gPSBbXSxcbiAgICBwdWJsaWMgYWxpZ25tZW50eDoge3FuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmd9W10gPSBbXSxcbiAgICBwdWJsaWMgbW9kZT86IHN0cmluZ1xuICApIHt9XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBvZiBhIHF1ZXJ5XG4gKi9cbmV4cG9ydCBjbGFzcyBTZWFyY2hTdGF0ZSB7XG4gIHB1YmxpYyBjb3VudDoge3ZhbHVlOiBudW1iZXIsIHJlbGF0aW9uPzogc3RyaW5nfTtcbiAgcHVibGljIGFnZ3JlZ2F0aW9ucztcbiAgcHVibGljIGxhc3RDaGFuZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWdncmVnYXRpb25zID0ge1xuICAgICAgdHlwZTogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICAgIGNvbnRleHRUeXBlOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgICAgY3JlYXRlZDogW10sXG4gICAgICBtb2RpZmllZDogW10sXG4gICAgICBtaW1ldHlwZWdyb3VwOiBbXSxcbiAgICAgIGZpbGVzaXplOiBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdG90YWxDb3VudCgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmFnZ3JlZ2F0aW9ucy50eXBlLnZhbHVlcygpKS5yZWR1Y2UoKGFjYzogbnVtYmVyLCBjdXI6IG51bWJlcikgPT4gYWNjICsgY3VyLCAwKSBhcyBudW1iZXI7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gISh0aGlzLmNvdW50ICYmIHRoaXMuY291bnQudmFsdWUpO1xuICB9XG5cbiAgYWRkQWdncmVnYXRpb25zKHR5cGU6IHN0cmluZywga2V5OiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGFnZz8pIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2NvbnRleHR0eXBlJzoge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5UWVBFOiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25zLnR5cGUuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRFRDoge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5jcmVhdGVkLnB1c2goe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVEOiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRpb25zLm1vZGlmaWVkLnB1c2goe1xuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1JTUVUWVBFR1JPVVA6IHtcbiAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbnMubWltZXR5cGVncm91cC5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5GSUxFU0laRToge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9ucy5maWxlc2l6ZS5wdXNoKHtcbiAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgZnJvbTogYWdnLmZyb20sXG4gICAgICAgICAgdG86IGFnZy50byB8fCBJbmZpbml0eSxcbiAgICAgICAgICBsYWJlbDoga2V5LnJlcGxhY2UoJ2d0JywgJz4gJykucmVwbGFjZSgnbHQnLCAnPCAnKVxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQ3JlYXRlcyB0aGUgTW9kZWwgb2YgU2VhcmNoIFJlc3VsdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFNlYXJjaFJlc3VsdCB7XG4gIHB1YmxpYyBjb3VudDoge3ZhbHVlOiBudW1iZXIsIHJlbGF0aW9uPzogc3RyaW5nfTtcbiAgcHVibGljIHN1Z2dlc3RzOiBzdHJpbmdbXTtcbiAgcHVibGljIGhpdHM6IGFueVtdO1xuICBwdWJsaWMgdHlwZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGZpZWxkczogRmllbGREZWZpbml0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbHRlciB7XG4gIC8qKlxuICAgKiBhdmFpbGFibGUgb3BlcmF0b3JzIGZvciBhIHNlYXJjaCBmaWx0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgT1BFUkFUT1IgPSB7XG4gICAgLyoqIGVxdWFsICovXG4gICAgRVFVQUw6ICdlcScsXG4gICAgLyoqIG1hdGNoIChmb3Igc3RyaW5nIHdpdGggY2xhc3NpZmljYXRpb24gXCJwYXRoNjY2NlwiKSAqL1xuICAgIE1BVENIOiAnbWF0Y2gnLFxuICAgIC8qKiBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHZhbHVlcyAodmFsdWUgaGFzIHRvIGJlIGFuIGFycmF5KSAgKi9cbiAgICBJTjogJ2luJyxcbiAgICAvKiogZ3JlYXRlciB0aGFuICovXG4gICAgR1JFQVRFUl9USEFOOiAnZ3QnLFxuICAgIC8qKiBncmVhdGVyIHRoYW4gb3IgZXF1YWwgKi9cbiAgICBHUkVBVEVSX09SX0VRVUFMOiAnZ3RlJywgLy9cbiAgICBMRVNTX1RIQU46ICdsdCcsIC8vIGxlc3MgdGhhblxuICAgIExFU1NfT1JfRVFVQUw6ICdsdGUnLCAvLyBsZXNzIHRoYW4gb3IgZXF1YWxcbiAgICBJTlRFUlZBTDogJ2d0bHQnLCAvLyBpbnRlcnZhbFxuICAgIElOVEVSVkFMX0lOQ0xVREVfQk9USDogJ2d0ZWx0ZScsIC8vIGludGVydmFsIGluY2x1ZGUgbGVmdCBhbmQgcmlnaHRcbiAgICBJTlRFUlZBTF9JTkNMVURFX1RPOiAnZ3RsdGUnLCAvLyBpbnRlcnZhbCBpbmNsdWRlIHJpZ2h0XG4gICAgSU5URVJWQUxfSU5DTFVERV9GUk9NOiAnZ3RlbHQnLCAvLyBpbnRlcnZhbCBpbmNsdWRlIGxlZnRcbiAgICBSQU5HRTogJ3JnJyAvLyBhZ2dlZ2F0aW9uIHJhbmdlc1xuICB9O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYSBuZXcgU2VhcmNoRmlsdGVyLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmaWVsZCB0aGlzIGZpbHRlciBzaG91bGQgYXBwbHkgdG8uXG4gICAqIEBwYXJhbSBvcGVyYXRvciBPcGVyYXRvciBpbmRpY2F0aW5nIGhvdyB0byBoYW5kbGUgdGhlIGZpbHRlcnMgdmFsdWUocykuIFNlZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IgZm9yIGF2YWlsYWJsZSBvcGVyYXRvcnMuXG4gICAqIEBwYXJhbSBmaXJzdFZhbHVlIFRoZSBmaWx0ZXJzIHZhbHVlXG4gICAqIEBwYXJhbSBzZWNvbmRWYWx1ZSBPcHRpb25hbCBzZWNvbmQgdmFsdWUgZm9yIGZpbHRlcnMgdGhhdCBmb3IgZXhhbXBsZSBkZWZpbmUgcmFuZ2VzIG9mIHZhbHVlc1xuICAgKiBAcGFyYW0gdHJhbnNmb3JtRGF0ZSBGbGFnIHRvIHRyYW5zZm9ybSBkYXRlIGhvdXJzIGFuZCBtaW51dGVzIGJhc2VkIG9uIG9wZXJhdG9yXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcHJvcGVydHk6IHN0cmluZyxcbiAgICBwdWJsaWMgb3BlcmF0b3I6IHN0cmluZyxcbiAgICBwdWJsaWMgZmlyc3RWYWx1ZTogYW55LFxuICAgIHB1YmxpYyBzZWNvbmRWYWx1ZT86IGFueSxcbiAgICBwdWJsaWMgdHJhbnNmb3JtRGF0ZT86IHt0aW1lPzogYm9vbGVhbjsgdGltZXpvbmU/OiBib29sZWFufVxuICApIHt9XG5cbiAgZm9ybWF0RGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtRGF0ZSAmJiB2YWx1ZVxuICAgICAgPyB0aGlzLnRyYW5zZm9ybURhdGUudGltZXpvbmVcbiAgICAgICAgPyBuZXcgRGF0ZVBpcGUoJ2VuJykudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZFRaJylcbiAgICAgICAgOiB0aGlzLnRyYW5zZm9ybURhdGUudGltZVxuICAgICAgICAgID8gbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpICsgJ1onXG4gICAgICAgICAgOiBuZXcgRGF0ZVBpcGUoJ2VuJykudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgICA6IHZhbHVlO1xuICB9XG5cbiAgdG9RdWVyeSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbzogdGhpcy5vcGVyYXRvcixcbiAgICAgIHYxOiB0aGlzLmZvcm1hdERhdGUodGhpcy5maXJzdFZhbHVlKSxcbiAgICAgIC4uLih0aGlzLnNlY29uZFZhbHVlICYmIHt2MjogdGhpcy5mb3JtYXREYXRlKHRoaXMuc2Vjb25kVmFsdWUpfSlcbiAgICB9O1xuICB9XG5cbiAgdG9EYXRlVGltZVF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnRyYW5zZm9ybURhdGUgJiYgdGhpcy50cmFuc2Zvcm1EYXRlLnRpbWV6b25lICYmIHRoaXMuZmlyc3RWYWx1ZSkge1xuICAgICAgbGV0IGZpcnN0VmFsdWUgPSB0aGlzLmZpcnN0VmFsdWU7XG4gICAgICBsZXQgc2Vjb25kVmFsdWUgPSB0aGlzLnNlY29uZFZhbHVlO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKHNlY29uZFZhbHVlIHx8IGZpcnN0VmFsdWUpO1xuICAgICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuICAgICAgaWYgKHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5MRVNTX09SX0VRVUFMKSB7XG4gICAgICAgIGZpcnN0VmFsdWUgPSBlbmREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShmaXJzdFZhbHVlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5HUkVBVEVSX1RIQU4gfHxcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU5URVJWQUxcbiAgICAgICAgKSB7XG4gICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGZpcnN0VmFsdWUgPSBzdGFydERhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOVEVSVkFMX0lOQ0xVREVfQk9USCB8fFxuICAgICAgICB0aGlzLm9wZXJhdG9yID09PSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUxcbiAgICAgICkge1xuICAgICAgICBzZWNvbmRWYWx1ZSA9IGVuZERhdGUudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG86XG4gICAgICAgICAgdGhpcy5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMXG4gICAgICAgICAgICA/IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEhcbiAgICAgICAgICAgIDogdGhpcy5vcGVyYXRvcixcbiAgICAgICAgdjE6IGZpcnN0VmFsdWUsXG4gICAgICAgIC4uLihzZWNvbmRWYWx1ZSAmJiB7djI6IHNlY29uZFZhbHVlfSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnRvUXVlcnkoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbWF0Y2goXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICBvcGVyYXRvcjogc3RyaW5nLFxuICAgIGZpcnN0VmFsdWU6IGFueSxcbiAgICBzZWNvbmRWYWx1ZT86IGFueVxuICApIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wcm9wZXJ0eSA9PT0gcHJvcGVydHkgJiZcbiAgICAgIHRoaXMub3BlcmF0b3IgPT09IG9wZXJhdG9yICYmXG4gICAgICB0aGlzLnNlY29uZFZhbHVlID09PSBzZWNvbmRWYWx1ZSAmJlxuICAgICAgKHRoaXMuZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIEFycmF5XG4gICAgICAgID8gISF0aGlzLmZpcnN0VmFsdWUuZmluZCh2ID0+IHYgPT09IGZpcnN0VmFsdWUpXG4gICAgICAgIDogdGhpcy5maXJzdFZhbHVlID09PSBmaXJzdFZhbHVlKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -142,7 +142,10 @@ export class SearchService {
142
142
  ? res.aggregations[baseParam].buckets
143
143
  : [];
144
144
  aggregations.forEach(aggregation => {
145
- const { key, doc_count, contextfoldertype } = aggregation;
145
+ let { key, doc_count, contextfoldertype } = aggregation;
146
+ if (baseParam === 'filesize') {
147
+ doc_count = aggregation['filter#documents'].doc_count;
148
+ }
146
149
  state.addAggregations(baseParam, key, doc_count, aggregation);
147
150
  /**
148
151
  * type aggregations may also contain buckets for their context types
@@ -464,4 +467,4 @@ SearchService.ctorParameters = () => [
464
467
  { type: BackendService },
465
468
  { type: Config }
466
469
  ];
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2Uvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDO0FBRTlCOzs7R0FHRztBQUVILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ1UsTUFBcUIsRUFDckIsT0FBdUIsRUFDdkIsTUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNyQixDQUFDO0lBRUo7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDbkMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLEtBQUssWUFB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QUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILDBCQUEwQixDQUFDLE9BQXVCLEVBQUUsYUFBYTtRQUMvRCxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNoRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDOzs7WUEvbEJGLFVBQVU7OztZQWRILGFBQWE7WUFGYixjQUFjO1lBQ2QsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7T2JqZWN0VHlwZX0gZnJvbSAnLi4vLi4vbW9kZWwvb2JqZWN0LXR5cGUubW9kZWwnO1xuaW1wb3J0IHtSYW5nZVZhbHVlfSBmcm9tICcuLi8uLi9tb2RlbC9yYW5nZS12YWx1ZS5tb2RlbCc7XG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi91dGlsL3V0aWxzJztcbmltcG9ydCB7QmFja2VuZFNlcnZpY2V9IGZyb20gJy4uL2JhY2tlbmQvYmFja2VuZC5zZXJ2aWNlJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtTeXN0ZW1TZXJ2aWNlfSBmcm9tICcuLi9zeXN0ZW0vc3lzdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWFyY2hGaWx0ZXJUeXBlfSBmcm9tICcuL3NlYXJjaC1maWx0ZXItdHlwZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmllbGREZWZpbml0aW9uLFxuICBTZWFyY2hGaWx0ZXIsXG4gIFNlYXJjaFF1ZXJ5LFxuICBTZWFyY2hSZXN1bHQsXG4gIFNlYXJjaFN0YXRlXG59IGZyb20gJy4vc2VhcmNoLXF1ZXJ5Lm1vZGVsJztcblxuLyoqXG4gKiBDb2xsZWN0aW9uIG9mIFNlYXJjaCBTZXJ2aWNlc1xuICogU2VlIHtAbGluayBTZWFyY2hRdWVyeX0gZm9yIFF1ZXJ5IERlZmluaXRpb25cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlYXJjaFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN5c3RlbTogU3lzdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgUmFuZ2VWYWx1ZSBpbnN0YW5jZSBmcm9tIHRoZSBnaXZlbiB2YWx1ZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgb2JqZWN0IHRvIGJlXG4gICAqIEByZXR1cm5zIFJhbmdlVmFsdWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdG9SYW5nZVZhbHVlKHZhbHVlOiBhbnkpOiBSYW5nZVZhbHVlIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkoJ29wZXJhdG9yJykgJiZcbiAgICAgICAgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZpcnN0VmFsdWUnKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICB2YWx1ZS5vcGVyYXRvcixcbiAgICAgICAgICB2YWx1ZS5maXJzdFZhbHVlLFxuICAgICAgICAgIHZhbHVlLnNlY29uZFZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZnJvbWF0ZWQgc2VhcmNoIFF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJucyBTZWFyY2hRdWVyeVxuICAgKi9cbiAgcHVibGljIGJ1aWxkUXVlcnkocXVlcnk6IGFueSk6IFNlYXJjaFF1ZXJ5IHtcbiAgICBsZXQgcTogU2VhcmNoUXVlcnk7XG4gICAgaWYgKHF1ZXJ5IGluc3RhbmNlb2YgU2VhcmNoUXVlcnkpIHtcbiAgICAgIHEgPSBxdWVyeTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHFPYmo7XG4gICAgICAvKipcbiAgICAgICAqIGlmIHdlIGdvdCBhIHN0cmluZywgd2UnbGwgYXNzdW1lIHRoYXQgaXQncyBhIEpTT05cbiAgICAgICAqL1xuICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcU9iaiA9IEpTT04ucGFyc2UocXVlcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcU9iaiA9IHF1ZXJ5O1xuICAgICAgfVxuXG4gICAgICBxID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XG4gICAgICBxLnRlcm0gPSBxT2JqLnRlcm07XG4gICAgICBpZiAocU9iai5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHFPYmouZmlsdGVycykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICBxLmZpbHRlcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICAgIGssXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS5vLFxuICAgICAgICAgICAgICBxT2JqLmZpbHRlcnNba10udjEsXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS52MlxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHFPYmoudHlwZXMpIHtcbiAgICAgICAgcU9iai50eXBlcy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKHQpKSB7XG4gICAgICAgICAgICBxLnR5cGVzLnB1c2godGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZSh0KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHEudHlwZXMucHVzaCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHFPYmouY29udGV4dGZvbGRlcnR5cGVzKSB7XG4gICAgICAgIHFPYmouY29udGV4dGZvbGRlcnR5cGVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgaWYgKHQgPT09ICdzeXNyb290Jykge1xuICAgICAgICAgICAgLy8gJ3N5c3Jvb3QnIGlzIG5vdCBhIHJlYWwgb2JqZWN0IHR5cGUsIHNvIHdlIGhhdmUgdG8gY3JlYXRlIGEgZmFrZSB0eXBlLlxuICAgICAgICAgICAgY29uc3Qgc3lzcm9vdEZha2VPYmplY3RUeXBlID0gbmV3IE9iamVjdFR5cGUoe1xuICAgICAgICAgICAgICBpZDogJ2EnLFxuICAgICAgICAgICAgICBmb2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgIG5hbWU6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgcW5hbWU6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgbGFiZWw6ICdzeXNyb290JyxcbiAgICAgICAgICAgICAgaXNjb250ZXh0Zm9sZGVyOiB0cnVlLFxuICAgICAgICAgICAgICBhYnN0cmFjdDogZmFsc2UsXG4gICAgICAgICAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgICBzaGFyZWFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBtaW5maWxlczogMCxcbiAgICAgICAgICAgICAgbWF4ZmlsZXM6IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcS5jb250ZXh0Rm9sZGVyVHlwZXMucHVzaChzeXNyb290RmFrZU9iamVjdFR5cGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNvbnRleHRGb2xkZXJUeXBlcy5wdXNoKHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUodCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBxLmZpZWxkcyA9IHFPYmouZmllbGRzO1xuICAgICAgaWYgKHFPYmoub3B0aW9ucykge1xuICAgICAgICBxLnN1Z2dlc3QgPSBxT2JqLm9wdGlvbnMuc3VnZ2VzdCB8fCBmYWxzZTtcbiAgICAgICAgcS5leHBlcnRNb2RlID0gcU9iai5vcHRpb25zLmV4cGVydG1vZGUgfHwgZmFsc2U7XG4gICAgICAgIHEuc2NvcGUgPSBxT2JqLm9wdGlvbnMuc2NvcGU7XG4gICAgICAgIC8vIFwifHxcIiBkb2VzIG5vdCB3b3JrIGZvciByZWNvZ25pemluZyBcImZhbHNlXCIgd2l0aCBwcmlvcml0eSBvdmVyIFwiZGVmYXVsdCB0cnVlXCJcbiAgICAgICAgcS5yZXNvbHZlUmVmZXJlbmNlID0gKHFPYmoub3B0aW9ucy5yZXNvbHZlcmVmZXJlbmNlICE9PSBudWxsKSA/IHFPYmoub3B0aW9ucy5yZXNvbHZlcmVmZXJlbmNlIDpcbiAgICAgICAgICAoIHFPYmoub3B0aW9ucy5yZXNvbHZlUmVmZXJlbmNlICE9PSBudWxsID8gcU9iai5vcHRpb25zLnJlc29sdmVSZWZlcmVuY2UgOiB0cnVlKTtcbiAgICAgICAgLy8gd2l0aENvbnRleHQgd2FzIG9sZCBhbmQgXCJ3cm9uZ1wiIG5hbWUgb2YgcGFyYW1ldGVyXG4gICAgICAgIHEud2l0aENvbnRleHQgPSBxT2JqLm9wdGlvbnMud2l0aGNvbnRleHQgfHwgcU9iai5vcHRpb25zLndpdGhDb250ZXh0IHx8IGZhbHNlO1xuICAgICAgICBxLnNlYXJjaE1vZGUgPVxuICAgICAgICAgIHFPYmoub3B0aW9ucy5zZWFyY2htb2RlIHx8IFNlYXJjaFF1ZXJ5LkRFRkFVTFRfU0VBUkNIX01PREU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byBiZSBleGVjdXRlZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD5cbiAgICovXG4gIHB1YmxpYyBzZWFyY2gocXVlcnk6IFNlYXJjaFF1ZXJ5KTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUXVlcnkocXVlcnkuZ2V0UXVlcnlKc29uKCkpLnBpcGUoXG4gICAgICBtYXAocmVzID0+IHRoaXMuY3JlYXRlUmVzdWx0RnJvbVJlc3BvbnNlKHJlcykpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBTZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaFN0YXRlKHF1ZXJ5OiBhbnkpOiBPYnNlcnZhYmxlPFNlYXJjaFN0YXRlPiB7XG5cbiAgICBpZiAocXVlcnkgaW5zdGFuY2VvZiBTZWFyY2hRdWVyeSkge1xuICAgICAgcXVlcnkgPSBxdWVyeS5nZXRRdWVyeUpzb24oKTtcbiAgICB9XG4gICAgZGVsZXRlIHF1ZXJ5Lm5hbWU7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVF1ZXJ5KHF1ZXJ5LCB0cnVlKS5waXBlKFxuICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IG5ldyBTZWFyY2hTdGF0ZSgpO1xuICAgICAgICBzdGF0ZS5jb3VudCA9IHJlcy5oaXRzLnRvdGFsO1xuICAgICAgICBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICBjb25zdCBiYXNlUGFyYW0gPSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1trXTtcbiAgICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbnMgPSByZXMuYWdncmVnYXRpb25zW2Jhc2VQYXJhbV1cbiAgICAgICAgICAgID8gcmVzLmFnZ3JlZ2F0aW9uc1tiYXNlUGFyYW1dLmJ1Y2tldHNcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgYWdncmVnYXRpb25zLmZvckVhY2goYWdncmVnYXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3Qge2tleSwgZG9jX2NvdW50LCBjb250ZXh0Zm9sZGVydHlwZX0gPSBhZ2dyZWdhdGlvbjtcbiAgICAgICAgICAgIHN0YXRlLmFkZEFnZ3JlZ2F0aW9ucyhiYXNlUGFyYW0sIGtleSwgZG9jX2NvdW50LCBhZ2dyZWdhdGlvbik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHR5cGUgYWdncmVnYXRpb25zIG1heSBhbHNvIGNvbnRhaW4gYnVja2V0cyBmb3IgdGhlaXIgY29udGV4dCB0eXBlc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGJhc2VQYXJhbSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSAmJlxuICAgICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlLmJ1Y2tldHMuZm9yRWFjaChjdHhBZ2cgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLmFkZEFnZ3JlZ2F0aW9ucyhcbiAgICAgICAgICAgICAgICAgICdjb250ZXh0dHlwZScsXG4gICAgICAgICAgICAgICAgICBjdHhBZ2cua2V5LFxuICAgICAgICAgICAgICAgICAgY3R4QWdnLmRvY19jb3VudCxcbiAgICAgICAgICAgICAgICAgIGN0eEFnZ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIHBhcnQgb2YgYSBxdWVyaWVzIHJlc3VsdC4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgcGFnaW5nIG9mIHJlc3VsdHNcbiAgICogb3IgbGF6eSBsb2FkaW5nIGxhcmdlIHJlc3VsdHMuXG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgdG8gYmUgZXhlY3V0ZWRcbiAgICogQHBhcmFtIGZyb21JbmRleCBUaGUgaW5kZXggZnJvbSB3aGVyZSB0byBmZXRjaCByZXN1bHRzXG4gICAqIEBwYXJhbSBjaHVua1NpemUgU2l6ZSBvZiB0aGUgY2h1bmsgdG8gYmUgZmV0Y2hlZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD5cbiAgICovXG4gIHB1YmxpYyBnZXRDaHVua2VkUmVzdWx0KFxuICAgIHF1ZXJ5OiBTZWFyY2hRdWVyeSxcbiAgICBmcm9tSW5kZXg6IG51bWJlcixcbiAgICBjaHVua1NpemU6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD4ge1xuICAgIGNvbnN0IHEgPSBxdWVyeS5nZXRRdWVyeUpzb24oKTtcblxuICAgIHEuZnJvbSA9IGZyb21JbmRleDtcbiAgICBjb25zdCBxdWVyeVVyaSA9IGBzZWFyY2ghY2h1bms6JHtjaHVua1NpemV9ISR7SlNPTi5zdHJpbmdpZnkocSl9YDtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldFZpYVRlbXBDYWNoZShxdWVyeVVyaSwgKCkgPT5cbiAgICAgIHRoaXMuZXhlY3V0ZVF1ZXJ5KHEsIGZhbHNlLCBjaHVua1NpemUpLnBpcGUoXG4gICAgICAgIG1hcChyZXMgPT4gdGhpcy5jcmVhdGVSZXN1bHRGcm9tUmVzcG9uc2UocmVzKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgcXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5SnNvbiBUaGUgcXVlcnkgSlNPTiB0byBiZSBleGVjdXRlZFxuICAgKiBAcGFyYW0gYWdncmVnYXRlU2VhcmNoIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBleGVjdXRlIGFuIGFnZ3JlZ2F0aW9uIHNlYXJjaCAobm8gYWN0dWFsIHJlc3VsdHMpXG4gICAqIEBwYXJhbSBjdXN0b21TaXplIEN1c3RvbSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSBmZXRjaGVkLCBpZiBub3Qgc2V0IHRoZSBkZWZhdWx0IHNpemUgd2lsbCBiZSBhcHBsaWVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgcHVibGljIGV4ZWN1dGVRdWVyeShcbiAgICBxdWVyeUpzb246IGFueSxcbiAgICBhZ2dyZWdhdGVTZWFyY2g/OiBib29sZWFuLFxuICAgIGN1c3RvbVNpemU/OiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgdXJpOiBzdHJpbmc7XG4gICAgbGV0IHF1ZXJ5ID0gcXVlcnlKc29uO1xuICAgIGlmIChhZ2dyZWdhdGVTZWFyY2gpIHtcbiAgICAgIHVyaSA9IGAvYWdncmVnYXRlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZSA9IGN1c3RvbVNpemUgfHwgdGhpcy5jb25maWcuZ2V0UmF3KCdzZWFyY2gubGltaXQnKTtcbiAgICAgIHVyaSA9IGAvP3NpemU9JHtzaXplfWA7XG4gICAgfVxuICAgIHF1ZXJ5Lm9wdGlvbnMgPSB7Li4ucXVlcnkub3B0aW9ucywgdHJhY2t0b3RhbGhpdHM6IHRoaXMuY29uZmlnLmdldFJhdygnc2VhcmNoLnRyYWNrVG90YWxIaXRzJykgfHwgZmFsc2UsIHRpbWV6b25lOiBVdGlscy5nZXRUaW1lem9uZU9mZnNldCgpfTtcblxuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0VmlhVGVtcENhY2hlKHVyaSArIEpTT04uc3RyaW5naWZ5KHF1ZXJ5KSwgKCkgPT4gdGhpcy5iYWNrZW5kLnBvc3QodXJpLCBxdWVyeSwgdGhpcy5iYWNrZW5kLmdldFNlYXJjaEJhc2UoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkcyBhIGNzdi1maWxlIG9mIHRoZSByZXN1bHRzIG9mIGEgZ2l2ZW4gc2VhcmNoLXF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeUpzb24gVGhlIHF1ZXJ5IEpTT04gdG8gYmUgZXhlY3V0ZWRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBwdWJsaWMgZG93bmxvYWRDc3ZGcm9tUXVlcnkocXVlcnlKc29uOiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmRcbiAgICAgIC5wb3N0KCcvZXhwb3J0JywgcXVlcnlKc29uLCB0aGlzLmJhY2tlbmQuZ2V0U2VhcmNoQmFzZSgpLCB7XG4gICAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcmVzLmJvZHldLCB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtOCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIHRoaXMuZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlcyksIHthdXRvQm9tOiB0cnVlfSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlTmFtZUZyb21IdHRwUmVzcG9uc2UocmVzOiBIdHRwUmVzcG9uc2U8YW55Pikge1xuICAgIGNvbnN0IGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9XG4gICAgICByZXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSB8fCAnJztcbiAgICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uSGVhZGVyLnNwbGl0KCdmaWxlbmFtZT0nKVsxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHNlYXJjaCBmb3IgZmV0Y2hpbmcgc3VnZ2VzdGlvbnMgb24gYSBnaXZlbiBzZWFyY2ggdGVybS5cbiAgICpcbiAgICogQHBhcmFtIHRlcm0gVGhlIHNlYXJjaCB0ZXJtXG4gICAqIEByZXR1cm5cbiAgICovXG4gIHB1YmxpYyBhdXRvY29tcGxldGUodGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXRKc29uKFxuICAgICAgYC9hdXRvY29tcGxldGU/cHJlZml4PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRlcm0pfWAsXG4gICAgICB0aGlzLmJhY2tlbmQuZ2V0U2VhcmNoQmFzZSgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhpcyBtZXRob2QgdG8gY3JlYXRlIGEgU2VhcmNoRmlsdGVyIGZvciBhIGZvcm0gZWxlbWVudC4gQmFzZWQgb24gdGhlIHRhcmdldCB0eXBlc1xuICAgKiBpdCdsbCBjcmVhdGUgdGhlIHJpZ2h0IGtpbmQgb2YgZmlsdGVyIHRoYXQgeW91IHRoZW4gY2FuIGFkZCB0byBhIFNlYXJjaFF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXRUeXBlc1xuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnROYW1lXG4gICAqIEBwYXJhbSBlbGVtZW50VmFsdWVcbiAgICogQHJldHVybnMgU2VhcmNoRmlsdGVyW10gQW4gYXJyYXkgb2Ygc2VhcmNoIGZpbHRlcnMgbW9zdCBvZiB0aGUgdGltZSBjb250YWluaW5nIG9ubHkgb25lIGVudHJ5LCBidXRcbiAgICogZm9yIHRhYmxlIGVsZW1lbnRzIHRoaXMgY291bGQgYmUgbW9yZVxuICAgKi9cbiAgcHVibGljIGdldFNlYXJjaEZpbHRlcihcbiAgICB0YXJnZXRUeXBlczogT2JqZWN0VHlwZVtdLFxuICAgIGZvcm1FbGVtZW50TmFtZTogc3RyaW5nLFxuICAgIGVsZW1lbnRWYWx1ZTogYW55XG4gICk6IFNlYXJjaEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXI6IFNlYXJjaEZpbHRlcltdID0gW107XG4gICAgY29uc3QgZmlsdGVyVHlwZTogU2VhcmNoRmlsdGVyVHlwZSA9IHRoaXMuaWRlbnRpZnlTZWFyY2hGaWx0ZXIoXG4gICAgICB0YXJnZXRUeXBlcyxcbiAgICAgIGZvcm1FbGVtZW50TmFtZVxuICAgICk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0YXJnZXRUeXBlc1swXS5lbGVtZW50cy5maW5kKGVsID0+IGVsLnFuYW1lID09PSBmb3JtRWxlbWVudE5hbWUpO1xuXG4gICAgaWYgKGVsZW1lbnRWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoZm9ybUVsZW1lbnROYW1lLCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUwsIG51bGwpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZm9ybUVsZW1lbnQgJiYgZm9ybUVsZW1lbnQuY2xhc3NpZmljYXRpb24gPT09ICdwYXRoJykge1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5NQVRDSCxcbiAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRWYWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgIC8qKlxuICAgICAgICogY3JlYXRlIGZpbHRlciBmb3IgZWxlbWVudHMgdGhhdCBzdXBwb3J0IHJhbmdlcyBsaWtlIERBVEVUSU1FIGFuZCBOVU1CRVJcbiAgICAgICAqL1xuICAgICAgaWYgKFxuICAgICAgICBlbGVtZW50VmFsdWUuZmlyc3RWYWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICBlbGVtZW50VmFsdWUuZmlyc3RWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgIGZvcm1FbGVtZW50TmFtZSxcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZS5vcGVyYXRvcixcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZS5maXJzdFZhbHVlLFxuICAgICAgICAgICAgZWxlbWVudFZhbHVlLnNlY29uZFZhbHVlLFxuICAgICAgICAgICAgZmlsdGVyVHlwZS5kYXRldGltZSA/IHt0aW1lOiBmaWx0ZXJUeXBlLndpdGh0aW1lfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKChmaWx0ZXJUeXBlLm11bHRpc2VsZWN0IHx8IEFycmF5LmlzQXJyYXkoZWxlbWVudFZhbHVlKSkgJiYgIWZpbHRlclR5cGUudGFibGUpIHtcbiAgICAgIC8qKlxuICAgICAgICogY3JlYXRlIGZpbHRlciBmb3IgbXVsdGlzZWxlY3QgZWxlbWVudHMgbGlrZSBDT0RFU1lTVEVNIGFuZCBPUkdBTklaQVRJT05cbiAgICAgICAqL1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudFZhbHVlKSAmJiBlbGVtZW50VmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICBmb3JtRWxlbWVudE5hbWUsXG4gICAgICAgICAgICBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuSU4sXG4gICAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXJUeXBlLnRhYmxlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGNyZWF0ZSBmaWx0ZXIocykgZm9yIHRhYmxlIGVsZW1lbnRzXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IHF1ZXJ5Um93ID0gZWxlbWVudFZhbHVlWzBdO1xuICAgICAgT2JqZWN0LmtleXMocXVlcnlSb3cpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZihxdWVyeVJvd1trZXldICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGAke2Zvcm1FbGVtZW50TmFtZX0uJHtrZXl9YDtcbiAgICAgICAgICBpZiAocXVlcnlSb3dba2V5XSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldLm9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV0uZmlyc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldLnNlY29uZFZhbHVlXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KHF1ZXJ5Um93W2tleV0pID8gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOIDogU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Um93W2tleV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKipcbiAgICAgICAqIGRlZmF1bHQgd2lsbCB1c2UgZXF1YWxpdHkgb3BlcmF0b3JcbiAgICAgICAqL1xuICAgICAgZmlsdGVyLnB1c2goXG4gICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCxcbiAgICAgICAgICBlbGVtZW50VmFsdWVcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZGVudGlmaWVzIGZvcm0gZWxlbWVudHMgdGhhdCBhcmUgZW5hYmxlZCB0byBjb250YWluIG11bHRpcGxlIHZhbHVlc1xuICAgKiB0cnkgdG8gZmluZCB0aGUgZm9ybSBlbGVtZW50IGluc2lkZSBvZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHR5cGVzIHRvIGdldCBpdHMgdHlwZVxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZVtdIHRhcmdldFR5cGVzXG4gICAqIEBwYXJhbSBzdHJpbmcgZm9ybUVsZW1lbnROYW1lXG4gICAqIEByZXR1cm4gU2VhcmNoRmlsdGVyVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBpZGVudGlmeVNlYXJjaEZpbHRlcihcbiAgICB0YXJnZXRUeXBlczogT2JqZWN0VHlwZVtdLFxuICAgIGZvcm1FbGVtZW50TmFtZTogc3RyaW5nXG4gICk6IFNlYXJjaEZpbHRlclR5cGUge1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKCFtYXRjaCAmJiBpIDwgdGFyZ2V0VHlwZXMubGVuZ3RoKSB7XG4gICAgICBtYXRjaCA9IHRhcmdldFR5cGVzW2ldLmVsZW1lbnRzLmZpbmQoXG4gICAgICAgIGVsZW1lbnQgPT4gZWxlbWVudC5xbmFtZSA9PT0gZm9ybUVsZW1lbnROYW1lXG4gICAgICApO1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtdWx0aXNlbGVjdDogdGhpcy5pc011bHRpc2VsZWN0U2VhcmNoRmlsdGVyKG1hdGNoKSxcbiAgICAgIHRhYmxlOiBtYXRjaCAmJiBtYXRjaC50eXBlID09PSAnVEFCTEUnLFxuICAgICAgZGF0ZXRpbWU6IG1hdGNoICYmIG1hdGNoLnR5cGUgPT09ICdEQVRFVElNRScsXG4gICAgICB3aXRodGltZTogbWF0Y2ggJiYgbWF0Y2gud2l0aHRpbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGlkZW50aWZpZXMgZm9ybSBlbGVtZW50cyB0aGF0IGFyZSBlbmFibGVkIHRvIGNvbnRhaW4gbXVsdGlwbGUgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudFxuICAgKiBAcmV0dXJuIGJvb2xlYW5cbiAgICovXG4gIHByaXZhdGUgaXNNdWx0aXNlbGVjdFNlYXJjaEZpbHRlcihmb3JtRWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGZvcm1FbGVtZW50ICYmXG4gICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgfHxcbiAgICAgICAgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nIHx8XG4gICAgICAgIC8vIC4uLlxuICAgICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiZcbiAgICAgICAgICBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykgfHxcbiAgICAgICAgLy8gbXVsdGlzZWxlY3QgcmVmZXJlbmNlIGZpZWxkc1xuICAgICAgICAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiYgZm9ybUVsZW1lbnQubXVsdGlzZWxlY3QpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFNlYXJjaFJlc3VsdCBmcm9tIHRoZSByZXNwb25zZSBzZW50IGJ5IHRoZSBzZXJ2ZXJcbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmRSZXNwb25zZSBTZXJ2ZXIgcmVzcG9uc2VcbiAgICogQHJldHVyblRoZSBTZWFyY2hSZXN1bHQgU2VhcmNoUmVzdWx0IG9iamVjdCBjcmVhdGVkIGZyb20gdGhlIHNlcnZlciByZXNwb25zZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZVJlc3VsdEZyb21SZXNwb25zZShiYWNrZW5kUmVzcG9uc2UpOiBTZWFyY2hSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZWFyY2hSZXN1bHQoKTtcbiAgICByZXN1bHQuc3VnZ2VzdHMgPSBiYWNrZW5kUmVzcG9uc2Uuc3VnZ2VzdDtcbiAgICByZXN1bHQuZmllbGRzID0gYmFja2VuZFJlc3BvbnNlLmNvbmZpZztcblxuICAgIC8qKlxuICAgICAqIHVzZSBoaXRzIF9pZCBmaWVsZCBhcyBpZCBwcm9wZXJ0eSwgYmVjYXVzZSBvdGhlcndpc2UgZW1wdHkgcmVzdWx0IGhpdHMgd291bGQgbm90IGNvbnRhaW4gYW4gaWRcbiAgICAgKi9cbiAgICBjb25zdCBoaXRzID0gYmFja2VuZFJlc3BvbnNlLmhpdHMuaGl0cy5tYXAoaCA9PiAoe1xuICAgICAgLi4uaC5fc291cmNlLFxuICAgICAgaWQ6IGguX2lkLFxuICAgICAgLi4uKGguc25pcHBldHMgJiYge3NuaXBwZXRzOiBoLnNuaXBwZXRzfSksXG4gICAgICAvLyBoYXZpbmcgcmVxdWVzdGVkIGEgcmVzb2x2ZWQgcmVmZXJlbmNlIChvcHRpb25zKSB3ZSBhbHNvIHBhc3MgYF9yZWZlcmVuY2VgIGluIHRoZSByZXN1bHQgaXRlbVxuICAgICAgLi4uKGgucmVmZXJlbmNlcyAmJiB7X3JlZmVyZW5jZXM6IGgucmVmZXJlbmNlc30pLFxuICAgICAgLi4uKGguY29udGV4dCAmJiB7Y29udGV4dDogaC5jb250ZXh0fSlcbiAgICB9KSk7XG5cbiAgICByZXN1bHQuY291bnQgPSBiYWNrZW5kUmVzcG9uc2UuaGl0cy50b3RhbDtcbiAgICByZXN1bHQuaGl0cyA9IGhpdHMgfHwgW107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlcyB0aGUgUmVzdWwgdEZpZWxkIERlZmluaXRpb24gQ29uZmlnXG4gICAqXG4gICAqIEBwYXJhbSBTZWFyY2hRdWVyeSBxdWVyeVxuICAgKiBAcmV0dXJuICh7dHlwZTogT2JqZWN0VHlwZTsgY29udGV4dFR5cGU6IE9iamVjdFR5cGV9KVxuICAgKi9cbiAgZ2V0UmVzdWx0RmllbGREZWZpbml0aW9uQ29uZmlnKHF1ZXJ5OiBTZWFyY2hRdWVyeSkge1xuICAgIGNvbnN0IHR5cGUgPSAocXVlcnkudHlwZXMgfHwgW10pLmxlbmd0aCA9PT0gMSA/IHF1ZXJ5LnR5cGVzWzBdIDogbnVsbDtcbiAgICBjb25zdCBjb250ZXh0VHlwZSA9XG4gICAgICAocXVlcnkuY29udGV4dEZvbGRlclR5cGVzIHx8IFtdKS5sZW5ndGggPT09IDFcbiAgICAgICAgPyBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF1cbiAgICAgICAgOiBudWxsO1xuICAgIHJldHVybiB7dHlwZSwgY29udGV4dFR5cGV9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZU5hbWU6IHR5cGUgPyB0eXBlLnFuYW1lIDogJ3N5c29iamVjdCcsXG4gICAgICBjb250ZXh0VHlwZU5hbWU6IHR5cGUgJiYgY29udGV4dFR5cGUgPyBjb250ZXh0VHlwZS5xbmFtZSA6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVzdWx0IGZpZWxkIGRlZmluaXRpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHR5cGVcbiAgICogVVNFUjogKGRlZmF1bHQpIHRoZSByZXN1bHQgbGlzdCBjb25maWd1cmF0aW9uIHNhdmVkIGJ5IHRoZSBjdXJyZW50IHVzZXJcbiAgICogREVGQVVMVDogdGhlIGRlZmF1bHQgcmVzdWx0IGxpc3QgY29uZmlndXJhdGlvbiAoYWxzbyByZXR1cm5lZCB3aGVuIHRoZXJlIGlzIG5vIHVzZXIgY29uZmlndXJhdGlvbilcbiAgICogQUxMOiBhbGwgYXZhaWxhYmxlIHJlc3VsdCBmaWVsZHMgZm9yIHRoZSBnaXZlbiB0eXBlIChhbmQgY29udGV4dClcbiAgICpcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIHR5cGUgVGhlIG9iamVjdCB0eXBlXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCBjb250ZXh0VHlwZSBPYmplY3QgdHlwZSB0YXJnZXQgdHlwZXMgYWxsb3dlZCBjb250ZXh0IHR5cGVcbiAgICogQHBhcmFtIG1vZGUgVGhlIHJlc3VsdCBsaXN0cyBjb25maWd1cmF0aW9uIG1vZGU6XG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxGaWVsZERlZmluaXRpb24+XG4gICAqL1xuICBmZXRjaFJlc3VsdEZpZWxkRGVmaW5pdGlvbihcbiAgICB0eXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBjb250ZXh0VHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgbW9kZVxuICApIHtcbiAgICBjb25zdCB7dHlwZU5hbWUsIGNvbnRleHRUeXBlTmFtZX0gPSB0aGlzLnJlc29sdmVDb25maWdUeXBlTmFtZXMoXG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dFR5cGVcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IFV0aWxzLmJ1aWxkVXJpKGAvdXNlci9jb25maWcvcmVzdWx0LyR7dHlwZU5hbWV9YCwge1xuICAgICAgY29udGV4dHR5cGU6IGNvbnRleHRUeXBlTmFtZSxcbiAgICAgIG1vZGVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAuZ2V0SnNvbih1cmwpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXM6IGFueSkgPT5cbiAgICAgICAgICAgIG5ldyBGaWVsZERlZmluaXRpb24oXG4gICAgICAgICAgICAgIHJlcy5lbGVtZW50cyxcbiAgICAgICAgICAgICAgcmVzLnNvcnRvcmRlcixcbiAgICAgICAgICAgICAgcmVzLmdyb3Vwb3JkZXIsXG4gICAgICAgICAgICAgIHJlcy5waW5uZWQsXG4gICAgICAgICAgICAgIHJlcy5hbGlnbm1lbnR4LFxuICAgICAgICAgICAgICByZXMubW9kZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgY29sdW1uIGRlZmluaXRpb24gYXMgcmVzdWx0IG9yIGNvbW1vbiByZXN1bHQuXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCB0eXBlIFRoZSBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgY29udGV4dFR5cGUgT2JqZWN0IHR5cGUgdGFyZ2V0IHR5cGVzIGFsbG93ZWQgY29udGV4dCB0eXBlXG4gICAqIEBwYXJhbSBGaWVsZERlZmluaXRpb24gZGF0YSBUaGUgcmVzdWx0IGxpc3QgY29uZmlndXJhdGlvbiB0byBiZSBwZXJzaXN0ZWRcbiAgICogQHBhcmFtIGJvb2xlYW4gY29tbW9uIEZsYWcgZW5hYmxlcyB0byBzZXQgY29uZmlnIGFzIGRlZmF1bHQgLyBjb21tb24gcmVzdWx0XG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICBzYXZlUmVzdWx0RmllbGREZWZpbml0aW9uKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBkYXRhOiBGaWVsZERlZmluaXRpb24sXG4gICAgY29tbW9uID0gZmFsc2VcbiAgKSB7XG4gICAgY29uc3QgYmFzZVVyaSA9IGNvbW1vblxuICAgICAgPyAnL3VzZXIvY29uZmlnL2NvbW1vbnJlc3VsdC8nXG4gICAgICA6ICcvdXNlci9jb25maWcvcmVzdWx0Lyc7XG4gICAgY29uc3Qge3R5cGVOYW1lLCBjb250ZXh0VHlwZU5hbWV9ID0gdGhpcy5yZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRUeXBlXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBVdGlscy5idWlsZFVyaShiYXNlVXJpICsgdHlwZU5hbWUsIHtcbiAgICAgIGNvbnRleHR0eXBlOiBjb250ZXh0VHlwZU5hbWVcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnBvc3QodXJsLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29sdW1uIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCB0eXBlIFRoZSBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgY29udGV4dFR5cGUgT2JqZWN0IHR5cGUgdGFyZ2V0IHR5cGVzIGFsbG93ZWQgY29udGV4dCB0eXBlXG4gICAqIEByZXR1cm4gT2JzZXJ2YWJsZTxhbnk+XG4gICAqL1xuICByZW1vdmVSZXN1bHRGaWVsZERlZmluaXRpb24oXG4gICAgdHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgY29udGV4dFR5cGU6IE9iamVjdFR5cGUgfCBudWxsXG4gICkge1xuICAgIGNvbnN0IHt0eXBlTmFtZSwgY29udGV4dFR5cGVOYW1lfSA9IHRoaXMucmVzb2x2ZUNvbmZpZ1R5cGVOYW1lcyhcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0VHlwZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gVXRpbHMuYnVpbGRVcmkoYC91c2VyL2NvbmZpZy9yZXN1bHQvJHt0eXBlTmFtZX1gLCB7XG4gICAgICBjb250ZXh0dHlwZTogY29udGV4dFR5cGVOYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5kZWwodXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZSB0byBiZSBhZGRlZCB0byBhIGZvcm0gZWxlbWVudCBieSBleHRyYWN0aW5nIGl0IGZyb20gYVxuICAgKiBzZWFyY2ggZmlsdGVyLiBUaGUga2luZCBvZiB2YWx1ZSBkaWZmZXJzIGJhc2VkIG9uIHRoZSBmb3JtIGVsZW1lbnRzIHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byBleHRyYWN0IHZhbHVlIGZyb21cbiAgICogQHBhcmFtIGZvcm1FbGVtZW50VHlwZSBGb3JtIGVsZW1lbnRzIHR5cGUgKCdTVFJJTkcnLCAnREFURScsICdDT0RFU1lTVEVNJywgLi4uKVxuICAgKiBAcmV0dXJucyB0aGUgZXh0cmFjdGVkIHZhbHVlXG4gICAqL1xuICBmaWx0ZXJUb0VsZW1lbnRWYWx1ZShmaWx0ZXI6IFNlYXJjaEZpbHRlciwgZm9ybUVsZW1lbnRUeXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgLy8gdHlwZXMgdGhhdCBzdXBwb3J0IHJhbmdlc1xuICAgICAgaWYgKChmb3JtRWxlbWVudFR5cGUgPT09ICdOVU1CRVInIHx8IGZvcm1FbGVtZW50VHlwZSA9PT0gJ0RBVEVUSU1FJykgJiYgZmlsdGVyLmZpcnN0VmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShcbiAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IsXG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUsXG4gICAgICAgICAgZmlsdGVyLnNlY29uZFZhbHVlXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIHZhbHVlIGJ5IGV4dHJhY3RpbmcgdGhlIGRhdGEgZnJvbSB0aGUgY29ycmVzcG9uZGluZ1xuICAgKiBzZWFyY2ggZmlsdGVycy5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlcnMgVGhlIGZpbHRlcnMgdG8gZXh0cmFjdCB2YWx1ZSBmcm9tXG4gICAqIEBwYXJhbSB0YWJsZUVsZW1lbnRzIHRoZSBmb3JtIGVsZW1lbnRzIG9mIHRoZSB0YWJsZVxuICAgKiBAcmV0dXJucyB0aGUgdGFibGUgdmFsdWUgZXh0cmFjdGVkIGZyb20gYWxsIGZpbHRlcnNcbiAgICovXG4gIHRhYmxlRmlsdGVyc1RvRWxlbWVudFZhbHVlKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCB0YWJsZUVsZW1lbnRzKXtcbiAgICBsZXQgdmFsdWUgPSB7fTtcbiAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiB7XG4gICAgICBsZXQga2V5ID0gdGFibGVFbGVtZW50cy5maW5kKGUgPT4gZS5xbmFtZSA9PT0gZi5wcm9wZXJ0eSkubmFtZTtcbiAgICAgIGxldCB0eXBlID0gdGFibGVFbGVtZW50cy5maW5kKGUgPT4gZS5xbmFtZSA9PT0gZi5wcm9wZXJ0eSkudHlwZTtcbiAgICAgIHZhbHVlW2tleV0gPSB0aGlzLmZpbHRlclRvRWxlbWVudFZhbHVlKGYsIHR5cGUpO1xuICAgIH0pO1xuICAgIHJldHVybiBbdmFsdWVdO1xuICB9XG59XG4iXX0=
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lby1zZGsvY29yZS9zcmMvbGliL3NlcnZpY2Uvc2VhcmNoL3NlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLFdBQVcsRUFDWixNQUFNLHNCQUFzQixDQUFDO0FBRTlCOzs7R0FHRztBQUVILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ1UsTUFBcUIsRUFDckIsT0FBdUIsRUFDdkIsTUFBYztRQUZkLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNyQixDQUFDO0lBRUo7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDbkMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLEtBQUssWUFB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LENBQ3BCLE1BQU0sQ0FBQyxRQUFRLEVBQ2YsTUFBTSxDQUFDLFVBQVUsRUFDakIsTUFBTSxDQUFDLFdBQVcsQ0FDbkIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLEtBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO2FBQzNCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsMEJBQTBCLENBQUMsT0FBdUIsRUFBRSxhQUFhO1FBQy9ELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxHQUFHLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMvRCxJQUFJLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7OztZQWxtQkYsVUFBVTs7O1lBZEgsYUFBYTtZQUZiLGNBQWM7WUFDZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtPYmplY3RUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9vYmplY3QtdHlwZS5tb2RlbCc7XG5pbXBvcnQge1JhbmdlVmFsdWV9IGZyb20gJy4uLy4uL21vZGVsL3JhbmdlLXZhbHVlLm1vZGVsJztcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uLy4uL3V0aWwvdXRpbHMnO1xuaW1wb3J0IHtCYWNrZW5kU2VydmljZX0gZnJvbSAnLi4vYmFja2VuZC9iYWNrZW5kLnNlcnZpY2UnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQge1N5c3RlbVNlcnZpY2V9IGZyb20gJy4uL3N5c3RlbS9zeXN0ZW0uc2VydmljZSc7XG5pbXBvcnQge1NlYXJjaEZpbHRlclR5cGV9IGZyb20gJy4vc2VhcmNoLWZpbHRlci10eXBlLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBGaWVsZERlZmluaXRpb24sXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoUXVlcnksXG4gIFNlYXJjaFJlc3VsdCxcbiAgU2VhcmNoU3RhdGVcbn0gZnJvbSAnLi9zZWFyY2gtcXVlcnkubW9kZWwnO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgU2VhcmNoIFNlcnZpY2VzXG4gKiBTZWUge0BsaW5rIFNlYXJjaFF1ZXJ5fSBmb3IgUXVlcnkgRGVmaW5pdGlvblxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2VhcmNoU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFja2VuZDogQmFja2VuZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1xuICApIHt9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBSYW5nZVZhbHVlIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHZhbHVlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBvYmplY3QgdG8gYmVcbiAgICogQHJldHVybnMgUmFuZ2VWYWx1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0b1JhbmdlVmFsdWUodmFsdWU6IGFueSk6IFJhbmdlVmFsdWUge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnb3BlcmF0b3InKSAmJlxuICAgICAgICB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnZmlyc3RWYWx1ZScpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgIHZhbHVlLmZpcnN0VmFsdWUsXG4gICAgICAgICAgdmFsdWUuc2Vjb25kVmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmcm9tYXRlZCBzZWFyY2ggUXVlcnlcbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5XG4gICAqIEByZXR1cm5zIFNlYXJjaFF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgYnVpbGRRdWVyeShxdWVyeTogYW55KTogU2VhcmNoUXVlcnkge1xuICAgIGxldCBxOiBTZWFyY2hRdWVyeTtcbiAgICBpZiAocXVlcnkgaW5zdGFuY2VvZiBTZWFyY2hRdWVyeSkge1xuICAgICAgcSA9IHF1ZXJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcU9iajtcbiAgICAgIC8qKlxuICAgICAgICogaWYgd2UgZ290IGEgc3RyaW5nLCB3ZSdsbCBhc3N1bWUgdGhhdCBpdCdzIGEgSlNPTlxuICAgICAgICovXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICBxT2JqID0gSlNPTi5wYXJzZShxdWVyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxT2JqID0gcXVlcnk7XG4gICAgICB9XG5cbiAgICAgIHEgPSBuZXcgU2VhcmNoUXVlcnkoKTtcbiAgICAgIHEudGVybSA9IHFPYmoudGVybTtcbiAgICAgIGlmIChxT2JqLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocU9iai5maWx0ZXJzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIHEuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgICAgayxcbiAgICAgICAgICAgICAgcU9iai5maWx0ZXJzW2tdLm8sXG4gICAgICAgICAgICAgIHFPYmouZmlsdGVyc1trXS52MSxcbiAgICAgICAgICAgICAgcU9iai5maWx0ZXJzW2tdLnYyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocU9iai50eXBlcykge1xuICAgICAgICBxT2JqLnR5cGVzLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3lzdGVtLmdldE9iamVjdFR5cGUodCkpIHtcbiAgICAgICAgICAgIHEudHlwZXMucHVzaCh0aGlzLnN5c3RlbS5nZXRPYmplY3RUeXBlKHQpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcS50eXBlcy5wdXNoKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocU9iai5jb250ZXh0Zm9sZGVydHlwZXMpIHtcbiAgICAgICAgcU9iai5jb250ZXh0Zm9sZGVydHlwZXMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgICBpZiAodCA9PT0gJ3N5c3Jvb3QnKSB7XG4gICAgICAgICAgICAvLyAnc3lzcm9vdCcgaXMgbm90IGEgcmVhbCBvYmplY3QgdHlwZSwgc28gd2UgaGF2ZSB0byBjcmVhdGUgYSBmYWtlIHR5cGUuXG4gICAgICAgICAgICBjb25zdCBzeXNyb290RmFrZU9iamVjdFR5cGUgPSBuZXcgT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICAgIGlkOiAnYScsXG4gICAgICAgICAgICAgIGZvbGRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgbmFtZTogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBxbmFtZTogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBsYWJlbDogJ3N5c3Jvb3QnLFxuICAgICAgICAgICAgICBpc2NvbnRleHRmb2xkZXI6IHRydWUsXG4gICAgICAgICAgICAgIGFic3RyYWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgZWxlbWVudHM6IFtdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICAgIHNoYXJlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIG1pbmZpbGVzOiAwLFxuICAgICAgICAgICAgICBtYXhmaWxlczogMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLmNvbnRleHRGb2xkZXJUeXBlcy5wdXNoKHN5c3Jvb3RGYWtlT2JqZWN0VHlwZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHEuY29udGV4dEZvbGRlclR5cGVzLnB1c2godGhpcy5zeXN0ZW0uZ2V0T2JqZWN0VHlwZSh0KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHEuZmllbGRzID0gcU9iai5maWVsZHM7XG4gICAgICBpZiAocU9iai5vcHRpb25zKSB7XG4gICAgICAgIHEuc3VnZ2VzdCA9IHFPYmoub3B0aW9ucy5zdWdnZXN0IHx8IGZhbHNlO1xuICAgICAgICBxLmV4cGVydE1vZGUgPSBxT2JqLm9wdGlvbnMuZXhwZXJ0bW9kZSB8fCBmYWxzZTtcbiAgICAgICAgcS5zY29wZSA9IHFPYmoub3B0aW9ucy5zY29wZTtcbiAgICAgICAgLy8gXCJ8fFwiIGRvZXMgbm90IHdvcmsgZm9yIHJlY29nbml6aW5nIFwiZmFsc2VcIiB3aXRoIHByaW9yaXR5IG92ZXIgXCJkZWZhdWx0IHRydWVcIlxuICAgICAgICBxLnJlc29sdmVSZWZlcmVuY2UgPSAocU9iai5vcHRpb25zLnJlc29sdmVyZWZlcmVuY2UgIT09IG51bGwpID8gcU9iai5vcHRpb25zLnJlc29sdmVyZWZlcmVuY2UgOlxuICAgICAgICAgICggcU9iai5vcHRpb25zLnJlc29sdmVSZWZlcmVuY2UgIT09IG51bGwgPyBxT2JqLm9wdGlvbnMucmVzb2x2ZVJlZmVyZW5jZSA6IHRydWUpO1xuICAgICAgICAvLyB3aXRoQ29udGV4dCB3YXMgb2xkIGFuZCBcIndyb25nXCIgbmFtZSBvZiBwYXJhbWV0ZXJcbiAgICAgICAgcS53aXRoQ29udGV4dCA9IHFPYmoub3B0aW9ucy53aXRoY29udGV4dCB8fCBxT2JqLm9wdGlvbnMud2l0aENvbnRleHQgfHwgZmFsc2U7XG4gICAgICAgIHEuc2VhcmNoTW9kZSA9XG4gICAgICAgICAgcU9iai5vcHRpb25zLnNlYXJjaG1vZGUgfHwgU2VhcmNoUXVlcnkuREVGQVVMVF9TRUFSQ0hfTU9ERTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8U2VhcmNoUmVzdWx0PlxuICAgKi9cbiAgcHVibGljIHNlYXJjaChxdWVyeTogU2VhcmNoUXVlcnkpOiBPYnNlcnZhYmxlPFNlYXJjaFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVRdWVyeShxdWVyeS5nZXRRdWVyeUpzb24oKSkucGlwZShcbiAgICAgIG1hcChyZXMgPT4gdGhpcy5jcmVhdGVSZXN1bHRGcm9tUmVzcG9uc2UocmVzKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIFNlYXJjaCByZXN1bHRzXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VhcmNoU3RhdGUocXVlcnk6IGFueSk6IE9ic2VydmFibGU8U2VhcmNoU3RhdGU+IHtcblxuICAgIGlmIChxdWVyeSBpbnN0YW5jZW9mIFNlYXJjaFF1ZXJ5KSB7XG4gICAgICBxdWVyeSA9IHF1ZXJ5LmdldFF1ZXJ5SnNvbigpO1xuICAgIH1cbiAgICBkZWxldGUgcXVlcnkubmFtZTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlUXVlcnkocXVlcnksIHRydWUpLnBpcGUoXG4gICAgICBtYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCk7XG4gICAgICAgIHN0YXRlLmNvdW50ID0gcmVzLmhpdHMudG90YWw7XG4gICAgICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2VQYXJhbSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0aW9ucyA9IHJlcy5hZ2dyZWdhdGlvbnNbYmFzZVBhcmFtXVxuICAgICAgICAgICAgPyByZXMuYWdncmVnYXRpb25zW2Jhc2VQYXJhbV0uYnVja2V0c1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICBhZ2dyZWdhdGlvbnMuZm9yRWFjaChhZ2dyZWdhdGlvbiA9PiB7XG4gICAgICAgICAgICBsZXQge2tleSwgZG9jX2NvdW50LCBjb250ZXh0Zm9sZGVydHlwZX0gPSBhZ2dyZWdhdGlvbjtcbiAgICAgICAgICAgIGlmIChiYXNlUGFyYW0gPT09ICdmaWxlc2l6ZScpIHtcbiAgICAgICAgICAgICAgZG9jX2NvdW50ID0gYWdncmVnYXRpb25bJ2ZpbHRlciNkb2N1bWVudHMnXS5kb2NfY291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5hZGRBZ2dyZWdhdGlvbnMoYmFzZVBhcmFtLCBrZXksIGRvY19jb3VudCwgYWdncmVnYXRpb24pO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0eXBlIGFnZ3JlZ2F0aW9ucyBtYXkgYWxzbyBjb250YWluIGJ1Y2tldHMgZm9yIHRoZWlyIGNvbnRleHQgdHlwZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBiYXNlUGFyYW0gPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUgJiZcbiAgICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZS5idWNrZXRzLmZvckVhY2goY3R4QWdnID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5hZGRBZ2dyZWdhdGlvbnMoXG4gICAgICAgICAgICAgICAgICAnY29udGV4dHR5cGUnLFxuICAgICAgICAgICAgICAgICAgY3R4QWdnLmtleSxcbiAgICAgICAgICAgICAgICAgIGN0eEFnZy5kb2NfY291bnQsXG4gICAgICAgICAgICAgICAgICBjdHhBZ2dcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYSBwYXJ0IG9mIGEgcXVlcmllcyByZXN1bHQuIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHBhZ2luZyBvZiByZXN1bHRzXG4gICAqIG9yIGxhenkgbG9hZGluZyBsYXJnZSByZXN1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnkgVGhlIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkXG4gICAqIEBwYXJhbSBmcm9tSW5kZXggVGhlIGluZGV4IGZyb20gd2hlcmUgdG8gZmV0Y2ggcmVzdWx0c1xuICAgKiBAcGFyYW0gY2h1bmtTaXplIFNpemUgb2YgdGhlIGNodW5rIHRvIGJlIGZldGNoZWRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHQ+XG4gICAqL1xuICBwdWJsaWMgZ2V0Q2h1bmtlZFJlc3VsdChcbiAgICBxdWVyeTogU2VhcmNoUXVlcnksXG4gICAgZnJvbUluZGV4OiBudW1iZXIsXG4gICAgY2h1bmtTaXplOiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxTZWFyY2hSZXN1bHQ+IHtcbiAgICBjb25zdCBxID0gcXVlcnkuZ2V0UXVlcnlKc29uKCk7XG5cbiAgICBxLmZyb20gPSBmcm9tSW5kZXg7XG4gICAgY29uc3QgcXVlcnlVcmkgPSBgc2VhcmNoIWNodW5rOiR7Y2h1bmtTaXplfSEke0pTT04uc3RyaW5naWZ5KHEpfWA7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXRWaWFUZW1wQ2FjaGUocXVlcnlVcmksICgpID0+XG4gICAgICB0aGlzLmV4ZWN1dGVRdWVyeShxLCBmYWxzZSwgY2h1bmtTaXplKS5waXBlKFxuICAgICAgICBtYXAocmVzID0+IHRoaXMuY3JlYXRlUmVzdWx0RnJvbVJlc3BvbnNlKHJlcykpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBxdWVyeUpzb24gVGhlIHF1ZXJ5IEpTT04gdG8gYmUgZXhlY3V0ZWRcbiAgICogQHBhcmFtIGFnZ3JlZ2F0ZVNlYXJjaCBGbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZXhlY3V0ZSBhbiBhZ2dyZWdhdGlvbiBzZWFyY2ggKG5vIGFjdHVhbCByZXN1bHRzKVxuICAgKiBAcGFyYW0gY3VzdG9tU2l6ZSBDdXN0b20gbnVtYmVyIG9mIHJlc3VsdHMgdG8gYmUgZmV0Y2hlZCwgaWYgbm90IHNldCB0aGUgZGVmYXVsdCBzaXplIHdpbGwgYmUgYXBwbGllZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFueT5cbiAgICovXG4gIHB1YmxpYyBleGVjdXRlUXVlcnkoXG4gICAgcXVlcnlKc29uOiBhbnksXG4gICAgYWdncmVnYXRlU2VhcmNoPzogYm9vbGVhbixcbiAgICBjdXN0b21TaXplPzogbnVtYmVyXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHVyaTogc3RyaW5nO1xuICAgIGxldCBxdWVyeSA9IHF1ZXJ5SnNvbjtcbiAgICBpZiAoYWdncmVnYXRlU2VhcmNoKSB7XG4gICAgICB1cmkgPSBgL2FnZ3JlZ2F0ZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNpemUgPSBjdXN0b21TaXplIHx8IHRoaXMuY29uZmlnLmdldFJhdygnc2VhcmNoLmxpbWl0Jyk7XG4gICAgICB1cmkgPSBgLz9zaXplPSR7c2l6ZX1gO1xuICAgIH1cbiAgICBxdWVyeS5vcHRpb25zID0gey4uLnF1ZXJ5Lm9wdGlvbnMsIHRyYWNrdG90YWxoaXRzOiB0aGlzLmNvbmZpZy5nZXRSYXcoJ3NlYXJjaC50cmFja1RvdGFsSGl0cycpIHx8IGZhbHNlLCB0aW1lem9uZTogVXRpbHMuZ2V0VGltZXpvbmVPZmZzZXQoKX07XG5cbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldFZpYVRlbXBDYWNoZSh1cmkgKyBKU09OLnN0cmluZ2lmeShxdWVyeSksICgpID0+IHRoaXMuYmFja2VuZC5wb3N0KHVyaSwgcXVlcnksIHRoaXMuYmFja2VuZC5nZXRTZWFyY2hCYXNlKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb3dubG9hZHMgYSBjc3YtZmlsZSBvZiB0aGUgcmVzdWx0cyBvZiBhIGdpdmVuIHNlYXJjaC1xdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnlKc29uIFRoZSBxdWVyeSBKU09OIHRvIGJlIGV4ZWN1dGVkXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgcHVibGljIGRvd25sb2FkQ3N2RnJvbVF1ZXJ5KHF1ZXJ5SnNvbjogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gICAgICAucG9zdCgnL2V4cG9ydCcsIHF1ZXJ5SnNvbiwgdGhpcy5iYWNrZW5kLmdldFNlYXJjaEJhc2UoKSwge1xuICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAocmVzID0+IHtcbiAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlcy5ib2R5XSwge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTgnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhibG9iLCB0aGlzLmdldEZpbGVOYW1lRnJvbUh0dHBSZXNwb25zZShyZXMpLCB7YXV0b0JvbTogdHJ1ZX0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsZU5hbWVGcm9tSHR0cFJlc3BvbnNlKHJlczogSHR0cFJlc3BvbnNlPGFueT4pIHtcbiAgICBjb25zdCBjb250ZW50RGlzcG9zaXRpb25IZWFkZXIgPVxuICAgICAgcmVzLmhlYWRlcnMuZ2V0KCdDb250ZW50LURpc3Bvc2l0aW9uJykgfHwgJyc7XG4gICAgcmV0dXJuIGNvbnRlbnREaXNwb3NpdGlvbkhlYWRlci5zcGxpdCgnZmlsZW5hbWU9JylbMV07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBzZWFyY2ggZm9yIGZldGNoaW5nIHN1Z2dlc3Rpb25zIG9uIGEgZ2l2ZW4gc2VhcmNoIHRlcm0uXG4gICAqXG4gICAqIEBwYXJhbSB0ZXJtIFRoZSBzZWFyY2ggdGVybVxuICAgKiBAcmV0dXJuXG4gICAqL1xuICBwdWJsaWMgYXV0b2NvbXBsZXRlKHRlcm06IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZ2V0SnNvbihcbiAgICAgIGAvYXV0b2NvbXBsZXRlP3ByZWZpeD0ke2VuY29kZVVSSUNvbXBvbmVudCh0ZXJtKX1gLFxuICAgICAgdGhpcy5iYWNrZW5kLmdldFNlYXJjaEJhc2UoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVXNlIHRoaXMgbWV0aG9kIHRvIGNyZWF0ZSBhIFNlYXJjaEZpbHRlciBmb3IgYSBmb3JtIGVsZW1lbnQuIEJhc2VkIG9uIHRoZSB0YXJnZXQgdHlwZXNcbiAgICogaXQnbGwgY3JlYXRlIHRoZSByaWdodCBraW5kIG9mIGZpbHRlciB0aGF0IHlvdSB0aGVuIGNhbiBhZGQgdG8gYSBTZWFyY2hRdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0VHlwZXNcbiAgICogQHBhcmFtIGZvcm1FbGVtZW50TmFtZVxuICAgKiBAcGFyYW0gZWxlbWVudFZhbHVlXG4gICAqIEByZXR1cm5zIFNlYXJjaEZpbHRlcltdIEFuIGFycmF5IG9mIHNlYXJjaCBmaWx0ZXJzIG1vc3Qgb2YgdGhlIHRpbWUgY29udGFpbmluZyBvbmx5IG9uZSBlbnRyeSwgYnV0XG4gICAqIGZvciB0YWJsZSBlbGVtZW50cyB0aGlzIGNvdWxkIGJlIG1vcmVcbiAgICovXG4gIHB1YmxpYyBnZXRTZWFyY2hGaWx0ZXIoXG4gICAgdGFyZ2V0VHlwZXM6IE9iamVjdFR5cGVbXSxcbiAgICBmb3JtRWxlbWVudE5hbWU6IHN0cmluZyxcbiAgICBlbGVtZW50VmFsdWU6IGFueVxuICApOiBTZWFyY2hGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVyOiBTZWFyY2hGaWx0ZXJbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlclR5cGU6IFNlYXJjaEZpbHRlclR5cGUgPSB0aGlzLmlkZW50aWZ5U2VhcmNoRmlsdGVyKFxuICAgICAgdGFyZ2V0VHlwZXMsXG4gICAgICBmb3JtRWxlbWVudE5hbWVcbiAgICApO1xuICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGFyZ2V0VHlwZXNbMF0uZWxlbWVudHMuZmluZChlbCA9PiBlbC5xbmFtZSA9PT0gZm9ybUVsZW1lbnROYW1lKTtcblxuICAgIGlmIChlbGVtZW50VmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKGZvcm1FbGVtZW50TmFtZSwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkVRVUFMLCBudWxsKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1FbGVtZW50ICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAncGF0aCcpIHtcbiAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgIGZvcm1FbGVtZW50TmFtZSxcbiAgICAgICAgICBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuTUFUQ0gsXG4gICAgICAgICAgZWxlbWVudFZhbHVlXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50VmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGNyZWF0ZSBmaWx0ZXIgZm9yIGVsZW1lbnRzIHRoYXQgc3VwcG9ydCByYW5nZXMgbGlrZSBEQVRFVElNRSBhbmQgTlVNQkVSXG4gICAgICAgKi9cbiAgICAgIGlmIChcbiAgICAgICAgZWxlbWVudFZhbHVlLmZpcnN0VmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgZWxlbWVudFZhbHVlLmZpcnN0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgKSB7XG4gICAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICAgIG5ldyBTZWFyY2hGaWx0ZXIoXG4gICAgICAgICAgICBmb3JtRWxlbWVudE5hbWUsXG4gICAgICAgICAgICBlbGVtZW50VmFsdWUub3BlcmF0b3IsXG4gICAgICAgICAgICBlbGVtZW50VmFsdWUuZmlyc3RWYWx1ZSxcbiAgICAgICAgICAgIGVsZW1lbnRWYWx1ZS5zZWNvbmRWYWx1ZSxcbiAgICAgICAgICAgIGZpbHRlclR5cGUuZGF0ZXRpbWUgPyB7dGltZTogZmlsdGVyVHlwZS53aXRodGltZX0gOiB1bmRlZmluZWRcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoZmlsdGVyVHlwZS5tdWx0aXNlbGVjdCB8fCBBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkpICYmICFmaWx0ZXJUeXBlLnRhYmxlKSB7XG4gICAgICAvKipcbiAgICAgICAqIGNyZWF0ZSBmaWx0ZXIgZm9yIG11bHRpc2VsZWN0IGVsZW1lbnRzIGxpa2UgQ09ERVNZU1RFTSBhbmQgT1JHQU5JWkFUSU9OXG4gICAgICAgKi9cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnRWYWx1ZSkgJiYgZWxlbWVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgICAgZm9ybUVsZW1lbnROYW1lLFxuICAgICAgICAgICAgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOLFxuICAgICAgICAgICAgZWxlbWVudFZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyVHlwZS50YWJsZSkge1xuICAgICAgLyoqXG4gICAgICAgKiBjcmVhdGUgZmlsdGVyKHMpIGZvciB0YWJsZSBlbGVtZW50c1xuICAgICAgICovXG4gICAgICBjb25zdCBxdWVyeVJvdyA9IGVsZW1lbnRWYWx1ZVswXTtcbiAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5Um93KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYocXVlcnlSb3dba2V5XSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBgJHtmb3JtRWxlbWVudE5hbWV9LiR7a2V5fWA7XG4gICAgICAgICAgaWYgKHF1ZXJ5Um93W2tleV0gaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICAgICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgcXVlcnlSb3dba2V5XS5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldLmZpcnN0VmFsdWUsXG4gICAgICAgICAgICAgICAgcXVlcnlSb3dba2V5XS5zZWNvbmRWYWx1ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgbmV3IFNlYXJjaEZpbHRlcihcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShxdWVyeVJvd1trZXldKSA/IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTiA6IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTCxcbiAgICAgICAgICAgICAgICBxdWVyeVJvd1trZXldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoqXG4gICAgICAgKiBkZWZhdWx0IHdpbGwgdXNlIGVxdWFsaXR5IG9wZXJhdG9yXG4gICAgICAgKi9cbiAgICAgIGZpbHRlci5wdXNoKFxuICAgICAgICBuZXcgU2VhcmNoRmlsdGVyKFxuICAgICAgICAgIGZvcm1FbGVtZW50TmFtZSxcbiAgICAgICAgICBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuRVFVQUwsXG4gICAgICAgICAgZWxlbWVudFZhbHVlXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogaWRlbnRpZmllcyBmb3JtIGVsZW1lbnRzIHRoYXQgYXJlIGVuYWJsZWQgdG8gY29udGFpbiBtdWx0aXBsZSB2YWx1ZXNcbiAgICogdHJ5IHRvIGZpbmQgdGhlIGZvcm0gZWxlbWVudCBpbnNpZGUgb2YgdGhlIHByb3ZpZGVkIG9iamVjdCB0eXBlcyB0byBnZXQgaXRzIHR5cGVcbiAgICpcbiAgICogQHBhcmFtIE9iamVjdFR5cGVbXSB0YXJnZXRUeXBlc1xuICAgKiBAcGFyYW0gc3RyaW5nIGZvcm1FbGVtZW50TmFtZVxuICAgKiBAcmV0dXJuIFNlYXJjaEZpbHRlclR5cGVcbiAgICovXG4gIHByaXZhdGUgaWRlbnRpZnlTZWFyY2hGaWx0ZXIoXG4gICAgdGFyZ2V0VHlwZXM6IE9iamVjdFR5cGVbXSxcbiAgICBmb3JtRWxlbWVudE5hbWU6IHN0cmluZ1xuICApOiBTZWFyY2hGaWx0ZXJUeXBlIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IG1hdGNoO1xuICAgIHdoaWxlICghbWF0Y2ggJiYgaSA8IHRhcmdldFR5cGVzLmxlbmd0aCkge1xuICAgICAgbWF0Y2ggPSB0YXJnZXRUeXBlc1tpXS5lbGVtZW50cy5maW5kKFxuICAgICAgICBlbGVtZW50ID0+IGVsZW1lbnQucW5hbWUgPT09IGZvcm1FbGVtZW50TmFtZVxuICAgICAgKTtcbiAgICAgIGkrKztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbXVsdGlzZWxlY3Q6IHRoaXMuaXNNdWx0aXNlbGVjdFNlYXJjaEZpbHRlcihtYXRjaCksXG4gICAgICB0YWJsZTogbWF0Y2ggJiYgbWF0Y2gudHlwZSA9PT0gJ1RBQkxFJyxcbiAgICAgIGRhdGV0aW1lOiBtYXRjaCAmJiBtYXRjaC50eXBlID09PSAnREFURVRJTUUnLFxuICAgICAgd2l0aHRpbWU6IG1hdGNoICYmIG1hdGNoLndpdGh0aW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpZGVudGlmaWVzIGZvcm0gZWxlbWVudHMgdGhhdCBhcmUgZW5hYmxlZCB0byBjb250YWluIG11bHRpcGxlIHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnRcbiAgICogQHJldHVybiBib29sZWFuXG4gICAqL1xuICBwcml2YXRlIGlzTXVsdGlzZWxlY3RTZWFyY2hGaWx0ZXIoZm9ybUVsZW1lbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBmb3JtRWxlbWVudCAmJlxuICAgICAgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdPUkdBTklaQVRJT04nIHx8XG4gICAgICAgIGZvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyB8fFxuICAgICAgICAvLyAuLi5cbiAgICAgICAgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmXG4gICAgICAgICAgZm9ybUVsZW1lbnQuY2xhc3NpZmljYXRpb24gPT09ICdzZWxlY3RvcicpIHx8XG4gICAgICAgIC8vIG11bHRpc2VsZWN0IHJlZmVyZW5jZSBmaWVsZHNcbiAgICAgICAgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50Lm11bHRpc2VsZWN0KSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBTZWFyY2hSZXN1bHQgZnJvbSB0aGUgcmVzcG9uc2Ugc2VudCBieSB0aGUgc2VydmVyXG4gICAqXG4gICAqIEBwYXJhbSBiYWNrZW5kUmVzcG9uc2UgU2VydmVyIHJlc3BvbnNlXG4gICAqIEByZXR1cm5UaGUgU2VhcmNoUmVzdWx0IFNlYXJjaFJlc3VsdCBvYmplY3QgY3JlYXRlZCBmcm9tIHRoZSBzZXJ2ZXIgcmVzcG9uc2VcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVSZXN1bHRGcm9tUmVzcG9uc2UoYmFja2VuZFJlc3BvbnNlKTogU2VhcmNoUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgU2VhcmNoUmVzdWx0KCk7XG4gICAgcmVzdWx0LnN1Z2dlc3RzID0gYmFja2VuZFJlc3BvbnNlLnN1Z2dlc3Q7XG4gICAgcmVzdWx0LmZpZWxkcyA9IGJhY2tlbmRSZXNwb25zZS5jb25maWc7XG5cbiAgICAvKipcbiAgICAgKiB1c2UgaGl0cyBfaWQgZmllbGQgYXMgaWQgcHJvcGVydHksIGJlY2F1c2Ugb3RoZXJ3aXNlIGVtcHR5IHJlc3VsdCBoaXRzIHdvdWxkIG5vdCBjb250YWluIGFuIGlkXG4gICAgICovXG4gICAgY29uc3QgaGl0cyA9IGJhY2tlbmRSZXNwb25zZS5oaXRzLmhpdHMubWFwKGggPT4gKHtcbiAgICAgIC4uLmguX3NvdXJjZSxcbiAgICAgIGlkOiBoLl9pZCxcbiAgICAgIC4uLihoLnNuaXBwZXRzICYmIHtzbmlwcGV0czogaC5zbmlwcGV0c30pLFxuICAgICAgLy8gaGF2aW5nIHJlcXVlc3RlZCBhIHJlc29sdmVkIHJlZmVyZW5jZSAob3B0aW9ucykgd2UgYWxzbyBwYXNzIGBfcmVmZXJlbmNlYCBpbiB0aGUgcmVzdWx0IGl0ZW1cbiAgICAgIC4uLihoLnJlZmVyZW5jZXMgJiYge19yZWZlcmVuY2VzOiBoLnJlZmVyZW5jZXN9KSxcbiAgICAgIC4uLihoLmNvbnRleHQgJiYge2NvbnRleHQ6IGguY29udGV4dH0pXG4gICAgfSkpO1xuXG4gICAgcmVzdWx0LmNvdW50ID0gYmFja2VuZFJlc3BvbnNlLmhpdHMudG90YWw7XG4gICAgcmVzdWx0LmhpdHMgPSBoaXRzIHx8IFtdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZXMgdGhlIFJlc3VsIHRGaWVsZCBEZWZpbml0aW9uIENvbmZpZ1xuICAgKlxuICAgKiBAcGFyYW0gU2VhcmNoUXVlcnkgcXVlcnlcbiAgICogQHJldHVybiAoe3R5cGU6IE9iamVjdFR5cGU7IGNvbnRleHRUeXBlOiBPYmplY3RUeXBlfSlcbiAgICovXG4gIGdldFJlc3VsdEZpZWxkRGVmaW5pdGlvbkNvbmZpZyhxdWVyeTogU2VhcmNoUXVlcnkpIHtcbiAgICBjb25zdCB0eXBlID0gKHF1ZXJ5LnR5cGVzIHx8IFtdKS5sZW5ndGggPT09IDEgPyBxdWVyeS50eXBlc1swXSA6IG51bGw7XG4gICAgY29uc3QgY29udGV4dFR5cGUgPVxuICAgICAgKHF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcyB8fCBbXSkubGVuZ3RoID09PSAxXG4gICAgICAgID8gcXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4ge3R5cGUsIGNvbnRleHRUeXBlfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNvbmZpZ1R5cGVOYW1lcyhcbiAgICB0eXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBjb250ZXh0VHlwZTogT2JqZWN0VHlwZSB8IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGVOYW1lOiB0eXBlID8gdHlwZS5xbmFtZSA6ICdzeXNvYmplY3QnLFxuICAgICAgY29udGV4dFR5cGVOYW1lOiB0eXBlICYmIGNvbnRleHRUeXBlID8gY29udGV4dFR5cGUucW5hbWUgOiB1bmRlZmluZWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHJlc3VsdCBmaWVsZCBkZWZpbml0aW9uIGZvciBhIGdpdmVuIG9iamVjdCB0eXBlXG4gICAqIFVTRVI6IChkZWZhdWx0KSB0aGUgcmVzdWx0IGxpc3QgY29uZmlndXJhdGlvbiBzYXZlZCBieSB0aGUgY3VycmVudCB1c2VyXG4gICAqIERFRkFVTFQ6IHRoZSBkZWZhdWx0IHJlc3VsdCBsaXN0IGNvbmZpZ3VyYXRpb24gKGFsc28gcmV0dXJuZWQgd2hlbiB0aGVyZSBpcyBubyB1c2VyIGNvbmZpZ3VyYXRpb24pXG4gICAqIEFMTDogYWxsIGF2YWlsYWJsZSByZXN1bHQgZmllbGRzIGZvciB0aGUgZ2l2ZW4gdHlwZSAoYW5kIGNvbnRleHQpXG4gICAqXG4gICAqIEBwYXJhbSBPYmplY3RUeXBlIHwgbnVsbCB0eXBlIFRoZSBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgY29udGV4dFR5cGUgT2JqZWN0IHR5cGUgdGFyZ2V0IHR5cGVzIGFsbG93ZWQgY29udGV4dCB0eXBlXG4gICAqIEBwYXJhbSBtb2RlIFRoZSByZXN1bHQgbGlzdHMgY29uZmlndXJhdGlvbiBtb2RlOlxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8RmllbGREZWZpbml0aW9uPlxuICAgKi9cbiAgZmV0Y2hSZXN1bHRGaWVsZERlZmluaXRpb24oXG4gICAgdHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgY29udGV4dFR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIG1vZGVcbiAgKSB7XG4gICAgY29uc3Qge3R5cGVOYW1lLCBjb250ZXh0VHlwZU5hbWV9ID0gdGhpcy5yZXNvbHZlQ29uZmlnVHlwZU5hbWVzKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRUeXBlXG4gICAgKTtcbiAgICBjb25zdCB1cmwgPSBVdGlscy5idWlsZFVyaShgL3VzZXIvY29uZmlnL3Jlc3VsdC8ke3R5cGVOYW1lfWAsIHtcbiAgICAgIGNvbnRleHR0eXBlOiBjb250ZXh0VHlwZU5hbWUsXG4gICAgICBtb2RlXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZFxuICAgICAgLmdldEpzb24odXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAocmVzOiBhbnkpID0+XG4gICAgICAgICAgICBuZXcgRmllbGREZWZpbml0aW9uKFxuICAgICAgICAgICAgICByZXMuZWxlbWVudHMsXG4gICAgICAgICAgICAgIHJlcy5zb3J0b3JkZXIsXG4gICAgICAgICAgICAgIHJlcy5ncm91cG9yZGVyLFxuICAgICAgICAgICAgICByZXMucGlubmVkLFxuICAgICAgICAgICAgICByZXMuYWxpZ25tZW50eCxcbiAgICAgICAgICAgICAgcmVzLm1vZGVcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhIGNvbHVtbiBkZWZpbml0aW9uIGFzIHJlc3VsdCBvciBjb21tb24gcmVzdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgdHlwZSBUaGUgb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIGNvbnRleHRUeXBlIE9iamVjdCB0eXBlIHRhcmdldCB0eXBlcyBhbGxvd2VkIGNvbnRleHQgdHlwZVxuICAgKiBAcGFyYW0gRmllbGREZWZpbml0aW9uIGRhdGEgVGhlIHJlc3VsdCBsaXN0IGNvbmZpZ3VyYXRpb24gdG8gYmUgcGVyc2lzdGVkXG4gICAqIEBwYXJhbSBib29sZWFuIGNvbW1vbiBGbGFnIGVuYWJsZXMgdG8gc2V0IGNvbmZpZyBhcyBkZWZhdWx0IC8gY29tbW9uIHJlc3VsdFxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgc2F2ZVJlc3VsdEZpZWxkRGVmaW5pdGlvbihcbiAgICB0eXBlOiBPYmplY3RUeXBlIHwgbnVsbCxcbiAgICBjb250ZXh0VHlwZTogT2JqZWN0VHlwZSB8IG51bGwsXG4gICAgZGF0YTogRmllbGREZWZpbml0aW9uLFxuICAgIGNvbW1vbiA9IGZhbHNlXG4gICkge1xuICAgIGNvbnN0IGJhc2VVcmkgPSBjb21tb25cbiAgICAgID8gJy91c2VyL2NvbmZpZy9jb21tb25yZXN1bHQvJ1xuICAgICAgOiAnL3VzZXIvY29uZmlnL3Jlc3VsdC8nO1xuICAgIGNvbnN0IHt0eXBlTmFtZSwgY29udGV4dFR5cGVOYW1lfSA9IHRoaXMucmVzb2x2ZUNvbmZpZ1R5cGVOYW1lcyhcbiAgICAgIHR5cGUsXG4gICAgICBjb250ZXh0VHlwZVxuICAgICk7XG4gICAgY29uc3QgdXJsID0gVXRpbHMuYnVpbGRVcmkoYmFzZVVyaSArIHR5cGVOYW1lLCB7XG4gICAgICBjb250ZXh0dHlwZTogY29udGV4dFR5cGVOYW1lXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuYmFja2VuZC5wb3N0KHVybCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNvbHVtbiBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gT2JqZWN0VHlwZSB8IG51bGwgdHlwZSBUaGUgb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIE9iamVjdFR5cGUgfCBudWxsIGNvbnRleHRUeXBlIE9iamVjdCB0eXBlIHRhcmdldCB0eXBlcyBhbGxvd2VkIGNvbnRleHQgdHlwZVxuICAgKiBAcmV0dXJuIE9ic2VydmFibGU8YW55PlxuICAgKi9cbiAgcmVtb3ZlUmVzdWx0RmllbGREZWZpbml0aW9uKFxuICAgIHR5cGU6IE9iamVjdFR5cGUgfCBudWxsLFxuICAgIGNvbnRleHRUeXBlOiBPYmplY3RUeXBlIHwgbnVsbFxuICApIHtcbiAgICBjb25zdCB7dHlwZU5hbWUsIGNvbnRleHRUeXBlTmFtZX0gPSB0aGlzLnJlc29sdmVDb25maWdUeXBlTmFtZXMoXG4gICAgICB0eXBlLFxuICAgICAgY29udGV4dFR5cGVcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IFV0aWxzLmJ1aWxkVXJpKGAvdXNlci9jb25maWcvcmVzdWx0LyR7dHlwZU5hbWV9YCwge1xuICAgICAgY29udGV4dHR5cGU6IGNvbnRleHRUeXBlTmFtZVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmJhY2tlbmQuZGVsKHVybCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgdG8gYmUgYWRkZWQgdG8gYSBmb3JtIGVsZW1lbnQgYnkgZXh0cmFjdGluZyBpdCBmcm9tIGFcbiAgICogc2VhcmNoIGZpbHRlci4gVGhlIGtpbmQgb2YgdmFsdWUgZGlmZmVycyBiYXNlZCBvbiB0aGUgZm9ybSBlbGVtZW50cyB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gZXh0cmFjdCB2YWx1ZSBmcm9tXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudFR5cGUgRm9ybSBlbGVtZW50cyB0eXBlICgnU1RSSU5HJywgJ0RBVEUnLCAnQ09ERVNZU1RFTScsIC4uLilcbiAgICogQHJldHVybnMgdGhlIGV4dHJhY3RlZCB2YWx1ZVxuICAgKi9cbiAgZmlsdGVyVG9FbGVtZW50VmFsdWUoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIGZvcm1FbGVtZW50VHlwZTogc3RyaW5nKSB7XG4gICAgbGV0IHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIC8vIHR5cGVzIHRoYXQgc3VwcG9ydCByYW5nZXNcbiAgICAgIGlmICgoZm9ybUVsZW1lbnRUeXBlID09PSAnTlVNQkVSJyB8fCBmb3JtRWxlbWVudFR5cGUgPT09ICdEQVRFVElNRScpICYmIGZpbHRlci5maXJzdFZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IFJhbmdlVmFsdWUoXG4gICAgICAgICAgZmlsdGVyLm9wZXJhdG9yLFxuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlLFxuICAgICAgICAgIGZpbHRlci5zZWNvbmRWYWx1ZVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBmaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSB2YWx1ZSBieSBleHRyYWN0aW5nIHRoZSBkYXRhIGZyb20gdGhlIGNvcnJlc3BvbmRpbmdcbiAgICogc2VhcmNoIGZpbHRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXJzIFRoZSBmaWx0ZXJzIHRvIGV4dHJhY3QgdmFsdWUgZnJvbVxuICAgKiBAcGFyYW0gdGFibGVFbGVtZW50cyB0aGUgZm9ybSBlbGVtZW50cyBvZiB0aGUgdGFibGVcbiAgICogQHJldHVybnMgdGhlIHRhYmxlIHZhbHVlIGV4dHJhY3RlZCBmcm9tIGFsbCBmaWx0ZXJzXG4gICAqL1xuICB0YWJsZUZpbHRlcnNUb0VsZW1lbnRWYWx1ZShmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgdGFibGVFbGVtZW50cyl7XG4gICAgbGV0IHZhbHVlID0ge307XG4gICAgZmlsdGVycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgbGV0IGtleSA9IHRhYmxlRWxlbWVudHMuZmluZChlID0+IGUucW5hbWUgPT09IGYucHJvcGVydHkpLm5hbWU7XG4gICAgICBsZXQgdHlwZSA9IHRhYmxlRWxlbWVudHMuZmluZChlID0+IGUucW5hbWUgPT09IGYucHJvcGVydHkpLnR5cGU7XG4gICAgICB2YWx1ZVtrZXldID0gdGhpcy5maWx0ZXJUb0VsZW1lbnRWYWx1ZShmLCB0eXBlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW3ZhbHVlXTtcbiAgfVxufVxuIl19