@netgrif/components-core 6.0.2 → 6.0.3-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/bundles/netgrif-components-core.umd.js +36 -16
  2. package/bundles/netgrif-components-core.umd.js.map +1 -1
  3. package/bundles/netgrif-components-core.umd.min.js +1 -1
  4. package/bundles/netgrif-components-core.umd.min.js.map +1 -1
  5. package/esm2015/lib/authentication/components/abstract-authentication-overlay.js +2 -2
  6. package/esm2015/lib/configuration/configuration.service.js +7 -5
  7. package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +6 -3
  8. package/esm2015/lib/data-fields/file-list-field/abstract-file-list-field.component.js +6 -3
  9. package/esm2015/lib/data-fields/models/file-field-id-body.js +2 -0
  10. package/esm2015/lib/groups/services/next-group.service.js +2 -2
  11. package/esm2015/lib/process/process.service.js +3 -2
  12. package/esm5/lib/authentication/components/abstract-authentication-overlay.js +2 -2
  13. package/esm5/lib/configuration/configuration.service.js +23 -10
  14. package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +6 -3
  15. package/esm5/lib/data-fields/file-list-field/abstract-file-list-field.component.js +6 -3
  16. package/esm5/lib/data-fields/models/file-field-id-body.js +2 -0
  17. package/esm5/lib/groups/services/next-group.service.js +2 -2
  18. package/esm5/lib/process/process.service.js +3 -2
  19. package/fesm2015/netgrif-components-core.js +20 -11
  20. package/fesm2015/netgrif-components-core.js.map +1 -1
  21. package/fesm5/netgrif-components-core.js +37 -17
  22. package/fesm5/netgrif-components-core.js.map +1 -1
  23. package/lib/configuration/configuration.service.d.ts +1 -0
  24. package/lib/data-fields/models/file-field-id-body.d.ts +3 -0
  25. package/lib/process/process.service.d.ts +1 -0
  26. package/netgrif-components-core.metadata.json +1 -1
  27. package/package.json +1 -1
