@reveldigital/player-client 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,7 @@ import { Subject } from 'rxjs';
3
3
  * Angular-friendly wrapper around the global `gadgets.reveldigital.datatable` library.
4
4
  *
5
5
  * Provides typed Promise-based methods and RxJS Observables for real-time events.
6
+ * All event emissions run inside Angular's zone to ensure change detection triggers.
6
7
  *
7
8
  * ```typescript
8
9
  * const dt = this.client.createDataTable('tbl_menu_items');
@@ -22,16 +23,18 @@ export class DataTableRef {
22
23
  * Creates a new DataTableRef.
23
24
  *
24
25
  * @param tableId - The data table ID (e.g. 'tbl_menu_items')
26
+ * @param zone - Angular NgZone for ensuring change detection on callbacks
25
27
  * @param options - Optional configuration overrides
26
28
  * @throws Error if the global datatable library is not loaded
27
29
  */
28
- constructor(tableId, options) {
30
+ constructor(tableId, zone, options) {
29
31
  /** Emits when an existing row is modified. */
30
32
  this.rowUpdated$ = new Subject();
31
33
  /** Emits when a new row is added. */
32
34
  this.rowCreated$ = new Subject();
33
35
  /** Emits when a row is removed. */
34
36
  this.rowDeleted$ = new Subject();
37
+ this._zone = zone;
35
38
  const lib = window.gadgets?.['reveldigital.datatable'];
36
39
  if (!lib || typeof lib.create !== 'function') {
37
40
  throw new Error('RevelDigital DataTable library is not available. ' +
@@ -112,20 +115,27 @@ export class DataTableRef {
112
115
  this.rowDeleted$.complete();
113
116
  }
114
117
  /** @ignore */
115
- static _fromInstance(instance) {
118
+ static _fromInstance(instance, zone) {
116
119
  const ref = Object.create(DataTableRef.prototype);
117
120
  ref.rowUpdated$ = new Subject();
118
121
  ref.rowCreated$ = new Subject();
119
122
  ref.rowDeleted$ = new Subject();
120
123
  ref._instance = instance;
124
+ ref._zone = zone;
121
125
  ref._wireEvents();
122
126
  return ref;
123
127
  }
124
128
  /** @ignore */
125
129
  _wireEvents() {
126
- this._onRowUpdated = (change) => this.rowUpdated$.next(change);
127
- this._onRowCreated = (change) => this.rowCreated$.next(change);
128
- this._onRowDeleted = (change) => this.rowDeleted$.next(change);
130
+ this._onRowUpdated = (change) => {
131
+ this._zone.run(() => this.rowUpdated$.next(change));
132
+ };
133
+ this._onRowCreated = (change) => {
134
+ this._zone.run(() => this.rowCreated$.next(change));
135
+ };
136
+ this._onRowDeleted = (change) => {
137
+ this._zone.run(() => this.rowDeleted$.next(change));
138
+ };
129
139
  this._instance.on('rowUpdated', this._onRowUpdated);
130
140
  this._instance.on('rowCreated', this._onRowCreated);
131
141
  this._instance.on('rowDeleted', this._onRowDeleted);
@@ -155,10 +165,11 @@ export class DataTablePrefRef {
155
165
  * Creates a new DataTablePrefRef from a gadget preference JSON string.
156
166
  *
157
167
  * @param prefValue - The raw gadget preference string (JSON)
168
+ * @param zone - Angular NgZone for ensuring change detection on callbacks
158
169
  * @param options - Optional configuration overrides
159
170
  * @throws Error if the global datatable library is not loaded
160
171
  */
161
- constructor(prefValue, options) {
172
+ constructor(prefValue, zone, options) {
162
173
  const lib = window.gadgets?.['reveldigital.datatable'];
163
174
  if (!lib || typeof lib.createFromPref !== 'function') {
164
175
  throw new Error('RevelDigital DataTable library is not available. ' +
@@ -166,7 +177,7 @@ export class DataTablePrefRef {
166
177
  }
167
178
  this._config = lib.createFromPref(prefValue, options);
168
179
  this.pref = this._config.pref;
169
- this.dataTable = DataTableRef._fromInstance(this._config.dt);
180
+ this.dataTable = DataTableRef._fromInstance(this._config.dt, zone);
170
181
  }
171
182
  /**
172
183
  * Fetches rows with the filter and sort settings from the preference automatically applied.
@@ -193,4 +204,4 @@ export class DataTablePrefRef {
193
204
  this.dataTable.dispose();
194
205
  }
195
206
  }
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvZGF0YXRhYmxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVy9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBcUJ2Qjs7Ozs7O09BTUc7SUFDSCxZQUFZLE9BQWUsRUFBRSxPQUEyQjtRQTFCeEQsOENBQThDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQscUNBQXFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQsbUNBQW1DO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFxQnhELE1BQU0sR0FBRyxHQUFJLE1BQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbURBQW1EO2dCQUNuRCwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxPQUFPLENBQUMsTUFBOEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVM7UUFD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eEQsTUFBTSxHQUFHLEdBQUksTUFBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FDYixtREFBbUQ7Z0JBQ25ELDBEQUEwRCxDQUMzRCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxlQUFlLENBQUMsTUFBOEI7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQsXG4gIElEYXRhVGFibGVDb2x1bW4sXG4gIElEYXRhVGFibGVPcHRpb25zLFxuICBJRGF0YVRhYmxlUHJlZixcbiAgSURhdGFUYWJsZVF1ZXJ5UGFyYW1zLFxuICBJRGF0YVRhYmxlUmVzdWx0LFxuICBJRGF0YVRhYmxlU2NoZW1hXG59IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBbmd1bGFyLWZyaWVuZGx5IHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgYGdhZGdldHMucmV2ZWxkaWdpdGFsLmRhdGF0YWJsZWAgbGlicmFyeS5cbiAqXG4gKiBQcm92aWRlcyB0eXBlZCBQcm9taXNlLWJhc2VkIG1ldGhvZHMgYW5kIFJ4SlMgT2JzZXJ2YWJsZXMgZm9yIHJlYWwtdGltZSBldmVudHMuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gKlxuICogLy8gRmV0Y2ggcm93c1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7IHNvcnQ6ICdwcmljZScsIHNvcnREaXI6ICdhc2MnIH0pO1xuICpcbiAqIC8vIFJlYWwtdGltZSB1cGRhdGVzXG4gKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdVcGRhdGVkOicsIGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGR0LmRpc3Bvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlUmVmIHtcblxuICAvKiogRW1pdHMgd2hlbiBhbiBleGlzdGluZyByb3cgaXMgbW9kaWZpZWQuICovXG4gIHB1YmxpYyByb3dVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIG5ldyByb3cgaXMgYWRkZWQuICovXG4gIHB1YmxpYyByb3dDcmVhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIHJvdyBpcyByZW1vdmVkLiAqL1xuICBwdWJsaWMgcm93RGVsZXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IGFueTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vblJvd1VwZGF0ZWQhOiAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHZvaWQ7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29uUm93Q3JlYXRlZCE6IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4gdm9pZDtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dEZWxldGVkITogKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IERhdGFUYWJsZVJlZi5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlSWQgLSBUaGUgZGF0YSB0YWJsZSBJRCAoZS5nLiAndGJsX21lbnVfaXRlbXMnKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucykge1xuXG4gICAgY29uc3QgbGliID0gKHdpbmRvdyBhcyBhbnkpLmdhZGdldHM/LlsncmV2ZWxkaWdpdGFsLmRhdGF0YWJsZSddO1xuXG4gICAgaWYgKCFsaWIgfHwgdHlwZW9mIGxpYi5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JldmVsRGlnaXRhbCBEYXRhVGFibGUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLiAnICtcbiAgICAgICAgJ0Vuc3VyZSB0aGUgZGF0YXRhYmxlIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgdGhpcyBnYWRnZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IGxpYi5jcmVhdGUodGFibGVJZCwgb3B0aW9ucyk7XG4gICAgdGhpcy5fd2lyZUV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyBmcm9tIHRoZSBkYXRhIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyAoZmlsdGVyLCBzb3J0LCBwYWdpbmF0aW9uKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0IHNldFxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGR0LmdldFJvd3Moe1xuICAgKiAgIGZpbHRlcjogeyBjYXRlZ29yeTogJ0VudHJlZScsIHByaWNlOiB7IG9wOiAnbHRlJywgdmFsdWU6IDI1IH0gfSxcbiAgICogICBzb3J0OiAnaXRlbU5hbWUnLFxuICAgKiAgIHNvcnREaXI6ICdhc2MnLFxuICAgKiAgIHBhZ2VTaXplOiAyMFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93cyhwYXJhbXM/OiBJRGF0YVRhYmxlUXVlcnlQYXJhbXMpOiBQcm9taXNlPElEYXRhVGFibGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0Um93cyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHRhYmxlIHNjaGVtYSAoY29sdW1uIGRlZmluaXRpb25zIGFuZCBtZXRhZGF0YSkuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0YWJsZSBzY2hlbWFcbiAgICovXG4gIHB1YmxpYyBnZXRTY2hlbWEoKTogUHJvbWlzZTxJRGF0YVRhYmxlU2NoZW1hPiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmdldFNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdmlzaWJsZSAobm9uLWhpZGRlbikgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5IG9mIHZpc2libGUgY29sdW1uIGRlZmluaXRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0VmlzaWJsZUNvbHVtbnMoKTogUHJvbWlzZTxJRGF0YVRhYmxlQ29sdW1uW10+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHJvd3Mgd2l0aCBoaWRkZW4gY29sdW1uIGRhdGEgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIChzYW1lIGFzIGdldFJvd3MpXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQgc2V0IHdpdGggaGlkZGVuIGZpZWxkcyByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VmlzaWJsZVJvd3MocGFyYW1zPzogSURhdGFUYWJsZVF1ZXJ5UGFyYW1zKTogUHJvbWlzZTxJRGF0YVRhYmxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmdldFZpc2libGVSb3dzKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHBvbGxpbmcgZm9yIGNoYW5nZXMgYXQgdGhlIGdpdmVuIGludGVydmFsLlxuICAgKiBFbWl0cyBvbiBgcm93VXBkYXRlZCRgIHdoZW4gbmV3IGRhdGEgaXMgZGV0ZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnRlcnZhbE1zIC0gUG9sbGluZyBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQgMzAwMDApXG4gICAqL1xuICBwdWJsaWMgc3RhcnRQb2xsaW5nKGludGVydmFsTXM/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5zdGFydFBvbGxpbmcoaW50ZXJ2YWxNcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgcG9sbGluZyBmb3IgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBzdG9wUG9sbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5zdG9wUG9sbGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXM6IHN0b3BzIHBvbGxpbmcsIGNsb3NlcyB0aGUgcmVhbC10aW1lIGNvbm5lY3Rpb24sXG4gICAqIHJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzLCBhbmQgY29tcGxldGVzIGFsbCBSeEpTIG9ic2VydmFibGVzLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub2ZmKCdyb3dVcGRhdGVkJywgdGhpcy5fb25Sb3dVcGRhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vZmYoJ3Jvd0NyZWF0ZWQnLCB0aGlzLl9vblJvd0NyZWF0ZWQpO1xuICAgIHRoaXMuX2luc3RhbmNlLm9mZigncm93RGVsZXRlZCcsIHRoaXMuX29uUm93RGVsZXRlZCk7XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLnJvd1VwZGF0ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yb3dDcmVhdGVkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucm93RGVsZXRlZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHN0YXRpYyBfZnJvbUluc3RhbmNlKGluc3RhbmNlOiBhbnkpOiBEYXRhVGFibGVSZWYge1xuICAgIGNvbnN0IHJlZiA9IE9iamVjdC5jcmVhdGUoRGF0YVRhYmxlUmVmLnByb3RvdHlwZSkgYXMgRGF0YVRhYmxlUmVmO1xuICAgIHJlZi5yb3dVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcbiAgICByZWYucm93Q3JlYXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgcmVmLnJvd0RlbGV0ZWQkID0gbmV3IFN1YmplY3Q8SURhdGFUYWJsZUNoYW5nZUV2ZW50PigpO1xuICAgIHJlZi5faW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICByZWYuX3dpcmVFdmVudHMoKTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfd2lyZUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vblJvd1VwZGF0ZWQgPSAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHRoaXMucm93VXBkYXRlZCQubmV4dChjaGFuZ2UpO1xuICAgIHRoaXMuX29uUm93Q3JlYXRlZCA9IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4gdGhpcy5yb3dDcmVhdGVkJC5uZXh0KGNoYW5nZSk7XG4gICAgdGhpcy5fb25Sb3dEZWxldGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB0aGlzLnJvd0RlbGV0ZWQkLm5leHQoY2hhbmdlKTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uKCdyb3dVcGRhdGVkJywgdGhpcy5fb25Sb3dVcGRhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbigncm93Q3JlYXRlZCcsIHRoaXMuX29uUm93Q3JlYXRlZCk7XG4gICAgdGhpcy5faW5zdGFuY2Uub24oJ3Jvd0RlbGV0ZWQnLCB0aGlzLl9vblJvd0RlbGV0ZWQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBhIGRhdGEgdGFibGUgY3JlYXRlZCBmcm9tIGEgZ2FkZ2V0IHByZWZlcmVuY2UgdmFsdWUuXG4gKlxuICogQXV0b21hdGljYWxseSBjb25maWd1cmVzIGZpbHRlciBhbmQgc29ydCBzZXR0aW5ncyBmcm9tIHRoZSBwcmVmZXJlbmNlLFxuICogYW5kIHByb3ZpZGVzIGEgYGdldEZpbHRlcmVkUm93cygpYCBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBhcHBsaWVzIHRoZW0uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2ZnID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZnMuZ2V0U3RyaW5nKCdyZERhdGFUYWJsZScpKTtcbiAqXG4gKiAvLyBGZXRjaCByb3dzIHdpdGggYXV0by13aXJlZCBmaWx0ZXIgKyBzb3J0IGZyb20gdGhlIHByZWZlcmVuY2VcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAqXG4gKiAvLyBBY2Nlc3MgdGhlIHVuZGVybHlpbmcgRGF0YVRhYmxlUmVmIGZvciBzY2hlbWEsIGV2ZW50cywgZXRjLlxuICogY2ZnLmRhdGFUYWJsZS5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGNmZy5kaXNwb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVByZWZSZWYge1xuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYgd2l0aCBmdWxsIGFjY2VzcyB0byBzY2hlbWEsIGV2ZW50cywgcG9sbGluZywgZXRjLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVRhYmxlOiBEYXRhVGFibGVSZWY7XG5cbiAgLyoqIFRoZSBwYXJzZWQgcHJlZmVyZW5jZSBvYmplY3QuICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVmOiBJRGF0YVRhYmxlUHJlZjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9jb25maWc6IGFueTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBEYXRhVGFibGVQcmVmUmVmIGZyb20gYSBnYWRnZXQgcHJlZmVyZW5jZSBKU09OIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHByZWZWYWx1ZSAtIFRoZSByYXcgZ2FkZ2V0IHByZWZlcmVuY2Ugc3RyaW5nIChKU09OKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwcmVmVmFsdWU6IHN0cmluZywgb3B0aW9ucz86IElEYXRhVGFibGVPcHRpb25zKSB7XG5cbiAgICBjb25zdCBsaWIgPSAod2luZG93IGFzIGFueSkuZ2FkZ2V0cz8uWydyZXZlbGRpZ2l0YWwuZGF0YXRhYmxlJ107XG5cbiAgICBpZiAoIWxpYiB8fCB0eXBlb2YgbGliLmNyZWF0ZUZyb21QcmVmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXZlbERpZ2l0YWwgRGF0YVRhYmxlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4gJyArXG4gICAgICAgICdFbnN1cmUgdGhlIGRhdGF0YWJsZSBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoaXMgZ2FkZ2V0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlnID0gbGliLmNyZWF0ZUZyb21QcmVmKHByZWZWYWx1ZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5wcmVmID0gdGhpcy5fY29uZmlnLnByZWY7XG4gICAgdGhpcy5kYXRhVGFibGUgPSBEYXRhVGFibGVSZWYuX2Zyb21JbnN0YW5jZSh0aGlzLl9jb25maWcuZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyB3aXRoIHRoZSBmaWx0ZXIgYW5kIHNvcnQgc2V0dGluZ3MgZnJvbSB0aGUgcHJlZmVyZW5jZSBhdXRvbWF0aWNhbGx5IGFwcGxpZWQuXG4gICAqIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyBjYW4gb3ZlcnJpZGUgb3Igc3VwcGxlbWVudCB0aGUgcHJlZmVyZW5jZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0IHNldFxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFVzZSBwcmVmZXJlbmNlIGRlZmF1bHRzXG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAgICpcbiAgICogLy8gT3ZlcnJpZGUgcGFnZSBzaXplXG4gICAqIGNvbnN0IHBhZ2UgPSBhd2FpdCBjZmcuZ2V0RmlsdGVyZWRSb3dzKHsgcGFnZVNpemU6IDEwIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXRGaWx0ZXJlZFJvd3MocGFyYW1zPzogSURhdGFUYWJsZVF1ZXJ5UGFyYW1zKTogUHJvbWlzZTxJRGF0YVRhYmxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5nZXRGaWx0ZXJlZFJvd3MocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIHVuZGVybHlpbmcgRGF0YVRhYmxlUmVmLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhVGFibGUuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvZGF0YXRhYmxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVy9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQXdCdkI7Ozs7Ozs7T0FPRztJQUNILFlBQVksT0FBZSxFQUFFLElBQVksRUFBRSxPQUEyQjtRQTlCdEUsOENBQThDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQscUNBQXFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQsbUNBQW1DO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUF5QnhELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWxCLE1BQU0sR0FBRyxHQUFJLE1BQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbURBQW1EO2dCQUNuRCwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxPQUFPLENBQUMsTUFBOEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFN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M0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQsXG4gIElEYXRhVGFibGVDb2x1bW4sXG4gIElEYXRhVGFibGVPcHRpb25zLFxuICBJRGF0YVRhYmxlUHJlZixcbiAgSURhdGFUYWJsZVF1ZXJ5UGFyYW1zLFxuICBJRGF0YVRhYmxlUmVzdWx0LFxuICBJRGF0YVRhYmxlU2NoZW1hXG59IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBbmd1bGFyLWZyaWVuZGx5IHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgYGdhZGdldHMucmV2ZWxkaWdpdGFsLmRhdGF0YWJsZWAgbGlicmFyeS5cbiAqXG4gKiBQcm92aWRlcyB0eXBlZCBQcm9taXNlLWJhc2VkIG1ldGhvZHMgYW5kIFJ4SlMgT2JzZXJ2YWJsZXMgZm9yIHJlYWwtdGltZSBldmVudHMuXG4gKiBBbGwgZXZlbnQgZW1pc3Npb25zIHJ1biBpbnNpZGUgQW5ndWxhcidzIHpvbmUgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb24gdHJpZ2dlcnMuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gKlxuICogLy8gRmV0Y2ggcm93c1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7IHNvcnQ6ICdwcmljZScsIHNvcnREaXI6ICdhc2MnIH0pO1xuICpcbiAqIC8vIFJlYWwtdGltZSB1cGRhdGVzXG4gKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdVcGRhdGVkOicsIGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGR0LmRpc3Bvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlUmVmIHtcblxuICAvKiogRW1pdHMgd2hlbiBhbiBleGlzdGluZyByb3cgaXMgbW9kaWZpZWQuICovXG4gIHB1YmxpYyByb3dVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIG5ldyByb3cgaXMgYWRkZWQuICovXG4gIHB1YmxpYyByb3dDcmVhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIHJvdyBpcyByZW1vdmVkLiAqL1xuICBwdWJsaWMgcm93RGVsZXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IGFueTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF96b25lOiBOZ1pvbmU7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dVcGRhdGVkITogKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB2b2lkO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vblJvd0NyZWF0ZWQhOiAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHZvaWQ7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29uUm93RGVsZXRlZCE6IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBEYXRhVGFibGVSZWYuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gVGhlIGRhdGEgdGFibGUgSUQgKGUuZy4gJ3RibF9tZW51X2l0ZW1zJylcbiAgICogQHBhcmFtIHpvbmUgLSBBbmd1bGFyIE5nWm9uZSBmb3IgZW5zdXJpbmcgY2hhbmdlIGRldGVjdGlvbiBvbiBjYWxsYmFja3NcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBnbG9iYWwgZGF0YXRhYmxlIGxpYnJhcnkgaXMgbm90IGxvYWRlZFxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGVJZDogc3RyaW5nLCB6b25lOiBOZ1pvbmUsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucykge1xuXG4gICAgdGhpcy5fem9uZSA9IHpvbmU7XG5cbiAgICBjb25zdCBsaWIgPSAod2luZG93IGFzIGFueSkuZ2FkZ2V0cz8uWydyZXZlbGRpZ2l0YWwuZGF0YXRhYmxlJ107XG5cbiAgICBpZiAoIWxpYiB8fCB0eXBlb2YgbGliLmNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnUmV2ZWxEaWdpdGFsIERhdGFUYWJsZSBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUuICcgK1xuICAgICAgICAnRW5zdXJlIHRoZSBkYXRhdGFibGUgZmVhdHVyZSBpcyBlbmFibGVkIGZvciB0aGlzIGdhZGdldC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuX2luc3RhbmNlID0gbGliLmNyZWF0ZSh0YWJsZUlkLCBvcHRpb25zKTtcbiAgICB0aGlzLl93aXJlRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyByb3dzIGZyb20gdGhlIGRhdGEgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIChmaWx0ZXIsIHNvcnQsIHBhZ2luYXRpb24pXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQgc2V0XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7XG4gICAqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAnRW50cmVlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9LFxuICAgKiAgIHNvcnQ6ICdpdGVtTmFtZScsXG4gICAqICAgc29ydERpcjogJ2FzYycsXG4gICAqICAgcGFnZVNpemU6IDIwXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXRSb3dzKHBhcmFtcz86IElEYXRhVGFibGVRdWVyeVBhcmFtcyk6IFByb21pc2U8SURhdGFUYWJsZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5nZXRSb3dzKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgdGFibGUgc2NoZW1hIChjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIG1ldGFkYXRhKS5cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRhYmxlIHNjaGVtYVxuICAgKi9cbiAgcHVibGljIGdldFNjaGVtYSgpOiBQcm9taXNlPElEYXRhVGFibGVTY2hlbWE+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0U2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB2aXNpYmxlIChub24taGlkZGVuKSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIHNjaGVtYS5cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYW4gYXJyYXkgb2YgdmlzaWJsZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRWaXNpYmxlQ29sdW1ucygpOiBQcm9taXNlPElEYXRhVGFibGVDb2x1bW5bXT4ge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5nZXRWaXNpYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyB3aXRoIGhpZGRlbiBjb2x1bW4gZGF0YSBzdHJpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgKHNhbWUgYXMgZ2V0Um93cylcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJlc3VsdCBzZXQgd2l0aCBoaWRkZW4gZmllbGRzIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyBnZXRWaXNpYmxlUm93cyhwYXJhbXM/OiBJRGF0YVRhYmxlUXVlcnlQYXJhbXMpOiBQcm9taXNlPElEYXRhVGFibGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0VmlzaWJsZVJvd3MocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgcG9sbGluZyBmb3IgY2hhbmdlcyBhdCB0aGUgZ2l2ZW4gaW50ZXJ2YWwuXG4gICAqIEVtaXRzIG9uIGByb3dVcGRhdGVkJGAgd2hlbiBuZXcgZGF0YSBpcyBkZXRlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsTXMgLSBQb2xsaW5nIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAzMDAwMClcbiAgICovXG4gIHB1YmxpYyBzdGFydFBvbGxpbmcoaW50ZXJ2YWxNcz86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLnN0YXJ0UG9sbGluZyhpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBwb2xsaW5nIGZvciBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHN0b3BQb2xsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLnN0b3BQb2xsaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgYWxsIHJlc291cmNlczogc3RvcHMgcG9sbGluZywgY2xvc2VzIHRoZSByZWFsLXRpbWUgY29ubmVjdGlvbixcbiAgICogcmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMsIGFuZCBjb21wbGV0ZXMgYWxsIFJ4SlMgb2JzZXJ2YWJsZXMuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5vZmYoJ3Jvd1VwZGF0ZWQnLCB0aGlzLl9vblJvd1VwZGF0ZWQpO1xuICAgIHRoaXMuX2luc3RhbmNlLm9mZigncm93Q3JlYXRlZCcsIHRoaXMuX29uUm93Q3JlYXRlZCk7XG4gICAgdGhpcy5faW5zdGFuY2Uub2ZmKCdyb3dEZWxldGVkJywgdGhpcy5fb25Sb3dEZWxldGVkKTtcblxuICAgIHRoaXMuX2luc3RhbmNlLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMucm93VXBkYXRlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLnJvd0NyZWF0ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yb3dEZWxldGVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgc3RhdGljIF9mcm9tSW5zdGFuY2UoaW5zdGFuY2U6IGFueSwgem9uZTogTmdab25lKTogRGF0YVRhYmxlUmVmIHtcbiAgICBjb25zdCByZWYgPSBPYmplY3QuY3JlYXRlKERhdGFUYWJsZVJlZi5wcm90b3R5cGUpIGFzIERhdGFUYWJsZVJlZjtcbiAgICByZWYucm93VXBkYXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgcmVmLnJvd0NyZWF0ZWQkID0gbmV3IFN1YmplY3Q8SURhdGFUYWJsZUNoYW5nZUV2ZW50PigpO1xuICAgIHJlZi5yb3dEZWxldGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcbiAgICByZWYuX2luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgcmVmLl96b25lID0gem9uZTtcbiAgICByZWYuX3dpcmVFdmVudHMoKTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfd2lyZUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vblJvd1VwZGF0ZWQgPSAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHRoaXMucm93VXBkYXRlZCQubmV4dChjaGFuZ2UpKTtcbiAgICB9O1xuICAgIHRoaXMuX29uUm93Q3JlYXRlZCA9IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5yb3dDcmVhdGVkJC5uZXh0KGNoYW5nZSkpO1xuICAgIH07XG4gICAgdGhpcy5fb25Sb3dEZWxldGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl96b25lLnJ1bigoKSA9PiB0aGlzLnJvd0RlbGV0ZWQkLm5leHQoY2hhbmdlKSk7XG4gICAgfTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uKCdyb3dVcGRhdGVkJywgdGhpcy5fb25Sb3dVcGRhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbigncm93Q3JlYXRlZCcsIHRoaXMuX29uUm93Q3JlYXRlZCk7XG4gICAgdGhpcy5faW5zdGFuY2Uub24oJ3Jvd0RlbGV0ZWQnLCB0aGlzLl9vblJvd0RlbGV0ZWQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBhIGRhdGEgdGFibGUgY3JlYXRlZCBmcm9tIGEgZ2FkZ2V0IHByZWZlcmVuY2UgdmFsdWUuXG4gKlxuICogQXV0b21hdGljYWxseSBjb25maWd1cmVzIGZpbHRlciBhbmQgc29ydCBzZXR0aW5ncyBmcm9tIHRoZSBwcmVmZXJlbmNlLFxuICogYW5kIHByb3ZpZGVzIGEgYGdldEZpbHRlcmVkUm93cygpYCBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBhcHBsaWVzIHRoZW0uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2ZnID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZnMuZ2V0U3RyaW5nKCdyZERhdGFUYWJsZScpKTtcbiAqXG4gKiAvLyBGZXRjaCByb3dzIHdpdGggYXV0by13aXJlZCBmaWx0ZXIgKyBzb3J0IGZyb20gdGhlIHByZWZlcmVuY2VcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAqXG4gKiAvLyBBY2Nlc3MgdGhlIHVuZGVybHlpbmcgRGF0YVRhYmxlUmVmIGZvciBzY2hlbWEsIGV2ZW50cywgZXRjLlxuICogY2ZnLmRhdGFUYWJsZS5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGNmZy5kaXNwb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVByZWZSZWYge1xuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYgd2l0aCBmdWxsIGFjY2VzcyB0byBzY2hlbWEsIGV2ZW50cywgcG9sbGluZywgZXRjLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVRhYmxlOiBEYXRhVGFibGVSZWY7XG5cbiAgLyoqIFRoZSBwYXJzZWQgcHJlZmVyZW5jZSBvYmplY3QuICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVmOiBJRGF0YVRhYmxlUHJlZjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9jb25maWc6IGFueTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBEYXRhVGFibGVQcmVmUmVmIGZyb20gYSBnYWRnZXQgcHJlZmVyZW5jZSBKU09OIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHByZWZWYWx1ZSAtIFRoZSByYXcgZ2FkZ2V0IHByZWZlcmVuY2Ugc3RyaW5nIChKU09OKVxuICAgKiBAcGFyYW0gem9uZSAtIEFuZ3VsYXIgTmdab25lIGZvciBlbnN1cmluZyBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGNhbGxiYWNrc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwcmVmVmFsdWU6IHN0cmluZywgem9uZTogTmdab25lLCBvcHRpb25zPzogSURhdGFUYWJsZU9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGxpYiA9ICh3aW5kb3cgYXMgYW55KS5nYWRnZXRzPy5bJ3JldmVsZGlnaXRhbC5kYXRhdGFibGUnXTtcblxuICAgIGlmICghbGliIHx8IHR5cGVvZiBsaWIuY3JlYXRlRnJvbVByZWYgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JldmVsRGlnaXRhbCBEYXRhVGFibGUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLiAnICtcbiAgICAgICAgJ0Vuc3VyZSB0aGUgZGF0YXRhYmxlIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgdGhpcyBnYWRnZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcgPSBsaWIuY3JlYXRlRnJvbVByZWYocHJlZlZhbHVlLCBvcHRpb25zKTtcbiAgICB0aGlzLnByZWYgPSB0aGlzLl9jb25maWcucHJlZjtcbiAgICB0aGlzLmRhdGFUYWJsZSA9IERhdGFUYWJsZVJlZi5fZnJvbUluc3RhbmNlKHRoaXMuX2NvbmZpZy5kdCwgem9uZSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyByb3dzIHdpdGggdGhlIGZpbHRlciBhbmQgc29ydCBzZXR0aW5ncyBmcm9tIHRoZSBwcmVmZXJlbmNlIGF1dG9tYXRpY2FsbHkgYXBwbGllZC5cbiAgICogQWRkaXRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIGNhbiBvdmVycmlkZSBvciBzdXBwbGVtZW50IHRoZSBwcmVmZXJlbmNlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gT3B0aW9uYWwgYWRkaXRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQgc2V0XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXNlIHByZWZlcmVuY2UgZGVmYXVsdHNcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgY2ZnLmdldEZpbHRlcmVkUm93cygpO1xuICAgKlxuICAgKiAvLyBPdmVycmlkZSBwYWdlIHNpemVcbiAgICogY29uc3QgcGFnZSA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoeyBwYWdlU2l6ZTogMTAgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGdldEZpbHRlcmVkUm93cyhwYXJhbXM/OiBJRGF0YVRhYmxlUXVlcnlQYXJhbXMpOiBQcm9taXNlPElEYXRhVGFibGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmdldEZpbHRlcmVkUm93cyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXMgaGVsZCBieSB0aGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFUYWJsZS5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlciBvcGVyYXRvcnMgc3VwcG9ydGVkIGJ5IGRhdGEgdGFibGUgcXVlcmllcy5cbiAqXG4gKiAtIFNpbXBsZSBlcXVhbGl0eTogYHsgY29sdW1uS2V5OiAndmFsdWUnIH1gXG4gKiAtIE9wZXJhdG9yLWJhc2VkOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdjb250YWlucycsIHZhbHVlOiAnc2VhcmNoJyB9IH1gXG4gKiAtIFJhbmdlOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdpblJhbmdlJywgZnJvbTogNSwgdG86IDIwIH0gfWBcbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlRmlsdGVyT3AgPVxuICB8ICdlcSdcbiAgfCAnbmVxJ1xuICB8ICdpc0VtcHR5J1xuICB8ICdpc05vdEVtcHR5J1xuICB8ICdjb250YWlucydcbiAgfCAnbm90Q29udGFpbnMnXG4gIHwgJ2d0J1xuICB8ICdndGUnXG4gIHwgJ2x0J1xuICB8ICdsdGUnXG4gIHwgJ3Bvc2l0aXZlJ1xuICB8ICduZWdhdGl2ZSdcbiAgfCAnaW5SYW5nZSdcbiAgfCAnb3V0T2ZSYW5nZSc7XG5cbi8qKlxuICogT3BlcmF0b3ItYmFzZWQgZmlsdGVyIGV4cHJlc3Npb24gZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3Ige1xuICBvcDogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIHZhbHVlPzogYW55O1xuICBmcm9tPzogYW55O1xuICB0bz86IGFueTtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgdmFsdWUgZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqIENhbiBiZSBhIHNpbXBsZSBlcXVhbGl0eSB2YWx1ZSAoc3RyaW5nL251bWJlci9ib29sZWFuKSBvciBhbiBvcGVyYXRvciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgdHlwZSBEYXRhVGFibGVGaWx0ZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3I7XG5cbi8qKlxuICogRmlsdGVyIG1hcCBrZXllZCBieSBjb2x1bW4ga2V5LlxuICpcbiAqIFN1cHBvcnRzIGxvZ2ljYWwgY29tYmluYXRpb25zOlxuICogLSAqKkFORCoqIChkZWZhdWx0KTogbXVsdGlwbGUgcHJvcGVydGllcyBpbiBhIHNpbmdsZSBvYmplY3RcbiAqICAgYHsgc3RhdHVzOiAnYWN0aXZlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9YFxuICogLSAqKk9SKio6IHdyYXAgZWFjaCBjb25kaXRpb24gaW4gYSBgJG9yYCBhcnJheVxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSB9YFxuICogLSAqKk1peGVkKio6IEFORCBjb25kaXRpb25zIGFsb25nc2lkZSBhbiBPUiBncm91cFxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSwgcHJpY2U6IHsgb3A6ICdndCcsIHZhbHVlOiAwIH0gfWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyIHtcbiAgLyoqIE9SIGdyb3VwOiByb3dzIG1hdGNoaW5nIGFueSBjb25kaXRpb24gaW4gdGhlIGFycmF5LiAqL1xuICAkb3I/OiBBcnJheTx7IFtjb2x1bW5LZXk6IHN0cmluZ106IERhdGFUYWJsZUZpbHRlclZhbHVlIH0+O1xuICBbY29sdW1uS2V5OiBzdHJpbmddOiBEYXRhVGFibGVGaWx0ZXJWYWx1ZSB8IEFycmF5PHsgW2NvbHVtbktleTogc3RyaW5nXTogRGF0YVRhYmxlRmlsdGVyVmFsdWUgfT4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29sdW1uIGRhdGEgdHlwZXMgcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlQ29sdW1uVHlwZSA9ICd0ZXh0JyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2ltYWdlJyB8ICdoaWRkZW4nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgRGF0YVRhYmxlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIGF1dG8tcmVzb2x2ZWQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBrZXkuICovXG4gIHJlZ2lzdHJhdGlvbktleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIHRoZSBBUEkgYmFzZSBVUkwuICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGh1YiBVUkwuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSByZWFsLXRpbWUgdXBkYXRlcy4gKi9cbiAgc2lnbmFsUlVybD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUXVlcnkgcGFyYW1ldGVycyBmb3IgZmV0Y2hpbmcgcm93cyBmcm9tIGEgZGF0YSB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUXVlcnlQYXJhbXMge1xuICAvKiogRmlsdGVyIHJ1bGVzIGtleWVkIGJ5IGNvbHVtbiBrZXkuICovXG4gIGZpbHRlcj86IElEYXRhVGFibGVGaWx0ZXI7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnQ/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogUmVzdWx0cyBwZXIgcGFnZSAobWF4IDEwMCkuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogUGFnaW5hdGlvbiBjdXJzb3IgZnJvbSBhIHByZXZpb3VzIHJlc3VsdC4gKi9cbiAgY29udGludWF0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBDb21tYS1zZXBhcmF0ZWQgY29sdW1uIGtleXMgdG8gaW5jbHVkZS4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHJvdyByZXR1cm5lZCBmcm9tIHRoZSBkYXRhIHRhYmxlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUm93IHtcbiAgLyoqIFJvdyBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNvcnQgb3JkZXIgdmFsdWUuICovXG4gIHNvcnRPcmRlcjogbnVtYmVyO1xuICAvKiogQ29sdW1uIGtleS12YWx1ZSBwYWlycy4gKi9cbiAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgc2V0IHJldHVybmVkIGJ5IGBnZXRSb3dzKClgIGFuZCBgZ2V0VmlzaWJsZVJvd3MoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVJlc3VsdCB7XG4gIC8qKiBSb3cgb2JqZWN0cy4gKi9cbiAgZGF0YTogSURhdGFUYWJsZVJvd1tdO1xuICAvKiogVG90YWwgbWF0Y2hpbmcgcm93cyBhY3Jvc3MgYWxsIHBhZ2VzLiAqL1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIC8qKiBUb2tlbiBmb3IgZmV0Y2hpbmcgdGhlIG5leHQgcGFnZSwgb3IgYG51bGxgIGlmIG5vIG1vcmUgcGFnZXMuICovXG4gIGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAvKiogSVNPIDg2MDEgY2FjaGUgZXhwaXJ5IHRpbWVzdGFtcC4gKi9cbiAgY2FjaGVVbnRpbDogc3RyaW5nO1xuICAvKiogYHRydWVgIHdoZW4gZGF0YSBpcyB1bmNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZmV0Y2ggKEVUYWcgbWF0Y2gpLiAqL1xuICBub3RNb2RpZmllZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29sdW1uIGRlZmluaXRpb24gcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ29sdW1uIHtcbiAgLyoqIENvbHVtbiBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRGF0YSBrZXkgdXNlZCBpbiBgcm93LmRhdGFgLiAqL1xuICBrZXk6IHN0cmluZztcbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUuICovXG4gIHR5cGU6IERhdGFUYWJsZUNvbHVtblR5cGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgcmVxdWlyZWQuICovXG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIHN1cHBvcnRzIHNvcnRpbmcuICovXG4gIHNvcnRhYmxlOiBib29sZWFuO1xuICAvKiogQ29sdW1uLXNwZWNpZmljIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IGFueTtcbn1cblxuLyoqXG4gKiBUYWJsZSBzY2hlbWEgaW5jbHVkaW5nIGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVNjaGVtYSB7XG4gIC8qKiBUYWJsZSBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRhYmxlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRhYmxlIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ29sdW1uIGRlZmluaXRpb25zLiAqL1xuICBjb2x1bW5zOiBJRGF0YVRhYmxlQ29sdW1uW107XG4gIC8qKiBUb3RhbCByb3dzIGluIHRoZSB0YWJsZS4gKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgZXZlbnQgZW1pdHRlZCBmb3IgcmVhbC10aW1lIGRhdGEgdGFibGUgdXBkYXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQge1xuICAvKiogVGhlIHRhYmxlIHRoYXQgY2hhbmdlZC4gKi9cbiAgdGFibGVJZDogc3RyaW5nO1xuICAvKiogVGhlIGFmZmVjdGVkIHJvdyBJRC4gKi9cbiAgcm93SWQ6IHN0cmluZztcbiAgLyoqIFJvdyBkYXRhIChwcmVzZW50IGZvciBjcmVhdGVkL3VwZGF0ZWQgZXZlbnRzKS4gKi9cbiAgZGF0YT86IGFueTtcbiAgLyoqIFRoZSB0eXBlIG9mIGNoYW5nZS4gKi9cbiAgYWN0aW9uOiAndXBkYXRlJyB8ICdjcmVhdGUnIHwgJ2RlbGV0ZScgfCAncG9sbCc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZmlsdGVyIHJ1bGUgd2l0aGluIGEgZGF0YXRhYmxlIHByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVByZWZGaWx0ZXJSdWxlIHtcbiAgLyoqIENvbHVtbiBrZXkgdG8gZmlsdGVyIG9uLiAqL1xuICBjb2x1bW5LZXk6IHN0cmluZztcbiAgLyoqIEZpbHRlciBvcGVyYXRvciAoZGVmYXVsdHMgdG8gJ2VxJykuICovXG4gIG9wZXJhdG9yPzogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIC8qKiBWYWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICovXG4gIHZhbHVlPzogYW55O1xufVxuXG4vKipcbiAqIFBhcnNlZCBkYXRhdGFibGUgZ2FkZ2V0IHByZWZlcmVuY2UgYXMgc2VyaWFsaXplZCBieSB0aGUgdGVtcGxhdGUgZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVQcmVmIHtcbiAgLyoqIFRoZSBkYXRhIHRhYmxlIElELiAqL1xuICB0YWJsZUlkPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeSBjb2x1bW4ga2V5LiAqL1xuICBjb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgcnVsZXMgKG5ldyBtdWx0aS1maWx0ZXIgZm9ybWF0KS4gKi9cbiAgZmlsdGVycz86IElEYXRhVGFibGVQcmVmRmlsdGVyUnVsZVtdO1xuICAvKiogTG9naWNhbCBjb21iaW5hdGlvbiBmb3IgZmlsdGVycy4gKi9cbiAgZmlsdGVyTG9naWM/OiAnYW5kJyB8ICdvcic7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnRDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgY29sdW1uIGtleS4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBMZWdhY3kgc2luZ2xlLWZpbHRlciBvcGVyYXRvci4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJPcGVyYXRvcj86IERhdGFUYWJsZUZpbHRlck9wO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgdmFsdWUuIFVzZSBgZmlsdGVyc2AgaW5zdGVhZC4gKi9cbiAgZmlsdGVyVmFsdWU/OiBhbnk7XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlciBvcGVyYXRvcnMgc3VwcG9ydGVkIGJ5IGRhdGEgdGFibGUgcXVlcmllcy5cbiAqXG4gKiAtIFNpbXBsZSBlcXVhbGl0eTogYHsgY29sdW1uS2V5OiAndmFsdWUnIH1gXG4gKiAtIE9wZXJhdG9yLWJhc2VkOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdjb250YWlucycsIHZhbHVlOiAnc2VhcmNoJyB9IH1gXG4gKiAtIFJhbmdlOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdpblJhbmdlJywgZnJvbTogNSwgdG86IDIwIH0gfWBcbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlRmlsdGVyT3AgPVxuICB8ICdlcSdcbiAgfCAnbmVxJ1xuICB8ICdpc0VtcHR5J1xuICB8ICdpc05vdEVtcHR5J1xuICB8ICdjb250YWlucydcbiAgfCAnbm90Q29udGFpbnMnXG4gIHwgJ2d0J1xuICB8ICdndGUnXG4gIHwgJ2x0J1xuICB8ICdsdGUnXG4gIHwgJ3Bvc2l0aXZlJ1xuICB8ICduZWdhdGl2ZSdcbiAgfCAnaW5SYW5nZSdcbiAgfCAnb3V0T2ZSYW5nZSdcbiAgfCAnYmVmb3JlTm93J1xuICB8ICdhZnRlck5vdydcbiAgfCAnaXNUb2RheSc7XG5cbi8qKlxuICogT3BlcmF0b3ItYmFzZWQgZmlsdGVyIGV4cHJlc3Npb24gZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3Ige1xuICBvcDogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIHZhbHVlPzogYW55O1xuICBmcm9tPzogYW55O1xuICB0bz86IGFueTtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgdmFsdWUgZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqIENhbiBiZSBhIHNpbXBsZSBlcXVhbGl0eSB2YWx1ZSAoc3RyaW5nL251bWJlci9ib29sZWFuKSBvciBhbiBvcGVyYXRvciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgdHlwZSBEYXRhVGFibGVGaWx0ZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3I7XG5cbi8qKlxuICogRmlsdGVyIG1hcCBrZXllZCBieSBjb2x1bW4ga2V5LlxuICpcbiAqIFN1cHBvcnRzIGxvZ2ljYWwgY29tYmluYXRpb25zOlxuICogLSAqKkFORCoqIChkZWZhdWx0KTogbXVsdGlwbGUgcHJvcGVydGllcyBpbiBhIHNpbmdsZSBvYmplY3RcbiAqICAgYHsgc3RhdHVzOiAnYWN0aXZlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9YFxuICogLSAqKk9SKio6IHdyYXAgZWFjaCBjb25kaXRpb24gaW4gYSBgJG9yYCBhcnJheVxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSB9YFxuICogLSAqKk1peGVkKio6IEFORCBjb25kaXRpb25zIGFsb25nc2lkZSBhbiBPUiBncm91cFxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSwgcHJpY2U6IHsgb3A6ICdndCcsIHZhbHVlOiAwIH0gfWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyIHtcbiAgLyoqIE9SIGdyb3VwOiByb3dzIG1hdGNoaW5nIGFueSBjb25kaXRpb24gaW4gdGhlIGFycmF5LiAqL1xuICAkb3I/OiBBcnJheTx7IFtjb2x1bW5LZXk6IHN0cmluZ106IERhdGFUYWJsZUZpbHRlclZhbHVlIH0+O1xuICBbY29sdW1uS2V5OiBzdHJpbmddOiBEYXRhVGFibGVGaWx0ZXJWYWx1ZSB8IEFycmF5PHsgW2NvbHVtbktleTogc3RyaW5nXTogRGF0YVRhYmxlRmlsdGVyVmFsdWUgfT4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29sdW1uIGRhdGEgdHlwZXMgcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlQ29sdW1uVHlwZSA9ICd0ZXh0JyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2ltYWdlJyB8ICdoaWRkZW4nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgRGF0YVRhYmxlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIGF1dG8tcmVzb2x2ZWQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBrZXkuICovXG4gIHJlZ2lzdHJhdGlvbktleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIHRoZSBBUEkgYmFzZSBVUkwuICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGh1YiBVUkwuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSByZWFsLXRpbWUgdXBkYXRlcy4gKi9cbiAgc2lnbmFsUlVybD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUXVlcnkgcGFyYW1ldGVycyBmb3IgZmV0Y2hpbmcgcm93cyBmcm9tIGEgZGF0YSB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUXVlcnlQYXJhbXMge1xuICAvKiogRmlsdGVyIHJ1bGVzIGtleWVkIGJ5IGNvbHVtbiBrZXkuICovXG4gIGZpbHRlcj86IElEYXRhVGFibGVGaWx0ZXI7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnQ/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogUmVzdWx0cyBwZXIgcGFnZSAobWF4IDEwMCkuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogUGFnaW5hdGlvbiBjdXJzb3IgZnJvbSBhIHByZXZpb3VzIHJlc3VsdC4gKi9cbiAgY29udGludWF0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBDb21tYS1zZXBhcmF0ZWQgY29sdW1uIGtleXMgdG8gaW5jbHVkZS4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHJvdyByZXR1cm5lZCBmcm9tIHRoZSBkYXRhIHRhYmxlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUm93IHtcbiAgLyoqIFJvdyBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNvcnQgb3JkZXIgdmFsdWUuICovXG4gIHNvcnRPcmRlcjogbnVtYmVyO1xuICAvKiogQ29sdW1uIGtleS12YWx1ZSBwYWlycy4gKi9cbiAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgc2V0IHJldHVybmVkIGJ5IGBnZXRSb3dzKClgIGFuZCBgZ2V0VmlzaWJsZVJvd3MoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVJlc3VsdCB7XG4gIC8qKiBSb3cgb2JqZWN0cy4gKi9cbiAgZGF0YTogSURhdGFUYWJsZVJvd1tdO1xuICAvKiogVG90YWwgbWF0Y2hpbmcgcm93cyBhY3Jvc3MgYWxsIHBhZ2VzLiAqL1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIC8qKiBUb2tlbiBmb3IgZmV0Y2hpbmcgdGhlIG5leHQgcGFnZSwgb3IgYG51bGxgIGlmIG5vIG1vcmUgcGFnZXMuICovXG4gIGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAvKiogSVNPIDg2MDEgY2FjaGUgZXhwaXJ5IHRpbWVzdGFtcC4gKi9cbiAgY2FjaGVVbnRpbDogc3RyaW5nO1xuICAvKiogYHRydWVgIHdoZW4gZGF0YSBpcyB1bmNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZmV0Y2ggKEVUYWcgbWF0Y2gpLiAqL1xuICBub3RNb2RpZmllZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29sdW1uIGRlZmluaXRpb24gcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ29sdW1uIHtcbiAgLyoqIENvbHVtbiBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRGF0YSBrZXkgdXNlZCBpbiBgcm93LmRhdGFgLiAqL1xuICBrZXk6IHN0cmluZztcbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUuICovXG4gIHR5cGU6IERhdGFUYWJsZUNvbHVtblR5cGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgcmVxdWlyZWQuICovXG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIHN1cHBvcnRzIHNvcnRpbmcuICovXG4gIHNvcnRhYmxlOiBib29sZWFuO1xuICAvKiogQ29sdW1uLXNwZWNpZmljIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IGFueTtcbn1cblxuLyoqXG4gKiBUYWJsZSBzY2hlbWEgaW5jbHVkaW5nIGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVNjaGVtYSB7XG4gIC8qKiBUYWJsZSBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRhYmxlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRhYmxlIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ29sdW1uIGRlZmluaXRpb25zLiAqL1xuICBjb2x1bW5zOiBJRGF0YVRhYmxlQ29sdW1uW107XG4gIC8qKiBUb3RhbCByb3dzIGluIHRoZSB0YWJsZS4gKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgZXZlbnQgZW1pdHRlZCBmb3IgcmVhbC10aW1lIGRhdGEgdGFibGUgdXBkYXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQge1xuICAvKiogVGhlIHRhYmxlIHRoYXQgY2hhbmdlZC4gKi9cbiAgdGFibGVJZDogc3RyaW5nO1xuICAvKiogVGhlIGFmZmVjdGVkIHJvdyBJRC4gKi9cbiAgcm93SWQ6IHN0cmluZztcbiAgLyoqIFJvdyBkYXRhIChwcmVzZW50IGZvciBjcmVhdGVkL3VwZGF0ZWQgZXZlbnRzKS4gKi9cbiAgZGF0YT86IGFueTtcbiAgLyoqIFRoZSB0eXBlIG9mIGNoYW5nZS4gKi9cbiAgYWN0aW9uOiAndXBkYXRlJyB8ICdjcmVhdGUnIHwgJ2RlbGV0ZScgfCAncG9sbCc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZmlsdGVyIHJ1bGUgd2l0aGluIGEgZGF0YXRhYmxlIHByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVByZWZGaWx0ZXJSdWxlIHtcbiAgLyoqIENvbHVtbiBrZXkgdG8gZmlsdGVyIG9uLiAqL1xuICBjb2x1bW5LZXk6IHN0cmluZztcbiAgLyoqIEZpbHRlciBvcGVyYXRvciAoZGVmYXVsdHMgdG8gJ2VxJykuICovXG4gIG9wZXJhdG9yPzogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIC8qKiBWYWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICovXG4gIHZhbHVlPzogYW55O1xufVxuXG4vKipcbiAqIFBhcnNlZCBkYXRhdGFibGUgZ2FkZ2V0IHByZWZlcmVuY2UgYXMgc2VyaWFsaXplZCBieSB0aGUgdGVtcGxhdGUgZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVQcmVmIHtcbiAgLyoqIFRoZSBkYXRhIHRhYmxlIElELiAqL1xuICB0YWJsZUlkPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeSBjb2x1bW4ga2V5LiAqL1xuICBjb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgcnVsZXMgKG5ldyBtdWx0aS1maWx0ZXIgZm9ybWF0KS4gKi9cbiAgZmlsdGVycz86IElEYXRhVGFibGVQcmVmRmlsdGVyUnVsZVtdO1xuICAvKiogTG9naWNhbCBjb21iaW5hdGlvbiBmb3IgZmlsdGVycy4gKi9cbiAgZmlsdGVyTG9naWM/OiAnYW5kJyB8ICdvcic7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnRDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgY29sdW1uIGtleS4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBMZWdhY3kgc2luZ2xlLWZpbHRlciBvcGVyYXRvci4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJPcGVyYXRvcj86IERhdGFUYWJsZUZpbHRlck9wO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgdmFsdWUuIFVzZSBgZmlsdGVyc2AgaW5zdGVhZC4gKi9cbiAgZmlsdGVyVmFsdWU/OiBhbnk7XG59XG4iXX0=
@@ -135,6 +135,7 @@ export class PlayerClientService {
135
135
  this.onConfig$.next(null);
136
136
  }
137
137
  }), tap(e => this.onPostMessage$.next(e)));
138
+ this.zone = zone;
138
139
  window.RevelDigital = {
139
140
  Controller: {
140
141
  onCommand: (name, arg) => {
@@ -822,7 +823,7 @@ export class PlayerClientService {
822
823
  * ```
