ng-virtual-list 18.12.2 → 18.12.4

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/README.md +2 -2
  2. package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +9 -5
  3. package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
  4. package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +14 -8
  5. package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +3 -3
  6. package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +20 -14
  7. package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +6 -2
  8. package/esm2022/lib/const/index.mjs +6 -3
  9. package/esm2022/lib/core/track-box.mjs +31 -9
  10. package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +35 -16
  11. package/esm2022/lib/models/display-object-config.model.mjs +1 -1
  12. package/esm2022/lib/ng-virtual-list.component.mjs +43 -11
  13. package/esm2022/lib/ng-virtual-list.service.mjs +31 -2
  14. package/esm2022/lib/utils/animator/animator.mjs +39 -14
  15. package/fesm2022/ng-virtual-list.mjs +222 -73
  16. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  17. package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +1 -1
  18. package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +3 -1
  19. package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +5 -2
  20. package/lib/components/ng-scroller/ng-scroller.component.d.ts +1 -1
  21. package/lib/const/index.d.ts +3 -1
  22. package/lib/directives/virtual-click/virtual-click.directive.d.ts +11 -6
  23. package/lib/models/display-object-config.model.d.ts +4 -0
  24. package/lib/ng-virtual-list.component.d.ts +2 -1
  25. package/lib/ng-virtual-list.service.d.ts +13 -0
  26. package/lib/utils/animator/animator.d.ts +11 -2
  27. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
3
- import { Subject, takeUntil, tap } from 'rxjs';
3
+ import { combineLatest, distinctUntilChanged, Subject, takeUntil, tap } from 'rxjs';
4
4
  import { TrackBoxEvents } from './core/events';
5
5
  import { FocusAlignments, TextDirections } from './enums';
6
6
  import { SelectingModesTypes } from './enums/selecting-modes-types';
@@ -99,6 +99,31 @@ export class NgVirtualListService {
99
99
  this._langTextDir = v;
100
100
  this._$langTextDir.next(v);
101
101
  }
102
+ _$grabbing = new BehaviorSubject(false);
103
+ $grabbing = this._$grabbing.asObservable();
104
+ get grabbing() { return this._$grabbing.getValue(); }
105
+ _grabbing = false;
106
+ set grabbing(v) {
107
+ if (this._grabbing === v) {
108
+ return;
109
+ }
110
+ this._grabbing = v;
111
+ this._$grabbing.next(v);
112
+ }
113
+ _$clickPressed = new BehaviorSubject(false);
114
+ $clickPressed = this._$clickPressed.asObservable();
115
+ get clickPressed() { return this._$clickPressed.getValue(); }
116
+ _clickPressed = false;
117
+ set clickPressed(v) {
118
+ if (this._clickPressed === v) {
119
+ return;
120
+ }
121
+ this._clickPressed = v;
122
+ this._$clickPressed.next(v);
123
+ }
124
+ _$isGrabbing = new BehaviorSubject(false);
125
+ $isGrabbing = this._$isGrabbing.asObservable();
126
+ get isGrabbing() { return this._$isGrabbing.getValue(); }
102
127
  get scrollBarSize() { return this._$scrollBarSize.getValue(); }
103
128
  _scrollBarSize = 0;
104
129
  set scrollBarSize(v) {
@@ -142,6 +167,10 @@ export class NgVirtualListService {
142
167
  }
143
168
  get collapsedIds() { return this._$collapsedIds.getValue(); }
144
169
  constructor() {
170
+ const $grabbing = this.$grabbing.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged()), $clickPressed = this.$clickPressed.pipe(takeUntil(this._$unsubscribe), distinctUntilChanged());
171
+ combineLatest([$grabbing, $clickPressed]).pipe(takeUntil(this._$unsubscribe), tap(([grabbing, clickPressed]) => {
172
+ this._$isGrabbing.next(grabbing && !clickPressed);
173
+ })).subscribe();
145
174
  this._$selectingMode.pipe(takeUntil(this._$unsubscribe), tap(v => {
146
175
  switch (v) {
147
176
  case SelectingModesTypes.SELECT: {
@@ -428,4 +457,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
428
457
  providedIn: 'root'
429
458
  }]
430
459
  }], ctorParameters: () => [] });
