breeze-client 2.1.5 → 2.1.6

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 (65) hide show
  1. package/adapter-data-service-odata/adapter-data-service-odata.d.ts +0 -1
  2. package/breeze-client.metadata.json +1 -1
  3. package/bundles/breeze-client-adapter-data-service-odata.umd.js +4 -0
  4. package/bundles/breeze-client-adapter-data-service-odata.umd.js.map +1 -1
  5. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js +1 -1
  6. package/bundles/breeze-client-adapter-data-service-odata.umd.min.js.map +1 -1
  7. package/bundles/breeze-client-adapter-data-service-webapi.umd.js +8 -1
  8. package/bundles/breeze-client-adapter-data-service-webapi.umd.js.map +1 -1
  9. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js +1 -1
  10. package/bundles/breeze-client-adapter-data-service-webapi.umd.min.js.map +1 -1
  11. package/bundles/breeze-client.umd.js +103 -20
  12. package/bundles/breeze-client.umd.js.map +1 -1
  13. package/bundles/breeze-client.umd.min.js +1 -1
  14. package/bundles/breeze-client.umd.min.js.map +1 -1
  15. package/esm2015/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  16. package/esm2015/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  17. package/esm2015/src/abstract-data-service-adapter.js +1 -1
  18. package/esm2015/src/core.js +14 -9
  19. package/esm2015/src/data-type.js +60 -1
  20. package/esm2015/src/entity-action.js +1 -1
  21. package/esm2015/src/entity-aspect.js +6 -8
  22. package/esm2015/src/entity-manager.js +1 -1
  23. package/esm2015/src/entity-metadata.js +1 -1
  24. package/esm2015/src/entity-query.js +1 -1
  25. package/esm2015/src/entity-state.js +9 -1
  26. package/esm2015/src/enum.js +1 -1
  27. package/esm2015/src/key-generator.js +1 -1
  28. package/esm2015/src/mapping-context.js +9 -3
  29. package/esm2015/src/predicate.js +12 -5
  30. package/esm5/adapter-data-service-odata/adapter-data-service-odata.js +5 -1
  31. package/esm5/adapter-data-service-webapi/adapter-data-service-webapi.js +9 -2
  32. package/esm5/src/abstract-data-service-adapter.js +1 -1
  33. package/esm5/src/core.js +13 -8
  34. package/esm5/src/data-type.js +60 -1
  35. package/esm5/src/entity-action.js +1 -1
  36. package/esm5/src/entity-aspect.js +6 -8
  37. package/esm5/src/entity-manager.js +1 -1
  38. package/esm5/src/entity-metadata.js +1 -1
  39. package/esm5/src/entity-query.js +1 -1
  40. package/esm5/src/entity-state.js +9 -1
  41. package/esm5/src/enum.js +1 -1
  42. package/esm5/src/key-generator.js +1 -1
  43. package/esm5/src/mapping-context.js +9 -3
  44. package/esm5/src/predicate.js +12 -5
  45. package/fesm2015/breeze-client-adapter-data-service-odata.js +4 -0
  46. package/fesm2015/breeze-client-adapter-data-service-odata.js.map +1 -1
  47. package/fesm2015/breeze-client-adapter-data-service-webapi.js +9 -2
  48. package/fesm2015/breeze-client-adapter-data-service-webapi.js.map +1 -1
  49. package/fesm2015/breeze-client.js +104 -21
  50. package/fesm2015/breeze-client.js.map +1 -1
  51. package/fesm5/breeze-client-adapter-data-service-odata.js +4 -0
  52. package/fesm5/breeze-client-adapter-data-service-odata.js.map +1 -1
  53. package/fesm5/breeze-client-adapter-data-service-webapi.js +9 -2
  54. package/fesm5/breeze-client-adapter-data-service-webapi.js.map +1 -1
  55. package/fesm5/breeze-client.js +103 -20
  56. package/fesm5/breeze-client.js.map +1 -1
  57. package/package.json +1 -1
  58. package/src/abstract-data-service-adapter.d.ts +0 -1
  59. package/src/data-type.d.ts +5 -0
  60. package/src/entity-aspect.d.ts +5 -5
  61. package/src/entity-manager.d.ts +4 -4
  62. package/src/entity-metadata.d.ts +37 -27
  63. package/src/entity-state.d.ts +4 -0
  64. package/src/mapping-context.d.ts +1 -1
  65. package/src/predicate.d.ts +4 -7