823
824
  */
824
825
  createDataTable(tableId, options) {
825
- return new DataTableRef(tableId, options);
826
+ return new DataTableRef(tableId, this.zone, options);
826
827
  }
827
828
  /**
828
829
  * Creates a typed data table wrapper from a gadget preference value.
@@ -851,7 +852,7 @@ export class PlayerClientService {
851
852
  * ```
852
853
  */
853
854
  createDataTableFromPref(prefValue, options) {
854
- return new DataTablePrefRef(prefValue, options);
855
+ return new DataTablePrefRef(prefValue, this.zone, options);
855
856
  }
856
857
  // ---
857
858
  // PRIVATE METHODS.
@@ -988,4 +989,4 @@ class NoopClient {
988
989
  }
989
990
  }
990
991
  }
991
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPekQsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBY3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQW1LOUIsY0FBYztJQUNkLFlBQVksSUFBWTtRQS9KeEI7Ozs7Ozs7Ozs7O1dBV0c7UUFDSSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUU1Qzs7Ozs7Ozs7Ozs7O1dBWUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0M7Ozs7Ozs7Ozs7V0FVRztRQUNJLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDOzs7Ozs7Ozs7OztXQVdHO1FBQ0ksWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0I7Ozs7Ozs7OztXQVNHO1FBQ0ksY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVV0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LElBQUksRUFBRSxDQUFDO1FBRXBGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixHQUFHLENBQ0osQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLEdBQUcsQ0FDSixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnYWRnZXRzIH0gZnJvbSAnQHJldmVsZGlnaXRhbC9nYWRnZXQtdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NsaWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbW1hbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvY29tbWFuZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGF0YVRhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEZXZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMvZGV2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRXZlbnRQcm9wZXJ0aWVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LXByb3BlcnRpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IERhdGFUYWJsZVJlZiwgRGF0YVRhYmxlUHJlZlJlZiB9IGZyb20gJy4vZGF0YXRhYmxlLXJlZic7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuLy9pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuLy8gU28gdGhhdCBUeXBlU2NyaXB0IGRvZXNuJ3QgY29tcGxhaW4sIHdlJ3JlIGdvaW5nIHRvIGF1Z21lbnQgdGhlIEdMT0JBTCAvIFdJTkRPVyBcbi8vIG5hbWUtc3BhY2UgZGVmaW5pdGlvbiB0byBpbmNsdWRlIHRoZSBUcmFja2VyIEFQSS4gVGhpcyBhbHNvIHByb3ZpZGVzIHVzIHdpdGggYSBwbGFjZVxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3Ncbi8vIGF2YWlsYWJsZSBvbiB0aGUgbGlicmFyeS5cblxuLyoqIEBpZ25vcmUgKi9cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbGV0IENsaWVudDogSUNsaWVudDtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllciBjbGllbnQuXG4gKiBcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgaW50ZXJmYWNlIGZvciBnYWRnZXRzIGFuZCB3ZWIgYXBwbGljYXRpb25zXG4gKiB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllciBlbnZpcm9ubWVudC4gSXQgaGFuZGxlcyBkZXZpY2VcbiAqIGluZm9ybWF0aW9uLCBjb21tYW5kcywgZXZlbnRzLCBhbmFseXRpY3MgdHJhY2tpbmcsIGFuZCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuXG4gKiBcbiAqIFRoZSBzZXJ2aWNlIHN1cHBvcnRzIGJvdGggZGlyZWN0IEFQSSBjYWxscyBhbmQgZXZlbnQtYmFzZWQgY29tbXVuaWNhdGlvbiBwYXR0ZXJucyxcbiAqIGFsbG93aW5nIGdhZGdldHMgdG8gcmVzcG9uZCB0byBwbGF5ZXIgbGlmZWN5Y2xlIGV2ZW50cyAoc3RhcnQsIHN0b3AsIGNvbW1hbmRzKSBhbmRcbiAqIHNlbmQgZGF0YSBiYWNrIHRvIHRoZSBwbGF5ZXIgb3IgcmVtb3RlIGRldmljZXMuXG4gKiBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgY2xpZW50OiBQbGF5ZXJDbGllbnRTZXJ2aWNlKSB7XG4gKiAgIC8vIFN1YnNjcmliZSB0byBwbGF5ZXIgZXZlbnRzXG4gKiAgIHRoaXMuY2xpZW50Lm9uU3RhcnQkLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0dhZGdldCBzdGFydGVkJyk7XG4gKiAgIH0pO1xuICogICBcbiAqICAgdGhpcy5jbGllbnQub25Db21tYW5kJC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGNvbW1hbmQ6JywgY29tbWFuZCk7XG4gKiAgIH0pO1xuICogfVxuICogXG4gKiBhc3luYyBuZ09uSW5pdCgpIHtcbiAqICAgLy8gR2V0IGRldmljZSBpbmZvcm1hdGlvblxuICogICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2UoKTtcbiAqICAgY29uc3QgZGV2aWNlVGltZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWUoKTtcbiAqICAgXG4gKiAgIC8vIFRyYWNrIGFuYWx5dGljc1xuICogICB0aGlzLmNsaWVudC50cmFjaygnZ2FkZ2V0X2xvYWRlZCcsIHsgdmVyc2lvbjogJzEuMCcgfSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHNpbmNlIDEuMC4wXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgY2xpZW50UHJvbWlzZTogUHJvbWlzZTxJQ2xpZW50PiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGNvbW1hbmRzIHNlbnQgdG8gdGhpcyBwbGF5ZXIgZnJvbSB0aGUgUmV2ZWwgRGlnaXRhbCBwbGF0Zm9ybS5cbiAgICogU3Vic2NyaWJlIHRvIHRoaXMgdG8gaGFuZGxlIGN1c3RvbSBjb21tYW5kcyBzZW50IGZyb20gdGVtcGxhdGVzLCBwbGF5bGlzdHMsIG9yIHJlbW90ZSBkZXZpY2VzLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vbkNvbW1hbmQkLnN1YnNjcmliZShjb21tYW5kID0+IHtcbiAgICogICBpZiAoY29tbWFuZC5uYW1lID09PSAnY3VzdG9tQWN0aW9uJykge1xuICAgKiAgICAgdGhpcy5oYW5kbGVDdXN0b21BY3Rpb24oY29tbWFuZC5hcmcpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uQ29tbWFuZCQgPSBuZXcgU3ViamVjdDxJQ29tbWFuZD4oKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIGxvYWRlZCBhbmQgaXMgcmVhZHkgdG8gc3RhcnQuXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHJlYWR5LCBgZmFsc2VgIHdoZW4gZGVzdHJveWVkLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblJlYWR5JC5zdWJzY3JpYmUoaXNSZWFkeSA9PiB7XG4gICAqICAgaWYgKGlzUmVhZHkpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdDbGllbnQgaXMgcmVhZHknKTtcbiAgICogICAgIHRoaXMuaW5pdGlhbGl6ZUdhZGdldCgpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uUmVhZHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgYmVlbiBzdGFydGVkIGJ5IHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIHBsYXllciBiZWdpbnMgZXhlY3V0aW9uIG9mIHRoZSBnYWRnZXQgY29udGVudC5cbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5jbGllbnQub25TdGFydCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnR2FkZ2V0IHN0YXJ0ZWQnKTtcbiAgICogICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvblN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgYmVlbiBzdG9wcGVkIGJ5IHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIHBsYXllciBzdG9wcyBleGVjdXRpb24sIHR5cGljYWxseSB3aGVuIG1vdmluZ1xuICAgKiB0byB0aGUgbmV4dCBpdGVtIGluIGEgcGxheWxpc3Qgb3Igd2hlbiB0aGUgY29udGVudCBkdXJhdGlvbiBleHBpcmVzLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblN0b3AkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ0dhZGdldCBzdG9wcGVkJyk7XG4gICAqICAgdGhpcy5jbGVhbnVwKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvblN0b3AkID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IHNob3VsZCBvcGVuIHRoZSBjb25maWd1cmF0aW9uIHdpbmRvdy5cbiAgICogVGhpcyBhbGxvd3MgZ2FkZ2V0cyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgZnJvbSB0aGUgcGxheWVyLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vbkNvbmZpZyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICB0aGlzLm9wZW5Db25maWd1cmF0aW9uRGlhbG9nKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvbkNvbmZpZyQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgaGFzIHJlY2VpdmVkIGEgcG9zdE1lc3NhZ2UgZXZlbnQgZnJvbSB0aGUgcGxheWVyLlxuICAgKiBUaGlzIGhhbmRsZXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBnYWRnZXQgYW5kIHBsYXllciB2aWEgdGhlIHBvc3RNZXNzYWdlIEFQSS5cbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5jbGllbnQub25Qb3N0TWVzc2FnZSQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBtZXNzYWdlOicsIG1lc3NhZ2UpO1xuICAgKiAgIHRoaXMuaGFuZGxlUGxheWVyTWVzc2FnZShtZXNzYWdlKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uUG9zdE1lc3NhZ2UkID0gbmV3IFN1YmplY3QoKTtcblxuICAvL1xuICAvLyBUd28gbWV0aG9kcyBhdmFpbGFibGUgZm9yIGNhbGxpbmcgaW50byB0aGUgbGlicmFyeTpcbiAgLy9cbiAgLy8gMSkgVXNpbmcgZGlzcGF0Y2hFdmVudCgpIHdpdGggdGhlIGZvbGxvd2luZyBjdXN0b20gZXZlbnRzXG4gIC8vIDIpIFVzaW5nIHRoZSB3aW5kb3cgc2NvcGVkIFJldmVsRGlnaXRhbCBvYmplY3QgYXMgZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgLy9cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvblN0YXJ0U3ViOiBTdWJzY3JpcHRpb247XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdGFydEV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLlN0YXJ0JykucGlwZShcbiAgICBzaGFyZSgpLFxuICAgIHRhcCh0aGlzLm9uU3RhcnQkKVxuICApO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RvcFN1YjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RvcEV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLlN0b3AnKS5waXBlKFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25TdG9wJClcbiAgKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvbkNvbW1hbmRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvbkNvbW1hbmRFdnQkID0gZnJvbUV2ZW50PElDb21tYW5kPih3aW5kb3csICdSZXZlbERpZ2l0YWwuQ29tbWFuZCcpLnBpcGUoXG4gICAgbWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZS5kZXRhaWwubmFtZSwgYXJnOiBlLmRldGFpbC5hcmcgfSBhcyBJQ29tbWFuZCB9KSxcbiAgICBzaGFyZSgpLFxuICAgIHRhcCh0aGlzLm9uQ29tbWFuZCQpXG4gICk7XG4gIC8qKiBAaWdub3JlICovXG4gIC8vIHByaXZhdGUgb25Db25maWdTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLy8gLyoqIEBpZ25vcmUgKi9cbiAgLy8gcHJpdmF0ZSBvbkNvbmZpZ0V2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLkNvbmZpZycpLnBpcGUoXG4gIC8vICAgc2hhcmUoKSxcbiAgLy8gICB0YXAoKGU6IEN1c3RvbUV2ZW50KSA9PiB7XG4gIC8vICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAvLyAgICAgaWYgKGUuZGV0YWlsLnR5cGUgPT09ICdhcHBseUNvbmZpZycgJiYgZS5kZXRhaWwuaXNPcGVuZXIpIHtcbiAgLy8gICAgICAgdGhpcy5hcHBseUNvbmZpZyhlLmRldGFpbC5jb25maWcpOyAvLyBwcm9wYWdhdGUgY29uZmlnIHRvIGlmcmFtZSBwYXJlbnQgZnJvbSB0aGUgcG9wdXAgd2luZG93XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICB0aGlzLm9uQ29uZmlnJC5uZXh0KGUuZGV0YWlsKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyApO1xuICAvLyBwcml2YXRlIG9uUG9zdE1lc3NhZ2VTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLy8gcHJpdmF0ZSBvblBvc3RNZXNzYWdlRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdtZXNzYWdlJykucGlwZShcbiAgLy8gICBmaWx0ZXIoKG1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50KSA9PlxuICAvLyAgICAgbWVzc2FnZUV2ZW50LnNvdXJjZSAhPT0gd2luZG93LnBhcmVudCAmJlxuICAvLyAgICAgdHlwZW9mIG1lc3NhZ2VFdmVudC5kYXRhID09PSAnc3RyaW5nJyAmJlxuICAvLyAgICAgbWVzc2FnZUV2ZW50LmRhdGEuc3RhcnRzV2l0aCgncmV2ZWxkaWdpdGFsOicpKSxcbiAgLy8gICBtYXAoKGU6IGFueSkgPT4geyByZXR1cm4gSlNPTi5wYXJzZShlLnN1YnN0cmluZygxMykpIGFzIENvbW1hbmQgfSksXG4gIC8vICAgc2hhcmUoKSxcbiAgLy8gICB0YXAodGhpcy5vbkNvbW1hbmQkKVxuICAvLyApO1xuXG4gIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9uUG9zdE1lc3NhZ2VFdnQkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lc3NhZ2UnKS5waXBlKFxuICAgIGZpbHRlcigobWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQpID0+XG4gICAgICAvL21lc3NhZ2VFdmVudC5zb3VyY2UgIT09IHdpbmRvdy5wYXJlbnQgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlRXZlbnQuZGF0YSA9PT0gJ3N0cmluZycpLFxuICAgIG1hcCgoZTogYW55KSA9PiBKU09OLnBhcnNlKGUuZGF0YSkpLFxuICAgIHNoYXJlKCksXG4gICAgdGFwKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdhcHBseUNvbmZpZycgJiYgZS5pc09wZW5lcikge1xuICAgICAgICBlLmlzT3BlbmVyID0gZmFsc2U7XG4gICAgICAgIC8vIHByb3BhZ2F0ZSBjb25maWcgdG8gaWZyYW1lIHBhcmVudCBmcm9tIHRoZSBwb3B1cCB3aW5kb3dcbiAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICAnKidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZS50eXBlID09PSAnb3BlbkNvbmZpZycpIHtcbiAgICAgICAgdGhpcy5vbkNvbmZpZyQubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICB0YXAoZSA9PiB0aGlzLm9uUG9zdE1lc3NhZ2UkLm5leHQoZSkpXG4gICk7XG5cblxuICAvKiogQGlnbm9yZSAqL1xuICBjb25zdHJ1Y3Rvcih6b25lOiBOZ1pvbmUpIHtcblxuICAgICh3aW5kb3cgYXMgYW55KS5SZXZlbERpZ2l0YWwgPSB7XG4gICAgICBDb250cm9sbGVyOiB7XG4gICAgICAgIG9uQ29tbWFuZDogKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tbWFuZCQubmV4dCh7IG5hbWU6IG5hbWUsIGFyZzogYXJnIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0YXJ0OiAoKSA9PiB7XG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0YXJ0JC5uZXh0KG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0b3A6ICgpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RvcCQubmV4dChudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblN0b3BTdWIgPSB0aGlzLm9uU3RvcEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vbkNvbW1hbmRTdWIgPSB0aGlzLm9uQ29tbWFuZEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgLy90aGlzLm9uQ29uZmlnU3ViID0gdGhpcy5vbkNvbmZpZ0V2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViID0gdGhpcy5vblBvc3RNZXNzYWdlRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcblxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uUmVhZHkkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMub25TdGFydFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RvcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ29tbWFuZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAvL3RoaXMub25Db25maWdTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJyVj4pqZ77iPIEluaXRpYWxpemluZyBSZXZlbCBEaWdpdGFsIGNsaWVudCBsaWJyYXJ5JyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNhbGxiYWNrIHRvIHBsYXllciBzY3JpcHRpbmcgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGdhZGdldCB0byBjb21tdW5pY2F0ZSB3aXRoIHBsYXllciBzY3JpcHRpbmcuXG4gICAqIElmIHRoZSBhcHByb3ByaWF0ZSBzY3JpcHRpbmcgaXMgaW4gcGxhY2UgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlbXBsYXRlLCBcbiAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGluaXRpYXRlIGEgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGFjdGVkIHVwb24gaW4gcGxheWVyIHNjcmlwdC5cbiAgICogXG4gICAqIEBwYXJhbSBhcmdzIC0gVmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayAobWF4IDUgYXJndW1lbnRzKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTZW5kIGEgc2ltcGxlIGNhbGxiYWNrXG4gICAqIHRoaXMuY2xpZW50LmNhbGxiYWNrKCd0ZXN0JywgJ2RhdGEnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgbXVsdGlwbGUgcGFyYW1ldGVyc1xuICAgKiB0aGlzLmNsaWVudC5jYWxsYmFjaygnYWN0aW9uJywgJ3ZhbHVlMScsICd2YWx1ZTInLCB7IGRhdGE6ICdvYmplY3QnIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VyIHByZWZlcmVuY2VzIGludGVyZmFjZSBleHBvc2VkIGJ5IHRoZSBHb29nbGUgR2FkZ2V0cyBBUEkuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gZ2FkZ2V0IHByZWZlcmVuY2VzIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkXG4gICAqIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUy4gVXNlIHRoaXMgdG8gcmV0cmlldmUgdXNlci1jb25maWd1cmFibGUgc2V0dGluZ3NcbiAgICogZm9yIHlvdXIgZ2FkZ2V0LlxuICAgKiBcbiAgICogQHJldHVybnMgVGhlIEdhZGdldHMgQVBJIFByZWZzIG9iamVjdCBmb3IgYWNjZXNzaW5nIHByZWZlcmVuY2UgdmFsdWVzXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0cnVjdG9yKHB1YmxpYyBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcbiAgICogICBjb25zdCBwcmVmcyA9IGNsaWVudC5nZXRQcmVmcygpO1xuICAgKiAgIGNvbnN0IG15U3RyaW5nID0gcHJlZnMuZ2V0U3RyaW5nKCdteVN0cmluZ1ByZWYnKTtcbiAgICogICBjb25zdCBteU51bWJlciA9IHByZWZzLmdldEludCgnbXlOdW1iZXJQcmVmJyk7XG4gICAqICAgY29uc3QgbXlCb29sID0gcHJlZnMuZ2V0Qm9vbCgnbXlCb29sUHJlZicpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKiBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vZ2FkZ2V0cy9kb2NzL2Jhc2ljfSBHb29nbGUgR2FkZ2V0cyBBUEkgZG9jdW1lbnRhdGlvblxuICAgKi9cbiAgcHVibGljIGdldFByZWZzKCk6IGdhZGdldHMuUHJlZnMge1xuXG4gICAgcmV0dXJuIG5ldyB3aW5kb3dbJ2dhZGdldHMnXVsnUHJlZnMnXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWUgaW4gSVNPODYwMSBmb3JtYXQuXG4gICAqIFxuICAgKiBDdXJyZW50IGRldmljZSB0aW1lIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSB0aW1lem9uZSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlIGluIHRoZSBDTVMuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBkaXNwbGF5aW5nIHRpbWUtc2Vuc2l0aXZlIGNvbnRlbnQgb3Igc2NoZWR1bGluZyBvcGVyYXRpb25zIGJhc2VkIG9uXG4gICAqIHRoZSBkZXZpY2UncyBsb2NhbCB0aW1lIHJhdGhlciB0aGFuIGJyb3dzZXIgdGltZS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlIC0gT3B0aW9uYWwuIElmIHN1cHBsaWVkLCB3aWxsIHRyYW5zbGF0ZSB0aGUgc3VwcGxpZWQgZGF0ZS90aW1lIHRvIGRldmljZSB0aW1lIGJhc2VkIG9uIHJlc3BlY3RpdmUgdGltZXpvbmVzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRhdGUvdGltZSBpbiBJU084NjAxIGZvcm1hdFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBHZXQgY3VycmVudCBkZXZpY2UgdGltZVxuICAgKiBjb25zdCBjdXJyZW50VGltZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWUoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lOicsIGN1cnJlbnRUaW1lKTtcbiAgICogXG4gICAqIC8vIENvbnZlcnQgYSBzcGVjaWZpYyBkYXRlIHRvIGRldmljZSB0aW1lXG4gICAqIGNvbnN0IHNwZWNpZmljRGF0ZSA9IG5ldyBEYXRlKCcyMDIzLTAxLTAxVDEyOjAwOjAwWicpO1xuICAgKiBjb25zdCBkZXZpY2VUaW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZShzcGVjaWZpY0RhdGUpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBpZiAoZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWUoZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRpbWV6b25lIG5hbWUgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgbmFtZSAoZS5nLiwgXCJBbWVyaWNhL05ld19Zb3JrXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRpbWV6b25lTmFtZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWV6b25lOicsIHRpbWV6b25lTmFtZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGltZXpvbmUgSUQgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgSURcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdGltZXpvbmVJZCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lSUQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBJRDonLCB0aW1lem9uZUlkKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVJRCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWVyaWNhbCBvZmZzZXQgZnJvbSBHTVQgb2YgdGhlIHRpbWV6b25lIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRpbWV6b25lIG9mZnNldCBpbiBob3VycyAoZS5nLiwgLTUgZm9yIEVTVClcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgb2Zmc2V0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBvZmZzZXQ6Jywgb2Zmc2V0LCAnaG91cnMgZnJvbSBHTVQnKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lT2Zmc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFuZ3VhZ2UgY29kZSBvZiB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgXCJlbi1VU1wiLCBcImZyLUZSXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGxhbmd1YWdlQ29kZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIGxhbmd1YWdlOicsIGxhbmd1YWdlQ29kZSk7XG4gICAqIC8vIFVzZSBmb3IgbG9jYWxpemF0aW9uXG4gICAqIHRoaXMubG9hZExhbmd1YWdlUmVzb3VyY2VzKGxhbmd1YWdlQ29kZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0TGFuZ3VhZ2VDb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5pcXVlIFJldmVsIERpZ2l0YWwgZGV2aWNlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbiAgICogXG4gICAqIFRoZSBkZXZpY2Uga2V5IGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3BlY2lmaWMgcGxheWVyIGRldmljZVxuICAgKiBhbmQgY2FuIGJlIHVzZWQgZm9yIGRldmljZS1zcGVjaWZpYyBvcGVyYXRpb25zIG9yIHJlbW90ZSBjb21tYW5kcy5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZXZpY2Uga2V5IHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkZXZpY2VLZXkgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSBrZXk6JywgZGV2aWNlS2V5KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGxvY2FsIHBsYXllciBkZXZpY2UuXG4gICAqIFxuICAgKiBDb21tYW5kcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGxheWVyIG9yIHRyaWdnZXJcbiAgICogc3BlY2lmaWMgYmVoYXZpb3JzLiBUaGUgY29tbWFuZCBpcyBwcm9jZXNzZWQgYnkgdGhlIGxvY2FsIHBsYXllciBvbmx5LlxuICAgKiBcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgY29tbWFuZCBuYW1lL2lkZW50aWZpZXJcbiAgICogQHBhcmFtIGFyZyAtIFRoZSBjb21tYW5kIGFyZ3VtZW50L3BheWxvYWRcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU2VuZCBhIHNpbXBsZSBjb21tYW5kXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdyZWZyZXNoJywgJycpO1xuICAgKiBcbiAgICogLy8gU2VuZCBhIGNvbW1hbmQgd2l0aCBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdzZXRWb2x1bWUnLCAnNTAnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgYSBjb21tYW5kIHdpdGggSlNPTiBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdjb25maWd1cmUnLCBKU09OLnN0cmluZ2lmeSh7IHNldHRpbmc6ICd2YWx1ZScgfSkpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gcmVtb3RlIHBsYXllciBkZXZpY2VzIHdpdGggdGhlIHNwZWNpZmllZCBkZXZpY2Uga2V5cy5cbiAgICogXG4gICAqIFJlbW90ZSBjb21tYW5kcyBhbGxvdyBjcm9zcy1kZXZpY2UgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhlIHNhbWUgUmV2ZWwgRGlnaXRhbCBhY2NvdW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3luY2hyb25pemVkIGRpc3BsYXlzLCBkZXZpY2UgY29vcmRpbmF0aW9uLCBvciByZW1vdGUgY29udHJvbCBzY2VuYXJpb3MuXG4gICAqIFxuICAgKiBOb3RlOiBSZW1vdGUgY29tbWFuZHMgY2FuIG9ubHkgYmUgZGVsaXZlcmVkIHRvIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNlbmRlciBkZXZpY2UuXG4gICAqIFxuICAgKiBAcGFyYW0gZGV2aWNlS2V5cyAtIEFycmF5IG9mIHRhcmdldCBkZXZpY2Uga2V5cyB0byBzZW5kIHRoZSBjb21tYW5kIHRvXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIGNvbW1hbmQgbmFtZS9pZGVudGlmaWVyXG4gICAqIEBwYXJhbSBhcmcgLSBUaGUgY29tbWFuZCBhcmd1bWVudC9wYXlsb2FkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNlbmQgY29tbWFuZCB0byBzcGVjaWZpYyBkZXZpY2VzXG4gICAqIGNvbnN0IHRhcmdldERldmljZXMgPSBbJ2RldmljZS1rZXktMScsICdkZXZpY2Uta2V5LTInXTtcbiAgICogdGhpcy5jbGllbnQuc2VuZFJlbW90ZUNvbW1hbmQodGFyZ2V0RGV2aWNlcywgJ3N5bmNBY3Rpb24nLCAnc3RhcnQnKTtcbiAgICogXG4gICAqIC8vIEJyb2FkY2FzdCB0byBtdWx0aXBsZSBkZXZpY2VzXG4gICAqIHRoaXMuY2xpZW50LnNlbmRSZW1vdGVDb21tYW5kKFxuICAgKiAgIFsnbG9iYnktZGlzcGxheScsICdraW9zay0xJywgJ2tpb3NrLTInXSwgXG4gICAqICAgJ3VwZGF0ZUNvbnRlbnQnLCBcbiAgICogICBKU09OLnN0cmluZ2lmeSh7IGNvbnRlbnRJZDogJzEyMzQ1JyB9KVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYW4gYW5hbHl0aWNzIGV2ZW50IGZvciB1c2Ugd2l0aCBBZEhhd2sgYW5hbHl0aWNzIGFuZCByZXBvcnRpbmcuXG4gICAqIFxuICAgKiBFdmVudHMgYXJlIHVzZWQgZm9yIHRyYWNraW5nIHZhcmlvdXMgbWV0cmljcyBpbmNsdWRpbmcgdXNhZ2Ugc3RhdGlzdGljcywgXG4gICAqIHBsYXllciBjb25kaXRpb24sIHN0YXRlIGNoYW5nZXMsIHVzZXIgaW50ZXJhY3Rpb25zLCBhbmQgY3VzdG9tIGJ1c2luZXNzIG1ldHJpY3MuXG4gICAqIFRoZXNlIGV2ZW50cyBjYW4gYmUgdmlld2VkIGluIHRoZSBSZXZlbCBEaWdpdGFsIGFuYWx5dGljcyBkYXNoYm9hcmQuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgZXZlbnQgKHNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgY29uc2lzdGVudClcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBPcHRpb25hbCBtYXAgb2YgdXNlci1kZWZpbmVkIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBldmVudFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTaW1wbGUgZXZlbnQgdHJhY2tpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnKTtcbiAgICogXG4gICAqIC8vIEV2ZW50IHdpdGggcHJvcGVydGllc1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygndXNlcl9pbnRlcmFjdGlvbicsIHtcbiAgICogICBhY3Rpb246ICdidXR0b25fY2xpY2snLFxuICAgKiAgIGJ1dHRvbl9pZDogJ3N0YXJ0X2J1dHRvbicsXG4gICAqICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICogfSk7XG4gICAqIFxuICAgKiAvLyBQZXJmb3JtYW5jZSB0cmFja2luZ1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnY29udGVudF9kaXNwbGF5ZWQnLCB7XG4gICAqICAgY29udGVudF90eXBlOiAndmlkZW8nLFxuICAgKiAgIGR1cmF0aW9uOiAzMCxcbiAgICogICBxdWFsaXR5OiAnSEQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IElFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSB0aW1lZCBldmVudCBmb3IgZHVyYXRpb24gdHJhY2tpbmcuXG4gICAqIFxuICAgKiBUaW1lZCBldmVudHMgYXJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIGR1cmF0aW9uIG9mIG9wZXJhdGlvbnMgb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHRyYWNrKCkgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHRvIGNvbXBsZXRlXG4gICAqIHRoZSB0aW1pbmcgbWVhc3VyZW1lbnQuIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBhbmQgaW5jbHVkZWRcbiAgICogaW4gdGhlIGV2ZW50IHByb3BlcnRpZXMuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgdGltZWQgZXZlbnQgKG11c3QgbWF0Y2ggdGhlIHN1YnNlcXVlbnQgdHJhY2soKSBjYWxsKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTdGFydCB0aW1pbmcgYW4gZXZlbnRcbiAgICogdGhpcy5jbGllbnQudGltZUV2ZW50KCd2aWRlb19wbGF5YmFjaycpO1xuICAgKiBcbiAgICogLy8gLi4uIHZpZGVvIHBsYXlzIGZvciBzb21lIGR1cmF0aW9uIC4uLlxuICAgKiBcbiAgICogLy8gRW5kIHRpbWluZyBhbmQgbG9nIHRoZSBldmVudCB3aXRoIGR1cmF0aW9uXG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCd2aWRlb19wbGF5YmFjaycsIHtcbiAgICogICB2aWRlb19pZDogJ2FiYzEyMycsXG4gICAqICAgcXVhbGl0eTogJ0hEJ1xuICAgKiB9KTsgLy8gRHVyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkXG4gICAqIFxuICAgKiAvLyBFeGFtcGxlIGZvciB1c2VyIGludGVyYWN0aW9uIHRpbWluZ1xuICAgKiB0aGlzLmNsaWVudC50aW1lRXZlbnQoJ2Zvcm1fY29tcGxldGlvbicpO1xuICAgKiAvLyAuLi4gdXNlciBmaWxscyBvdXQgZm9ybSAuLi5cbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2Zvcm1fY29tcGxldGlvbicsIHsgZm9ybV90eXBlOiAnY29udGFjdCcgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC50aW1lRXZlbnQoZXZlbnROYW1lKTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYW5hbHl0aWNzIGV2ZW50IHNlc3Npb24gZm9yIGdyb3VwaW5nIHJlbGF0ZWQgZXZlbnRzLlxuICAgKiBcbiAgICogQSBzZXNzaW9uIGlzIGEgd2F5IG9mIGdyb3VwaW5nIGV2ZW50cyB0b2dldGhlciBmb3IgYW5hbHlzaXMuIEVhY2ggZXZlbnQgdHJhY2tlZFxuICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSB0aGUgc2FtZSBzZXNzaW9uIElEIHVudGlsIGEgbmV3IHNlc3Npb24gaXMgY3JlYXRlZC5cbiAgICogU2Vzc2lvbiBJRHMgYXJlIHJhbmRvbWx5IGdlbmVyYXRlZCB1bmxlc3MgZXhwbGljaXRseSBwcm92aWRlZC5cbiAgICogXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciB0cmFja2luZyB1c2VyIGpvdXJuZXlzLCB3b3JrZmxvdyBjb21wbGV0aW9uLCBvciBncm91cGluZ1xuICAgKiByZWxhdGVkIGludGVyYWN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyB0aW1lIHBlcmlvZC5cbiAgICogXG4gICAqIEBwYXJhbSBpZCAtIE9wdGlvbmFsIHVzZXItc3VwcGxpZWQgc2Vzc2lvbiBJRC4gSWYgbm90IHByb3ZpZGVkLCBhIHJhbmRvbSBzZXNzaW9uIElEIHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gd2l0aCBhdXRvLWdlbmVyYXRlZCBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3Nlc3Npb25fc3RhcnQnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzEnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzInKTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgc2Vzc2lvbiB3aXRoIGN1c3RvbSBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oJ3VzZXItd29ya2Zsb3ctMTIzNDUnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3dvcmtmbG93X3N0YXJ0Jyk7XG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCdzdGVwX2NvbXBsZXRlZCcsIHsgc3RlcDogMSB9KTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gZm9yIGRpZmZlcmVudCB3b3JrZmxvd1xuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2RpZmZlcmVudF93b3JrZmxvd19zdGFydCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIHBhdGggdXRpbGl6ZWQgYnkgdGhpcyBwbGF5ZXIgZGV2aWNlLlxuICAgKiBcbiAgICogVGhpcyByZXR1cm5zIHRoZSBiYXNlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllclxuICAgKiBzdG9yZXMgaXRzIGZpbGVzIGFuZCByZXNvdXJjZXMgb24gdGhlIGxvY2FsIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBwYXRoIG9mIHRoZSByb290IGZvbGRlclxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByb290UGF0aCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFJldmVsUm9vdCgpO1xuICAgKiBjb25zb2xlLmxvZygnUGxheWVyIHJvb3QgZGlyZWN0b3J5OicsIHJvb3RQYXRoKTtcbiAgICogLy8gVXNlIGZvciBjb25zdHJ1Y3RpbmcgZmlsZSBwYXRocyBvciB1bmRlcnN0YW5kaW5nIHN0b3JhZ2Ugc3RydWN0dXJlXG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJldmVsUm9vdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG1hcCBvZiBjb21tYW5kcyBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIGRldmljZS5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBjb21tYW5kIGNvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyB0aGUgZGV2aWNlXG4gICAqIHJlc3BvbmRzIHRvIHZhcmlvdXMgY29tbWFuZCB0cmlnZ2VycyBhbmQgcmVtb3RlIGNvbW1hbmRzLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYSBtYXAgb2YgY3VycmVudGx5IGFjdGl2ZSBjb21tYW5kc1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjb21tYW5kTWFwID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0Q29tbWFuZE1hcCgpO1xuICAgKiBjb25zb2xlLmxvZygnQWN0aXZlIGNvbW1hbmRzOicsIGNvbW1hbmRNYXApO1xuICAgKiBcbiAgICogLy8gQ2hlY2sgaWYgc3BlY2lmaWMgY29tbWFuZCBpcyBhdmFpbGFibGVcbiAgICogaWYgKGNvbW1hbmRNYXBbJ2N1c3RvbUNvbW1hbmQnXSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDdXN0b20gY29tbWFuZCBpcyBhdmFpbGFibGUnKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbmFscyB0byB0aGUgcGxheWVyIHRoYXQgdGhpcyBnYWRnZXQgaGFzIGNvbXBsZXRlZCBpdHMgdmlzdWFsaXphdGlvbi5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIHRoZSBwbGF5ZXIgdGhhdCB0aGUgY3VycmVudCBnYWRnZXQgaGFzIGZpbmlzaGVkIGl0c1xuICAgKiBjb250ZW50IGRpc3BsYXkgb3IgaW50ZXJhY3Rpb24gY3ljbGUuIFRoZSBwbGF5ZXIgY2FuIHRoZW4gcHJvY2VlZCB3aXRoXG4gICAqIHRoZSBuZXh0IGl0ZW0gaW4gYSBwbGF5bGlzdCBpZiBhcHBsaWNhYmxlLCBvciBoYW5kbGUgdGhlIGNvbXBsZXRpb25cbiAgICogYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLlxuICAgKiBcbiAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aGVuIHlvdXIgZ2FkZ2V0IGhhcyBjb21wbGV0ZWQgaXRzIGludGVuZGVkIGZ1bmN0aW9uLFxuICAgKiBzdWNoIGFzIGZpbmlzaGluZyBhbiBhbmltYXRpb24sIGNvbXBsZXRpbmcgYSBmb3JtLCBvciByZWFjaGluZyBhIG5hdHVyYWxcbiAgICogc3RvcHBpbmcgcG9pbnQuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEFmdGVyIGNvbXBsZXRpbmcgYW4gYW5pbWF0aW9uXG4gICAqIHByaXZhdGUgb25BbmltYXRpb25Db21wbGV0ZSgpOiB2b2lkIHtcbiAgICogICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogfVxuICAgKiBcbiAgICogLy8gQWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxuICAgKiBwcml2YXRlIG9uRm9ybVN1Ym1pdHRlZCgpOiB2b2lkIHtcbiAgICogICB0aGlzLnNhdmVGb3JtRGF0YSgpO1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBBZnRlciBhIHRpbWVkIGRpc3BsYXkgcGVyaW9kXG4gICAqIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9LCAzMDAwMCk7IC8vIDMwIHNlY29uZHNcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgY2xpZW50LmZpbmlzaCgpO1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBnYWRnZXQgaXMgcnVubmluZyBpbiBwcmV2aWV3IG1vZGUuXG4gICAqIFxuICAgKiBQcmV2aWV3IG1vZGUgaXMgZW5hYmxlZCB3aGVuIHRoZSBnYWRnZXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUyxcbiAgICogdGVzdGVkIGluIHRoZSBnYWRnZXQgZWRpdG9yLCBvciBvdGhlcndpc2Ugbm90IHJ1bm5pbmcgaW4gYSBub3JtYWwgcGxheWVyIGVudmlyb25tZW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvdmlkaW5nIGRpZmZlcmVudCBiZWhhdmlvciBkdXJpbmcgZGV2ZWxvcG1lbnQvdGVzdGluZyB2ZXJzdXNcbiAgICogcHJvZHVjdGlvbiBkZXBsb3ltZW50LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBydW5uaW5nIGluIHByZXZpZXcgbW9kZSwgZmFsc2UgaWYgcnVubmluZyBvbiBhY3R1YWwgcGxheWVyXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGlzUHJldmlldyA9IGF3YWl0IHRoaXMuY2xpZW50LmlzUHJldmlld01vZGUoKTtcbiAgICogXG4gICAqIGlmIChpc1ByZXZpZXcpIHtcbiAgICogICBjb25zb2xlLmxvZygnUnVubmluZyBpbiBwcmV2aWV3IG1vZGUgLSB1c2luZyBtb2NrIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRNb2NrRGF0YSgpO1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIG9uIHBsYXllciBkZXZpY2UgLSB1c2luZyBsaXZlIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRMaXZlRGF0YSgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBTaG93IGRpZmZlcmVudCBVSSBpbiBwcmV2aWV3XG4gICAqIHRoaXMuc2hvd1ByZXZpZXdJbmRpY2F0b3IgPSBpc1ByZXZpZXc7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzUHJldmlld01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudCBpbnN0YW5jZW9mIE5vb3BDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhlIHBsYXllci5cbiAgICogXG4gICAqIFJldHVybnMgY29tcHJlaGVuc2l2ZSBkZXZpY2UgZGV0YWlscyBpbmNsdWRpbmcgbmFtZSwgcmVnaXN0cmF0aW9uIGtleSwgdHlwZSxcbiAgICogc2VydmljZSBkYXRlLCBsYW5ndWFnZSwgdGltZXpvbmUsIHRhZ3MsIGFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBkYXRhXG4gICAqIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIFJldmVsIERpZ2l0YWwgQ01TIGZvciBlYWNoIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRldmljZSBkZXRhaWxzIG9iamVjdCwgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZSgpO1xuICAgKiBcbiAgICogaWYgKGRldmljZSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdEZXZpY2UgbmFtZTonLCBkZXZpY2UubmFtZSk7XG4gICAqICAgY29uc29sZS5sb2coJ0RldmljZSB0eXBlOicsIGRldmljZS5kZXZpY2VUeXBlKTtcbiAgICogICBjb25zb2xlLmxvZygnTG9jYXRpb246JywgZGV2aWNlLmxvY2F0aW9uLmNpdHksIGRldmljZS5sb2NhdGlvbi5zdGF0ZSk7XG4gICAqICAgY29uc29sZS5sb2coJ1RhZ3M6JywgZGV2aWNlLnRhZ3MpO1xuICAgKiAgIFxuICAgKiAgIC8vIFVzZSBkZXZpY2UgaW5mbyBmb3IgY3VzdG9taXphdGlvblxuICAgKiAgIGlmIChkZXZpY2UubG9jYXRpb24uY291bnRyeSA9PT0gJ1VTJykge1xuICAgKiAgICAgdGhpcy5sb2FkVVNDb250ZW50KCk7XG4gICAqICAgfVxuICAgKiAgIFxuICAgKiAgIC8vIENoZWNrIGRldmljZSBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdHlwZVxuICAgKiAgIGlmIChkZXZpY2UuZGV2aWNlVHlwZSA9PT0gJ2FuZHJvaWQnKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZVRvdWNoRmVhdHVyZXMoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8SURldmljZSB8IG51bGw+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBjb25zdCBvYmo6IGFueSA9IEpTT04ucGFyc2UoPHN0cmluZz5hd2FpdCBjbGllbnQuZ2V0RGV2aWNlKCkpO1xuXG4gICAgY29uc3QgZGV2aWNlOiBJRGV2aWNlW10gPSBbb2JqXS5tYXAoKGRldmljZTogYW55KSA9PiB7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRldmljZS5uYW1lLFxuICAgICAgICByZWdpc3RyYXRpb25LZXk6IGRldmljZS5rZXksXG4gICAgICAgIGRldmljZVR5cGU6IGRldmljZS5kZXZpY2V0eXBlLFxuICAgICAgICBlbnRlcmVkU2VydmljZTogbmV3IERhdGUoZGV2aWNlLmVudGVyZWRzZXJ2aWNlKSxcbiAgICAgICAgbGFuZ0NvZGU6IGRldmljZS5sYW5nY29kZSxcbiAgICAgICAgdGltZVpvbmU6IGRldmljZS50aW1lem9uZSxcbiAgICAgICAgdGFnczogZGV2aWNlLmRlc2NyaXB0aW9uPy5zcGxpdCgnXFxuJyksXG4gICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgY2l0eTogZGV2aWNlLmxvY2F0aW9uPy5jaXR5LFxuICAgICAgICAgIHN0YXRlOiBkZXZpY2UubG9jYXRpb24/LnN0YXRlLFxuICAgICAgICAgIGNvdW50cnk6IGRldmljZS5sb2NhdGlvbj8uY291bnRyeSxcbiAgICAgICAgICBwb3N0YWxDb2RlOiBkZXZpY2UubG9jYXRpb24/LnBvc3RhbGNvZGUsXG4gICAgICAgICAgYWRkcmVzczogZGV2aWNlLmxvY2F0aW9uPy5hZGRyZXNzLFxuICAgICAgICAgIGxhdGl0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxhdGl0dWRlLFxuICAgICAgICAgIGxvbmdpdHVkZTogZGV2aWNlLmxvY2F0aW9uPy5sb25naXR1ZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZXZpY2VbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYXJlYSBpbiBwaXhlbHMuXG4gICAqIFxuICAgKiBUaGlzIHJldHVybnMgdGhlIGF2YWlsYWJsZSB3aWR0aCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIHdpZHRoIGRlcGVuZGluZyBvbiBwbGF5ZXIgY29uZmlndXJhdGlvblxuICAgKiBhbmQgdGVtcGxhdGUgbGF5b3V0LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gd2lkdGggaW4gcGl4ZWxzLCBvciBudWxsIGlmIG5vdCBhdmFpbGFibGVcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgd2lkdGggPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRXaWR0aCgpO1xuICAgKiBcbiAgICogaWYgKHdpZHRoKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSB3aWR0aDonLCB3aWR0aCwgJ3BpeGVscycpO1xuICAgKiAgIFxuICAgKiAgIC8vIEFkYXB0IGNvbnRlbnQgbGF5b3V0IGJhc2VkIG9uIHdpZHRoXG4gICAqICAgaWYgKHdpZHRoIDwgODAwKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZU1vYmlsZUxheW91dCgpO1xuICAgKiAgIH0gZWxzZSB7XG4gICAqICAgICB0aGlzLmVuYWJsZURlc2t0b3BMYXlvdXQoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2lkdGgoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRXaWR0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhcmVhIGluIHBpeGVscy5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgYXZhaWxhYmxlIGhlaWdodCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIGhlaWdodCBkZXBlbmRpbmcgb24gcGxheWVyIGNvbmZpZ3VyYXRpb25cbiAgICogYW5kIHRlbXBsYXRlIGxheW91dC5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhlaWdodCBpbiBwaXhlbHMsIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBoZWlnaHQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRIZWlnaHQoKTtcbiAgICogXG4gICAqIGlmIChoZWlnaHQpIHtcbiAgICogICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIGhlaWdodDonLCBoZWlnaHQsICdwaXhlbHMnKTtcbiAgICogICBcbiAgICogICAvLyBDYWxjdWxhdGUgYXNwZWN0IHJhdGlvIGZvciByZXNwb25zaXZlIGRlc2lnblxuICAgKiAgIGNvbnN0IHdpZHRoID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0V2lkdGgoKTtcbiAgICogICBjb25zdCBhc3BlY3RSYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgKiAgIHRoaXMuYWRqdXN0Q29udGVudEZvckFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgY29udGVudCBpdGVtLlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgaXMgb25seSBhcHBsaWNhYmxlIHdoZW4gdGhlIGdhZGdldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBwbGF5bGlzdFxuICAgKiBhbmQgcmV0dXJucyB0aGUgZHVyYXRpb24gYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgcGxheWxpc3QgaXRlbS4gVGhlIGR1cmF0aW9uXG4gICAqIGRldGVybWluZXMgaG93IGxvbmcgdGhlIGNvbnRlbnQgc2hvdWxkIGJlIGRpc3BsYXllZCBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUvYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgICogXG4gICAqIGlmIChkdXJhdGlvbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDb250ZW50IGR1cmF0aW9uOicsIGR1cmF0aW9uLCAnbWlsbGlzZWNvbmRzJyk7XG4gICAqICAgXG4gICAqICAgLy8gU2V0IHVwIGF1dG8tZmluaXNoIHRpbWVyXG4gICAqICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAqICAgICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogICB9LCBkdXJhdGlvbik7XG4gICAqICAgXG4gICAqICAgLy8gU2hvdyBwcm9ncmVzcyBpbmRpY2F0b3JcbiAgICogICB0aGlzLnN0YXJ0UHJvZ3Jlc3NJbmRpY2F0b3IoZHVyYXRpb24pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFJldmVsIERpZ2l0YWwgU0RLLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIFNESyB2ZXJzaW9uIHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0U2RrVmVyc2lvbigpO1xuICAgKiBjb25zb2xlLmxvZygnU0RLIFZlcnNpb246JywgdmVyc2lvbik7XG4gICAqIFxuICAgKiAvLyBVc2UgZm9yIGNvbXBhdGliaWxpdHkgY2hlY2tzIG9yIGxvZ2dpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnLCB7IHNka1ZlcnNpb246IHZlcnNpb24gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNka1ZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmVyc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzIHRvIHRoZSBnYWRnZXQgKHByZXZpZXcgbW9kZSBvbmx5KS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gcnVubmluZyBpbiBwcmV2aWV3IG1vZGUgKHR5cGljYWxseSBkdXJpbmdcbiAgICogZ2FkZ2V0IGRldmVsb3BtZW50IG9yIHRlc3RpbmcgaW4gdGhlIENNUykuIEl0IGFsbG93cyBhcHBseWluZyBjb25maWd1cmF0aW9uXG4gICAqIGNoYW5nZXMgdGhhdCB3b3VsZCBub3JtYWxseSBjb21lIGZyb20gdGhlIGdhZGdldCdzIHByZWZlcmVuY2Ugc2V0dGluZ3MuXG4gICAqIFxuICAgKiBAcGFyYW0gcHJlZnMgLSBEaWN0aW9uYXJ5IG9mIHByZWZlcmVuY2Uga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCB0aGlzLmNsaWVudC5pc1ByZXZpZXdNb2RlKCkpIHtcbiAgICogICAvLyBBcHBseSB0ZXN0IGNvbmZpZ3VyYXRpb24gaW4gcHJldmlld1xuICAgKiAgIGF3YWl0IHRoaXMuY2xpZW50LmFwcGx5Q29uZmlnKHtcbiAgICogICAgICd0aXRsZSc6ICdUZXN0IFRpdGxlJyxcbiAgICogICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnI2ZmMDAwMCcsXG4gICAqICAgICAnc2hvd0JvcmRlcic6IHRydWUsXG4gICAqICAgICAncmVmcmVzaEludGVydmFsJzogMzBcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhcHBseUNvbmZpZyhwcmVmczogSURpY3Rpb25hcnk8YW55Pikge1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQcmV2aWV3TW9kZSgpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgY2xpZW50LmFwcGx5Q29uZmlnKHByZWZzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICclY2FwcGx5Q29uZmlnKCkgaXMgb25seSBhdmFpbGFibGUgaW4gcHJldmlldyBtb2RlLicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHlwZWQgd3JhcHBlciBmb3IgYSBSZXZlbCBEaWdpdGFsIGRhdGEgdGFibGUuXG4gICAqXG4gICAqIFRoZSBkYXRhIHRhYmxlIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgZ2FkZ2V0LiBUaGUgcmV0dXJuZWRcbiAgICoge0BsaW5rIERhdGFUYWJsZVJlZn0gcHJvdmlkZXMgdHlwZWQgUHJvbWlzZS1iYXNlZCBtZXRob2RzIGFuZCBSeEpTXG4gICAqIE9ic2VydmFibGVzIGZvciByZWFsLXRpbWUgcm93IGNoYW5nZSBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gVGhlIGRhdGEgdGFibGUgSUQgKGUuZy4gJ3RibF9tZW51X2l0ZW1zJylcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhVGFibGVSZWZ9IGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gICAqXG4gICAqIC8vIEZldGNoIHJvd3Mgd2l0aCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmdcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7XG4gICAqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAnRW50cmVlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9LFxuICAgKiAgIHNvcnQ6ICdwcmljZScsXG4gICAqICAgc29ydERpcjogJ2FzYydcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFN1YnNjcmliZSB0byByZWFsLXRpbWUgdXBkYXRlc1xuICAgKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdSb3cgdXBkYXRlZDonLCBjaGFuZ2UpKTtcbiAgICogZHQucm93Q3JlYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZygnUm93IGNyZWF0ZWQ6JywgY2hhbmdlKSk7XG4gICAqIGR0LnJvd0RlbGV0ZWQkLnN1YnNjcmliZShjaGFuZ2UgPT4gY29uc29sZS5sb2coJ1JvdyBkZWxldGVkOicsIGNoYW5nZSkpO1xuICAgKlxuICAgKiAvLyBDbGVhbnVwIHdoZW4gZG9uZVxuICAgKiBkdC5kaXNwb3NlKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNyZWF0ZURhdGFUYWJsZSh0YWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucyk6IERhdGFUYWJsZVJlZiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhVGFibGVSZWYodGFibGVJZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHR5cGVkIGRhdGEgdGFibGUgd3JhcHBlciBmcm9tIGEgZ2FkZ2V0IHByZWZlcmVuY2UgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBwcmVmZXJlbmNlIEpTT04gc3RyaW5nIChhcyBzZXJpYWxpemVkIGJ5IHRoZSB0ZW1wbGF0ZSBlZGl0b3IncyBkYXRhdGFibGVcbiAgICogb3B0aW9uKSBpcyBwYXJzZWQgYW5kIHVzZWQgdG8gYXV0by1jb25maWd1cmUgZmlsdGVyLCBzb3J0LCBhbmQgbG9naWMgc2V0dGluZ3MuXG4gICAqIFRoZSByZXR1cm5lZCB7QGxpbmsgRGF0YVRhYmxlUHJlZlJlZn0gcHJvdmlkZXMgYSBgZ2V0RmlsdGVyZWRSb3dzKClgIGNvbnZlbmllbmNlXG4gICAqIG1ldGhvZCB0aGF0IGFwcGxpZXMgdGhlc2Ugc2V0dGluZ3MgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHBhcmFtIHByZWZWYWx1ZSAtIFRoZSByYXcgZ2FkZ2V0IHByZWZlcmVuY2Ugc3RyaW5nIChKU09OKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERhdGFUYWJsZVByZWZSZWZ9IGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgY2ZnID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZnMuZ2V0U3RyaW5nKCdyZERhdGFUYWJsZScpKTtcbiAgICpcbiAgICogLy8gRmV0Y2ggcm93cyB3aXRoIGF1dG8td2lyZWQgZmlsdGVyICsgc29ydFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjZmcuZ2V0RmlsdGVyZWRSb3dzKCk7XG4gICAqXG4gICAqIC8vIEFjY2VzcyB0aGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYgZm9yIGV2ZW50cywgc2NoZW1hLCBldGMuXG4gICAqIGNmZy5kYXRhVGFibGUucm93VXBkYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZyhjaGFuZ2UpKTtcbiAgICpcbiAgICogLy8gQ2xlYW51cCB3aGVuIGRvbmVcbiAgICogY2ZnLmRpc3Bvc2UoKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZlZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucyk6IERhdGFUYWJsZVByZWZSZWYge1xuICAgIHJldHVybiBuZXcgRGF0YVRhYmxlUHJlZlJlZihwcmVmVmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gLS0tXG4gIC8vIFBSSVZBVEUgTUVUSE9EUy5cbiAgLy8gLS0tXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFByb21pc2U8SUNsaWVudD4ge1xuXG4gICAgaWYgKHRoaXMuY2xpZW50UHJvbWlzZSkge1xuXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XG4gICAgfVxuXG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5DbGllbnQpIHtcblxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKHdpbmRvdyBhcyBhbnkpLkNsaWVudCkpO1xuICAgIH1cblxuICAgIC8vIEEgXCJjb21wbGV0ZVwiIHN0YXR1cyBpbmRpY2F0ZXMgdGhhdCB0aGUgXCJsb2FkXCIgZXZlbnQgaGFzIGJlZW4gZmlyZWQgb24gdGhlXG4gICAgLy8gd2luZG93OyBhbmQsIHRoYXQgYWxsIHN1Yi1yZXNvdXJjZXMgc3VjaCBhcyBTY3JpcHRzLCBJbWFnZXMsIGFuZCBGcmFtZXMgaGF2ZVxuICAgIC8vIGJlZW4gbG9hZGVkLlxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cbiAgICAgIC8vIElmIHRoaXMgZXZlbnQgaGFzIGZpcmVkIEFORCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBpc24ndCBhdmFpbGFibGUgKHNlZSBJRi1cbiAgICAgIC8vIGNvbmRpdGlvbiBCRUZPUkUgdGhpcyBvbmUpLCBpdCBtZWFucyB0aGF0IHRoZSAzcmQtcGFydHkgc2NyaXB0IGVpdGhlclxuICAgICAgLy8gZmFpbGVkIG9uIHRoZSBuZXR3b3JrIG9yIHdhcyBCTE9DS0VEIGJ5IGFuIGFkLWJsb2NrZXIuIEFzIHN1Y2gsIHdlIGhhdmUgdG9cbiAgICAgIC8vIGZhbGwtYmFjayB0byB1c2luZyBhIG1vY2sgQVBJLlxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobmV3IE5vb3BDbGllbnQoKSkpO1xuICAgIH1cblxuICAgIC8vIEFTU0VSVDogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgdGhlIGRvY3VtZW50IGhhcyBub3QgY29tcGxldGVkIGxvYWRpbmcgKGJ1dCBpdFxuICAgIC8vIG1heSBiZSBpbiBhbiBcImludGVyYWN0aXZlXCIgc3RhdGUgd2hpY2ggaXMgd2hlbiBJIGJlbGlldmUgdGhhdCB0aGUgQW5ndWxhciBhcHBcbiAgICAvLyBnZXRzIGJvb3RzdHJhcHBlZCkuIEFzIHN1Y2gsIHdlIG5lZWQgYmluZCB0byB0aGUgTE9BRCBldmVudCB0byB3YWl0IGZvciBvdXJcbiAgICAvLyB0aGlyZC1wYXJ0eSBzY3JpcHRzIHRvIGxvYWQgKG9yIGZhaWwgdG8gbG9hZCwgb3IgYmUgYmxvY2tlZCkuXG4gICAgdGhpcy5jbGllbnRQcm9taXNlID0gbmV3IFByb21pc2U8SUNsaWVudD4oXG4gICAgICAocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIFwibG9hZFwiLFxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0xvYWQoKSB7XG5cbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSAzcmQtcGFydHkgbGlicmFyeSBpcyBlaXRoZXIgYXZhaWxhYmxlIG9yXG4gICAgICAgICAgICAvLyBpdCdzIG5vdCAtIHRoZXJlJ3Mgbm8gZnVydGhlciBsb2FkaW5nIHRvIGRvLiBJZiBpdCdzIG5vdFxuICAgICAgICAgICAgLy8gcHJlc2VudCBvbiB0aGUgZ2xvYmFsIHNjb3BlLCB3ZSdyZSBnb2luZyB0byBmYWxsLWJhY2sgdG8gdXNpbmdcbiAgICAgICAgICAgIC8vIGEgbW9jayBBUEkuXG4gICAgICAgICAgICByZXNvbHZlKCh3aW5kb3cgYXMgYW55KS5DbGllbnQgfHwgbmV3IE5vb3BDbGllbnQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcbiAgfVxufVxuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSUNsaWVudCBpbnRlcmZhY2UuXG4gKiBcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBuby1vcGVyYXRpb24gKE5PT1ApIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjbGllbnQgQVBJXG4gKiB0aGF0IGFsbG93cyBjb25zdW1pbmcgY29kZSB0byBmdW5jdGlvbiBub3JtYWxseSBldmVuIHdoZW4gdGhlIGFjdHVhbCBwbGF5ZXJcbiAqIEFQSSBpcyBub3QgYXZhaWxhYmxlLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgZHVyaW5nIGRldmVsb3BtZW50LCB0ZXN0aW5nLFxuICogb3Igd2hlbiB0aGUgcGxheWVyIHNjcmlwdCBpcyBibG9ja2VkIGJ5IGFkLWJsb2NrZXJzLlxuICogXG4gKiBBbGwgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGVpdGhlciByZXR1cm4gbnVsbC9lbXB0eSB2YWx1ZXMgb3IgcGVyZm9ybSBub1xuICogb3BlcmF0aW9ucywgYWxsb3dpbmcgZ2FkZ2V0cyB0byBmdW5jdGlvbiB3aXRob3V0IGVycm9ycyB3aGlsZSBwcm92aWRpbmdcbiAqIGFwcHJvcHJpYXRlIGZhbGxiYWNrIGJlaGF2aW9yLlxuICogXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBOb29wQ2xpZW50IGltcGxlbWVudHMgSUNsaWVudCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICclY0NsaWVudCBBUEkgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIG1vY2sgQVBJJyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lSUQoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgne30nKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2UoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZGtWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5Q29uZmlnKHByZWZzOiBJRGljdGlvbmFyeTxhbnk+KTogdm9pZCB7XG5cbiAgICBjb25zdCBldnQgPSB7IHR5cGU6ICdhcHBseUNvbmZpZycsIHByZWZzOiBwcmVmcywgaXNPcGVuZXI6IHdpbmRvdy5vcGVuZXIgIT09IG51bGwgfTtcblxuICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XG4gICAgICB3aW5kb3cub3BlbmVyLnBvc3RNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShldnQpLFxuICAgICAgICAnKidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGV2dCksXG4gICAgICAgICcqJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
992
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPekQsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBY3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQXFLOUIsY0FBYztJQUNkLFlBQVksSUFBWTtRQS9KeEI7Ozs7Ozs7Ozs7O1dBV0c7UUFDSSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUU1Qzs7Ozs7Ozs7Ozs7O1dBWUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0M7Ozs7Ozs7Ozs7V0FVRztRQUNJLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDOzs7Ozs7Ozs7OztXQVdHO1FBQ0ksWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0I7Ozs7Ozs7OztXQVNHO1FBQ0ksY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVV0QyxjQUFjO1FBQ04sZ0JBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUNoRSxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNuQixDQUFDO1FBR0YsY0FBYztRQUNOLGVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUM5RCxLQUFLLEVBQUUsRUFDUCxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUNsQixDQUFDO1FBR0YsY0FBYztRQUNOLGtCQUFhLEdBQUcsU0FBUyxDQUFXLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FDOUUsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBYyxDQUFBLENBQUMsQ0FBQyxDQUFDLEVBQ2xGLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3JCLENBQUM7UUE0Qk0sc0JBQWlCLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQzNELE1BQU0sQ0FBQyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtRQUNwQywwQ0FBMEM7UUFDMUMsT0FBTyxZQUFZLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxFQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ25DLEtBQUssRUFBRSxFQUNQLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNuQiwwREFBMEQ7Z0JBQzFELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNqQixHQUFHLENBQ0osQ0FBQztZQUNKLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEMsQ0FBQztRQU1BLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWhCLE1BQWMsQ0FBQyxZQUFZLEdBQUc7WUFDN0IsVUFBVSxFQUFFO2dCQUNWLFNBQVMsRUFBRSxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNqRCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTSxFQUFFLEdBQUcsRUFBRTtvQkFDWCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDWixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQzthQUNGO1NBQ0YsQ0FBQTtRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVELDREQUE0RDtRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFFVCxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO0lBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFTO1FBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsZ0RBQWdELEVBQ2hELHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0ksUUFBUSxDQUFDLEdBQUcsSUFBVztRQUU1QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFL0IsUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLEtBQUssQ0FBQztvQkFDSixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxDQUFDO29CQUNKLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLE1BQU07WUFDVixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxRQUFRO1FBRWIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1CRztJQUNJLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBVztRQUVwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QixPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxLQUFLLENBQUMscUJBQXFCO1FBRWhDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRDLE9BQU8sTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLEtBQUssQ0FBQyxtQkFBbUI7UUFFOUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSyxDQUFDLHVCQUF1QjtRQUVsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxPQUFPLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLEtBQUssQ0FBQyxlQUFlO1FBRTFCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRDLE9BQU8sTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUV2QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFFLEdBQVc7UUFFMUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F3Qkc7SUFDSSxpQkFBaUIsQ0FBQyxVQUFvQixFQUFFLElBQVksRUFBRSxHQUFXO1FBRXRFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixNQUFNLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNJLEtBQUssQ0FBQyxTQUFpQixFQUFFLFVBQTZCO1FBRTNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTJCRztJQUNJLFNBQVMsQ0FBQyxTQUFpQjtRQUVoQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNJLGVBQWUsQ0FBQyxFQUFXO1FBRWhDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMvQixJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksS0FBSyxDQUFDLFlBQVk7UUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNJLEtBQUssQ0FBQyxhQUFhO1FBRXhCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E2Qkc7SUFDSSxNQUFNO1FBRVgsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBRS9CLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bd0JHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFFeEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLFlBQVksVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E2Qkc7SUFDSSxLQUFLLENBQUMsU0FBUztRQUVwQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxNQUFNLEdBQUcsR0FBUSxJQUFJLENBQUMsS0FBSyxDQUFTLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFFOUQsTUFBTSxNQUFNLEdBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUVsRCxPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsZUFBZSxFQUFFLE1BQU0sQ0FBQyxHQUFHO2dCQUMzQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUMvQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7Z0JBQ3pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDckMsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUk7b0JBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUs7b0JBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU87b0JBQ2pDLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVU7b0JBQ3ZDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU87b0JBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLFFBQVE7b0JBQ25DLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVM7aUJBQ3RDO2FBQ0YsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXVCRztJQUNJLEtBQUssQ0FBQyxRQUFRO1FBRW5CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRXRDLE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBQ0ksS0FBSyxDQUFDLFNBQVM7UUFFcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFdEMsT0FBTyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F3Qkc7SUFDSSxLQUFLLENBQUMsV0FBVztRQUV0QixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFFeEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQXVCO1FBRTlDLElBQUksTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FDVCxvREFBb0QsRUFDcEQsc0NBQXNDLENBQ3ZDLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E4Qkc7SUFDSSxlQUFlLENBQUMsT0FBZSxFQUFFLE9BQTJCO1FBQ2pFLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BeUJHO0lBQ0ksdUJBQXVCLENBQUMsU0FBaUIsRUFBRSxPQUEyQjtRQUMzRSxPQUFPLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU07SUFDTixtQkFBbUI7SUFDbkIsTUFBTTtJQUNOLGNBQWM7SUFDTixTQUFTO1FBRWYsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsSUFBSyxNQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBRSxNQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLCtFQUErRTtRQUMvRSxlQUFlO1FBQ2YsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUU5Qyw0RUFBNEU7WUFDNUUsd0VBQXdFO1lBQ3hFLDZFQUE2RTtZQUM3RSxpQ0FBaUM7WUFDakMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsaUZBQWlGO1FBQ2pGLGdGQUFnRjtRQUNoRiw4RUFBOEU7UUFDOUUsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQzlCLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFFVixNQUFNLENBQUMsZ0JBQWdCLENBQ3JCLE1BQU0sRUFDTixTQUFTLGdCQUFnQjtnQkFFdkIsOERBQThEO2dCQUM5RCwyREFBMkQ7Z0JBQzNELGlFQUFpRTtnQkFDakUsY0FBYztnQkFDZCxPQUFPLENBQUUsTUFBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxDQUNGLENBQUM7UUFFSixDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0F6L0JVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7O0FBKy9CRCx5RkFBeUY7QUFDekYseUZBQXlGO0FBRXpGOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVU7SUFFZDtRQUVFLE9BQU8sQ0FBQyxHQUFHLENBQ1Qsc0RBQXNELEVBQ3RELHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVNLFFBQVEsQ0FBQyxHQUFHLElBQVc7UUFFNUIsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxhQUFhLENBQUMsSUFBVztRQUU5QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxLQUFLLENBQUMscUJBQXFCO1FBRWhDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLG1CQUFtQjtRQUU5QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyx1QkFBdUI7UUFFbEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUUxQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZO1FBRXZCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVksRUFBRSxHQUFXO1FBRTFDLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0saUJBQWlCLENBQUMsVUFBb0IsRUFBRSxJQUFZLEVBQUUsR0FBVztRQUV0RSxvQ0FBb0M7SUFDdEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFpQixFQUFFLFVBQW1CO1FBRWpELG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sU0FBUyxDQUFDLFNBQWlCO1FBRWhDLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sZUFBZSxDQUFDLEVBQVc7UUFFaEMsb0NBQW9DO0lBQ3RDLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWTtRQUV2QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhO1FBRXhCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTTtRQUVYLG9DQUFvQztJQUN0QyxDQUFDO0lBRU0sS0FBSyxDQUFDLFNBQVM7UUFFcEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsUUFBUTtRQUVuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTO1FBRXBCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVc7UUFFdEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYTtRQUV4QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUF1QjtRQUV4QyxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVwRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsR0FBRyxDQUNKLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixHQUFHLENBQ0osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2FkZ2V0cyB9IGZyb20gJ0ByZXZlbGRpZ2l0YWwvZ2FkZ2V0LXR5cGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbUV2ZW50LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzaGFyZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSUNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9jbGllbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElDb21tYW5kIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbW1hbmQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEaWN0aW9uYXJ5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURhdGFUYWJsZU9wdGlvbnMgfSBmcm9tICcuL2ludGVyZmFjZXMvZGF0YXRhYmxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGV2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RldmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUV2ZW50UHJvcGVydGllcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9ldmVudC1wcm9wZXJ0aWVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXRhVGFibGVSZWYsIERhdGFUYWJsZVByZWZSZWYgfSBmcm9tICcuL2RhdGF0YWJsZS1yZWYnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbic7XG5cbi8vaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbi5qcyc7XG5cbi8vIFNvIHRoYXQgVHlwZVNjcmlwdCBkb2Vzbid0IGNvbXBsYWluLCB3ZSdyZSBnb2luZyB0byBhdWdtZW50IHRoZSBHTE9CQUwgLyBXSU5ET1cgXG4vLyBuYW1lLXNwYWNlIGRlZmluaXRpb24gdG8gaW5jbHVkZSB0aGUgVHJhY2tlciBBUEkuIFRoaXMgYWxzbyBwcm92aWRlcyB1cyB3aXRoIGEgcGxhY2Vcbi8vIHRvIGFjdHVhbGx5IERPQ1VNRU5UIHRoZSBBUEkgc28gdGhhdCBvdXIgZGV2ZWxvcGVycyBhcmVuJ3QgZ3Vlc3NpbmcgYWJvdXQgd2hhdCdzXG4vLyBhdmFpbGFibGUgb24gdGhlIGxpYnJhcnkuXG5cbi8qKiBAaWdub3JlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGxldCBDbGllbnQ6IElDbGllbnQ7XG59XG5cbi8qKlxuICogU2VydmljZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgUmV2ZWwgRGlnaXRhbCBwbGF5ZXIgY2xpZW50LlxuICogXG4gKiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgYSBjb21wcmVoZW5zaXZlIGludGVyZmFjZSBmb3IgZ2FkZ2V0cyBhbmQgd2ViIGFwcGxpY2F0aW9uc1xuICogdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgUmV2ZWwgRGlnaXRhbCBwbGF5ZXIgZW52aXJvbm1lbnQuIEl0IGhhbmRsZXMgZGV2aWNlXG4gKiBpbmZvcm1hdGlvbiwgY29tbWFuZHMsIGV2ZW50cywgYW5hbHl0aWNzIHRyYWNraW5nLCBhbmQgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50LlxuICogXG4gKiBUaGUgc2VydmljZSBzdXBwb3J0cyBib3RoIGRpcmVjdCBBUEkgY2FsbHMgYW5kIGV2ZW50LWJhc2VkIGNvbW11bmljYXRpb24gcGF0dGVybnMsXG4gKiBhbGxvd2luZyBnYWRnZXRzIHRvIHJlc3BvbmQgdG8gcGxheWVyIGxpZmVjeWNsZSBldmVudHMgKHN0YXJ0LCBzdG9wLCBjb21tYW5kcykgYW5kXG4gKiBzZW5kIGRhdGEgYmFjayB0byB0aGUgcGxheWVyIG9yIHJlbW90ZSBkZXZpY2VzLlxuICogXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdHJ1Y3Rvcihwcml2YXRlIGNsaWVudDogUGxheWVyQ2xpZW50U2VydmljZSkge1xuICogICAvLyBTdWJzY3JpYmUgdG8gcGxheWVyIGV2ZW50c1xuICogICB0aGlzLmNsaWVudC5vblN0YXJ0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICogICAgIGNvbnNvbGUubG9nKCdHYWRnZXQgc3RhcnRlZCcpO1xuICogICB9KTtcbiAqICAgXG4gKiAgIHRoaXMuY2xpZW50Lm9uQ29tbWFuZCQuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xuICogICAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBjb21tYW5kOicsIGNvbW1hbmQpO1xuICogICB9KTtcbiAqIH1cbiAqIFxuICogYXN5bmMgbmdPbkluaXQoKSB7XG4gKiAgIC8vIEdldCBkZXZpY2UgaW5mb3JtYXRpb25cbiAqICAgY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlKCk7XG4gKiAgIGNvbnN0IGRldmljZVRpbWUgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VUaW1lKCk7XG4gKiAgIFxuICogICAvLyBUcmFjayBhbmFseXRpY3NcbiAqICAgdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnLCB7IHZlcnNpb246ICcxLjAnIH0pO1xuICogfVxuICogYGBgXG4gKiBcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGF5ZXJDbGllbnRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIHpvbmU6IE5nWm9uZTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjbGllbnRQcm9taXNlOiBQcm9taXNlPElDbGllbnQ+IHwgbnVsbDtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgY29tbWFuZHMgc2VudCB0byB0aGlzIHBsYXllciBmcm9tIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXRmb3JtLlxuICAgKiBTdWJzY3JpYmUgdG8gdGhpcyB0byBoYW5kbGUgY3VzdG9tIGNvbW1hbmRzIHNlbnQgZnJvbSB0ZW1wbGF0ZXMsIHBsYXlsaXN0cywgb3IgcmVtb3RlIGRldmljZXMuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uQ29tbWFuZCQuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xuICAgKiAgIGlmIChjb21tYW5kLm5hbWUgPT09ICdjdXN0b21BY3Rpb24nKSB7XG4gICAqICAgICB0aGlzLmhhbmRsZUN1c3RvbUFjdGlvbihjb21tYW5kLmFyZyk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25Db21tYW5kJCA9IG5ldyBTdWJqZWN0PElDb21tYW5kPigpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyByZWFkeSB0byBzdGFydC5cbiAgICogRW1pdHMgYHRydWVgIHdoZW4gcmVhZHksIGBmYWxzZWAgd2hlbiBkZXN0cm95ZWQuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uUmVhZHkkLnN1YnNjcmliZShpc1JlYWR5ID0+IHtcbiAgICogICBpZiAoaXNSZWFkeSkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ0NsaWVudCBpcyByZWFkeScpO1xuICAgKiAgICAgdGhpcy5pbml0aWFsaXplR2FkZ2V0KCk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIHN0YXJ0ZWQgYnkgdGhlIHBsYXllci5cbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiB0aGUgcGxheWVyIGJlZ2lucyBleGVjdXRpb24gb2YgdGhlIGdhZGdldCBjb250ZW50LlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblN0YXJ0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdHYWRnZXQgc3RhcnRlZCcpO1xuICAgKiAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uU3RhcnQkID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIHN0b3BwZWQgYnkgdGhlIHBsYXllci5cbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiB0aGUgcGxheWVyIHN0b3BzIGV4ZWN1dGlvbiwgdHlwaWNhbGx5IHdoZW4gbW92aW5nXG4gICAqIHRvIHRoZSBuZXh0IGl0ZW0gaW4gYSBwbGF5bGlzdCBvciB3aGVuIHRoZSBjb250ZW50IGR1cmF0aW9uIGV4cGlyZXMuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uU3RvcCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnR2FkZ2V0IHN0b3BwZWQnKTtcbiAgICogICB0aGlzLmNsZWFudXAoKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uU3RvcCQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgc2hvdWxkIG9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gd2luZG93LlxuICAgKiBUaGlzIGFsbG93cyBnYWRnZXRzIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiByZXF1ZXN0cyBmcm9tIHRoZSBwbGF5ZXIuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uQ29uZmlnJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgKiAgIHRoaXMub3BlbkNvbmZpZ3VyYXRpb25EaWFsb2coKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uQ29uZmlnJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgcmVjZWl2ZWQgYSBwb3N0TWVzc2FnZSBldmVudCBmcm9tIHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgaGFuZGxlcyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGdhZGdldCBhbmQgcGxheWVyIHZpYSB0aGUgcG9zdE1lc3NhZ2UgQVBJLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblBvc3RNZXNzYWdlJC5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIG1lc3NhZ2U6JywgbWVzc2FnZSk7XG4gICAqICAgdGhpcy5oYW5kbGVQbGF5ZXJNZXNzYWdlKG1lc3NhZ2UpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25Qb3N0TWVzc2FnZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vXG4gIC8vIFR3byBtZXRob2RzIGF2YWlsYWJsZSBmb3IgY2FsbGluZyBpbnRvIHRoZSBsaWJyYXJ5OlxuICAvL1xuICAvLyAxKSBVc2luZyBkaXNwYXRjaEV2ZW50KCkgd2l0aCB0aGUgZm9sbG93aW5nIGN1c3RvbSBldmVudHNcbiAgLy8gMikgVXNpbmcgdGhlIHdpbmRvdyBzY29wZWQgUmV2ZWxEaWdpdGFsIG9iamVjdCBhcyBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAvL1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RhcnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvblN0YXJ0RXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuU3RhcnQnKS5waXBlKFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25TdGFydCQpXG4gICk7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdG9wU3ViOiBTdWJzY3JpcHRpb247XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdG9wRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuU3RvcCcpLnBpcGUoXG4gICAgc2hhcmUoKSxcbiAgICB0YXAodGhpcy5vblN0b3AkKVxuICApO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uQ29tbWFuZFN1YjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uQ29tbWFuZEV2dCQgPSBmcm9tRXZlbnQ8SUNvbW1hbmQ+KHdpbmRvdywgJ1JldmVsRGlnaXRhbC5Db21tYW5kJykucGlwZShcbiAgICBtYXAoKGU6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlLmRldGFpbC5uYW1lLCBhcmc6IGUuZGV0YWlsLmFyZyB9IGFzIElDb21tYW5kIH0pLFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25Db21tYW5kJClcbiAgKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgLy8gcHJpdmF0ZSBvbkNvbmZpZ1N1YjogU3Vic2NyaXB0aW9uO1xuICAvLyAvKiogQGlnbm9yZSAqL1xuICAvLyBwcml2YXRlIG9uQ29uZmlnRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuQ29uZmlnJykucGlwZShcbiAgLy8gICBzaGFyZSgpLFxuICAvLyAgIHRhcCgoZTogQ3VzdG9tRXZlbnQpID0+IHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gIC8vICAgICBpZiAoZS5kZXRhaWwudHlwZSA9PT0gJ2FwcGx5Q29uZmlnJyAmJiBlLmRldGFpbC5pc09wZW5lcikge1xuICAvLyAgICAgICB0aGlzLmFwcGx5Q29uZmlnKGUuZGV0YWlsLmNvbmZpZyk7IC8vIHByb3BhZ2F0ZSBjb25maWcgdG8gaWZyYW1lIHBhcmVudCBmcm9tIHRoZSBwb3B1cCB3aW5kb3dcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMub25Db25maWckLm5leHQoZS5kZXRhaWwpO1xuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vICk7XG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xuICAvLyBwcml2YXRlIG9uUG9zdE1lc3NhZ2VFdnQkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lc3NhZ2UnKS5waXBlKFxuICAvLyAgIGZpbHRlcigobWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQpID0+XG4gIC8vICAgICBtZXNzYWdlRXZlbnQuc291cmNlICE9PSB3aW5kb3cucGFyZW50ICYmXG4gIC8vICAgICB0eXBlb2YgbWVzc2FnZUV2ZW50LmRhdGEgPT09ICdzdHJpbmcnICYmXG4gIC8vICAgICBtZXNzYWdlRXZlbnQuZGF0YS5zdGFydHNXaXRoKCdyZXZlbGRpZ2l0YWw6JykpLFxuICAvLyAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiBKU09OLnBhcnNlKGUuc3Vic3RyaW5nKDEzKSkgYXMgQ29tbWFuZCB9KSxcbiAgLy8gICBzaGFyZSgpLFxuICAvLyAgIHRhcCh0aGlzLm9uQ29tbWFuZCQpXG4gIC8vICk7XG5cbiAgcHJpdmF0ZSBvblBvc3RNZXNzYWdlU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb25Qb3N0TWVzc2FnZUV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLnBpcGUoXG4gICAgZmlsdGVyKChtZXNzYWdlRXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT5cbiAgICAgIC8vbWVzc2FnZUV2ZW50LnNvdXJjZSAhPT0gd2luZG93LnBhcmVudCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VFdmVudC5kYXRhID09PSAnc3RyaW5nJyksXG4gICAgbWFwKChlOiBhbnkpID0+IEpTT04ucGFyc2UoZS5kYXRhKSksXG4gICAgc2hhcmUoKSxcbiAgICB0YXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUudHlwZSA9PT0gJ2FwcGx5Q29uZmlnJyAmJiBlLmlzT3BlbmVyKSB7XG4gICAgICAgIGUuaXNPcGVuZXIgPSBmYWxzZTtcbiAgICAgICAgLy8gcHJvcGFnYXRlIGNvbmZpZyB0byBpZnJhbWUgcGFyZW50IGZyb20gdGhlIHBvcHVwIHdpbmRvd1xuICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgICcqJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09ICdvcGVuQ29uZmlnJykge1xuICAgICAgICB0aGlzLm9uQ29uZmlnJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHRhcChlID0+IHRoaXMub25Qb3N0TWVzc2FnZSQubmV4dChlKSlcbiAgKTtcblxuXG4gIC8qKiBAaWdub3JlICovXG4gIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuXG4gICAgdGhpcy56b25lID0gem9uZTtcblxuICAgICh3aW5kb3cgYXMgYW55KS5SZXZlbERpZ2l0YWwgPSB7XG4gICAgICBDb250cm9sbGVyOiB7XG4gICAgICAgIG9uQ29tbWFuZDogKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tbWFuZCQubmV4dCh7IG5hbWU6IG5hbWUsIGFyZzogYXJnIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0YXJ0OiAoKSA9PiB7XG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0YXJ0JC5uZXh0KG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0b3A6ICgpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RvcCQubmV4dChudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblN0b3BTdWIgPSB0aGlzLm9uU3RvcEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vbkNvbW1hbmRTdWIgPSB0aGlzLm9uQ29tbWFuZEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgLy90aGlzLm9uQ29uZmlnU3ViID0gdGhpcy5vbkNvbmZpZ0V2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViID0gdGhpcy5vblBvc3RNZXNzYWdlRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcblxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uUmVhZHkkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMub25TdGFydFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RvcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ29tbWFuZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAvL3RoaXMub25Db25maWdTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJyVj4pqZ77iPIEluaXRpYWxpemluZyBSZXZlbCBEaWdpdGFsIGNsaWVudCBsaWJyYXJ5JyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNhbGxiYWNrIHRvIHBsYXllciBzY3JpcHRpbmcgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGdhZGdldCB0byBjb21tdW5pY2F0ZSB3aXRoIHBsYXllciBzY3JpcHRpbmcuXG4gICAqIElmIHRoZSBhcHByb3ByaWF0ZSBzY3JpcHRpbmcgaXMgaW4gcGxhY2UgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlbXBsYXRlLCBcbiAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGluaXRpYXRlIGEgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGFjdGVkIHVwb24gaW4gcGxheWVyIHNjcmlwdC5cbiAgICogXG4gICAqIEBwYXJhbSBhcmdzIC0gVmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayAobWF4IDUgYXJndW1lbnRzKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTZW5kIGEgc2ltcGxlIGNhbGxiYWNrXG4gICAqIHRoaXMuY2xpZW50LmNhbGxiYWNrKCd0ZXN0JywgJ2RhdGEnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgbXVsdGlwbGUgcGFyYW1ldGVyc1xuICAgKiB0aGlzLmNsaWVudC5jYWxsYmFjaygnYWN0aW9uJywgJ3ZhbHVlMScsICd2YWx1ZTInLCB7IGRhdGE6ICdvYmplY3QnIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VyIHByZWZlcmVuY2VzIGludGVyZmFjZSBleHBvc2VkIGJ5IHRoZSBHb29nbGUgR2FkZ2V0cyBBUEkuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gZ2FkZ2V0IHByZWZlcmVuY2VzIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkXG4gICAqIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUy4gVXNlIHRoaXMgdG8gcmV0cmlldmUgdXNlci1jb25maWd1cmFibGUgc2V0dGluZ3NcbiAgICogZm9yIHlvdXIgZ2FkZ2V0LlxuICAgKiBcbiAgICogQHJldHVybnMgVGhlIEdhZGdldHMgQVBJIFByZWZzIG9iamVjdCBmb3IgYWNjZXNzaW5nIHByZWZlcmVuY2UgdmFsdWVzXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0cnVjdG9yKHB1YmxpYyBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcbiAgICogICBjb25zdCBwcmVmcyA9IGNsaWVudC5nZXRQcmVmcygpO1xuICAgKiAgIGNvbnN0IG15U3RyaW5nID0gcHJlZnMuZ2V0U3RyaW5nKCdteVN0cmluZ1ByZWYnKTtcbiAgICogICBjb25zdCBteU51bWJlciA9IHByZWZzLmdldEludCgnbXlOdW1iZXJQcmVmJyk7XG4gICAqICAgY29uc3QgbXlCb29sID0gcHJlZnMuZ2V0Qm9vbCgnbXlCb29sUHJlZicpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKiBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vZ2FkZ2V0cy9kb2NzL2Jhc2ljfSBHb29nbGUgR2FkZ2V0cyBBUEkgZG9jdW1lbnRhdGlvblxuICAgKi9cbiAgcHVibGljIGdldFByZWZzKCk6IGdhZGdldHMuUHJlZnMge1xuXG4gICAgcmV0dXJuIG5ldyB3aW5kb3dbJ2dhZGdldHMnXVsnUHJlZnMnXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWUgaW4gSVNPODYwMSBmb3JtYXQuXG4gICAqIFxuICAgKiBDdXJyZW50IGRldmljZSB0aW1lIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSB0aW1lem9uZSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlIGluIHRoZSBDTVMuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBkaXNwbGF5aW5nIHRpbWUtc2Vuc2l0aXZlIGNvbnRlbnQgb3Igc2NoZWR1bGluZyBvcGVyYXRpb25zIGJhc2VkIG9uXG4gICAqIHRoZSBkZXZpY2UncyBsb2NhbCB0aW1lIHJhdGhlciB0aGFuIGJyb3dzZXIgdGltZS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlIC0gT3B0aW9uYWwuIElmIHN1cHBsaWVkLCB3aWxsIHRyYW5zbGF0ZSB0aGUgc3VwcGxpZWQgZGF0ZS90aW1lIHRvIGRldmljZSB0aW1lIGJhc2VkIG9uIHJlc3BlY3RpdmUgdGltZXpvbmVzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRhdGUvdGltZSBpbiBJU084NjAxIGZvcm1hdFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBHZXQgY3VycmVudCBkZXZpY2UgdGltZVxuICAgKiBjb25zdCBjdXJyZW50VGltZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWUoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lOicsIGN1cnJlbnRUaW1lKTtcbiAgICogXG4gICAqIC8vIENvbnZlcnQgYSBzcGVjaWZpYyBkYXRlIHRvIGRldmljZSB0aW1lXG4gICAqIGNvbnN0IHNwZWNpZmljRGF0ZSA9IG5ldyBEYXRlKCcyMDIzLTAxLTAxVDEyOjAwOjAwWicpO1xuICAgKiBjb25zdCBkZXZpY2VUaW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZShzcGVjaWZpY0RhdGUpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBpZiAoZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWUoZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRpbWV6b25lIG5hbWUgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgbmFtZSAoZS5nLiwgXCJBbWVyaWNhL05ld19Zb3JrXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRpbWV6b25lTmFtZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWV6b25lOicsIHRpbWV6b25lTmFtZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGltZXpvbmUgSUQgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgSURcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdGltZXpvbmVJZCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lSUQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBJRDonLCB0aW1lem9uZUlkKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVJRCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWVyaWNhbCBvZmZzZXQgZnJvbSBHTVQgb2YgdGhlIHRpbWV6b25lIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRpbWV6b25lIG9mZnNldCBpbiBob3VycyAoZS5nLiwgLTUgZm9yIEVTVClcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgb2Zmc2V0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBvZmZzZXQ6Jywgb2Zmc2V0LCAnaG91cnMgZnJvbSBHTVQnKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lT2Zmc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFuZ3VhZ2UgY29kZSBvZiB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgXCJlbi1VU1wiLCBcImZyLUZSXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGxhbmd1YWdlQ29kZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIGxhbmd1YWdlOicsIGxhbmd1YWdlQ29kZSk7XG4gICAqIC8vIFVzZSBmb3IgbG9jYWxpemF0aW9uXG4gICAqIHRoaXMubG9hZExhbmd1YWdlUmVzb3VyY2VzKGxhbmd1YWdlQ29kZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0TGFuZ3VhZ2VDb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5pcXVlIFJldmVsIERpZ2l0YWwgZGV2aWNlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbiAgICogXG4gICAqIFRoZSBkZXZpY2Uga2V5IGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3BlY2lmaWMgcGxheWVyIGRldmljZVxuICAgKiBhbmQgY2FuIGJlIHVzZWQgZm9yIGRldmljZS1zcGVjaWZpYyBvcGVyYXRpb25zIG9yIHJlbW90ZSBjb21tYW5kcy5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZXZpY2Uga2V5IHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkZXZpY2VLZXkgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSBrZXk6JywgZGV2aWNlS2V5KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGxvY2FsIHBsYXllciBkZXZpY2UuXG4gICAqIFxuICAgKiBDb21tYW5kcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGxheWVyIG9yIHRyaWdnZXJcbiAgICogc3BlY2lmaWMgYmVoYXZpb3JzLiBUaGUgY29tbWFuZCBpcyBwcm9jZXNzZWQgYnkgdGhlIGxvY2FsIHBsYXllciBvbmx5LlxuICAgKiBcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgY29tbWFuZCBuYW1lL2lkZW50aWZpZXJcbiAgICogQHBhcmFtIGFyZyAtIFRoZSBjb21tYW5kIGFyZ3VtZW50L3BheWxvYWRcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU2VuZCBhIHNpbXBsZSBjb21tYW5kXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdyZWZyZXNoJywgJycpO1xuICAgKiBcbiAgICogLy8gU2VuZCBhIGNvbW1hbmQgd2l0aCBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdzZXRWb2x1bWUnLCAnNTAnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgYSBjb21tYW5kIHdpdGggSlNPTiBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdjb25maWd1cmUnLCBKU09OLnN0cmluZ2lmeSh7IHNldHRpbmc6ICd2YWx1ZScgfSkpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gcmVtb3RlIHBsYXllciBkZXZpY2VzIHdpdGggdGhlIHNwZWNpZmllZCBkZXZpY2Uga2V5cy5cbiAgICogXG4gICAqIFJlbW90ZSBjb21tYW5kcyBhbGxvdyBjcm9zcy1kZXZpY2UgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhlIHNhbWUgUmV2ZWwgRGlnaXRhbCBhY2NvdW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3luY2hyb25pemVkIGRpc3BsYXlzLCBkZXZpY2UgY29vcmRpbmF0aW9uLCBvciByZW1vdGUgY29udHJvbCBzY2VuYXJpb3MuXG4gICAqIFxuICAgKiBOb3RlOiBSZW1vdGUgY29tbWFuZHMgY2FuIG9ubHkgYmUgZGVsaXZlcmVkIHRvIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNlbmRlciBkZXZpY2UuXG4gICAqIFxuICAgKiBAcGFyYW0gZGV2aWNlS2V5cyAtIEFycmF5IG9mIHRhcmdldCBkZXZpY2Uga2V5cyB0byBzZW5kIHRoZSBjb21tYW5kIHRvXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIGNvbW1hbmQgbmFtZS9pZGVudGlmaWVyXG4gICAqIEBwYXJhbSBhcmcgLSBUaGUgY29tbWFuZCBhcmd1bWVudC9wYXlsb2FkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNlbmQgY29tbWFuZCB0byBzcGVjaWZpYyBkZXZpY2VzXG4gICAqIGNvbnN0IHRhcmdldERldmljZXMgPSBbJ2RldmljZS1rZXktMScsICdkZXZpY2Uta2V5LTInXTtcbiAgICogdGhpcy5jbGllbnQuc2VuZFJlbW90ZUNvbW1hbmQodGFyZ2V0RGV2aWNlcywgJ3N5bmNBY3Rpb24nLCAnc3RhcnQnKTtcbiAgICogXG4gICAqIC8vIEJyb2FkY2FzdCB0byBtdWx0aXBsZSBkZXZpY2VzXG4gICAqIHRoaXMuY2xpZW50LnNlbmRSZW1vdGVDb21tYW5kKFxuICAgKiAgIFsnbG9iYnktZGlzcGxheScsICdraW9zay0xJywgJ2tpb3NrLTInXSwgXG4gICAqICAgJ3VwZGF0ZUNvbnRlbnQnLCBcbiAgICogICBKU09OLnN0cmluZ2lmeSh7IGNvbnRlbnRJZDogJzEyMzQ1JyB9KVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYW4gYW5hbHl0aWNzIGV2ZW50IGZvciB1c2Ugd2l0aCBBZEhhd2sgYW5hbHl0aWNzIGFuZCByZXBvcnRpbmcuXG4gICAqIFxuICAgKiBFdmVudHMgYXJlIHVzZWQgZm9yIHRyYWNraW5nIHZhcmlvdXMgbWV0cmljcyBpbmNsdWRpbmcgdXNhZ2Ugc3RhdGlzdGljcywgXG4gICAqIHBsYXllciBjb25kaXRpb24sIHN0YXRlIGNoYW5nZXMsIHVzZXIgaW50ZXJhY3Rpb25zLCBhbmQgY3VzdG9tIGJ1c2luZXNzIG1ldHJpY3MuXG4gICAqIFRoZXNlIGV2ZW50cyBjYW4gYmUgdmlld2VkIGluIHRoZSBSZXZlbCBEaWdpdGFsIGFuYWx5dGljcyBkYXNoYm9hcmQuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgZXZlbnQgKHNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgY29uc2lzdGVudClcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBPcHRpb25hbCBtYXAgb2YgdXNlci1kZWZpbmVkIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBldmVudFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTaW1wbGUgZXZlbnQgdHJhY2tpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnKTtcbiAgICogXG4gICAqIC8vIEV2ZW50IHdpdGggcHJvcGVydGllc1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygndXNlcl9pbnRlcmFjdGlvbicsIHtcbiAgICogICBhY3Rpb246ICdidXR0b25fY2xpY2snLFxuICAgKiAgIGJ1dHRvbl9pZDogJ3N0YXJ0X2J1dHRvbicsXG4gICAqICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICogfSk7XG4gICAqIFxuICAgKiAvLyBQZXJmb3JtYW5jZSB0cmFja2luZ1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnY29udGVudF9kaXNwbGF5ZWQnLCB7XG4gICAqICAgY29udGVudF90eXBlOiAndmlkZW8nLFxuICAgKiAgIGR1cmF0aW9uOiAzMCxcbiAgICogICBxdWFsaXR5OiAnSEQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IElFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSB0aW1lZCBldmVudCBmb3IgZHVyYXRpb24gdHJhY2tpbmcuXG4gICAqIFxuICAgKiBUaW1lZCBldmVudHMgYXJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIGR1cmF0aW9uIG9mIG9wZXJhdGlvbnMgb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHRyYWNrKCkgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHRvIGNvbXBsZXRlXG4gICAqIHRoZSB0aW1pbmcgbWVhc3VyZW1lbnQuIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBhbmQgaW5jbHVkZWRcbiAgICogaW4gdGhlIGV2ZW50IHByb3BlcnRpZXMuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgdGltZWQgZXZlbnQgKG11c3QgbWF0Y2ggdGhlIHN1YnNlcXVlbnQgdHJhY2soKSBjYWxsKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTdGFydCB0aW1pbmcgYW4gZXZlbnRcbiAgICogdGhpcy5jbGllbnQudGltZUV2ZW50KCd2aWRlb19wbGF5YmFjaycpO1xuICAgKiBcbiAgICogLy8gLi4uIHZpZGVvIHBsYXlzIGZvciBzb21lIGR1cmF0aW9uIC4uLlxuICAgKiBcbiAgICogLy8gRW5kIHRpbWluZyBhbmQgbG9nIHRoZSBldmVudCB3aXRoIGR1cmF0aW9uXG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCd2aWRlb19wbGF5YmFjaycsIHtcbiAgICogICB2aWRlb19pZDogJ2FiYzEyMycsXG4gICAqICAgcXVhbGl0eTogJ0hEJ1xuICAgKiB9KTsgLy8gRHVyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkXG4gICAqIFxuICAgKiAvLyBFeGFtcGxlIGZvciB1c2VyIGludGVyYWN0aW9uIHRpbWluZ1xuICAgKiB0aGlzLmNsaWVudC50aW1lRXZlbnQoJ2Zvcm1fY29tcGxldGlvbicpO1xuICAgKiAvLyAuLi4gdXNlciBmaWxscyBvdXQgZm9ybSAuLi5cbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2Zvcm1fY29tcGxldGlvbicsIHsgZm9ybV90eXBlOiAnY29udGFjdCcgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC50aW1lRXZlbnQoZXZlbnROYW1lKTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYW5hbHl0aWNzIGV2ZW50IHNlc3Npb24gZm9yIGdyb3VwaW5nIHJlbGF0ZWQgZXZlbnRzLlxuICAgKiBcbiAgICogQSBzZXNzaW9uIGlzIGEgd2F5IG9mIGdyb3VwaW5nIGV2ZW50cyB0b2dldGhlciBmb3IgYW5hbHlzaXMuIEVhY2ggZXZlbnQgdHJhY2tlZFxuICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSB0aGUgc2FtZSBzZXNzaW9uIElEIHVudGlsIGEgbmV3IHNlc3Npb24gaXMgY3JlYXRlZC5cbiAgICogU2Vzc2lvbiBJRHMgYXJlIHJhbmRvbWx5IGdlbmVyYXRlZCB1bmxlc3MgZXhwbGljaXRseSBwcm92aWRlZC5cbiAgICogXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciB0cmFja2luZyB1c2VyIGpvdXJuZXlzLCB3b3JrZmxvdyBjb21wbGV0aW9uLCBvciBncm91cGluZ1xuICAgKiByZWxhdGVkIGludGVyYWN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyB0aW1lIHBlcmlvZC5cbiAgICogXG4gICAqIEBwYXJhbSBpZCAtIE9wdGlvbmFsIHVzZXItc3VwcGxpZWQgc2Vzc2lvbiBJRC4gSWYgbm90IHByb3ZpZGVkLCBhIHJhbmRvbSBzZXNzaW9uIElEIHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gd2l0aCBhdXRvLWdlbmVyYXRlZCBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3Nlc3Npb25fc3RhcnQnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzEnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzInKTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgc2Vzc2lvbiB3aXRoIGN1c3RvbSBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oJ3VzZXItd29ya2Zsb3ctMTIzNDUnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3dvcmtmbG93X3N0YXJ0Jyk7XG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCdzdGVwX2NvbXBsZXRlZCcsIHsgc3RlcDogMSB9KTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gZm9yIGRpZmZlcmVudCB3b3JrZmxvd1xuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2RpZmZlcmVudF93b3JrZmxvd19zdGFydCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIHBhdGggdXRpbGl6ZWQgYnkgdGhpcyBwbGF5ZXIgZGV2aWNlLlxuICAgKiBcbiAgICogVGhpcyByZXR1cm5zIHRoZSBiYXNlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllclxuICAgKiBzdG9yZXMgaXRzIGZpbGVzIGFuZCByZXNvdXJjZXMgb24gdGhlIGxvY2FsIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBwYXRoIG9mIHRoZSByb290IGZvbGRlclxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByb290UGF0aCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFJldmVsUm9vdCgpO1xuICAgKiBjb25zb2xlLmxvZygnUGxheWVyIHJvb3QgZGlyZWN0b3J5OicsIHJvb3RQYXRoKTtcbiAgICogLy8gVXNlIGZvciBjb25zdHJ1Y3RpbmcgZmlsZSBwYXRocyBvciB1bmRlcnN0YW5kaW5nIHN0b3JhZ2Ugc3RydWN0dXJlXG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJldmVsUm9vdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG1hcCBvZiBjb21tYW5kcyBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIGRldmljZS5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBjb21tYW5kIGNvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyB0aGUgZGV2aWNlXG4gICAqIHJlc3BvbmRzIHRvIHZhcmlvdXMgY29tbWFuZCB0cmlnZ2VycyBhbmQgcmVtb3RlIGNvbW1hbmRzLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYSBtYXAgb2YgY3VycmVudGx5IGFjdGl2ZSBjb21tYW5kc1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjb21tYW5kTWFwID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0Q29tbWFuZE1hcCgpO1xuICAgKiBjb25zb2xlLmxvZygnQWN0aXZlIGNvbW1hbmRzOicsIGNvbW1hbmRNYXApO1xuICAgKiBcbiAgICogLy8gQ2hlY2sgaWYgc3BlY2lmaWMgY29tbWFuZCBpcyBhdmFpbGFibGVcbiAgICogaWYgKGNvbW1hbmRNYXBbJ2N1c3RvbUNvbW1hbmQnXSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDdXN0b20gY29tbWFuZCBpcyBhdmFpbGFibGUnKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbmFscyB0byB0aGUgcGxheWVyIHRoYXQgdGhpcyBnYWRnZXQgaGFzIGNvbXBsZXRlZCBpdHMgdmlzdWFsaXphdGlvbi5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIHRoZSBwbGF5ZXIgdGhhdCB0aGUgY3VycmVudCBnYWRnZXQgaGFzIGZpbmlzaGVkIGl0c1xuICAgKiBjb250ZW50IGRpc3BsYXkgb3IgaW50ZXJhY3Rpb24gY3ljbGUuIFRoZSBwbGF5ZXIgY2FuIHRoZW4gcHJvY2VlZCB3aXRoXG4gICAqIHRoZSBuZXh0IGl0ZW0gaW4gYSBwbGF5bGlzdCBpZiBhcHBsaWNhYmxlLCBvciBoYW5kbGUgdGhlIGNvbXBsZXRpb25cbiAgICogYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLlxuICAgKiBcbiAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aGVuIHlvdXIgZ2FkZ2V0IGhhcyBjb21wbGV0ZWQgaXRzIGludGVuZGVkIGZ1bmN0aW9uLFxuICAgKiBzdWNoIGFzIGZpbmlzaGluZyBhbiBhbmltYXRpb24sIGNvbXBsZXRpbmcgYSBmb3JtLCBvciByZWFjaGluZyBhIG5hdHVyYWxcbiAgICogc3RvcHBpbmcgcG9pbnQuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEFmdGVyIGNvbXBsZXRpbmcgYW4gYW5pbWF0aW9uXG4gICAqIHByaXZhdGUgb25BbmltYXRpb25Db21wbGV0ZSgpOiB2b2lkIHtcbiAgICogICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogfVxuICAgKiBcbiAgICogLy8gQWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxuICAgKiBwcml2YXRlIG9uRm9ybVN1Ym1pdHRlZCgpOiB2b2lkIHtcbiAgICogICB0aGlzLnNhdmVGb3JtRGF0YSgpO1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBBZnRlciBhIHRpbWVkIGRpc3BsYXkgcGVyaW9kXG4gICAqIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9LCAzMDAwMCk7IC8vIDMwIHNlY29uZHNcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgY2xpZW50LmZpbmlzaCgpO1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBnYWRnZXQgaXMgcnVubmluZyBpbiBwcmV2aWV3IG1vZGUuXG4gICAqIFxuICAgKiBQcmV2aWV3IG1vZGUgaXMgZW5hYmxlZCB3aGVuIHRoZSBnYWRnZXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUyxcbiAgICogdGVzdGVkIGluIHRoZSBnYWRnZXQgZWRpdG9yLCBvciBvdGhlcndpc2Ugbm90IHJ1bm5pbmcgaW4gYSBub3JtYWwgcGxheWVyIGVudmlyb25tZW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvdmlkaW5nIGRpZmZlcmVudCBiZWhhdmlvciBkdXJpbmcgZGV2ZWxvcG1lbnQvdGVzdGluZyB2ZXJzdXNcbiAgICogcHJvZHVjdGlvbiBkZXBsb3ltZW50LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBydW5uaW5nIGluIHByZXZpZXcgbW9kZSwgZmFsc2UgaWYgcnVubmluZyBvbiBhY3R1YWwgcGxheWVyXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGlzUHJldmlldyA9IGF3YWl0IHRoaXMuY2xpZW50LmlzUHJldmlld01vZGUoKTtcbiAgICogXG4gICAqIGlmIChpc1ByZXZpZXcpIHtcbiAgICogICBjb25zb2xlLmxvZygnUnVubmluZyBpbiBwcmV2aWV3IG1vZGUgLSB1c2luZyBtb2NrIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRNb2NrRGF0YSgpO1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIG9uIHBsYXllciBkZXZpY2UgLSB1c2luZyBsaXZlIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRMaXZlRGF0YSgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBTaG93IGRpZmZlcmVudCBVSSBpbiBwcmV2aWV3XG4gICAqIHRoaXMuc2hvd1ByZXZpZXdJbmRpY2F0b3IgPSBpc1ByZXZpZXc7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzUHJldmlld01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudCBpbnN0YW5jZW9mIE5vb3BDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhlIHBsYXllci5cbiAgICogXG4gICAqIFJldHVybnMgY29tcHJlaGVuc2l2ZSBkZXZpY2UgZGV0YWlscyBpbmNsdWRpbmcgbmFtZSwgcmVnaXN0cmF0aW9uIGtleSwgdHlwZSxcbiAgICogc2VydmljZSBkYXRlLCBsYW5ndWFnZSwgdGltZXpvbmUsIHRhZ3MsIGFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBkYXRhXG4gICAqIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIFJldmVsIERpZ2l0YWwgQ01TIGZvciBlYWNoIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRldmljZSBkZXRhaWxzIG9iamVjdCwgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZSgpO1xuICAgKiBcbiAgICogaWYgKGRldmljZSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdEZXZpY2UgbmFtZTonLCBkZXZpY2UubmFtZSk7XG4gICAqICAgY29uc29sZS5sb2coJ0RldmljZSB0eXBlOicsIGRldmljZS5kZXZpY2VUeXBlKTtcbiAgICogICBjb25zb2xlLmxvZygnTG9jYXRpb246JywgZGV2aWNlLmxvY2F0aW9uLmNpdHksIGRldmljZS5sb2NhdGlvbi5zdGF0ZSk7XG4gICAqICAgY29uc29sZS5sb2coJ1RhZ3M6JywgZGV2aWNlLnRhZ3MpO1xuICAgKiAgIFxuICAgKiAgIC8vIFVzZSBkZXZpY2UgaW5mbyBmb3IgY3VzdG9taXphdGlvblxuICAgKiAgIGlmIChkZXZpY2UubG9jYXRpb24uY291bnRyeSA9PT0gJ1VTJykge1xuICAgKiAgICAgdGhpcy5sb2FkVVNDb250ZW50KCk7XG4gICAqICAgfVxuICAgKiAgIFxuICAgKiAgIC8vIENoZWNrIGRldmljZSBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdHlwZVxuICAgKiAgIGlmIChkZXZpY2UuZGV2aWNlVHlwZSA9PT0gJ2FuZHJvaWQnKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZVRvdWNoRmVhdHVyZXMoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8SURldmljZSB8IG51bGw+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBjb25zdCBvYmo6IGFueSA9IEpTT04ucGFyc2UoPHN0cmluZz5hd2FpdCBjbGllbnQuZ2V0RGV2aWNlKCkpO1xuXG4gICAgY29uc3QgZGV2aWNlOiBJRGV2aWNlW10gPSBbb2JqXS5tYXAoKGRldmljZTogYW55KSA9PiB7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRldmljZS5uYW1lLFxuICAgICAgICByZWdpc3RyYXRpb25LZXk6IGRldmljZS5rZXksXG4gICAgICAgIGRldmljZVR5cGU6IGRldmljZS5kZXZpY2V0eXBlLFxuICAgICAgICBlbnRlcmVkU2VydmljZTogbmV3IERhdGUoZGV2aWNlLmVudGVyZWRzZXJ2aWNlKSxcbiAgICAgICAgbGFuZ0NvZGU6IGRldmljZS5sYW5nY29kZSxcbiAgICAgICAgdGltZVpvbmU6IGRldmljZS50aW1lem9uZSxcbiAgICAgICAgdGFnczogZGV2aWNlLmRlc2NyaXB0aW9uPy5zcGxpdCgnXFxuJyksXG4gICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgY2l0eTogZGV2aWNlLmxvY2F0aW9uPy5jaXR5LFxuICAgICAgICAgIHN0YXRlOiBkZXZpY2UubG9jYXRpb24/LnN0YXRlLFxuICAgICAgICAgIGNvdW50cnk6IGRldmljZS5sb2NhdGlvbj8uY291bnRyeSxcbiAgICAgICAgICBwb3N0YWxDb2RlOiBkZXZpY2UubG9jYXRpb24/LnBvc3RhbGNvZGUsXG4gICAgICAgICAgYWRkcmVzczogZGV2aWNlLmxvY2F0aW9uPy5hZGRyZXNzLFxuICAgICAgICAgIGxhdGl0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxhdGl0dWRlLFxuICAgICAgICAgIGxvbmdpdHVkZTogZGV2aWNlLmxvY2F0aW9uPy5sb25naXR1ZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZXZpY2VbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYXJlYSBpbiBwaXhlbHMuXG4gICAqIFxuICAgKiBUaGlzIHJldHVybnMgdGhlIGF2YWlsYWJsZSB3aWR0aCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIHdpZHRoIGRlcGVuZGluZyBvbiBwbGF5ZXIgY29uZmlndXJhdGlvblxuICAgKiBhbmQgdGVtcGxhdGUgbGF5b3V0LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gd2lkdGggaW4gcGl4ZWxzLCBvciBudWxsIGlmIG5vdCBhdmFpbGFibGVcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgd2lkdGggPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRXaWR0aCgpO1xuICAgKiBcbiAgICogaWYgKHdpZHRoKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSB3aWR0aDonLCB3aWR0aCwgJ3BpeGVscycpO1xuICAgKiAgIFxuICAgKiAgIC8vIEFkYXB0IGNvbnRlbnQgbGF5b3V0IGJhc2VkIG9uIHdpZHRoXG4gICAqICAgaWYgKHdpZHRoIDwgODAwKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZU1vYmlsZUxheW91dCgpO1xuICAgKiAgIH0gZWxzZSB7XG4gICAqICAgICB0aGlzLmVuYWJsZURlc2t0b3BMYXlvdXQoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2lkdGgoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRXaWR0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhcmVhIGluIHBpeGVscy5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgYXZhaWxhYmxlIGhlaWdodCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIGhlaWdodCBkZXBlbmRpbmcgb24gcGxheWVyIGNvbmZpZ3VyYXRpb25cbiAgICogYW5kIHRlbXBsYXRlIGxheW91dC5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhlaWdodCBpbiBwaXhlbHMsIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBoZWlnaHQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRIZWlnaHQoKTtcbiAgICogXG4gICAqIGlmIChoZWlnaHQpIHtcbiAgICogICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIGhlaWdodDonLCBoZWlnaHQsICdwaXhlbHMnKTtcbiAgICogICBcbiAgICogICAvLyBDYWxjdWxhdGUgYXNwZWN0IHJhdGlvIGZvciByZXNwb25zaXZlIGRlc2lnblxuICAgKiAgIGNvbnN0IHdpZHRoID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0V2lkdGgoKTtcbiAgICogICBjb25zdCBhc3BlY3RSYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgKiAgIHRoaXMuYWRqdXN0Q29udGVudEZvckFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgY29udGVudCBpdGVtLlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgaXMgb25seSBhcHBsaWNhYmxlIHdoZW4gdGhlIGdhZGdldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBwbGF5bGlzdFxuICAgKiBhbmQgcmV0dXJucyB0aGUgZHVyYXRpb24gYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgcGxheWxpc3QgaXRlbS4gVGhlIGR1cmF0aW9uXG4gICAqIGRldGVybWluZXMgaG93IGxvbmcgdGhlIGNvbnRlbnQgc2hvdWxkIGJlIGRpc3BsYXllZCBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUvYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgICogXG4gICAqIGlmIChkdXJhdGlvbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDb250ZW50IGR1cmF0aW9uOicsIGR1cmF0aW9uLCAnbWlsbGlzZWNvbmRzJyk7XG4gICAqICAgXG4gICAqICAgLy8gU2V0IHVwIGF1dG8tZmluaXNoIHRpbWVyXG4gICAqICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAqICAgICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogICB9LCBkdXJhdGlvbik7XG4gICAqICAgXG4gICAqICAgLy8gU2hvdyBwcm9ncmVzcyBpbmRpY2F0b3JcbiAgICogICB0aGlzLnN0YXJ0UHJvZ3Jlc3NJbmRpY2F0b3IoZHVyYXRpb24pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFJldmVsIERpZ2l0YWwgU0RLLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIFNESyB2ZXJzaW9uIHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0U2RrVmVyc2lvbigpO1xuICAgKiBjb25zb2xlLmxvZygnU0RLIFZlcnNpb246JywgdmVyc2lvbik7XG4gICAqIFxuICAgKiAvLyBVc2UgZm9yIGNvbXBhdGliaWxpdHkgY2hlY2tzIG9yIGxvZ2dpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnLCB7IHNka1ZlcnNpb246IHZlcnNpb24gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNka1ZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmVyc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzIHRvIHRoZSBnYWRnZXQgKHByZXZpZXcgbW9kZSBvbmx5KS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gcnVubmluZyBpbiBwcmV2aWV3IG1vZGUgKHR5cGljYWxseSBkdXJpbmdcbiAgICogZ2FkZ2V0IGRldmVsb3BtZW50IG9yIHRlc3RpbmcgaW4gdGhlIENNUykuIEl0IGFsbG93cyBhcHBseWluZyBjb25maWd1cmF0aW9uXG4gICAqIGNoYW5nZXMgdGhhdCB3b3VsZCBub3JtYWxseSBjb21lIGZyb20gdGhlIGdhZGdldCdzIHByZWZlcmVuY2Ugc2V0dGluZ3MuXG4gICAqIFxuICAgKiBAcGFyYW0gcHJlZnMgLSBEaWN0aW9uYXJ5IG9mIHByZWZlcmVuY2Uga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCB0aGlzLmNsaWVudC5pc1ByZXZpZXdNb2RlKCkpIHtcbiAgICogICAvLyBBcHBseSB0ZXN0IGNvbmZpZ3VyYXRpb24gaW4gcHJldmlld1xuICAgKiAgIGF3YWl0IHRoaXMuY2xpZW50LmFwcGx5Q29uZmlnKHtcbiAgICogICAgICd0aXRsZSc6ICdUZXN0IFRpdGxlJyxcbiAgICogICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnI2ZmMDAwMCcsXG4gICAqICAgICAnc2hvd0JvcmRlcic6IHRydWUsXG4gICAqICAgICAncmVmcmVzaEludGVydmFsJzogMzBcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhcHBseUNvbmZpZyhwcmVmczogSURpY3Rpb25hcnk8YW55Pikge1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQcmV2aWV3TW9kZSgpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgY2xpZW50LmFwcGx5Q29uZmlnKHByZWZzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICclY2FwcGx5Q29uZmlnKCkgaXMgb25seSBhdmFpbGFibGUgaW4gcHJldmlldyBtb2RlLicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHlwZWQgd3JhcHBlciBmb3IgYSBSZXZlbCBEaWdpdGFsIGRhdGEgdGFibGUuXG4gICAqXG4gICAqIFRoZSBkYXRhIHRhYmxlIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgZ2FkZ2V0LiBUaGUgcmV0dXJuZWRcbiAgICoge0BsaW5rIERhdGFUYWJsZVJlZn0gcHJvdmlkZXMgdHlwZWQgUHJvbWlzZS1iYXNlZCBtZXRob2RzIGFuZCBSeEpTXG4gICAqIE9ic2VydmFibGVzIGZvciByZWFsLXRpbWUgcm93IGNoYW5nZSBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gVGhlIGRhdGEgdGFibGUgSUQgKGUuZy4gJ3RibF9tZW51X2l0ZW1zJylcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhVGFibGVSZWZ9IGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gICAqXG4gICAqIC8vIEZldGNoIHJvd3Mgd2l0aCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmdcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7XG4gICAqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAnRW50cmVlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9LFxuICAgKiAgIHNvcnQ6ICdwcmljZScsXG4gICAqICAgc29ydERpcjogJ2FzYydcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFN1YnNjcmliZSB0byByZWFsLXRpbWUgdXBkYXRlc1xuICAgKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdSb3cgdXBkYXRlZDonLCBjaGFuZ2UpKTtcbiAgICogZHQucm93Q3JlYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZygnUm93IGNyZWF0ZWQ6JywgY2hhbmdlKSk7XG4gICAqIGR0LnJvd0RlbGV0ZWQkLnN1YnNjcmliZShjaGFuZ2UgPT4gY29uc29sZS5sb2coJ1JvdyBkZWxldGVkOicsIGNoYW5nZSkpO1xuICAgKlxuICAgKiAvLyBDbGVhbnVwIHdoZW4gZG9uZVxuICAgKiBkdC5kaXNwb3NlKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNyZWF0ZURhdGFUYWJsZSh0YWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucyk6IERhdGFUYWJsZVJlZiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhVGFibGVSZWYodGFibGVJZCwgdGhpcy56b25lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHlwZWQgZGF0YSB0YWJsZSB3cmFwcGVyIGZyb20gYSBnYWRnZXQgcHJlZmVyZW5jZSB2YWx1ZS5cbiAgICpcbiAgICogVGhlIHByZWZlcmVuY2UgSlNPTiBzdHJpbmcgKGFzIHNlcmlhbGl6ZWQgYnkgdGhlIHRlbXBsYXRlIGVkaXRvcidzIGRhdGF0YWJsZVxuICAgKiBvcHRpb24pIGlzIHBhcnNlZCBhbmQgdXNlZCB0byBhdXRvLWNvbmZpZ3VyZSBmaWx0ZXIsIHNvcnQsIGFuZCBsb2dpYyBzZXR0aW5ncy5cbiAgICogVGhlIHJldHVybmVkIHtAbGluayBEYXRhVGFibGVQcmVmUmVmfSBwcm92aWRlcyBhIGBnZXRGaWx0ZXJlZFJvd3MoKWAgY29udmVuaWVuY2VcbiAgICogbWV0aG9kIHRoYXQgYXBwbGllcyB0aGVzZSBzZXR0aW5ncyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAcGFyYW0gcHJlZlZhbHVlIC0gVGhlIHJhdyBnYWRnZXQgcHJlZmVyZW5jZSBzdHJpbmcgKEpTT04pXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvdmVycmlkZXNcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGF0YVRhYmxlUHJlZlJlZn0gaW5zdGFuY2VcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgZ2xvYmFsIGRhdGF0YWJsZSBsaWJyYXJ5IGlzIG5vdCBsb2FkZWRcbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjZmcgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGVGcm9tUHJlZihwcmVmcy5nZXRTdHJpbmcoJ3JkRGF0YVRhYmxlJykpO1xuICAgKlxuICAgKiAvLyBGZXRjaCByb3dzIHdpdGggYXV0by13aXJlZCBmaWx0ZXIgKyBzb3J0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAgICpcbiAgICogLy8gQWNjZXNzIHRoZSB1bmRlcmx5aW5nIERhdGFUYWJsZVJlZiBmb3IgZXZlbnRzLCBzY2hlbWEsIGV0Yy5cbiAgICogY2ZnLmRhdGFUYWJsZS5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKGNoYW5nZSkpO1xuICAgKlxuICAgKiAvLyBDbGVhbnVwIHdoZW4gZG9uZVxuICAgKiBjZmcuZGlzcG9zZSgpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVEYXRhVGFibGVGcm9tUHJlZihwcmVmVmFsdWU6IHN0cmluZywgb3B0aW9ucz86IElEYXRhVGFibGVPcHRpb25zKTogRGF0YVRhYmxlUHJlZlJlZiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhVGFibGVQcmVmUmVmKHByZWZWYWx1ZSwgdGhpcy56b25lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIC0tLVxuICAvLyBQUklWQVRFIE1FVEhPRFMuXG4gIC8vIC0tLVxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGdldENsaWVudCgpOiBQcm9taXNlPElDbGllbnQ+IHtcblxuICAgIGlmICh0aGlzLmNsaWVudFByb21pc2UpIHtcblxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UpO1xuICAgIH1cblxuICAgIGlmICgod2luZG93IGFzIGFueSkuQ2xpZW50KSB7XG5cbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCh3aW5kb3cgYXMgYW55KS5DbGllbnQpKTtcbiAgICB9XG5cbiAgICAvLyBBIFwiY29tcGxldGVcIiBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIFwibG9hZFwiIGV2ZW50IGhhcyBiZWVuIGZpcmVkIG9uIHRoZVxuICAgIC8vIHdpbmRvdzsgYW5kLCB0aGF0IGFsbCBzdWItcmVzb3VyY2VzIHN1Y2ggYXMgU2NyaXB0cywgSW1hZ2VzLCBhbmQgRnJhbWVzIGhhdmVcbiAgICAvLyBiZWVuIGxvYWRlZC5cbiAgICBpZiAod2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuXG4gICAgICAvLyBJZiB0aGlzIGV2ZW50IGhhcyBmaXJlZCBBTkQgdGhlIDNyZC1wYXJ0eSBzY3JpcHQgaXNuJ3QgYXZhaWxhYmxlIChzZWUgSUYtXG4gICAgICAvLyBjb25kaXRpb24gQkVGT1JFIHRoaXMgb25lKSwgaXQgbWVhbnMgdGhhdCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBlaXRoZXJcbiAgICAgIC8vIGZhaWxlZCBvbiB0aGUgbmV0d29yayBvciB3YXMgQkxPQ0tFRCBieSBhbiBhZC1ibG9ja2VyLiBBcyBzdWNoLCB3ZSBoYXZlIHRvXG4gICAgICAvLyBmYWxsLWJhY2sgdG8gdXNpbmcgYSBtb2NrIEFQSS5cbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG5ldyBOb29wQ2xpZW50KCkpKTtcbiAgICB9XG5cbiAgICAvLyBBU1NFUlQ6IElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIHRoZSBkb2N1bWVudCBoYXMgbm90IGNvbXBsZXRlZCBsb2FkaW5nIChidXQgaXRcbiAgICAvLyBtYXkgYmUgaW4gYW4gXCJpbnRlcmFjdGl2ZVwiIHN0YXRlIHdoaWNoIGlzIHdoZW4gSSBiZWxpZXZlIHRoYXQgdGhlIEFuZ3VsYXIgYXBwXG4gICAgLy8gZ2V0cyBib290c3RyYXBwZWQpLiBBcyBzdWNoLCB3ZSBuZWVkIGJpbmQgdG8gdGhlIExPQUQgZXZlbnQgdG8gd2FpdCBmb3Igb3VyXG4gICAgLy8gdGhpcmQtcGFydHkgc2NyaXB0cyB0byBsb2FkIChvciBmYWlsIHRvIGxvYWQsIG9yIGJlIGJsb2NrZWQpLlxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG5ldyBQcm9taXNlPElDbGllbnQ+KFxuICAgICAgKHJlc29sdmUpID0+IHtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImxvYWRcIixcbiAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dMb2FkKCkge1xuXG4gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgM3JkLXBhcnR5IGxpYnJhcnkgaXMgZWl0aGVyIGF2YWlsYWJsZSBvclxuICAgICAgICAgICAgLy8gaXQncyBub3QgLSB0aGVyZSdzIG5vIGZ1cnRoZXIgbG9hZGluZyB0byBkby4gSWYgaXQncyBub3RcbiAgICAgICAgICAgIC8vIHByZXNlbnQgb24gdGhlIGdsb2JhbCBzY29wZSwgd2UncmUgZ29pbmcgdG8gZmFsbC1iYWNrIHRvIHVzaW5nXG4gICAgICAgICAgICAvLyBhIG1vY2sgQVBJLlxuICAgICAgICAgICAgcmVzb2x2ZSgod2luZG93IGFzIGFueSkuQ2xpZW50IHx8IG5ldyBOb29wQ2xpZW50KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XG4gIH1cbn1cblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIElDbGllbnQgaW50ZXJmYWNlLlxuICogXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbm8tb3BlcmF0aW9uIChOT09QKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2xpZW50IEFQSVxuICogdGhhdCBhbGxvd3MgY29uc3VtaW5nIGNvZGUgdG8gZnVuY3Rpb24gbm9ybWFsbHkgZXZlbiB3aGVuIHRoZSBhY3R1YWwgcGxheWVyXG4gKiBBUEkgaXMgbm90IGF2YWlsYWJsZS4gVGhpcyB0eXBpY2FsbHkgb2NjdXJzIGR1cmluZyBkZXZlbG9wbWVudCwgdGVzdGluZyxcbiAqIG9yIHdoZW4gdGhlIHBsYXllciBzY3JpcHQgaXMgYmxvY2tlZCBieSBhZC1ibG9ja2Vycy5cbiAqIFxuICogQWxsIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBlaXRoZXIgcmV0dXJuIG51bGwvZW1wdHkgdmFsdWVzIG9yIHBlcmZvcm0gbm9cbiAqIG9wZXJhdGlvbnMsIGFsbG93aW5nIGdhZGdldHMgdG8gZnVuY3Rpb24gd2l0aG91dCBlcnJvcnMgd2hpbGUgcHJvdmlkaW5nXG4gKiBhcHByb3ByaWF0ZSBmYWxsYmFjayBiZWhhdmlvci5cbiAqIFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTm9vcENsaWVudCBpbXBsZW1lbnRzIElDbGllbnQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnJWNDbGllbnQgQVBJIG5vdCBhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBtb2NrIEFQSScsXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcjpibHVlOyBjb2xvcjp5ZWxsb3c7J1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2soLi4uYXJnczogYW55W10pOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgc2VuZFJlbW90ZUNvbW1hbmQoZGV2aWNlS2V5czogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIG5ld0V2ZW50U2Vzc2lvbihpZD86IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbW1hbmRNYXAoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ3t9Jyk7XG4gIH1cblxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRXaWR0aCgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SGVpZ2h0KCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREdXJhdGlvbigpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2RrVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUNvbmZpZyhwcmVmczogSURpY3Rpb25hcnk8YW55Pik6IHZvaWQge1xuXG4gICAgY29uc3QgZXZ0ID0geyB0eXBlOiAnYXBwbHlDb25maWcnLCBwcmVmczogcHJlZnMsIGlzT3BlbmVyOiB3aW5kb3cub3BlbmVyICE9PSBudWxsIH07XG5cbiAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZ0KSxcbiAgICAgICAgJyonXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShldnQpLFxuICAgICAgICAnKidcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '2.2.0';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBnZW52ZXJzaW9uLlxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnMi4yLjAnXG4iXX0=
2
+ export const version = '2.4.0';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBnZW52ZXJzaW9uLlxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnMi40LjAnXG4iXX0=