431
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUM1RyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSxjQUFjLEVBQy9HLHNCQUFzQixHQUN2QixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHdEU7Ozs7Ozs7R0FPRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsR0FBRyxHQUFXLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsS0FBSyxPQUFPLElB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LENBQUM7SUFDbkMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7d0dBNWRVLG9CQUFvQjs0R0FBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvQmVoYXZpb3JTdWJqZWN0JztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJhY2tCb3ggfSBmcm9tICcuL2NvcmUvdHJhY2stYm94JztcclxuaW1wb3J0IHsgVHJhY2tCb3hFdmVudHMgfSBmcm9tICcuL2NvcmUvZXZlbnRzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSUFuaW1hdGlvblBhcmFtcywgSVJlY3QsIElTY3JvbGxPcHRpb25zLCBJU2l6ZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cywgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RpbmdNb2Rlc1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3RpbmctbW9kZXMtdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0FVVE8sIEJFSEFWSU9SX0lOU1RBTlQsIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSyxcclxuICBERUZBVUxUX0lURU1fU0laRSwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfU05BUF9UT19JVEVNLCBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORywgSVRFTV9DT05UQUlORVIsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGdldExpc3RFbGVtZW50cywgTkdWTF9JTkRFWCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vdXRpbHMnO1xyXG5pbXBvcnQgeyBGb2N1c0l0ZW1QYXJhbXMgfSBmcm9tICcuL3R5cGVzL2ZvY3VzLWl0ZW0tcGFyYW1zJztcclxuaW1wb3J0IHsgdmFsaWRhdGVGb2N1c0FsaWdubWVudCwgdmFsaWRhdGVJZCB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgZ2V0U2VsZWN0b3JCeUl0ZW1JZCB9IGZyb20gJy4vdXRpbHMvZ2V0LXNlbGVjdG9yLWJ5LWl0ZW0taWQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcyc7XHJcblxyXG4vKipcclxuICogTmdWaXJ0dWFsTGlzdFNlcnZpY2VcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgXyR1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIHByaXZhdGUgX25leHRDb21wb25lbnRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfJHZpcnR1YWxDbGljayA9IG5ldyBTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGw+KCk7XHJcbiAgJHZpcnR1YWxDbGljayA9IHRoaXMuXyR2aXJ0dWFsQ2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPihudWxsKTtcclxuICAkc2VsZWN0ZWRJZHMgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG4gICRjb2xsYXBzZWRJZHMgPSB0aGlzLl8kY29sbGFwc2VkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZXNUeXBlcz4oMCk7XHJcbiAgJHNlbGVjdGluZ01vZGUgPSB0aGlzLl8kc2VsZWN0aW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZXNUeXBlcykge1xyXG4gICAgdGhpcy5fJHNlbGVjdGluZ01vZGUubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJGZvY3VzZWRJZCA9IHRoaXMuXyRmb2N1c2VkSWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgc2V0IGZvY3VzZWRJZCh2OiBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGZvY3VzZWRJZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZElkKCkgeyByZXR1cm4gdGhpcy5fJGZvY3VzZWRJZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c0l0ZW0gPSBuZXcgU3ViamVjdDxGb2N1c0l0ZW1QYXJhbXM+KCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzSXRlbSA9IHRoaXMuXyRmb2N1c0l0ZW0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxUb1BhcmFtcyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG8gPSB0aGlzLl8kc2Nyb2xsVG8uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUb1N0YXJ0ID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kc2Nyb2xsVG9TdGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvRW5kID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvRW5kID0gdGhpcy5fJHNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgcmVhZG9ubHkgJGNhY2hlVmVyc2lvbiA9IHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHRyYWNrQnk6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gIGxhc3RGb2N1c2VkSXRlbUlkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHNjcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgekluZGV4V2hlblNlbGVjdGluZzogc3RyaW5nIHwgbnVsbCA9IERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HO1xyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIGNvbGxhcHNlQnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcblxyXG4gIGRlZmF1bHRJdGVtVmFsdWU6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc25hcFRvSXRlbTogYm9vbGVhbiA9IERFRkFVTFRfU05BUF9UT19JVEVNO1xyXG5cclxuICBpc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzVmVydGljYWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBkeW5hbWljOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXRlbVNpemU6IG51bWJlciA9IERFRkFVTFRfSVRFTV9TSVpFO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYW5pbWF0aW9uUGFyYW1zOiBJQW5pbWF0aW9uUGFyYW1zID0gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG5cclxuICBpc05vbmVDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc011bHRpcGxlQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNBY2NvcmRpb25Db2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gIGxpc3RFbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG5cclxuICBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwID0ge307XHJcblxyXG4gIHByaXZhdGUgXyRkaXNwbGF5SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuICByZWFkb25seSAkZGlzcGxheUl0ZW1zID0gdGhpcy5fJGRpc3BsYXlJdGVtcy5hc09ic2VydmFibGUoKTtcclxuICBnZXQgZGlzcGxheUl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGRpc3BsYXlJdGVtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb246IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICBzZXQgY29sbGVjdGlvbih2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY29sbGVjdGlvbiA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGRpc3BsYXlJdGVtcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY29sbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuICBnZXQgbGFuZ1RleHREaXIoKSB7IHJldHVybiB0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpcjogVGV4dERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb25zLkxUUjtcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2xhbmdUZXh0RGlyID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9sYW5nVGV4dERpciA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBnZXQgc2Nyb2xsQmFyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCYXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmFyU2l6ZTogbnVtYmVyID0gMDtcclxuICBzZXQgc2Nyb2xsQmFyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zY3JvbGxCYXJTaXplID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zY3JvbGxCYXJTaXplID0gdjtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5uZXh0KHYpO1xyXG4gIH1cclxuICBwcml2YXRlIF8kc2Nyb2xsQmFyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLl9zY3JvbGxCYXJTaXplKTtcclxuICByZWFkb25seSAkc2Nyb2xsQmFyU2l6ZSA9IHRoaXMuXyRzY3JvbGxCYXJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5ICRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24gPSB0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2xpY2tEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0NMSUNLX0RJU1RBTkNFKTtcclxuICByZWFkb25seSAkY2xpY2tEaXN0YW5jZSA9IHRoaXMuXyRjbGlja0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBjbGlja0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja0Rpc3RhbmNlOiBudW1iZXIgPSBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gIHNldCBjbGlja0Rpc3RhbmNlKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX2NsaWNrRGlzdGFuY2UgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NsaWNrRGlzdGFuY2UgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblRpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5fJHRpY2submV4dCgpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH07XHJcblxyXG4gIHNldCBzZWxlY3RlZElkcyhpZHM6IEFycmF5PElkPiB8IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkSWRzKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgc2V0IGNvbGxhcHNlZElkcyhpZHM6IEFycmF5PElkPikge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sbGFwc2VkSWRzKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5fJHNlbGVjdGluZ01vZGUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICBzd2l0Y2ggKHYpIHtcclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgIT09ICdudW1iZXInICYmIHR5cGVvZiBjdXJyICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHZpcnR1YWxDbGljayhkYXRhOiBJUmVuZGVyVmlydHVhbExpc3RJdGVtIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fJHZpcnR1YWxDbGljay5uZXh0KGRhdGEpO1xyXG4gICAgaWYgKHRoaXMuY29sbGFwc2VCeUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGlkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgIHRoaXMuY29sbGFwc2UoaWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0QnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdChpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoaW1tZWRpYXRlbHk6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5fdHJhY2tCb3g/LmNoYW5nZXMoaW1tZWRpYXRlbHksIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbUNvbmZpZyhpZDogSWQpIHtcclxuICAgIGNvbnN0IGRpc3BsYXlJdGVtcyA9IHRoaXMuZGlzcGxheUl0ZW1zO1xyXG4gICAgaWYgKCEhZGlzcGxheUl0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgIHJldHVybiBkaXNwbGF5SXRlbXMuZmluZChkYXRhID0+IHtcclxuICAgICAgICBjb25zdCBfaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgICByZXR1cm4gX2lkID09PSBpZDtcclxuICAgICAgfSk/LmNvbmZpZyA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3RzIGEgbGlzdCBpdGVtXHJcbiAgICogQHBhcmFtIGlkIFxyXG4gICAqIEBwYXJhbSBzZWxlY3RlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIHNlbGVjdGlvbi9kZXNlbGVjdGlvbiBpcyBwZXJmb3JtZWQuXHJcbiAgICovXHJcbiAgc2VsZWN0KGlkOiBJZCwgc2VsZWN0ZWQ/OiBib29sZWFuKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0SXRlbUNvbmZpZyhpZCk7XHJcbiAgICBpZiAoKCEhY29uZmlnICYmIGNvbmZpZy5zZWxlY3RhYmxlKSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuXyRzZWxlY3RpbmdNb2RlLmdldFZhbHVlKCkpIHtcclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgYXMgKElkIHwgdW5kZWZpbmVkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIgIT09IGlkID8gaWQgOiBudWxsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KHNlbGVjdGVkID8gaWQgOiBudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICBjb25zdCBjdXJyID0gWy4uLih0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSxcclxuICAgICAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTk9ORTpcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBDb2xsYXBzZSBsaXN0IGl0ZW1zXHJcbiAgICAqIEBwYXJhbSBkYXRhIFxyXG4gICAgKiBAcGFyYW0gY29sbGFwc2VkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgY29sbGFwc2UvZXhwYW5kIGlzIHBlcmZvcm1lZC5cclxuICAgICovXHJcbiAgY29sbGFwc2UoaWQ6IElkLCBjb2xsYXBzZWQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5pc05vbmVDb2xsYXBzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuY29sbGFwc2FibGUpKSB7XHJcbiAgICAgIGNvbnN0IGFsbEdyb3VwczogQXJyYXk8SWQ+ID0gW107XHJcbiAgICAgIGlmICh0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMsIGl0ZW1Db25maWdNYXAgPSB0aGlzLml0ZW1Db25maWdNYXAsIHRyYWNrQnkgPSB0aGlzLnRyYWNrQnk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBpdGVtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXSwgaWQgPSBpdGVtW3RyYWNrQnldLCBjb2xsYXBzYWJsZSA9IGl0ZW1Db25maWdNYXA/LltpZF0/LmNvbGxhcHNhYmxlID09PSB0cnVlO1xyXG4gICAgICAgICAgaWYgKCFjb2xsYXBzYWJsZSkge1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFsbEdyb3Vwcy5wdXNoKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UgPyBhbGxHcm91cHMgOiBbLi4uKHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSB8fCBbXSkgYXMgQXJyYXk8SWQ+XSxcclxuICAgICAgICBpbmRleCA9IGN1cnIuaW5kZXhPZihpZCk7XHJcbiAgICAgIGlmICghY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2xsYXBzZWQpIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQWNjb3JkaW9uQ29sbGFwc2UpIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgICAgICBpZCwgY2I6IG51bGwsIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZGVsYXk6IDEwMCwgZm9jdXNlZDogdHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRGb2N1c2VkRWxlbWVudEJ5SWQoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGdldFNlbGVjdG9yQnlJdGVtSWQoaWQpKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIGNvbnN0IGZvY3VzZWRFbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KGAuJHtJVEVNX0NPTlRBSU5FUn1gKTtcclxuICAgICAgaWYgKCEhZm9jdXNlZEVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvY3VzZWRFbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgbnVsbCB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0SXRlbUJvdW5kcyhpZCkgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvY3VzIGFuIGxpc3QgaXRlbSBieSBhIGdpdmVuIGlkLlxyXG4gICAqL1xyXG4gIGZvY3VzQnlJZChpZDogSWQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5OT05FLCBzY3JvbGxCZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBcImF1dG9cIikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50KGFsaWduKTtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5nZXRGb2N1c2VkRWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgaWYgKCEhZWwpIHtcclxuICAgICAgdGhpcy5mb2N1cyhlbCwgYWxpZ24sIHNjcm9sbEJlaGF2aW9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuQ0VOVEVSLCBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IgPSBCRUhBVklPUl9BVVRPKTogYm9vbGVhbiB7XHJcbiAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcclxuICAgIGlmICghIWVsZW1lbnQucGFyZW50RWxlbWVudCkge1xyXG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHBhcnNlRmxvYXQoZWxlbWVudC5wYXJlbnRFbGVtZW50Py5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJykgPz8gJzAnKTtcclxuICAgICAgdGhpcy5fJGZvY3VzSXRlbS5uZXh0KHsgZWxlbWVudCwgcG9zaXRpb24sIGFsaWduLCBiZWhhdmlvciB9KTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBmb2N1c0xpc3QoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5saXN0RWxlbWVudDtcclxuICAgIGlmICghIWVsZW1lbnQpIHtcclxuICAgICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1c0ZpcnN0RWxlbWVudCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5saXN0RWxlbWVudD8ucXVlcnlTZWxlY3RvckFsbDxIVE1MRGl2RWxlbWVudD4oZ2V0TGlzdEVsZW1lbnRzKCkpLFxyXG4gICAgICBlbExpc3QgPSAoZWxlbWVudHMgPyBBcnJheS5mcm9tKGVsZW1lbnRzKSA6IFtdKS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXhBID0gTnVtYmVyKGEuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKSwgaW5kZXhCID0gTnVtYmVyKGIuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgICBpZiAoaW5kZXhBID4gaW5kZXhCKSByZXR1cm4gMTtcclxuICAgICAgICBpZiAoaW5kZXhBIDwgaW5kZXhCKSByZXR1cm4gLTE7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBlbExpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gZWxMaXN0W2ldLCBpbmRleCA9IE51bWJlcihlbC5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpO1xyXG4gICAgICBpZiAoISFlbCAmJiBpbmRleCA+IDApIHtcclxuICAgICAgICBlbGVtZW50ID0gZWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghIWVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5mb2N1cyhlbGVtZW50LCBGb2N1c0FsaWdubWVudHMuQ0VOVEVSLCBCRUhBVklPUl9JTlNUQU5UKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpemUoaWQ6IG51bWJlciwgdHJhY2tCb3g6IFRyYWNrQm94KSB7XHJcbiAgICB0aGlzLl9pZCA9IGlkO1xyXG4gICAgdGhpcy5fdHJhY2tCb3ggPSB0cmFja0JveDtcclxuICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuVElDSywgdGhpcy5fb25UaWNrSGFuZGxlcik7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLkNIQU5HRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVDb21wb25lbnRJZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgPSB0aGlzLl9uZXh0Q29tcG9uZW50SWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IHRoaXMuX25leHRDb21wb25lbnRJZCArIDE7XHJcbiAgfVxyXG5cclxuICBnZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uOiBudW1iZXIsIG1heFBvc2l0aW9uOiBudW1iZXIgfCBudWxsID0gbnVsbCk6IChJUmVjdCAmIHsgaWQ6IElkIHwgbnVsbDsgaXNGaXJzdDogYm9vbGVhbjsgaXNMYXN0OiBib29sZWFuOyB9KSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrQm94Py5nZXRDb21wb25lbnRCb3VuZHNCeUludGVyc2VjdGlvblBvc2l0aW9uKHBvc2l0aW9uLCBtYXhQb3NpdGlvbikgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldEludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbihpZDogSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5nZXRWYWx1ZSgpICE9PSBpZCkge1xyXG4gICAgICB0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLm5leHQoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBgaWRgIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgICovXHJcbiAgc2Nyb2xsVG8oaWQ6IElkLCBjYjogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGwsIG9wdGlvbnM6IElTY3JvbGxPcHRpb25zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHsgaWQsIGNiLCBvcHRpb25zIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9TdGFydChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb1N0YXJ0Lm5leHQob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRlbnQgc2l6ZS5cclxuICAgKi9cclxuICBzY3JvbGxUb0VuZChvcHRpb25zPzogSVNjcm9sbE9wdGlvbnMpIHtcclxuICAgIHRoaXMuXyRzY3JvbGxUb0VuZC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl8kdW5zdWJzY3JpYmUpIHtcclxuICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgICAgdGhpcy5fJHVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFDNUcsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUsY0FBYyxFQUMvRyxzQkFBc0IsR0FDdkIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR3RFOzs7Ozs7O0dBT0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXRDLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDeEIs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QUFXLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDakcsQ0FBQztJQUVELHVDQUF1QyxDQUFDLEVBQWE7UUFDbkQsSUFBSSxJQUFJLENBQUMsc0NBQXNDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztRQUVJO0lBQ0osUUFBUSxDQUFDLEVBQU0sRUFBRSxLQUEwQixJQUFJLEVBQUUsVUFBaUMsSUFBSTtRQUNwRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsT0FBd0I7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE9BQXdCO1FBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO3dHQTVnQlUsb0JBQW9COzRHQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgU3ViamVjdCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVHJhY2tCb3ggfSBmcm9tICcuL2NvcmUvdHJhY2stYm94JztcclxuaW1wb3J0IHsgVHJhY2tCb3hFdmVudHMgfSBmcm9tICcuL2NvcmUvZXZlbnRzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSUFuaW1hdGlvblBhcmFtcywgSVJlY3QsIElTY3JvbGxPcHRpb25zLCBJU2l6ZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50cywgVGV4dERpcmVjdGlvbnMgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgVGV4dERpcmVjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBTZWxlY3RpbmdNb2Rlc1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9zZWxlY3RpbmctbW9kZXMtdHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIEJFSEFWSU9SX0FVVE8sIEJFSEFWSU9SX0lOU1RBTlQsIERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUywgREVGQVVMVF9DTElDS19ESVNUQU5DRSwgREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSyxcclxuICBERUZBVUxUX0lURU1fU0laRSwgREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0ssIERFRkFVTFRfU05BUF9UT19JVEVNLCBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORywgSVRFTV9DT05UQUlORVIsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSxcclxufSBmcm9tICcuL2NvbnN0JztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnQsIElkIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IGdldExpc3RFbGVtZW50cywgTkdWTF9JTkRFWCB9IGZyb20gJy4vY29tcG9uZW50cy9uZy1saXN0LWl0ZW0vdXRpbHMnO1xyXG5pbXBvcnQgeyBGb2N1c0l0ZW1QYXJhbXMgfSBmcm9tICcuL3R5cGVzL2ZvY3VzLWl0ZW0tcGFyYW1zJztcclxuaW1wb3J0IHsgdmFsaWRhdGVGb2N1c0FsaWdubWVudCwgdmFsaWRhdGVJZCB9IGZyb20gJy4vdXRpbHMvbGlzdC12YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgZ2V0U2VsZWN0b3JCeUl0ZW1JZCB9IGZyb20gJy4vdXRpbHMvZ2V0LXNlbGVjdG9yLWJ5LWl0ZW0taWQnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsVG9QYXJhbXMgfSBmcm9tICcuL2ludGVyZmFjZXMvc2Nyb2xsLXRvLXBhcmFtcyc7XHJcblxyXG4vKipcclxuICogTmdWaXJ0dWFsTGlzdFNlcnZpY2VcclxuICogTWF4aW11bSBwZXJmb3JtYW5jZSBmb3IgZXh0cmVtZWx5IGxhcmdlIGxpc3RzLlxyXG4gKiBJdCBpcyBiYXNlZCBvbiBhbGdvcml0aG1zIGZvciB2aXJ0dWFsaXphdGlvbiBvZiBzY3JlZW4gb2JqZWN0cy5cclxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL0Rqb25ueVgvbmctdmlydHVhbC1saXN0L2Jsb2IvMTgueC9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgQWxleGFuZHJvdmljaCBHcmViZW5uaWtvdlxyXG4gKiBAZW1haWwgZGpvbm55eEBnbWFpbC5jb21cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RTZXJ2aWNlIHtcclxuICBwcm90ZWN0ZWQgXyR1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSAwO1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIHByaXZhdGUgX25leHRDb21wb25lbnRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfJHZpcnR1YWxDbGljayA9IG5ldyBTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW08YW55PiB8IG51bGw+KCk7XHJcbiAgJHZpcnR1YWxDbGljayA9IHRoaXMuXyR2aXJ0dWFsQ2xpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+IHwgSWQgfCBudWxsPihudWxsKTtcclxuICAkc2VsZWN0ZWRJZHMgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjb2xsYXBzZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPj4oW10pO1xyXG4gICRjb2xsYXBzZWRJZHMgPSB0aGlzLl8kY29sbGFwc2VkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0aW5nTW9kZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW5nTW9kZXNUeXBlcz4oMCk7XHJcbiAgJHNlbGVjdGluZ01vZGUgPSB0aGlzLl8kc2VsZWN0aW5nTW9kZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0IHNlbGVjdGluZ01vZGUodjogU2VsZWN0aW5nTW9kZXNUeXBlcykge1xyXG4gICAgdGhpcy5fJHNlbGVjdGluZ01vZGUubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c2VkSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJGZvY3VzZWRJZCA9IHRoaXMuXyRmb2N1c2VkSWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgc2V0IGZvY3VzZWRJZCh2OiBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCkgIT09IHYpIHtcclxuICAgICAgdGhpcy5fJGZvY3VzZWRJZC5uZXh0KHYpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgZm9jdXNlZElkKCkgeyByZXR1cm4gdGhpcy5fJGZvY3VzZWRJZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRmb2N1c0l0ZW0gPSBuZXcgU3ViamVjdDxGb2N1c0l0ZW1QYXJhbXM+KCk7XHJcbiAgcmVhZG9ubHkgJGZvY3VzSXRlbSA9IHRoaXMuXyRmb2N1c0l0ZW0uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUbyA9IG5ldyBTdWJqZWN0PElTY3JvbGxUb1BhcmFtcyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG8gPSB0aGlzLl8kc2Nyb2xsVG8uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUb1N0YXJ0ID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvU3RhcnQgPSB0aGlzLl8kc2Nyb2xsVG9TdGFydC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvRW5kID0gbmV3IFN1YmplY3Q8SVNjcm9sbE9wdGlvbnMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvRW5kID0gdGhpcy5fJHNjcm9sbFRvRW5kLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kdGljayA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHRpY2sgPSB0aGlzLl8kdGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNhY2hlVmVyc2lvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigtMSk7XHJcbiAgcmVhZG9ubHkgJGNhY2hlVmVyc2lvbiA9IHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHRyYWNrQnk6IHN0cmluZyA9IFRSQUNLX0JZX1BST1BFUlRZX05BTUU7XHJcblxyXG4gIGxhc3RGb2N1c2VkSXRlbUlkOiBudW1iZXIgPSAtMTtcclxuXHJcbiAgc2Nyb2xsU3RhcnRPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHNjcm9sbEVuZE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgekluZGV4V2hlblNlbGVjdGluZzogc3RyaW5nIHwgbnVsbCA9IERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HO1xyXG5cclxuICBzZWxlY3RCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9TRUxFQ1RfQllfQ0xJQ0s7XHJcblxyXG4gIGNvbGxhcHNlQnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0s7XHJcblxyXG4gIGRlZmF1bHRJdGVtVmFsdWU6IElWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc25hcFRvSXRlbTogYm9vbGVhbiA9IERFRkFVTFRfU05BUF9UT19JVEVNO1xyXG5cclxuICBpc0luZmluaXR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzVmVydGljYWw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBkeW5hbWljOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaXRlbVNpemU6IG51bWJlciA9IERFRkFVTFRfSVRFTV9TSVpFO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9TdGFydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBzbmFwU2Nyb2xsVG9FbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgYW5pbWF0aW9uUGFyYW1zOiBJQW5pbWF0aW9uUGFyYW1zID0gREVGQVVMVF9BTklNQVRJT05fUEFSQU1TO1xyXG5cclxuICBpc05vbmVDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc011bHRpcGxlQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNBY2NvcmRpb25Db2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF90cmFja0JveDogVHJhY2tCb3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gIGxpc3RFbGVtZW50OiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBpdGVtczogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG5cclxuICBpdGVtQ29uZmlnTWFwOiBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwID0ge307XHJcblxyXG4gIHByaXZhdGUgXyRkaXNwbGF5SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24+KFtdKTtcclxuICByZWFkb25seSAkZGlzcGxheUl0ZW1zID0gdGhpcy5fJGRpc3BsYXlJdGVtcy5hc09ic2VydmFibGUoKTtcclxuICBnZXQgZGlzcGxheUl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGRpc3BsYXlJdGVtcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NvbGxlY3Rpb246IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuICBzZXQgY29sbGVjdGlvbih2OiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fY29sbGVjdGlvbiA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY29sbGVjdGlvbiA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGRpc3BsYXlJdGVtcy5uZXh0KHYpO1xyXG4gIH1cclxuICBnZXQgY29sbGVjdGlvbigpIHsgcmV0dXJuIHRoaXMuX2NvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGxhbmdUZXh0RGlyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZXh0RGlyZWN0aW9uPihUZXh0RGlyZWN0aW9ucy5MVFIpO1xyXG4gIHJlYWRvbmx5ICRsYW5nVGV4dERpciA9IHRoaXMuXyRsYW5nVGV4dERpci5hc09ic2VydmFibGUoKTtcclxuICBnZXQgbGFuZ1RleHREaXIoKSB7IHJldHVybiB0aGlzLl8kbGFuZ1RleHREaXIuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9sYW5nVGV4dERpcjogVGV4dERpcmVjdGlvbiA9IFRleHREaXJlY3Rpb25zLkxUUjtcclxuICBzZXQgbGFuZ1RleHREaXIodjogVGV4dERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2xhbmdUZXh0RGlyID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9sYW5nVGV4dERpciA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGxhbmdUZXh0RGlyLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kZ3JhYmJpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkZ3JhYmJpbmcgPSB0aGlzLl8kZ3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGdyYWJiaW5nKCkgeyByZXR1cm4gdGhpcy5fJGdyYWJiaW5nLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfZ3JhYmJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXQgZ3JhYmJpbmcodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2dyYWJiaW5nID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9ncmFiYmluZyA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGdyYWJiaW5nLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kY2xpY2tQcmVzc2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcmVhZG9ubHkgJGNsaWNrUHJlc3NlZCA9IHRoaXMuXyRjbGlja1ByZXNzZWQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGNsaWNrUHJlc3NlZCgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja1ByZXNzZWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja1ByZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZXQgY2xpY2tQcmVzc2VkKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl9jbGlja1ByZXNzZWQgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NsaWNrUHJlc3NlZCA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrUHJlc3NlZC5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGlzR3JhYmJpbmcgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkaXNHcmFiYmluZyA9IHRoaXMuXyRpc0dyYWJiaW5nLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBpc0dyYWJiaW5nKCkgeyByZXR1cm4gdGhpcy5fJGlzR3JhYmJpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBnZXQgc2Nyb2xsQmFyU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRzY3JvbGxCYXJTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsQmFyU2l6ZTogbnVtYmVyID0gMDtcclxuICBzZXQgc2Nyb2xsQmFyU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zY3JvbGxCYXJTaXplID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zY3JvbGxCYXJTaXplID0gdjtcclxuXHJcbiAgICB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5uZXh0KHYpO1xyXG4gIH1cclxuICBwcml2YXRlIF8kc2Nyb2xsQmFyU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLl9zY3JvbGxCYXJTaXplKTtcclxuICByZWFkb25seSAkc2Nyb2xsQmFyU2l6ZSA9IHRoaXMuXyRzY3JvbGxCYXJTaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gIHJlYWRvbmx5ICRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24gPSB0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2xpY2tEaXN0YW5jZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0NMSUNLX0RJU1RBTkNFKTtcclxuICByZWFkb25seSAkY2xpY2tEaXN0YW5jZSA9IHRoaXMuXyRjbGlja0Rpc3RhbmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBjbGlja0Rpc3RhbmNlKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrRGlzdGFuY2UuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jbGlja0Rpc3RhbmNlOiBudW1iZXIgPSBERUZBVUxUX0NMSUNLX0RJU1RBTkNFO1xyXG4gIHNldCBjbGlja0Rpc3RhbmNlKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX2NsaWNrRGlzdGFuY2UgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NsaWNrRGlzdGFuY2UgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRjbGlja0Rpc3RhbmNlLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vblRpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5fJHRpY2submV4dCgpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyID0gKHY6IG51bWJlcikgPT4ge1xyXG4gICAgdGhpcy5fJGNhY2hlVmVyc2lvbi5uZXh0KHYpO1xyXG4gIH07XHJcblxyXG4gIHNldCBzZWxlY3RlZElkcyhpZHM6IEFycmF5PElkPiB8IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IHNlbGVjdGVkSWRzKCkgeyByZXR1cm4gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgc2V0IGNvbGxhcHNlZElkcyhpZHM6IEFycmF5PElkPikge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29sbGFwc2VkSWRzKCkgeyByZXR1cm4gdGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgY29uc3QgJGdyYWJiaW5nID0gdGhpcy4kZ3JhYmJpbmcucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICApLCAkY2xpY2tQcmVzc2VkID0gdGhpcy4kY2xpY2tQcmVzc2VkLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgKTtcclxuICAgIGNvbWJpbmVMYXRlc3QoWyRncmFiYmluZywgJGNsaWNrUHJlc3NlZF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAoKFtncmFiYmluZywgY2xpY2tQcmVzc2VkXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuXyRpc0dyYWJiaW5nLm5leHQoZ3JhYmJpbmcgJiYgIWNsaWNrUHJlc3NlZCk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLl8kc2VsZWN0aW5nTW9kZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHN3aXRjaCAodikge1xyXG4gICAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyID0gdGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGN1cnIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTVVMVElfU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSkpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuTk9ORTpcclxuICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgdmlydHVhbENsaWNrKGRhdGE6IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0gfCBudWxsKSB7XHJcbiAgICB0aGlzLl8kdmlydHVhbENsaWNrLm5leHQoZGF0YSk7XHJcbiAgICBpZiAodGhpcy5jb2xsYXBzZUJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5jb2xsYXBzZShpZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zZWxlY3RCeUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrQnkgPSB0aGlzLnRyYWNrQnksIGlkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZShpbW1lZGlhdGVseTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLl90cmFja0JveD8uY2hhbmdlcyhpbW1lZGlhdGVseSwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJdGVtQ29uZmlnKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZGlzcGxheUl0ZW1zID0gdGhpcy5kaXNwbGF5SXRlbXM7XHJcbiAgICBpZiAoISFkaXNwbGF5SXRlbXMpIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeTtcclxuICAgICAgcmV0dXJuIGRpc3BsYXlJdGVtcy5maW5kKGRhdGEgPT4ge1xyXG4gICAgICAgIGNvbnN0IF9pZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICAgIHJldHVybiBfaWQgPT09IGlkO1xyXG4gICAgICB9KT8uY29uZmlnID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdHMgYSBsaXN0IGl0ZW1cclxuICAgKiBAcGFyYW0gaWQgXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkIC0gSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgdG9nZ2xlIG1ldGhvZCBpcyBleGVjdXRlZCwgaWYgZmFsc2Ugb3IgdHJ1ZSwgdGhlbiB0aGUgc2VsZWN0aW9uL2Rlc2VsZWN0aW9uIGlzIHBlcmZvcm1lZC5cclxuICAgKi9cclxuICBzZWxlY3QoaWQ6IElkLCBzZWxlY3RlZD86IGJvb2xlYW4pIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLnNlbGVjdGFibGUpKSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5fJHNlbGVjdGluZ01vZGUuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5TRUxFQ1Q6IHtcclxuICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSBhcyAoSWQgfCB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3VyciAhPT0gaWQgPyBpZCA6IG51bGwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoc2VsZWN0ZWQgPyBpZCA6IG51bGwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgIGNvbnN0IGN1cnIgPSBbLi4uKHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIHx8IFtdKSBhcyBBcnJheTxJZD5dLFxyXG4gICAgICAgICAgICBpbmRleCA9IGN1cnIuaW5kZXhPZihpZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5OT05FOlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIENvbGxhcHNlIGxpc3QgaXRlbXNcclxuICAgICogQHBhcmFtIGRhdGEgXHJcbiAgICAqIEBwYXJhbSBjb2xsYXBzZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBjb2xsYXBzZS9leHBhbmQgaXMgcGVyZm9ybWVkLlxyXG4gICAgKi9cclxuICBjb2xsYXBzZShpZDogSWQsIGNvbGxhcHNlZD86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmlzTm9uZUNvbGxhcHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0SXRlbUNvbmZpZyhpZCk7XHJcbiAgICBpZiAoKCEhY29uZmlnICYmIGNvbmZpZy5jb2xsYXBzYWJsZSkpIHtcclxuICAgICAgY29uc3QgYWxsR3JvdXBzOiBBcnJheTxJZD4gPSBbXTtcclxuICAgICAgaWYgKHRoaXMuaXNBY2NvcmRpb25Db2xsYXBzZSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcywgaXRlbUNvbmZpZ01hcCA9IHRoaXMuaXRlbUNvbmZpZ01hcCwgdHJhY2tCeSA9IHRoaXMudHJhY2tCeTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldLCBpZCA9IGl0ZW1bdHJhY2tCeV0sIGNvbGxhcHNhYmxlID0gaXRlbUNvbmZpZ01hcD8uW2lkXT8uY29sbGFwc2FibGUgPT09IHRydWU7XHJcbiAgICAgICAgICBpZiAoIWNvbGxhcHNhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYWxsR3JvdXBzLnB1c2goaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY3VyciA9IHRoaXMuaXNBY2NvcmRpb25Db2xsYXBzZSA/IGFsbEdyb3VwcyA6IFsuLi4odGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpIHx8IFtdKSBhcyBBcnJheTxJZD5dLFxyXG4gICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgaWYgKCFjb2xsYXBzZWQpIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbGxhcHNlZCkge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIGN1cnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuaXNBY2NvcmRpb25Db2xsYXBzZSkge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICAgIGlkLCBjYjogbnVsbCwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBkZWxheTogMTAwLCBmb2N1c2VkOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7XHJcbiAgICAgICAgICBpZCwgY2I6IG51bGwsIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgZGVsYXk6IDEwMCwgZm9jdXNlZDogdHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEZvY3VzZWRFbGVtZW50QnlJZChpZDogSWQpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5saXN0RWxlbWVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oZ2V0U2VsZWN0b3JCeUl0ZW1JZChpZCkpO1xyXG4gICAgaWYgKCEhZWwpIHtcclxuICAgICAgY29uc3QgZm9jdXNlZEVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oYC4ke0lURU1fQ09OVEFJTkVSfWApO1xyXG4gICAgICBpZiAoISFmb2N1c2VkRWwpIHtcclxuICAgICAgICByZXR1cm4gZm9jdXNlZEVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50IHdpdGggYSBnaXZlbiBpZFxyXG4gICAqL1xyXG4gIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCBudWxsIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrQm94Py5nZXRJdGVtQm91bmRzKGlkKSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9jdXMgYW4gbGlzdCBpdGVtIGJ5IGEgZ2l2ZW4gaWQuXHJcbiAgICovXHJcbiAgZm9jdXNCeUlkKGlkOiBJZCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLk5PTkUsIHNjcm9sbEJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiKSB7XHJcbiAgICB2YWxpZGF0ZUlkKGlkKTtcclxuICAgIHZhbGlkYXRlRm9jdXNBbGlnbm1lbnQoYWxpZ24pO1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmdldEZvY3VzZWRFbGVtZW50QnlJZChpZCk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGVsLCBhbGlnbiwgc2Nyb2xsQmVoYXZpb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFsaWduOiBGb2N1c0FsaWdubWVudCA9IEZvY3VzQWxpZ25tZW50cy5DRU5URVIsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8pOiBib29sZWFuIHtcclxuICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgaWYgKCEhZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gcGFyc2VGbG9hdChlbGVtZW50LnBhcmVudEVsZW1lbnQ/LmdldEF0dHJpYnV0ZSgncG9zaXRpb24nKSA/PyAnMCcpO1xyXG4gICAgICB0aGlzLl8kZm9jdXNJdGVtLm5leHQoeyBlbGVtZW50LCBwb3NpdGlvbiwgYWxpZ24sIGJlaGF2aW9yIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZvY3VzTGlzdCgpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmxpc3RFbGVtZW50O1xyXG4gICAgaWYgKCEhZWxlbWVudCkge1xyXG4gICAgICBlbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzRmlyc3RFbGVtZW50KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihnZXRMaXN0RWxlbWVudHMoKSksXHJcbiAgICAgIGVsTGlzdCA9IChlbGVtZW50cyA/IEFycmF5LmZyb20oZWxlbWVudHMpIDogW10pLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleEEgPSBOdW1iZXIoYS5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpLCBpbmRleEIgPSBOdW1iZXIoYi5nZXRBdHRyaWJ1dGUoTkdWTF9JTkRFWCkpO1xyXG4gICAgICAgIGlmIChpbmRleEEgPiBpbmRleEIpIHJldHVybiAxO1xyXG4gICAgICAgIGlmIChpbmRleEEgPCBpbmRleEIpIHJldHVybiAtMTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGVsTGlzdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgZWwgPSBlbExpc3RbaV0sIGluZGV4ID0gTnVtYmVyKGVsLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgIGlmICghIWVsICYmIGluZGV4ID4gMCkge1xyXG4gICAgICAgIGVsZW1lbnQgPSBlbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhZWxlbWVudCkge1xyXG4gICAgICB0aGlzLmZvY3VzKGVsZW1lbnQsIEZvY3VzQWxpZ25tZW50cy5DRU5URVIsIEJFSEFWSU9SX0lOU1RBTlQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZShpZDogbnVtYmVyLCB0cmFja0JveDogVHJhY2tCb3gpIHtcclxuICAgIHRoaXMuX2lkID0gaWQ7XHJcbiAgICB0aGlzLl90cmFja0JveCA9IHRyYWNrQm94O1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5USUNLLCB0aGlzLl9vblRpY2tIYW5kbGVyKTtcclxuICAgIHRoaXMuX3RyYWNrQm94LmFkZEV2ZW50TGlzdGVuZXIoVHJhY2tCb3hFdmVudHMuQ0hBTkdFLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUNvbXBvbmVudElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX25leHRDb21wb25lbnRJZCA9IHRoaXMuX25leHRDb21wb25lbnRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogdGhpcy5fbmV4dENvbXBvbmVudElkICsgMTtcclxuICB9XHJcblxyXG4gIGdldENvbXBvbmVudEJvdW5kc0J5SW50ZXJzZWN0aW9uUG9zaXRpb24ocG9zaXRpb246IG51bWJlciwgbWF4UG9zaXRpb246IG51bWJlciB8IG51bGwgPSBudWxsKTogKElSZWN0ICYgeyBpZDogSWQgfCBudWxsOyBpc0ZpcnN0OiBib29sZWFuOyBpc0xhc3Q6IGJvb2xlYW47IH0pIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3g/LmdldENvbXBvbmVudEJvdW5kc0J5SW50ZXJzZWN0aW9uUG9zaXRpb24ocG9zaXRpb24sIG1heFBvc2l0aW9uKSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0SW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduKGlkOiBJZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl8kaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduLmdldFZhbHVlKCkgIT09IGlkKSB7XHJcbiAgICAgIHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24ubmV4dChpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogVGhlIG1ldGhvZCBzY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbGVtZW50IHdpdGggdGhlIGdpdmVuIGBpZGAgYW5kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzY3JvbGxlZCBhcmVhLlxyXG4gICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGNiOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCwgb3B0aW9uczogSVNjcm9sbE9wdGlvbnMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoeyBpZCwgY2IsIG9wdGlvbnMgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGxzIHRoZSBzY3JvbGwgYXJlYSB0byB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgY29sbGVjdGlvbi5cclxuICAgKi9cclxuICBzY3JvbGxUb1N0YXJ0KG9wdGlvbnM/OiBJU2Nyb2xsT3B0aW9ucykge1xyXG4gICAgdGhpcy5fJHNjcm9sbFRvU3RhcnQubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVuZCBvZiB0aGUgY29udGVudCBzaXplLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKG9wdGlvbnM/OiBJU2Nyb2xsT3B0aW9ucykge1xyXG4gICAgdGhpcy5fJHNjcm9sbFRvRW5kLm5leHQob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuXyR1bnN1YnNjcmliZSkge1xyXG4gICAgICB0aGlzLl8kdW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgICB0aGlzLl8kdW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -9,18 +9,34 @@ import { easeLinear } from './ease';
9
9
  export class Animator {
10
10
  static _nextId = 0;
11
11
  _animationId = 0;
12
+ get animated() { return this._animationId > -1; }
13
+ get isAnimated() { return this.hasAnimation(this._currentId); }
12
14
  _currentId = Animator._nextId;
15
+ get id() { return this._currentId; }
13
16
  generateId() {
14
17
  return Animator._nextId = Animator._nextId === Number.MAX_SAFE_INTEGER
15
18
  ? 0 : Animator._nextId + 1;
16
19
  }
20
+ _diff = 0;
21
+ _startValue = 0;
22
+ _endValue = 0;
23
+ _prevPos = 0;
24
+ updateTo(end) {
25
+ this._endValue = end;
26
+ this._diff = this._endValue - this._startValue;
27
+ return this.hasAnimation();
28
+ }
17
29
  animate(params) {
18
30
  this.stop();
19
31
  const id = this.generateId();
20
32
  this._currentId = id;
21
33
  const { withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete, } = params;
34
+ this._startValue = startValue;
35
+ this._endValue = endValue;
22
36
  const startTime = performance.now();
23
- let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime, diff = endValue - start, isFinished = false;
37
+ let isCanceled = false, startPosDelta = 0, delta = 0, prevTime = startTime, isFinished = false;
38
+ this._prevPos = startValue;
39
+ this._diff = this._endValue - this._startValue;
24
40
  const step = (currentTime) => {
25
41
  if (id !== this._currentId) {
26
42
  isCanceled = true;
@@ -30,34 +46,35 @@ export class Animator {
30
46
  }
31
47
  const cPos = getPropValue?.() || 0;
32
48
  let startDelta = 0;
33
- if (cPos !== prevPos) {
34
- startDelta = cPos - prevPos;
49
+ if (cPos !== this._prevPos) {
50
+ startDelta = cPos - this._prevPos;
35
51
  startPosDelta += startDelta;
36
52
  }
37
- const elapsed = currentTime - startTime, progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1), easedProgress = easingFunction(progress), val = (withDelta ? startPosDelta : 0) + start + diff * easedProgress, currentValue = val, t = performance.now();
53
+ const elapsed = currentTime - startTime, progress = this._startValue === this._endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1), easedProgress = easingFunction(progress), val = (withDelta ? startPosDelta : 0) + this._startValue + this._diff * easedProgress, currentValue = val, t = performance.now();
38
54
  isFinished = progress === 1;
39
- delta = currentValue - startDelta - prevPos;
40
- const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;
55
+ delta = currentValue - startDelta - this._prevPos;
56
+ const frameTimestamp = t - prevTime, actualFrameTimestamp = frameTimestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : frameTimestamp;
41
57
  prevTime = t;
42
- prevPos = currentValue;
58
+ this._prevPos = currentValue;
43
59
  if (onUpdate !== undefined) {
44
60
  const data = {
45
61
  id,
46
62
  delta,
47
63
  elapsed,
48
- value: !withDelta && isFinished ? endValue : currentValue,
49
- timestamp,
64
+ value: currentValue,
65
+ timestamp: actualFrameTimestamp,
50
66
  };
51
67
  onUpdate(data);
52
68
  }
53
69
  if (isFinished) {
70
+ this._animationId = -1;
54
71
  if (onComplete !== undefined) {
55
72
  const data = {
56
73
  id,
57
74
  delta,
58
75
  elapsed,
59
- value: withDelta ? currentValue : endValue,
60
- timestamp,
76
+ value: currentValue,
77
+ timestamp: actualFrameTimestamp,
61
78
  };
62
79
  onComplete(data);
63
80
  }
@@ -67,12 +84,20 @@ export class Animator {
67
84
  }
68
85
  };
69
86
  this._animationId = requestAnimationFrame(step);
87
+ return this._currentId;
88
+ }
89
+ hasAnimation(id = -1) {
90
+ if ((this._currentId === id || id === -1) && this.animated) {
91
+ return true;
92
+ }
93
+ return false;
70
94
  }
71
- stop() {
72
- cancelAnimationFrame(this._animationId);
95
+ stop(id = -1) {
96
+ cancelAnimationFrame(id === -1 ? this._animationId : id);
97
+ this._animationId = -1;
73
98
  }
74
99
  dispose() {
75
100
  this.stop();
76
101
  }
77
102
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixVQUFVLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxVQUFVO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsTUFBTSxFQUNKLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRywwQkFBMEIsRUFDM0YsWUFBWSxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FDaEUsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxVQUFV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LENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQUk7UUFDRixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCwgREVGQVVMVF9BTklNQVRJT05fRFVSQVRJT04sIERFRkFVTFRfV0lUSF9ERUxUQSB9IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyIH0gZnJvbSAnLi9lYXNlJztcclxuaW1wb3J0IHsgSUFuaW1hdG9yUGFyYW1zLCBJQW5pbWF0b3JVcGRhdGVEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRvclxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL2FuaW1hdG9yLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFuaW1hdG9yIHtcclxuICBwcml2YXRlIHN0YXRpYyBfbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25JZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudElkOiBudW1iZXIgPSBBbmltYXRvci5fbmV4dElkO1xyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gQW5pbWF0b3IuX25leHRJZCA9IEFuaW1hdG9yLl9uZXh0SWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IEFuaW1hdG9yLl9uZXh0SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShwYXJhbXM6IElBbmltYXRvclBhcmFtcykge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgY29uc3QgaWQgPSB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IGlkO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgd2l0aERlbHRhID0gREVGQVVMVF9XSVRIX0RFTFRBLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZHVyYXRpb24gPSBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTixcclxuICAgICAgZ2V0UHJvcFZhbHVlLCBlYXNpbmdGdW5jdGlvbiA9IGVhc2VMaW5lYXIsIG9uVXBkYXRlLCBvbkNvbXBsZXRlLFxyXG4gICAgfSA9IHBhcmFtcztcclxuXHJcbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuICAgIGxldCBpc0NhbmNlbGVkID0gZmFsc2UsIHByZXZQb3MgPSBzdGFydFZhbHVlLCBzdGFydCA9IHN0YXJ0VmFsdWUsIHN0YXJ0UG9zRGVsdGEgPSAwLCBkZWx0YSA9IDAsIHByZXZUaW1lID0gc3RhcnRUaW1lLFxyXG4gICAgICBkaWZmID0gZW5kVmFsdWUgLSBzdGFydCwgaXNGaW5pc2hlZCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHN0ZXAgPSAoY3VycmVudFRpbWU6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAoaWQgIT09IHRoaXMuX2N1cnJlbnRJZCkge1xyXG4gICAgICAgIGlzQ2FuY2VsZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoISFpc0NhbmNlbGVkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjUG9zID0gZ2V0UHJvcFZhbHVlPy4oKSB8fCAwO1xyXG4gICAgICBsZXQgc3RhcnREZWx0YSA9IDA7XHJcbiAgICAgIGlmIChjUG9zICE9PSBwcmV2UG9zKSB7XHJcbiAgICAgICAgc3RhcnREZWx0YSA9IGNQb3MgLSBwcmV2UG9zO1xyXG4gICAgICAgIHN0YXJ0UG9zRGVsdGEgKz0gc3RhcnREZWx0YTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZWxhcHNlZCA9IGN1cnJlbnRUaW1lIC0gc3RhcnRUaW1lLFxyXG4gICAgICAgIHByb2dyZXNzID0gc3RhcnQgPT09IGVuZFZhbHVlID8gMSA6IE1hdGgubWluKGR1cmF0aW9uID4gMCA/IGVsYXBzZWQgLyBkdXJhdGlvbiA6IDAsIDEpLFxyXG4gICAgICAgIGVhc2VkUHJvZ3Jlc3MgPSBlYXNpbmdGdW5jdGlvbihwcm9ncmVzcyksXHJcbiAgICAgICAgdmFsID0gKHdpdGhEZWx0YSA/IHN0YXJ0UG9zRGVsdGEgOiAwKSArIHN0YXJ0ICsgZGlmZiAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsLFxyXG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcyA9PT0gMTtcclxuXHJcbiAgICAgIGRlbHRhID0gY3VycmVudFZhbHVlIC0gc3RhcnREZWx0YSAtIHByZXZQb3M7XHJcblxyXG4gICAgICBjb25zdCB0cyA9IHQgLSBwcmV2VGltZSwgdGltZXN0YW1wID0gdHMgPCBBTklNQVRPUl9NSU5fVElNRVNUQU1QID8gQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCA6IHRzO1xyXG5cclxuICAgICAgcHJldlRpbWUgPSB0O1xyXG4gICAgICBwcmV2UG9zID0gY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKG9uVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgIGVsYXBzZWQsXHJcbiAgICAgICAgICB2YWx1ZTogIXdpdGhEZWx0YSAmJiBpc0ZpbmlzaGVkID8gZW5kVmFsdWUgOiBjdXJyZW50VmFsdWUsXHJcbiAgICAgICAgICB0aW1lc3RhbXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBvblVwZGF0ZShkYXRhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzRmluaXNoZWQpIHtcclxuICAgICAgICBpZiAob25Db21wbGV0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgZGVsdGEsXHJcbiAgICAgICAgICAgIGVsYXBzZWQsXHJcbiAgICAgICAgICAgIHZhbHVlOiB3aXRoRGVsdGEgPyBjdXJyZW50VmFsdWUgOiBlbmRWYWx1ZSxcclxuICAgICAgICAgICAgdGltZXN0YW1wLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9uQ29tcGxldGUoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0aW9uSWQpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuc3RvcCgpO1xyXG4gIH1cclxufVxyXG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUVqQyxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZELFVBQVUsR0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBRTlDLElBQUksRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFNUIsVUFBVTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsZ0JBQWdCO1lBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWxCLFdBQVcsR0FBVyxDQUFDLENBQUM7SUFFeEIsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUV0QixRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBRTdCLFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLElB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SUFBSSxDQUFDLEtBQWEsQ0FBQyxDQUFDO1FBQ2xCLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBTklNQVRPUl9NSU5fVElNRVNUQU1QLCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiwgREVGQVVMVF9XSVRIX0RFTFRBIH0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIgfSBmcm9tICcuL2Vhc2UnO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JQYXJhbXMsIElBbmltYXRvclVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFuaW1hdG9yXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvYW5pbWF0b3IudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0b3Ige1xyXG4gIHByaXZhdGUgc3RhdGljIF9uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAwO1xyXG5cclxuICBnZXQgYW5pbWF0ZWQoKSB7IHJldHVybiB0aGlzLl9hbmltYXRpb25JZCA+IC0xOyB9XHJcblxyXG4gIGdldCBpc0FuaW1hdGVkKCkgeyByZXR1cm4gdGhpcy5oYXNBbmltYXRpb24odGhpcy5fY3VycmVudElkKTsgfVxyXG5cclxuICBwcml2YXRlIF9jdXJyZW50SWQ6IG51bWJlciA9IEFuaW1hdG9yLl9uZXh0SWQ7XHJcblxyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRJZDsgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlSWQoKSB7XHJcbiAgICByZXR1cm4gQW5pbWF0b3IuX25leHRJZCA9IEFuaW1hdG9yLl9uZXh0SWQgPT09IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXHJcbiAgICAgID8gMCA6IEFuaW1hdG9yLl9uZXh0SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGlmZjogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfc3RhcnRWYWx1ZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfZW5kVmFsdWU6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX3ByZXZQb3M6IG51bWJlciA9IDA7XHJcblxyXG4gIHVwZGF0ZVRvKGVuZDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9lbmRWYWx1ZSA9IGVuZDtcclxuICAgIHRoaXMuX2RpZmYgPSB0aGlzLl9lbmRWYWx1ZSAtIHRoaXMuX3N0YXJ0VmFsdWU7XHJcbiAgICByZXR1cm4gdGhpcy5oYXNBbmltYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGFuaW1hdGUocGFyYW1zOiBJQW5pbWF0b3JQYXJhbXMpIHtcclxuICAgIHRoaXMuc3RvcCgpO1xyXG5cclxuICAgIGNvbnN0IGlkID0gdGhpcy5nZW5lcmF0ZUlkKCk7XHJcbiAgICB0aGlzLl9jdXJyZW50SWQgPSBpZDtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHdpdGhEZWx0YSA9IERFRkFVTFRfV0lUSF9ERUxUQSwgc3RhcnRWYWx1ZSwgZW5kVmFsdWUsIGR1cmF0aW9uID0gREVGQVVMVF9BTklNQVRJT05fRFVSQVRJT04sXHJcbiAgICAgIGdldFByb3BWYWx1ZSwgZWFzaW5nRnVuY3Rpb24gPSBlYXNlTGluZWFyLCBvblVwZGF0ZSwgb25Db21wbGV0ZSxcclxuICAgIH0gPSBwYXJhbXM7XHJcblxyXG4gICAgdGhpcy5fc3RhcnRWYWx1ZSA9IHN0YXJ0VmFsdWU7XHJcbiAgICB0aGlzLl9lbmRWYWx1ZSA9IGVuZFZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsIGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX3ByZXZQb3MgPSBzdGFydFZhbHVlO1xyXG4gICAgdGhpcy5fZGlmZiA9IHRoaXMuX2VuZFZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZTtcclxuXHJcbiAgICBjb25zdCBzdGVwID0gKGN1cnJlbnRUaW1lOiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKGlkICE9PSB0aGlzLl9jdXJyZW50SWQpIHtcclxuICAgICAgICBpc0NhbmNlbGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhaXNDYW5jZWxlZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY1BvcyA9IGdldFByb3BWYWx1ZT8uKCkgfHwgMDtcclxuICAgICAgbGV0IHN0YXJ0RGVsdGEgPSAwO1xyXG4gICAgICBpZiAoY1BvcyAhPT0gdGhpcy5fcHJldlBvcykge1xyXG4gICAgICAgIHN0YXJ0RGVsdGEgPSBjUG9zIC0gdGhpcy5fcHJldlBvcztcclxuICAgICAgICBzdGFydFBvc0RlbHRhICs9IHN0YXJ0RGVsdGE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBjdXJyZW50VGltZSAtIHN0YXJ0VGltZSxcclxuICAgICAgICBwcm9ncmVzcyA9IHRoaXMuX3N0YXJ0VmFsdWUgPT09IHRoaXMuX2VuZFZhbHVlID8gMSA6IE1hdGgubWluKGR1cmF0aW9uID4gMCA/IGVsYXBzZWQgLyBkdXJhdGlvbiA6IDAsIDEpLFxyXG4gICAgICAgIGVhc2VkUHJvZ3Jlc3MgPSBlYXNpbmdGdW5jdGlvbihwcm9ncmVzcyksXHJcbiAgICAgICAgdmFsID0gKHdpdGhEZWx0YSA/IHN0YXJ0UG9zRGVsdGEgOiAwKSArIHRoaXMuX3N0YXJ0VmFsdWUgKyB0aGlzLl9kaWZmICogZWFzZWRQcm9ncmVzcyxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWwsXHJcbiAgICAgICAgdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgaXNGaW5pc2hlZCA9IHByb2dyZXNzID09PSAxO1xyXG5cclxuICAgICAgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBzdGFydERlbHRhIC0gdGhpcy5fcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IGZyYW1lVGltZXN0YW1wID0gdCAtIHByZXZUaW1lLFxyXG4gICAgICAgIGFjdHVhbEZyYW1lVGltZXN0YW1wID0gZnJhbWVUaW1lc3RhbXAgPCBBTklNQVRPUl9NSU5fVElNRVNUQU1QID8gQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCA6IGZyYW1lVGltZXN0YW1wO1xyXG5cclxuICAgICAgcHJldlRpbWUgPSB0O1xyXG4gICAgICB0aGlzLl9wcmV2UG9zID0gY3VycmVudFZhbHVlO1xyXG5cclxuICAgICAgaWYgKG9uVXBkYXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBJQW5pbWF0b3JVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgIGVsYXBzZWQsXHJcbiAgICAgICAgICB2YWx1ZTogY3VycmVudFZhbHVlLFxyXG4gICAgICAgICAgdGltZXN0YW1wOiBhY3R1YWxGcmFtZVRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uVXBkYXRlKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gLTE7XHJcbiAgICAgICAgaWYgKG9uQ29tcGxldGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc3QgZGF0YTogSUFuaW1hdG9yVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBlbGFwc2VkLFxyXG4gICAgICAgICAgICB2YWx1ZTogY3VycmVudFZhbHVlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGFjdHVhbEZyYW1lVGltZXN0YW1wLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9uQ29tcGxldGUoZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJZDtcclxuICB9XHJcblxyXG4gIGhhc0FuaW1hdGlvbihpZDogbnVtYmVyID0gLTEpIHtcclxuICAgIGlmICgodGhpcy5fY3VycmVudElkID09PSBpZCB8fCBpZCA9PT0gLTEpICYmIHRoaXMuYW5pbWF0ZWQpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdG9wKGlkOiBudW1iZXIgPSAtMSkge1xyXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQgPT09IC0xID8gdGhpcy5fYW5pbWF0aW9uSWQgOiBpZCk7XHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IC0xO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuc3RvcCgpO1xyXG4gIH1cclxufVxyXG4iXX0=