@elderbyte/ngx-starter 18.12.7 → 18.12.8

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.
@@ -62,6 +62,9 @@ export class LocalListDataSource extends DataSourceBase {
62
62
  * *
63
63
  **************************************************************************/
64
64
  findById(id) {
65
+ if (id === undefined || id === null) {
66
+ throw new Error('findById: id argument required!');
67
+ }
65
68
  const found = this.data.find((d) => this.getId(d) === id);
66
69
  if (found) {
67
70
  return of(found);
@@ -71,6 +74,9 @@ export class LocalListDataSource extends DataSourceBase {
71
74
  }
72
75
  }
73
76
  findByIds(ids) {
77
+ if (ids === undefined || ids === null) {
78
+ throw new Error('findByIds: ids array argument required!');
79
+ }
74
80
  return forkJoin(ids.map((id) => this.findById(id)));
75
81
  }
76
82
  findAllFiltered(filters, sorts) {
@@ -109,7 +115,7 @@ export class LocalListDataSource extends DataSourceBase {
109
115
  const newData = [...this.data];
110
116
  const existingIndex = newData.findIndex((entity) => this.getId(entity) === id);
111
117
  let created = false;
112
- if (existingIndex == -1) {
118
+ if (existingIndex === -1) {
113
119
  newData.push(entity);
114
120
  created = true;
115
121
  }
@@ -144,4 +150,4 @@ export class LocalListDataSource extends DataSourceBase {
144
150
  return null; // Use value as id if scalar
145
151
  }
146
152
  }
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbGlzdC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbW1vbi9kYXRhL2RhdGFzb3VyY2UvbG9jYWwvbG9jYWwtbGlzdC1kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVwQyxPQUFPLEVBQVUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFdkQsTUFBTSxPQUFPLG1CQUF1QixTQUFRLGNBQWlCO0lBYzNEOzs7O2dGQUk0RTtJQUU1RTs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUNqQixVQUF5QixFQUN6QixTQUE2QyxFQUM3QyxXQUFtRDtRQUVuRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FDaEIsU0FBYyxFQUNkLFVBQXlCLEVBQ3pCLFNBQTZDLEVBQzdDLFdBQW1EO1FBRW5ELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FB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MEZBQTBGLENBQzNGLENBQUE7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUEsQ0FBQyw0QkFBNEI7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVycy9maWx0ZXInXG5pbXBvcnQgeyBTb3J0IH0gZnJvbSAnLi4vLi4vc29ydCdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSUxpc3REYXRhU291cmNlIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IERhdGFTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlLWNoYW5nZS1ldmVudCdcbmltcG9ydCB7IERhdGFTb3VyY2VCYXNlIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UtYmFzZSdcbmltcG9ydCB7IFNvcnRVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc29ydC11dGlsJ1xuaW1wb3J0IHsgRmlsdGVyVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbHRlci11dGlsJ1xuXG5leHBvcnQgY2xhc3MgTG9jYWxMaXN0RGF0YVNvdXJjZTxUPiBleHRlbmRzIERhdGFTb3VyY2VCYXNlPFQ+IGltcGxlbWVudHMgSUxpc3REYXRhU291cmNlPFQ+IHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcblxuICBwcml2YXRlIHJlYWRvbmx5IGRhdGEkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxTb3J0OiAoZGF0YTogVFtdLCBzb3J0czogU29ydFtdKSA9PiBUW11cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbEZpbHRlcjogKGRhdGE6IFRbXSwgZmlsdGVyczogRmlsdGVyW10pID0+IFRbXVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdGF0aWMgQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtcHR5IGxvY2FsIGxpc3QgZGF0YS1zb3VyY2UuXG4gICAqIFlvdSBjYW4gc2V0IC8gbW9kaWZ5IGRhdGEgYnkgdXNpbmcgdGhlIGRhdGEgcHJvcGVydHkuXG4gICAqIEBwYXJhbSBpZFByb3BlcnR5XG4gICAqIEBwYXJhbSBsb2NhbFNvcnRcbiAgICogQHBhcmFtIGxvY2FsRmlsdGVyXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVtcHR5PFQ+KFxuICAgIGlkUHJvcGVydHk6IHN0cmluZyB8IG51bGwsXG4gICAgbG9jYWxTb3J0PzogKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdLFxuICAgIGxvY2FsRmlsdGVyPzogKGRhdGE6IFRbXSwgZmlsdGVyczogRmlsdGVyW10pID0+IFRbXVxuICApOiBMb2NhbExpc3REYXRhU291cmNlPFQ+IHtcbiAgICByZXR1cm4gTG9jYWxMaXN0RGF0YVNvdXJjZS5mcm9tKFtdLCBpZFByb3BlcnR5LCBsb2NhbFNvcnQsIGxvY2FsRmlsdGVyKVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmcm9tPFQ+KFxuICAgIGxvY2FsRGF0YTogVFtdLFxuICAgIGlkUHJvcGVydHk6IHN0cmluZyB8IG51bGwsXG4gICAgbG9jYWxTb3J0PzogKGRhdGE6IFRbXSwgc29ydHM6IFNvcnRbXSkgPT4gVFtdLFxuICAgIGxvY2FsRmlsdGVyPzogKGRhdGE6IFRbXSwgZmlsdGVyczogRmlsdGVyW10pID0+IFRbXVxuICApOiBMb2NhbExpc3REYXRhU291cmNlPFQ+IHtcbiAgICByZXR1cm4gbmV3IExvY2FsTGlzdERhdGFTb3VyY2UobG9jYWxEYXRhLCBsb2NhbFNvcnQsIGxvY2FsRmlsdGVyLCBpZFByb3BlcnR5KVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgbG9jYWxEYXRhOiBUW10sXG4gICAgbG9jYWxTb3J0OiAoZGF0YTogVFtdLCBzb3J0czogU29ydFtdKSA9PiBUW10sXG4gICAgbG9jYWxGaWx0ZXI6IChkYXRhOiBUW10sIGZpbHRlcnM6IEZpbHRlcltdKSA9PiBUW10sXG4gICAgaWRQcm9wZXJ0eTogc3RyaW5nIHwgbnVsbFxuICApIHtcbiAgICBzdXBlcihpZFByb3BlcnR5IHx8IExvY2FsTGlzdERhdGFTb3VyY2UuZ3Vlc3NJZFByb3BlcnR5KGxvY2FsRGF0YSkpXG4gICAgaWYgKCFsb2NhbERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbG9jYWxEYXRhIG11c3Qgbm90IGJlIG51bGwhJylcbiAgICB9XG4gICAgdGhpcy5sb2NhbFNvcnQgPSBsb2NhbFNvcnQgfHwgU29ydFV0aWwuc29ydERhdGFcbiAgICB0aGlzLmxvY2FsRmlsdGVyID0gbG9jYWxGaWx0ZXIgfHwgRmlsdGVyVXRpbC5maWx0ZXJEYXRhXG4gICAgdGhpcy5kYXRhID0gbG9jYWxEYXRhXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZ2V0IGRhdGEoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5nZXRWYWx1ZSgpXG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGEoZGF0YTogVFtdKSB7XG4gICAgdGhpcy5yZXBsYWNlQWxsKGRhdGEpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogSURhdGFTb3VyY2UgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZmluZEJ5SWQoaWQ6IGFueSk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5kYXRhLmZpbmQoKGQpID0+IHRoaXMuZ2V0SWQoZCkgPT09IGlkKVxuICAgIGlmIChmb3VuZCkge1xuICAgICAgcmV0dXJuIG9mKGZvdW5kKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBsb2NhbCBlbnRpdHkgYnkgaWQ6ICdcIiArIGlkICsgXCInXCIpKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJZHMoaWRzOiBhbnlbXSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIGZvcmtKb2luKGlkcy5tYXAoKGlkKSA9PiB0aGlzLmZpbmRCeUlkKGlkKSkpXG4gIH1cblxuICBwdWJsaWMgZmluZEFsbEZpbHRlcmVkKGZpbHRlcnM/OiBGaWx0ZXJbXSwgc29ydHM/OiBTb3J0W10pOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiBvZih0aGlzLmRhdGEpLnBpcGUoXG4gICAgICBtYXAoKGRhdGEpID0+IHRoaXMubG9jYWxGaWx0ZXIoZGF0YSwgZmlsdGVycykpLFxuICAgICAgbWFwKChkYXRhKSA9PiB0aGlzLmxvY2FsU29ydChkYXRhLCBzb3J0cykpXG4gICAgKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHJlcGxhY2VBbGwoZGF0YTogVFtdKSB7XG4gICAgdGhpcy5zaWxlbnRSZXBsYWNlRGF0YShkYXRhKVxuICAgIHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC51bmtub3duQ2hhbmdlcygpKVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZShlbnRpdHk6IFQpIHtcbiAgICB0aGlzLmRlbGV0ZUFsbChbZW50aXR5XSlcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGwodG9EZWxldGU6IFRbXSkge1xuICAgIGlmICh0b0RlbGV0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQWxsQnlJZCh0b0RlbGV0ZS5tYXAoKGUpID0+IHRoaXMuZ2V0SWQoZSkpKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGxCeUlkKGlkc1RvRGVsZXRlOiBhbnlbXSkge1xuICAgIGlmIChpZHNUb0RlbGV0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmRhdGFcbiAgICAgIGNvbnN0IGlkc1RvRGVsZXRlU2V0ID0gbmV3IFNldChpZHNUb0RlbGV0ZSlcbiAgICAgIHRoaXMuc2lsZW50UmVwbGFjZURhdGEoZXhpc3RpbmcuZmlsdGVyKChlKSA9PiAhaWRzVG9EZWxldGVTZXQuaGFzKHRoaXMuZ2V0SWQoZSkpKSlcbiAgICAgIHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5kZWxldGVkKGlkc1RvRGVsZXRlKSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZUFsbCh0b1NhdmU6IFRbXSkge1xuICAgIHRvU2F2ZS5mb3JFYWNoKChlbnRpdHkpID0+IHRoaXMuc2F2ZShlbnRpdHkpKVxuICB9XG5cbiAgcHVibGljIHNhdmUoZW50aXR5OiBUKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldElkKGVudGl0eSlcbiAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YV1cbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbmV3RGF0YS5maW5kSW5kZXgoKGVudGl0eSkgPT4gdGhpcy5nZXRJZChlbnRpdHkpID09PSBpZClcblxuICAgIGxldCBjcmVhdGVkID0gZmFsc2VcbiAgICBpZiAoZXhpc3RpbmdJbmRleCA9PSAtMSkge1xuICAgICAgbmV3RGF0YS5wdXNoKGVudGl0eSlcbiAgICAgIGNyZWF0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0RhdGFbZXhpc3RpbmdJbmRleF0gPSBlbnRpdHlcbiAgICB9XG4gICAgdGhpcy5zaWxlbnRSZXBsYWNlRGF0YShuZXdEYXRhKVxuICAgIHRoaXMucHVibGlzaENoYW5nZUV2ZW50KFxuICAgICAgY3JlYXRlZCA/IERhdGFTb3VyY2VDaGFuZ2VFdmVudC5jcmVhdGVkKFtlbnRpdHldKSA6IERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChbZW50aXR5XSlcbiAgICApXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHNpbGVudFJlcGxhY2VEYXRhKG5ld0RhdGE6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSQubmV4dChuZXdEYXRhKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ3Vlc3NJZFByb3BlcnR5PFQ+KGxvY2FsRGF0YTogVFtdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0xvY2FsTGlzdERhdGFTb3VyY2UnKVxuXG4gICAgaWYgKGxvY2FsRGF0YSAmJiBsb2NhbERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2FtcGxlID0gbG9jYWxEYXRhWzBdXG4gICAgICBpZiAodHlwZW9mIHNhbXBsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHNhbXBsZS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSkge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgJ0RhdGFTb3VyY2Ugd2l0aG91dCBkZWZpbmVkIGlkLXByb3BlcnR5ID0+IGF1dG9kZXRlY3RlZCBwcm9wZXJ0eSBpZC1wcm9wZXJ0eSBhcyBcImlkXCInXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAnaWQnIC8vIFVzZSBpZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgJ0xvY2FsIERhdGFTb3VyY2UgY3JlYXRlZCB3aXRob3V0IGRlZmluZWQgaWQtcHJvcGVydHkgYW5kIG9iamVjdHMuIFVzaW5nIG9iamVjdCBlcXVhbGl0eSEnXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsIC8vIFVzZSB2YWx1ZSBhcyBpZCBpZiBzY2FsYXJcbiAgfVxufVxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtbGlzdC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbW1vbi9kYXRhL2RhdGFzb3VyY2UvbG9jYWwvbG9jYWwtbGlzdC1kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVwQyxPQUFPLEVBQVUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFdkQsTUFBTSxPQUFPLG1CQUF1QixTQUFRLGNBQWlCO0lBYzNEOzs7O2dGQUk0RTtJQUU1RTs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUNqQixVQUF5QixFQUN6QixTQUE2QyxFQUM3QyxXQUFtRDtRQUVuRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUN6RSxDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FDaEIsU0FBYyxFQUNkLFVBQXlCLEVBQ3pCLFNBQTZDLEVBQzdDLFdBQW1EO1FBRW5ELE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FB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WUFDM0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ2hDLEdBQUcsQ0FBQyxJQUFJLENBQ04scUZBQXFGLENBQ3RGLENBQUE7b0JBQ0QsT0FBTyxJQUFJLENBQUEsQ0FBQyxTQUFTO2dCQUN2QixDQUFDO3FCQUFNLENBQUM7b0JBQ04sR0FBRyxDQUFDLElBQUksQ0FDTiwwRkFBMEYsQ0FDM0YsQ0FBQTtnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQSxDQUFDLDRCQUE0QjtJQUMxQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXJzL2ZpbHRlcidcbmltcG9ydCB7IFNvcnQgfSBmcm9tICcuLi8uLi9zb3J0J1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBJTGlzdERhdGFTb3VyY2UgfSBmcm9tICcuLi9kYXRhLXNvdXJjZSdcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2VyRmFjdG9yeSB9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJ1xuaW1wb3J0IHsgRGF0YVNvdXJjZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UtY2hhbmdlLWV2ZW50J1xuaW1wb3J0IHsgRGF0YVNvdXJjZUJhc2UgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS1iYXNlJ1xuaW1wb3J0IHsgU29ydFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zb3J0LXV0aWwnXG5pbXBvcnQgeyBGaWx0ZXJVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsdGVyLXV0aWwnXG5cbmV4cG9ydCBjbGFzcyBMb2NhbExpc3REYXRhU291cmNlPFQ+IGV4dGVuZHMgRGF0YVNvdXJjZUJhc2U8VD4gaW1wbGVtZW50cyBJTGlzdERhdGFTb3VyY2U8VD4ge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFNvcnQ6IChkYXRhOiBUW10sIHNvcnRzOiBTb3J0W10pID0+IFRbXVxuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsRmlsdGVyOiAoZGF0YTogVFtdLCBmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4gVFtdXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFN0YXRpYyBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1wdHkgbG9jYWwgbGlzdCBkYXRhLXNvdXJjZS5cbiAgICogWW91IGNhbiBzZXQgLyBtb2RpZnkgZGF0YSBieSB1c2luZyB0aGUgZGF0YSBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIGlkUHJvcGVydHlcbiAgICogQHBhcmFtIGxvY2FsU29ydFxuICAgKiBAcGFyYW0gbG9jYWxGaWx0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZW1wdHk8VD4oXG4gICAgaWRQcm9wZXJ0eTogc3RyaW5nIHwgbnVsbCxcbiAgICBsb2NhbFNvcnQ/OiAoZGF0YTogVFtdLCBzb3J0czogU29ydFtdKSA9PiBUW10sXG4gICAgbG9jYWxGaWx0ZXI/OiAoZGF0YTogVFtdLCBmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4gVFtdXG4gICk6IExvY2FsTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgIHJldHVybiBMb2NhbExpc3REYXRhU291cmNlLmZyb20oW10sIGlkUHJvcGVydHksIGxvY2FsU29ydCwgbG9jYWxGaWx0ZXIpXG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGZyb208VD4oXG4gICAgbG9jYWxEYXRhOiBUW10sXG4gICAgaWRQcm9wZXJ0eTogc3RyaW5nIHwgbnVsbCxcbiAgICBsb2NhbFNvcnQ/OiAoZGF0YTogVFtdLCBzb3J0czogU29ydFtdKSA9PiBUW10sXG4gICAgbG9jYWxGaWx0ZXI/OiAoZGF0YTogVFtdLCBmaWx0ZXJzOiBGaWx0ZXJbXSkgPT4gVFtdXG4gICk6IExvY2FsTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgIHJldHVybiBuZXcgTG9jYWxMaXN0RGF0YVNvdXJjZShsb2NhbERhdGEsIGxvY2FsU29ydCwgbG9jYWxGaWx0ZXIsIGlkUHJvcGVydHkpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBsb2NhbERhdGE6IFRbXSxcbiAgICBsb2NhbFNvcnQ6IChkYXRhOiBUW10sIHNvcnRzOiBTb3J0W10pID0+IFRbXSxcbiAgICBsb2NhbEZpbHRlcjogKGRhdGE6IFRbXSwgZmlsdGVyczogRmlsdGVyW10pID0+IFRbXSxcbiAgICBpZFByb3BlcnR5OiBzdHJpbmcgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKGlkUHJvcGVydHkgfHwgTG9jYWxMaXN0RGF0YVNvdXJjZS5ndWVzc0lkUHJvcGVydHkobG9jYWxEYXRhKSlcbiAgICBpZiAoIWxvY2FsRGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2NhbERhdGEgbXVzdCBub3QgYmUgbnVsbCEnKVxuICAgIH1cbiAgICB0aGlzLmxvY2FsU29ydCA9IGxvY2FsU29ydCB8fCBTb3J0VXRpbC5zb3J0RGF0YVxuICAgIHRoaXMubG9jYWxGaWx0ZXIgPSBsb2NhbEZpbHRlciB8fCBGaWx0ZXJVdGlsLmZpbHRlckRhdGFcbiAgICB0aGlzLmRhdGEgPSBsb2NhbERhdGFcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgZGF0YSgpOiBUW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGEkLmdldFZhbHVlKClcbiAgfVxuXG4gIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICB0aGlzLnJlcGxhY2VBbGwoZGF0YSlcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBJRGF0YVNvdXJjZSBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBmaW5kQnlJZChpZDogYW55KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmluZEJ5SWQ6IGlkIGFyZ3VtZW50IHJlcXVpcmVkIScpXG4gICAgfVxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5kYXRhLmZpbmQoKGQpID0+IHRoaXMuZ2V0SWQoZCkgPT09IGlkKVxuICAgIGlmIChmb3VuZCkge1xuICAgICAgcmV0dXJuIG9mKGZvdW5kKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBsb2NhbCBlbnRpdHkgYnkgaWQ6ICdcIiArIGlkICsgXCInXCIpKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJZHMoaWRzOiBhbnlbXSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKGlkcyA9PT0gdW5kZWZpbmVkIHx8IGlkcyA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaW5kQnlJZHM6IGlkcyBhcnJheSBhcmd1bWVudCByZXF1aXJlZCEnKVxuICAgIH1cbiAgICByZXR1cm4gZm9ya0pvaW4oaWRzLm1hcCgoaWQpID0+IHRoaXMuZmluZEJ5SWQoaWQpKSlcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQWxsRmlsdGVyZWQoZmlsdGVycz86IEZpbHRlcltdLCBzb3J0cz86IFNvcnRbXSk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIG9mKHRoaXMuZGF0YSkucGlwZShcbiAgICAgIG1hcCgoZGF0YSkgPT4gdGhpcy5sb2NhbEZpbHRlcihkYXRhLCBmaWx0ZXJzKSksXG4gICAgICBtYXAoKGRhdGEpID0+IHRoaXMubG9jYWxTb3J0KGRhdGEsIHNvcnRzKSlcbiAgICApXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgcmVwbGFjZUFsbChkYXRhOiBUW10pIHtcbiAgICB0aGlzLnNpbGVudFJlcGxhY2VEYXRhKGRhdGEpXG4gICAgdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50LnVua25vd25DaGFuZ2VzKCkpXG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKGVudGl0eTogVCkge1xuICAgIHRoaXMuZGVsZXRlQWxsKFtlbnRpdHldKVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbCh0b0RlbGV0ZTogVFtdKSB7XG4gICAgaWYgKHRvRGVsZXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVBbGxCeUlkKHRvRGVsZXRlLm1hcCgoZSkgPT4gdGhpcy5nZXRJZChlKSkpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbEJ5SWQoaWRzVG9EZWxldGU6IGFueVtdKSB7XG4gICAgaWYgKGlkc1RvRGVsZXRlPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGF0YVxuICAgICAgY29uc3QgaWRzVG9EZWxldGVTZXQgPSBuZXcgU2V0KGlkc1RvRGVsZXRlKVxuICAgICAgdGhpcy5zaWxlbnRSZXBsYWNlRGF0YShleGlzdGluZy5maWx0ZXIoKGUpID0+ICFpZHNUb0RlbGV0ZVNldC5oYXModGhpcy5nZXRJZChlKSkpKVxuICAgICAgdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50LmRlbGV0ZWQoaWRzVG9EZWxldGUpKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlQWxsKHRvU2F2ZTogVFtdKSB7XG4gICAgdG9TYXZlLmZvckVhY2goKGVudGl0eSkgPT4gdGhpcy5zYXZlKGVudGl0eSkpXG4gIH1cblxuICBwdWJsaWMgc2F2ZShlbnRpdHk6IFQpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SWQoZW50aXR5KVxuICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4udGhpcy5kYXRhXVxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBuZXdEYXRhLmZpbmRJbmRleCgoZW50aXR5KSA9PiB0aGlzLmdldElkKGVudGl0eSkgPT09IGlkKVxuXG4gICAgbGV0IGNyZWF0ZWQgPSBmYWxzZVxuICAgIGlmIChleGlzdGluZ0luZGV4ID09PSAtMSkge1xuICAgICAgbmV3RGF0YS5wdXNoKGVudGl0eSlcbiAgICAgIGNyZWF0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0RhdGFbZXhpc3RpbmdJbmRleF0gPSBlbnRpdHlcbiAgICB9XG4gICAgdGhpcy5zaWxlbnRSZXBsYWNlRGF0YShuZXdEYXRhKVxuICAgIHRoaXMucHVibGlzaENoYW5nZUV2ZW50KFxuICAgICAgY3JlYXRlZCA/IERhdGFTb3VyY2VDaGFuZ2VFdmVudC5jcmVhdGVkKFtlbnRpdHldKSA6IERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChbZW50aXR5XSlcbiAgICApXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHNpbGVudFJlcGxhY2VEYXRhKG5ld0RhdGE6IFRbXSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YSQubmV4dChuZXdEYXRhKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ3Vlc3NJZFByb3BlcnR5PFQ+KGxvY2FsRGF0YTogVFtdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0xvY2FsTGlzdERhdGFTb3VyY2UnKVxuXG4gICAgaWYgKGxvY2FsRGF0YSAmJiBsb2NhbERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc2FtcGxlID0gbG9jYWxEYXRhWzBdXG4gICAgICBpZiAodHlwZW9mIHNhbXBsZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKHNhbXBsZS5oYXNPd25Qcm9wZXJ0eSgnaWQnKSkge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgJ0RhdGFTb3VyY2Ugd2l0aG91dCBkZWZpbmVkIGlkLXByb3BlcnR5ID0+IGF1dG9kZXRlY3RlZCBwcm9wZXJ0eSBpZC1wcm9wZXJ0eSBhcyBcImlkXCInXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAnaWQnIC8vIFVzZSBpZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgJ0xvY2FsIERhdGFTb3VyY2UgY3JlYXRlZCB3aXRob3V0IGRlZmluZWQgaWQtcHJvcGVydHkgYW5kIG9iamVjdHMuIFVzaW5nIG9iamVjdCBlcXVhbGl0eSEnXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsIC8vIFVzZSB2YWx1ZSBhcyBpZCBpZiBzY2FsYXJcbiAgfVxufVxuIl19
@@ -51,10 +51,16 @@ export class RestClient extends DataSourceBase {
51
51
  * *
52
52
  **************************************************************************/
53
53
  findById(id, params) {
54
+ if (id === undefined || id === null) {
55
+ throw new Error('findById: id argument required!');
56
+ }
54
57
  params = HttpParamsBuilder.start(params).build();
55
58
  return this.http.get(this.getEntityUrl(id), { params: params });
56
59
  }
57
60
  findByIds(ids, params) {
61
+ if (ids === undefined || ids === null) {
62
+ throw new Error('findByIds: ids array argument required!');
63
+ }
58
64
  this._logger.warn('Very inefficient findByIds handling ' + ids.length);
59
65
  return forkJoin(ids.map((id) => this.findById(id, params)));
60
66
  }
@@ -281,4 +287,4 @@ export class RestClientContinuable extends RestClient {
281
287
  }, []));
282
288
  }
283
289
  }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhc291cmNlL3Jlc3QvcmVzdC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0MsT0FBTyxFQUFRLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFPN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQVksVUFBNkI7UUFIbEMsWUFBTyxHQUFHLElBQUksQ0FBQTtRQUNkLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFHckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7WUFDbkMsQ0FBQztZQUNELElBQUks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QyxPQUFrQixFQUFFLEtBQWMsRUFBRSxNQUFtQjtRQUNyRSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RixNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNqQiw4Q0FBOEM7WUFDOUMsT0FBTyxPQUFPLENBQUMscUJBQXFCLENBQUMsd0ZBQXdGO2dCQUMzSCxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUNyQixJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQ3BFLE1BQU0sQ0FDUDtnQkFDSCxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ1gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQ2pDLE1BQU0sQ0FDSixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQTtZQUNwQixPQUFPLEdBQUcsQ0FBQTtRQUNaLENBQUMsRUFDSSxFQUFFLENBQ1IsQ0FDRixDQUFBO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgRU1QVFksIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBleHBhbmQsIG1hcCwgcmVkdWNlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEh0dHBQYXJhbXNCdWlsZGVyIH0gZnJvbSAnLi4vLi4vaHR0cC1wYXJhbXMtYnVpbGRlcidcbmltcG9ydCB7IFNvcnQgfSBmcm9tICcuLi8uLi9zb3J0J1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vZmlsdGVycy9maWx0ZXInXG5pbXBvcnQgeyBQYWdlLCBQYWdlYWJsZSB9IGZyb20gJy4uLy4uL3BhZ2UnXG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInXG5pbXBvcnQgeyBDb250aW51YWJsZUxpc3RpbmcgfSBmcm9tICcuLi8uLi9jb250aW51YWJsZS1saXN0aW5nJ1xuaW1wb3J0IHsgVG9rZW5DaHVua1JlcXVlc3QgfSBmcm9tICcuLi8uLi90b2tlbi1jaHVuay1yZXF1ZXN0J1xuaW1wb3J0IHtcbiAgSUNvbnRpbnVhYmxlRGF0YVNvdXJjZSxcbiAgSURhdGFTb3VyY2UsXG4gIElMaXN0RGF0YVNvdXJjZSxcbiAgSVBhZ2VkRGF0YVNvdXJjZSxcbn0gZnJvbSAnLi4vZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBCYXRjaGVyIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYmF0Y2hlcidcbmltcG9ydCB7IERhdGFTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlLWNoYW5nZS1ldmVudCdcbmltcG9ydCB7IERhdGFTb3VyY2VCYXNlIH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UtYmFzZSdcblxuZXhwb3J0IGNsYXNzIEludGVybmFsUmVzdENsaWVudENvbmZpZyB7XG4gIHB1YmxpYyBpZEZpZWxkID0gJ2lkJ1xuICBwdWJsaWMgaWRzUGFyYW0gPSAnaWRzJ1xuXG4gIGNvbnN0cnVjdG9yKHVzZXJDb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnKSB7XG4gICAgaWYgKHVzZXJDb25maWcpIHtcbiAgICAgIGlmICh1c2VyQ29uZmlnLmlkRmllbGQpIHtcbiAgICAgICAgdGhpcy5pZEZpZWxkID0gdXNlckNvbmZpZy5pZEZpZWxkXG4gICAgICB9XG4gICAgICBpZiAodXNlckNvbmZpZy5pZHNQYXJhbSkge1xuICAgICAgICB0aGlzLmlkc1BhcmFtID0gdXNlckNvbmZpZy5pZHNQYXJhbVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFsbG93cyB0byBjdXN0b21pemUgdGhlIHJlc3QgY2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN0Q2xpZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBmaWVsZCB0byB1c2UgYXMgaWQuIERlZmF1bHRzIHRvICdpZCcuXG4gICAqL1xuICBwdWJsaWMgaWRGaWVsZD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgcXVlcnkgcGFyYW0gdG8gdXNlIGZvciBtdWx0aXBsZSBpZHMuIERlZmF1bHRzIHRvICdpZHMnXG4gICAqL1xuICBwdWJsaWMgaWRzUGFyYW0/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3RDbGllbnQ8VCwgVElEPiBleHRlbmRzIERhdGFTb3VyY2VCYXNlPFQ+IGltcGxlbWVudHMgSURhdGFTb3VyY2U8VD4ge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogRmllbGRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWc6IEludGVybmFsUmVzdENsaWVudENvbmZpZ1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSByZXN0RW5kcG9pbnQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnXG4gICkge1xuICAgIHN1cGVyKG5ldyBJbnRlcm5hbFJlc3RDbGllbnRDb25maWcoY29uZmlnKS5pZEZpZWxkKVxuICAgIHRoaXMuY29uZmlnID0gbmV3IEludGVybmFsUmVzdENsaWVudENvbmZpZyhjb25maWcpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZmluZEJ5SWQoaWQ6IFRJRCwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHBhcmFtcyA9IEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcykuYnVpbGQoKVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuZ2V0RW50aXR5VXJsKGlkKSwgeyBwYXJhbXM6IHBhcmFtcyB9KVxuICB9XG5cbiAgcHVibGljIGZpbmRCeUlkcyhpZHM6IGFueVtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICB0aGlzLl9sb2dnZXIud2FybignVmVyeSBpbmVmZmljaWVudCBmaW5kQnlJZHMgaGFuZGxpbmcgJyArIGlkcy5sZW5ndGgpXG4gICAgcmV0dXJuIGZvcmtKb2luKGlkcy5tYXAoKGlkKSA9PiB0aGlzLmZpbmRCeUlkKGlkLCBwYXJhbXMpKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9yIFVwZGF0ZXMgdGhlIGdpdmVuIGVudGl0eSBkZXBlbmRpbmcgaWYgaXQgYWxyZWFkeSBoYXMgYSB2YWxpZCBpZC5cbiAgICovXG4gIHB1YmxpYyBzYXZlKGVudGl0eTogVCwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJZChlbnRpdHkpXG4gICAgcmV0dXJuIGlkID8gdGhpcy51cGRhdGUoZW50aXR5LCBwYXJhbXMpIDogdGhpcy5jcmVhdGUoZW50aXR5LCBwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgY3JlYXRlPFRDID0gVD4obmV3RW50aXR5OiBUQywgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PFQ+KHRoaXMucmVzdEVuZHBvaW50LCBuZXdFbnRpdHksIHtcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFwKChlKSA9PiB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQuY3JlYXRlZChbZV0pKSkpXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlPFRFbnRpdHlVcGRhdGU+KHVwZGF0ZTogVEVudGl0eVVwZGF0ZSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQ8VD4odGhpcy5nZXRFbnRpdHlVcmxCeSg8VD4oPHVua25vd24+dXBkYXRlKSksIHVwZGF0ZSwge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKGUpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChbZV0pKSkpXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQWxsPFRFbnRpdHlVcGRhdGU+KFxuICAgIHVwZGF0ZWRFbnRpdGllczogVEVudGl0eVVwZGF0ZVtdLFxuICAgIHBhcmFtcz86IEh0dHBQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0PFRbXT4odGhpcy5yZXN0RW5kcG9pbnQsIHVwZGF0ZWRFbnRpdGllcywge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKGVudGl0aWVzKSA9PiB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQubW9kaWZpZWQoZW50aXRpZXMpKSkpXG4gIH1cblxuICBwdWJsaWMgZGVsZXRlKGVudGl0eTogVCwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmRlbGV0ZSh0aGlzLmdldEVudGl0eVVybEJ5KGVudGl0eSksIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQuZGVsZXRlZChbdGhpcy5nZXRJZChlbnRpdHkpXSkpKSlcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVBbGwoZW50aXRpZXM6IFRbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWRzID0gZW50aXRpZXMubWFwKChlKSA9PiBTdHJpbmcodGhpcy5nZXRJZChlKSkpXG5cbiAgICBjb25zdCBtYXhCYXRjaFNpemUgPSAxMDBcbiAgICBjb25zdCBkZWxldGVSZXF1ZXN0cyA9IEJhdGNoZXIuYmF0Y2hNYXAoaWRzLCBtYXhCYXRjaFNpemUsIChiYXRjaCkgPT5cbiAgICAgIHRoaXMuZGVsZXRlSWRCYXRjaChiYXRjaCwgcGFyYW1zKVxuICAgIClcbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoXG4gICAgICAnRGVsZXRpbmcgJyArIGVudGl0aWVzLmxlbmd0aCArICcgaW4gJyArIGRlbGV0ZVJlcXVlc3RzLmxlbmd0aCArICcgYmF0Y2hlczogJyxcbiAgICAgIGRlbGV0ZVJlcXVlc3RzXG4gICAgKVxuICAgIHJldHVybiBmb3JrSm9pbihkZWxldGVSZXF1ZXN0cylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBTdWIgUmVzb3VyY2UgQnVpbGRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBzdWJSZXNvdXJjZUxpc3Q8VFMsIFRTSUQ+KFxuICAgIHBhcmVudDogVCxcbiAgICBzdWJQYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnPzogUmVzdENsaWVudENvbmZpZ1xuICApOiBSZXN0Q2xpZW50TGlzdDxUUywgVFNJRD4ge1xuICAgIHJldHVybiBuZXcgUmVzdENsaWVudExpc3QodGhpcy5nZXRFbnRpdHlVcmxCeShwYXJlbnQpICsgJy8nICsgc3ViUGF0aCwgdGhpcy5odHRwLCBjb25maWcpXG4gIH1cblxuICBwdWJsaWMgc3ViUmVzb3VyY2VQYWdlZDxUUywgVFNJRD4oXG4gICAgcGFyZW50OiBULFxuICAgIHN1YlBhdGg6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnXG4gICk6IFJlc3RDbGllbnRQYWdlZDxUUywgVFNJRD4ge1xuICAgIHJldHVybiBuZXcgUmVzdENsaWVudFBhZ2VkKHRoaXMuZ2V0RW50aXR5VXJsQnkocGFyZW50KSArICcvJyArIHN1YlBhdGgsIHRoaXMuaHR0cCwgY29uZmlnKVxuICB9XG5cbiAgcHVibGljIHN1YlJlc291cmNlQ29udGludWFibGU8VFMsIFRTSUQ+KFxuICAgIHBhcmVudDogVCxcbiAgICBzdWJQYXRoOiBzdHJpbmcsXG4gICAgY29uZmlnPzogUmVzdENsaWVudENvbmZpZ1xuICApOiBSZXN0Q2xpZW50Q29udGludWFibGU8VFMsIFRTSUQ+IHtcbiAgICByZXR1cm4gbmV3IFJlc3RDbGllbnRDb250aW51YWJsZSh0aGlzLmdldEVudGl0eVVybEJ5KHBhcmVudCkgKyAnLycgKyBzdWJQYXRoLCB0aGlzLmh0dHAsIGNvbmZpZylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm90ZWN0ZWQgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByb3RlY3RlZCBwYXRjaEludGVybmFsPFA+KGlkOiBUSUQsIGVudGl0eVBhdGNoOiBQLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBhdGNoPFQ+KHRoaXMuZ2V0RW50aXR5VXJsKGlkKSwgZW50aXR5UGF0Y2gsIHtcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFwKChlKSA9PiB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQubW9kaWZpZWQoW2VdKSkpKVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhdGNoQWxsSW50ZXJuYWw8UD4oZW50aXR5UGF0Y2hlczogUFtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucGF0Y2g8VFtdPih0aGlzLnJlc3RFbmRwb2ludCwgZW50aXR5UGF0Y2hlcywge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKGUpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChlKSkpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFN3aXRjaCB0byBwdWJsaXNoQ2hhbmdlRXZlbnRcbiAgICovXG4gIHByb3RlY3RlZCBvbkxvY2FsQ2hhbmdlZChlbnRpdHk/OiBUKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50LnVua25vd25DaGFuZ2VzKCkpXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RW50aXR5VXJsQnkoZW50aXR5OiBUKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRpdHlVcmwodGhpcy5nZXRJZChlbnRpdHkpKVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldEVudGl0eVVybChpZDogVElEKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXN0RW5kcG9pbnQgKyAnLycgKyBpZFxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGdpdmVuIGlkcyBpbiBhIGJhdGNoIGNhbGwuXG4gICAqIE5vdGUgdGhhdCBkdWUgSFRUUCBSZXF1ZXN0IFVSSSBsaW1pdGF0aW9ucyxcbiAgICogdGhlIG51bWJlciBvZiBpZHMgdGhhdCBjYW4gYmUgZGVsZXRlZCBpbiBhIHNpbmdsZSBiYXRjaCBpc1xuICAgKiBsaW1pdGVkIChhcm91bmQgMTUwLCBkZXBlbmRpbmcgb24gaWQgbGVuZ3RoLCBzaW5jZSB0aGV5IGFyZVxuICAgKiBwYXJ0IG9mIHRoZSByZXF1ZXN0IHVyaSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHJpdmF0ZSBkZWxldGVJZEJhdGNoKGlkczogc3RyaW5nW10sIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBIdHRwUGFyYW1zQnVpbGRlci5zdGFydChwYXJhbXMpXG4gICAgYnVpbGRlci5hcHBlbmRGaWx0ZXIobmV3IEZpbHRlcih0aGlzLmNvbmZpZy5pZHNQYXJhbSwgaWRzKSlcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZGVsZXRlKHRoaXMucmVzdEVuZHBvaW50LCB7XG4gICAgICAgIHBhcmFtczogYnVpbGRlci5idWlsZCgpLFxuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50LmRlbGV0ZWQoaWRzKSkpKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXN0Q2xpZW50TGlzdDxULCBUSUQ+IGV4dGVuZHMgUmVzdENsaWVudDxULCBUSUQ+IGltcGxlbWVudHMgSUxpc3REYXRhU291cmNlPFQ+IHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IocmVzdEVuZHBvaW50OiBzdHJpbmcsIGh0dHA6IEh0dHBDbGllbnQsIGNvbmZpZz86IFJlc3RDbGllbnRDb25maWcpIHtcbiAgICBzdXBlcihyZXN0RW5kcG9pbnQsIGh0dHAsIGNvbmZpZylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBmaW5kQWxsRmlsdGVyZWQoZmlsdGVycz86IEZpbHRlcltdLCBzb3J0cz86IFNvcnRbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEFsbChcbiAgICAgIEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcykuYXBwZW5kRmlsdGVycyhmaWx0ZXJzKS5hcHBlbmRTb3J0cyhzb3J0cykuYnVpbGQoKVxuICAgIClcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJZHMoaWRzOiBhbnlbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKGlkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZEFsbEZpbHRlcmVkKFtuZXcgRmlsdGVyKHRoaXMuY29uZmlnLmlkc1BhcmFtLCBpZHMpXSwgW10sIHBhcmFtcylcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKFtdKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmaW5kQWxsKHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFRbXT4odGhpcy5yZXN0RW5kcG9pbnQsIHtcbiAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc3RDbGllbnRQYWdlZDxULCBUSUQ+IGV4dGVuZHMgUmVzdENsaWVudDxULCBUSUQ+IGltcGxlbWVudHMgSVBhZ2VkRGF0YVNvdXJjZTxUPiB7XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKHJlc3RFbmRwb2ludDogc3RyaW5nLCBodHRwOiBIdHRwQ2xpZW50LCBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnKSB7XG4gICAgc3VwZXIocmVzdEVuZHBvaW50LCBodHRwLCBjb25maWcpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZmluZEFsbFBhZ2VkKFxuICAgIHBhZ2VhYmxlOiBQYWdlYWJsZSxcbiAgICBmaWx0ZXJzPzogRmlsdGVyW10sXG4gICAgcGFyYW1zPzogSHR0cFBhcmFtc1xuICApOiBPYnNlcnZhYmxlPFBhZ2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQYWdlZCh0aGlzLnJlc3RFbmRwb2ludCwgcGFnZWFibGUsIGZpbHRlcnMsIHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJZHMoaWRzOiBhbnlbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKGlkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZEFsbFBhZ2VkKFxuICAgICAgICBuZXcgUGFnZWFibGUoMCwgaWRzLmxlbmd0aCksXG4gICAgICAgIFtuZXcgRmlsdGVyKHRoaXMuY29uZmlnLmlkc1BhcmFtLCBpZHMpXSxcbiAgICAgICAgcGFyYW1zXG4gICAgICApLnBpcGUobWFwKChwYWdlKSA9PiBwYWdlLmNvbnRlbnQpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlcXVlc3RlZCBkYXRhIHBhZ2UgYXMgUGFnZTxUPlxuICAgKiBAcGFyYW0gdXJsIFRoZSByZXNvdXJjZSB1cmxcbiAgICogQHBhcmFtIHBhZ2VhYmxlIFRoZSBwYWdlIHJlcXVlc3RcbiAgICogQHBhcmFtIGZpbHRlcnMgVGhlIGZpbHRlcnNTbmFwc2hvdCByZXF1ZXN0XG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBwYXJhbWV0ZXJzXG4gICAqL1xuICBwcml2YXRlIGdldFBhZ2VkKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHBhZ2VhYmxlOiBQYWdlYWJsZSxcbiAgICBmaWx0ZXJzPzogRmlsdGVyW10sXG4gICAgcGFyYW1zPzogSHR0cFBhcmFtc1xuICApOiBPYnNlcnZhYmxlPFBhZ2U8VD4+IHtcbiAgICBwYXJhbXMgPSBIdHRwUGFyYW1zQnVpbGRlci5zdGFydChwYXJhbXMpLmFwcGVuZFBhZ2VhYmxlKHBhZ2VhYmxlKS5hcHBlbmRGaWx0ZXJzKGZpbHRlcnMpLmJ1aWxkKClcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQYWdlPFQ+Pih1cmwsIHsgcGFyYW1zOiBwYXJhbXMgfSlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzdENsaWVudENvbnRpbnVhYmxlPFQsIFRJRD5cbiAgZXh0ZW5kcyBSZXN0Q2xpZW50PFQsIFRJRD5cbiAgaW1wbGVtZW50cyBJQ29udGludWFibGVEYXRhU291cmNlPFQ+XG57XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKHJlc3RFbmRwb2ludDogc3RyaW5nLCBodHRwOiBIdHRwQ2xpZW50LCBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnKSB7XG4gICAgc3VwZXIocmVzdEVuZHBvaW50LCBodHRwLCBjb25maWcpXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgZmluZEFsbENvbnRpbnVhYmxlKFxuICAgIHJlcXVlc3Q6IFRva2VuQ2h1bmtSZXF1ZXN0LFxuICAgIHBhcmFtcz86IEh0dHBQYXJhbXNcbiAgKTogT2JzZXJ2YWJsZTxDb250aW51YWJsZUxpc3Rpbmc8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDb250aW51YWJsZUxpc3Rpbmc8VD4+KHRoaXMucmVzdEVuZHBvaW50LCB7XG4gICAgICBwYXJhbXM6IEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcykuYXBwZW5kQ29udGludWF0aW9uUmVxdWVzdChyZXF1ZXN0KS5idWlsZCgpLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgZmluZEJ5SWRzKGlkczogYW55W10sIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGlmIChpZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRBbGwoW25ldyBGaWx0ZXIodGhpcy5jb25maWcuaWRzUGFyYW0sIGlkcyldLCBbXSwgcGFyYW1zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQWxsKGZpbHRlcnM/OiBGaWx0ZXJbXSwgc29ydHM/OiBTb3J0W10sIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmZpbmRBbGxDb250aW51YWJsZShuZXcgVG9rZW5DaHVua1JlcXVlc3QobnVsbCwgZmlsdGVycywgc29ydHMpLCBwYXJhbXMpLnBpcGUoXG4gICAgICBleHBhbmQoKGxpc3RpbmcpID0+IHtcbiAgICAgICAgLy8gdGhlIHByZXZpb3VzIFwibGlzdGluZ1wiIC0+IFRoaXMgaXMgcmVjdXJzaXZlXG4gICAgICAgIHJldHVybiBsaXN0aW5nLm5leHRDb250aW51YXRpb25Ub2tlbiAvLyBpZiB0aGVyZSdzIFwibmV4dENvbnRpbnVhdGlvblRva2VuXCIsIHdlIHJlZmV0Y2ggb3Igd2UgRU1QVFkgdG8gY29tcGxldGUgdGhlIFwiZXhwYW5kKClcIlxuICAgICAgICAgID8gdGhpcy5maW5kQWxsQ29udGludWFibGUoXG4gICAgICAgICAgICAgIG5ldyBUb2tlbkNodW5rUmVxdWVzdChsaXN0aW5nLm5leHRDb250aW51YXRpb25Ub2tlbiwgZmlsdGVycywgc29ydHMpLFxuICAgICAgICAgICAgICBwYXJhbXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IEVNUFRZXG4gICAgICB9KSxcbiAgICAgIG1hcCgobGlzdGluZykgPT4gbGlzdGluZy5jb250ZW50KSxcbiAgICAgIHJlZHVjZShcbiAgICAgICAgKGFnZywgbGlzdGluZykgPT4ge1xuICAgICAgICAgIGFnZy5wdXNoKC4uLmxpc3RpbmcpXG4gICAgICAgICAgcmV0dXJuIGFnZ1xuICAgICAgICB9LFxuICAgICAgICA8VFtdPltdXG4gICAgICApXG4gICAgKVxuICB9XG59XG4iXX0=
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21tb24vZGF0YS9kYXRhc291cmNlL3Jlc3QvcmVzdC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUU3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0MsT0FBTyxFQUFRLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFPN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUVwRCxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQVksVUFBNkI7UUFIbEMsWUFBTyxHQUFHLElBQUksQ0FBQTtRQUNkLGFBQVEsR0FBRyxLQUFLLENBQUE7UUFHckIsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUE7WUFDbkMsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUE7WUFDckMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7Q0FVNUI7QUFFRCxNQUFNLE9BQU8sVUFBbUIsU0FBUSxjQUFpQjtJQVV2RDs7OztnRkFJNEU7SUFFNUUsWUFDcUIsWUFBb0IsRUFDcEIsSUFBZ0IsRUFDbkMsTUFBeUI7UUFFekIsS0FBSyxDQUFDLElBQUksd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7UUFKaEMsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWpCckM7Ozs7b0ZBSTRFO1FBRTNELFlBQU8sR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFldkUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRDs7OztnRkFJNEU7SUFFckUsUUFBUSxDQUFDLEVBQU8sRUFBRSxNQUFtQjtRQUMxQyxJQUFJLEVBQUUsS0FBSyxTQUFTLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUNwRCxDQUFDO1FBQ0QsTUFBTSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNoRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQVUsRUFBRSxNQUFtQjtRQUM5QyxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQTtRQUM1RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3RFLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJLENBQUMsTUFBUyxFQUFFLE1BQW1CO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0lBRU0sTUFBTSxDQUFTLFNBQWEsRUFBRSxNQUFtQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFFTSxNQUFNLENBQWdCLE1BQXFCLEVBQUUsTUFBbUI7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBSSxJQUFJLENBQUMsY0FBYyxDQUFjLE1BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRTtZQUN6RCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRU0sU0FBUyxDQUNkLGVBQWdDLEVBQ2hDLE1BQW1CO1FBRW5CLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUU7WUFDNUMsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRixDQUFDO0lBRU0sTUFBTSxDQUFDLE1BQVMsRUFBRSxNQUFtQjtRQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkMsWUFBWSxFQUFFLE1BQU07WUFDcEIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEcsQ0FBQztJQUVNLFNBQVMsQ0FBQyxRQUFhLEVBQUUsTUFBbUI7UUFDakQsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXRELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQTtRQUN4QixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNuRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FDbEMsQ0FBQTtRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUNoQixXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQzdFLGNBQWMsQ0FDZixDQUFBO1FBQ0QsT0FBTyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxlQUFlLENBQ3BCLE1BQVMsRUFDVCxPQUFlLEVBQ2YsTUFBeUI7UUFFekIsT0FBTyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUMzRixDQUFDO0lBRU0sZ0JBQWdCLENBQ3JCLE1BQVMsRUFDVCxPQUFlLEVBQ2YsTUFBeUI7UUFFekIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUM1RixDQUFDO0lBRU0sc0JBQXNCLENBQzNCLE1BQVMsRUFDVCxPQUFlLEVBQ2YsTUFBeUI7UUFFekIsT0FBTyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2xHLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFbEUsYUFBYSxDQUFJLEVBQU8sRUFBRSxXQUFjLEVBQUUsTUFBbUI7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEtBQUssQ0FBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRTtZQUM1QyxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRVMsZ0JBQWdCLENBQUksYUFBa0IsRUFBRSxNQUFtQjtRQUNuRSxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsS0FBSyxDQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFO1lBQzVDLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakYsQ0FBQztJQUVEOztPQUVHO0lBQ08sY0FBYyxDQUFDLE1BQVU7UUFDakMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUVTLGNBQWMsQ0FBQyxNQUFTO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDOUMsQ0FBQztJQUVTLFlBQVksQ0FBQyxFQUFPO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7Ozs7OztPQU1HO0lBQ0ssYUFBYSxDQUFDLEdBQWEsRUFBRSxNQUFtQjtRQUN0RCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO1FBQzNELE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN6QixNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN2QixZQUFZLEVBQUUsTUFBTTtTQUNyQixDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pGLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxjQUF1QixTQUFRLFVBQWtCO0lBQzVEOzs7O2dGQUk0RTtJQUU1RSxZQUFZLFlBQW9CLEVBQUUsSUFBZ0IsRUFBRSxNQUF5QjtRQUMzRSxLQUFLLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXJFLGVBQWUsQ0FBQyxPQUFrQixFQUFFLEtBQWMsRUFBRSxNQUFtQjtRQUM1RSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUNsRixDQUFBO0lBQ0gsQ0FBQztJQUVNLFNBQVMsQ0FBQyxHQUFVLEVBQUUsTUFBbUI7UUFDOUMsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ2xGLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVNLE9BQU8sQ0FBQyxNQUFtQjtRQUNoQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDM0MsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sZUFBd0IsU0FBUSxVQUFrQjtJQUM3RDs7OztnRkFJNEU7SUFFNUUsWUFBWSxZQUFvQixFQUFFLElBQWdCLEVBQUUsTUFBeUI7UUFDM0UsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxZQUFZLENBQ2pCLFFBQWtCLEVBQ2xCLE9BQWtCLEVBQ2xCLE1BQW1CO1FBRW5CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVNLFNBQVMsQ0FBQyxHQUFVLEVBQUUsTUFBbUI7UUFDOUMsSUFBSSxHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FDdEIsSUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDM0IsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUN2QyxNQUFNLENBQ1AsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFRDs7OztnRkFJNEU7SUFFNUU7Ozs7OztPQU1HO0lBQ0ssUUFBUSxDQUNkLEdBQVcsRUFDWCxRQUFrQixFQUNsQixPQUFrQixFQUNsQixNQUFtQjtRQUVuQixNQUFNLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDaEcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVSxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8scUJBQ1gsU0FBUSxVQUFrQjtJQUcxQjs7OztnRkFJNEU7SUFFNUUsWUFBWSxZQUFvQixFQUFFLElBQWdCLEVBQUUsTUFBeUI7UUFDM0UsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOzs7O2dGQUk0RTtJQUVyRSxrQkFBa0IsQ0FDdkIsT0FBMEIsRUFDMUIsTUFBbUI7UUFFbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBd0IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM3RCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRTtTQUNuRixDQUFDLENBQUE7SUFDSixDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQVUsRUFBRSxNQUFtQjtRQUM5QyxJQUFJLEdBQUcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNmLENBQUM7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUFDLE9BQWtCLEVBQUUsS0FBYyxFQUFFLE1BQW1CO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQ3RGLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLDhDQUE4QztZQUM5QyxPQUFPLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyx3RkFBd0Y7Z0JBQzNILENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQ3JCLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDcEUsTUFBTSxDQUNQO2dCQUNILENBQUMsQ0FBQyxLQUFLLENBQUE7UUFDWCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFDakMsTUFBTSxDQUNKLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFBO1lBQ3BCLE9BQU8sR0FBRyxDQUFBO1FBQ1osQ0FBQyxFQUNJLEVBQUUsQ0FDUixDQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGV4cGFuZCwgbWFwLCByZWR1Y2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSHR0cFBhcmFtc0J1aWxkZXIgfSBmcm9tICcuLi8uLi9odHRwLXBhcmFtcy1idWlsZGVyJ1xuaW1wb3J0IHsgU29ydCB9IGZyb20gJy4uLy4uL3NvcnQnXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9maWx0ZXJzL2ZpbHRlcidcbmltcG9ydCB7IFBhZ2UsIFBhZ2VhYmxlIH0gZnJvbSAnLi4vLi4vcGFnZSdcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcidcbmltcG9ydCB7IENvbnRpbnVhYmxlTGlzdGluZyB9IGZyb20gJy4uLy4uL2NvbnRpbnVhYmxlLWxpc3RpbmcnXG5pbXBvcnQgeyBUb2tlbkNodW5rUmVxdWVzdCB9IGZyb20gJy4uLy4uL3Rva2VuLWNodW5rLXJlcXVlc3QnXG5pbXBvcnQge1xuICBJQ29udGludWFibGVEYXRhU291cmNlLFxuICBJRGF0YVNvdXJjZSxcbiAgSUxpc3REYXRhU291cmNlLFxuICBJUGFnZWREYXRhU291cmNlLFxufSBmcm9tICcuLi9kYXRhLXNvdXJjZSdcbmltcG9ydCB7IEJhdGNoZXIgfSBmcm9tICcuLi8uLi8uLi91dGlscy9iYXRjaGVyJ1xuaW1wb3J0IHsgRGF0YVNvdXJjZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UtY2hhbmdlLWV2ZW50J1xuaW1wb3J0IHsgRGF0YVNvdXJjZUJhc2UgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS1iYXNlJ1xuXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxSZXN0Q2xpZW50Q29uZmlnIHtcbiAgcHVibGljIGlkRmllbGQgPSAnaWQnXG4gIHB1YmxpYyBpZHNQYXJhbSA9ICdpZHMnXG5cbiAgY29uc3RydWN0b3IodXNlckNvbmZpZz86IFJlc3RDbGllbnRDb25maWcpIHtcbiAgICBpZiAodXNlckNvbmZpZykge1xuICAgICAgaWYgKHVzZXJDb25maWcuaWRGaWVsZCkge1xuICAgICAgICB0aGlzLmlkRmllbGQgPSB1c2VyQ29uZmlnLmlkRmllbGRcbiAgICAgIH1cbiAgICAgIGlmICh1c2VyQ29uZmlnLmlkc1BhcmFtKSB7XG4gICAgICAgIHRoaXMuaWRzUGFyYW0gPSB1c2VyQ29uZmlnLmlkc1BhcmFtXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWxsb3dzIHRvIGN1c3RvbWl6ZSB0aGUgcmVzdCBjbGllbnRcbiAqL1xuZXhwb3J0IGNsYXNzIFJlc3RDbGllbnRDb25maWcge1xuICAvKipcbiAgICogVGhlIGZpZWxkIHRvIHVzZSBhcyBpZC4gRGVmYXVsdHMgdG8gJ2lkJy5cbiAgICovXG4gIHB1YmxpYyBpZEZpZWxkPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSBwYXJhbSB0byB1c2UgZm9yIG11bHRpcGxlIGlkcy4gRGVmYXVsdHMgdG8gJ2lkcydcbiAgICovXG4gIHB1YmxpYyBpZHNQYXJhbT86IHN0cmluZ1xufVxuXG5leHBvcnQgY2xhc3MgUmVzdENsaWVudDxULCBUSUQ+IGV4dGVuZHMgRGF0YVNvdXJjZUJhc2U8VD4gaW1wbGVtZW50cyBJRGF0YVNvdXJjZTxUPiB7XG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSlcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZzogSW50ZXJuYWxSZXN0Q2xpZW50Q29uZmlnXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc3RFbmRwb2ludDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIGNvbmZpZz86IFJlc3RDbGllbnRDb25maWdcbiAgKSB7XG4gICAgc3VwZXIobmV3IEludGVybmFsUmVzdENsaWVudENvbmZpZyhjb25maWcpLmlkRmllbGQpXG4gICAgdGhpcy5jb25maWcgPSBuZXcgSW50ZXJuYWxSZXN0Q2xpZW50Q29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBmaW5kQnlJZChpZDogVElELCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKGlkID09PSB1bmRlZmluZWQgfHwgaWQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmluZEJ5SWQ6IGlkIGFyZ3VtZW50IHJlcXVpcmVkIScpXG4gICAgfVxuICAgIHBhcmFtcyA9IEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcykuYnVpbGQoKVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHRoaXMuZ2V0RW50aXR5VXJsKGlkKSwgeyBwYXJhbXM6IHBhcmFtcyB9KVxuICB9XG5cbiAgcHVibGljIGZpbmRCeUlkcyhpZHM6IGFueVtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAoaWRzID09PSB1bmRlZmluZWQgfHwgaWRzID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpbmRCeUlkczogaWRzIGFycmF5IGFyZ3VtZW50IHJlcXVpcmVkIScpXG4gICAgfVxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdWZXJ5IGluZWZmaWNpZW50IGZpbmRCeUlkcyBoYW5kbGluZyAnICsgaWRzLmxlbmd0aClcbiAgICByZXR1cm4gZm9ya0pvaW4oaWRzLm1hcCgoaWQpID0+IHRoaXMuZmluZEJ5SWQoaWQsIHBhcmFtcykpKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgVXBkYXRlcyB0aGUgZ2l2ZW4gZW50aXR5IGRlcGVuZGluZyBpZiBpdCBhbHJlYWR5IGhhcyBhIHZhbGlkIGlkLlxuICAgKi9cbiAgcHVibGljIHNhdmUoZW50aXR5OiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgaWQgPSB0aGlzLmdldElkKGVudGl0eSlcbiAgICByZXR1cm4gaWQgPyB0aGlzLnVwZGF0ZShlbnRpdHksIHBhcmFtcykgOiB0aGlzLmNyZWF0ZShlbnRpdHksIHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGU8VEMgPSBUPihuZXdFbnRpdHk6IFRDLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8VD4odGhpcy5yZXN0RW5kcG9pbnQsIG5ld0VudGl0eSwge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKGUpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5jcmVhdGVkKFtlXSkpKSlcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGU8VEVudGl0eVVwZGF0ZT4odXBkYXRlOiBURW50aXR5VXBkYXRlLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dDxUPih0aGlzLmdldEVudGl0eVVybEJ5KDxUPig8dW5rbm93bj51cGRhdGUpKSwgdXBkYXRlLCB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRhcCgoZSkgPT4gdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50Lm1vZGlmaWVkKFtlXSkpKSlcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVBbGw8VEVudGl0eVVwZGF0ZT4oXG4gICAgdXBkYXRlZEVudGl0aWVzOiBURW50aXR5VXBkYXRlW10sXG4gICAgcGFyYW1zPzogSHR0cFBhcmFtc1xuICApOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQ8VFtdPih0aGlzLnJlc3RFbmRwb2ludCwgdXBkYXRlZEVudGl0aWVzLCB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRhcCgoZW50aXRpZXMpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChlbnRpdGllcykpKSlcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoZW50aXR5OiBULCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZGVsZXRlKHRoaXMuZ2V0RW50aXR5VXJsQnkoZW50aXR5KSwge1xuICAgICAgICByZXNwb25zZVR5cGU6ICd0ZXh0JyxcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFwKCgpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5kZWxldGVkKFt0aGlzLmdldElkKGVudGl0eSldKSkpKVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUFsbChlbnRpdGllczogVFtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBpZHMgPSBlbnRpdGllcy5tYXAoKGUpID0+IFN0cmluZyh0aGlzLmdldElkKGUpKSlcblxuICAgIGNvbnN0IG1heEJhdGNoU2l6ZSA9IDEwMFxuICAgIGNvbnN0IGRlbGV0ZVJlcXVlc3RzID0gQmF0Y2hlci5iYXRjaE1hcChpZHMsIG1heEJhdGNoU2l6ZSwgKGJhdGNoKSA9PlxuICAgICAgdGhpcy5kZWxldGVJZEJhdGNoKGJhdGNoLCBwYXJhbXMpXG4gICAgKVxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZyhcbiAgICAgICdEZWxldGluZyAnICsgZW50aXRpZXMubGVuZ3RoICsgJyBpbiAnICsgZGVsZXRlUmVxdWVzdHMubGVuZ3RoICsgJyBiYXRjaGVzOiAnLFxuICAgICAgZGVsZXRlUmVxdWVzdHNcbiAgICApXG4gICAgcmV0dXJuIGZvcmtKb2luKGRlbGV0ZVJlcXVlc3RzKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFN1YiBSZXNvdXJjZSBCdWlsZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIHN1YlJlc291cmNlTGlzdDxUUywgVFNJRD4oXG4gICAgcGFyZW50OiBULFxuICAgIHN1YlBhdGg6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnXG4gICk6IFJlc3RDbGllbnRMaXN0PFRTLCBUU0lEPiB7XG4gICAgcmV0dXJuIG5ldyBSZXN0Q2xpZW50TGlzdCh0aGlzLmdldEVudGl0eVVybEJ5KHBhcmVudCkgKyAnLycgKyBzdWJQYXRoLCB0aGlzLmh0dHAsIGNvbmZpZylcbiAgfVxuXG4gIHB1YmxpYyBzdWJSZXNvdXJjZVBhZ2VkPFRTLCBUU0lEPihcbiAgICBwYXJlbnQ6IFQsXG4gICAgc3ViUGF0aDogc3RyaW5nLFxuICAgIGNvbmZpZz86IFJlc3RDbGllbnRDb25maWdcbiAgKTogUmVzdENsaWVudFBhZ2VkPFRTLCBUU0lEPiB7XG4gICAgcmV0dXJuIG5ldyBSZXN0Q2xpZW50UGFnZWQodGhpcy5nZXRFbnRpdHlVcmxCeShwYXJlbnQpICsgJy8nICsgc3ViUGF0aCwgdGhpcy5odHRwLCBjb25maWcpXG4gIH1cblxuICBwdWJsaWMgc3ViUmVzb3VyY2VDb250aW51YWJsZTxUUywgVFNJRD4oXG4gICAgcGFyZW50OiBULFxuICAgIHN1YlBhdGg6IHN0cmluZyxcbiAgICBjb25maWc/OiBSZXN0Q2xpZW50Q29uZmlnXG4gICk6IFJlc3RDbGllbnRDb250aW51YWJsZTxUUywgVFNJRD4ge1xuICAgIHJldHVybiBuZXcgUmVzdENsaWVudENvbnRpbnVhYmxlKHRoaXMuZ2V0RW50aXR5VXJsQnkocGFyZW50KSArICcvJyArIHN1YlBhdGgsIHRoaXMuaHR0cCwgY29uZmlnKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3RlY3RlZCBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJvdGVjdGVkIHBhdGNoSW50ZXJuYWw8UD4oaWQ6IFRJRCwgZW50aXR5UGF0Y2g6IFAsIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucGF0Y2g8VD4odGhpcy5nZXRFbnRpdHlVcmwoaWQpLCBlbnRpdHlQYXRjaCwge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YXAoKGUpID0+IHRoaXMucHVibGlzaENoYW5nZUV2ZW50KERhdGFTb3VyY2VDaGFuZ2VFdmVudC5tb2RpZmllZChbZV0pKSkpXG4gIH1cblxuICBwcm90ZWN0ZWQgcGF0Y2hBbGxJbnRlcm5hbDxQPihlbnRpdHlQYXRjaGVzOiBQW10sIHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wYXRjaDxUW10+KHRoaXMucmVzdEVuZHBvaW50LCBlbnRpdHlQYXRjaGVzLCB7XG4gICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRhcCgoZSkgPT4gdGhpcy5wdWJsaXNoQ2hhbmdlRXZlbnQoRGF0YVNvdXJjZUNoYW5nZUV2ZW50Lm1vZGlmaWVkKGUpKSkpXG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgU3dpdGNoIHRvIHB1Ymxpc2hDaGFuZ2VFdmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uTG9jYWxDaGFuZ2VkKGVudGl0eT86IFQpOiB2b2lkIHtcbiAgICB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQudW5rbm93bkNoYW5nZXMoKSlcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRFbnRpdHlVcmxCeShlbnRpdHk6IFQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEVudGl0eVVybCh0aGlzLmdldElkKGVudGl0eSkpXG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RW50aXR5VXJsKGlkOiBUSUQpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc3RFbmRwb2ludCArICcvJyArIGlkXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZ2l2ZW4gaWRzIGluIGEgYmF0Y2ggY2FsbC5cbiAgICogTm90ZSB0aGF0IGR1ZSBIVFRQIFJlcXVlc3QgVVJJIGxpbWl0YXRpb25zLFxuICAgKiB0aGUgbnVtYmVyIG9mIGlkcyB0aGF0IGNhbiBiZSBkZWxldGVkIGluIGEgc2luZ2xlIGJhdGNoIGlzXG4gICAqIGxpbWl0ZWQgKGFyb3VuZCAxNTAsIGRlcGVuZGluZyBvbiBpZCBsZW5ndGgsIHNpbmNlIHRoZXkgYXJlXG4gICAqIHBhcnQgb2YgdGhlIHJlcXVlc3QgdXJpIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGRlbGV0ZUlkQmF0Y2goaWRzOiBzdHJpbmdbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcylcbiAgICBidWlsZGVyLmFwcGVuZEZpbHRlcihuZXcgRmlsdGVyKHRoaXMuY29uZmlnLmlkc1BhcmFtLCBpZHMpKVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5kZWxldGUodGhpcy5yZXN0RW5kcG9pbnQsIHtcbiAgICAgICAgcGFyYW1zOiBidWlsZGVyLmJ1aWxkKCksXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRhcCgoKSA9PiB0aGlzLnB1Ymxpc2hDaGFuZ2VFdmVudChEYXRhU291cmNlQ2hhbmdlRXZlbnQuZGVsZXRlZChpZHMpKSkpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc3RDbGllbnRMaXN0PFQsIFRJRD4gZXh0ZW5kcyBSZXN0Q2xpZW50PFQsIFRJRD4gaW1wbGVtZW50cyBJTGlzdERhdGFTb3VyY2U8VD4ge1xuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihyZXN0RW5kcG9pbnQ6IHN0cmluZywgaHR0cDogSHR0cENsaWVudCwgY29uZmlnPzogUmVzdENsaWVudENvbmZpZykge1xuICAgIHN1cGVyKHJlc3RFbmRwb2ludCwgaHR0cCwgY29uZmlnKVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGZpbmRBbGxGaWx0ZXJlZChmaWx0ZXJzPzogRmlsdGVyW10sIHNvcnRzPzogU29ydFtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5maW5kQWxsKFxuICAgICAgSHR0cFBhcmFtc0J1aWxkZXIuc3RhcnQocGFyYW1zKS5hcHBlbmRGaWx0ZXJzKGZpbHRlcnMpLmFwcGVuZFNvcnRzKHNvcnRzKS5idWlsZCgpXG4gICAgKVxuICB9XG5cbiAgcHVibGljIGZpbmRCeUlkcyhpZHM6IGFueVtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAoaWRzPy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kQWxsRmlsdGVyZWQoW25ldyBGaWx0ZXIodGhpcy5jb25maWcuaWRzUGFyYW0sIGlkcyldLCBbXSwgcGFyYW1zKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2YoW10pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZpbmRBbGwocGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VFtdPih0aGlzLnJlc3RFbmRwb2ludCwge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzdENsaWVudFBhZ2VkPFQsIFRJRD4gZXh0ZW5kcyBSZXN0Q2xpZW50PFQsIFRJRD4gaW1wbGVtZW50cyBJUGFnZWREYXRhU291cmNlPFQ+IHtcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IocmVzdEVuZHBvaW50OiBzdHJpbmcsIGh0dHA6IEh0dHBDbGllbnQsIGNvbmZpZz86IFJlc3RDbGllbnRDb25maWcpIHtcbiAgICBzdXBlcihyZXN0RW5kcG9pbnQsIGh0dHAsIGNvbmZpZylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBmaW5kQWxsUGFnZWQoXG4gICAgcGFnZWFibGU6IFBhZ2VhYmxlLFxuICAgIGZpbHRlcnM/OiBGaWx0ZXJbXSxcbiAgICBwYXJhbXM/OiBIdHRwUGFyYW1zXG4gICk6IE9ic2VydmFibGU8UGFnZTxUPj4ge1xuICAgIHJldHVybiB0aGlzLmdldFBhZ2VkKHRoaXMucmVzdEVuZHBvaW50LCBwYWdlYWJsZSwgZmlsdGVycywgcGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGZpbmRCeUlkcyhpZHM6IGFueVtdLCBwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBpZiAoaWRzPy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kQWxsUGFnZWQoXG4gICAgICAgIG5ldyBQYWdlYWJsZSgwLCBpZHMubGVuZ3RoKSxcbiAgICAgICAgW25ldyBGaWx0ZXIodGhpcy5jb25maWcuaWRzUGFyYW0sIGlkcyldLFxuICAgICAgICBwYXJhbXNcbiAgICAgICkucGlwZShtYXAoKHBhZ2UpID0+IHBhZ2UuY29udGVudCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSlcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJpdmF0ZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogR2V0cyB0aGUgcmVxdWVzdGVkIGRhdGEgcGFnZSBhcyBQYWdlPFQ+XG4gICAqIEBwYXJhbSB1cmwgVGhlIHJlc291cmNlIHVybFxuICAgKiBAcGFyYW0gcGFnZWFibGUgVGhlIHBhZ2UgcmVxdWVzdFxuICAgKiBAcGFyYW0gZmlsdGVycyBUaGUgZmlsdGVyc1NuYXBzaG90IHJlcXVlc3RcbiAgICogQHBhcmFtIHBhcmFtcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICovXG4gIHByaXZhdGUgZ2V0UGFnZWQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgcGFnZWFibGU6IFBhZ2VhYmxlLFxuICAgIGZpbHRlcnM/OiBGaWx0ZXJbXSxcbiAgICBwYXJhbXM/OiBIdHRwUGFyYW1zXG4gICk6IE9ic2VydmFibGU8UGFnZTxUPj4ge1xuICAgIHBhcmFtcyA9IEh0dHBQYXJhbXNCdWlsZGVyLnN0YXJ0KHBhcmFtcykuYXBwZW5kUGFnZWFibGUocGFnZWFibGUpLmFwcGVuZEZpbHRlcnMoZmlsdGVycykuYnVpbGQoKVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFBhZ2U8VD4+KHVybCwgeyBwYXJhbXM6IHBhcmFtcyB9KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXN0Q2xpZW50Q29udGludWFibGU8VCwgVElEPlxuICBleHRlbmRzIFJlc3RDbGllbnQ8VCwgVElEPlxuICBpbXBsZW1lbnRzIElDb250aW51YWJsZURhdGFTb3VyY2U8VD5cbntcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IocmVzdEVuZHBvaW50OiBzdHJpbmcsIGh0dHA6IEh0dHBDbGllbnQsIGNvbmZpZz86IFJlc3RDbGllbnRDb25maWcpIHtcbiAgICBzdXBlcihyZXN0RW5kcG9pbnQsIGh0dHAsIGNvbmZpZylcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBmaW5kQWxsQ29udGludWFibGUoXG4gICAgcmVxdWVzdDogVG9rZW5DaHVua1JlcXVlc3QsXG4gICAgcGFyYW1zPzogSHR0cFBhcmFtc1xuICApOiBPYnNlcnZhYmxlPENvbnRpbnVhYmxlTGlzdGluZzxUPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PENvbnRpbnVhYmxlTGlzdGluZzxUPj4odGhpcy5yZXN0RW5kcG9pbnQsIHtcbiAgICAgIHBhcmFtczogSHR0cFBhcmFtc0J1aWxkZXIuc3RhcnQocGFyYW1zKS5hcHBlbmRDb250aW51YXRpb25SZXF1ZXN0KHJlcXVlc3QpLmJ1aWxkKCksXG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQnlJZHMoaWRzOiBhbnlbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgaWYgKGlkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZEFsbChbbmV3IEZpbHRlcih0aGlzLmNvbmZpZy5pZHNQYXJhbSwgaWRzKV0sIFtdLCBwYXJhbXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvZihbXSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvYWRBbGwoZmlsdGVycz86IEZpbHRlcltdLCBzb3J0cz86IFNvcnRbXSwgcGFyYW1zPzogSHR0cFBhcmFtcyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmluZEFsbENvbnRpbnVhYmxlKG5ldyBUb2tlbkNodW5rUmVxdWVzdChudWxsLCBmaWx0ZXJzLCBzb3J0cyksIHBhcmFtcykucGlwZShcbiAgICAgIGV4cGFuZCgobGlzdGluZykgPT4ge1xuICAgICAgICAvLyB0aGUgcHJldmlvdXMgXCJsaXN0aW5nXCIgLT4gVGhpcyBpcyByZWN1cnNpdmVcbiAgICAgICAgcmV0dXJuIGxpc3RpbmcubmV4dENvbnRpbnVhdGlvblRva2VuIC8vIGlmIHRoZXJlJ3MgXCJuZXh0Q29udGludWF0aW9uVG9rZW5cIiwgd2UgcmVmZXRjaCBvciB3ZSBFTVBUWSB0byBjb21wbGV0ZSB0aGUgXCJleHBhbmQoKVwiXG4gICAgICAgICAgPyB0aGlzLmZpbmRBbGxDb250aW51YWJsZShcbiAgICAgICAgICAgICAgbmV3IFRva2VuQ2h1bmtSZXF1ZXN0KGxpc3RpbmcubmV4dENvbnRpbnVhdGlvblRva2VuLCBmaWx0ZXJzLCBzb3J0cyksXG4gICAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogRU1QVFlcbiAgICAgIH0pLFxuICAgICAgbWFwKChsaXN0aW5nKSA9PiBsaXN0aW5nLmNvbnRlbnQpLFxuICAgICAgcmVkdWNlKFxuICAgICAgICAoYWdnLCBsaXN0aW5nKSA9PiB7XG4gICAgICAgICAgYWdnLnB1c2goLi4ubGlzdGluZylcbiAgICAgICAgICByZXR1cm4gYWdnXG4gICAgICAgIH0sXG4gICAgICAgIDxUW10+W11cbiAgICAgIClcbiAgICApXG4gIH1cbn1cbiJdfQ==
@@ -5127,6 +5127,9 @@ class LocalListDataSource extends DataSourceBase {
5127
5127
  * *
5128
5128
  **************************************************************************/
5129
5129
  findById(id) {
5130
+ if (id === undefined || id === null) {
5131
+ throw new Error('findById: id argument required!');
5132
+ }
5130
5133
  const found = this.data.find((d) => this.getId(d) === id);
5131
5134
  if (found) {
5132
5135
  return of(found);
@@ -5136,6 +5139,9 @@ class LocalListDataSource extends DataSourceBase {
5136
5139
  }
5137
5140
  }
5138
5141
  findByIds(ids) {
5142
+ if (ids === undefined || ids === null) {
5143
+ throw new Error('findByIds: ids array argument required!');
5144
+ }
5139
5145
  return forkJoin(ids.map((id) => this.findById(id)));
5140
5146
  }
5141
5147
  findAllFiltered(filters, sorts) {
@@ -5174,7 +5180,7 @@ class LocalListDataSource extends DataSourceBase {
5174
5180
  const newData = [...this.data];
5175
5181
  const existingIndex = newData.findIndex((entity) => this.getId(entity) === id);
5176
5182
  let created = false;
5177
- if (existingIndex == -1) {
5183
+ if (existingIndex === -1) {
5178
5184
  newData.push(entity);
5179
5185
  created = true;
5180
5186
  }
@@ -5987,10 +5993,16 @@ class RestClient extends DataSourceBase {
5987
5993
  * *
5988
5994
  **************************************************************************/
5989
5995
  findById(id, params) {
5996
+ if (id === undefined || id === null) {
5997
+ throw new Error('findById: id argument required!');
5998
+ }
5990
5999
  params = HttpParamsBuilder.start(params).build();
5991
6000
  return this.http.get(this.getEntityUrl(id), { params: params });
5992
6001
  }
5993
6002
  findByIds(ids, params) {
6003
+ if (ids === undefined || ids === null) {
6004
+ throw new Error('findByIds: ids array argument required!');
6005
+ }
5994
6006
  this._logger.warn('Very inefficient findByIds handling ' + ids.length);
5995
6007
  return forkJoin(ids.map((id) => this.findById(id, params)));
5996
6008
  }