@@ -94,6 +94,21 @@ var DataType = /** @class */ (function (_super) {
94
94
  source = new Date(Date.parse(source));
95
95
  return source;
96
96
  };
97
+ /** Parse as UTC then shift to local time */
98
+ DataType.parseDateAsLocal = function (source) {
99
+ var dt = DataType.parseDateAsUTC(source);
100
+ if (core.isDate(dt)) {
101
+ dt = new Date(dt.getTime() + dt.getTimezoneOffset() * 60000);
102
+ }
103
+ return dt;
104
+ };
105
+ ;
106
+ /** if val is a Date, return a date-only string e.g. '2023-12-31' */
107
+ DataType.toDateOnlyString = function (val) {
108
+ // DateOnly types should not have time component, but JSON.stringify makes a full ISO string.
109
+ // We convert it to string here to prevent that, and shift the time zone because toISOString converts to UTC.
110
+ return val && val.getTime && new Date(val.getTime() - val.getTimezoneOffset() * 60000).toISOString().substring(0, 10) || val;
111
+ };
97
112
  /** Returns a raw value converted to the specified DataType */
98
113
  DataType.parseRawValue = function (val, dataType) {
99
114
  // undefined values will be the default for most unmapped properties EXCEPT when they are set
@@ -180,6 +195,16 @@ var DataType = /** @class */ (function (_super) {
180
195
  fmtOData: makeFloatFmt("f"),
181
196
  getNext: getNextNumber
182
197
  });
198
+ DataType.DateOnly = new DataType({
199
+ defaultValue: new Date(1900, 0, 1),
200
+ isDate: true,
201
+ parse: coerceToDateOnly,
202
+ parseRawValue: parseRawDateOnly,
203
+ normalize: function (value) { return value && value.getTime && (new Date(value.getYear(), value.getMonth(), value.getDate())).getTime(); },
204
+ fmtOData: fmtDateOnly,
205
+ getNext: getNextDateTime,
206
+ getConcurrencyValue: getConcurrencyDateTime
207
+ });
183
208
  DataType.DateTime = new DataType({
184
209
  defaultValue: new Date(1900, 0, 1),
185
210
  isDate: true,
@@ -341,6 +366,20 @@ function coerceToDate(source, sourceTypeName) {
341
366
  }
342
367
  return source;
343
368
  }
369
+ /** Trim off time portion before parse if source is string */
370
+ function coerceToDateOnly(source, sourceTypeName) {
371
+ var val;
372
+ if (sourceTypeName === "string") {
373
+ var src = source.trim();
374
+ val = DataType.parseDateAsLocal(val);
375
+ return core.isDate(val) ? val : source;
376
+ }
377
+ else if (sourceTypeName === "number") {
378
+ val = new Date(source);
379
+ return core.isDate(val) ? val : source;
380
+ }
381
+ return source;
382
+ }
344
383
  function coerceToBool(source, sourceTypeName) {
345
384
  if (sourceTypeName === "string") {
346
385
  var src = source.trim().toLowerCase();
@@ -382,6 +421,16 @@ function fmtDateTime(val) {
382
421
  throwError("'%1' is not a valid dateTime", val);
383
422
  }
384
423
  }
424
+ function fmtDateOnly(val) {
425
+ if (val == null)
426
+ return null;
427
+ try {
428
+ return "date'" + val.toISOString().substring(0, 10) + "'";
429
+ }
430
+ catch (e) {
431
+ throwError("'%1' is not a valid dateTime", val);
432
+ }
433
+ }
385
434
  function fmtDateTimeOffset(val) {
386
435
  if (val == null)
387
436
  return null;
@@ -437,6 +486,16 @@ function parseRawDate(val) {
437
486
  }
438
487
  return val;
439
488
  }
489
+ /** Trim off time portion before parse */
490
+ function parseRawDateOnly(val) {
491
+ if (typeof val === 'string') {
492
+ if (val.length > 10) {
493
+ val = val.substring(0, 10);
494
+ }
495
+ val = DataType.parseDateAsLocal(val);
496
+ }
497
+ return val;
498
+ }
440
499
  function parseRawBinary(val) {
441
500
  if (val && val.$value !== undefined) {
442
501
  val = val.$value; // this will be a byte[] encoded as a string
@@ -448,4 +507,4 @@ function parseRawBinary(val) {
448
507
  // var timePart = source.substring(ix+1);
449
508
  // return timePart.indexOf("-") >= 0 || timePart.indexOf("+") >= 0 || timePart.indexOf("Z");
450
509
  //}
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10eXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSDtJQUE4Qiw0QkFBVTtJQUF4Qzs7SUFpU0EsQ0FBQztJQWpIUSx3QkFBZSxHQUF0QixVQUF1QixRQUFtQjtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sVUFBVSxLQUFVO2dCQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQjtZQUNuQixPQUFPLFVBQVUsS0FBVTtnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDtPQUNHO0lBQ0ksd0JBQWUsR0FBdEIsVUFBdUIsUUFBZ0I7UUFDckMsSUFBSSxFQUF3QixDQUFDO1FBQzdCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxVQUFVLEtB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ckIsR0FBRyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN6QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQVE7SUFDOUIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDbkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7S0FDL0Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxnQ0FBZ0M7QUFDaEMsaUNBQWlDO0FBQ2pDLDBDQUEwQztBQUMxQyw4RkFBOEY7QUFDOUYsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcblxyXG5sZXQgX2xvY2FsVGltZVJlZ2V4ID0gLy5cXGR7M30kLztcclxuXHJcbi8qKiAgXHJcbkRhdGFUeXBlIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXHJcbkBkeW5hbWljXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVR5cGUgZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWZhdWx0VmFsdWU/OiBhbnk7XHJcbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyBhICdudW1lcmljJyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBpc051bWVyaWM/OiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgYW4gJ2ludGVnZXInIERhdGFUeXBlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGlzSW50ZWdlcj86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdG8gcXVvdGUgdGhlIGpzb24gdmFsdWUgd2hlbiBmb3JtYXR0aW5nIHRoaXMgRGF0YVR5cGUgZm9yIE9EYXRhLiAqL1xyXG4gIHF1b3RlSnNvbk9EYXRhPzogYm9vbGVhbjtcclxuICAvKiogVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFtbVmFsaWRhdG9yXV0gdG8gYmUgdXNlZCBpbiB2YWxpZGF0aW5nIGluc3RhbmNlcyBvZiB0aGlzIERhdGFUeXBlLiAqL1xyXG4gIHZhbGlkYXRvckN0b3I/KGNvbnRleHQ/OiBhbnkpOiBWYWxpZGF0b3I7XHJcbiAgLyoqIFxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSBhIGRhdGEgdmFsdWUgZm9yIGNvbXBhcmlzb24sIGlmIGl0cyB2YWx1ZSBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseS4gXHJcbiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgcHJvcGVydHkgaXMgY2hhbmdlZCwgc28gbWFrZSBpdCBmYXN0LlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGVcclxuICAqKi9cclxuICBub3JtYWxpemU/KHZhbHVlOiBhbnkpOiBhbnk7XHJcbiAgLyoqXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gY29udmVydCBhIHJhdyAoc2VydmVyKSB2YWx1ZSBmcm9tIHN0cmluZyB0byB0aGlzIERhdGFUeXBlLlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGVcclxuICAqKi9cclxuICBwYXJzZVJhd1ZhbHVlPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKlxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSB2YWx1ZSBmcm9tIHN0cmluZyB0byB0aGlzIERhdGFUeXBlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgcHJvcGVydHkgaXMgY2hhbmdlZCwgc28gbWFrZSBpdCBmYXN0LlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGUgXHJcbiAgKiovXHJcbiAgcGFyc2U/KHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKTogYW55O1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBmb3JtYXQgdGhpcyBEYXRhVHlwZSBmb3IgT0RhdGEgcXVlcmllcy5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciBPRGF0YSBxdWVyeSAgIFxyXG4gICoqL1xyXG4gIGZtdE9EYXRhPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgdGhlIG5leHQgdmFsdWUgZm9yIGtleSBnZW5lcmF0aW9uLCBpZiB0aGlzIGRhdGF0eXBlIGlzIHVzZWQgYXMgYSBrZXkuICBVc2VzIGFuIGludGVybmFsIHRhYmxlIG9mIHByZXZpb3VzIHZhbHVlcy5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlIFxyXG4gICoqL1xyXG4gIGdldE5leHQ/KCk6IGFueTtcclxuICAvKipcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgdGhlIG5leHQgdmFsdWUgd2hlbiB0aGUgZGF0YXR5cGUgaXMgdXNlZCBhcyBhIGNvbmN1cnJlbmN5IHByb3BlcnR5LlxyXG4gIEBwYXJhbSBwcmV2aW91c1ZhbHVlXHJcbiAgQHJldHVybiB0aGUgbmV4dCBjb25jdXJyZW5jeSB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnVuY3Rpb24gb2YgdGhlIHByZXZpb3VzVmFsdWUuXHJcbiAgKiovXHJcbiAgZ2V0Q29uY3VycmVuY3lWYWx1ZT8ocHJldmlvdXNWYWx1ZT86IGFueSk6IGFueTtcclxuXHJcbiAgc3RhdGljIHBhcnNlRGF0ZUZyb21TZXJ2ZXIgPSAodmFsdWU6IGFueSkgPT4gRGF0YVR5cGUucGFyc2VEYXRlQXNVVEModmFsdWUpO1xyXG4gIC8vIHNhbWUgZWZmZWN0IGFzIGFib3ZlIGJ1dCBkb2Vzbid0IGdpdmUgcmlnaHQgVFNET0MuXHJcbiAgLy8gc3RhdGljIHBhcnNlRGF0ZUZyb21TZXJ2ZXIgPSBEYXRhVHlwZS5wYXJzZURhdGVBc1VUQztcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIGNvbnN0YW50czogeyBzdHJpbmdQcmVmaXg6IHN0cmluZywgbmV4dE51bWJlcjogbnVtYmVyLCBuZXh0TnVtYmVySW5jcmVtZW50OiBudW1iZXIgfTtcclxuXHJcbiAgc3RhdGljIFN0cmluZyA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgICBwYXJzZTogY29lcmNlVG9TdHJpbmcsXHJcbiAgICBmbXRPRGF0YTogZm10U3RyaW5nLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dFN0cmluZ1xyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgSW50NjQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcXVvdGVKc29uT0RhdGE6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogbWFrZUZsb2F0Rm10KFwiTFwiKSxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEludDMyID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0ludCxcclxuICAgIGZtdE9EYXRhOiBmbXRJbnQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBJbnQxNiA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgQnl0ZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50XHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEZWNpbWFsID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIHF1b3RlSnNvbk9EYXRhOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcIm1cIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEb3VibGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcImRcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcImZcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEYXRlVGltZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKDE5MDAsIDAsIDEpLFxyXG4gICAgaXNEYXRlOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRGF0ZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3RGF0ZSxcclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmdldFRpbWUgJiYgdmFsdWUuZ2V0VGltZSgpOyB9LCAvLyBkYXRlcyBkb24ndCBwZXJmb3JtIGVxdWFsaXR5IGNvbXBhcmlzb25zIHByb3Blcmx5XHJcbiAgICBmbXRPRGF0YTogZm10RGF0ZVRpbWUsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0RGF0ZVRpbWUsXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBnZXRDb25jdXJyZW5jeURhdGVUaW1lXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEYXRlVGltZU9mZnNldCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKDE5MDAsIDAsIDEpLFxyXG4gICAgaXNEYXRlOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRGF0ZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IHBhcnNlUmF3RGF0ZSxcclxuICAgIG5vcm1hbGl6ZTogZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHsgcmV0dXJuIHZhbHVlICYmIHZhbHVlLmdldFRpbWUgJiYgdmFsdWUuZ2V0VGltZSgpOyB9LCAvLyBkYXRlcyBkb24ndCBwZXJmb3JtIGVxdWFsaXR5IGNvbXBhcmlzb25zIHByb3Blcmx5XHJcbiAgICBmbXRPRGF0YTogZm10RGF0ZVRpbWVPZmZzZXQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0RGF0ZVRpbWUsXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBnZXRDb25jdXJyZW5jeURhdGVUaW1lXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBUaW1lID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogXCJQVDBTXCIsXHJcbiAgICBmbXRPRGF0YTogZm10VGltZSxcclxuICAgIHBhcnNlUmF3VmFsdWU6IERhdGFUeXBlLnBhcnNlVGltZUZyb21TZXJ2ZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJvb2xlYW4gPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Jvb2wsXHJcbiAgICBmbXRPRGF0YTogZm10Qm9vbGVhblxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgR3VpZCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXHJcbiAgICBwYXJzZTogY29lcmNlVG9HdWlkLFxyXG4gICAgZm10T0RhdGE6IGZtdEd1aWQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0R3VpZCxcclxuICAgIHBhcnNlUmF3VmFsdWU6IGZ1bmN0aW9uICh2YWw6IHN0cmluZykgeyByZXR1cm4gdmFsLnRvTG93ZXJDYXNlKCk7IH0sXHJcbiAgICBnZXRDb25jdXJyZW5jeVZhbHVlOiBjb3JlLmdldFV1aWRcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEJpbmFyeSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG51bGwsXHJcbiAgICBmbXRPRGF0YTogZm10QmluYXJ5LFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogcGFyc2VSYXdCaW5hcnlcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIFVuZGVmaW5lZCA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcclxuICAgIGZtdE9EYXRhOiBmbXRVbmRlZmluZWRcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIGdldENvbXBhcmFibGVGbihkYXRhVHlwZT86IERhdGFUeXBlKSB7XHJcbiAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUubm9ybWFsaXplKSB7XHJcbiAgICAgIHJldHVybiBkYXRhVHlwZS5ub3JtYWxpemU7XHJcbiAgICB9IGVsc2UgaWYgKGRhdGFUeXBlID09PSBEYXRhVHlwZS5UaW1lKSB7XHJcbiAgICAgIC8vIGR1cmF0aW9ucyBtdXN0IGJlIGNvbnZlcnRlZCB0byBjb21wYXJlIHRoZW1cclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIGNvcmUuZHVyYXRpb25Ub1NlY29uZHModmFsdWUpO1xyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVE9ETzogX19pZGVudGl0eVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgRGF0YVR5cGUgZm9yIGEgc3BlY2lmaWVkIEVETSB0eXBlIG5hbWUuXHJcbiAgKiovXHJcbiAgc3RhdGljIGZyb21FZG1EYXRhVHlwZSh0eXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZHQ6IERhdGFUeXBlIHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHBhcnRzID0gdHlwZU5hbWUuc3BsaXQoXCIuXCIpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IHNpbXBsZU5hbWUgPSBwYXJ0c1sxXTtcclxuICAgICAgaWYgKHNpbXBsZU5hbWUgPT09IFwiaW1hZ2VcIikge1xyXG4gICAgICAgIC8vIGhhY2tcclxuICAgICAgICBkdCA9IERhdGFUeXBlLkJ5dGU7XHJcbiAgICAgIH0gZWxzZSBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5mcm9tTmFtZShzaW1wbGVOYW1lKSB8fCBEYXRhVHlwZS5VbmRlZmluZWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZW51bVxyXG4gICAgICAgIC8vIGR0ID0gRGF0YVR5cGUuSW50MzI7XHJcbiAgICAgICAgZHQgPSBEYXRhVHlwZS5TdHJpbmc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZHQ7XHJcbiAgfVxyXG5cclxuICAvKiogUmV0dXJucyB0aGUgRGF0YVR5cGUgZm9yIGEgc3BlY2lmaWVkIGlucHV0LiAqL1xyXG4gIHN0YXRpYyBmcm9tVmFsdWUodmFsOiBhbnkpIHtcclxuICAgIGlmIChjb3JlLmlzRGF0ZSh2YWwpKSByZXR1cm4gRGF0YVR5cGUuRGF0ZVRpbWU7XHJcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgIGlmIChjb3JlLmlzR3VpZCh2YWwpKSByZXR1cm4gRGF0YVR5cGUuR3VpZDtcclxuICAgICAgICAvLyB0aGUgPjMgYmVsb3cgaXMgYSBoYWNrIHRvIGluc3VyZSB0aGF0IGlmIHdlIGFyZSBpbmZlcnJpbmcgZGF0YXR5cGVzIHRoYXRcclxuICAgICAgICAvLyB2ZXJ5IHNob3J0IHN0cmluZ3MgdGhhdCBhcmUgdmFsaWQgYnV0IHVubGlrZWx5IElTTyBlbmNvZGVkIFRpbWUncyBhcmUgdHJlYXRlZCBhcyBzdHJpbmdzIGluc3RlYWQuXHJcbiAgICAgICAgZWxzZSBpZiAoY29yZS5pc0R1cmF0aW9uKHZhbCkgJiYgdmFsLmxlbmd0aCA+IDMpIHJldHVybiBEYXRhVHlwZS5UaW1lO1xyXG4gICAgICAgIGVsc2UgaWYgKGNvcmUuaXNEYXRlU3RyaW5nKHZhbCkpIHJldHVybiBEYXRhVHlwZS5EYXRlVGltZTtcclxuICAgICAgICByZXR1cm4gRGF0YVR5cGUuU3RyaW5nO1xyXG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5Cb29sZWFuO1xyXG4gICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLkRvdWJsZTtcclxuICAgIH1cclxuICAgIHJldHVybiBEYXRhVHlwZS5VbmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGFyc2VUaW1lRnJvbVNlcnZlcihzb3VyY2U6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgICAvLyBPREFUQSB2MyBmb3JtYXRcclxuICAgIGlmIChzb3VyY2UgJiYgc291cmNlLl9fZWRtVHlwZSA9PT0gJ0VkbS5UaW1lJykge1xyXG4gICAgICBsZXQgc2Vjb25kcyA9IE1hdGguZmxvb3Ioc291cmNlLm1zIC8gMTAwMCk7XHJcbiAgICAgIHJldHVybiAnUFQnICsgc2Vjb25kcyArICdTJztcclxuICAgIH1cclxuICAgIHJldHVybiBzb3VyY2U7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcGFyc2VEYXRlQXNVVEMoc291cmNlOiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAvLyBjb252ZXJ0IHRvIFVUQyBzdHJpbmcgaWYgbm8gdGltZSB6b25lIHNwZWNpZmllci5cclxuICAgICAgbGV0IGlzTG9jYWxUaW1lID0gX2xvY2FsVGltZVJlZ2V4LnRlc3Qoc291cmNlKTtcclxuICAgICAgLy8gdmFyIGlzTG9jYWxUaW1lID0gIWhhc1RpbWVab25lKHNvdXJjZSk7XHJcbiAgICAgIHNvdXJjZSA9IGlzTG9jYWxUaW1lID8gc291cmNlICsgJ1onIDogc291cmNlO1xyXG4gICAgfVxyXG4gICAgc291cmNlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzb3VyY2UpKTtcclxuICAgIHJldHVybiBzb3VyY2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqIFJldHVybnMgYSByYXcgdmFsdWUgY29udmVydGVkIHRvIHRoZSBzcGVjaWZpZWQgRGF0YVR5cGUgKi9cclxuICBzdGF0aWMgcGFyc2VSYXdWYWx1ZSh2YWw6IGFueSwgZGF0YVR5cGU/OiBEYXRhVHlwZSkge1xyXG4gICAgLy8gdW5kZWZpbmVkIHZhbHVlcyB3aWxsIGJlIHRoZSBkZWZhdWx0IGZvciBtb3N0IHVubWFwcGVkIHByb3BlcnRpZXMgRVhDRVBUIHdoZW4gdGhleSBhcmUgc2V0XHJcbiAgICAvLyBpbiBhIGpzb25SZXN1bHRzQWRhcHRlciAoIGFuIHVudXN1YWwgdXNlIGNhc2UpLlxyXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XHJcbiAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUucGFyc2VSYXdWYWx1ZSkge1xyXG4gICAgICB2YWwgPSBkYXRhVHlwZS5wYXJzZVJhd1ZhbHVlKHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb247IHZpc2libGUgb24gaW5zdGFuY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXHJcbiAgc3RhdGljIF9yZXNldENvbnN0YW50cygpIHtcclxuICAgIERhdGFUeXBlLmNvbnN0YW50cyA9IHtcclxuICAgICAgc3RyaW5nUHJlZml4OiBcIktfXCIsXHJcbiAgICAgIG5leHROdW1iZXI6IC0xLFxyXG4gICAgICBuZXh0TnVtYmVySW5jcmVtZW50OiAtMVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIE5PVCBZRVQgTkVFREVEIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgLy8gdmFyIF91dGNPZmZzZXRNcyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7XHJcblxyXG4gIC8vRGF0YVR5cGUucGFyc2VEYXRlQXNMb2NhbCA9IGZ1bmN0aW9uIChzb3VyY2UpIHtcclxuICAvLyAgICB2YXIgZHQgPSBEYXRhVHlwZS5wYXJzZURhdGVzQXNVVEMoc291cmNlKTtcclxuICAvLyAgICBpZiAoX19pc0RhdGUoZHQpKSB7XHJcbiAgLy8gICAgICAgIGR0ID0gbmV3IERhdGUoZHQuZ2V0VGltZSgpICsgX3V0Y09mZnNldE1zKTtcclxuICAvLyAgICB9XHJcbiAgLy8gICAgcmV0dXJuIGR0O1xyXG4gIC8vfTtcclxufVxyXG5EYXRhVHlwZS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRGF0YVR5cGVcIjtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLl9yZXNldENvbnN0YW50cygpO1xyXG5FcnJvclsneCddID0gRGF0YVR5cGUucmVzb2x2ZVN5bWJvbHMoKTtcclxuRXJyb3JbJ3gnXSA9IERhdGFUeXBlLmdldFN5bWJvbHMoKS5mb3JFYWNoKChzeW06IERhdGFUeXBlKSA9PiBzeW0udmFsaWRhdG9yQ3RvciA9IGdldFZhbGlkYXRvckN0b3Ioc3ltKSk7XHJcblxyXG4vLyBwcml2YXRlIGZ1bmN0aW9ucztcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRWYWxpZGF0b3JDdG9yKGRhdGFUeXBlOiBEYXRhVHlwZSkge1xyXG4gIHN3aXRjaCAoZGF0YVR5cGUpIHtcclxuICAgIGNhc2UgRGF0YVR5cGUuU3RyaW5nOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLnN0cmluZztcclxuICAgIGNhc2UgRGF0YVR5cGUuSW50NjQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuaW50NjQ7XHJcbiAgICBjYXNlIERhdGFUeXBlLkludDMyOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmludDMyO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5JbnQxNjpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5pbnQxNjtcclxuICAgIGNhc2UgRGF0YVR5cGUuRGVjaW1hbDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRvdWJsZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLlNpbmdsZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5udW1iZXI7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmRhdGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkRhdGVUaW1lT2Zmc2V0OlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmRhdGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkJvb2xlYW46XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuYm9vbDtcclxuICAgIGNhc2UgRGF0YVR5cGUuR3VpZDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ndWlkO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5CeXRlOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmJ5dGU7XHJcbiAgICBjYXNlIERhdGFUeXBlLkJpbmFyeTpcclxuICAgICAgLy8gVE9ETzogZG9uJ3QgcXVpdGUga25vdyBob3cgdG8gdmFsaWRhdGUgdGhpcyB5ZXQuXHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3Iubm9uZTtcclxuICAgIGNhc2UgRGF0YVR5cGUuVGltZTpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5kdXJhdGlvbjtcclxuICAgIGNhc2UgRGF0YVR5cGUuVW5kZWZpbmVkOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm5vbmU7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0U3RyaW5nKCkge1xyXG4gIHJldHVybiBEYXRhVHlwZS5jb25zdGFudHMuc3RyaW5nUHJlZml4ICsgZ2V0TmV4dE51bWJlcigpLnRvU3RyaW5nKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHROdW1iZXIoKSB7XHJcbiAgbGV0IHJlc3VsdCA9IERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVyO1xyXG4gIERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVyICs9IERhdGFUeXBlLmNvbnN0YW50cy5uZXh0TnVtYmVySW5jcmVtZW50O1xyXG4gIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHRHdWlkKCkge1xyXG4gIHJldHVybiBjb3JlLmdldFV1aWQoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dERhdGVUaW1lKCkge1xyXG4gIHJldHVybiBuZXcgRGF0ZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb25jdXJyZW5jeURhdGVUaW1lKHZhbDogYW55KSB7XHJcbiAgLy8gdXNlIHRoZSBjdXJyZW50IGRhdGV0aW1lIGJ1dCBpbnN1cmUgdGhhdCBpdCBpcyBkaWZmZXJlbnQgZnJvbSBwcmV2aW91cyBjYWxsLlxyXG4gIGxldCBkdCA9IG5ldyBEYXRlKCk7XHJcbiAgbGV0IGR0MiA9IG5ldyBEYXRlKCk7XHJcbiAgd2hpbGUgKGR0LmdldFRpbWUoKSA9PT0gZHQyLmdldFRpbWUoKSkge1xyXG4gICAgZHQyID0gbmV3IERhdGUoKTtcclxuICB9XHJcbiAgcmV0dXJuIGR0MjtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9TdHJpbmcoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lPzogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIChzb3VyY2UgPT0gbnVsbCkgPyBzb3VyY2UgOiBzb3VyY2UudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9HdWlkKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICByZXR1cm4gc291cmNlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0ludChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCB2YWwgPSBwYXJzZUludChzcmMsIDEwKTtcclxuICAgIHJldHVybiBpc05hTih2YWwpID8gc291cmNlIDogdmFsO1xyXG4gIH0gZWxzZSBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHNvdXJjZSk7XHJcbiAgfVxyXG4gIC8vIGRvIHdlIHdhbnQgdG8gY29lcmNlIGZsb2F0cyAtPiBpbnRzXHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9GbG9hdChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCB2YWwgPSBwYXJzZUZsb2F0KHNyYyk7XHJcbiAgICByZXR1cm4gaXNOYU4odmFsKSA/IHNvdXJjZSA6IHZhbDtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29lcmNlVG9EYXRlKHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgbGV0IHZhbDogYW55O1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCk7XHJcbiAgICBpZiAoc3JjID09PSBcIlwiKSByZXR1cm4gbnVsbDtcclxuICAgIHZhbCA9IG5ldyBEYXRlKERhdGUucGFyc2Uoc3JjKSk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9IGVsc2UgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcIm51bWJlclwiKSB7XHJcbiAgICB2YWwgPSBuZXcgRGF0ZShzb3VyY2UpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvQm9vbChzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU6IHN0cmluZykge1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmIChzcmMgPT09IFwiZmFsc2VcIiB8fCBzcmMgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmIChzcmMgPT09IFwidHJ1ZVwiKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10U3RyaW5nKHZhbDogYW55KSB7XHJcbiAgcmV0dXJuIHZhbCA9PSBudWxsID8gbnVsbCA6IFwiJ1wiICsgdmFsLnJlcGxhY2UoLycvZywgXCInJ1wiKSArIFwiJ1wiO1xyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRJbnQodmFsOiBhbnkpIHtcclxuICByZXR1cm4gdmFsID09IG51bGwgPyBudWxsIDogKCh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSA/IHBhcnNlSW50KHZhbCwgMTApIDogdmFsKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbWFrZUZsb2F0Rm10KGZtdFN1ZmZpeDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWw6IGFueSkge1xyXG4gICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIHZhbCA9IHBhcnNlRmxvYXQodmFsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWwgKyBmbXRTdWZmaXg7XHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10RGF0ZVRpbWUodmFsOiBEYXRlKSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZXRpbWUnXCIgKyB2YWwudG9JU09TdHJpbmcoKSArIFwiJ1wiO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGRhdGVUaW1lXCIsIHZhbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXREYXRlVGltZU9mZnNldCh2YWw6IERhdGUpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gXCJkYXRldGltZW9mZnNldCdcIiArIHZhbC50b0lTT1N0cmluZygpICsgXCInXCI7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZGF0ZVRpbWVcIiwgdmFsKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFRpbWUodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICghY29yZS5pc0R1cmF0aW9uKHZhbCkpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIElTTyA4NjAxIGR1cmF0aW9uXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiBcInRpbWUnXCIgKyB2YWwgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10R3VpZCh2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKCFjb3JlLmlzR3VpZCh2YWwpKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBndWlkXCIsIHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiBcImd1aWQnXCIgKyB2YWwgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10Qm9vbGVhbih2YWw6IGFueSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgaWYgKHR5cGVvZiB2YWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIHJldHVybiB2YWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gISF2YWw7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRCaW5hcnkodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiB2YWw7XHJcbiAgcmV0dXJuIFwiYmluYXJ5J1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbi8vIFRPRE86IHVzZSBfX2lkZW50aXR5IGluc3RlYWQ7XHJcbmZ1bmN0aW9uIGZtdFVuZGVmaW5lZCh2YWw6IGFueSkge1xyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRocm93RXJyb3IobXNnOiBzdHJpbmcsIHZhbDogYW55KSB7XHJcbiAgbXNnID0gY29yZS5mb3JtYXRTdHJpbmcobXNnLCB2YWwpO1xyXG4gIHRocm93IG5ldyBFcnJvcihtc2cpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVJhd0RhdGUodmFsOiBhbnkpIHtcclxuICBpZiAoIWNvcmUuaXNEYXRlKHZhbCkpIHtcclxuICAgIHZhbCA9IERhdGFUeXBlLnBhcnNlRGF0ZUZyb21TZXJ2ZXIodmFsKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VSYXdCaW5hcnkodmFsOiBhbnkpIHtcclxuICBpZiAodmFsICYmIHZhbC4kdmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgdmFsID0gdmFsLiR2YWx1ZTsgLy8gdGhpcyB3aWxsIGJlIGEgYnl0ZVtdIGVuY29kZWQgYXMgYSBzdHJpbmdcclxuICB9XHJcbiAgcmV0dXJuIHZhbDtcclxufVxyXG5cclxuLy9mdW5jdGlvbiBoYXNUaW1lWm9uZShzb3VyY2UpIHtcclxuLy8gIHZhciBpeCA9IHNvdXJjZS5pbmRleE9mKFwiVFwiKTtcclxuLy8gIHZhciB0aW1lUGFydCA9IHNvdXJjZS5zdWJzdHJpbmcoaXgrMSk7XHJcbi8vICByZXR1cm4gIHRpbWVQYXJ0LmluZGV4T2YoXCItXCIpID49IDAgfHwgdGltZVBhcnQuaW5kZXhPZihcIitcIikgPj0gMCB8fCB0aW1lUGFydC5pbmRleE9mKFwiWlwiKTtcclxuLy99XHJcblxyXG5cclxuIl19
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10eXBlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDSDtJQUE4Qiw0QkFBVTtJQUF4Qzs7SUFrVEEsQ0FBQztJQXRIUSx3QkFBZSxHQUF0QixVQUF1QixRQUFtQjtRQUN4QyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sUUFBUSxDQUFDLFNBQVMsQ0FBQztTQUMzQjthQUFNLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLEVBQUU7WUFDckMsOENBQThDO1lBQzlDLE9BQU8sVUFBVSxLQUFVO2dCQUN6QixPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLG1CQUFtQjtZQUNuQixPQUFPLFVBQVUsS0FBVTtnQkFDekIsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDtPQUNHO0lBQ0ksd0JBQWUsR0FBdEIsVUFBdUIsUUFBZ0I7UUFDckMsSUFBSSxFQUF3QixDQUFDO1FBQzdCLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFO2dCQUMxQixPQUFPO2dCQUNQLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2FBQ3BCO2lCQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzdCLEVBQUUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDMUQ7aUJBQU07Z0JBQ0wsT0FBTztnQkFDUCx1QkFBdUI7Z0JBQ3ZCLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ3RCO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrREFBa0Q7SUFDM0Msa0JBQVMsR0FBaEIsVUFBaUIsR0FBUTtRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQy9DLFFBQVEsT0FBTyxHQUFHLEVBQUU7WUFDbEIsS0FBSyxRQUFRO2dCQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUMzQywyRUFBMkU7Z0JBQzNFLG9HQUFvRztxQkFDL0YsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUM7cUJBQ2pFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUMxRCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDekIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMxQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzVCLENBQUM7SUFFTSw0QkFBbUIsR0FBMUIsVUFBMkIsTUFBVztRQUNwQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtZQUM5QixPQUFPLE1BQU0sQ0FBQztTQUNmO1FBQ0Qsa0JBQWtCO1FBQ2xCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssVUFBVSxFQUFFO1lBQzdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPLElBQUksR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO1NBQzdCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLHVCQUFjLEdBQXJCLFVBQXNCLE1BQVc7UUFDL0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDOUIsbURBQW1EO1lBQ25ELElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0MsMENBQTBDO1lBQzFDLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUM5QztRQUNELE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRDQUE0QztJQUNyQyx5QkFBZ0IsR0FBdkIsVUFBd0IsTUFBYztRQUNwQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNqQixFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQUEsQ0FBQztJQUVGLG9FQUFvRTtJQUM3RCx5QkFBZ0IsR0FBdkIsVUFBd0IsR0FBUTtRQUM5Qiw2RkFBNkY7UUFDN0YsNkdBQTZHO1FBQzdHLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDO0lBQzdILENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsc0JBQWEsR0FBcEIsVUFBcUIsR0FBUSxFQUFFLFFBQW1CO1FBQ2hELDZGQUE2RjtRQUM3RixrREFBa0Q7UUFDbEQsSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDckIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLGFBQWEsRUFBRTtZQUN0QyxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHdCQUF3QjtJQUN4Qix3RUFBd0U7SUFDakUsd0JBQWUsR0FBdEI7UUFDRSxRQUFRLENBQUMsU0FBUyxHQUFHO1lBQ25CLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDZCxtQkFBbUIsRUFBRSxDQUFDLENBQUM7U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFuUU0sNEJBQW1CLEdBQUcsVUFBQyxLQUFVLElBQUssT0FBQSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUE5QixDQUE4QixDQUFDO0lBT3JFLGVBQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUMzQixZQUFZLEVBQUUsRUFBRTtRQUNoQixLQUFLLEVBQUUsY0FBYztRQUNyQixRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFDLENBQUM7SUFFSSxjQUFLLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDMUIsWUFBWSxFQUFFLENBQUM7UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsY0FBYyxFQUFFLElBQUk7UUFDcEIsS0FBSyxFQUFFLFdBQVc7UUFDbEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDM0IsT0FBTyxFQUFFLGFBQWE7S0FDdkIsQ0FBQyxDQUFDO0lBRUksY0FBSyxHQUFHLElBQUksUUFBUSxDQUFDO1FBQzFCLFlBQVksRUFBRSxDQUFDO1FBQ2YsU0FBUyxFQUFFLElBQUk7UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLEtBQUssRUFBRSxXQUFXO1FBQ2xCLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUMsQ0FBQztJQUVJLGNBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUMxQixZQUFZLEVBQUUsQ0FBQztRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsU0FBUyxFQUFFLElBQUk7UUFDZixLQUFLLEVBQUUsV0FBVztRQUNsQixRQUFRLEVBQUUsTUFBTTtRQUNoQixPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFDLENBQUM7SUFFSSxhQUFJLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDekIsWUFBWSxFQUFFLENBQUM7UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsS0FBSyxFQUFFLFdBQVc7UUFDbEIsUUFBUSxFQUFFLE1BQU07S0FDakIsQ0FBQyxDQUFDO0lBRUksZ0JBQU8sR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUM1QixZQUFZLEVBQUUsQ0FBQztRQUNmLFNBQVMsRUFBRSxJQUFJO1FBQ2YsY0FBYyxFQUFFLElBQUk7UUFDcEIsT0FBTyxFQUFFLElBQUk7UUFDYixLQUFLLEVBQUUsYUFBYTtRQUNwQixRQUFRLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztRQUMzQixPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFDLENBQUM7SUFFSSxlQUFNLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDM0IsWUFBWSxFQUFFLENBQUM7UUFDZixTQUFTLEVBQUUsSUFBSTtRQUNmLE9BQU8sRUFBRSxJQUFJO1FBQ2IsS0FBSyxFQUFFLGFBQWE7UUFDcEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDM0IsT0FBTyxFQUFFLGFBQWE7S0FDdkIsQ0FBQyxDQUFDO0lBRUksZUFBTSxHQUFHLElBQUksUUFBUSxDQUFDO1FBQzNCLFlBQVksRUFBRSxDQUFDO1FBQ2YsU0FBUyxFQUFFLElBQUk7UUFDZixPQUFPLEVBQUUsSUFBSTtRQUNiLEtBQUssRUFBRSxhQUFhO1FBQ3BCLFFBQVEsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQzNCLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUMsQ0FBQztJQUVJLGlCQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDN0IsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLGdCQUFnQjtRQUN2QixhQUFhLEVBQUUsZ0JBQWdCO1FBQy9CLFNBQVMsRUFBRSxVQUFVLEtBQVUsSUFBSSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvSSxRQUFRLEVBQUUsV0FBVztRQUNyQixPQUFPLEVBQUUsZUFBZTtRQUN4QixtQkFBbUIsRUFBRSxzQkFBc0I7S0FDNUMsQ0FBQyxDQUFDO0lBRUksaUJBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUM3QixZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEMsTUFBTSxFQUFFLElBQUk7UUFDWixLQUFLLEVBQUUsWUFBWTtRQUNuQixhQUFhLEVBQUUsWUFBWTtRQUMzQixTQUFTLEVBQUUsVUFBVSxLQUFVLElBQUksT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLG1CQUFtQixFQUFFLHNCQUFzQjtLQUM1QyxDQUFDLENBQUM7SUFFSSx1QkFBYyxHQUFHLElBQUksUUFBUSxDQUFDO1FBQ25DLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxZQUFZO1FBQ25CLGFBQWEsRUFBRSxZQUFZO1FBQzNCLFNBQVMsRUFBRSxVQUFVLEtBQVUsSUFBSSxPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsUUFBUSxFQUFFLGlCQUFpQjtRQUMzQixPQUFPLEVBQUUsZUFBZTtRQUN4QixtQkFBbUIsRUFBRSxzQkFBc0I7S0FDNUMsQ0FBQyxDQUFDO0lBRUksYUFBSSxHQUFHLElBQUksUUFBUSxDQUFDO1FBQ3pCLFlBQVksRUFBRSxNQUFNO1FBQ3BCLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLGFBQWEsRUFBRSxRQUFRLENBQUMsbUJBQW1CO0tBQzVDLENBQUMsQ0FBQztJQUVJLGdCQUFPLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDNUIsWUFBWSxFQUFFLEtBQUs7UUFDbkIsS0FBSyxFQUFFLFlBQVk7UUFDbkIsUUFBUSxFQUFFLFVBQVU7S0FDckIsQ0FBQyxDQUFDO0lBRUksYUFBSSxHQUFHLElBQUksUUFBUSxDQUFDO1FBQ3pCLFlBQVksRUFBRSxzQ0FBc0M7UUFDcEQsS0FBSyxFQUFFLFlBQVk7UUFDbkIsUUFBUSxFQUFFLE9BQU87UUFDakIsT0FBTyxFQUFFLFdBQVc7UUFDcEIsYUFBYSxFQUFFLFVBQVUsR0FBVyxJQUFJLE9BQU8sR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTztLQUNsQyxDQUFDLENBQUM7SUFFSSxlQUFNLEdBQUcsSUFBSSxRQUFRLENBQUM7UUFDM0IsWUFBWSxFQUFFLElBQUk7UUFDbEIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsYUFBYSxFQUFFLGNBQWM7S0FDOUIsQ0FBQyxDQUFDO0lBRUksa0JBQVMsR0FBRyxJQUFJLFFBQVEsQ0FBQztRQUM5QixZQUFZLEVBQUUsU0FBUztRQUN2QixRQUFRLEVBQUUsWUFBWTtLQUN2QixDQUFDLENBQUM7SUF3SEwsZUFBQztDQUFBLEFBbFRELENBQThCLFVBQVUsR0FrVHZDO1NBbFRZLFFBQVE7QUFtVHJCLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUMzQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3hDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFhLElBQUssT0FBQSxHQUFHLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUF6QyxDQUF5QyxDQUFDLENBQUM7QUFFekcscUJBQXFCO0FBR3JCLFNBQVMsZ0JBQWdCLENBQUMsUUFBa0I7SUFDMUMsUUFBUSxRQUFRLEVBQUU7UUFDaEIsS0FBSyxRQUFRLENBQUMsTUFBTTtZQUNsQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUMsS0FBSztZQUNqQixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDekIsS0FBSyxRQUFRLENBQUMsS0FBSztZQUNqQixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDekIsS0FBSyxRQUFRLENBQUMsS0FBSztZQUNqQixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDekIsS0FBSyxRQUFRLENBQUMsT0FBTztZQUNuQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUMsTUFBTTtZQUNsQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUMsTUFBTTtZQUNsQixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUMsUUFBUTtZQUNwQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsS0FBSyxRQUFRLENBQUMsY0FBYztZQUMxQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsS0FBSyxRQUFRLENBQUMsT0FBTztZQUNuQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsS0FBSyxRQUFRLENBQUMsSUFBSTtZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsS0FBSyxRQUFRLENBQUMsSUFBSTtZQUNoQixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsS0FBSyxRQUFRLENBQUMsTUFBTTtZQUNsQixtREFBbUQ7WUFDbkQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3hCLEtBQUssUUFBUSxDQUFDLElBQUk7WUFDaEIsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzVCLEtBQUssUUFBUSxDQUFDLFNBQVM7WUFDckIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDO0tBQ3pCO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLGFBQWEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLGFBQWE7SUFDcEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFDM0MsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztJQUN4RSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxXQUFXO0lBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3hCLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEdBQVE7SUFDdEMsK0VBQStFO0lBQy9FLElBQUksRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDcEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNyQixPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDckMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7S0FDbEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxNQUFXLEVBQUUsY0FBdUI7SUFDMUQsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkQsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQVcsRUFBRSxjQUFzQjtJQUN2RCxJQUFJLGNBQWMsS0FBSyxRQUFRLEVBQUU7UUFDL0IsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDcEM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsTUFBVyxFQUFFLGNBQXNCO0lBQ3RELElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQ2xDO1NBQU0sSUFBSSxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQjtJQUNELHNDQUFzQztJQUN0QyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBVyxFQUFFLGNBQXNCO0lBQ3hELElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxHQUFHLEtBQUssRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzVCLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7S0FDbEM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBVyxFQUFFLGNBQXNCO0lBQ3ZELElBQUksR0FBUSxDQUFDO0lBQ2IsSUFBSSxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQy9CLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLEdBQUcsS0FBSyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDNUIsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3hDO1NBQU0sSUFBSSxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQ3RDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3hDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELDZEQUE2RDtBQUM3RCxTQUFTLGdCQUFnQixDQUFDLE1BQVcsRUFBRSxjQUFzQjtJQUMzRCxJQUFJLEdBQVEsQ0FBQztJQUNiLElBQUksY0FBYyxLQUFLLFFBQVEsRUFBRTtRQUMvQixJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFZLENBQUM7UUFDbEMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3hDO1NBQU0sSUFBSSxjQUFjLEtBQUssUUFBUSxFQUFFO1FBQ3RDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0tBQ3hDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQVcsRUFBRSxjQUFzQjtJQUN2RCxJQUFJLGNBQWMsS0FBSyxRQUFRLEVBQUU7UUFDL0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLElBQUksR0FBRyxLQUFLLE9BQU8sSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7WUFDekIsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxNQUFNLENBQUM7U0FDZjtLQUNGO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVE7SUFDekIsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEUsQ0FBQztBQUVELFNBQVMsTUFBTSxDQUFDLEdBQVE7SUFDdEIsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLFNBQWlCO0lBQ3JDLE9BQU8sVUFBVSxHQUFRO1FBQ3ZCLElBQUksR0FBRyxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUMzQixHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxHQUFHLEdBQUcsU0FBUyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFTO0lBQzVCLElBQUksR0FBRyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QixJQUFJO1FBQ0YsT0FBTyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQztLQUM5QztJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsVUFBVSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVM7SUFDNUIsSUFBSSxHQUFHLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzdCLElBQUk7UUFDRixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDM0Q7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNqRDtBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQVM7SUFDbEMsSUFBSSxHQUFHLElBQUksSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzdCLElBQUk7UUFDRixPQUFPLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUM7S0FDcEQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUNqRDtBQUNILENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFRO0lBQ3ZCLElBQUksR0FBRyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN6QixVQUFVLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDMUQ7SUFDRCxPQUFPLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFRO0lBQ3ZCLElBQUksR0FBRyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQixVQUFVLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDN0M7SUFDRCxPQUFPLE9BQU8sR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFRO0lBQzFCLElBQUksR0FBRyxJQUFJLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUM7S0FDNUM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUNkO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVE7SUFDekIsSUFBSSxHQUFHLElBQUksSUFBSTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzVCLE9BQU8sU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDL0IsQ0FBQztBQUVELGdDQUFnQztBQUNoQyxTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQzVCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFRO0lBQ3ZDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3JCLEdBQUcsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDekM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCx5Q0FBeUM7QUFDekMsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFRO0lBQ2hDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1FBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7WUFDbkIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsR0FBRyxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEdBQVE7SUFDOUIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUU7UUFDbkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7S0FDL0Q7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxnQ0FBZ0M7QUFDaEMsaUNBQWlDO0FBQ2pDLDBDQUEwQztBQUMxQyw4RkFBOEY7QUFDOUYsR0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgfSBmcm9tICcuL2NvcmUnO1xyXG5pbXBvcnQgeyBCcmVlemVFbnVtIH0gZnJvbSAnLi9lbnVtJztcclxuaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0ZSc7XHJcblxyXG5sZXQgX2xvY2FsVGltZVJlZ2V4ID0gLy5cXGR7M30kLztcclxuXHJcbi8qKiAgXHJcbkRhdGFUeXBlIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgc3VwcG9ydGVkIGRhdGEgdHlwZXMuXHJcbkBkeW5hbWljXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgRGF0YVR5cGUgZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuICAvKiogVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWNsYXJlIGRlZmF1bHRWYWx1ZT86IGFueTtcclxuICAvKiogV2hldGhlciB0aGlzIGlzIGEgJ251bWVyaWMnIERhdGFUeXBlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGRlY2xhcmUgaXNOdW1lcmljPzogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciB0aGlzIGlzIGFuICdpbnRlZ2VyJyBEYXRhVHlwZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWNsYXJlIGlzSW50ZWdlcj86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgdG8gcXVvdGUgdGhlIGpzb24gdmFsdWUgd2hlbiBmb3JtYXR0aW5nIHRoaXMgRGF0YVR5cGUgZm9yIE9EYXRhLiAqL1xyXG4gIGRlY2xhcmUgcXVvdGVKc29uT0RhdGE/OiBib29sZWFuO1xyXG5cclxuICAvKiogVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFtbVmFsaWRhdG9yXV0gdG8gYmUgdXNlZCBpbiB2YWxpZGF0aW5nIGluc3RhbmNlcyBvZiB0aGlzIERhdGFUeXBlLiAqL1xyXG4gIHZhbGlkYXRvckN0b3I/KGNvbnRleHQ/OiBhbnkpOiBWYWxpZGF0b3I7XHJcbiAgLyoqIFxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIG5vcm1hbGl6ZSBhIGRhdGEgdmFsdWUgZm9yIGNvbXBhcmlzb24sIGlmIGl0cyB2YWx1ZSBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseS4gXHJcbiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgcHJvcGVydHkgaXMgY2hhbmdlZCwgc28gbWFrZSBpdCBmYXN0LlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGVcclxuICAqKi9cclxuICBub3JtYWxpemU/KHZhbHVlOiBhbnkpOiBhbnk7XHJcbiAgLyoqXHJcbiAgT3B0aW9uYWwgZnVuY3Rpb24gdG8gY29udmVydCBhIHJhdyAoc2VydmVyKSB2YWx1ZSBmcm9tIHN0cmluZyB0byB0aGlzIERhdGFUeXBlLlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGVcclxuICAqKi9cclxuICBwYXJzZVJhd1ZhbHVlPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKlxyXG4gIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSB2YWx1ZSBmcm9tIHN0cmluZyB0byB0aGlzIERhdGFUeXBlLiAgTm90ZSB0aGF0IHRoaXMgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgcHJvcGVydHkgaXMgY2hhbmdlZCwgc28gbWFrZSBpdCBmYXN0LlxyXG4gIEByZXR1cm4gdmFsdWUgYXBwcm9wcmlhdGUgZm9yIHRoaXMgRGF0YVR5cGUgXHJcbiAgKiovXHJcbiAgcGFyc2U/KHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKTogYW55O1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBmb3JtYXQgdGhpcyBEYXRhVHlwZSBmb3IgT0RhdGEgcXVlcmllcy5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciBPRGF0YSBxdWVyeSAgIFxyXG4gICoqL1xyXG4gIGZtdE9EYXRhPyh2YWx1ZTogYW55KTogYW55O1xyXG4gIC8qKiBcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgdGhlIG5leHQgdmFsdWUgZm9yIGtleSBnZW5lcmF0aW9uLCBpZiB0aGlzIGRhdGF0eXBlIGlzIHVzZWQgYXMgYSBrZXkuICBVc2VzIGFuIGludGVybmFsIHRhYmxlIG9mIHByZXZpb3VzIHZhbHVlcy5cclxuICBAcmV0dXJuIHZhbHVlIGFwcHJvcHJpYXRlIGZvciB0aGlzIERhdGFUeXBlIFxyXG4gICoqL1xyXG4gIGdldE5leHQ/KCk6IGFueTtcclxuICAvKipcclxuICBPcHRpb25hbCBmdW5jdGlvbiB0byBnZXQgdGhlIG5leHQgdmFsdWUgd2hlbiB0aGUgZGF0YXR5cGUgaXMgdXNlZCBhcyBhIGNvbmN1cnJlbmN5IHByb3BlcnR5LlxyXG4gIEBwYXJhbSBwcmV2aW91c1ZhbHVlXHJcbiAgQHJldHVybiB0aGUgbmV4dCBjb25jdXJyZW5jeSB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnVuY3Rpb24gb2YgdGhlIHByZXZpb3VzVmFsdWUuXHJcbiAgKiovXHJcbiAgZ2V0Q29uY3VycmVuY3lWYWx1ZT8ocHJldmlvdXNWYWx1ZT86IGFueSk6IGFueTtcclxuXHJcbiAgc3RhdGljIHBhcnNlRGF0ZUZyb21TZXJ2ZXIgPSAodmFsdWU6IGFueSkgPT4gRGF0YVR5cGUucGFyc2VEYXRlQXNVVEModmFsdWUpO1xyXG4gIC8vIHNhbWUgZWZmZWN0IGFzIGFib3ZlIGJ1dCBkb2Vzbid0IGdpdmUgcmlnaHQgVFNET0MuXHJcbiAgLy8gc3RhdGljIHBhcnNlRGF0ZUZyb21TZXJ2ZXIgPSBEYXRhVHlwZS5wYXJzZURhdGVBc1VUQztcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIGNvbnN0YW50czogeyBzdHJpbmdQcmVmaXg6IHN0cmluZywgbmV4dE51bWJlcjogbnVtYmVyLCBuZXh0TnVtYmVySW5jcmVtZW50OiBudW1iZXIgfTtcclxuXHJcbiAgc3RhdGljIFN0cmluZyA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXHJcbiAgICBwYXJzZTogY29lcmNlVG9TdHJpbmcsXHJcbiAgICBmbXRPRGF0YTogZm10U3RyaW5nLFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dFN0cmluZ1xyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgSW50NjQgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNJbnRlZ2VyOiB0cnVlLFxyXG4gICAgcXVvdGVKc29uT0RhdGE6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogbWFrZUZsb2F0Rm10KFwiTFwiKSxcclxuICAgIGdldE5leHQ6IGdldE5leHROdW1iZXJcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIEludDMyID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIGlzSW50ZWdlcjogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0ludCxcclxuICAgIGZtdE9EYXRhOiBmbXRJbnQsXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBJbnQxNiA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50LFxyXG4gICAgZ2V0TmV4dDogZ2V0TmV4dE51bWJlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgQnl0ZSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IDAsXHJcbiAgICBpc051bWVyaWM6IHRydWUsXHJcbiAgICBpc0ludGVnZXI6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9JbnQsXHJcbiAgICBmbXRPRGF0YTogZm10SW50XHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEZWNpbWFsID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogMCxcclxuICAgIGlzTnVtZXJpYzogdHJ1ZSxcclxuICAgIHF1b3RlSnNvbk9EYXRhOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcIm1cIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEb3VibGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcImRcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBTaW5nbGUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiAwLFxyXG4gICAgaXNOdW1lcmljOiB0cnVlLFxyXG4gICAgaXNGbG9hdDogdHJ1ZSxcclxuICAgIHBhcnNlOiBjb2VyY2VUb0Zsb2F0LFxyXG4gICAgZm10T0RhdGE6IG1ha2VGbG9hdEZtdChcImZcIiksXHJcbiAgICBnZXROZXh0OiBnZXROZXh0TnVtYmVyXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBEYXRlT25seSA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKDE5MDAsIDAsIDEpLFxyXG4gICAgaXNEYXRlOiB0cnVlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvRGF0ZU9ubHksXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0RhdGVPbmx5LFxyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAodmFsdWU6IGFueSkgeyByZXR1cm4gdmFsdWUgJiYgdmFsdWUuZ2V0VGltZSAmJiAobmV3IERhdGUodmFsdWUuZ2V0WWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpKS5nZXRUaW1lKCk7IH0sIC8vIGRhdGVzIGRvbid0IHBlcmZvcm0gZXF1YWxpdHkgY29tcGFyaXNvbnMgcHJvcGVybHlcclxuICAgIGZtdE9EYXRhOiBmbXREYXRlT25seSxcclxuICAgIGdldE5leHQ6IGdldE5leHREYXRlVGltZSxcclxuICAgIGdldENvbmN1cnJlbmN5VmFsdWU6IGdldENvbmN1cnJlbmN5RGF0ZVRpbWVcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIERhdGVUaW1lID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogbmV3IERhdGUoMTkwMCwgMCwgMSksXHJcbiAgICBpc0RhdGU6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9EYXRlLFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogcGFyc2VSYXdEYXRlLFxyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAodmFsdWU6IGFueSkgeyByZXR1cm4gdmFsdWUgJiYgdmFsdWUuZ2V0VGltZSAmJiB2YWx1ZS5nZXRUaW1lKCk7IH0sIC8vIGRhdGVzIGRvbid0IHBlcmZvcm0gZXF1YWxpdHkgY29tcGFyaXNvbnMgcHJvcGVybHlcclxuICAgIGZtdE9EYXRhOiBmbXREYXRlVGltZSxcclxuICAgIGdldE5leHQ6IGdldE5leHREYXRlVGltZSxcclxuICAgIGdldENvbmN1cnJlbmN5VmFsdWU6IGdldENvbmN1cnJlbmN5RGF0ZVRpbWVcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIERhdGVUaW1lT2Zmc2V0ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogbmV3IERhdGUoMTkwMCwgMCwgMSksXHJcbiAgICBpc0RhdGU6IHRydWUsXHJcbiAgICBwYXJzZTogY29lcmNlVG9EYXRlLFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogcGFyc2VSYXdEYXRlLFxyXG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAodmFsdWU6IGFueSkgeyByZXR1cm4gdmFsdWUgJiYgdmFsdWUuZ2V0VGltZSAmJiB2YWx1ZS5nZXRUaW1lKCk7IH0sIC8vIGRhdGVzIGRvbid0IHBlcmZvcm0gZXF1YWxpdHkgY29tcGFyaXNvbnMgcHJvcGVybHlcclxuICAgIGZtdE9EYXRhOiBmbXREYXRlVGltZU9mZnNldCxcclxuICAgIGdldE5leHQ6IGdldE5leHREYXRlVGltZSxcclxuICAgIGdldENvbmN1cnJlbmN5VmFsdWU6IGdldENvbmN1cnJlbmN5RGF0ZVRpbWVcclxuICB9KTtcclxuXHJcbiAgc3RhdGljIFRpbWUgPSBuZXcgRGF0YVR5cGUoe1xyXG4gICAgZGVmYXVsdFZhbHVlOiBcIlBUMFNcIixcclxuICAgIGZtdE9EYXRhOiBmbXRUaW1lLFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogRGF0YVR5cGUucGFyc2VUaW1lRnJvbVNlcnZlclxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgQm9vbGVhbiA9IG5ldyBEYXRhVHlwZSh7XHJcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxyXG4gICAgcGFyc2U6IGNvZXJjZVRvQm9vbCxcclxuICAgIGZtdE9EYXRhOiBmbXRCb29sZWFuXHJcbiAgfSk7XHJcblxyXG4gIHN0YXRpYyBHdWlkID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcclxuICAgIHBhcnNlOiBjb2VyY2VUb0d1aWQsXHJcbiAgICBmbXRPRGF0YTogZm10R3VpZCxcclxuICAgIGdldE5leHQ6IGdldE5leHRHdWlkLFxyXG4gICAgcGFyc2VSYXdWYWx1ZTogZnVuY3Rpb24gKHZhbDogc3RyaW5nKSB7IHJldHVybiB2YWwudG9Mb3dlckNhc2UoKTsgfSxcclxuICAgIGdldENvbmN1cnJlbmN5VmFsdWU6IGNvcmUuZ2V0VXVpZFxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgQmluYXJ5ID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcclxuICAgIGZtdE9EYXRhOiBmbXRCaW5hcnksXHJcbiAgICBwYXJzZVJhd1ZhbHVlOiBwYXJzZVJhd0JpbmFyeVxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgVW5kZWZpbmVkID0gbmV3IERhdGFUeXBlKHtcclxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxyXG4gICAgZm10T0RhdGE6IGZtdFVuZGVmaW5lZFxyXG4gIH0pO1xyXG5cclxuICBzdGF0aWMgZ2V0Q29tcGFyYWJsZUZuKGRhdGFUeXBlPzogRGF0YVR5cGUpIHtcclxuICAgIGlmIChkYXRhVHlwZSAmJiBkYXRhVHlwZS5ub3JtYWxpemUpIHtcclxuICAgICAgcmV0dXJuIGRhdGFUeXBlLm5vcm1hbGl6ZTtcclxuICAgIH0gZWxzZSBpZiAoZGF0YVR5cGUgPT09IERhdGFUeXBlLlRpbWUpIHtcclxuICAgICAgLy8gZHVyYXRpb25zIG11c3QgYmUgY29udmVydGVkIHRvIGNvbXBhcmUgdGhlbVxyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgJiYgY29yZS5kdXJhdGlvblRvU2Vjb25kcyh2YWx1ZSk7XHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUT0RPOiBfX2lkZW50aXR5XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBEYXRhVHlwZSBmb3IgYSBzcGVjaWZpZWQgRURNIHR5cGUgbmFtZS5cclxuICAqKi9cclxuICBzdGF0aWMgZnJvbUVkbURhdGFUeXBlKHR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBkdDogRGF0YVR5cGUgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQgcGFydHMgPSB0eXBlTmFtZS5zcGxpdChcIi5cIik7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgc2ltcGxlTmFtZSA9IHBhcnRzWzFdO1xyXG4gICAgICBpZiAoc2ltcGxlTmFtZSA9PT0gXCJpbWFnZVwiKSB7XHJcbiAgICAgICAgLy8gaGFja1xyXG4gICAgICAgIGR0ID0gRGF0YVR5cGUuQnl0ZTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICBkdCA9IERhdGFUeXBlLmZyb21OYW1lKHNpbXBsZU5hbWUpIHx8IERhdGFUeXBlLlVuZGVmaW5lZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBlbnVtXHJcbiAgICAgICAgLy8gZHQgPSBEYXRhVHlwZS5JbnQzMjtcclxuICAgICAgICBkdCA9IERhdGFUeXBlLlN0cmluZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkdDtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm5zIHRoZSBEYXRhVHlwZSBmb3IgYSBzcGVjaWZpZWQgaW5wdXQuICovXHJcbiAgc3RhdGljIGZyb21WYWx1ZSh2YWw6IGFueSkge1xyXG4gICAgaWYgKGNvcmUuaXNEYXRlKHZhbCkpIHJldHVybiBEYXRhVHlwZS5EYXRlVGltZTtcclxuICAgIHN3aXRjaCAodHlwZW9mIHZhbCkge1xyXG4gICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgaWYgKGNvcmUuaXNHdWlkKHZhbCkpIHJldHVybiBEYXRhVHlwZS5HdWlkO1xyXG4gICAgICAgIC8vIHRoZSA+MyBiZWxvdyBpcyBhIGhhY2sgdG8gaW5zdXJlIHRoYXQgaWYgd2UgYXJlIGluZmVycmluZyBkYXRhdHlwZXMgdGhhdFxyXG4gICAgICAgIC8vIHZlcnkgc2hvcnQgc3RyaW5ncyB0aGF0IGFyZSB2YWxpZCBidXQgdW5saWtlbHkgSVNPIGVuY29kZWQgVGltZSdzIGFyZSB0cmVhdGVkIGFzIHN0cmluZ3MgaW5zdGVhZC5cclxuICAgICAgICBlbHNlIGlmIChjb3JlLmlzRHVyYXRpb24odmFsKSAmJiB2YWwubGVuZ3RoID4gMykgcmV0dXJuIERhdGFUeXBlLlRpbWU7XHJcbiAgICAgICAgZWxzZSBpZiAoY29yZS5pc0RhdGVTdHJpbmcodmFsKSkgcmV0dXJuIERhdGFUeXBlLkRhdGVUaW1lO1xyXG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5TdHJpbmc7XHJcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLkJvb2xlYW47XHJcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICByZXR1cm4gRGF0YVR5cGUuRG91YmxlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIERhdGFUeXBlLlVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXJzZVRpbWVGcm9tU2VydmVyKHNvdXJjZTogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHNvdXJjZTtcclxuICAgIH1cclxuICAgIC8vIE9EQVRBIHYzIGZvcm1hdFxyXG4gICAgaWYgKHNvdXJjZSAmJiBzb3VyY2UuX19lZG1UeXBlID09PSAnRWRtLlRpbWUnKSB7XHJcbiAgICAgIGxldCBzZWNvbmRzID0gTWF0aC5mbG9vcihzb3VyY2UubXMgLyAxMDAwKTtcclxuICAgICAgcmV0dXJuICdQVCcgKyBzZWNvbmRzICsgJ1MnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNvdXJjZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXJzZURhdGVBc1VUQyhzb3VyY2U6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIC8vIGNvbnZlcnQgdG8gVVRDIHN0cmluZyBpZiBubyB0aW1lIHpvbmUgc3BlY2lmaWVyLlxyXG4gICAgICBsZXQgaXNMb2NhbFRpbWUgPSBfbG9jYWxUaW1lUmVnZXgudGVzdChzb3VyY2UpO1xyXG4gICAgICAvLyB2YXIgaXNMb2NhbFRpbWUgPSAhaGFzVGltZVpvbmUoc291cmNlKTtcclxuICAgICAgc291cmNlID0gaXNMb2NhbFRpbWUgPyBzb3VyY2UgKyAnWicgOiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBzb3VyY2UgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKHNvdXJjZSkpO1xyXG4gICAgcmV0dXJuIHNvdXJjZTtcclxuICB9XHJcblxyXG4gIC8qKiBQYXJzZSBhcyBVVEMgdGhlbiBzaGlmdCB0byBsb2NhbCB0aW1lICovXHJcbiAgc3RhdGljIHBhcnNlRGF0ZUFzTG9jYWwoc291cmNlOiBzdHJpbmcpIHtcclxuICAgIHZhciBkdCA9IERhdGFUeXBlLnBhcnNlRGF0ZUFzVVRDKHNvdXJjZSk7XHJcbiAgICBpZiAoY29yZS5pc0RhdGUoZHQpKSB7XHJcbiAgICAgICAgZHQgPSBuZXcgRGF0ZShkdC5nZXRUaW1lKCkgKyBkdC5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkdDtcclxuICB9O1xyXG5cclxuICAvKiogaWYgdmFsIGlzIGEgRGF0ZSwgcmV0dXJuIGEgZGF0ZS1vbmx5IHN0cmluZyBlLmcuICcyMDIzLTEyLTMxJyAqL1xyXG4gIHN0YXRpYyB0b0RhdGVPbmx5U3RyaW5nKHZhbDogYW55KSB7XHJcbiAgICAvLyBEYXRlT25seSB0eXBlcyBzaG91bGQgbm90IGhhdmUgdGltZSBjb21wb25lbnQsIGJ1dCBKU09OLnN0cmluZ2lmeSBtYWtlcyBhIGZ1bGwgSVNPIHN0cmluZy5cclxuICAgIC8vIFdlIGNvbnZlcnQgaXQgdG8gc3RyaW5nIGhlcmUgdG8gcHJldmVudCB0aGF0LCBhbmQgc2hpZnQgdGhlIHRpbWUgem9uZSBiZWNhdXNlIHRvSVNPU3RyaW5nIGNvbnZlcnRzIHRvIFVUQy5cclxuICAgIHJldHVybiB2YWwgJiYgdmFsLmdldFRpbWUgJiYgbmV3IERhdGUodmFsLmdldFRpbWUoKSAtIHZhbC5nZXRUaW1lem9uZU9mZnNldCgpKjYwMDAwKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkgfHwgdmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybnMgYSByYXcgdmFsdWUgY29udmVydGVkIHRvIHRoZSBzcGVjaWZpZWQgRGF0YVR5cGUgKi9cclxuICBzdGF0aWMgcGFyc2VSYXdWYWx1ZSh2YWw6IGFueSwgZGF0YVR5cGU/OiBEYXRhVHlwZSkge1xyXG4gICAgLy8gdW5kZWZpbmVkIHZhbHVlcyB3aWxsIGJlIHRoZSBkZWZhdWx0IGZvciBtb3N0IHVubWFwcGVkIHByb3BlcnRpZXMgRVhDRVBUIHdoZW4gdGhleSBhcmUgc2V0XHJcbiAgICAvLyBpbiBhIGpzb25SZXN1bHRzQWRhcHRlciAoIGFuIHVudXN1YWwgdXNlIGNhc2UpLlxyXG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKCF2YWwpIHJldHVybiB2YWw7XHJcbiAgICBpZiAoZGF0YVR5cGUgJiYgZGF0YVR5cGUucGFyc2VSYXdWYWx1ZSkge1xyXG4gICAgICB2YWwgPSBkYXRhVHlwZS5wYXJzZVJhd1ZhbHVlKHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb247IHZpc2libGUgb24gaW5zdGFuY2UgZm9yIHRlc3RpbmcgcHVycG9zZXMuXHJcbiAgc3RhdGljIF9yZXNldENvbnN0YW50cygpIHtcclxuICAgIERhdGFUeXBlLmNvbnN0YW50cyA9IHtcclxuICAgICAgc3RyaW5nUHJlZml4OiBcIktfXCIsXHJcbiAgICAgIG5leHROdW1iZXI6IC0xLFxyXG4gICAgICBuZXh0TnVtYmVySW5jcmVtZW50OiAtMVxyXG4gICAgfTtcclxuICB9XHJcblxyXG59XHJcbkRhdGFUeXBlLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJEYXRhVHlwZVwiO1xyXG5FcnJvclsneCddID0gRGF0YVR5cGUuX3Jlc2V0Q29uc3RhbnRzKCk7XHJcbkVycm9yWyd4J10gPSBEYXRhVHlwZS5yZXNvbHZlU3ltYm9scygpO1xyXG5FcnJvclsneCddID0gRGF0YVR5cGUuZ2V0U3ltYm9scygpLmZvckVhY2goKHN5bTogRGF0YVR5cGUpID0+IHN5bS52YWxpZGF0b3JDdG9yID0gZ2V0VmFsaWRhdG9yQ3RvcihzeW0pKTtcclxuXHJcbi8vIHByaXZhdGUgZnVuY3Rpb25zO1xyXG5cclxuXHJcbmZ1bmN0aW9uIGdldFZhbGlkYXRvckN0b3IoZGF0YVR5cGU6IERhdGFUeXBlKSB7XHJcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xyXG4gICAgY2FzZSBEYXRhVHlwZS5TdHJpbmc6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3Iuc3RyaW5nO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5JbnQ2NDpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5pbnQ2NDtcclxuICAgIGNhc2UgRGF0YVR5cGUuSW50MzI6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuaW50MzI7XHJcbiAgICBjYXNlIERhdGFUeXBlLkludDE2OlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmludDE2O1xyXG4gICAgY2FzZSBEYXRhVHlwZS5EZWNpbWFsOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm51bWJlcjtcclxuICAgIGNhc2UgRGF0YVR5cGUuRG91YmxlOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm51bWJlcjtcclxuICAgIGNhc2UgRGF0YVR5cGUuU2luZ2xlOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLm51bWJlcjtcclxuICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZGF0ZTtcclxuICAgIGNhc2UgRGF0YVR5cGUuRGF0ZVRpbWVPZmZzZXQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuZGF0ZTtcclxuICAgIGNhc2UgRGF0YVR5cGUuQm9vbGVhbjpcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ib29sO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5HdWlkOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmd1aWQ7XHJcbiAgICBjYXNlIERhdGFUeXBlLkJ5dGU6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3IuYnl0ZTtcclxuICAgIGNhc2UgRGF0YVR5cGUuQmluYXJ5OlxyXG4gICAgICAvLyBUT0RPOiBkb24ndCBxdWl0ZSBrbm93IGhvdyB0byB2YWxpZGF0ZSB0aGlzIHlldC5cclxuICAgICAgcmV0dXJuIFZhbGlkYXRvci5ub25lO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5UaW1lOlxyXG4gICAgICByZXR1cm4gVmFsaWRhdG9yLmR1cmF0aW9uO1xyXG4gICAgY2FzZSBEYXRhVHlwZS5VbmRlZmluZWQ6XHJcbiAgICAgIHJldHVybiBWYWxpZGF0b3Iubm9uZTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE5leHRTdHJpbmcoKSB7XHJcbiAgcmV0dXJuIERhdGFUeXBlLmNvbnN0YW50cy5zdHJpbmdQcmVmaXggKyBnZXROZXh0TnVtYmVyKCkudG9TdHJpbmcoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dE51bWJlcigpIHtcclxuICBsZXQgcmVzdWx0ID0gRGF0YVR5cGUuY29uc3RhbnRzLm5leHROdW1iZXI7XHJcbiAgRGF0YVR5cGUuY29uc3RhbnRzLm5leHROdW1iZXIgKz0gRGF0YVR5cGUuY29uc3RhbnRzLm5leHROdW1iZXJJbmNyZW1lbnQ7XHJcbiAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0TmV4dEd1aWQoKSB7XHJcbiAgcmV0dXJuIGNvcmUuZ2V0VXVpZCgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROZXh0RGF0ZVRpbWUoKSB7XHJcbiAgcmV0dXJuIG5ldyBEYXRlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldENvbmN1cnJlbmN5RGF0ZVRpbWUodmFsOiBhbnkpIHtcclxuICAvLyB1c2UgdGhlIGN1cnJlbnQgZGF0ZXRpbWUgYnV0IGluc3VyZSB0aGF0IGl0IGlzIGRpZmZlcmVudCBmcm9tIHByZXZpb3VzIGNhbGwuXHJcbiAgbGV0IGR0ID0gbmV3IERhdGUoKTtcclxuICBsZXQgZHQyID0gbmV3IERhdGUoKTtcclxuICB3aGlsZSAoZHQuZ2V0VGltZSgpID09PSBkdDIuZ2V0VGltZSgpKSB7XHJcbiAgICBkdDIgPSBuZXcgRGF0ZSgpO1xyXG4gIH1cclxuICByZXR1cm4gZHQyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb1N0cmluZyhzb3VyY2U6IGFueSwgc291cmNlVHlwZU5hbWU/OiBzdHJpbmcpIHtcclxuICByZXR1cm4gKHNvdXJjZSA9PSBudWxsKSA/IHNvdXJjZSA6IHNvdXJjZS50b1N0cmluZygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0d1aWQoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIHJldHVybiBzb3VyY2UudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvZXJjZVRvSW50KHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICBsZXQgc3JjID0gc291cmNlLnRyaW0oKTtcclxuICAgIGlmIChzcmMgPT09IFwiXCIpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHZhbCA9IHBhcnNlSW50KHNyYywgMTApO1xyXG4gICAgcmV0dXJuIGlzTmFOKHZhbCkgPyBzb3VyY2UgOiB2YWw7XHJcbiAgfSBlbHNlIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoc291cmNlKTtcclxuICB9XHJcbiAgLy8gZG8gd2Ugd2FudCB0byBjb2VyY2UgZmxvYXRzIC0+IGludHNcclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0Zsb2F0KHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICBsZXQgc3JjID0gc291cmNlLnRyaW0oKTtcclxuICAgIGlmIChzcmMgPT09IFwiXCIpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHZhbCA9IHBhcnNlRmxvYXQoc3JjKTtcclxuICAgIHJldHVybiBpc05hTih2YWwpID8gc291cmNlIDogdmFsO1xyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0RhdGUoc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBsZXQgdmFsOiBhbnk7XHJcbiAgaWYgKHNvdXJjZVR5cGVOYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICBsZXQgc3JjID0gc291cmNlLnRyaW0oKTtcclxuICAgIGlmIChzcmMgPT09IFwiXCIpIHJldHVybiBudWxsO1xyXG4gICAgdmFsID0gbmV3IERhdGUoRGF0ZS5wYXJzZShzcmMpKTtcclxuICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2YWwpID8gdmFsIDogc291cmNlO1xyXG4gIH0gZWxzZSBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgIHZhbCA9IG5ldyBEYXRlKHNvdXJjZSk7XHJcbiAgICByZXR1cm4gY29yZS5pc0RhdGUodmFsKSA/IHZhbCA6IHNvdXJjZTtcclxuICB9XHJcbiAgcmV0dXJuIHNvdXJjZTtcclxufVxyXG5cclxuLyoqIFRyaW0gb2ZmIHRpbWUgcG9ydGlvbiBiZWZvcmUgcGFyc2UgaWYgc291cmNlIGlzIHN0cmluZyAqL1xyXG5mdW5jdGlvbiBjb2VyY2VUb0RhdGVPbmx5KHNvdXJjZTogYW55LCBzb3VyY2VUeXBlTmFtZTogc3RyaW5nKSB7XHJcbiAgbGV0IHZhbDogYW55O1xyXG4gIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgbGV0IHNyYyA9IHNvdXJjZS50cmltKCkgYXMgc3RyaW5nO1xyXG4gICAgdmFsID0gRGF0YVR5cGUucGFyc2VEYXRlQXNMb2NhbCh2YWwpO1xyXG4gICAgcmV0dXJuIGNvcmUuaXNEYXRlKHZhbCkgPyB2YWwgOiBzb3VyY2U7XHJcbiAgfSBlbHNlIGlmIChzb3VyY2VUeXBlTmFtZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgdmFsID0gbmV3IERhdGUoc291cmNlKTtcclxuICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2YWwpID8gdmFsIDogc291cmNlO1xyXG4gIH1cclxuICByZXR1cm4gc291cmNlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb2VyY2VUb0Jvb2woc291cmNlOiBhbnksIHNvdXJjZVR5cGVOYW1lOiBzdHJpbmcpIHtcclxuICBpZiAoc291cmNlVHlwZU5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgIGxldCBzcmMgPSBzb3VyY2UudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoc3JjID09PSBcImZhbHNlXCIgfHwgc3JjID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoc3JjID09PSBcInRydWVcIikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBzb3VyY2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzb3VyY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdFN0cmluZyh2YWw6IGFueSkge1xyXG4gIHJldHVybiB2YWwgPT0gbnVsbCA/IG51bGwgOiBcIidcIiArIHZhbC5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcclxufVxyXG5cclxuZnVuY3Rpb24gZm10SW50KHZhbDogYW55KSB7XHJcbiAgcmV0dXJuIHZhbCA9PSBudWxsID8gbnVsbCA6ICgodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikgPyBwYXJzZUludCh2YWwsIDEwKSA6IHZhbCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VGbG9hdEZtdChmbXRTdWZmaXg6IHN0cmluZykge1xyXG4gIHJldHVybiBmdW5jdGlvbiAodmFsOiBhbnkpIHtcclxuICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICB2YWwgPSBwYXJzZUZsb2F0KHZhbCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsICsgZm10U3VmZml4O1xyXG4gIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdERhdGVUaW1lKHZhbDogRGF0ZSkge1xyXG4gIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBcImRhdGV0aW1lJ1wiICsgdmFsLnRvSVNPU3RyaW5nKCkgKyBcIidcIjtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBkYXRlVGltZVwiLCB2YWwpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10RGF0ZU9ubHkodmFsOiBEYXRlKSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZSdcIiArIHZhbC50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAxMCkgKyBcIidcIjtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBkYXRlVGltZVwiLCB2YWwpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10RGF0ZVRpbWVPZmZzZXQodmFsOiBEYXRlKSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIFwiZGF0ZXRpbWVvZmZzZXQnXCIgKyB2YWwudG9JU09TdHJpbmcoKSArIFwiJ1wiO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHRocm93RXJyb3IoXCInJTEnIGlzIG5vdCBhIHZhbGlkIGRhdGVUaW1lXCIsIHZhbCk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBmbXRUaW1lKHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICBpZiAoIWNvcmUuaXNEdXJhdGlvbih2YWwpKSB7XHJcbiAgICB0aHJvd0Vycm9yKFwiJyUxJyBpcyBub3QgYSB2YWxpZCBJU08gODYwMSBkdXJhdGlvblwiLCB2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gXCJ0aW1lJ1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEd1aWQodmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICghY29yZS5pc0d1aWQodmFsKSkge1xyXG4gICAgdGhyb3dFcnJvcihcIiclMScgaXMgbm90IGEgdmFsaWQgZ3VpZFwiLCB2YWwpO1xyXG4gIH1cclxuICByZXR1cm4gXCJndWlkJ1wiICsgdmFsICsgXCInXCI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZtdEJvb2xlYW4odmFsOiBhbnkpIHtcclxuICBpZiAodmFsID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gIGlmICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICByZXR1cm4gdmFsLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIjtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICEhdmFsO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm10QmluYXJ5KHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gdmFsO1xyXG4gIHJldHVybiBcImJpbmFyeSdcIiArIHZhbCArIFwiJ1wiO1xyXG59XHJcblxyXG4vLyBUT0RPOiB1c2UgX19pZGVudGl0eSBpbnN0ZWFkO1xyXG5mdW5jdGlvbiBmbXRVbmRlZmluZWQodmFsOiBhbnkpIHtcclxuICByZXR1cm4gdmFsO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0aHJvd0Vycm9yKG1zZzogc3RyaW5nLCB2YWw6IGFueSkge1xyXG4gIG1zZyA9IGNvcmUuZm9ybWF0U3RyaW5nKG1zZywgdmFsKTtcclxuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VSYXdEYXRlKHZhbDogYW55KSB7XHJcbiAgaWYgKCFjb3JlLmlzRGF0ZSh2YWwpKSB7XHJcbiAgICB2YWwgPSBEYXRhVHlwZS5wYXJzZURhdGVGcm9tU2VydmVyKHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8qKiBUcmltIG9mZiB0aW1lIHBvcnRpb24gYmVmb3JlIHBhcnNlICovXHJcbmZ1bmN0aW9uIHBhcnNlUmF3RGF0ZU9ubHkodmFsOiBhbnkpIHtcclxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmICh2YWwubGVuZ3RoID4gMTApIHtcclxuICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygwLCAxMCk7XHJcbiAgICB9XHJcbiAgICB2YWwgPSBEYXRhVHlwZS5wYXJzZURhdGVBc0xvY2FsKHZhbCk7XHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlUmF3QmluYXJ5KHZhbDogYW55KSB7XHJcbiAgaWYgKHZhbCAmJiB2YWwuJHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgIHZhbCA9IHZhbC4kdmFsdWU7IC8vIHRoaXMgd2lsbCBiZSBhIGJ5dGVbXSBlbmNvZGVkIGFzIGEgc3RyaW5nXHJcbiAgfVxyXG4gIHJldHVybiB2YWw7XHJcbn1cclxuXHJcbi8vZnVuY3Rpb24gaGFzVGltZVpvbmUoc291cmNlKSB7XHJcbi8vICB2YXIgaXggPSBzb3VyY2UuaW5kZXhPZihcIlRcIik7XHJcbi8vICB2YXIgdGltZVBhcnQgPSBzb3VyY2Uuc3Vic3RyaW5nKGl4KzEpO1xyXG4vLyAgcmV0dXJuICB0aW1lUGFydC5pbmRleE9mKFwiLVwiKSA+PSAwIHx8IHRpbWVQYXJ0LmluZGV4T2YoXCIrXCIpID49IDAgfHwgdGltZVBhcnQuaW5kZXhPZihcIlpcIik7XHJcbi8vfVxyXG4iXX0=
@@ -49,4 +49,4 @@ var EntityAction = /** @class */ (function (_super) {
49
49
  export { EntityAction };
50
50
  EntityAction.prototype._$typeName = "EntityAction";
51
51
  Error['x'] = EntityAction.resolveSymbols();
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQzs7RUFFRTtBQUVGO0lBQWtDLGdDQUFVO0lBQTVDOztJQW1EQSxDQUFDO0lBWkMsZ0ZBQWdGO0lBQ2hGLCtCQUFRLEdBQVI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxxREFBcUQ7SUFDckQsK0JBQVEsR0FBUjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELHFIQUFxSDtJQUNySCxxQ0FBYyxHQUFkO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBaERELG9EQUFvRDtJQUM3QyxtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsbURBQW1EO0lBQzVDLDBCQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM1RCxxREFBcUQ7SUFDOUMsMkJBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRTdELDBCQUEwQjtJQUNuQixtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkQsbUVBQW1FO0lBQzVELHlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxxRUFBcUU7SUFDOUQsMEJBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLGlFQUFpRTtJQUMxRCx3QkFBVyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsNENBQTRDO0lBQ3JDLDJCQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUVuRSxpREFBaUQ7SUFDMUMsOEJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU5Qyx3RkFBd0Y7SUFDakYsMEJBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFDLDhDQUE4QztJQUN2QywwQkFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFbEUsNkRBQTZEO0lBQ3RELGtCQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQW9CdEQsbUJBQUM7Q0FBQSxBQW5ERCxDQUFrQyxVQUFVLEdBbUQzQztTQW5EWSxZQUFZO0FBb0R6QixZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcblxyXG4vKiogRW50aXR5QWN0aW9uIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFsaWQgYWN0aW9ucyB0aGF0IGNhbiBvY2N1ciB0byBhbiAnRW50aXR5Jy4gXHJcbiBcclxuKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlBY3Rpb24gZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgYXR0YWNoZWQgdmlhIGFuIEF0dGFjaEVudGl0eSBjYWxsLiAqL1xyXG4gIHN0YXRpYyBBdHRhY2ggPSBuZXcgRW50aXR5QWN0aW9uKCB7IF9pc0F0dGFjaDogdHJ1ZSB9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgQXR0YWNoT25RdWVyeSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYW4gaW1wb3J0LiAqL1xyXG4gIHN0YXRpYyBBdHRhY2hPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgZGV0YWNoZWQgKi9cclxuICBzdGF0aWMgRGV0YWNoID0gbmV3IEVudGl0eUFjdGlvbiggeyBfaXNEZXRhY2g6IHRydWUgfSk7XHJcblxyXG4gIC8qKiBQcm9wZXJ0aWVzIG9uIHRoZSBlbnRpdHkgd2VyZSBtZXJnZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgTWVyZ2VPblF1ZXJ5ID0gbmV3IEVudGl0eUFjdGlvbih7IF9pc01vZGlmaWNhdGlvbjogdHJ1ZSB9KTtcclxuICAvKiogUHJvcGVydGllcyBvbiB0aGUgZW50aXR5IHdlcmUgbWVyZ2VkIGFzIGEgcmVzdWx0IG9mIGFuIGltcG9ydC4gKi9cclxuICBzdGF0aWMgTWVyZ2VPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWUgfSk7XHJcbiAgLyoqIFByb3BlcnRpZXMgb24gdGhlIGVudGl0eSB3ZXJlIG1lcmdlZCBhcyBhIHJlc3VsdCBvZiBhIHNhdmUgKi9cclxuICBzdGF0aWMgTWVyZ2VPblNhdmUgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlIH0pO1xyXG5cclxuICAvKiogQSBwcm9wZXJ0eSBvbiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBQcm9wZXJ0eUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlTdGF0ZSBvZiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBFbnRpdHlTdGF0ZUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oKTtcclxuXHJcbiAgLyoqIEFjY2VwdENoYW5nZXMgd2FzIGNhbGxlZCBvbiB0aGUgZW50aXR5LCBvciBpdHMgZW50aXR5U3RhdGUgd2FzIHNldCB0byBVbm1vZGlmaWVkLiAqL1xyXG4gIHN0YXRpYyBBY2NlcHRDaGFuZ2VzID0gbmV3IEVudGl0eUFjdGlvbigpO1xyXG4gIC8qKiBSZWplY3RDaGFuZ2VzIHdhcyBjYWxsZWQgb24gdGhlIGVudGl0eS4gKi9cclxuICBzdGF0aWMgUmVqZWN0Q2hhbmdlcyA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlNYW5hZ2VyIHdhcyBjbGVhcmVkLiAgQWxsIGVudGl0aWVzIGRldGFjaGVkLiAqL1xyXG4gIHN0YXRpYyBDbGVhciA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNEZXRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2lzQXR0YWNoPzogYm9vbGVhbjtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfaXNEZXRhY2g/OiBib29sZWFuO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9pc01vZGlmaWNhdGlvbjogYm9vbGVhbjtcclxuICAvKiogSXMgdGhpcyBhbiAnYXR0YWNoJyBvcGVyYXRpb24/ICggQXR0YWNoLCBBdHRhY2hPblF1ZXJ5IG9yIEF0dGFjaE9uSW1wb3J0KSAqL1xyXG4gIGlzQXR0YWNoKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNBdHRhY2g7XHJcbiAgfVxyXG4gIC8qKiBJcyB0aGlzIGEgJ2RldGFjaCcgb3BlcmF0aW9uPyAoIERldGFjaCwgQ2xlYXIpICovXHJcbiAgaXNEZXRhY2goKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc0RldGFjaDtcclxuICB9XHJcbiAgLyoqIElzIHRoaXMgYSAnbW9kaWZpY2F0aW9uJyBvcGVyYXRpb24/ICggUHJvcGVydHlDaGFuZ2UsIE1lcmdlT25RdWVyeSwgTWVyZ2VPblNhdmUsIE1lcmdlT25JbXBvcnQsIFJlamVjdENoYW5nZXMpICovXHJcbiAgaXNNb2RpZmljYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc01vZGlmaWNhdGlvbjtcclxuICB9XHJcbn1cclxuRW50aXR5QWN0aW9uLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJFbnRpdHlBY3Rpb25cIjtcclxuRXJyb3JbJ3gnXSA9IEVudGl0eUFjdGlvbi5yZXNvbHZlU3ltYm9scygpO1xyXG5cclxuXHJcblxyXG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWFjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVuQzs7RUFFRTtBQUVGO0lBQWtDLGdDQUFVO0lBQTVDOztJQW1EQSxDQUFDO0lBWkMsZ0ZBQWdGO0lBQ2hGLCtCQUFRLEdBQVI7UUFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFDRCxxREFBcUQ7SUFDckQsK0JBQVEsR0FBUjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUNELHFIQUFxSDtJQUNySCxxQ0FBYyxHQUFkO1FBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBaERELG9EQUFvRDtJQUM3QyxtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkQsbURBQW1EO0lBQzVDLDBCQUFhLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUM1RCxxREFBcUQ7SUFDOUMsMkJBQWMsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRTdELDBCQUEwQjtJQUNuQixtQkFBTSxHQUFHLElBQUksWUFBWSxDQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkQsbUVBQW1FO0lBQzVELHlCQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsRSxxRUFBcUU7SUFDOUQsMEJBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLGlFQUFpRTtJQUMxRCx3QkFBVyxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFakUsNENBQTRDO0lBQ3JDLDJCQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQUVuRSxpREFBaUQ7SUFDMUMsOEJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUU5Qyx3RkFBd0Y7SUFDakYsMEJBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzFDLDhDQUE4QztJQUN2QywwQkFBYSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFbEUsNkRBQTZEO0lBQ3RELGtCQUFLLEdBQUcsSUFBSSxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztJQW9CdEQsbUJBQUM7Q0FBQSxBQW5ERCxDQUFrQyxVQUFVLEdBbUQzQztTQW5EWSxZQUFZO0FBb0R6QixZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWV6ZUVudW19IGZyb20gJy4vZW51bSc7XHJcblxyXG4vKiogRW50aXR5QWN0aW9uIGlzIGFuICdFbnVtJyBjb250YWluaW5nIGFsbCBvZiB0aGUgdmFsaWQgYWN0aW9ucyB0aGF0IGNhbiBvY2N1ciB0byBhbiAnRW50aXR5Jy4gXHJcbiBcclxuKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBFbnRpdHlBY3Rpb24gZXh0ZW5kcyBCcmVlemVFbnVtIHtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgYXR0YWNoZWQgdmlhIGFuIEF0dGFjaEVudGl0eSBjYWxsLiAqL1xyXG4gIHN0YXRpYyBBdHRhY2ggPSBuZXcgRW50aXR5QWN0aW9uKCB7IF9pc0F0dGFjaDogdHJ1ZSB9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgQXR0YWNoT25RdWVyeSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuICAvKiogIEVudGl0eSB3YXMgYXR0YWNoZWQgYXMgYSByZXN1bHQgb2YgYW4gaW1wb3J0LiAqL1xyXG4gIHN0YXRpYyBBdHRhY2hPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNBdHRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEVudGl0eSB3YXMgZGV0YWNoZWQgKi9cclxuICBzdGF0aWMgRGV0YWNoID0gbmV3IEVudGl0eUFjdGlvbiggeyBfaXNEZXRhY2g6IHRydWUgfSk7XHJcblxyXG4gIC8qKiBQcm9wZXJ0aWVzIG9uIHRoZSBlbnRpdHkgd2VyZSBtZXJnZWQgYXMgYSByZXN1bHQgb2YgYSBxdWVyeS4gKi9cclxuICBzdGF0aWMgTWVyZ2VPblF1ZXJ5ID0gbmV3IEVudGl0eUFjdGlvbih7IF9pc01vZGlmaWNhdGlvbjogdHJ1ZSB9KTtcclxuICAvKiogUHJvcGVydGllcyBvbiB0aGUgZW50aXR5IHdlcmUgbWVyZ2VkIGFzIGEgcmVzdWx0IG9mIGFuIGltcG9ydC4gKi9cclxuICBzdGF0aWMgTWVyZ2VPbkltcG9ydCA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWUgfSk7XHJcbiAgLyoqIFByb3BlcnRpZXMgb24gdGhlIGVudGl0eSB3ZXJlIG1lcmdlZCBhcyBhIHJlc3VsdCBvZiBhIHNhdmUgKi9cclxuICBzdGF0aWMgTWVyZ2VPblNhdmUgPSBuZXcgRW50aXR5QWN0aW9uKHsgX2lzTW9kaWZpY2F0aW9uOiB0cnVlIH0pO1xyXG5cclxuICAvKiogQSBwcm9wZXJ0eSBvbiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBQcm9wZXJ0eUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlTdGF0ZSBvZiB0aGUgZW50aXR5IHdhcyBjaGFuZ2VkLiAqL1xyXG4gIHN0YXRpYyBFbnRpdHlTdGF0ZUNoYW5nZSA9IG5ldyBFbnRpdHlBY3Rpb24oKTtcclxuXHJcbiAgLyoqIEFjY2VwdENoYW5nZXMgd2FzIGNhbGxlZCBvbiB0aGUgZW50aXR5LCBvciBpdHMgZW50aXR5U3RhdGUgd2FzIHNldCB0byBVbm1vZGlmaWVkLiAqL1xyXG4gIHN0YXRpYyBBY2NlcHRDaGFuZ2VzID0gbmV3IEVudGl0eUFjdGlvbigpO1xyXG4gIC8qKiBSZWplY3RDaGFuZ2VzIHdhcyBjYWxsZWQgb24gdGhlIGVudGl0eS4gKi9cclxuICBzdGF0aWMgUmVqZWN0Q2hhbmdlcyA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNNb2RpZmljYXRpb246IHRydWV9KTtcclxuXHJcbiAgLyoqIFRoZSBFbnRpdHlNYW5hZ2VyIHdhcyBjbGVhcmVkLiAgQWxsIGVudGl0aWVzIGRldGFjaGVkLiAqL1xyXG4gIHN0YXRpYyBDbGVhciA9IG5ldyBFbnRpdHlBY3Rpb24oeyBfaXNEZXRhY2g6IHRydWV9KTtcclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfaXNBdHRhY2g/OiBib29sZWFuO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIGRlY2xhcmUgX2lzRGV0YWNoPzogYm9vbGVhbjtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF9pc01vZGlmaWNhdGlvbjogYm9vbGVhbjtcclxuICAvKiogSXMgdGhpcyBhbiAnYXR0YWNoJyBvcGVyYXRpb24/ICggQXR0YWNoLCBBdHRhY2hPblF1ZXJ5IG9yIEF0dGFjaE9uSW1wb3J0KSAqL1xyXG4gIGlzQXR0YWNoKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5faXNBdHRhY2g7XHJcbiAgfVxyXG4gIC8qKiBJcyB0aGlzIGEgJ2RldGFjaCcgb3BlcmF0aW9uPyAoIERldGFjaCwgQ2xlYXIpICovXHJcbiAgaXNEZXRhY2goKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc0RldGFjaDtcclxuICB9XHJcbiAgLyoqIElzIHRoaXMgYSAnbW9kaWZpY2F0aW9uJyBvcGVyYXRpb24/ICggUHJvcGVydHlDaGFuZ2UsIE1lcmdlT25RdWVyeSwgTWVyZ2VPblNhdmUsIE1lcmdlT25JbXBvcnQsIFJlamVjdENoYW5nZXMpICovXHJcbiAgaXNNb2RpZmljYXRpb24oKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9pc01vZGlmaWNhdGlvbjtcclxuICB9XHJcbn1cclxuRW50aXR5QWN0aW9uLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJFbnRpdHlBY3Rpb25cIjtcclxuRXJyb3JbJ3gnXSA9IEVudGl0eUFjdGlvbi5yZXNvbHZlU3ltYm9scygpO1xyXG5cclxuXHJcblxyXG4iXX0=