angular-odata 0.95.0 → 0.99.5

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 (81) hide show
  1. package/README.md +31 -25
  2. package/esm2020/lib/cache/cache.mjs +2 -2
  3. package/esm2020/lib/client.mjs +3 -3
  4. package/esm2020/lib/models/collection.mjs +53 -48
  5. package/esm2020/lib/models/model.mjs +33 -37
  6. package/esm2020/lib/models/options.mjs +35 -14
  7. package/esm2020/lib/module.mjs +4 -4
  8. package/esm2020/lib/resources/query/builder.mjs +2 -1
  9. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  10. package/esm2020/lib/resources/query/expressions/compute.mjs +45 -0
  11. package/esm2020/lib/resources/query/expressions/expand.mjs +121 -0
  12. package/esm2020/lib/resources/query/expressions/filter.mjs +160 -0
  13. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  14. package/esm2020/lib/resources/query/expressions/orderby.mjs +62 -0
  15. package/esm2020/lib/resources/query/expressions/search.mjs +125 -0
  16. package/esm2020/lib/resources/query/expressions/select.mjs +37 -0
  17. package/esm2020/lib/resources/query/expressions/syntax.mjs +404 -0
  18. package/esm2020/lib/resources/query/handlers.mjs +22 -20
  19. package/esm2020/lib/resources/query/options.mjs +34 -37
  20. package/esm2020/lib/resources/resource.mjs +6 -14
  21. package/esm2020/lib/resources/types/action.mjs +4 -1
  22. package/esm2020/lib/resources/types/batch.mjs +36 -10
  23. package/esm2020/lib/resources/types/count.mjs +4 -1
  24. package/esm2020/lib/resources/types/entity-set.mjs +4 -1
  25. package/esm2020/lib/resources/types/entity.mjs +6 -3
  26. package/esm2020/lib/resources/types/function.mjs +4 -1
  27. package/esm2020/lib/resources/types/media.mjs +4 -1
  28. package/esm2020/lib/resources/types/metadata.mjs +4 -1
  29. package/esm2020/lib/resources/types/navigation-property.mjs +4 -1
  30. package/esm2020/lib/resources/types/property.mjs +4 -1
  31. package/esm2020/lib/resources/types/reference.mjs +4 -1
  32. package/esm2020/lib/resources/types/singleton.mjs +4 -1
  33. package/esm2020/lib/resources/types/value.mjs +4 -1
  34. package/esm2020/lib/schema/element.mjs +12 -2
  35. package/esm2020/lib/schema/enum-type.mjs +9 -1
  36. package/esm2020/lib/schema/structured-type.mjs +11 -2
  37. package/esm2020/lib/services/entity-set.mjs +6 -6
  38. package/esm2020/lib/services/factory.mjs +3 -3
  39. package/esm2020/lib/types.mjs +2 -1
  40. package/esm2020/lib/utils/objects.mjs +5 -1
  41. package/fesm2015/angular-odata.mjs +751 -297
  42. package/fesm2015/angular-odata.mjs.map +1 -1
  43. package/fesm2020/angular-odata.mjs +750 -301
  44. package/fesm2020/angular-odata.mjs.map +1 -1
  45. package/lib/models/collection.d.ts +4 -2
  46. package/lib/models/model.d.ts +1 -1
  47. package/lib/models/options.d.ts +12 -10
  48. package/lib/resources/query/builder.d.ts +1 -0
  49. package/lib/resources/query/expressions/base.d.ts +20 -0
  50. package/lib/resources/query/expressions/compute.d.ts +27 -0
  51. package/lib/resources/query/expressions/expand.d.ts +68 -0
  52. package/lib/resources/query/expressions/filter.d.ts +59 -0
  53. package/lib/resources/query/expressions/index.d.ts +6 -0
  54. package/lib/resources/query/expressions/orderby.d.ts +39 -0
  55. package/lib/resources/query/expressions/search.d.ts +50 -0
  56. package/lib/resources/query/expressions/select.d.ts +22 -0
  57. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +21 -9
  58. package/lib/resources/query/handlers.d.ts +27 -12
  59. package/lib/resources/query/options.d.ts +10 -8
  60. package/lib/resources/resource.d.ts +2 -1
  61. package/lib/resources/types/action.d.ts +1 -0
  62. package/lib/resources/types/batch.d.ts +10 -0
  63. package/lib/resources/types/count.d.ts +1 -0
  64. package/lib/resources/types/entity-set.d.ts +1 -0
  65. package/lib/resources/types/entity.d.ts +1 -0
  66. package/lib/resources/types/function.d.ts +1 -0
  67. package/lib/resources/types/media.d.ts +1 -0
  68. package/lib/resources/types/metadata.d.ts +1 -0
  69. package/lib/resources/types/navigation-property.d.ts +1 -0
  70. package/lib/resources/types/property.d.ts +1 -0
  71. package/lib/resources/types/reference.d.ts +1 -0
  72. package/lib/resources/types/singleton.d.ts +1 -0
  73. package/lib/resources/types/value.d.ts +1 -0
  74. package/lib/schema/element.d.ts +7 -1
  75. package/lib/schema/enum-type.d.ts +6 -0
  76. package/lib/schema/structured-type.d.ts +7 -1
  77. package/lib/types.d.ts +1 -0
  78. package/package.json +1 -1
  79. package/esm2020/lib/resources/query/expressions.mjs +0 -207
  80. package/esm2020/lib/resources/query/syntax.mjs +0 -406
  81. package/lib/resources/query/expressions.d.ts +0 -63