@@ -15,6 +15,7 @@ var ProcessService = /** @class */ (function () {
15
15
  function ProcessService(_petriNetResource, _log) {
16
16
  this._petriNetResource = _petriNetResource;
17
17
  this._log = _log;
18
+ this.LATEST = 'latest';
18
19
  this._nets = {};
19
20
  this._netsSubject = new Subject();
20
21
  this._netUpdate = new Subject();
@@ -245,7 +246,7 @@ var ProcessService = /** @class */ (function () {
245
246
  ProcessService.prototype.loadNetReference = function (id) {
246
247
  var _this = this;
247
248
  var returnReference = new ReplaySubject(1);
248
- this._petriNetResource.getOne(id, '^').subscribe(function (reference) {
249
+ this._petriNetResource.getOne(id, this.LATEST).subscribe(function (reference) {
249
250
  returnReference.next(!reference.stringId ? null : reference);
250
251
  returnReference.complete();
251
252
  return;
@@ -322,4 +323,4 @@ var ProcessService = /** @class */ (function () {
322
323
  return ProcessService;
323
324
  }());
324
325
  export { ProcessService };
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3Byb2Nlc3MvcHJvY2Vzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHaEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7O0FBUy9EOztHQUVHO0FBQ0g7SUFXSSx3QkFBb0IsaUJBQTBDLEVBQVUsSUFBbUI7UUFBdkUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUFVLFNBQUksR0FBSixJQUFJLENBQWU7UUFDdkYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE9BQU8sRUFBWSxDQUFDO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO1FBQzNELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztJQUNyRyxDQUFDO0lBRUQsb0NBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVB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LENBQUM7O2dCQXRUc0MsdUJBQXVCO2dCQUFnQixhQUFhOzs7O2dCQVg5RixVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7Z0JBbEJPLHVCQUF1QjtnQkFDdkIsYUFBYTs7eUJBSnJCO0NBcVZDLEFBbFVELElBa1VDO1NBL1RZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05ldH0gZnJvbSAnLi9uZXQnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL3RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zYWN0aW9uIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgUm9sZXNBbmRQZXJtaXNzaW9ucyBmcm9tICcuL3JvbGVzQW5kUGVybWlzc2lvbnMnO1xuaW1wb3J0IHtQZXRyaU5ldFJlZmVyZW5jZX0gZnJvbSAnLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wZXRyaS1uZXQtcmVmZXJlbmNlJztcbmltcG9ydCB7UGV0cmlOZXRSZWZlcmVuY2VXaXRoUGVybWlzc2lvbnN9IGZyb20gJy4vcGV0cmktbmV0LXJlZmVyZW5jZS13aXRoLXBlcm1pc3Npb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBOZXRDYWNoZSB7XG4gICAgW2s6IHN0cmluZ106IE5ldDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGNhY2hpbmcgcHJvY2Vzc2VzIG5lZWRlZCBmb3IgYW55IGZ1bmN0aW9uYWxpdHkgb2YgYW4gYXBwLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfbmV0czogTmV0Q2FjaGU7XG4gICAgcHJvdGVjdGVkIF9uZXRzU3ViamVjdDogU3ViamVjdDxOZXRDYWNoZT47XG4gICAgcHJvdGVjdGVkIF9uZXRVcGRhdGU6IFN1YmplY3Q8TmV0PjtcbiAgICBwcm90ZWN0ZWQgX3JlcXVlc3RDYWNoZTogTWFwPHN0cmluZywgUmVwbGF5U3ViamVjdDxOZXQ+PjtcbiAgICBwcm90ZWN0ZWQgX3JlZmVyZW5jZVJlcXVlc3RDYWNoZTogTWFwPHN0cmluZywgUmVwbGF5U3ViamVjdDxQZXRyaU5ldFJlZmVyZW5jZVdpdGhQZXJtaXNzaW9ucz4+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcGV0cmlOZXRSZXNvdXJjZTogUGV0cmlOZXRSZXNvdXJjZVNlcnZpY2UsIHByaXZhdGUgX2xvZzogTG9nZ2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLl9uZXRzID0ge307XG4gICAgICAgIHRoaXMuX25ldHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TmV0Q2FjaGU+KCk7XG4gICAgICAgIHRoaXMuX25ldFVwZGF0ZSA9IG5ldyBTdWJqZWN0PE5ldD4oKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFJlcGxheVN1YmplY3Q8TmV0Pj4oKTtcbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlUmVxdWVzdENhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFJlcGxheVN1YmplY3Q8UGV0cmlOZXRSZWZlcmVuY2VXaXRoUGVybWlzc2lvbnM+PigpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9uZXRzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9uZXRVcGRhdGUuY29tcGxldGUoKTtcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl9yZXF1ZXN0Q2FjaGUudmFsdWVzKCkpLmZvckVhY2gobmV0ID0+IG5ldC5jb21wbGV0ZSgpKTtcbiAgICAgICAgQXJyYXkuZnJvbSh0aGlzLl9yZWZlcmVuY2VSZXF1ZXN0Q2FjaGUudmFsdWVzKCkpLmZvckVhY2gobmV0ID0+IG5ldC5jb21wbGV0ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcHJvY2VzcyBuZXRzIGFjY29yZGluZyB0byBwcm92aWRlZCBpZGVudGlmaWVycy5cbiAgICAgKiBJZiBhbnkgb2YgdGhlIHJlcXVlc3RlZCBwcm9jZXNzZXMgaXMgbm90IGNhY2hlZCBpdCB3aWxsIGJlIGxvYWRlZCBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHNhdmVkIGZvciBsYXRlci5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllcnMgQXJyYXkgb2YgaWRlbnRpZmllcnMgb2YgcmVxdWVzdGVkIHByb2Nlc3Nlcy4gU2VlIHtAbGluayBOZXR9XG4gICAgICogQHBhcmFtIGZvcmNlTG9hZCB3aGVuIHNldCB0byBgdHJ1ZWAgY2FjaGVkIHByb2Nlc3NlcyB3aWxsIGJlIGlnbm9yZWQgYW5kIGEgYmFja2VuZCByZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIG1hZGVcbiAgICAgKiAodW5sZXNzIGFub3RoZXIgaXMgYWxyZWFkeSBwZW5kaW5nKVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgYXJyYXkgb2YgbG9hZGVkIHByb2Nlc3Nlcy4gQXJyYXkgaXMgZW1pdHRlZCBvbmx5IHdoZW4gZXZlcnkgcHJvY2VzcyBmaW5pc2hlZCBsb2FkaW5nLlxuICAgICAqIElmIGFueSBvZiB0aGUgcHJvY2Vzc2VzIGZhaWxlZCB0byBsb2FkIGl0IGlzIHNraXBwZWQgZnJvbSB0aGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXRzKGlkZW50aWZpZXJzOiBBcnJheTxzdHJpbmc+LCBmb3JjZUxvYWQgPSBmYWxzZSk6IE9ic2VydmFibGU8QXJyYXk8TmV0Pj4ge1xuICAgICAgICBpZiAoaWRlbnRpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihpZGVudGlmaWVycy5tYXAoaSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXQoaSwgZm9yY2VMb2FkKTtcbiAgICAgICAgfSkpLnBpcGUoXG4gICAgICAgICAgICBtYXAobmV0cyA9PiBuZXRzLmZpbHRlcihuID0+ICEhbikpLFxuICAgICAgICAgICAgdGFwKG5ldHMgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNTdWJqZWN0Lm5leHQodGhpcy5fbmV0cyk7XG4gICAgICAgICAgICAgICAgbmV0cy5mb3JFYWNoKG4gPT4gdGhpcy5fbmV0VXBkYXRlLm5leHQobikpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcHJvY2VzcyBuZXQgYnkgaWRlbnRpZmllci5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBJZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzcy4gU2VlIHtAbGluayBOZXR9XG4gICAgICogQHBhcmFtIGZvcmNlTG9hZCB3aGVuIHNldCB0byBgdHJ1ZWAgY2FjaGVkIHByb2Nlc3NlcyB3aWxsIGJlIGlnbm9yZWQgYW5kIGEgYmFja2VuZCByZXF1ZXN0IHdpbGwgYWx3YXlzIGJlIG1hZGVcbiAgICAgKiAodW5sZXNzIGFub3RoZXIgaXMgYWxyZWFkeSBwZW5kaW5nKVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgW3RoZSBwcm9jZXNzXXtAbGluayBOZXR9LiBQcm9jZXNzIGlzIGxvYWRlZCBmcm9tIGEgc2VydmVyIG9yIHBpY2tlZCBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmV0KGlkZW50aWZpZXI6IHN0cmluZywgZm9yY2VMb2FkID0gZmFsc2UpOiBPYnNlcnZhYmxlPE5ldD4ge1xuICAgICAgICBpZiAoIWZvcmNlTG9hZCAmJiB0aGlzLl9uZXRzW2lkZW50aWZpZXJdKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYHJldHVybmluZyBuZXQgJyR7aWRlbnRpZmllcn0nIGZyb20gY2FjaGVgKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9uZXRzW2lkZW50aWZpZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcmVxdWVzdENhY2hlLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGByZXR1cm5pbmcgbmV0ICcke2lkZW50aWZpZXJ9JyBmcm9tIHBlbmRpbmcgcmVxdWVzdHNgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2FjaGUuZ2V0KGlkZW50aWZpZXIpLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgcmV0cmlldmluZyBuZXQgJyR7aWRlbnRpZmllcn0nIGZyb20gYmFja2VuZGApO1xuICAgICAgICB0aGlzLl9yZXF1ZXN0Q2FjaGUuc2V0KGlkZW50aWZpZXIsIG5ldyBSZXBsYXlTdWJqZWN0PE5ldD4oMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTmV0KGlkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgICAgICB0YXAobmV0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fcmVxdWVzdENhY2hlLmdldChpZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICBzLm5leHQobmV0KTtcbiAgICAgICAgICAgICAgICAgICAgcy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0Q2FjaGUuZGVsZXRlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaFVwZGF0ZShuZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHByb2Nlc3MgbmV0IHJlZmVyZW5jZXNzIGFjY29yZGluZyB0byBwcm92aWRlZCBpZGVudGlmaWVycy5cbiAgICAgKlxuICAgICAqIGBQZXRyaU5ldFJlZmVyZW5jZXNgIGFyZSBub3QgY2FjaGVkLlxuICAgICAqIEVhY2ggY2FsbCB3aWxsIHJlc3VsdCBpbiBhIG5ldyBiYWNrZW5kIHJlcXVlc3QgdW5sZXNzIGEgcmVxdWVzdCBmb3IgdGhlIHNhbWUgbmV0IGlzIGFscmVhZHkgcGVuZGluZy5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllcnMgQXJyYXkgb2YgaWRlbnRpZmllcnMgb2YgcmVxdWVzdGVkIHByb2Nlc3Nlcy4gU2VlIHtAbGluayBOZXR9XG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBhcnJheSBvZiBsb2FkZWQgcHJvY2Vzc2VzLiBBcnJheSBpcyBlbWl0dGVkIG9ubHkgd2hlbiBldmVyeSBwcm9jZXNzIGZpbmlzaGVkIGxvYWRpbmcuXG4gICAgICogSWYgYW55IG9mIHRoZSBwcm9jZXNzZXMgZmFpbGVkIHRvIGxvYWQgaXQgaXMgc2tpcHBlZCBmcm9tIHRoZSByZXN1bHQuXG4gICAgICovXG4gICAgcHVibGljIGdldE5ldFJlZmVyZW5jZXMoaWRlbnRpZmllcnM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPEFycmF5PFBldHJpTmV0UmVmZXJlbmNlV2l0aFBlcm1pc3Npb25zPj4ge1xuICAgICAgICBpZiAoaWRlbnRpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JrSm9pbihpZGVudGlmaWVycy5tYXAoaSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXRSZWZlcmVuY2UoaSk7XG4gICAgICAgIH0pKS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlZmVyZW5jZXMgPT4gcmVmZXJlbmNlcy5maWx0ZXIociA9PiAhIXIpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwcm9jZXNzIG5ldCByZWZlcmVuY2UgYnkgaWRlbnRpZmllci5cbiAgICAgKlxuICAgICAqIGBQZXRyaU5ldFJlZmVyZW5jZXNgIGFyZSBub3QgY2FjaGVkLlxuICAgICAqIEVhY2ggY2FsbCB3aWxsIHJlc3VsdCBpbiBhIG5ldyBiYWNrZW5kIHJlcXVlc3QgdW5sZXNzIGEgcmVxdWVzdCBmb3IgdGhlIHNhbWUgbmV0IGlzIGFscmVhZHkgcGVuZGluZy5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBJZGVudGlmaWVyIG9mIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzcy4gU2VlIHtAbGluayBOZXR9XG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBbdGhlIHByb2Nlc3Nde0BsaW5rIE5ldH0uIFByb2Nlc3MgaXMgbG9hZGVkIGZyb20gYSBzZXJ2ZXIgb3IgcGlja2VkIGZyb20gdGhlIGNhY2hlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXRSZWZlcmVuY2UoaWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxQZXRyaU5ldFJlZmVyZW5jZVdpdGhQZXJtaXNzaW9ucz4ge1xuICAgICAgICBpZiAodGhpcy5fcmVmZXJlbmNlUmVxdWVzdENhY2hlLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlZmVyZW5jZVJlcXVlc3RDYWNoZS5nZXQoaWRlbnRpZmllcikuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVmZXJlbmNlUmVxdWVzdENhY2hlLnNldChpZGVudGlmaWVyLCBuZXcgUmVwbGF5U3ViamVjdDxQZXRyaU5ldFJlZmVyZW5jZVdpdGhQZXJtaXNzaW9ucz4oMSkpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkTmV0UmVmZXJlbmNlKGlkZW50aWZpZXIpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocmVmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbih7bmV0OiBvZihyZWYpLCByb2xlczogdGhpcy5sb2FkUm9sZXMocmVmLnN0cmluZ0lkKX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZih7bmV0OiByZWYsIHJvbGVzOiB1bmRlZmluZWR9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubmV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5yZXN1bHQubmV0LFxuICAgICAgICAgICAgICAgICAgICByb2xlczogcmVzdWx0LnJvbGVzLnByb2Nlc3NSb2xlcyxcbiAgICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHJlc3VsdC5yb2xlcy5wZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcChyZWZlcmVuY2UgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9yZWZlcmVuY2VSZXF1ZXN0Q2FjaGUuZ2V0KGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIHMubmV4dChyZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgICAgICBzLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlZmVyZW5jZVJlcXVlc3RDYWNoZS5kZWxldGUoaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgY2FjaGVkIHByb2Nlc3MgYnkgaWRlbnRpZmllci4gSWYgdGhlIHByb2Nlc3MgaXMgbm90IGZvdW5kIG5vdGhpbmcgaGFwcGVucy5cbiAgICAgKiBAcGFyYW0gaWRlbnRpZmllciBQcm9jZXNzIGlkZW50aWZpZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlTmV0KGlkZW50aWZpZXI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX25ldHNbaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgdGhpcy5fbmV0c1tpZGVudGlmaWVyXTtcbiAgICAgICAgdGhpcy5wdWJsaXNoVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGNhY2hlZCBwcm9jZXNzIG9iamVjdC4gSWYgdGhlIHByb2Nlc3MgaXMgbm90IGZvdW5kIG5vdGhpbmcgaGFwcGVucy4gUHJvY2VzcyBvYmplY3QgaXMgcmVwbGFjZWQuXG4gICAgICogQHBhcmFtIG5ldCBVcGRhdGVkIHByb2Nlc3Mgb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVOZXQobmV0OiBOZXQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9uZXRzW25ldC5pZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmV0LnRyYW5zaXRpb25zLmxlbmd0aCB8fCAhbmV0LnRyYW5zYWN0aW9ucy5sZW5ndGggfHwgIW5ldC5yb2xlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uczogdGhpcy5sb2FkVHJhbnNpdGlvbnMobmV0LnN0cmluZ0lkKSxcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbnM6IHRoaXMubG9hZFRyYW5zYWN0aW9ucyhuZXQuc3RyaW5nSWQpLFxuICAgICAgICAgICAgICAgIHJvbGVzOiB0aGlzLmxvYWRSb2xlcyhuZXQuc3RyaW5nSWQpXG4gICAgICAgICAgICB9KS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgICAgICAgICBuZXQudHJhbnNpdGlvbnMgPSB2YWx1ZXMudHJhbnNpdGlvbnM7XG4gICAgICAgICAgICAgICAgbmV0LnRyYW5zYWN0aW9ucyA9IHZhbHVlcy50cmFuc2FjdGlvbnM7XG4gICAgICAgICAgICAgICAgbmV0LnJvbGVzID0gdmFsdWVzLnJvbGVzLnByb2Nlc3NSb2xlcztcbiAgICAgICAgICAgICAgICBuZXQucGVybWlzc2lvbnMgPSB2YWx1ZXMucm9sZXMucGVybWlzc2lvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0gPSBuZXQ7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaXNoVXBkYXRlKG5ldCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBwYXJ0IG9mIFBldHJpIG5ldCAnICsgbmV0LnRpdGxlLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdID0gbmV0O1xuICAgICAgICAgICAgdGhpcy5wdWJsaXNoVXBkYXRlKG5ldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgY2hhbmdlIG9mIHRoZSBwcm9jZXNzIGNhY2hlLlxuICAgICAqIE5ldyBzdGF0ZSBvZiBjYWNoZSBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIGNhY2hlZCBjaGFuZ2VkIGJ5IGluc2VydGluZywgdXBkYXRpbmcgb3IgZGVsZXRpbmcgYSBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2Ygd2hvbGUgdXBkYXRlZCBjYWNoZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5ldHMkKCk6IE9ic2VydmFibGU8TmV0Q2FjaGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ldHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0cmVhbSBvZiBjaGFuZ2UgaW4gdGhlIHByb2Nlc3MgY2FjaGUuXG4gICAgICogTmV3IHN0YXRlIG9mIGNhY2hlIGlzIGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgY2FjaGVkIGNoYW5nZWQgYnkgaW5zZXJ0aW5nLCB1cGRhdGluZyBvciBkZWxldGluZyBhIHByb2Nlc3MuXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB1cGRhdGVkIG9yIG5ld2x5IGxvYWRlZCBwcm9jZXNzIG5ldC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG5ldFVwZGF0ZSQoKTogT2JzZXJ2YWJsZTxOZXQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25ldFVwZGF0ZS5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXJlTmV0c0xvYWRlZChpZGVudGlmaWVyczogQXJyYXk8c3RyaW5nPik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaWRlbnRpZmllcnMuZXZlcnkoaWRlbnRpZmllciA9PiB0aGlzLmlzTmV0TG9hZGVkKGlkZW50aWZpZXIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNOZXRMb2FkZWQoaWRlbnRpZmllcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX25ldHNbaWRlbnRpZmllcl07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWROZXQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TmV0PiB7XG4gICAgICAgIGNvbnN0IHJldHVybk5ldCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5ldD4oMSk7XG4gICAgICAgIHRoaXMubG9hZE5ldFJlZmVyZW5jZShpZCkuc3Vic2NyaWJlKG5ldCA9PiB7XG4gICAgICAgICAgICBpZiAobmV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBsb2FkTmV0UmVmZXJlbmNlIGZvciBuZXQgJyR7aWR9JyByZXR1cm5lZCBudWxsYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuTmV0Lm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuTmV0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBsb2FkaW5nIG5ldCAnJHtpZH0nIHRyYW5zaXRpb25zLCB0cmFuc2FjdGlvbnMgYW5kIHJvbGVzYCk7XG4gICAgICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IHRoaXMubG9hZFRyYW5zaXRpb25zKG5ldC5zdHJpbmdJZCksXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zOiB0aGlzLmxvYWRUcmFuc2FjdGlvbnMobmV0LnN0cmluZ0lkKSxcbiAgICAgICAgICAgICAgICByb2xlczogdGhpcy5sb2FkUm9sZXMobmV0LnN0cmluZ0lkKVxuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0gPSBuZXcgTmV0KG5ldCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0udHJhbnNpdGlvbnMgPSB2YWx1ZXMudHJhbnNpdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0udHJhbnNhY3Rpb25zID0gdmFsdWVzLnRyYW5zYWN0aW9ucztcbiAgICAgICAgICAgICAgICB0aGlzLl9uZXRzW25ldC5pZGVudGlmaWVyXS5yb2xlcyA9IHZhbHVlcy5yb2xlcy5wcm9jZXNzUm9sZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0ucGVybWlzc2lvbnMgPSB2YWx1ZXMucm9sZXMucGVybWlzc2lvbnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuTmV0Lm5leHQodGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0pO1xuICAgICAgICAgICAgICAgIHJldHVybk5ldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgcGFydCBvZiBQZXRyaSBuZXQgJyArIG5ldC50aXRsZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybk5ldC5uZXh0KHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm5OZXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldHVybk5ldC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZE5ldFJlZmVyZW5jZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQZXRyaU5ldFJlZmVyZW5jZT4ge1xuICAgICAgICBjb25zdCByZXR1cm5SZWZlcmVuY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxQZXRyaU5ldFJlZmVyZW5jZT4oMSk7XG4gICAgICAgIHRoaXMuX3BldHJpTmV0UmVzb3VyY2UuZ2V0T25lKGlkLCAnXicpLnN1YnNjcmliZShyZWZlcmVuY2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLm5leHQoIXJlZmVyZW5jZS5zdHJpbmdJZCA/IG51bGwgOiByZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgUGV0cmkgbmV0JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm5SZWZlcmVuY2UuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXR1cm5SZWZlcmVuY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRUcmFuc2l0aW9ucyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUcmFuc2l0aW9uPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5nZXRQZXRyaU5ldFRyYW5zaXRpb25zKGlkKS5waXBlKFxuICAgICAgICAgICAgbWFwKHRyYW5zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHRyYW5zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdSZWZlcmVuY2VzIGZvciB0cmFuc2l0aW9ucyBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JlZmVyZW5jZXMgZm9yIHRyYW5zaXRpb25zIG9mIG5ldCAnICsgaWQgKyAnIGZhaWxlZCB0byBsb2FkIScsIGVycik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZFRyYW5zYWN0aW9ucyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUcmFuc2FjdGlvbj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BldHJpTmV0UmVzb3VyY2UuZ2V0UGV0cmlOZXRUcmFuc2FjdGlvbnMoaWQpLnBpcGUoXG4gICAgICAgICAgICBtYXAodHJhbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0cmFucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodHJhbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0cmFucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1JlZmVyZW5jZXMgZm9yIHRyYW5zYWN0aW9ucyBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JlZmVyZW5jZXMgZm9yIHRyYW5zYWN0aW9ucyBvZiBuZXQgJyArIGlkICsgJyBmYWlsZWQgdG8gbG9hZCEnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRSb2xlcyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSb2xlc0FuZFBlcm1pc3Npb25zPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmdldFBldHJpTmV0Um9sZXMoaWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAocm9sZXNBbmRQZXJtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm9sZXNBbmRQZXJtLnByb2Nlc3NSb2xlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1JvbGVzIHJlZmVyZW5jZSBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JvbGVzIHJlZmVyZW5jZSBvZiBuZXQgJyArIGlkICsgJyBmYWlsZWQgdG8gbG9hZCEnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHB1Ymxpc2hVcGRhdGUobmV0PzogTmV0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ldHNTdWJqZWN0Lm5leHQodGhpcy5fbmV0cyk7XG4gICAgICAgIGlmIChuZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX25ldFVwZGF0ZS5uZXh0KG5ldCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlLyIsInNvdXJjZXMiOlsibGliL3Byb2Nlc3MvcHJvY2Vzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFHaEUsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7O0FBUy9EOztHQUVHO0FBQ0g7SUFZSSx3QkFBb0IsaUJBQTBDLEVBQVUsSUFBbUI7UUFBdkUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUFVLFNBQUksR0FBSixJQUFJLENBQWU7UUFGM0UsV0FBTSxHQUFHLFFBQVEsQ0FBQztRQUc5QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDM0QsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUEyRCxDQUFDO0lBQ3JHLENBQUM7SUFFRCxvQ0FBVyxHQUFYO1FBQ0ksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJ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LElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7O2dCQXRUc0MsdUJBQXVCO2dCQUFnQixhQUFhOzs7O2dCQVo5RixVQUFVLFNBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzs7Z0JBbEJPLHVCQUF1QjtnQkFDdkIsYUFBYTs7eUJBSnJCO0NBc1ZDLEFBblVELElBbVVDO1NBaFVZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05ldH0gZnJvbSAnLi9uZXQnO1xuaW1wb3J0IHtQZXRyaU5ldFJlc291cmNlU2VydmljZX0gZnJvbSAnLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC9wZXRyaS1uZXQtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL3RyYW5zaXRpb24nO1xuaW1wb3J0IFRyYW5zYWN0aW9uIGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgUm9sZXNBbmRQZXJtaXNzaW9ucyBmcm9tICcuL3JvbGVzQW5kUGVybWlzc2lvbnMnO1xuaW1wb3J0IHtQZXRyaU5ldFJlZmVyZW5jZX0gZnJvbSAnLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wZXRyaS1uZXQtcmVmZXJlbmNlJztcbmltcG9ydCB7UGV0cmlOZXRSZWZlcmVuY2VXaXRoUGVybWlzc2lvbnN9IGZyb20gJy4vcGV0cmktbmV0LXJlZmVyZW5jZS13aXRoLXBlcm1pc3Npb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBOZXRDYWNoZSB7XG4gICAgW2s6IHN0cmluZ106IE5ldDtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHNlcnZpY2UgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYW5kIGNhY2hpbmcgcHJvY2Vzc2VzIG5lZWRlZCBmb3IgYW55IGZ1bmN0aW9uYWxpdHkgb2YgYW4gYXBwLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFByb2Nlc3NTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfbmV0czogTmV0Q2FjaGU7XG4gICAgcHJvdGVjdGVkIF9uZXRzU3ViamVjdDogU3ViamVjdDxOZXRDYWNoZT47XG4gICAgcHJvdGVjdGVkIF9uZXRVcGRhdGU6IFN1YmplY3Q8TmV0PjtcbiAgICBwcm90ZWN0ZWQgX3JlcXVlc3RDYWNoZTogTWFwPHN0cmluZywgUmVwbGF5U3ViamVjdDxOZXQ+PjtcbiAgICBwcm90ZWN0ZWQgX3JlZmVyZW5jZVJlcXVlc3RDYWNoZTogTWFwPHN0cmluZywgUmVwbGF5U3ViamVjdDxQZXRyaU5ldFJlZmVyZW5jZVdpdGhQZXJtaXNzaW9ucz4+O1xuICAgIHB1YmxpYyByZWFkb25seSBMQVRFU1QgPSAnbGF0ZXN0JztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3BldHJpTmV0UmVzb3VyY2U6IFBldHJpTmV0UmVzb3VyY2VTZXJ2aWNlLCBwcml2YXRlIF9sb2c6IExvZ2dlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5fbmV0cyA9IHt9O1xuICAgICAgICB0aGlzLl9uZXRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PE5ldENhY2hlPigpO1xuICAgICAgICB0aGlzLl9uZXRVcGRhdGUgPSBuZXcgU3ViamVjdDxOZXQ+KCk7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZXBsYXlTdWJqZWN0PE5ldD4+KCk7XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZVJlcXVlc3RDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZXBsYXlTdWJqZWN0PFBldHJpTmV0UmVmZXJlbmNlV2l0aFBlcm1pc3Npb25zPj4oKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbmV0c1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fbmV0VXBkYXRlLmNvbXBsZXRlKCk7XG4gICAgICAgIEFycmF5LmZyb20odGhpcy5fcmVxdWVzdENhY2hlLnZhbHVlcygpKS5mb3JFYWNoKG5ldCA9PiBuZXQuY29tcGxldGUoKSk7XG4gICAgICAgIEFycmF5LmZyb20odGhpcy5fcmVmZXJlbmNlUmVxdWVzdENhY2hlLnZhbHVlcygpKS5mb3JFYWNoKG5ldCA9PiBuZXQuY29tcGxldGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHByb2Nlc3MgbmV0cyBhY2NvcmRpbmcgdG8gcHJvdmlkZWQgaWRlbnRpZmllcnMuXG4gICAgICogSWYgYW55IG9mIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc2VzIGlzIG5vdCBjYWNoZWQgaXQgd2lsbCBiZSBsb2FkZWQgZnJvbSB0aGUgc2VydmVyIGFuZCBzYXZlZCBmb3IgbGF0ZXIuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXJzIEFycmF5IG9mIGlkZW50aWZpZXJzIG9mIHJlcXVlc3RlZCBwcm9jZXNzZXMuIFNlZSB7QGxpbmsgTmV0fVxuICAgICAqIEBwYXJhbSBmb3JjZUxvYWQgd2hlbiBzZXQgdG8gYHRydWVgIGNhY2hlZCBwcm9jZXNzZXMgd2lsbCBiZSBpZ25vcmVkIGFuZCBhIGJhY2tlbmQgcmVxdWVzdCB3aWxsIGFsd2F5cyBiZSBtYWRlXG4gICAgICogKHVubGVzcyBhbm90aGVyIGlzIGFscmVhZHkgcGVuZGluZylcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIGFycmF5IG9mIGxvYWRlZCBwcm9jZXNzZXMuIEFycmF5IGlzIGVtaXR0ZWQgb25seSB3aGVuIGV2ZXJ5IHByb2Nlc3MgZmluaXNoZWQgbG9hZGluZy5cbiAgICAgKiBJZiBhbnkgb2YgdGhlIHByb2Nlc3NlcyBmYWlsZWQgdG8gbG9hZCBpdCBpcyBza2lwcGVkIGZyb20gdGhlIHJlc3VsdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmV0cyhpZGVudGlmaWVyczogQXJyYXk8c3RyaW5nPiwgZm9yY2VMb2FkID0gZmFsc2UpOiBPYnNlcnZhYmxlPEFycmF5PE5ldD4+IHtcbiAgICAgICAgaWYgKGlkZW50aWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oaWRlbnRpZmllcnMubWFwKGkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV0KGksIGZvcmNlTG9hZCk7XG4gICAgICAgIH0pKS5waXBlKFxuICAgICAgICAgICAgbWFwKG5ldHMgPT4gbmV0cy5maWx0ZXIobiA9PiAhIW4pKSxcbiAgICAgICAgICAgIHRhcChuZXRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9uZXRzU3ViamVjdC5uZXh0KHRoaXMuX25ldHMpO1xuICAgICAgICAgICAgICAgIG5ldHMuZm9yRWFjaChuID0+IHRoaXMuX25ldFVwZGF0ZS5uZXh0KG4pKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHByb2Nlc3MgbmV0IGJ5IGlkZW50aWZpZXIuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgSWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdGVkIHByb2Nlc3MuIFNlZSB7QGxpbmsgTmV0fVxuICAgICAqIEBwYXJhbSBmb3JjZUxvYWQgd2hlbiBzZXQgdG8gYHRydWVgIGNhY2hlZCBwcm9jZXNzZXMgd2lsbCBiZSBpZ25vcmVkIGFuZCBhIGJhY2tlbmQgcmVxdWVzdCB3aWxsIGFsd2F5cyBiZSBtYWRlXG4gICAgICogKHVubGVzcyBhbm90aGVyIGlzIGFscmVhZHkgcGVuZGluZylcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIFt0aGUgcHJvY2Vzc117QGxpbmsgTmV0fS4gUHJvY2VzcyBpcyBsb2FkZWQgZnJvbSBhIHNlcnZlciBvciBwaWNrZWQgZnJvbSB0aGUgY2FjaGUuXG4gICAgICovXG4gICAgcHVibGljIGdldE5ldChpZGVudGlmaWVyOiBzdHJpbmcsIGZvcmNlTG9hZCA9IGZhbHNlKTogT2JzZXJ2YWJsZTxOZXQ+IHtcbiAgICAgICAgaWYgKCFmb3JjZUxvYWQgJiYgdGhpcy5fbmV0c1tpZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGByZXR1cm5pbmcgbmV0ICcke2lkZW50aWZpZXJ9JyBmcm9tIGNhY2hlYCk7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fbmV0c1tpZGVudGlmaWVyXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RDYWNoZS5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgcmV0dXJuaW5nIG5ldCAnJHtpZGVudGlmaWVyfScgZnJvbSBwZW5kaW5nIHJlcXVlc3RzYCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdENhY2hlLmdldChpZGVudGlmaWVyKS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sb2cuZGVidWcoYHJldHJpZXZpbmcgbmV0ICcke2lkZW50aWZpZXJ9JyBmcm9tIGJhY2tlbmRgKTtcbiAgICAgICAgdGhpcy5fcmVxdWVzdENhY2hlLnNldChpZGVudGlmaWVyLCBuZXcgUmVwbGF5U3ViamVjdDxOZXQ+KDEpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZE5ldChpZGVudGlmaWVyKS5waXBlKFxuICAgICAgICAgICAgdGFwKG5ldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX3JlcXVlc3RDYWNoZS5nZXQoaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgaWYgKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcy5uZXh0KG5ldCk7XG4gICAgICAgICAgICAgICAgICAgIHMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdENhY2hlLmRlbGV0ZShpZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5ldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1Ymxpc2hVcGRhdGUobmV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwcm9jZXNzIG5ldCByZWZlcmVuY2VzcyBhY2NvcmRpbmcgdG8gcHJvdmlkZWQgaWRlbnRpZmllcnMuXG4gICAgICpcbiAgICAgKiBgUGV0cmlOZXRSZWZlcmVuY2VzYCBhcmUgbm90IGNhY2hlZC5cbiAgICAgKiBFYWNoIGNhbGwgd2lsbCByZXN1bHQgaW4gYSBuZXcgYmFja2VuZCByZXF1ZXN0IHVubGVzcyBhIHJlcXVlc3QgZm9yIHRoZSBzYW1lIG5ldCBpcyBhbHJlYWR5IHBlbmRpbmcuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXJzIEFycmF5IG9mIGlkZW50aWZpZXJzIG9mIHJlcXVlc3RlZCBwcm9jZXNzZXMuIFNlZSB7QGxpbmsgTmV0fVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgYXJyYXkgb2YgbG9hZGVkIHByb2Nlc3Nlcy4gQXJyYXkgaXMgZW1pdHRlZCBvbmx5IHdoZW4gZXZlcnkgcHJvY2VzcyBmaW5pc2hlZCBsb2FkaW5nLlxuICAgICAqIElmIGFueSBvZiB0aGUgcHJvY2Vzc2VzIGZhaWxlZCB0byBsb2FkIGl0IGlzIHNraXBwZWQgZnJvbSB0aGUgcmVzdWx0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROZXRSZWZlcmVuY2VzKGlkZW50aWZpZXJzOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxBcnJheTxQZXRyaU5ldFJlZmVyZW5jZVdpdGhQZXJtaXNzaW9ucz4+IHtcbiAgICAgICAgaWYgKGlkZW50aWZpZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oaWRlbnRpZmllcnMubWFwKGkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmV0UmVmZXJlbmNlKGkpO1xuICAgICAgICB9KSkucGlwZShcbiAgICAgICAgICAgIG1hcChyZWZlcmVuY2VzID0+IHJlZmVyZW5jZXMuZmlsdGVyKHIgPT4gISFyKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcHJvY2VzcyBuZXQgcmVmZXJlbmNlIGJ5IGlkZW50aWZpZXIuXG4gICAgICpcbiAgICAgKiBgUGV0cmlOZXRSZWZlcmVuY2VzYCBhcmUgbm90IGNhY2hlZC5cbiAgICAgKiBFYWNoIGNhbGwgd2lsbCByZXN1bHQgaW4gYSBuZXcgYmFja2VuZCByZXF1ZXN0IHVubGVzcyBhIHJlcXVlc3QgZm9yIHRoZSBzYW1lIG5ldCBpcyBhbHJlYWR5IHBlbmRpbmcuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgSWRlbnRpZmllciBvZiB0aGUgcmVxdWVzdGVkIHByb2Nlc3MuIFNlZSB7QGxpbmsgTmV0fVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgW3RoZSBwcm9jZXNzXXtAbGluayBOZXR9LiBQcm9jZXNzIGlzIGxvYWRlZCBmcm9tIGEgc2VydmVyIG9yIHBpY2tlZCBmcm9tIHRoZSBjYWNoZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TmV0UmVmZXJlbmNlKGlkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8UGV0cmlOZXRSZWZlcmVuY2VXaXRoUGVybWlzc2lvbnM+IHtcbiAgICAgICAgaWYgKHRoaXMuX3JlZmVyZW5jZVJlcXVlc3RDYWNoZS5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWZlcmVuY2VSZXF1ZXN0Q2FjaGUuZ2V0KGlkZW50aWZpZXIpLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlZmVyZW5jZVJlcXVlc3RDYWNoZS5zZXQoaWRlbnRpZmllciwgbmV3IFJlcGxheVN1YmplY3Q8UGV0cmlOZXRSZWZlcmVuY2VXaXRoUGVybWlzc2lvbnM+KDEpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZE5ldFJlZmVyZW5jZShpZGVudGlmaWVyKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlZiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4oe25ldDogb2YocmVmKSwgcm9sZXM6IHRoaXMubG9hZFJvbGVzKHJlZi5zdHJpbmdJZCl9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2Yoe25ldDogcmVmLCByb2xlczogdW5kZWZpbmVkfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lm5ldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucmVzdWx0Lm5ldCxcbiAgICAgICAgICAgICAgICAgICAgcm9sZXM6IHJlc3VsdC5yb2xlcy5wcm9jZXNzUm9sZXMsXG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zOiByZXN1bHQucm9sZXMucGVybWlzc2lvbnNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAocmVmZXJlbmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gdGhpcy5fcmVmZXJlbmNlUmVxdWVzdENhY2hlLmdldChpZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgICAgICAgICBzLm5leHQocmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWZlcmVuY2VSZXF1ZXN0Q2FjaGUuZGVsZXRlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGNhY2hlZCBwcm9jZXNzIGJ5IGlkZW50aWZpZXIuIElmIHRoZSBwcm9jZXNzIGlzIG5vdCBmb3VuZCBub3RoaW5nIGhhcHBlbnMuXG4gICAgICogQHBhcmFtIGlkZW50aWZpZXIgUHJvY2VzcyBpZGVudGlmaWVyXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZU5ldChpZGVudGlmaWVyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9uZXRzW2lkZW50aWZpZXJdKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuX25ldHNbaWRlbnRpZmllcl07XG4gICAgICAgIHRoaXMucHVibGlzaFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBjYWNoZWQgcHJvY2VzcyBvYmplY3QuIElmIHRoZSBwcm9jZXNzIGlzIG5vdCBmb3VuZCBub3RoaW5nIGhhcHBlbnMuIFByb2Nlc3Mgb2JqZWN0IGlzIHJlcGxhY2VkLlxuICAgICAqIEBwYXJhbSBuZXQgVXBkYXRlZCBwcm9jZXNzIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlTmV0KG5ldDogTmV0KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW5ldC50cmFuc2l0aW9ucy5sZW5ndGggfHwgIW5ldC50cmFuc2FjdGlvbnMubGVuZ3RoIHx8ICFuZXQucm9sZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbnM6IHRoaXMubG9hZFRyYW5zaXRpb25zKG5ldC5zdHJpbmdJZCksXG4gICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25zOiB0aGlzLmxvYWRUcmFuc2FjdGlvbnMobmV0LnN0cmluZ0lkKSxcbiAgICAgICAgICAgICAgICByb2xlczogdGhpcy5sb2FkUm9sZXMobmV0LnN0cmluZ0lkKVxuICAgICAgICAgICAgfSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgICAgICAgICAgbmV0LnRyYW5zaXRpb25zID0gdmFsdWVzLnRyYW5zaXRpb25zO1xuICAgICAgICAgICAgICAgIG5ldC50cmFuc2FjdGlvbnMgPSB2YWx1ZXMudHJhbnNhY3Rpb25zO1xuICAgICAgICAgICAgICAgIG5ldC5yb2xlcyA9IHZhbHVlcy5yb2xlcy5wcm9jZXNzUm9sZXM7XG4gICAgICAgICAgICAgICAgbmV0LnBlcm1pc3Npb25zID0gdmFsdWVzLnJvbGVzLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdID0gbmV0O1xuICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaFVwZGF0ZShuZXQpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgcGFydCBvZiBQZXRyaSBuZXQgJyArIG5ldC50aXRsZSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIC8vIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXRzW25ldC5pZGVudGlmaWVyXSA9IG5ldDtcbiAgICAgICAgICAgIHRoaXMucHVibGlzaFVwZGF0ZShuZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3RyZWFtIG9mIGNoYW5nZSBvZiB0aGUgcHJvY2VzcyBjYWNoZS5cbiAgICAgKiBOZXcgc3RhdGUgb2YgY2FjaGUgaXMgZW1pdHRlZCBldmVyeSB0aW1lIHRoZSBjYWNoZWQgY2hhbmdlZCBieSBpbnNlcnRpbmcsIHVwZGF0aW5nIG9yIGRlbGV0aW5nIGEgcHJvY2Vzcy5cbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHdob2xlIHVwZGF0ZWQgY2FjaGUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBuZXRzJCgpOiBPYnNlcnZhYmxlPE5ldENhY2hlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTdHJlYW0gb2YgY2hhbmdlIGluIHRoZSBwcm9jZXNzIGNhY2hlLlxuICAgICAqIE5ldyBzdGF0ZSBvZiBjYWNoZSBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIGNhY2hlZCBjaGFuZ2VkIGJ5IGluc2VydGluZywgdXBkYXRpbmcgb3IgZGVsZXRpbmcgYSBwcm9jZXNzLlxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdXBkYXRlZCBvciBuZXdseSBsb2FkZWQgcHJvY2VzcyBuZXQuXG4gICAgICovXG4gICAgcHVibGljIGdldCBuZXRVcGRhdGUkKCk6IE9ic2VydmFibGU8TmV0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uZXRVcGRhdGUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFyZU5ldHNMb2FkZWQoaWRlbnRpZmllcnM6IEFycmF5PHN0cmluZz4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJzLmV2ZXJ5KGlkZW50aWZpZXIgPT4gdGhpcy5pc05ldExvYWRlZChpZGVudGlmaWVyKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzTmV0TG9hZGVkKGlkZW50aWZpZXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9uZXRzW2lkZW50aWZpZXJdO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBsb2FkTmV0KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5ldD4ge1xuICAgICAgICBjb25zdCByZXR1cm5OZXQgPSBuZXcgUmVwbGF5U3ViamVjdDxOZXQ+KDEpO1xuICAgICAgICB0aGlzLmxvYWROZXRSZWZlcmVuY2UoaWQpLnN1YnNjcmliZShuZXQgPT4ge1xuICAgICAgICAgICAgaWYgKG5ldCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgbG9hZE5ldFJlZmVyZW5jZSBmb3IgbmV0ICcke2lkfScgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgICAgICAgICAgIHJldHVybk5ldC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHJldHVybk5ldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgbG9hZGluZyBuZXQgJyR7aWR9JyB0cmFuc2l0aW9ucywgdHJhbnNhY3Rpb25zIGFuZCByb2xlc2ApO1xuICAgICAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zOiB0aGlzLmxvYWRUcmFuc2l0aW9ucyhuZXQuc3RyaW5nSWQpLFxuICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uczogdGhpcy5sb2FkVHJhbnNhY3Rpb25zKG5ldC5zdHJpbmdJZCksXG4gICAgICAgICAgICAgICAgcm9sZXM6IHRoaXMubG9hZFJvbGVzKG5ldC5zdHJpbmdJZClcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdID0gbmV3IE5ldChuZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdLnRyYW5zaXRpb25zID0gdmFsdWVzLnRyYW5zaXRpb25zO1xuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdLnRyYW5zYWN0aW9ucyA9IHZhbHVlcy50cmFuc2FjdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmV0c1tuZXQuaWRlbnRpZmllcl0ucm9sZXMgPSB2YWx1ZXMucm9sZXMucHJvY2Vzc1JvbGVzO1xuICAgICAgICAgICAgICAgIHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdLnBlcm1pc3Npb25zID0gdmFsdWVzLnJvbGVzLnBlcm1pc3Npb25zO1xuICAgICAgICAgICAgICAgIHJldHVybk5ldC5uZXh0KHRoaXMuX25ldHNbbmV0LmlkZW50aWZpZXJdKTtcbiAgICAgICAgICAgICAgICByZXR1cm5OZXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHBhcnQgb2YgUGV0cmkgbmV0ICcgKyBuZXQudGl0bGUsIGVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm5OZXQubmV4dCh0aGlzLl9uZXRzW25ldC5pZGVudGlmaWVyXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuTmV0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXR1cm5OZXQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWROZXRSZWZlcmVuY2UoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UGV0cmlOZXRSZWZlcmVuY2U+IHtcbiAgICAgICAgY29uc3QgcmV0dXJuUmVmZXJlbmNlID0gbmV3IFJlcGxheVN1YmplY3Q8UGV0cmlOZXRSZWZlcmVuY2U+KDEpO1xuICAgICAgICB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmdldE9uZShpZCwgdGhpcy5MQVRFU1QpLnN1YnNjcmliZShyZWZlcmVuY2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLm5leHQoIXJlZmVyZW5jZS5zdHJpbmdJZCA/IG51bGwgOiByZWZlcmVuY2UpO1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmFpbGVkIHRvIGxvYWQgUGV0cmkgbmV0JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuUmVmZXJlbmNlLm5leHQobnVsbCk7XG4gICAgICAgICAgICByZXR1cm5SZWZlcmVuY2UuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXR1cm5SZWZlcmVuY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRUcmFuc2l0aW9ucyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUcmFuc2l0aW9uPj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGV0cmlOZXRSZXNvdXJjZS5nZXRQZXRyaU5ldFRyYW5zaXRpb25zKGlkKS5waXBlKFxuICAgICAgICAgICAgbWFwKHRyYW5zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKHRyYW5zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5pbmZvKCdSZWZlcmVuY2VzIGZvciB0cmFuc2l0aW9ucyBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JlZmVyZW5jZXMgZm9yIHRyYW5zaXRpb25zIG9mIG5ldCAnICsgaWQgKyAnIGZhaWxlZCB0byBsb2FkIScsIGVycik7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbG9hZFRyYW5zYWN0aW9ucyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxUcmFuc2FjdGlvbj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BldHJpTmV0UmVzb3VyY2UuZ2V0UGV0cmlOZXRUcmFuc2FjdGlvbnMoaWQpLnBpcGUoXG4gICAgICAgICAgICBtYXAodHJhbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0cmFucyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFucztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0YXAodHJhbnMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0cmFucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1JlZmVyZW5jZXMgZm9yIHRyYW5zYWN0aW9ucyBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JlZmVyZW5jZXMgZm9yIHRyYW5zYWN0aW9ucyBvZiBuZXQgJyArIGlkICsgJyBmYWlsZWQgdG8gbG9hZCEnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGxvYWRSb2xlcyhpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSb2xlc0FuZFBlcm1pc3Npb25zPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wZXRyaU5ldFJlc291cmNlLmdldFBldHJpTmV0Um9sZXMoaWQpLnBpcGUoXG4gICAgICAgICAgICB0YXAocm9sZXNBbmRQZXJtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm9sZXNBbmRQZXJtLnByb2Nlc3NSb2xlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmluZm8oJ1JvbGVzIHJlZmVyZW5jZSBvZiBuZXQgJyArIGlkICsgJyB3ZXJlIG5vdCBmb3VuZCEnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1JvbGVzIHJlZmVyZW5jZSBvZiBuZXQgJyArIGlkICsgJyBmYWlsZWQgdG8gbG9hZCEnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHB1Ymxpc2hVcGRhdGUobmV0PzogTmV0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25ldHNTdWJqZWN0Lm5leHQodGhpcy5fbmV0cyk7XG4gICAgICAgIGlmIChuZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX25ldFVwZGF0ZS5uZXh0KG5ldCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -358,18 +358,17 @@ class ConfigurationService {
358
358
  * @return requested configuration if it exists. `undefined` otherwise.
359
359
  */
360
360
  getViewByUrl(url) {
361
- const config = this.createConfigurationCopy();
362
- const views = config.views;
361
+ const views = this.getViewsCopy();
363
362
  if (!views) {
364
363
  return undefined;
365
364
  }
366
365
  let map = new Map();
367
366
  map = this.getChildren(views, map, '');
368
367
  if (map.get(url) === undefined) {
369
- map.forEach((value, key) => {
368
+ for (const [key, value] of map) {
370
369
  if (key.includes('/**') && url.includes(key.split('/**')[0]))
371
370
  return value;
372
- });
371
+ }
373
372
  }
374
373
  return map.get(url);
375
374
  }
@@ -505,6 +504,9 @@ class ConfigurationService {
505
504
  createConfigurationCopy() {
506
505
  return this.deepCopy(this.configuration);
507
506
  }
507
+ getViewsCopy() {
508
+ return this.getConfigurationSubtree(['views']);
509
+ }
508
510
  deepCopy(obj) {
509
511
  return JSON.parse(JSON.stringify(obj));
510
512
  }
@@ -6086,8 +6088,11 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6086
6088
  this.state.uploading = true;
6087
6089
  const fileFormData = new FormData();
6088
6090
  const fileToUpload = this.fileUploadEl.nativeElement.files.item(0);
6091
+ const data = {};
6092
+ data[this.resolveParentTaskId()] = this.dataField.stringId;
6089
6093
  fileFormData.append('file', fileToUpload);
6090
- this._taskResourceService.uploadFile(this.resolveParentTaskId(), this.dataField.stringId, fileFormData, false)
6094
+ fileFormData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' }));
6095
+ this._taskResourceService.uploadFile(this.taskId, this.dataField.stringId, fileFormData, false)
6091
6096
  .subscribe((response) => {
6092
6097
  if (response.type && response.type === ProgressType.UPLOAD) {
6093
6098
  this.state.progress = response.progress;
@@ -6186,7 +6191,7 @@ class AbstractFileFieldComponent extends AbstractDataFieldComponent {
6186
6191
  this._log.error('File cannot be deleted. No task is set to the field.');
6187
6192
  return;
6188
6193
  }
6189
- this._taskResourceService.deleteFile(this.resolveParentTaskId(), this.dataField.stringId).pipe(take(1)).subscribe(response => {
6194
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId).pipe(take(1)).subscribe(response => {
6190
6195
  if (response.success) {
6191
6196
  const filename = this.dataField.value.name;
6192
6197
  this.dataField.value = {};
@@ -6460,7 +6465,10 @@ class AbstractFileListFieldComponent extends AbstractDataFieldComponent {
6460
6465
  filesToUpload.forEach(fileToUpload => {
6461
6466
  fileFormData.append('files', fileToUpload);
6462
6467
  });
6463
- this._taskResourceService.uploadFile(this.resolveParentTaskId(), this.dataField.stringId, fileFormData, true)
6468
+ const data = {};
6469
+ data[this.resolveParentTaskId()] = this.dataField.stringId;
6470
+ fileFormData.append('data', new Blob([JSON.stringify(data)], { type: 'application/json' }));
6471
+ this._taskResourceService.uploadFile(this.taskId, this.dataField.stringId, fileFormData, true)
6464
6472
  .subscribe((response) => {
6465
6473
  if (response.type && response.type === ProgressType.UPLOAD) {
6466
6474
  this.state.progress = response.progress;
@@ -6546,7 +6554,7 @@ class AbstractFileListFieldComponent extends AbstractDataFieldComponent {
6546
6554
  this._log.error('File cannot be deleted. No task is set to the field.');
6547
6555
  return;
6548
6556
  }
6549
- this._taskResourceService.deleteFile(this.resolveParentTaskId(), this.dataField.stringId, fileName).pipe(take(1)).subscribe(response => {
6557
+ this._taskResourceService.deleteFile(this.taskId, this.dataField.stringId, fileName).pipe(take(1)).subscribe(response => {
6550
6558
  if (response.success) {
6551
6559
  this.uploadedFiles = this.uploadedFiles.filter(uploadedFile => uploadedFile !== fileName);
6552
6560
  if (this.dataField.value.namesPaths) {
@@ -11400,6 +11408,7 @@ class ProcessService {
11400
11408
  constructor(_petriNetResource, _log) {
11401
11409
  this._petriNetResource = _petriNetResource;
11402
11410
  this._log = _log;
11411
+ this.LATEST = 'latest';
11403
11412
  this._nets = {};
11404
11413
  this._netsSubject = new Subject();
11405
11414
  this._netUpdate = new Subject();
@@ -11612,7 +11621,7 @@ class ProcessService {
11612
11621
  }
11613
11622
  loadNetReference(id) {
11614
11623
  const returnReference = new ReplaySubject(1);
11615
- this._petriNetResource.getOne(id, '^').subscribe(reference => {
11624
+ this._petriNetResource.getOne(id, this.LATEST).subscribe(reference => {
11616
11625
  returnReference.next(!reference.stringId ? null : reference);
11617
11626
  returnReference.complete();
11618
11627
  return;
@@ -12685,7 +12694,7 @@ class AbstractAuthenticationOverlay {
12685
12694
  this._spinnerOverlay.spin$.next(true);
12686
12695
  this.subSession = this._session.verifying.subscribe(active => {
12687
12696
  this.userService.user$.subscribe(user => {
12688
- if (!!user.id && user.id.length > 0) {
12697
+ if (!!user && !!user.id && user.id.length > 0) {
12689
12698
  this.redirect(!active);
12690
12699
  }
12691
12700
  });
@@ -26807,7 +26816,7 @@ class NextGroupService {
26807
26816
  this._ownerGroups$ = new BehaviorSubject([]);
26808
26817
  this._memberGroups$ = new BehaviorSubject([]);
26809
26818
  this._userSub = this._userService.user$.pipe(switchMap(user => {
26810
- if (user.id === '') {
26819
+ if (!user || user.id === '') {
26811
26820
  return of([]);
26812
26821
  }
26813
26822
  const params = new HttpParams();