@@ -18,14 +18,15 @@ export class ODataCollection {
18
18
  if (model === undefined && Klass.model !== null)
19
19
  model = Klass.model;
20
20
  if (model === undefined)
21
- throw new Error('Collection need model');
21
+ throw new Error('Collection: Collection need model');
22
22
  this._model = model;
23
23
  // Parent
24
24
  if (parent !== undefined) {
25
25
  this._parent = parent;
26
26
  }
27
27
  // Resource
28
- resource = (resource || this._model.meta.collectionResourceFactory());
28
+ if (this._parent === null && resource === undefined)
29
+ resource = this._model.meta.collectionResourceFactory();
29
30
  if (resource !== undefined) {
30
31
  this.attach(resource);
31
32
  }
@@ -54,8 +55,8 @@ export class ODataCollection {
54
55
  attach(resource) {
55
56
  if (this._resource !== null &&
56
57
  this._resource.type() !== resource.type() &&
57
- !resource.isSubtypeOf(this._resource))
58
- throw new Error(`Can't reattach ${resource.type()} to ${this._resource.type()}`);
58
+ !this._resource.isSubtypeOf(resource))
59
+ throw new Error(`attach: Can't reattach ${this._resource.type()} to ${resource.type()}`);
59
60
  this._entries.forEach(({ model }) => {
60
61
  const mr = this._model.meta.modelResourceFactory(resource.cloneQuery());
61
62
  model.attach(mr);
@@ -71,14 +72,29 @@ export class ODataCollection {
71
72
  }
72
73
  }
73
74
  asEntitySet(func) {
74
- const parent = this._parent;
75
+ // Build new resource
76
+ const query = this.resource().cloneQuery();
77
+ let resource = this._model.meta.collectionResourceFactory(query);
78
+ if (resource === undefined)
79
+ throw new Error('asEntitySet: Collection does not have associated EntitySet endpoint');
80
+ // Store parent and resource
81
+ const store = { parent: this._parent, resource: this._resource };
82
+ // Replace parent and resource
75
83
  this._parent = null;
84
+ this._resource = resource;
85
+ // Execute
76
86
  const result = func(this);
77
87
  if (result instanceof Observable) {
78
- return result.pipe(finalize(() => (this._parent = parent)));
88
+ return result.pipe(finalize(() => {
89
+ // Restore
90
+ this._parent = store.parent;
91
+ this._resource = store.resource;
92
+ }));
79
93
  }
80
94
  else {
81
- this._parent = parent;
95
+ // Restore
96
+ this._parent = store.parent;
97
+ this._resource = store.resource;
82
98
  return result;
83
99
  }
84
100
  }
@@ -135,26 +151,13 @@ export class ODataCollection {
135
151
  }
136
152
  fetch({ withCount, ...options } = {}) {
137
153
  const resource = this.resource();
138
- if (resource === undefined)
139
- return throwError('fetch: Resource is undefined');
140
- let obs$;
141
- if (resource instanceof ODataEntitySetResource) {
142
- obs$ = resource.fetch({ withCount, ...options });
143
- }
144
- else if (resource instanceof ODataNavigationPropertyResource) {
145
- obs$ = resource.fetch({
146
- responseType: 'entities',
147
- withCount,
148
- ...options,
149
- });
150
- }
151
- else {
152
- obs$ = resource.fetch({
154
+ const obs$ = resource instanceof ODataEntitySetResource
155
+ ? resource.fetch({ withCount, ...options })
156
+ : resource.fetch({
153
157
  responseType: 'entities',
154
158
  withCount,
155
159
  ...options,
156
160
  });
157
- }
158
161
  this.events$.emit(new ODataModelEvent('request', { collection: this, value: obs$ }));
159
162
  return obs$.pipe(map(({ entities, annots }) => {
160
163
  this._annotations = annots;
@@ -165,10 +168,8 @@ export class ODataCollection {
165
168
  }
166
169
  fetchAll(options) {
167
170
  const resource = this.resource();
168
- if (resource === undefined)
169
- return throwError('fetchAll: Resource is undefined');
170
171
  if (resource instanceof ODataPropertyResource)
171
- return throwError('fetchAll: Resource is ODataPropertyResource');
172
+ return throwError(() => new Error('fetchAll: Resource is ODataPropertyResource'));
172
173
  const obs$ = resource.fetchAll(options);
173
174
  this.events$.emit(new ODataModelEvent('request', {
174
175
  collection: this,
@@ -192,10 +193,8 @@ export class ODataCollection {
192
193
  */
193
194
  save({ relModel = false, method, ...options } = {}) {
194
195
  const resource = this.resource();
195
- if (resource === undefined)
196
- return throwError('saveAll: Resource is undefined');
197
196
  if (resource instanceof ODataPropertyResource)
198
- return throwError('fetchAll: Resource is ODataPropertyResource');
197
+ return throwError(() => new Error('save: Resource is ODataPropertyResource'));
199
198
  let toDestroyEntity = [];
200
199
  let toRemoveReference = [];
201
200
  let toDestroyContained = [];
@@ -565,25 +564,25 @@ export class ODataCollection {
565
564
  return func.call(params, { responseType, ...options });
566
565
  }
567
566
  }
568
- return throwError(`Can't function without ODataEntitySetResource`);
567
+ return throwError(() => new Error(`callFunction: Can't function without ODataEntitySetResource`));
569
568
  }
570
569
  callAction(name, params, responseType, { ...options } = {}) {
571
570
  const resource = this.resource();
572
- if (resource instanceof ODataEntitySetResource) {
573
- const action = resource.action(name);
574
- action.query((q) => q.apply(options));
575
- switch (responseType) {
576
- case 'property':
577
- return action.callProperty(params, options);
578
- case 'model':
579
- return action.callModel(params, options);
580
- case 'collection':
581
- return action.callCollection(params, options);
582
- default:
583
- return action.call(params, { responseType, ...options });
584
- }
571
+ if (!(resource instanceof ODataEntitySetResource)) {
572
+ return throwError(() => new Error(`callAction: Can't action without ODataEntitySetResource`));
573
+ }
574
+ const action = resource.action(name);
575
+ action.query((q) => q.apply(options));
576
+ switch (responseType) {
577
+ case 'property':
578
+ return action.callProperty(params, options);
579
+ case 'model':
580
+ return action.callModel(params, options);
581
+ case 'collection':
582
+ return action.callCollection(params, options);
583
+ default:
584
+ return action.call(params, { responseType, ...options });
585
585
  }
586
- return throwError(`Can't action without ODataEntitySetResource`);
587
586
  }
588
587
  _unsubscribe(entry) {
589
588
  if (entry.subscription) {
@@ -593,7 +592,7 @@ export class ODataCollection {
593
592
  }
594
593
  _subscribe(entry) {
595
594
  if (entry.subscription) {
596
- throw new Error('Subscription already exists');
595
+ throw new Error('Collection: Subscription already exists');
597
596
  }
598
597
  entry.subscription = entry.model.events$.subscribe((event) => {
599
598
  if (BUBBLING.indexOf(event.name) !== -1 &&
@@ -642,12 +641,18 @@ export class ODataCollection {
642
641
  },
643
642
  };
644
643
  }
645
- filter(predicate) {
644
+ filter(predicate, thisArg) {
646
645
  return this.models().filter(predicate);
647
646
  }
648
- find(predicate) {
647
+ map(callbackfn, thisArg) {
648
+ return this.models().map(callbackfn, thisArg);
649
+ }
650
+ find(predicate, thisArg) {
649
651
  return this.models().find(predicate);
650
652
  }
653
+ reduce(callbackfn, initialValue) {
654
+ return this.models().reduce(callbackfn, initialValue);
655
+ }
651
656
  first() {
652
657
  return this.models()[0];
653
658
  }
@@ -738,4 +743,4 @@ export class ODataCollection {
738
743
  }
739
744
  }
740
745
  ODataCollection.model = null;
741
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFHTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBRXRCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFFL0IscUJBQXFCLEdBSXRCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBRWYsZUFBZSxFQUVmLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE1BQU0sT0FBTyxlQUFlO0lBK0IxQixZQUNFLFdBQXFELEVBQUUsRUFDdkQsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUFHLEtBQUssTUFPWCxFQUFFO1FBekNSLFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsY0FBUyxHQUlFLElBQUksQ0FBQztRQUVoQixhQUFRLEdBQTRCLEVBQUUsQ0FBQztRQWF2QyxRQUFRO1FBQ1IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBaS9CakQs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QUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDaEMsQ0FBQyxFQUF5QixFQUFFLEVBQXlCLEVBQUUsRUFBRSxDQUN2RCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUMvQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNmLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRTtnQkFDNUIsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7O0FBamlDTSxxQkFBSyxHQUE2QixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgREVGQVVMVF9WRVJTSU9OIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9EYXRhSGVscGVyIH0gZnJvbSAnLi4vaGVscGVyJztcbmltcG9ydCB7XG4gIEVudGl0eUtleSxcbiAgT0RhdGFFbnRpdGllcyxcbiAgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zLFxuICBPRGF0YUVudGl0eUFubm90YXRpb25zLFxuICBPRGF0YUVudGl0eVJlc291cmNlLFxuICBPRGF0YUVudGl0eVNldFJlc291cmNlLFxuICBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YU9wdGlvbnMsXG4gIE9EYXRhUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFRdWVyeUFyZ3VtZW50c09wdGlvbnMsXG4gIE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcixcbiAgT0RhdGFSZXNvdXJjZSxcbn0gZnJvbSAnLi4vcmVzb3VyY2VzJztcbmltcG9ydCB7IFR5cGVzIH0gZnJvbSAnLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFNb2RlbCB9IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgQlVCQkxJTkcsXG4gIElOQ0xVREVfREVFUCxcbiAgSU5DTFVERV9TSEFMTE9XLFxuICBPRGF0YU1vZGVsRW50cnksXG4gIE9EYXRhTW9kZWxFdmVudCxcbiAgT0RhdGFNb2RlbEZpZWxkLFxuICBPRGF0YU1vZGVsT3B0aW9ucyxcbiAgT0RhdGFNb2RlbFN0YXRlLFxufSBmcm9tICcuL29wdGlvbnMnO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFDb2xsZWN0aW9uPFQsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PlxuICBpbXBsZW1lbnRzIEl0ZXJhYmxlPE0+XG57XG4gIHN0YXRpYyBtb2RlbDogdHlwZW9mIE9EYXRhTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgX3BhcmVudDpcbiAgICB8IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdXG4gICAgfCBudWxsID0gbnVsbDtcbiAgX3Jlc291cmNlOlxuICAgIHwgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBudWxsID0gbnVsbDtcbiAgX2Fubm90YXRpb25zITogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zO1xuICBfZW50cmllczogT0RhdGFNb2RlbEVudHJ5PFQsIE0+W10gPSBbXTtcbiAgX21vZGVsOiB0eXBlb2YgT0RhdGFNb2RlbDtcblxuICBtb2RlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXNcbiAgICAgIC5maWx0ZXIoKGUpID0+IGUuc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKVxuICAgICAgLm1hcCgoZSkgPT4gZS5tb2RlbCk7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxzKCkubGVuZ3RoO1xuICB9XG5cbiAgLy9FdmVudHNcbiAgZXZlbnRzJCA9IG5ldyBFdmVudEVtaXR0ZXI8T0RhdGFNb2RlbEV2ZW50PFQ+PigpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBlbnRpdGllczogUGFydGlhbDxUPltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXSA9IFtdLFxuICAgIHtcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYW5ub3RzLFxuICAgICAgbW9kZWwsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIHBhcmVudD86IFtPRGF0YU1vZGVsPGFueT4sIE9EYXRhTW9kZWxGaWVsZDxhbnk+XTtcbiAgICAgIHJlc291cmNlPzogT0RhdGFSZXNvdXJjZTxUPjtcbiAgICAgIGFubm90cz86IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucztcbiAgICAgIG1vZGVsPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IEtsYXNzID0gdGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgT0RhdGFDb2xsZWN0aW9uO1xuICAgIGlmIChtb2RlbCA9PT0gdW5kZWZpbmVkICYmIEtsYXNzLm1vZGVsICE9PSBudWxsKSBtb2RlbCA9IEtsYXNzLm1vZGVsO1xuICAgIGlmIChtb2RlbCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ0NvbGxlY3Rpb24gbmVlZCBtb2RlbCcpO1xuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG5cbiAgICAvLyBQYXJlbnRcbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZVxuICAgIHJlc291cmNlID0gKHJlc291cmNlIHx8IHRoaXMuX21vZGVsLm1ldGEuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeSgpKSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAocmVzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdHRhY2goXG4gICAgICAgIHJlc291cmNlIGFzXG4gICAgICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5ub3RhdGlvbnNcbiAgICB0aGlzLl9hbm5vdGF0aW9ucyA9XG4gICAgICBhbm5vdHMgfHxcbiAgICAgIG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMoXG4gICAgICAgIHJlc291cmNlPy5hcGkub3B0aW9ucy5oZWxwZXIgfHwgT0RhdGFIZWxwZXJbREVGQVVMVF9WRVJTSU9OXVxuICAgICAgKTtcblxuICAgIGVudGl0aWVzID0gZW50aXRpZXMgfHwgW107XG4gICAgdGhpcy5hc3NpZ24oZW50aXRpZXMsIHsgcmVzZXQgfSk7XG4gIH1cblxuICBpc1BhcmVudE9mKFxuICAgIGNoaWxkOiBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZCAhPT0gdGhpcyAmJlxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuY2hhaW4oY2hpbGQpLnNvbWUoKHApID0+IHBbMF0gPT09IHRoaXMpXG4gICAgKTtcbiAgfVxuXG4gIHJlc291cmNlKCk6XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4ge1xuICAgIHJldHVybiBPRGF0YU1vZGVsT3B0aW9ucy5yZXNvdXJjZTxUPih0aGlzKSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+O1xuICB9XG5cbiAgYXR0YWNoKFxuICAgIHJlc291cmNlOlxuICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3Jlc291cmNlICE9PSBudWxsICYmXG4gICAgICB0aGlzLl9yZXNvdXJjZS50eXBlKCkgIT09IHJlc291cmNlLnR5cGUoKSAmJlxuICAgICAgIXJlc291cmNlLmlzU3VidHlwZU9mKHRoaXMuX3Jlc291cmNlKVxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbid0IHJlYXR0YWNoICR7cmVzb3VyY2UudHlwZSgpfSB0byAke3RoaXMuX3Jlc291cmNlLnR5cGUoKX1gXG4gICAgICApO1xuXG4gICAgdGhpcy5fZW50cmllcy5mb3JFYWNoKCh7IG1vZGVsIH0pID0+IHtcbiAgICAgIGNvbnN0IG1yID0gdGhpcy5fbW9kZWwubWV0YS5tb2RlbFJlc291cmNlRmFjdG9yeShcbiAgICAgICAgcmVzb3VyY2UuY2xvbmVRdWVyeTxUPigpXG4gICAgICApIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD47XG4gICAgICBtb2RlbC5hdHRhY2gobXIpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3Jlc291cmNlO1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8ICFjdXJyZW50LmlzRXF1YWxUbyhyZXNvdXJjZSkpIHtcbiAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XG4gICAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnYXR0YWNoJywge1xuICAgICAgICAgIGNvbGxlY3Rpb246IHRoaXMsXG4gICAgICAgICAgcHJldmlvdXM6IGN1cnJlbnQsXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc0VudGl0eVNldDxSPihmdW5jOiAoY29sbGVjdGlvbjogdGhpcykgPT4gUik6IFIge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudDtcbiAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmModGhpcyk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJldHVybiAocmVzdWx0IGFzIGFueSkucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5fcGFyZW50ID0gcGFyZW50KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFubm90cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIG1vZGVsRmFjdG9yeShcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgeyByZXNldCA9IGZhbHNlIH06IHsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHtcbiAgICBsZXQgTW9kZWwgPSB0aGlzLl9tb2RlbDtcbiAgICBjb25zdCBoZWxwZXIgPSB0aGlzLl9hbm5vdGF0aW9ucy5oZWxwZXI7XG4gICAgY29uc3QgYW5ub3RzID0gbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoXG4gICAgICBoZWxwZXIsXG4gICAgICBoZWxwZXIuYW5ub3RhdGlvbnMoZGF0YSkgfHwge31cbiAgICApO1xuXG4gICAgaWYgKGFubm90cz8udHlwZSAhPT0gdW5kZWZpbmVkICYmIE1vZGVsLm1ldGEgIT09IG51bGwpIHtcbiAgICAgIGxldCBzY2hlbWEgPSBNb2RlbC5tZXRhLmZpbmRDaGlsZE9wdGlvbnMoKG8pID0+XG4gICAgICAgIG8uaXNUeXBlT2YoYW5ub3RzLnR5cGUgYXMgc3RyaW5nKVxuICAgICAgKT8uc2NoZW1hO1xuICAgICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYS5tb2RlbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAvLyBDaGFuZ2UgdG8gY2hpbGQgbW9kZWxcbiAgICAgICAgTW9kZWwgPSBzY2hlbWEubW9kZWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhLCB7XG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCxcbiAgICAgIHBhcmVudDogW3RoaXMsIG51bGxdLFxuICAgIH0pIGFzIE07XG4gIH1cblxuICB0b0VudGl0aWVzKHtcbiAgICBjbGllbnRfaWQgPSBmYWxzZSxcbiAgICBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb21wdXRlZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfa2V5ID0gdHJ1ZSxcbiAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgIGNoYW5nZXNfb25seSA9IGZhbHNlLFxuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICBjaGFpbiA9IFtdLFxuICB9OiB7XG4gICAgY2xpZW50X2lkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29uY3VycmVuY3k/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICBjaGFpbj86IChPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KVtdO1xuICB9ID0ge30pOiAoVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9KVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZW50cmllc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbW9kZWwsIHN0YXRlIH0pID0+XG4gICAgICAgICAgc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkICYmIGNoYWluLmV2ZXJ5KChjKSA9PiBjICE9PSBtb2RlbClcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgbW9kZWwsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgdmFyIGNoYW5nZXNPbmx5ID0gY2hhbmdlc19vbmx5ICYmIHN0YXRlICE9PSBPRGF0YU1vZGVsU3RhdGUuQWRkZWQ7XG4gICAgICAgIHJldHVybiBtb2RlbC50b0VudGl0eSh7XG4gICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICAgICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICAgICAgaW5jbHVkZV9rZXksXG4gICAgICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNPbmx5LFxuICAgICAgICAgIGNoYWluOiBbdGhpcywgLi4uY2hhaW5dLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvRW50aXRpZXMoKTtcbiAgfVxuXG4gIGhhc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfTogeyBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9lbnRyaWVzLnNvbWUoKGUpID0+IGUuc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5VbmNoYW5nZWQpIHx8XG4gICAgICB0aGlzLm1vZGVscygpLnNvbWUoKG0pID0+IG0uaGFzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KSlcbiAgICApO1xuICB9XG5cbiAgY2xvbmU8QyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oKSB7XG4gICAgbGV0IEN0b3IgPSA8dHlwZW9mIE9EYXRhQ29sbGVjdGlvbj50aGlzLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBuZXcgQ3Rvcih0aGlzLnRvRW50aXRpZXMoSU5DTFVERV9TSEFMTE9XKSwge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UoKSxcbiAgICAgIGFubm90czogdGhpcy5hbm5vdHMoKSxcbiAgICB9KSBhcyBDO1xuICB9XG5cbiAgZmV0Y2goe1xuICAgIHdpdGhDb3VudCxcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdmZXRjaDogUmVzb3VyY2UgaXMgdW5kZWZpbmVkJyk7XG5cbiAgICBsZXQgb2JzJDogT2JzZXJ2YWJsZTxPRGF0YUVudGl0aWVzPGFueT4+O1xuICAgIGlmIChyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UpIHtcbiAgICAgIG9icyQgPSByZXNvdXJjZS5mZXRjaCh7IHdpdGhDb3VudCwgLi4ub3B0aW9ucyB9KTtcbiAgICB9IGVsc2UgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSkge1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLFxuICAgICAgICB3aXRoQ291bnQsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JzJCA9IHJlc291cmNlLmZldGNoKHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnZW50aXRpZXMnLFxuICAgICAgICB3aXRoQ291bnQsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdyZXF1ZXN0JywgeyBjb2xsZWN0aW9uOiB0aGlzLCB2YWx1ZTogb2JzJCB9KVxuICAgICk7XG4gICAgcmV0dXJuIG9icyQucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdGllcywgYW5ub3RzIH0pID0+IHtcbiAgICAgICAgdGhpcy5fYW5ub3RhdGlvbnMgPSBhbm5vdHM7XG4gICAgICAgIHRoaXMuYXNzaWduKGVudGl0aWVzIHx8IFtdLCB7IHJlc2V0OiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChuZXcgT0RhdGFNb2RlbEV2ZW50KCdzeW5jJywgeyBjb2xsZWN0aW9uOiB0aGlzIH0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBmZXRjaEFsbChvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLnJlc291cmNlKCk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcignZmV0Y2hBbGw6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpO1xuXG4gICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFQcm9wZXJ0eVJlc291cmNlKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ2ZldGNoQWxsOiBSZXNvdXJjZSBpcyBPRGF0YVByb3BlcnR5UmVzb3VyY2UnKTtcblxuICAgIGNvbnN0IG9icyQgPSByZXNvdXJjZS5mZXRjaEFsbChvcHRpb25zKTtcbiAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgIGNvbGxlY3Rpb246IHRoaXMsXG4gICAgICAgIG9wdGlvbnM6IHsgb2JzZXJ2YWJsZTogb2JzJCB9LFxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBvYnMkLnBpcGUoXG4gICAgICBtYXAoKGVudGl0aWVzKSA9PiB7XG4gICAgICAgIHRoaXMuX2Fubm90YXRpb25zID0gbmV3IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyhcbiAgICAgICAgICByZXNvdXJjZT8uYXBpLm9wdGlvbnMuaGVscGVyXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYXNzaWduKGVudGl0aWVzIHx8IFtdLCB7IHJlc2V0OiB0cnVlIH0pO1xuICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChcbiAgICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdzeW5jJywge1xuICAgICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICAgIG9wdGlvbnM6IHsgZW50aXRpZXMgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGFsbCBtb2RlbHMgaW4gdGhlIGNvbGxlY3Rpb25cbiAgICogQHBhcmFtIHJlbE1vZGVsIFRoZSBtb2RlbCBpcyByZWxhdGlvbnNoaXBcbiAgICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIHVzZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBIdHRwT3B0aW9uc1xuICAgKi9cbiAgc2F2ZSh7XG4gICAgcmVsTW9kZWwgPSBmYWxzZSxcbiAgICBtZXRob2QsXG4gICAgLi4ub3B0aW9uc1xuICB9OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgcmVsTW9kZWw/OiBib29sZWFuO1xuICAgIG1ldGhvZD86ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gIH0gPSB7fSk6IE9ic2VydmFibGU8dGhpcz4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ3NhdmVBbGw6IFJlc291cmNlIGlzIHVuZGVmaW5lZCcpO1xuXG4gICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFQcm9wZXJ0eVJlc291cmNlKVxuICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ2ZldGNoQWxsOiBSZXNvdXJjZSBpcyBPRGF0YVByb3BlcnR5UmVzb3VyY2UnKTtcblxuICAgIGxldCB0b0Rlc3Ryb3lFbnRpdHk6IE1bXSA9IFtdO1xuICAgIGxldCB0b1JlbW92ZVJlZmVyZW5jZTogTVtdID0gW107XG4gICAgbGV0IHRvRGVzdHJveUNvbnRhaW5lZDogTVtdID0gW107XG4gICAgbGV0IHRvQ3JlYXRlRW50aXR5OiBNW10gPSBbXTtcbiAgICBsZXQgdG9BZGRSZWZlcmVuY2U6IE1bXSA9IFtdO1xuICAgIGxldCB0b0NyZWF0ZUNvbnRhaW5lZDogTVtdID0gW107XG4gICAgbGV0IHRvVXBkYXRlRW50aXR5OiBNW10gPSBbXTtcbiAgICBsZXQgdG9VcGRhdGVDb250YWluZWQ6IE1bXSA9IFtdO1xuXG4gICAgdGhpcy5fZW50cmllcy5mb3JFYWNoKCh7IG1vZGVsLCBzdGF0ZSB9KSA9PiB7XG4gICAgICBpZiAoc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICAgIGlmIChyZWxNb2RlbCkge1xuICAgICAgICAgIHRvRGVzdHJveUVudGl0eS5wdXNoKG1vZGVsKTtcbiAgICAgICAgfSBlbHNlIGlmICghbW9kZWwuaXNOZXcoKSkge1xuICAgICAgICAgIHRvUmVtb3ZlUmVmZXJlbmNlLnB1c2gobW9kZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvRGVzdHJveUNvbnRhaW5lZC5wdXNoKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gT0RhdGFNb2RlbFN0YXRlLkFkZGVkKSB7XG4gICAgICAgIGlmIChyZWxNb2RlbCkge1xuICAgICAgICAgIHRvQ3JlYXRlRW50aXR5LnB1c2gobW9kZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtb2RlbC5pc05ldygpKSB7XG4gICAgICAgICAgdG9BZGRSZWZlcmVuY2UucHVzaChtb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9DcmVhdGVDb250YWluZWQucHVzaChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobW9kZWwuaGFzQ2hhbmdlZCgpKSB7XG4gICAgICAgIHRvVXBkYXRlRW50aXR5LnB1c2gobW9kZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgIHRvRGVzdHJveUVudGl0eS5sZW5ndGggPiAwIHx8XG4gICAgICB0b1JlbW92ZVJlZmVyZW5jZS5sZW5ndGggPiAwIHx8XG4gICAgICB0b0Rlc3Ryb3lDb250YWluZWQubGVuZ3RoID4gMCB8fFxuICAgICAgdG9DcmVhdGVFbnRpdHkubGVuZ3RoID4gMCB8fFxuICAgICAgdG9BZGRSZWZlcmVuY2UubGVuZ3RoID4gMCB8fFxuICAgICAgdG9DcmVhdGVDb250YWluZWQubGVuZ3RoID4gMCB8fFxuICAgICAgdG9VcGRhdGVFbnRpdHkubGVuZ3RoID4gMCB8fFxuICAgICAgdG9VcGRhdGVDb250YWluZWQubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgb2JzJCA9IGZvcmtKb2luKFtcbiAgICAgICAgLi4udG9EZXN0cm95RW50aXR5Lm1hcCgobSkgPT4gbS5hc0VudGl0eSgoZSkgPT4gZS5kZXN0cm95KG9wdGlvbnMpKSksXG4gICAgICAgIC4uLnRvUmVtb3ZlUmVmZXJlbmNlLm1hcCgobSkgPT4gdGhpcy5yZW1vdmVSZWZlcmVuY2UobSwgb3B0aW9ucykpLFxuICAgICAgICAuLi50b0Rlc3Ryb3lDb250YWluZWQubWFwKChtKSA9PiBtLmRlc3Ryb3kob3B0aW9ucykpLFxuICAgICAgICAuLi50b0NyZWF0ZUVudGl0eS5tYXAoKG0pID0+XG4gICAgICAgICAgbS5hc0VudGl0eSgoZSkgPT4gZS5zYXZlKHsgbWV0aG9kOiAnY3JlYXRlJywgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKSxcbiAgICAgICAgLi4udG9BZGRSZWZlcmVuY2UubWFwKChtKSA9PiB0aGlzLmFkZFJlZmVyZW5jZShtLCBvcHRpb25zKSksXG4gICAgICAgIC4uLnRvQ3JlYXRlQ29udGFpbmVkLm1hcCgobSkgPT5cbiAgICAgICAgICBtLnNhdmUoeyBtZXRob2Q6ICdjcmVhdGUnLCAuLi5vcHRpb25zIH0pXG4gICAgICAgICksXG4gICAgICAgIC4uLnRvVXBkYXRlRW50aXR5Lm1hcCgobSkgPT5cbiAgICAgICAgICBtLmFzRW50aXR5KChlKSA9PiBlLnNhdmUoeyBtZXRob2QsIC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICksXG4gICAgICAgIC4uLnRvVXBkYXRlQ29udGFpbmVkLm1hcCgobSkgPT4gbS5zYXZlKHsgbWV0aG9kLCAuLi5vcHRpb25zIH0pKSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKVxuICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+ICh7IC4uLmVudHJ5LCBzdGF0ZTogT0RhdGFNb2RlbFN0YXRlLlVuY2hhbmdlZCB9KSk7XG4gICAgICAgICAgdGhpcy5ldmVudHMkLmVtaXQobmV3IE9EYXRhTW9kZWxFdmVudCgnc3luYycsIHsgY29sbGVjdGlvbjogdGhpcyB9KSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YodGhpcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlZmVyZW5jZShtb2RlbDogTSwgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8TT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghbW9kZWwuaXNOZXcoKSAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZVxuICAgICAgICAucmVmZXJlbmNlKClcbiAgICAgICAgLmFkZChcbiAgICAgICAgICBtb2RlbC5fbWV0YS5lbnRpdHlSZXNvdXJjZShtb2RlbCkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPixcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUobWFwKCgpID0+IG1vZGVsKSk7XG4gICAgfVxuICAgIHJldHVybiBvZihtb2RlbCk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRNb2RlbChcbiAgICBtb2RlbDogTSxcbiAgICB7XG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgcG9zaXRpb24gPSAtMSxcbiAgICB9OiB7XG4gICAgICBzaWxlbnQ/OiBib29sZWFuO1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgICAgcmVwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleSA9IG1vZGVsLmtleSgpO1xuICAgIGxldCBlbnRyeSA9IHRoaXMuX2ZpbmRFbnRyeSh7XG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIGNpZDogKDxhbnk+bW9kZWwpW3RoaXMuX21vZGVsLm1ldGEuY2lkXSxcbiAgICB9KTtcbiAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS5zdGF0ZSAhPT0gT0RhdGFNb2RlbFN0YXRlLlJlbW92ZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgZW50cnkuc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VudHJpZXMuaW5kZXhPZihlbnRyeSk7XG4gICAgICB0aGlzLl9lbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIEVudHJ5XG4gICAgZW50cnkgPSB7XG4gICAgICBzdGF0ZTogcmVzZXQgPyBPRGF0YU1vZGVsU3RhdGUuVW5jaGFuZ2VkIDogT0RhdGFNb2RlbFN0YXRlLkFkZGVkLFxuICAgICAgbW9kZWwsXG4gICAgICBrZXk6IG1vZGVsLmtleSgpLFxuICAgIH07XG4gICAgLy8gU2V0IFBhcmVudFxuICAgIGlmIChyZXBhcmVudCkgbW9kZWwuX3BhcmVudCA9IFt0aGlzLCBudWxsXTtcbiAgICAvLyBTdWJzY3JpYmVcbiAgICB0aGlzLl9zdWJzY3JpYmUoZW50cnkpO1xuICAgIC8vIE5vdyBhZGRcbiAgICBpZiAocG9zaXRpb24gPj0gMCkgdGhpcy5fZW50cmllcy5zcGxpY2UocG9zaXRpb24sIDAsIGVudHJ5KTtcbiAgICBlbHNlIHRoaXMuX2VudHJpZXMucHVzaChlbnRyeSk7XG5cbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgbW9kZWwuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdhZGQnLCB7IG1vZGVsLCBjb2xsZWN0aW9uOiB0aGlzIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkubW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVsKFxuICAgIG1vZGVsOiBNLFxuICAgIHtcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBwb3NpdGlvbiA9IC0xLFxuICAgIH06IHtcbiAgICAgIHNpbGVudD86IGJvb2xlYW47XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgICByZXBhcmVudD86IGJvb2xlYW47XG4gICAgICBwb3NpdGlvbj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb24gPSB0aGlzLl9iaXNlY3QobW9kZWwpO1xuICAgIGNvbnN0IGFkZGVkID0gdGhpcy5fYWRkTW9kZWwobW9kZWwsIHsgc2lsZW50LCByZXNldCwgcG9zaXRpb24sIHJlcGFyZW50IH0pO1xuICAgIGlmICghc2lsZW50ICYmIGFkZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiBbYWRkZWRdLCByZW1vdmVkOiBbXSwgbWVyZ2VkOiBbXSB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhZGQoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2VydmVyID0gdHJ1ZSxcbiAgICAgIHBvc2l0aW9uID0gLTEsXG4gICAgfToge1xuICAgICAgc2lsZW50PzogYm9vbGVhbjtcbiAgICAgIHJlcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIHNlcnZlcj86IGJvb2xlYW47XG4gICAgICBwb3NpdGlvbj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgaWYgKHNlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkUmVmZXJlbmNlKG1vZGVsKS5waXBlKFxuICAgICAgICBtYXAoKG1vZGVsKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRNb2RlbChtb2RlbCwgeyBzaWxlbnQsIHBvc2l0aW9uLCByZXBhcmVudCwgcmVzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZE1vZGVsKG1vZGVsLCB7IHNpbGVudCwgcG9zaXRpb24sIHJlcGFyZW50IH0pO1xuICAgICAgcmV0dXJuIG9mKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVmZXJlbmNlKG1vZGVsOiBNLCBvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxNPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghbW9kZWwuaXNOZXcoKSAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UpIHtcbiAgICAgIGxldCB0YXJnZXQgPVxuICAgICAgICB0aGlzLl9tb2RlbC5tZXRhLmFwaS5vcHRpb25zLmRlbGV0ZVJlZkJ5ID09PSAnaWQnXG4gICAgICAgICAgPyAobW9kZWwuX21ldGEuZW50aXR5UmVzb3VyY2UobW9kZWwpIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5fbW9kZWwubWV0YS5hcGkub3B0aW9ucy5kZWxldGVSZWZCeSA9PT0gJ3BhdGgnKSB7XG4gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2Uua2V5KG1vZGVsLmtleSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvdXJjZVxuICAgICAgICAucmVmZXJlbmNlKClcbiAgICAgICAgLnJlbW92ZSh0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIC5waXBlKG1hcCgoKSA9PiBtb2RlbCkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobW9kZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlTW9kZWwoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHsgc2lsZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSBtb2RlbC5rZXkoKTtcbiAgICBsZXQgZW50cnkgPSB0aGlzLl9maW5kRW50cnkoe1xuICAgICAgbW9kZWwsXG4gICAgICBrZXksXG4gICAgICBjaWQ6ICg8YW55Pm1vZGVsKVt0aGlzLl9tb2RlbC5tZXRhLmNpZF0sXG4gICAgfSk7XG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQgfHwgZW50cnkuc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEVtaXQgRXZlbnRcbiAgICBpZiAoIXNpbGVudClcbiAgICAgIG1vZGVsLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgncmVtb3ZlJywgeyBtb2RlbCwgY29sbGVjdGlvbjogdGhpcyB9KVxuICAgICAgKTtcblxuICAgIC8vIE5vdyByZW1vdmVcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VudHJpZXMuaW5kZXhPZihlbnRyeSk7XG4gICAgdGhpcy5fZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmICghKHJlc2V0IHx8IGVudHJ5LnN0YXRlID09PSBPRGF0YU1vZGVsU3RhdGUuQWRkZWQpKSB7XG4gICAgICAvLyBNb3ZlIHRvIGVuZCBvZiBhcnJheSBhbmQgbWFyayBhcyByZW1vdmVkXG4gICAgICBlbnRyeS5zdGF0ZSA9IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkO1xuICAgICAgdGhpcy5fZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoZW50cnkpO1xuICAgIHJldHVybiBlbnRyeS5tb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTW9kZWwoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHsgc2lsZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fcmVtb3ZlTW9kZWwobW9kZWwsIHsgc2lsZW50LCByZXNldCB9KTtcbiAgICBpZiAoIXNpbGVudCAmJiByZW1vdmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiBbXSwgcmVtb3ZlZDogW3JlbW92ZWRdLCBtZXJnZWQ6IFtdIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShcbiAgICBtb2RlbDogTSxcbiAgICB7XG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICAgIHNlcnZlciA9IHRydWUsXG4gICAgfTogeyBzaWxlbnQ/OiBib29sZWFuOyBzZXJ2ZXI/OiBib29sZWFuIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVSZWZlcmVuY2UobW9kZWwpLnBpcGUoXG4gICAgICAgIG1hcCgobW9kZWwpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vZGVsKG1vZGVsLCB7IHNpbGVudCwgcmVzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZU1vZGVsKG1vZGVsLCB7IHNpbGVudCB9KTtcbiAgICAgIHJldHVybiBvZih0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGUoXG4gICAgYXR0cnM6IFQgPSB7fSBhcyBULFxuICAgIHtcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgICAgc2VydmVyID0gdHJ1ZSxcbiAgICB9OiB7IHNpbGVudD86IGJvb2xlYW47IHNlcnZlcj86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbEZhY3RvcnkoYXR0cnMpO1xuICAgIHJldHVybiAobW9kZWwuaXNWYWxpZCgpICYmIHNlcnZlciA/IG1vZGVsLnNhdmUoKSA6IG9mKG1vZGVsKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgobW9kZWwpID0+IHRoaXMuYWRkKG1vZGVsLCB7IHNpbGVudCwgc2VydmVyIH0pKSxcbiAgICAgIG1hcCgoKSA9PiBtb2RlbClcbiAgICApO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgTW9kZWwgPSB0aGlzLl9tb2RlbDtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSAoXG4gICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IChwYXRoIGFzIHN0cmluZykubWF0Y2goLyhbXlsuXFxdXSkrL2cpXG4gICAgKSBhcyBhbnlbXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZW50cmllc1tOdW1iZXIocGF0aEFycmF5WzBdKV0ubW9kZWw7XG4gICAgICByZXR1cm4gbW9kZWwuc2V0KHBhdGhBcnJheS5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMSAmJiBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgbGV0IHRvQWRkOiBNW10gPSBbXTtcbiAgICAgIGxldCB0b01lcmdlOiBNW10gPSBbXTtcbiAgICAgIGxldCB0b1JlbW92ZTogTVtdID0gW107XG4gICAgICBsZXQgaW5kZXggPSBOdW1iZXIocGF0aEFycmF5WzBdKTtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbHMoKVtpbmRleF07XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuX2ZpbmRFbnRyeSh7IG1vZGVsIH0pO1xuICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy9UT0RPOiBSZW1vdmUvQWRkIG9yIE1lcmdlP1xuICAgICAgICAvLyBNZXJnZVxuICAgICAgICBlbnRyeS5tb2RlbC5hc3NpZ24oXG4gICAgICAgICAgdmFsdWUudG9FbnRpdHkoeyBjbGllbnRfaWQ6IHRydWUsIC4uLklOQ0xVREVfREVFUCB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAoZW50cnkubW9kZWwuaGFzQ2hhbmdlZCgpKSB0b01lcmdlLnB1c2gobW9kZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkXG4gICAgICAgIHRoaXMuX2FkZE1vZGVsKHZhbHVlLCB7IHJlcGFyZW50OiB0cnVlIH0pO1xuICAgICAgICB0b0FkZC5wdXNoKG1vZGVsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiB0b0FkZCwgcmVtb3ZlZDogdG9SZW1vdmUsIG1lcmdlZDogdG9NZXJnZSB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQocGF0aDogbnVtYmVyKTogTSB8IHVuZGVmaW5lZDtcbiAgZ2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYW55O1xuICBnZXQocGF0aDogYW55KTogYW55IHtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogYCR7cGF0aH1gLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVscygpW051bWJlcihwYXRoQXJyYXlbMF0pXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA+IDEgJiYgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5nZXQocGF0aEFycmF5LnNsaWNlKDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVzZXQoe1xuICAgIHBhdGgsXG4gICAgc2lsZW50ID0gZmFsc2UsXG4gIH06IHsgcGF0aD86IHN0cmluZyB8IHN0cmluZ1tdOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGlmIChUeXBlcy5pc0VtcHR5KHBhdGgpKSB7XG4gICAgICB0aGlzLm1vZGVscygpLmZvckVhY2goKG0pID0+IG0ucmVzZXQoeyBzaWxlbnQgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuICAgICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IGAke3BhdGh9YC5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICAgICkgYXMgYW55W107XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubW9kZWxzKClbTnVtYmVyKHBhdGhBcnJheVswXSldO1xuICAgICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnJlc2V0KHsgcGF0aDogcGF0aEFycmF5LnNsaWNlKDEpLCBzaWxlbnQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXNzaWduKFxuICAgIG9iamVjdHM6IFBhcnRpYWw8VD5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10gfCBNW10sXG4gICAge1xuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICB9OiB7IHJlc2V0PzogYm9vbGVhbjsgcmVwYXJlbnQ/OiBib29sZWFuOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuXG4gICAgbGV0IHRvQWRkOiBNW10gPSBbXTtcbiAgICBsZXQgdG9NZXJnZTogTVtdID0gW107XG4gICAgbGV0IHRvUmVtb3ZlOiBNW10gPSBbXTtcbiAgICBsZXQgdG9Tb3J0OiBbTSwgbnVtYmVyXVtdID0gW107XG4gICAgbGV0IG1vZGVsTWFwOiBzdHJpbmdbXSA9IFtdO1xuICAgIG9iamVjdHMuZm9yRWFjaCgob2JqLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNNb2RlbCA9IE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwob2JqKTtcbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIE1vZGVsICE9PSBudWxsICYmIE1vZGVsLm1ldGEgPyBNb2RlbC5tZXRhLnJlc29sdmVLZXkob2JqKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNpZCA9XG4gICAgICAgIE1vZGVsLm1ldGEuY2lkIGluIG9iaiA/ICg8YW55Pm9iailbTW9kZWwubWV0YS5jaWRdIDogdW5kZWZpbmVkO1xuICAgICAgLy8gVHJ5IGZpbmQgZW50cnlcbiAgICAgIGNvbnN0IGVudHJ5ID0gaXNNb2RlbFxuICAgICAgICA/IHRoaXMuX2ZpbmRFbnRyeSh7IG1vZGVsOiBvYmogYXMgTSB9KSAvLyBCeSBNb2RlbFxuICAgICAgICA6IHRoaXMuX2ZpbmRFbnRyeSh7IGNpZCwga2V5IH0pOyAvLyBCeSBDaWQgb3IgS2V5XG5cbiAgICAgIGxldCBtb2RlbDogTTtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE1lcmdlXG4gICAgICAgIG1vZGVsID0gZW50cnkubW9kZWw7XG4gICAgICAgIGlmIChtb2RlbCAhPT0gb2JqKSB7XG4gICAgICAgICAgLy8gR2V0IGVudGl0eSBmcm9tIG1vZGVsXG4gICAgICAgICAgaWYgKGlzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IChvYmogYXMgTSkudG9FbnRpdHkoe1xuICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRydWUsXG4gICAgICAgICAgICAgIC4uLklOQ0xVREVfREVFUCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbW9kZWwuYXNzaWduKGVudGl0eSwgeyByZXNldCwgc2lsZW50IH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWxwZXIgPSB0aGlzLl9hbm5vdGF0aW9ucy5oZWxwZXI7XG4gICAgICAgICAgICBjb25zdCBhbm5vdHMgPSBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyhcbiAgICAgICAgICAgICAgaGVscGVyLFxuICAgICAgICAgICAgICBoZWxwZXIuYW5ub3RhdGlvbnMob2JqKSB8fCB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGFubm90cy5hdHRyaWJ1dGVzPFQ+KG9iaiwgJ2Z1bGwnKTtcbiAgICAgICAgICAgIG1vZGVsLl9hbm5vdGF0aW9ucyA9IGFubm90cztcbiAgICAgICAgICAgIG1vZGVsLmFzc2lnbihlbnRpdHksIHsgcmVzZXQsIHNpbGVudCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTW9kZWwgQ2hhbmdlP1xuICAgICAgICAgIGlmIChtb2RlbC5oYXNDaGFuZ2VkKCkpIHRvTWVyZ2UucHVzaChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFzIFNvcnQgb3IgSW5kZXggQ2hhbmdlP1xuICAgICAgICBpZiAodG9Tb3J0Lmxlbmd0aCA+IDAgfHwgaW5kZXggIT09IHRoaXMubW9kZWxzKCkuaW5kZXhPZihtb2RlbCkpIHtcbiAgICAgICAgICB0b1NvcnQucHVzaChbbW9kZWwsIGluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZFxuICAgICAgICBtb2RlbCA9IGlzTW9kZWxcbiAgICAgICAgICA/IChvYmogYXMgTSlcbiAgICAgICAgICA6IHRoaXMubW9kZWxGYWN0b3J5KG9iaiBhcyBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIHtcbiAgICAgICAgICAgICAgcmVzZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdG9BZGQucHVzaChtb2RlbCk7XG4gICAgICB9XG4gICAgICBtb2RlbE1hcC5wdXNoKCg8YW55Pm1vZGVsKVtNb2RlbC5tZXRhLmNpZF0pO1xuICAgIH0pO1xuICAgIHRoaXMuX2VudHJpZXNcbiAgICAgIC5maWx0ZXIoKGUpID0+IG1vZGVsTWFwLmluZGV4T2YoKDxhbnk+ZS5tb2RlbClbTW9kZWwubWV0YS5jaWRdKSA9PT0gLTEpXG4gICAgICAuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgdG9SZW1vdmUucHVzaChlbnRyeS5tb2RlbCk7XG4gICAgICB9KTtcblxuICAgIHRvUmVtb3ZlLmZvckVhY2goKG0pID0+IHtcbiAgICAgIHRoaXMuX3JlbW92ZU1vZGVsKG0sIHsgc2lsZW50LCByZXNldCB9KTtcbiAgICB9KTtcbiAgICB0b0FkZC5mb3JFYWNoKChtKSA9PiB7XG4gICAgICB0aGlzLl9hZGRNb2RlbChtLCB7IHNpbGVudCwgcmVzZXQsIHJlcGFyZW50IH0pO1xuICAgIH0pO1xuICAgIHRvU29ydC5mb3JFYWNoKChtKSA9PiB7XG4gICAgICB0aGlzLl9yZW1vdmVNb2RlbChtWzBdLCB7IHNpbGVudDogdHJ1ZSwgcmVzZXQgfSk7XG4gICAgICB0aGlzLl9hZGRNb2RlbChtWzBdLCB7IHNpbGVudDogdHJ1ZSwgcmVzZXQsIHBvc2l0aW9uOiBtWzFdLCByZXBhcmVudCB9KTtcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgICghc2lsZW50ICYmXG4gICAgICAgICh0b0FkZC5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgdG9SZW1vdmUubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHRvTWVyZ2UubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHRvU29ydC5sZW5ndGggPiAwKSkgfHxcbiAgICAgIHJlc2V0XG4gICAgKSB7XG4gICAgICB0aGlzLl9zb3J0QnkgPSBudWxsO1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQocmVzZXQgPyAncmVzZXQnIDogJ3VwZGF0ZScsIHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiB0aGlzLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGFkZGVkOiB0b0FkZCxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHRvUmVtb3ZlLFxuICAgICAgICAgICAgbWVyZ2VkOiB0b01lcmdlLFxuICAgICAgICAgICAgc29ydGVkOiB0b1NvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcXVlcnkoZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIHJlc291cmNlLnF1ZXJ5KGZ1bmMpO1xuICAgIHRoaXMuYXR0YWNoKHJlc291cmNlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGxGdW5jdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlKSB7XG4gICAgICBjb25zdCBmdW5jID0gcmVzb3VyY2UuZnVuY3Rpb248UCwgUj4obmFtZSk7XG4gICAgICBmdW5jLnF1ZXJ5KChxKSA9PiBxLmFwcGx5KG9wdGlvbnMpKTtcbiAgICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSAnbW9kZWwnOlxuICAgICAgICAgIHJldHVybiBmdW5jLmNhbGxNb2RlbChwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsQ29sbGVjdGlvbihwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoYENhbid0IGZ1bmN0aW9uIHdpdGhvdXQgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZWApO1xuICB9XG5cbiAgY2FsbEFjdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSByZXNvdXJjZS5hY3Rpb248UCwgUj4obmFtZSk7XG4gICAgICBhY3Rpb24ucXVlcnkoKHEpID0+IHEuYXBwbHkob3B0aW9ucykpO1xuICAgICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgICAgY2FzZSAncHJvcGVydHknOlxuICAgICAgICAgIHJldHVybiBhY3Rpb24uY2FsbFByb3BlcnR5KHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxNb2RlbChwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsKHBhcmFtcywgeyByZXNwb25zZVR5cGUsIC4uLm9wdGlvbnMgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aHJvd0Vycm9yKGBDYW4ndCBhY3Rpb24gd2l0aG91dCBPRGF0YUVudGl0eVNldFJlc291cmNlYCk7XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZShlbnRyeTogT0RhdGFNb2RlbEVudHJ5PFQsIE0+KSB7XG4gICAgaWYgKGVudHJ5LnN1YnNjcmlwdGlvbikge1xuICAgICAgZW50cnkuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWxldGUgZW50cnkuc3Vic2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZShlbnRyeTogT0RhdGFNb2RlbEVudHJ5PFQsIE0+KSB7XG4gICAgaWYgKGVudHJ5LnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdWJzY3JpcHRpb24gYWxyZWFkeSBleGlzdHMnKTtcbiAgICB9XG4gICAgZW50cnkuc3Vic2NyaXB0aW9uID0gZW50cnkubW9kZWwuZXZlbnRzJC5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQ6IE9EYXRhTW9kZWxFdmVudDxUPikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgQlVCQkxJTkcuaW5kZXhPZihldmVudC5uYW1lKSAhPT0gLTEgJiZcbiAgICAgICAgICBldmVudC5idWJibGluZyAmJlxuICAgICAgICAgICFldmVudC52aXNpdGVkKHRoaXMpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChldmVudC5tb2RlbCA9PT0gZW50cnkubW9kZWwpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5uYW1lID09PSAnZGVzdHJveScpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbChlbnRyeS5tb2RlbCwgeyByZXNldDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQubmFtZSA9PT0gJ2NoYW5nZScgJiYgZXZlbnQub3B0aW9ucz8ua2V5KSB7XG4gICAgICAgICAgICAgIGVudHJ5LmtleSA9IGVudHJ5Lm1vZGVsLmtleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbHMoKS5pbmRleE9mKGVudHJ5Lm1vZGVsKTtcbiAgICAgICAgICBldmVudC5wdXNoKHRoaXMsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEVudHJ5KHtcbiAgICBtb2RlbCxcbiAgICBjaWQsXG4gICAga2V5LFxuICB9OiB7XG4gICAgbW9kZWw/OiBPRGF0YU1vZGVsPFQ+O1xuICAgIGNpZD86IHN0cmluZztcbiAgICBrZXk/OiBFbnRpdHlLZXk8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXMuZmluZCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGJ5TW9kZWwgPSBtb2RlbCAhPT0gdW5kZWZpbmVkICYmIGVudHJ5Lm1vZGVsLmVxdWFscyhtb2RlbCk7XG4gICAgICBjb25zdCBieUNpZCA9XG4gICAgICAgIGNpZCAhPT0gdW5kZWZpbmVkICYmICg8YW55PmVudHJ5Lm1vZGVsKVt0aGlzLl9tb2RlbC5tZXRhLmNpZF0gPT09IGNpZDtcbiAgICAgIGNvbnN0IGJ5S2V5ID1cbiAgICAgICAga2V5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZW50cnkua2V5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgVHlwZXMuaXNFcXVhbChlbnRyeS5rZXksIGtleSk7XG4gICAgICByZXR1cm4gYnlNb2RlbCB8fCBieUNpZCB8fCBieUtleTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENvbGxlY3Rpb24gZnVuY3Rpb25zXG4gIGVxdWFscyhvdGhlcjogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+KSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQ29sbGVjdGlvbic7XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgbGV0IHBvaW50ZXIgPSAwO1xuICAgIGxldCBtb2RlbHMgPSB0aGlzLm1vZGVscygpO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PE0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiBwb2ludGVyID09PSBtb2RlbHMubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlOiBtb2RlbHNbcG9pbnRlcisrXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlcihwcmVkaWNhdGU6IChtOiBNLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogTVtdIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHMoKS5maWx0ZXIocHJlZGljYXRlKTtcbiAgfVxuXG4gIGZpbmQocHJlZGljYXRlOiAobTogTSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IE0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuXG4gIGZpcnN0KCk6IE0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpWzBdO1xuICB9XG5cbiAgbGFzdCgpOiBNIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RlbHMgPSB0aGlzLm1vZGVscygpO1xuICAgIHJldHVybiBtb2RlbHNbbW9kZWxzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgbmV4dChtb2RlbDogTSk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleE9mKG1vZGVsKTtcbiAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldChpbmRleCArIDEpO1xuICB9XG5cbiAgcHJldihtb2RlbDogTSk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleE9mKG1vZGVsKTtcbiAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGluZGV4IC0gMSk7XG4gIH1cblxuICBldmVyeShwcmVkaWNhdGU6IChtOiBNLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxzKCkuZXZlcnkocHJlZGljYXRlKTtcbiAgfVxuXG4gIHNvbWUocHJlZGljYXRlOiAobTogTSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpLnNvbWUocHJlZGljYXRlKTtcbiAgfVxuXG4gIGNvbnRhaW5zKG1vZGVsOiBNKSB7XG4gICAgcmV0dXJuIHRoaXMuc29tZSgobSkgPT4gbS5lcXVhbHMobW9kZWwpKTtcbiAgfVxuXG4gIGluZGV4T2YobW9kZWw6IE0pOiBudW1iZXIge1xuICAgIGNvbnN0IG1vZGVscyA9IHRoaXMubW9kZWxzKCk7XG4gICAgY29uc3QgbSA9IG1vZGVscy5maW5kKChtKSA9PiBtLmVxdWFscyhtb2RlbCkpO1xuICAgIHJldHVybiBtID09PSB1bmRlZmluZWQgPyAtMSA6IG1vZGVscy5pbmRleE9mKG0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFNvcnRcbiAgcHJpdmF0ZSBfYmlzZWN0KG1vZGVsOiBNKSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgaWYgKHRoaXMuX3NvcnRCeSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmUobW9kZWwsIHRoaXMuX2VudHJpZXNbaW5kZXhdLCB0aGlzLl9zb3J0QnksIDApIDwgMCkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9jb21wYXJlKFxuICAgIGUxOiBPRGF0YU1vZGVsRW50cnk8VCwgTT4gfCBNLFxuICAgIGUyOiBPRGF0YU1vZGVsRW50cnk8VCwgTT4gfCBNLFxuICAgIGJ5OiB7IGZpZWxkOiBzdHJpbmcgfCBrZXlvZiBUOyBvcmRlcj86IDEgfCAtMSB9W10sXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGxldCBtMSA9IE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoZTEpXG4gICAgICA/IChlMSBhcyBNKVxuICAgICAgOiAoZTEgYXMgT0RhdGFNb2RlbEVudHJ5PFQsIE0+KS5tb2RlbDtcbiAgICBsZXQgbTIgPSBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGUyKVxuICAgICAgPyAoZTIgYXMgTSlcbiAgICAgIDogKGUyIGFzIE9EYXRhTW9kZWxFbnRyeTxULCBNPikubW9kZWw7XG4gICAgbGV0IHZhbHVlMSA9IG0xLmdldChieVtpbmRleF0uZmllbGQgYXMgc3RyaW5nKTtcbiAgICBsZXQgdmFsdWUyID0gbTIuZ2V0KGJ5W2luZGV4XS5maWVsZCBhcyBzdHJpbmcpO1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xO1xuICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT0gJ3N0cmluZycgfHwgdmFsdWUxIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBpZiAodmFsdWUxLmxvY2FsZUNvbXBhcmUgJiYgdmFsdWUxICE9IHZhbHVlMikge1xuICAgICAgICByZXR1cm4gKGJ5W2luZGV4XS5vcmRlciB8fCAxKSAqIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlMSA8IHZhbHVlMiA/IC0xIDogMTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUxID09IHZhbHVlMikge1xuICAgICAgcmV0dXJuIGJ5Lmxlbmd0aCAtIDEgPiBpbmRleCA/IHRoaXMuX2NvbXBhcmUoZTEsIGUyLCBieSwgaW5kZXggKyAxKSA6IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIChieVtpbmRleF0ub3JkZXIgfHwgMSkgKiByZXN1bHQ7XG4gIH1cblxuICBfc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmcgfCBrZXlvZiBUOyBvcmRlcj86IDEgfCAtMSB9W10gfCBudWxsID0gbnVsbDtcbiAgaXNTb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRCeSAhPT0gbnVsbDtcbiAgfVxuXG4gIHNvcnQoXG4gICAgYnk6IHsgZmllbGQ6IHN0cmluZyB8IGtleW9mIFQ7IG9yZGVyPzogMSB8IC0xIH1bXSxcbiAgICB7IHNpbGVudCB9OiB7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIHRoaXMuX3NvcnRCeSA9IGJ5O1xuICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzLnNvcnQoXG4gICAgICAoZTE6IE9EYXRhTW9kZWxFbnRyeTxULCBNPiwgZTI6IE9EYXRhTW9kZWxFbnRyeTxULCBNPikgPT5cbiAgICAgICAgdGhpcy5fY29tcGFyZShlMSwgZTIsIGJ5LCAwKVxuICAgICk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19
746
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFHTCx3QkFBd0IsRUFDeEIsc0JBQXNCLEVBRXRCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFFL0IscUJBQXFCLEdBSXRCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixlQUFlLEVBRWYsZUFBZSxFQUVmLGlCQUFpQixFQUNqQixlQUFlLEdBQ2hCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE1BQU0sT0FBTyxlQUFlO0lBK0IxQixZQUNFLFdBQXFELEVBQUUsRUFDdkQsRUFDRSxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUFHLEtBQUssTUFPWCxFQUFFO1FBekNSLFlBQU8sR0FLSSxJQUFJLENBQUM7UUFDaEIsY0FBUyxHQUlFLElBQUksQ0FBQztRQUVoQixhQUFRLEdBQTRCLEVBQUUsQ0FBQztRQWF2QyxRQUFRO1FBQ1IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFzQixDQUFDO1FBMGdDakQs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cG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBERUZBVUxUX1ZFUlNJT04gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHtcbiAgRW50aXR5S2V5LFxuICBPRGF0YUVudGl0aWVzLFxuICBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG4gIE9EYXRhRW50aXR5UmVzb3VyY2UsXG4gIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UsXG4gIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UsXG4gIE9EYXRhT3B0aW9ucyxcbiAgT0RhdGFQcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVF1ZXJ5QXJndW1lbnRzT3B0aW9ucyxcbiAgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyLFxuICBPRGF0YVJlc291cmNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHsgVHlwZXMgfSBmcm9tICcuLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBPRGF0YU1vZGVsIH0gZnJvbSAnLi9tb2RlbCc7XG5pbXBvcnQge1xuICBCVUJCTElORyxcbiAgSU5DTFVERV9ERUVQLFxuICBJTkNMVURFX1NIQUxMT1csXG4gIE9EYXRhTW9kZWxFbnRyeSxcbiAgT0RhdGFNb2RlbEV2ZW50LFxuICBPRGF0YU1vZGVsRmllbGQsXG4gIE9EYXRhTW9kZWxPcHRpb25zLFxuICBPRGF0YU1vZGVsU3RhdGUsXG59IGZyb20gJy4vb3B0aW9ucyc7XG5cbmV4cG9ydCBjbGFzcyBPRGF0YUNvbGxlY3Rpb248VCwgTSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+XG4gIGltcGxlbWVudHMgSXRlcmFibGU8TT5cbntcbiAgc3RhdGljIG1vZGVsOiB0eXBlb2YgT0RhdGFNb2RlbCB8IG51bGwgPSBudWxsO1xuICBfcGFyZW50OlxuICAgIHwgW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF1cbiAgICB8IG51bGwgPSBudWxsO1xuICBfcmVzb3VyY2U6XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IG51bGwgPSBudWxsO1xuICBfYW5ub3RhdGlvbnMhOiBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnM7XG4gIF9lbnRyaWVzOiBPRGF0YU1vZGVsRW50cnk8VCwgTT5bXSA9IFtdO1xuICBfbW9kZWw6IHR5cGVvZiBPRGF0YU1vZGVsO1xuXG4gIG1vZGVscygpIHtcbiAgICByZXR1cm4gdGhpcy5fZW50cmllc1xuICAgICAgLmZpbHRlcigoZSkgPT4gZS5zdGF0ZSAhPT0gT0RhdGFNb2RlbFN0YXRlLlJlbW92ZWQpXG4gICAgICAubWFwKChlKSA9PiBlLm1vZGVsKTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHMoKS5sZW5ndGg7XG4gIH1cblxuICAvL0V2ZW50c1xuICBldmVudHMkID0gbmV3IEV2ZW50RW1pdHRlcjxPRGF0YU1vZGVsRXZlbnQ8VD4+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGVudGl0aWVzOiBQYXJ0aWFsPFQ+W10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdID0gW10sXG4gICAge1xuICAgICAgcGFyZW50LFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhbm5vdHMsXG4gICAgICBtb2RlbCxcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgcGFyZW50PzogW09EYXRhTW9kZWw8YW55PiwgT0RhdGFNb2RlbEZpZWxkPGFueT5dO1xuICAgICAgcmVzb3VyY2U/OiBPRGF0YVJlc291cmNlPFQ+O1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdGllc0Fubm90YXRpb25zO1xuICAgICAgbW9kZWw/OiB0eXBlb2YgT0RhdGFNb2RlbDtcbiAgICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgY29uc3QgS2xhc3MgPSB0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBPRGF0YUNvbGxlY3Rpb247XG4gICAgaWYgKG1vZGVsID09PSB1bmRlZmluZWQgJiYgS2xhc3MubW9kZWwgIT09IG51bGwpIG1vZGVsID0gS2xhc3MubW9kZWw7XG4gICAgaWYgKG1vZGVsID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbGxlY3Rpb246IENvbGxlY3Rpb24gbmVlZCBtb2RlbCcpO1xuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG5cbiAgICAvLyBQYXJlbnRcbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZVxuICAgIGlmICh0aGlzLl9wYXJlbnQgPT09IG51bGwgJiYgcmVzb3VyY2UgPT09IHVuZGVmaW5lZClcbiAgICAgIHJlc291cmNlID0gdGhpcy5fbW9kZWwubWV0YS5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KCkgYXNcbiAgICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAocmVzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdHRhY2goXG4gICAgICAgIHJlc291cmNlIGFzXG4gICAgICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5ub3RhdGlvbnNcbiAgICB0aGlzLl9hbm5vdGF0aW9ucyA9XG4gICAgICBhbm5vdHMgfHxcbiAgICAgIG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMoXG4gICAgICAgIHJlc291cmNlPy5hcGkub3B0aW9ucy5oZWxwZXIgfHwgT0RhdGFIZWxwZXJbREVGQVVMVF9WRVJTSU9OXVxuICAgICAgKTtcblxuICAgIGVudGl0aWVzID0gZW50aXRpZXMgfHwgW107XG4gICAgdGhpcy5hc3NpZ24oZW50aXRpZXMsIHsgcmVzZXQgfSk7XG4gIH1cblxuICBpc1BhcmVudE9mKFxuICAgIGNoaWxkOiBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjaGlsZCAhPT0gdGhpcyAmJlxuICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuY2hhaW4oY2hpbGQpLnNvbWUoKHApID0+IHBbMF0gPT09IHRoaXMpXG4gICAgKTtcbiAgfVxuXG4gIHJlc291cmNlKCk6XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD4ge1xuICAgIHJldHVybiBPRGF0YU1vZGVsT3B0aW9ucy5yZXNvdXJjZTxUPih0aGlzKSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+O1xuICB9XG5cbiAgYXR0YWNoKFxuICAgIHJlc291cmNlOlxuICAgICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuX3Jlc291cmNlICE9PSBudWxsICYmXG4gICAgICB0aGlzLl9yZXNvdXJjZS50eXBlKCkgIT09IHJlc291cmNlLnR5cGUoKSAmJlxuICAgICAgIXRoaXMuX3Jlc291cmNlLmlzU3VidHlwZU9mKHJlc291cmNlKVxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGF0dGFjaDogQ2FuJ3QgcmVhdHRhY2ggJHt0aGlzLl9yZXNvdXJjZS50eXBlKCl9IHRvICR7cmVzb3VyY2UudHlwZSgpfWBcbiAgICAgICk7XG5cbiAgICB0aGlzLl9lbnRyaWVzLmZvckVhY2goKHsgbW9kZWwgfSkgPT4ge1xuICAgICAgY29uc3QgbXIgPSB0aGlzLl9tb2RlbC5tZXRhLm1vZGVsUmVzb3VyY2VGYWN0b3J5KFxuICAgICAgICByZXNvdXJjZS5jbG9uZVF1ZXJ5PFQ+KClcbiAgICAgICkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPjtcbiAgICAgIG1vZGVsLmF0dGFjaChtcik7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5fcmVzb3VyY2U7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgIWN1cnJlbnQuaXNFcXVhbFRvKHJlc291cmNlKSkge1xuICAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdhdHRhY2gnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBwcmV2aW91czogY3VycmVudCxcbiAgICAgICAgICB2YWx1ZTogcmVzb3VyY2UsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzRW50aXR5U2V0PFI+KGZ1bmM6IChjb2xsZWN0aW9uOiB0aGlzKSA9PiBSKTogUiB7XG4gICAgLy8gQnVpbGQgbmV3IHJlc291cmNlXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnJlc291cmNlKCkuY2xvbmVRdWVyeTxUPigpO1xuICAgIGxldCByZXNvdXJjZSA9IHRoaXMuX21vZGVsLm1ldGEuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeShxdWVyeSk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdhc0VudGl0eVNldDogQ29sbGVjdGlvbiBkb2VzIG5vdCBoYXZlIGFzc29jaWF0ZWQgRW50aXR5U2V0IGVuZHBvaW50J1xuICAgICAgKTtcbiAgICAvLyBTdG9yZSBwYXJlbnQgYW5kIHJlc291cmNlXG4gICAgY29uc3Qgc3RvcmUgPSB7IHBhcmVudDogdGhpcy5fcGFyZW50LCByZXNvdXJjZTogdGhpcy5fcmVzb3VyY2UgfTtcbiAgICAvLyBSZXBsYWNlIHBhcmVudCBhbmQgcmVzb3VyY2VcbiAgICB0aGlzLl9wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XG4gICAgLy8gRXhlY3V0ZVxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmModGhpcyk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJldHVybiAocmVzdWx0IGFzIGFueSkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIC8vIFJlc3RvcmVcbiAgICAgICAgICB0aGlzLl9wYXJlbnQgPSBzdG9yZS5wYXJlbnQ7XG4gICAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSBzdG9yZS5yZXNvdXJjZTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlc3RvcmVcbiAgICAgIHRoaXMuX3BhcmVudCA9IHN0b3JlLnBhcmVudDtcbiAgICAgIHRoaXMuX3Jlc291cmNlID0gc3RvcmUucmVzb3VyY2U7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFubm90cygpIHtcbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIG1vZGVsRmFjdG9yeShcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAgeyByZXNldCA9IGZhbHNlIH06IHsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHtcbiAgICBsZXQgTW9kZWwgPSB0aGlzLl9tb2RlbDtcbiAgICBjb25zdCBoZWxwZXIgPSB0aGlzLl9hbm5vdGF0aW9ucy5oZWxwZXI7XG4gICAgY29uc3QgYW5ub3RzID0gbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoXG4gICAgICBoZWxwZXIsXG4gICAgICBoZWxwZXIuYW5ub3RhdGlvbnMoZGF0YSkgfHwge31cbiAgICApO1xuXG4gICAgaWYgKGFubm90cz8udHlwZSAhPT0gdW5kZWZpbmVkICYmIE1vZGVsLm1ldGEgIT09IG51bGwpIHtcbiAgICAgIGxldCBzY2hlbWEgPSBNb2RlbC5tZXRhLmZpbmRDaGlsZE9wdGlvbnMoKG8pID0+XG4gICAgICAgIG8uaXNUeXBlT2YoYW5ub3RzLnR5cGUgYXMgc3RyaW5nKVxuICAgICAgKT8uc2NoZW1hO1xuICAgICAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYS5tb2RlbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAvLyBDaGFuZ2UgdG8gY2hpbGQgbW9kZWxcbiAgICAgICAgTW9kZWwgPSBzY2hlbWEubW9kZWw7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhLCB7XG4gICAgICBhbm5vdHMsXG4gICAgICByZXNldCxcbiAgICAgIHBhcmVudDogW3RoaXMsIG51bGxdLFxuICAgIH0pIGFzIE07XG4gIH1cblxuICB0b0VudGl0aWVzKHtcbiAgICBjbGllbnRfaWQgPSBmYWxzZSxcbiAgICBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSxcbiAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgaW5jbHVkZV9jb21wdXRlZCA9IGZhbHNlLFxuICAgIGluY2x1ZGVfa2V5ID0gdHJ1ZSxcbiAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgIGNoYW5nZXNfb25seSA9IGZhbHNlLFxuICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICBjaGFpbiA9IFtdLFxuICB9OiB7XG4gICAgY2xpZW50X2lkPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29uY3VycmVuY3k/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICBjaGFpbj86IChPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KVtdO1xuICB9ID0ge30pOiAoVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9KVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZW50cmllc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgbW9kZWwsIHN0YXRlIH0pID0+XG4gICAgICAgICAgc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkICYmIGNoYWluLmV2ZXJ5KChjKSA9PiBjICE9PSBtb2RlbClcbiAgICAgIClcbiAgICAgIC5tYXAoKHsgbW9kZWwsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgdmFyIGNoYW5nZXNPbmx5ID0gY2hhbmdlc19vbmx5ICYmIHN0YXRlICE9PSBPRGF0YU1vZGVsU3RhdGUuQWRkZWQ7XG4gICAgICAgIHJldHVybiBtb2RlbC50b0VudGl0eSh7XG4gICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICAgICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgICAgIGluY2x1ZGVfY29tcHV0ZWQsXG4gICAgICAgICAgaW5jbHVkZV9rZXksXG4gICAgICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNPbmx5LFxuICAgICAgICAgIGNoYWluOiBbdGhpcywgLi4uY2hhaW5dLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvRW50aXRpZXMoKTtcbiAgfVxuXG4gIGhhc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfTogeyBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9lbnRyaWVzLnNvbWUoKGUpID0+IGUuc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5VbmNoYW5nZWQpIHx8XG4gICAgICB0aGlzLm1vZGVscygpLnNvbWUoKG0pID0+IG0uaGFzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KSlcbiAgICApO1xuICB9XG5cbiAgY2xvbmU8QyBleHRlbmRzIE9EYXRhQ29sbGVjdGlvbjxULCBNPj4oKSB7XG4gICAgbGV0IEN0b3IgPSA8dHlwZW9mIE9EYXRhQ29sbGVjdGlvbj50aGlzLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBuZXcgQ3Rvcih0aGlzLnRvRW50aXRpZXMoSU5DTFVERV9TSEFMTE9XKSwge1xuICAgICAgcmVzb3VyY2U6IHRoaXMucmVzb3VyY2UoKSxcbiAgICAgIGFubm90czogdGhpcy5hbm5vdHMoKSxcbiAgICB9KSBhcyBDO1xuICB9XG5cbiAgZmV0Y2goe1xuICAgIHdpdGhDb3VudCxcbiAgICAuLi5vcHRpb25zXG4gIH06IE9EYXRhT3B0aW9ucyAmIHtcbiAgICB3aXRoQ291bnQ/OiBib29sZWFuO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcblxuICAgIGNvbnN0IG9icyQgPVxuICAgICAgcmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlXG4gICAgICAgID8gcmVzb3VyY2UuZmV0Y2goeyB3aXRoQ291bnQsIC4uLm9wdGlvbnMgfSlcbiAgICAgICAgOiByZXNvdXJjZS5mZXRjaCh7XG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdlbnRpdGllcycsXG4gICAgICAgICAgICB3aXRoQ291bnQsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdyZXF1ZXN0JywgeyBjb2xsZWN0aW9uOiB0aGlzLCB2YWx1ZTogb2JzJCB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKCh7IGVudGl0aWVzLCBhbm5vdHMgfSkgPT4ge1xuICAgICAgICB0aGlzLl9hbm5vdGF0aW9ucyA9IGFubm90cztcbiAgICAgICAgdGhpcy5hc3NpZ24oZW50aXRpZXMgfHwgW10sIHsgcmVzZXQ6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3N5bmMnLCB7IGNvbGxlY3Rpb246IHRoaXMgfSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQWxsKG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMpOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YVByb3BlcnR5UmVzb3VyY2UpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT4gbmV3IEVycm9yKCdmZXRjaEFsbDogUmVzb3VyY2UgaXMgT0RhdGFQcm9wZXJ0eVJlc291cmNlJylcbiAgICAgICk7XG5cbiAgICBjb25zdCBvYnMkID0gcmVzb3VyY2UuZmV0Y2hBbGwob3B0aW9ucyk7XG4gICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdyZXF1ZXN0Jywge1xuICAgICAgICBjb2xsZWN0aW9uOiB0aGlzLFxuICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgbWFwKChlbnRpdGllcykgPT4ge1xuICAgICAgICB0aGlzLl9hbm5vdGF0aW9ucyA9IG5ldyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMoXG4gICAgICAgICAgcmVzb3VyY2U/LmFwaS5vcHRpb25zLmhlbHBlclxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFzc2lnbihlbnRpdGllcyB8fCBbXSwgeyByZXNldDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnc3luYycsIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IHRoaXMsXG4gICAgICAgICAgICBvcHRpb25zOiB7IGVudGl0aWVzIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBhbGwgbW9kZWxzIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqIEBwYXJhbSByZWxNb2RlbCBUaGUgbW9kZWwgaXMgcmVsYXRpb25zaGlwXG4gICAqIEBwYXJhbSBtZXRob2QgVGhlIG1ldGhvZCB0byB1c2VcbiAgICogQHBhcmFtIG9wdGlvbnMgSHR0cE9wdGlvbnNcbiAgICovXG4gIHNhdmUoe1xuICAgIHJlbE1vZGVsID0gZmFsc2UsXG4gICAgbWV0aG9kLFxuICAgIC4uLm9wdGlvbnNcbiAgfTogT0RhdGFPcHRpb25zICYge1xuICAgIHJlbE1vZGVsPzogYm9vbGVhbjtcbiAgICBtZXRob2Q/OiAndXBkYXRlJyB8ICdtb2RpZnknO1xuICB9ID0ge30pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YVByb3BlcnR5UmVzb3VyY2UpXG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT4gbmV3IEVycm9yKCdzYXZlOiBSZXNvdXJjZSBpcyBPRGF0YVByb3BlcnR5UmVzb3VyY2UnKVxuICAgICAgKTtcblxuICAgIGxldCB0b0Rlc3Ryb3lFbnRpdHk6IE1bXSA9IFtdO1xuICAgIGxldCB0b1JlbW92ZVJlZmVyZW5jZTogTVtdID0gW107XG4gICAgbGV0IHRvRGVzdHJveUNvbnRhaW5lZDogTVtdID0gW107XG4gICAgbGV0IHRvQ3JlYXRlRW50aXR5OiBNW10gPSBbXTtcbiAgICBsZXQgdG9BZGRSZWZlcmVuY2U6IE1bXSA9IFtdO1xuICAgIGxldCB0b0NyZWF0ZUNvbnRhaW5lZDogTVtdID0gW107XG4gICAgbGV0IHRvVXBkYXRlRW50aXR5OiBNW10gPSBbXTtcbiAgICBsZXQgdG9VcGRhdGVDb250YWluZWQ6IE1bXSA9IFtdO1xuXG4gICAgdGhpcy5fZW50cmllcy5mb3JFYWNoKCh7IG1vZGVsLCBzdGF0ZSB9KSA9PiB7XG4gICAgICBpZiAoc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICAgIGlmIChyZWxNb2RlbCkge1xuICAgICAgICAgIHRvRGVzdHJveUVudGl0eS5wdXNoKG1vZGVsKTtcbiAgICAgICAgfSBlbHNlIGlmICghbW9kZWwuaXNOZXcoKSkge1xuICAgICAgICAgIHRvUmVtb3ZlUmVmZXJlbmNlLnB1c2gobW9kZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRvRGVzdHJveUNvbnRhaW5lZC5wdXNoKG1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gT0RhdGFNb2RlbFN0YXRlLkFkZGVkKSB7XG4gICAgICAgIGlmIChyZWxNb2RlbCkge1xuICAgICAgICAgIHRvQ3JlYXRlRW50aXR5LnB1c2gobW9kZWwpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtb2RlbC5pc05ldygpKSB7XG4gICAgICAgICAgdG9BZGRSZWZlcmVuY2UucHVzaChtb2RlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG9DcmVhdGVDb250YWluZWQucHVzaChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobW9kZWwuaGFzQ2hhbmdlZCgpKSB7XG4gICAgICAgIHRvVXBkYXRlRW50aXR5LnB1c2gobW9kZWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgIHRvRGVzdHJveUVudGl0eS5sZW5ndGggPiAwIHx8XG4gICAgICB0b1JlbW92ZVJlZmVyZW5jZS5sZW5ndGggPiAwIHx8XG4gICAgICB0b0Rlc3Ryb3lDb250YWluZWQubGVuZ3RoID4gMCB8fFxuICAgICAgdG9DcmVhdGVFbnRpdHkubGVuZ3RoID4gMCB8fFxuICAgICAgdG9BZGRSZWZlcmVuY2UubGVuZ3RoID4gMCB8fFxuICAgICAgdG9DcmVhdGVDb250YWluZWQubGVuZ3RoID4gMCB8fFxuICAgICAgdG9VcGRhdGVFbnRpdHkubGVuZ3RoID4gMCB8fFxuICAgICAgdG9VcGRhdGVDb250YWluZWQubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgb2JzJCA9IGZvcmtKb2luKFtcbiAgICAgICAgLi4udG9EZXN0cm95RW50aXR5Lm1hcCgobSkgPT4gbS5hc0VudGl0eSgoZSkgPT4gZS5kZXN0cm95KG9wdGlvbnMpKSksXG4gICAgICAgIC4uLnRvUmVtb3ZlUmVmZXJlbmNlLm1hcCgobSkgPT4gdGhpcy5yZW1vdmVSZWZlcmVuY2UobSwgb3B0aW9ucykpLFxuICAgICAgICAuLi50b0Rlc3Ryb3lDb250YWluZWQubWFwKChtKSA9PiBtLmRlc3Ryb3kob3B0aW9ucykpLFxuICAgICAgICAuLi50b0NyZWF0ZUVudGl0eS5tYXAoKG0pID0+XG4gICAgICAgICAgbS5hc0VudGl0eSgoZSkgPT4gZS5zYXZlKHsgbWV0aG9kOiAnY3JlYXRlJywgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKSxcbiAgICAgICAgLi4udG9BZGRSZWZlcmVuY2UubWFwKChtKSA9PiB0aGlzLmFkZFJlZmVyZW5jZShtLCBvcHRpb25zKSksXG4gICAgICAgIC4uLnRvQ3JlYXRlQ29udGFpbmVkLm1hcCgobSkgPT5cbiAgICAgICAgICBtLnNhdmUoeyBtZXRob2Q6ICdjcmVhdGUnLCAuLi5vcHRpb25zIH0pXG4gICAgICAgICksXG4gICAgICAgIC4uLnRvVXBkYXRlRW50aXR5Lm1hcCgobSkgPT5cbiAgICAgICAgICBtLmFzRW50aXR5KChlKSA9PiBlLnNhdmUoeyBtZXRob2QsIC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICksXG4gICAgICAgIC4uLnRvVXBkYXRlQ29udGFpbmVkLm1hcCgobSkgPT4gbS5zYXZlKHsgbWV0aG9kLCAuLi5vcHRpb25zIH0pKSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ3JlcXVlc3QnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IG9ic2VydmFibGU6IG9icyQgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gb2JzJC5waXBlKFxuICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzXG4gICAgICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuc3RhdGUgIT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKVxuICAgICAgICAgICAgLm1hcCgoZW50cnkpID0+ICh7IC4uLmVudHJ5LCBzdGF0ZTogT0RhdGFNb2RlbFN0YXRlLlVuY2hhbmdlZCB9KSk7XG4gICAgICAgICAgdGhpcy5ldmVudHMkLmVtaXQobmV3IE9EYXRhTW9kZWxFdmVudCgnc3luYycsIHsgY29sbGVjdGlvbjogdGhpcyB9KSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YodGhpcyk7XG4gIH1cblxuICBwcml2YXRlIGFkZFJlZmVyZW5jZShtb2RlbDogTSwgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8TT4ge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghbW9kZWwuaXNOZXcoKSAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UpIHtcbiAgICAgIHJldHVybiByZXNvdXJjZVxuICAgICAgICAucmVmZXJlbmNlKClcbiAgICAgICAgLmFkZChcbiAgICAgICAgICBtb2RlbC5fbWV0YS5lbnRpdHlSZXNvdXJjZShtb2RlbCkgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPixcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLnBpcGUobWFwKCgpID0+IG1vZGVsKSk7XG4gICAgfVxuICAgIHJldHVybiBvZihtb2RlbCk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRNb2RlbChcbiAgICBtb2RlbDogTSxcbiAgICB7XG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgcG9zaXRpb24gPSAtMSxcbiAgICB9OiB7XG4gICAgICBzaWxlbnQ/OiBib29sZWFuO1xuICAgICAgcmVzZXQ/OiBib29sZWFuO1xuICAgICAgcmVwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgcG9zaXRpb24/OiBudW1iZXI7XG4gICAgfSA9IHt9XG4gICk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleSA9IG1vZGVsLmtleSgpO1xuICAgIGxldCBlbnRyeSA9IHRoaXMuX2ZpbmRFbnRyeSh7XG4gICAgICBtb2RlbCxcbiAgICAgIGtleSxcbiAgICAgIGNpZDogKDxhbnk+bW9kZWwpW3RoaXMuX21vZGVsLm1ldGEuY2lkXSxcbiAgICB9KTtcbiAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCAmJiBlbnRyeS5zdGF0ZSAhPT0gT0RhdGFNb2RlbFN0YXRlLlJlbW92ZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQgJiYgZW50cnkuc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VudHJpZXMuaW5kZXhPZihlbnRyeSk7XG4gICAgICB0aGlzLl9lbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIEVudHJ5XG4gICAgZW50cnkgPSB7XG4gICAgICBzdGF0ZTogcmVzZXQgPyBPRGF0YU1vZGVsU3RhdGUuVW5jaGFuZ2VkIDogT0RhdGFNb2RlbFN0YXRlLkFkZGVkLFxuICAgICAgbW9kZWwsXG4gICAgICBrZXk6IG1vZGVsLmtleSgpLFxuICAgIH07XG4gICAgLy8gU2V0IFBhcmVudFxuICAgIGlmIChyZXBhcmVudCkgbW9kZWwuX3BhcmVudCA9IFt0aGlzLCBudWxsXTtcbiAgICAvLyBTdWJzY3JpYmVcbiAgICB0aGlzLl9zdWJzY3JpYmUoZW50cnkpO1xuICAgIC8vIE5vdyBhZGRcbiAgICBpZiAocG9zaXRpb24gPj0gMCkgdGhpcy5fZW50cmllcy5zcGxpY2UocG9zaXRpb24sIDAsIGVudHJ5KTtcbiAgICBlbHNlIHRoaXMuX2VudHJpZXMucHVzaChlbnRyeSk7XG5cbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgbW9kZWwuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdhZGQnLCB7IG1vZGVsLCBjb2xsZWN0aW9uOiB0aGlzIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZW50cnkubW9kZWw7XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVsKFxuICAgIG1vZGVsOiBNLFxuICAgIHtcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBwb3NpdGlvbiA9IC0xLFxuICAgIH06IHtcbiAgICAgIHNpbGVudD86IGJvb2xlYW47XG4gICAgICByZXNldD86IGJvb2xlYW47XG4gICAgICByZXBhcmVudD86IGJvb2xlYW47XG4gICAgICBwb3NpdGlvbj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCkgcG9zaXRpb24gPSB0aGlzLl9iaXNlY3QobW9kZWwpO1xuICAgIGNvbnN0IGFkZGVkID0gdGhpcy5fYWRkTW9kZWwobW9kZWwsIHsgc2lsZW50LCByZXNldCwgcG9zaXRpb24sIHJlcGFyZW50IH0pO1xuICAgIGlmICghc2lsZW50ICYmIGFkZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiBbYWRkZWRdLCByZW1vdmVkOiBbXSwgbWVyZ2VkOiBbXSB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhZGQoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2VydmVyID0gdHJ1ZSxcbiAgICAgIHBvc2l0aW9uID0gLTEsXG4gICAgfToge1xuICAgICAgc2lsZW50PzogYm9vbGVhbjtcbiAgICAgIHJlcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIHNlcnZlcj86IGJvb2xlYW47XG4gICAgICBwb3NpdGlvbj86IG51bWJlcjtcbiAgICB9ID0ge31cbiAgKTogT2JzZXJ2YWJsZTx0aGlzPiB7XG4gICAgaWYgKHNlcnZlcikge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkUmVmZXJlbmNlKG1vZGVsKS5waXBlKFxuICAgICAgICBtYXAoKG1vZGVsKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRNb2RlbChtb2RlbCwgeyBzaWxlbnQsIHBvc2l0aW9uLCByZXBhcmVudCwgcmVzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZE1vZGVsKG1vZGVsLCB7IHNpbGVudCwgcG9zaXRpb24sIHJlcGFyZW50IH0pO1xuICAgICAgcmV0dXJuIG9mKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUmVmZXJlbmNlKG1vZGVsOiBNLCBvcHRpb25zPzogT0RhdGFPcHRpb25zKTogT2JzZXJ2YWJsZTxNPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIGlmICghbW9kZWwuaXNOZXcoKSAmJiByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UpIHtcbiAgICAgIGxldCB0YXJnZXQgPVxuICAgICAgICB0aGlzLl9tb2RlbC5tZXRhLmFwaS5vcHRpb25zLmRlbGV0ZVJlZkJ5ID09PSAnaWQnXG4gICAgICAgICAgPyAobW9kZWwuX21ldGEuZW50aXR5UmVzb3VyY2UobW9kZWwpIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5fbW9kZWwubWV0YS5hcGkub3B0aW9ucy5kZWxldGVSZWZCeSA9PT0gJ3BhdGgnKSB7XG4gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2Uua2V5KG1vZGVsLmtleSgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvdXJjZVxuICAgICAgICAucmVmZXJlbmNlKClcbiAgICAgICAgLnJlbW92ZSh0YXJnZXQsIG9wdGlvbnMpXG4gICAgICAgIC5waXBlKG1hcCgoKSA9PiBtb2RlbCkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobW9kZWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlTW9kZWwoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHsgc2lsZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApOiBNIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSBtb2RlbC5rZXkoKTtcbiAgICBsZXQgZW50cnkgPSB0aGlzLl9maW5kRW50cnkoe1xuICAgICAgbW9kZWwsXG4gICAgICBrZXksXG4gICAgICBjaWQ6ICg8YW55Pm1vZGVsKVt0aGlzLl9tb2RlbC5tZXRhLmNpZF0sXG4gICAgfSk7XG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQgfHwgZW50cnkuc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEVtaXQgRXZlbnRcbiAgICBpZiAoIXNpbGVudClcbiAgICAgIG1vZGVsLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgncmVtb3ZlJywgeyBtb2RlbCwgY29sbGVjdGlvbjogdGhpcyB9KVxuICAgICAgKTtcblxuICAgIC8vIE5vdyByZW1vdmVcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2VudHJpZXMuaW5kZXhPZihlbnRyeSk7XG4gICAgdGhpcy5fZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGlmICghKHJlc2V0IHx8IGVudHJ5LnN0YXRlID09PSBPRGF0YU1vZGVsU3RhdGUuQWRkZWQpKSB7XG4gICAgICAvLyBNb3ZlIHRvIGVuZCBvZiBhcnJheSBhbmQgbWFyayBhcyByZW1vdmVkXG4gICAgICBlbnRyeS5zdGF0ZSA9IE9EYXRhTW9kZWxTdGF0ZS5SZW1vdmVkO1xuICAgICAgdGhpcy5fZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgdGhpcy5fdW5zdWJzY3JpYmUoZW50cnkpO1xuICAgIHJldHVybiBlbnRyeS5tb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTW9kZWwoXG4gICAgbW9kZWw6IE0sXG4gICAge1xuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgIH06IHsgc2lsZW50PzogYm9vbGVhbjsgcmVzZXQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCByZW1vdmVkID0gdGhpcy5fcmVtb3ZlTW9kZWwobW9kZWwsIHsgc2lsZW50LCByZXNldCB9KTtcbiAgICBpZiAoIXNpbGVudCAmJiByZW1vdmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiBbXSwgcmVtb3ZlZDogW3JlbW92ZWRdLCBtZXJnZWQ6IFtdIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZShcbiAgICBtb2RlbDogTSxcbiAgICB7XG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICAgIHNlcnZlciA9IHRydWUsXG4gICAgfTogeyBzaWxlbnQ/OiBib29sZWFuOyBzZXJ2ZXI/OiBib29sZWFuIH0gPSB7fVxuICApOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICBpZiAoc2VydmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVSZWZlcmVuY2UobW9kZWwpLnBpcGUoXG4gICAgICAgIG1hcCgobW9kZWwpID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vZGVsKG1vZGVsLCB7IHNpbGVudCwgcmVzZXQ6IHRydWUgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZU1vZGVsKG1vZGVsLCB7IHNpbGVudCB9KTtcbiAgICAgIHJldHVybiBvZih0aGlzKTtcbiAgICB9XG4gIH1cblxuICBjcmVhdGUoXG4gICAgYXR0cnM6IFQgPSB7fSBhcyBULFxuICAgIHtcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgICAgc2VydmVyID0gdHJ1ZSxcbiAgICB9OiB7IHNpbGVudD86IGJvb2xlYW47IHNlcnZlcj86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbEZhY3RvcnkoYXR0cnMpO1xuICAgIHJldHVybiAobW9kZWwuaXNWYWxpZCgpICYmIHNlcnZlciA/IG1vZGVsLnNhdmUoKSA6IG9mKG1vZGVsKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgobW9kZWwpID0+IHRoaXMuYWRkKG1vZGVsLCB7IHNpbGVudCwgc2VydmVyIH0pKSxcbiAgICAgIG1hcCgoKSA9PiBtb2RlbClcbiAgICApO1xuICB9XG5cbiAgc2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogYW55KSB7XG4gICAgY29uc3QgTW9kZWwgPSB0aGlzLl9tb2RlbDtcbiAgICBjb25zdCBwYXRoQXJyYXkgPSAoXG4gICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IChwYXRoIGFzIHN0cmluZykubWF0Y2goLyhbXlsuXFxdXSkrL2cpXG4gICAgKSBhcyBhbnlbXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5fZW50cmllc1tOdW1iZXIocGF0aEFycmF5WzBdKV0ubW9kZWw7XG4gICAgICByZXR1cm4gbW9kZWwuc2V0KHBhdGhBcnJheS5zbGljZSgxKSwgdmFsdWUpO1xuICAgIH1cbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA9PT0gMSAmJiBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgbGV0IHRvQWRkOiBNW10gPSBbXTtcbiAgICAgIGxldCB0b01lcmdlOiBNW10gPSBbXTtcbiAgICAgIGxldCB0b1JlbW92ZTogTVtdID0gW107XG4gICAgICBsZXQgaW5kZXggPSBOdW1iZXIocGF0aEFycmF5WzBdKTtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5tb2RlbHMoKVtpbmRleF07XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuX2ZpbmRFbnRyeSh7IG1vZGVsIH0pO1xuICAgICAgaWYgKGVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy9UT0RPOiBSZW1vdmUvQWRkIG9yIE1lcmdlP1xuICAgICAgICAvLyBNZXJnZVxuICAgICAgICBlbnRyeS5tb2RlbC5hc3NpZ24oXG4gICAgICAgICAgdmFsdWUudG9FbnRpdHkoeyBjbGllbnRfaWQ6IHRydWUsIC4uLklOQ0xVREVfREVFUCB9KVxuICAgICAgICApO1xuICAgICAgICBpZiAoZW50cnkubW9kZWwuaGFzQ2hhbmdlZCgpKSB0b01lcmdlLnB1c2gobW9kZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkXG4gICAgICAgIHRoaXMuX2FkZE1vZGVsKHZhbHVlLCB7IHJlcGFyZW50OiB0cnVlIH0pO1xuICAgICAgICB0b0FkZC5wdXNoKG1vZGVsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgICBvcHRpb25zOiB7IGFkZGVkOiB0b0FkZCwgcmVtb3ZlZDogdG9SZW1vdmUsIG1lcmdlZDogdG9NZXJnZSB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQocGF0aDogbnVtYmVyKTogTSB8IHVuZGVmaW5lZDtcbiAgZ2V0KHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogYW55O1xuICBnZXQocGF0aDogYW55KTogYW55IHtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuICAgIGNvbnN0IHBhdGhBcnJheSA9IChcbiAgICAgIFR5cGVzLmlzQXJyYXkocGF0aCkgPyBwYXRoIDogYCR7cGF0aH1gLm1hdGNoKC8oW15bLlxcXV0pKy9nKVxuICAgICkgYXMgYW55W107XG4gICAgaWYgKHBhdGhBcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm1vZGVscygpW051bWJlcihwYXRoQXJyYXlbMF0pXTtcbiAgICBpZiAocGF0aEFycmF5Lmxlbmd0aCA+IDEgJiYgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5nZXQocGF0aEFycmF5LnNsaWNlKDEpKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVzZXQoe1xuICAgIHBhdGgsXG4gICAgc2lsZW50ID0gZmFsc2UsXG4gIH06IHsgcGF0aD86IHN0cmluZyB8IHN0cmluZ1tdOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fSkge1xuICAgIGlmIChUeXBlcy5pc0VtcHR5KHBhdGgpKSB7XG4gICAgICB0aGlzLm1vZGVscygpLmZvckVhY2goKG0pID0+IG0ucmVzZXQoeyBzaWxlbnQgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuICAgICAgY29uc3QgcGF0aEFycmF5ID0gKFxuICAgICAgICBUeXBlcy5pc0FycmF5KHBhdGgpID8gcGF0aCA6IGAke3BhdGh9YC5tYXRjaCgvKFteWy5cXF1dKSsvZylcbiAgICAgICkgYXMgYW55W107XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMubW9kZWxzKClbTnVtYmVyKHBhdGhBcnJheVswXSldO1xuICAgICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLnJlc2V0KHsgcGF0aDogcGF0aEFycmF5LnNsaWNlKDEpLCBzaWxlbnQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXNzaWduKFxuICAgIG9iamVjdHM6IFBhcnRpYWw8VD5bXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10gfCBNW10sXG4gICAge1xuICAgICAgcmVzZXQgPSBmYWxzZSxcbiAgICAgIHJlcGFyZW50ID0gZmFsc2UsXG4gICAgICBzaWxlbnQgPSBmYWxzZSxcbiAgICB9OiB7IHJlc2V0PzogYm9vbGVhbjsgcmVwYXJlbnQ/OiBib29sZWFuOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICBjb25zdCBNb2RlbCA9IHRoaXMuX21vZGVsO1xuXG4gICAgbGV0IHRvQWRkOiBNW10gPSBbXTtcbiAgICBsZXQgdG9NZXJnZTogTVtdID0gW107XG4gICAgbGV0IHRvUmVtb3ZlOiBNW10gPSBbXTtcbiAgICBsZXQgdG9Tb3J0OiBbTSwgbnVtYmVyXVtdID0gW107XG4gICAgbGV0IG1vZGVsTWFwOiBzdHJpbmdbXSA9IFtdO1xuICAgIG9iamVjdHMuZm9yRWFjaCgob2JqLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaXNNb2RlbCA9IE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwob2JqKTtcbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIE1vZGVsICE9PSBudWxsICYmIE1vZGVsLm1ldGEgPyBNb2RlbC5tZXRhLnJlc29sdmVLZXkob2JqKSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGNpZCA9XG4gICAgICAgIE1vZGVsLm1ldGEuY2lkIGluIG9iaiA/ICg8YW55Pm9iailbTW9kZWwubWV0YS5jaWRdIDogdW5kZWZpbmVkO1xuICAgICAgLy8gVHJ5IGZpbmQgZW50cnlcbiAgICAgIGNvbnN0IGVudHJ5ID0gaXNNb2RlbFxuICAgICAgICA/IHRoaXMuX2ZpbmRFbnRyeSh7IG1vZGVsOiBvYmogYXMgTSB9KSAvLyBCeSBNb2RlbFxuICAgICAgICA6IHRoaXMuX2ZpbmRFbnRyeSh7IGNpZCwga2V5IH0pOyAvLyBCeSBDaWQgb3IgS2V5XG5cbiAgICAgIGxldCBtb2RlbDogTTtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIE1lcmdlXG4gICAgICAgIG1vZGVsID0gZW50cnkubW9kZWw7XG4gICAgICAgIGlmIChtb2RlbCAhPT0gb2JqKSB7XG4gICAgICAgICAgLy8gR2V0IGVudGl0eSBmcm9tIG1vZGVsXG4gICAgICAgICAgaWYgKGlzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IChvYmogYXMgTSkudG9FbnRpdHkoe1xuICAgICAgICAgICAgICBjbGllbnRfaWQ6IHRydWUsXG4gICAgICAgICAgICAgIC4uLklOQ0xVREVfREVFUCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbW9kZWwuYXNzaWduKGVudGl0eSwgeyByZXNldCwgc2lsZW50IH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBoZWxwZXIgPSB0aGlzLl9hbm5vdGF0aW9ucy5oZWxwZXI7XG4gICAgICAgICAgICBjb25zdCBhbm5vdHMgPSBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyhcbiAgICAgICAgICAgICAgaGVscGVyLFxuICAgICAgICAgICAgICBoZWxwZXIuYW5ub3RhdGlvbnMob2JqKSB8fCB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IGFubm90cy5hdHRyaWJ1dGVzPFQ+KG9iaiwgJ2Z1bGwnKTtcbiAgICAgICAgICAgIG1vZGVsLl9hbm5vdGF0aW9ucyA9IGFubm90cztcbiAgICAgICAgICAgIG1vZGVsLmFzc2lnbihlbnRpdHksIHsgcmVzZXQsIHNpbGVudCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gTW9kZWwgQ2hhbmdlP1xuICAgICAgICAgIGlmIChtb2RlbC5oYXNDaGFuZ2VkKCkpIHRvTWVyZ2UucHVzaChtb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSGFzIFNvcnQgb3IgSW5kZXggQ2hhbmdlP1xuICAgICAgICBpZiAodG9Tb3J0Lmxlbmd0aCA+IDAgfHwgaW5kZXggIT09IHRoaXMubW9kZWxzKCkuaW5kZXhPZihtb2RlbCkpIHtcbiAgICAgICAgICB0b1NvcnQucHVzaChbbW9kZWwsIGluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZFxuICAgICAgICBtb2RlbCA9IGlzTW9kZWxcbiAgICAgICAgICA/IChvYmogYXMgTSlcbiAgICAgICAgICA6IHRoaXMubW9kZWxGYWN0b3J5KG9iaiBhcyBQYXJ0aWFsPFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIHtcbiAgICAgICAgICAgICAgcmVzZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdG9BZGQucHVzaChtb2RlbCk7XG4gICAgICB9XG4gICAgICBtb2RlbE1hcC5wdXNoKCg8YW55Pm1vZGVsKVtNb2RlbC5tZXRhLmNpZF0pO1xuICAgIH0pO1xuICAgIHRoaXMuX2VudHJpZXNcbiAgICAgIC5maWx0ZXIoKGUpID0+IG1vZGVsTWFwLmluZGV4T2YoKDxhbnk+ZS5tb2RlbClbTW9kZWwubWV0YS5jaWRdKSA9PT0gLTEpXG4gICAgICAuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgdG9SZW1vdmUucHVzaChlbnRyeS5tb2RlbCk7XG4gICAgICB9KTtcblxuICAgIHRvUmVtb3ZlLmZvckVhY2goKG0pID0+IHtcbiAgICAgIHRoaXMuX3JlbW92ZU1vZGVsKG0sIHsgc2lsZW50LCByZXNldCB9KTtcbiAgICB9KTtcbiAgICB0b0FkZC5mb3JFYWNoKChtKSA9PiB7XG4gICAgICB0aGlzLl9hZGRNb2RlbChtLCB7IHNpbGVudCwgcmVzZXQsIHJlcGFyZW50IH0pO1xuICAgIH0pO1xuICAgIHRvU29ydC5mb3JFYWNoKChtKSA9PiB7XG4gICAgICB0aGlzLl9yZW1vdmVNb2RlbChtWzBdLCB7IHNpbGVudDogdHJ1ZSwgcmVzZXQgfSk7XG4gICAgICB0aGlzLl9hZGRNb2RlbChtWzBdLCB7IHNpbGVudDogdHJ1ZSwgcmVzZXQsIHBvc2l0aW9uOiBtWzFdLCByZXBhcmVudCB9KTtcbiAgICB9KTtcblxuICAgIGlmIChcbiAgICAgICghc2lsZW50ICYmXG4gICAgICAgICh0b0FkZC5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgdG9SZW1vdmUubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHRvTWVyZ2UubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHRvU29ydC5sZW5ndGggPiAwKSkgfHxcbiAgICAgIHJlc2V0XG4gICAgKSB7XG4gICAgICB0aGlzLl9zb3J0QnkgPSBudWxsO1xuICAgICAgdGhpcy5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQocmVzZXQgPyAncmVzZXQnIDogJ3VwZGF0ZScsIHtcbiAgICAgICAgICBjb2xsZWN0aW9uOiB0aGlzLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGFkZGVkOiB0b0FkZCxcbiAgICAgICAgICAgIHJlbW92ZWQ6IHRvUmVtb3ZlLFxuICAgICAgICAgICAgbWVyZ2VkOiB0b01lcmdlLFxuICAgICAgICAgICAgc29ydGVkOiB0b1NvcnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcXVlcnkoZnVuYzogKHE6IE9EYXRhUXVlcnlPcHRpb25zSGFuZGxlcjxUPikgPT4gdm9pZCkge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgIHJlc291cmNlLnF1ZXJ5KGZ1bmMpO1xuICAgIHRoaXMuYXR0YWNoKHJlc291cmNlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNhbGxGdW5jdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlKSB7XG4gICAgICBjb25zdCBmdW5jID0gcmVzb3VyY2UuZnVuY3Rpb248UCwgUj4obmFtZSk7XG4gICAgICBmdW5jLnF1ZXJ5KChxKSA9PiBxLmFwcGx5KG9wdGlvbnMpKTtcbiAgICAgIHN3aXRjaCAocmVzcG9uc2VUeXBlKSB7XG4gICAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSAnbW9kZWwnOlxuICAgICAgICAgIHJldHVybiBmdW5jLmNhbGxNb2RlbChwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICBjYXNlICdjb2xsZWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsQ29sbGVjdGlvbihwYXJhbXMsIG9wdGlvbnMpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgRXJyb3IoYGNhbGxGdW5jdGlvbjogQ2FuJ3QgZnVuY3Rpb24gd2l0aG91dCBPRGF0YUVudGl0eVNldFJlc291cmNlYClcbiAgICApO1xuICB9XG5cbiAgY2FsbEFjdGlvbjxQLCBSPihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBQIHwgbnVsbCxcbiAgICByZXNwb25zZVR5cGU6ICdwcm9wZXJ0eScgfCAnbW9kZWwnIHwgJ2NvbGxlY3Rpb24nIHwgJ25vbmUnLFxuICAgIHsgLi4ub3B0aW9ucyB9OiB7fSAmIE9EYXRhUXVlcnlBcmd1bWVudHNPcHRpb25zPFI+ID0ge31cbiAgKTogT2JzZXJ2YWJsZTxSIHwgT0RhdGFNb2RlbDxSPiB8IE9EYXRhQ29sbGVjdGlvbjxSLCBPRGF0YU1vZGVsPFI+PiB8IG51bGw+IHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UoKTtcbiAgICBpZiAoIShyZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBuZXcgRXJyb3IoYGNhbGxBY3Rpb246IENhbid0IGFjdGlvbiB3aXRob3V0IE9EYXRhRW50aXR5U2V0UmVzb3VyY2VgKVxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aW9uID0gcmVzb3VyY2UuYWN0aW9uPFAsIFI+KG5hbWUpO1xuICAgIGFjdGlvbi5xdWVyeSgocSkgPT4gcS5hcHBseShvcHRpb25zKSk7XG4gICAgc3dpdGNoIChyZXNwb25zZVR5cGUpIHtcbiAgICAgIGNhc2UgJ3Byb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsUHJvcGVydHkocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ21vZGVsJzpcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5jYWxsTW9kZWwocGFyYW1zLCBvcHRpb25zKTtcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGxDb2xsZWN0aW9uKHBhcmFtcywgb3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYWN0aW9uLmNhbGwocGFyYW1zLCB7IHJlc3BvbnNlVHlwZSwgLi4ub3B0aW9ucyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91bnN1YnNjcmliZShlbnRyeTogT0RhdGFNb2RlbEVudHJ5PFQsIE0+KSB7XG4gICAgaWYgKGVudHJ5LnN1YnNjcmlwdGlvbikge1xuICAgICAgZW50cnkuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICBkZWxldGUgZW50cnkuc3Vic2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnNjcmliZShlbnRyeTogT0RhdGFNb2RlbEVudHJ5PFQsIE0+KSB7XG4gICAgaWYgKGVudHJ5LnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xsZWN0aW9uOiBTdWJzY3JpcHRpb24gYWxyZWFkeSBleGlzdHMnKTtcbiAgICB9XG4gICAgZW50cnkuc3Vic2NyaXB0aW9uID0gZW50cnkubW9kZWwuZXZlbnRzJC5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQ6IE9EYXRhTW9kZWxFdmVudDxUPikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgQlVCQkxJTkcuaW5kZXhPZihldmVudC5uYW1lKSAhPT0gLTEgJiZcbiAgICAgICAgICBldmVudC5idWJibGluZyAmJlxuICAgICAgICAgICFldmVudC52aXNpdGVkKHRoaXMpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChldmVudC5tb2RlbCA9PT0gZW50cnkubW9kZWwpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5uYW1lID09PSAnZGVzdHJveScpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbChlbnRyeS5tb2RlbCwgeyByZXNldDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQubmFtZSA9PT0gJ2NoYW5nZScgJiYgZXZlbnQub3B0aW9ucz8ua2V5KSB7XG4gICAgICAgICAgICAgIGVudHJ5LmtleSA9IGVudHJ5Lm1vZGVsLmtleSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbHMoKS5pbmRleE9mKGVudHJ5Lm1vZGVsKTtcbiAgICAgICAgICBldmVudC5wdXNoKHRoaXMsIGluZGV4KTtcbiAgICAgICAgICB0aGlzLmV2ZW50cyQuZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZEVudHJ5KHtcbiAgICBtb2RlbCxcbiAgICBjaWQsXG4gICAga2V5LFxuICB9OiB7XG4gICAgbW9kZWw/OiBPRGF0YU1vZGVsPFQ+O1xuICAgIGNpZD86IHN0cmluZztcbiAgICBrZXk/OiBFbnRpdHlLZXk8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuX2VudHJpZXMuZmluZCgoZW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGJ5TW9kZWwgPSBtb2RlbCAhPT0gdW5kZWZpbmVkICYmIGVudHJ5Lm1vZGVsLmVxdWFscyhtb2RlbCk7XG4gICAgICBjb25zdCBieUNpZCA9XG4gICAgICAgIGNpZCAhPT0gdW5kZWZpbmVkICYmICg8YW55PmVudHJ5Lm1vZGVsKVt0aGlzLl9tb2RlbC5tZXRhLmNpZF0gPT09IGNpZDtcbiAgICAgIGNvbnN0IGJ5S2V5ID1cbiAgICAgICAga2V5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgZW50cnkua2V5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgVHlwZXMuaXNFcXVhbChlbnRyeS5rZXksIGtleSk7XG4gICAgICByZXR1cm4gYnlNb2RlbCB8fCBieUNpZCB8fCBieUtleTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENvbGxlY3Rpb24gZnVuY3Rpb25zXG4gIGVxdWFscyhvdGhlcjogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+KSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQ29sbGVjdGlvbic7XG4gIH1cblxuICBwdWJsaWMgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgbGV0IHBvaW50ZXIgPSAwO1xuICAgIGxldCBtb2RlbHMgPSB0aGlzLm1vZGVscygpO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PE0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiBwb2ludGVyID09PSBtb2RlbHMubGVuZ3RoLFxuICAgICAgICAgIHZhbHVlOiBtb2RlbHNbcG9pbnRlcisrXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGZpbHRlcihwcmVkaWNhdGU6ICh2YWx1ZTogTSwgaW5kZXg6IG51bWJlciwgYXJyYXk6IE1bXSkgPT4gdW5rbm93biwgdGhpc0FyZz86IGFueSk6IE1bXSB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxzKCkuZmlsdGVyKHByZWRpY2F0ZSk7XG4gIH1cblxuICBtYXA8VT4oY2FsbGJhY2tmbjogKHZhbHVlOiBNLCBpbmRleDogbnVtYmVyLCBhcnJheTogTVtdKSA9PiBVLCB0aGlzQXJnPzogYW55KTogVVtdIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHMoKS5tYXAoY2FsbGJhY2tmbiwgdGhpc0FyZyk7XG4gIH1cblxuICBmaW5kKHByZWRpY2F0ZTogKHZhbHVlOiBNLCBpbmRleDogbnVtYmVyLCBvYmo6IE1bXSkgPT4gdW5rbm93biwgdGhpc0FyZz86IGFueSk6IE0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuICBcbiAgcmVkdWNlPFU+KGNhbGxiYWNrZm46IChwcmV2aW91c1ZhbHVlOiBVLCBjdXJyZW50VmFsdWU6IE0sIGN1cnJlbnRJbmRleDogbnVtYmVyLCBhcnJheTogTVtdKSA9PiBVLCBpbml0aWFsVmFsdWU6IFUpOiBVIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlbHMoKS5yZWR1Y2UoY2FsbGJhY2tmbiwgaW5pdGlhbFZhbHVlKTtcbiAgfVxuXG4gIGZpcnN0KCk6IE0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpWzBdO1xuICB9XG5cbiAgbGFzdCgpOiBNIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RlbHMgPSB0aGlzLm1vZGVscygpO1xuICAgIHJldHVybiBtb2RlbHNbbW9kZWxzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgbmV4dChtb2RlbDogTSk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleE9mKG1vZGVsKTtcbiAgICBpZiAoaW5kZXggPT09IC0xIHx8IGluZGV4ID09PSB0aGlzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldChpbmRleCArIDEpO1xuICB9XG5cbiAgcHJldihtb2RlbDogTSk6IE0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleE9mKG1vZGVsKTtcbiAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0KGluZGV4IC0gMSk7XG4gIH1cblxuICBldmVyeShwcmVkaWNhdGU6IChtOiBNLCBpbmRleDogbnVtYmVyKSA9PiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZWxzKCkuZXZlcnkocHJlZGljYXRlKTtcbiAgfVxuXG4gIHNvbWUocHJlZGljYXRlOiAobTogTSwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVscygpLnNvbWUocHJlZGljYXRlKTtcbiAgfVxuXG4gIGNvbnRhaW5zKG1vZGVsOiBNKSB7XG4gICAgcmV0dXJuIHRoaXMuc29tZSgobSkgPT4gbS5lcXVhbHMobW9kZWwpKTtcbiAgfVxuXG4gIGluZGV4T2YobW9kZWw6IE0pOiBudW1iZXIge1xuICAgIGNvbnN0IG1vZGVscyA9IHRoaXMubW9kZWxzKCk7XG4gICAgY29uc3QgbSA9IG1vZGVscy5maW5kKChtKSA9PiBtLmVxdWFscyhtb2RlbCkpO1xuICAgIHJldHVybiBtID09PSB1bmRlZmluZWQgPyAtMSA6IG1vZGVscy5pbmRleE9mKG0pO1xuICB9XG5cbiAgLy8jcmVnaW9uIFNvcnRcbiAgcHJpdmF0ZSBfYmlzZWN0KG1vZGVsOiBNKSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgaWYgKHRoaXMuX3NvcnRCeSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmUobW9kZWwsIHRoaXMuX2VudHJpZXNbaW5kZXhdLCB0aGlzLl9zb3J0QnksIDApIDwgMCkge1xuICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBwcml2YXRlIF9jb21wYXJlKFxuICAgIGUxOiBPRGF0YU1vZGVsRW50cnk8VCwgTT4gfCBNLFxuICAgIGUyOiBPRGF0YU1vZGVsRW50cnk8VCwgTT4gfCBNLFxuICAgIGJ5OiB7IGZpZWxkOiBzdHJpbmcgfCBrZXlvZiBUOyBvcmRlcj86IDEgfCAtMSB9W10sXG4gICAgaW5kZXg6IG51bWJlclxuICApOiBudW1iZXIge1xuICAgIGxldCBtMSA9IE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoZTEpXG4gICAgICA/IChlMSBhcyBNKVxuICAgICAgOiAoZTEgYXMgT0RhdGFNb2RlbEVudHJ5PFQsIE0+KS5tb2RlbDtcbiAgICBsZXQgbTIgPSBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGUyKVxuICAgICAgPyAoZTIgYXMgTSlcbiAgICAgIDogKGUyIGFzIE9EYXRhTW9kZWxFbnRyeTxULCBNPikubW9kZWw7XG4gICAgbGV0IHZhbHVlMSA9IG0xLmdldChieVtpbmRleF0uZmllbGQgYXMgc3RyaW5nKTtcbiAgICBsZXQgdmFsdWUyID0gbTIuZ2V0KGJ5W2luZGV4XS5maWVsZCBhcyBzdHJpbmcpO1xuICAgIGxldCByZXN1bHQ6IG51bWJlciA9IDA7XG5cbiAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xO1xuICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwO1xuICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT0gJ3N0cmluZycgfHwgdmFsdWUxIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICBpZiAodmFsdWUxLmxvY2FsZUNvbXBhcmUgJiYgdmFsdWUxICE9IHZhbHVlMikge1xuICAgICAgICByZXR1cm4gKGJ5W2luZGV4XS5vcmRlciB8fCAxKSAqIHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHZhbHVlMSA8IHZhbHVlMiA/IC0xIDogMTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUxID09IHZhbHVlMikge1xuICAgICAgcmV0dXJuIGJ5Lmxlbmd0aCAtIDEgPiBpbmRleCA/IHRoaXMuX2NvbXBhcmUoZTEsIGUyLCBieSwgaW5kZXggKyAxKSA6IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIChieVtpbmRleF0ub3JkZXIgfHwgMSkgKiByZXN1bHQ7XG4gIH1cblxuICBfc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmcgfCBrZXlvZiBUOyBvcmRlcj86IDEgfCAtMSB9W10gfCBudWxsID0gbnVsbDtcbiAgaXNTb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRCeSAhPT0gbnVsbDtcbiAgfVxuXG4gIHNvcnQoXG4gICAgYnk6IHsgZmllbGQ6IHN0cmluZyB8IGtleW9mIFQ7IG9yZGVyPzogMSB8IC0xIH1bXSxcbiAgICB7IHNpbGVudCB9OiB7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIHRoaXMuX3NvcnRCeSA9IGJ5O1xuICAgIHRoaXMuX2VudHJpZXMgPSB0aGlzLl9lbnRyaWVzLnNvcnQoXG4gICAgICAoZTE6IE9EYXRhTW9kZWxFbnRyeTxULCBNPiwgZTI6IE9EYXRhTW9kZWxFbnRyeTxULCBNPikgPT5cbiAgICAgICAgdGhpcy5fY29tcGFyZShlMSwgZTIsIGJ5LCAwKVxuICAgICk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCd1cGRhdGUnLCB7XG4gICAgICAgICAgY29sbGVjdGlvbjogdGhpcyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIC8vI2VuZHJlZ2lvblxufVxuIl19