ng-virtual-list 16.12.1 → 16.12.3
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.
- package/README.md +2 -2
- package/esm2022/lib/components/ng-list-item/base/base-virtual-list-item-component.mjs +9 -5
- package/esm2022/lib/components/ng-list-item/const/index.mjs +2 -1
- package/esm2022/lib/components/ng-list-item/ng-virtual-list-item.component.mjs +14 -8
- package/esm2022/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.mjs +3 -3
- package/esm2022/lib/components/ng-scroll-bar/ng-scroll-bar.component.mjs +6 -6
- package/esm2022/lib/components/ng-scroll-view/const/index.mjs +2 -2
- package/esm2022/lib/components/ng-scroll-view/ng-scroll-view.component.mjs +24 -18
- package/esm2022/lib/components/ng-scroller/ng-scroller.component.mjs +6 -2
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/interfaces/index.mjs +2 -0
- package/esm2022/lib/components/ng-scroller/utils/scroll-box.mjs +1 -1
- package/esm2022/lib/const/index.mjs +6 -3
- package/esm2022/lib/core/track-box.mjs +31 -9
- package/esm2022/lib/directives/virtual-click/virtual-click.directive.mjs +35 -16
- package/esm2022/lib/models/display-object-config.model.mjs +1 -1
- package/esm2022/lib/ng-virtual-list.component.mjs +43 -11
- package/esm2022/lib/ng-virtual-list.service.mjs +31 -2
- package/esm2022/lib/utils/animator/animator.mjs +31 -8
- package/fesm2022/ng-virtual-list.mjs +223 -76
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +1 -1
- package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +3 -1
- package/lib/components/ng-scroll-view/const/index.d.ts +1 -1
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +5 -2
- package/lib/components/ng-scroller/ng-scroller.component.d.ts +1 -1
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-metrics.d.ts +11 -0
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-params.d.ts +19 -0
- package/lib/components/ng-scroller/utils/interfaces/calculate-scroll-position-params.d.ts +10 -0
- package/lib/components/ng-scroller/utils/interfaces/index.d.ts +4 -0
- package/lib/components/ng-scroller/utils/scroll-box.d.ts +1 -18
- package/lib/const/index.d.ts +3 -1
- package/lib/directives/virtual-click/virtual-click.directive.d.ts +11 -6
- package/lib/models/display-object-config.model.d.ts +4 -0
- package/lib/ng-virtual-list.component.d.ts +2 -1
- package/lib/ng-virtual-list.service.d.ts +13 -0
- package/lib/utils/animator/animator.d.ts +10 -2
- 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: "16.2.12", ngImpo
|
|
|
428
457
|
providedIn: 'root'
|
|
429
458
|
}]
|
|
430
459
|
}], ctorParameters: function () { return []; } });
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFFLHlCQUF5QixFQUM1RyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw2QkFBNkIsRUFBRSxjQUFjLEVBQy9HLHNCQUFzQixHQUN2QixNQUFNLFNBQVMsQ0FBQztBQUVqQixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7QUFHdEU7Ozs7Ozs7R0FPRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDckIsYUFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFdEMsR0FBRyxHQUFXLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsS0FBSyxPQUFPLElB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QUM7SUFFRDs7UUFFSTtJQUNKLFFBQVEsQ0FBQyxFQUFNLEVBQUUsS0FBMEIsSUFBSSxFQUFFLFVBQWlDLElBQUk7UUFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE9BQXdCO1FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxPQUF3QjtRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO3dHQTVkVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRyYWNrQm94IH0gZnJvbSAnLi9jb3JlL3RyYWNrLWJveCc7XHJcbmltcG9ydCB7IFRyYWNrQm94RXZlbnRzIH0gZnJvbSAnLi9jb3JlL2V2ZW50cyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IElBbmltYXRpb25QYXJhbXMsIElSZWN0LCBJU2Nyb2xsT3B0aW9ucywgSVNpemUgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uIH0gZnJvbSAnLi9tb2RlbHMvcmVuZGVyLWNvbGxlY3Rpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudHMsIFRleHREaXJlY3Rpb25zIH0gZnJvbSAnLi9lbnVtcyc7XHJcbmltcG9ydCB7IFRleHREaXJlY3Rpb24gfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgU2VsZWN0aW5nTW9kZXNUeXBlcyB9IGZyb20gJy4vZW51bXMvc2VsZWN0aW5nLW1vZGVzLXR5cGVzJztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVMsIERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UsIERFRkFVTFRfQ09MTEFQU0VfQllfQ0xJQ0ssXHJcbiAgREVGQVVMVF9JVEVNX1NJWkUsIERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLLCBERUZBVUxUX1NOQVBfVE9fSVRFTSwgREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkcsIElURU1fQ09OVEFJTkVSLFxyXG4gIFRSQUNLX0JZX1BST1BFUlRZX05BTUUsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IEZvY3VzQWxpZ25tZW50LCBJZCB9IGZyb20gJy4vdHlwZXMnO1xyXG5pbXBvcnQgeyBnZXRMaXN0RWxlbWVudHMsIE5HVkxfSU5ERVggfSBmcm9tICcuL2NvbXBvbmVudHMvbmctbGlzdC1pdGVtL3V0aWxzJztcclxuaW1wb3J0IHsgRm9jdXNJdGVtUGFyYW1zIH0gZnJvbSAnLi90eXBlcy9mb2N1cy1pdGVtLXBhcmFtcyc7XHJcbmltcG9ydCB7IHZhbGlkYXRlRm9jdXNBbGlnbm1lbnQsIHZhbGlkYXRlSWQgfSBmcm9tICcuL3V0aWxzL2xpc3QtdmFsaWRhdG9ycyc7XHJcbmltcG9ydCB7IGdldFNlbGVjdG9yQnlJdGVtSWQgfSBmcm9tICcuL3V0aWxzL2dldC1zZWxlY3Rvci1ieS1pdGVtLWlkJztcclxuaW1wb3J0IHsgSVNjcm9sbFRvUGFyYW1zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Njcm9sbC10by1wYXJhbXMnO1xyXG5cclxuLyoqXHJcbiAqIE5nVmlydHVhbExpc3RTZXJ2aWNlXHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbmctdmlydHVhbC1saXN0LnNlcnZpY2UudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ1ZpcnR1YWxMaXN0U2VydmljZSB7XHJcbiAgcHJvdGVjdGVkIF8kdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIF9pZDogbnVtYmVyID0gMDtcclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cclxuICBwcml2YXRlIF9uZXh0Q29tcG9uZW50SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgXyR2aXJ0dWFsQ2xpY2sgPSBuZXcgU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RJdGVtPGFueT4gfCBudWxsPigpO1xyXG4gICR2aXJ0dWFsQ2xpY2sgPSB0aGlzLl8kdmlydHVhbENsaWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2VsZWN0ZWRJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PElkPiB8IElkIHwgbnVsbD4obnVsbCk7XHJcbiAgJHNlbGVjdGVkSWRzID0gdGhpcy5fJHNlbGVjdGVkSWRzLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY29sbGFwc2VkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4+KFtdKTtcclxuICAkY29sbGFwc2VkSWRzID0gdGhpcy5fJGNvbGxhcHNlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGluZ01vZGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGluZ01vZGVzVHlwZXM+KDApO1xyXG4gICRzZWxlY3RpbmdNb2RlID0gdGhpcy5fJHNlbGVjdGluZ01vZGUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHNldCBzZWxlY3RpbmdNb2RlKHY6IFNlbGVjdGluZ01vZGVzVHlwZXMpIHtcclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNlZElkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJZCB8IG51bGw+KG51bGwpO1xyXG4gICRmb2N1c2VkSWQgPSB0aGlzLl8kZm9jdXNlZElkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHNldCBmb2N1c2VkSWQodjogSWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fJGZvY3VzZWRJZC5nZXRWYWx1ZSgpICE9PSB2KSB7XHJcbiAgICAgIHRoaXMuXyRmb2N1c2VkSWQubmV4dCh2KTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IGZvY3VzZWRJZCgpIHsgcmV0dXJuIHRoaXMuXyRmb2N1c2VkSWQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZm9jdXNJdGVtID0gbmV3IFN1YmplY3Q8Rm9jdXNJdGVtUGFyYW1zPigpO1xyXG4gIHJlYWRvbmx5ICRmb2N1c0l0ZW0gPSB0aGlzLl8kZm9jdXNJdGVtLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG8gPSBuZXcgU3ViamVjdDxJU2Nyb2xsVG9QYXJhbXMgfCB1bmRlZmluZWQ+KCk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbFRvID0gdGhpcy5fJHNjcm9sbFRvLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9TdGFydCA9IG5ldyBTdWJqZWN0PElTY3JvbGxPcHRpb25zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUb1N0YXJ0ID0gdGhpcy5fJHNjcm9sbFRvU3RhcnQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzY3JvbGxUb0VuZCA9IG5ldyBTdWJqZWN0PElTY3JvbGxPcHRpb25zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUb0VuZCA9IHRoaXMuXyRzY3JvbGxUb0VuZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHRpY2sgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5ICR0aWNrID0gdGhpcy5fJHRpY2suYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjYWNoZVZlcnNpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xyXG4gIHJlYWRvbmx5ICRjYWNoZVZlcnNpb24gPSB0aGlzLl8kY2FjaGVWZXJzaW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICB0cmFja0J5OiBzdHJpbmcgPSBUUkFDS19CWV9QUk9QRVJUWV9OQU1FO1xyXG5cclxuICBsYXN0Rm9jdXNlZEl0ZW1JZDogbnVtYmVyID0gLTE7XHJcblxyXG4gIHNjcm9sbFN0YXJ0T2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICBzY3JvbGxFbmRPZmZzZXQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHpJbmRleFdoZW5TZWxlY3Rpbmc6IHN0cmluZyB8IG51bGwgPSBERUZBVUxUX1pJTkRFWF9XSEVOX1NFTEVDVElORztcclxuXHJcbiAgc2VsZWN0QnlDbGljazogYm9vbGVhbiA9IERFRkFVTFRfU0VMRUNUX0JZX0NMSUNLO1xyXG5cclxuICBjb2xsYXBzZUJ5Q2xpY2s6IGJvb2xlYW4gPSBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLO1xyXG5cclxuICBkZWZhdWx0SXRlbVZhbHVlOiBJVmlydHVhbExpc3RJdGVtIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHNuYXBUb0l0ZW06IGJvb2xlYW4gPSBERUZBVUxUX1NOQVBfVE9fSVRFTTtcclxuXHJcbiAgaXNJbmZpbml0eTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1ZlcnRpY2FsOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgZHluYW1pYzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGl0ZW1TaXplOiBudW1iZXIgPSBERUZBVUxUX0lURU1fU0laRTtcclxuXHJcbiAgc25hcFNjcm9sbFRvU3RhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc25hcFNjcm9sbFRvRW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGFuaW1hdGlvblBhcmFtczogSUFuaW1hdGlvblBhcmFtcyA9IERFRkFVTFRfQU5JTUFUSU9OX1BBUkFNUztcclxuXHJcbiAgaXNOb25lQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNNdWx0aXBsZUNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzQWNjb3JkaW9uQ29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3g6IFRyYWNrQm94IHwgdW5kZWZpbmVkO1xyXG5cclxuICBsaXN0RWxlbWVudDogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgaXRlbXM6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gPSBbXTtcclxuXHJcbiAgaXRlbUNvbmZpZ01hcDogSVZpcnR1YWxMaXN0SXRlbUNvbmZpZ01hcCA9IHt9O1xyXG5cclxuICBwcml2YXRlIF8kZGlzcGxheUl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uPihbXSk7XHJcbiAgcmVhZG9ubHkgJGRpc3BsYXlJdGVtcyA9IHRoaXMuXyRkaXNwbGF5SXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGRpc3BsYXlJdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRkaXNwbGF5SXRlbXMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9jb2xsZWN0aW9uOiBJUmVuZGVyVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcbiAgc2V0IGNvbGxlY3Rpb24odjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuX2NvbGxlY3Rpb24gPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2NvbGxlY3Rpb24gPSB2O1xyXG5cclxuICAgIHRoaXMuXyRkaXNwbGF5SXRlbXMubmV4dCh2KTtcclxuICB9XHJcbiAgZ2V0IGNvbGxlY3Rpb24oKSB7IHJldHVybiB0aGlzLl9jb2xsZWN0aW9uOyB9XHJcblxyXG4gIHByaXZhdGUgXyRsYW5nVGV4dERpciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGV4dERpcmVjdGlvbj4oVGV4dERpcmVjdGlvbnMuTFRSKTtcclxuICByZWFkb25seSAkbGFuZ1RleHREaXIgPSB0aGlzLl8kbGFuZ1RleHREaXIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGxhbmdUZXh0RGlyKCkgeyByZXR1cm4gdGhpcy5fJGxhbmdUZXh0RGlyLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbGFuZ1RleHREaXI6IFRleHREaXJlY3Rpb24gPSBUZXh0RGlyZWN0aW9ucy5MVFI7XHJcbiAgc2V0IGxhbmdUZXh0RGlyKHY6IFRleHREaXJlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl9sYW5nVGV4dERpciA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fbGFuZ1RleHREaXIgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRsYW5nVGV4dERpci5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcm9sbEJhclNpemUoKSB7IHJldHVybiB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3Njcm9sbEJhclNpemU6IG51bWJlciA9IDA7XHJcbiAgc2V0IHNjcm9sbEJhclNpemUodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fc2Nyb2xsQmFyU2l6ZSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2Nyb2xsQmFyU2l6ZSA9IHY7XHJcblxyXG4gICAgdGhpcy5fJHNjcm9sbEJhclNpemUubmV4dCh2KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfJHNjcm9sbEJhclNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5fc2Nyb2xsQmFyU2l6ZSk7XHJcbiAgcmVhZG9ubHkgJHNjcm9sbEJhclNpemUgPSB0aGlzLl8kc2Nyb2xsQmFyU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSAkaW50ZXJzZWN0aW9uRWxlbWVudEJ5U25hcFRvSXRlbUFsaWduID0gdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNsaWNrRGlzdGFuY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9DTElDS19ESVNUQU5DRSk7XHJcbiAgcmVhZG9ubHkgJGNsaWNrRGlzdGFuY2UgPSB0aGlzLl8kY2xpY2tEaXN0YW5jZS5hc09ic2VydmFibGUoKTtcclxuICBnZXQgY2xpY2tEaXN0YW5jZSgpIHsgcmV0dXJuIHRoaXMuXyRjbGlja0Rpc3RhbmNlLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xpY2tEaXN0YW5jZTogbnVtYmVyID0gREVGQVVMVF9DTElDS19ESVNUQU5DRTtcclxuICBzZXQgY2xpY2tEaXN0YW5jZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9jbGlja0Rpc3RhbmNlID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jbGlja0Rpc3RhbmNlID0gdjtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tEaXN0YW5jZS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25UaWNrSGFuZGxlciA9ICgpID0+IHtcclxuICAgIHRoaXMuXyR0aWNrLm5leHQoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIF9vblRyYWNrQm94Q2hhbmdlSGFuZGxlciA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIHRoaXMuXyRjYWNoZVZlcnNpb24ubmV4dCh2KTtcclxuICB9O1xyXG5cclxuICBzZXQgc2VsZWN0ZWRJZHMoaWRzOiBBcnJheTxJZD4gfCBJZCB8IG51bGwpIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKSkgIT09IEpTT04uc3RyaW5naWZ5KGlkcykpIHtcclxuICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoaWRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHNldCBjb2xsYXBzZWRJZHMoaWRzOiBBcnJheTxJZD4pIHtcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeSh0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChpZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbGxhcHNlZElkcygpIHsgcmV0dXJuIHRoaXMuXyRjb2xsYXBzZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgY3VyciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB2aXJ0dWFsQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIHRoaXMuXyR2aXJ0dWFsQ2xpY2submV4dChkYXRhKTtcclxuICAgIGlmICh0aGlzLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmNvbGxhcHNlKGlkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3QoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94Py5jaGFuZ2VzKGltbWVkaWF0ZWx5LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1Db25maWcoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmRpc3BsYXlJdGVtcztcclxuICAgIGlmICghIWRpc3BsYXlJdGVtcykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICByZXR1cm4gZGlzcGxheUl0ZW1zLmZpbmQoZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgX2lkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIF9pZCA9PT0gaWQ7XHJcbiAgICAgIH0pPy5jb25maWcgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAqIEBwYXJhbSBpZCBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChpZDogSWQsIHNlbGVjdGVkPzogYm9vbGVhbikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuc2VsZWN0YWJsZSkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBpZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChzZWxlY3RlZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlKGlkOiBJZCwgY29sbGFwc2VkPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNOb25lQ29sbGFwc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLmNvbGxhcHNhYmxlKSkge1xyXG4gICAgICBjb25zdCBhbGxHcm91cHM6IEFycmF5PElkPiA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBpdGVtQ29uZmlnTWFwID0gdGhpcy5pdGVtQ29uZmlnTWFwLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5jb2xsYXBzYWJsZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghY29sbGFwc2FibGUpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbGxHcm91cHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyID0gdGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlID8gYWxsR3JvdXBzIDogWy4uLih0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICBpZiAoIWNvbGxhcHNlZCkge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICAgIGlkLCBjYjogbnVsbCwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBkZWxheTogMTAwLCBmb2N1c2VkOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRTZWxlY3RvckJ5SXRlbUlkKGlkKSk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihgLiR7SVRFTV9DT05UQUlORVJ9YCk7XHJcbiAgICAgIGlmICghIWZvY3VzZWRFbCkge1xyXG4gICAgICAgIHJldHVybiBmb2N1c2VkRWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3g/LmdldEl0ZW1Cb3VuZHMoaWQpID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1c0J5SWQoaWQ6IElkLCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuTk9ORSwgc2Nyb2xsQmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVGb2N1c0FsaWdubWVudChhbGlnbik7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWwsIGFsaWduLCBzY3JvbGxCZWhhdmlvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTyk6IGJvb2xlYW4ge1xyXG4gICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICBpZiAoISFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBwYXJzZUZsb2F0KGVsZW1lbnQucGFyZW50RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpID8/ICcwJyk7XHJcbiAgICAgIHRoaXMuXyRmb2N1c0l0ZW0ubmV4dCh7IGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNMaXN0KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnQ7XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNGaXJzdEVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KGdldExpc3RFbGVtZW50cygpKSxcclxuICAgICAgZWxMaXN0ID0gKGVsZW1lbnRzID8gQXJyYXkuZnJvbShlbGVtZW50cykgOiBbXSkuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4QSA9IE51bWJlcihhLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSksIGluZGV4QiA9IE51bWJlcihiLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgICAgaWYgKGluZGV4QSA+IGluZGV4QikgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4QikgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBlbCA9IGVsTGlzdFtpXSwgaW5kZXggPSBOdW1iZXIoZWwuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgaWYgKCEhZWwgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWxlbWVudCwgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgQkVIQVZJT1JfSU5TVEFOVCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKGlkOiBudW1iZXIsIHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlRJQ0ssIHRoaXMuX29uVGlja0hhbmRsZXIpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBtYXhQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbiwgbWF4UG9zaXRpb24pID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24oaWQ6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSAhPT0gaWQpIHtcclxuICAgICAgdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5uZXh0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBjYiwgb3B0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9TdGFydC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IHNpemUuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9FbmQubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fJHVuc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
460
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUNMLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUIsRUFDNUcsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsb0JBQW9CLEVBQUUsNkJBQTZCLEVBQUUsY0FBYyxFQUMvRyxzQkFBc0IsR0FDdkIsTUFBTSxTQUFTLENBQUM7QUFFakIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7O0FBR3RFOzs7Ozs7O0dBT0c7QUFJSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ3JCLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXRDLEdBQUcsR0FBVyxDQUFDLENBQUM7SUFDeEIs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QyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMvQjtJQUNILENBQUM7d0dBNWdCVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzs0RkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL2ludGVybmFsL0JlaGF2aW9yU3ViamVjdCc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBTdWJqZWN0LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUcmFja0JveCB9IGZyb20gJy4vY29yZS90cmFjay1ib3gnO1xyXG5pbXBvcnQgeyBUcmFja0JveEV2ZW50cyB9IGZyb20gJy4vY29yZS9ldmVudHMnO1xyXG5pbXBvcnQgeyBJUmVuZGVyVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RDb2xsZWN0aW9uLCBJVmlydHVhbExpc3RJdGVtLCBJVmlydHVhbExpc3RJdGVtQ29uZmlnTWFwIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJQW5pbWF0aW9uUGFyYW1zLCBJUmVjdCwgSVNjcm9sbE9wdGlvbnMsIElTaXplIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRm9jdXNBbGlnbm1lbnRzLCBUZXh0RGlyZWN0aW9ucyB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBUZXh0RGlyZWN0aW9uIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IFNlbGVjdGluZ01vZGVzVHlwZXMgfSBmcm9tICcuL2VudW1zL3NlbGVjdGluZy1tb2Rlcy10eXBlcyc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfQVVUTywgQkVIQVZJT1JfSU5TVEFOVCwgREVGQVVMVF9BTklNQVRJT05fUEFSQU1TLCBERUZBVUxUX0NMSUNLX0RJU1RBTkNFLCBERUZBVUxUX0NPTExBUFNFX0JZX0NMSUNLLFxyXG4gIERFRkFVTFRfSVRFTV9TSVpFLCBERUZBVUxUX1NFTEVDVF9CWV9DTElDSywgREVGQVVMVF9TTkFQX1RPX0lURU0sIERFRkFVTFRfWklOREVYX1dIRU5fU0VMRUNUSU5HLCBJVEVNX0NPTlRBSU5FUixcclxuICBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBGb2N1c0FsaWdubWVudCwgSWQgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgZ2V0TGlzdEVsZW1lbnRzLCBOR1ZMX0lOREVYIH0gZnJvbSAnLi9jb21wb25lbnRzL25nLWxpc3QtaXRlbS91dGlscyc7XHJcbmltcG9ydCB7IEZvY3VzSXRlbVBhcmFtcyB9IGZyb20gJy4vdHlwZXMvZm9jdXMtaXRlbS1wYXJhbXMnO1xyXG5pbXBvcnQgeyB2YWxpZGF0ZUZvY3VzQWxpZ25tZW50LCB2YWxpZGF0ZUlkIH0gZnJvbSAnLi91dGlscy9saXN0LXZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBnZXRTZWxlY3RvckJ5SXRlbUlkIH0gZnJvbSAnLi91dGlscy9nZXQtc2VsZWN0b3ItYnktaXRlbS1pZCc7XHJcbmltcG9ydCB7IElTY3JvbGxUb1BhcmFtcyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zY3JvbGwtdG8tcGFyYW1zJztcclxuXHJcbi8qKlxyXG4gKiBOZ1ZpcnR1YWxMaXN0U2VydmljZVxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5zZXJ2aWNlLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdFNlcnZpY2Uge1xyXG4gIHByb3RlY3RlZCBfJHVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IDA7XHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBfbmV4dENvbXBvbmVudElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF8kdmlydHVhbENsaWNrID0gbmV3IFN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0SXRlbTxhbnk+IHwgbnVsbD4oKTtcclxuICAkdmlydHVhbENsaWNrID0gdGhpcy5fJHZpcnR1YWxDbGljay5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNlbGVjdGVkSWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxJZD4gfCBJZCB8IG51bGw+KG51bGwpO1xyXG4gICRzZWxlY3RlZElkcyA9IHRoaXMuXyRzZWxlY3RlZElkcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJGNvbGxhcHNlZElkcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8SWQ+PihbXSk7XHJcbiAgJGNvbGxhcHNlZElkcyA9IHRoaXMuXyRjb2xsYXBzZWRJZHMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzZWxlY3RpbmdNb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3RpbmdNb2Rlc1R5cGVzPigwKTtcclxuICAkc2VsZWN0aW5nTW9kZSA9IHRoaXMuXyRzZWxlY3RpbmdNb2RlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzZXQgc2VsZWN0aW5nTW9kZSh2OiBTZWxlY3RpbmdNb2Rlc1R5cGVzKSB7XHJcbiAgICB0aGlzLl8kc2VsZWN0aW5nTW9kZS5uZXh0KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzZWRJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SWQgfCBudWxsPihudWxsKTtcclxuICAkZm9jdXNlZElkID0gdGhpcy5fJGZvY3VzZWRJZC5hc09ic2VydmFibGUoKTtcclxuICBzZXQgZm9jdXNlZElkKHY6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRmb2N1c2VkSWQuZ2V0VmFsdWUoKSAhPT0gdikge1xyXG4gICAgICB0aGlzLl8kZm9jdXNlZElkLm5leHQodik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCBmb2N1c2VkSWQoKSB7IHJldHVybiB0aGlzLl8kZm9jdXNlZElkLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGZvY3VzSXRlbSA9IG5ldyBTdWJqZWN0PEZvY3VzSXRlbVBhcmFtcz4oKTtcclxuICByZWFkb25seSAkZm9jdXNJdGVtID0gdGhpcy5fJGZvY3VzSXRlbS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvID0gbmV3IFN1YmplY3Q8SVNjcm9sbFRvUGFyYW1zIHwgdW5kZWZpbmVkPigpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxUbyA9IHRoaXMuXyRzY3JvbGxUby5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNjcm9sbFRvU3RhcnQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9TdGFydCA9IHRoaXMuXyRzY3JvbGxUb1N0YXJ0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kc2Nyb2xsVG9FbmQgPSBuZXcgU3ViamVjdDxJU2Nyb2xsT3B0aW9ucyB8IHVuZGVmaW5lZD4oKTtcclxuICByZWFkb25seSAkc2Nyb2xsVG9FbmQgPSB0aGlzLl8kc2Nyb2xsVG9FbmQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyR0aWNrID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICByZWFkb25seSAkdGljayA9IHRoaXMuXyR0aWNrLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICByZWFkb25seSAkY2FjaGVWZXJzaW9uID0gdGhpcy5fJGNhY2hlVmVyc2lvbi5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgdHJhY2tCeTogc3RyaW5nID0gVFJBQ0tfQllfUFJPUEVSVFlfTkFNRTtcclxuXHJcbiAgbGFzdEZvY3VzZWRJdGVtSWQ6IG51bWJlciA9IC0xO1xyXG5cclxuICBzY3JvbGxTdGFydE9mZnNldDogbnVtYmVyID0gMDtcclxuXHJcbiAgc2Nyb2xsRW5kT2Zmc2V0OiBudW1iZXIgPSAwO1xyXG5cclxuICB6SW5kZXhXaGVuU2VsZWN0aW5nOiBzdHJpbmcgfCBudWxsID0gREVGQVVMVF9aSU5ERVhfV0hFTl9TRUxFQ1RJTkc7XHJcblxyXG4gIHNlbGVjdEJ5Q2xpY2s6IGJvb2xlYW4gPSBERUZBVUxUX1NFTEVDVF9CWV9DTElDSztcclxuXHJcbiAgY29sbGFwc2VCeUNsaWNrOiBib29sZWFuID0gREVGQVVMVF9DT0xMQVBTRV9CWV9DTElDSztcclxuXHJcbiAgZGVmYXVsdEl0ZW1WYWx1ZTogSVZpcnR1YWxMaXN0SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBzbmFwVG9JdGVtOiBib29sZWFuID0gREVGQVVMVF9TTkFQX1RPX0lURU07XHJcblxyXG4gIGlzSW5maW5pdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNWZXJ0aWNhbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGR5bmFtaWM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBpdGVtU2l6ZTogbnVtYmVyID0gREVGQVVMVF9JVEVNX1NJWkU7XHJcblxyXG4gIHNuYXBTY3JvbGxUb1N0YXJ0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNuYXBTY3JvbGxUb0VuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBhbmltYXRpb25QYXJhbXM6IElBbmltYXRpb25QYXJhbXMgPSBERUZBVUxUX0FOSU1BVElPTl9QQVJBTVM7XHJcblxyXG4gIGlzTm9uZUNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzTXVsdGlwbGVDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0FjY29yZGlvbkNvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3RyYWNrQm94OiBUcmFja0JveCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgbGlzdEVsZW1lbnQ6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGl0ZW1zOiBJVmlydHVhbExpc3RDb2xsZWN0aW9uID0gW107XHJcblxyXG4gIGl0ZW1Db25maWdNYXA6IElWaXJ0dWFsTGlzdEl0ZW1Db25maWdNYXAgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBfJGRpc3BsYXlJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbj4oW10pO1xyXG4gIHJlYWRvbmx5ICRkaXNwbGF5SXRlbXMgPSB0aGlzLl8kZGlzcGxheUl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBkaXNwbGF5SXRlbXMoKSB7IHJldHVybiB0aGlzLl8kZGlzcGxheUl0ZW1zLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY29sbGVjdGlvbjogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiA9IFtdO1xyXG4gIHNldCBjb2xsZWN0aW9uKHY6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl9jb2xsZWN0aW9uID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb2xsZWN0aW9uID0gdjtcclxuXHJcbiAgICB0aGlzLl8kZGlzcGxheUl0ZW1zLm5leHQodik7XHJcbiAgfVxyXG4gIGdldCBjb2xsZWN0aW9uKCkgeyByZXR1cm4gdGhpcy5fY29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kbGFuZ1RleHREaXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRleHREaXJlY3Rpb24+KFRleHREaXJlY3Rpb25zLkxUUik7XHJcbiAgcmVhZG9ubHkgJGxhbmdUZXh0RGlyID0gdGhpcy5fJGxhbmdUZXh0RGlyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIGdldCBsYW5nVGV4dERpcigpIHsgcmV0dXJuIHRoaXMuXyRsYW5nVGV4dERpci5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2xhbmdUZXh0RGlyOiBUZXh0RGlyZWN0aW9uID0gVGV4dERpcmVjdGlvbnMuTFRSO1xyXG4gIHNldCBsYW5nVGV4dERpcih2OiBUZXh0RGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fbGFuZ1RleHREaXIgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2xhbmdUZXh0RGlyID0gdjtcclxuXHJcbiAgICB0aGlzLl8kbGFuZ1RleHREaXIubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRncmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRncmFiYmluZyA9IHRoaXMuXyRncmFiYmluZy5hc09ic2VydmFibGUoKTtcclxuICBnZXQgZ3JhYmJpbmcoKSB7IHJldHVybiB0aGlzLl8kZ3JhYmJpbmcuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9ncmFiYmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNldCBncmFiYmluZyh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fZ3JhYmJpbmcgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2dyYWJiaW5nID0gdjtcclxuXHJcbiAgICB0aGlzLl8kZ3JhYmJpbmcubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja1ByZXNzZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICByZWFkb25seSAkY2xpY2tQcmVzc2VkID0gdGhpcy5fJGNsaWNrUHJlc3NlZC5hc09ic2VydmFibGUoKTtcclxuICBnZXQgY2xpY2tQcmVzc2VkKCkgeyByZXR1cm4gdGhpcy5fJGNsaWNrUHJlc3NlZC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNldCBjbGlja1ByZXNzZWQodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX2NsaWNrUHJlc3NlZCA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xpY2tQcmVzc2VkID0gdjtcclxuXHJcbiAgICB0aGlzLl8kY2xpY2tQcmVzc2VkLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaXNHcmFiYmluZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHJlYWRvbmx5ICRpc0dyYWJiaW5nID0gdGhpcy5fJGlzR3JhYmJpbmcuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGlzR3JhYmJpbmcoKSB7IHJldHVybiB0aGlzLl8kaXNHcmFiYmluZy5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIGdldCBzY3JvbGxCYXJTaXplKCkgeyByZXR1cm4gdGhpcy5fJHNjcm9sbEJhclNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9zY3JvbGxCYXJTaXplOiBudW1iZXIgPSAwO1xyXG4gIHNldCBzY3JvbGxCYXJTaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX3Njcm9sbEJhclNpemUgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3Njcm9sbEJhclNpemUgPSB2O1xyXG5cclxuICAgIHRoaXMuXyRzY3JvbGxCYXJTaXplLm5leHQodik7XHJcbiAgfVxyXG4gIHByaXZhdGUgXyRzY3JvbGxCYXJTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KHRoaXMuX3Njcm9sbEJhclNpemUpO1xyXG4gIHJlYWRvbmx5ICRzY3JvbGxCYXJTaXplID0gdGhpcy5fJHNjcm9sbEJhclNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElkIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbiA9IHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgXyRjbGlja0Rpc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0UpO1xyXG4gIHJlYWRvbmx5ICRjbGlja0Rpc3RhbmNlID0gdGhpcy5fJGNsaWNrRGlzdGFuY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgZ2V0IGNsaWNrRGlzdGFuY2UoKSB7IHJldHVybiB0aGlzLl8kY2xpY2tEaXN0YW5jZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2NsaWNrRGlzdGFuY2U6IG51bWJlciA9IERFRkFVTFRfQ0xJQ0tfRElTVEFOQ0U7XHJcbiAgc2V0IGNsaWNrRGlzdGFuY2UodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fY2xpY2tEaXN0YW5jZSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fY2xpY2tEaXN0YW5jZSA9IHY7XHJcblxyXG4gICAgdGhpcy5fJGNsaWNrRGlzdGFuY2UubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uVGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLl8kdGljay5uZXh0KCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveENoYW5nZUhhbmRsZXIgPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLl8kY2FjaGVWZXJzaW9uLm5leHQodik7XHJcbiAgfTtcclxuXHJcbiAgc2V0IHNlbGVjdGVkSWRzKGlkczogQXJyYXk8SWQ+IHwgSWQgfCBudWxsKSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkpICE9PSBKU09OLnN0cmluZ2lmeShpZHMpKSB7XHJcbiAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGlkcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0ZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBzZXQgY29sbGFwc2VkSWRzKGlkczogQXJyYXk8SWQ+KSB7XHJcbiAgICBpZiAoSlNPTi5zdHJpbmdpZnkodGhpcy5fJGNvbGxhcHNlZElkcy5nZXRWYWx1ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoaWRzKSkge1xyXG4gICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoaWRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBjb2xsYXBzZWRJZHMoKSB7IHJldHVybiB0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBjb25zdCAkZ3JhYmJpbmcgPSB0aGlzLiRncmFiYmluZy5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5fJHVuc3Vic2NyaWJlKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICksICRjbGlja1ByZXNzZWQgPSB0aGlzLiRjbGlja1ByZXNzZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICApO1xyXG4gICAgY29tYmluZUxhdGVzdChbJGdyYWJiaW5nLCAkY2xpY2tQcmVzc2VkXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuXyR1bnN1YnNjcmliZSksXHJcbiAgICAgIHRhcCgoW2dyYWJiaW5nLCBjbGlja1ByZXNzZWRdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fJGlzR3JhYmJpbmcubmV4dChncmFiYmluZyAmJiAhY2xpY2tQcmVzc2VkKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuXyRzZWxlY3RpbmdNb2RlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLl8kdW5zdWJzY3JpYmUpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgc3dpdGNoICh2KSB7XHJcbiAgICAgICAgICBjYXNlIFNlbGVjdGluZ01vZGVzVHlwZXMuU0VMRUNUOiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnIgPSB0aGlzLl8kc2VsZWN0ZWRJZHMuZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgY3VyciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5NVUxUSV9TRUxFQ1Q6IHtcclxuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhc2UgU2VsZWN0aW5nTW9kZXNUeXBlcy5OT05FOlxyXG4gICAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChudWxsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICB2aXJ0dWFsQ2xpY2soZGF0YTogSVJlbmRlclZpcnR1YWxMaXN0SXRlbSB8IG51bGwpIHtcclxuICAgIHRoaXMuXyR2aXJ0dWFsQ2xpY2submV4dChkYXRhKTtcclxuICAgIGlmICh0aGlzLmNvbGxhcHNlQnlDbGljaykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5LCBpZCA9IChkYXRhIGFzIGFueSk/Llt0cmFja0J5XSA/PyBudWxsO1xyXG4gICAgICB0aGlzLmNvbGxhcHNlKGlkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdEJ5Q2xpY2spIHtcclxuICAgICAgY29uc3QgdHJhY2tCeSA9IHRoaXMudHJhY2tCeSwgaWQgPSAoZGF0YSBhcyBhbnkpPy5bdHJhY2tCeV0gPz8gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3QoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGltbWVkaWF0ZWx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94Py5jaGFuZ2VzKGltbWVkaWF0ZWx5LCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW1Db25maWcoaWQ6IElkKSB7XHJcbiAgICBjb25zdCBkaXNwbGF5SXRlbXMgPSB0aGlzLmRpc3BsYXlJdGVtcztcclxuICAgIGlmICghIWRpc3BsYXlJdGVtcykge1xyXG4gICAgICBjb25zdCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICByZXR1cm4gZGlzcGxheUl0ZW1zLmZpbmQoZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3QgX2lkID0gKGRhdGEgYXMgYW55KT8uW3RyYWNrQnldID8/IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIF9pZCA9PT0gaWQ7XHJcbiAgICAgIH0pPy5jb25maWcgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhIGxpc3QgaXRlbVxyXG4gICAqIEBwYXJhbSBpZCBcclxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgLSBJZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSB0b2dnbGUgbWV0aG9kIGlzIGV4ZWN1dGVkLCBpZiBmYWxzZSBvciB0cnVlLCB0aGVuIHRoZSBzZWxlY3Rpb24vZGVzZWxlY3Rpb24gaXMgcGVyZm9ybWVkLlxyXG4gICAqL1xyXG4gIHNlbGVjdChpZDogSWQsIHNlbGVjdGVkPzogYm9vbGVhbikge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldEl0ZW1Db25maWcoaWQpO1xyXG4gICAgaWYgKCghIWNvbmZpZyAmJiBjb25maWcuc2VsZWN0YWJsZSkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLl8kc2VsZWN0aW5nTW9kZS5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLlNFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IHRoaXMuXyRzZWxlY3RlZElkcy5nZXRWYWx1ZSgpIGFzIChJZCB8IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChjdXJyICE9PSBpZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2VsZWN0ZWRJZHMubmV4dChzZWxlY3RlZCA/IGlkIDogbnVsbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk1VTFRJX1NFTEVDVDoge1xyXG4gICAgICAgICAgY29uc3QgY3VyciA9IFsuLi4odGhpcy5fJHNlbGVjdGVkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgICAgIGluZGV4ID0gY3Vyci5pbmRleE9mKGlkKTtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQoWy4uLmN1cnIsIGlkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuXyRzZWxlY3RlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBTZWxlY3RpbmdNb2Rlc1R5cGVzLk5PTkU6XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgdGhpcy5fJHNlbGVjdGVkSWRzLm5leHQobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogQ29sbGFwc2UgbGlzdCBpdGVtc1xyXG4gICAgKiBAcGFyYW0gZGF0YSBcclxuICAgICogQHBhcmFtIGNvbGxhcHNlZCAtIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIHRvZ2dsZSBtZXRob2QgaXMgZXhlY3V0ZWQsIGlmIGZhbHNlIG9yIHRydWUsIHRoZW4gdGhlIGNvbGxhcHNlL2V4cGFuZCBpcyBwZXJmb3JtZWQuXHJcbiAgICAqL1xyXG4gIGNvbGxhcHNlKGlkOiBJZCwgY29sbGFwc2VkPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuaXNOb25lQ29sbGFwc2UpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5nZXRJdGVtQ29uZmlnKGlkKTtcclxuICAgIGlmICgoISFjb25maWcgJiYgY29uZmlnLmNvbGxhcHNhYmxlKSkge1xyXG4gICAgICBjb25zdCBhbGxHcm91cHM6IEFycmF5PElkPiA9IFtdO1xyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBpdGVtQ29uZmlnTWFwID0gdGhpcy5pdGVtQ29uZmlnTWFwLCB0cmFja0J5ID0gdGhpcy50cmFja0J5O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gaXRlbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV0sIGlkID0gaXRlbVt0cmFja0J5XSwgY29sbGFwc2FibGUgPSBpdGVtQ29uZmlnTWFwPy5baWRdPy5jb2xsYXBzYWJsZSA9PT0gdHJ1ZTtcclxuICAgICAgICAgIGlmICghY29sbGFwc2FibGUpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhbGxHcm91cHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyID0gdGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlID8gYWxsR3JvdXBzIDogWy4uLih0aGlzLl8kY29sbGFwc2VkSWRzLmdldFZhbHVlKCkgfHwgW10pIGFzIEFycmF5PElkPl0sXHJcbiAgICAgICAgaW5kZXggPSBjdXJyLmluZGV4T2YoaWQpO1xyXG4gICAgICBpZiAoIWNvbGxhcHNlZCkge1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICBjdXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChbLi4uY3VyciwgaWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sbGFwc2VkKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMuXyRjb2xsYXBzZWRJZHMubmV4dChjdXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KFsuLi5jdXJyLCBpZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY3Vyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5fJGNvbGxhcHNlZElkcy5uZXh0KGN1cnIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl8kY29sbGFwc2VkSWRzLm5leHQoY3Vycik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0FjY29yZGlvbkNvbGxhcHNlKSB7XHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFRvLm5leHQoe1xyXG4gICAgICAgICAgaWQsIGNiOiBudWxsLCBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGRlbGF5OiAxMDAsIGZvY3VzZWQ6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuXyRzY3JvbGxUby5uZXh0KHtcclxuICAgICAgICAgIGlkLCBjYjogbnVsbCwgb3B0aW9uczoge1xyXG4gICAgICAgICAgICBkZWxheTogMTAwLCBmb2N1c2VkOiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkOiBJZCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLmxpc3RFbGVtZW50Py5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihnZXRTZWxlY3RvckJ5SXRlbUlkKGlkKSk7XHJcbiAgICBpZiAoISFlbCkge1xyXG4gICAgICBjb25zdCBmb2N1c2VkRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihgLiR7SVRFTV9DT05UQUlORVJ9YCk7XHJcbiAgICAgIGlmICghIWZvY3VzZWRFbCkge1xyXG4gICAgICAgIHJldHVybiBmb2N1c2VkRWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgYm91bmRzIG9mIGFuIGVsZW1lbnQgd2l0aCBhIGdpdmVuIGlkXHJcbiAgICovXHJcbiAgZ2V0SXRlbUJvdW5kcyhpZDogSWQpOiBJU2l6ZSB8IG51bGwge1xyXG4gICAgdmFsaWRhdGVJZChpZCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhY2tCb3g/LmdldEl0ZW1Cb3VuZHMoaWQpID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb2N1cyBhbiBsaXN0IGl0ZW0gYnkgYSBnaXZlbiBpZC5cclxuICAgKi9cclxuICBmb2N1c0J5SWQoaWQ6IElkLCBhbGlnbjogRm9jdXNBbGlnbm1lbnQgPSBGb2N1c0FsaWdubWVudHMuTk9ORSwgc2Nyb2xsQmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpIHtcclxuICAgIHZhbGlkYXRlSWQoaWQpO1xyXG4gICAgdmFsaWRhdGVGb2N1c0FsaWdubWVudChhbGlnbik7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZ2V0Rm9jdXNlZEVsZW1lbnRCeUlkKGlkKTtcclxuICAgIGlmICghIWVsKSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWwsIGFsaWduLCBzY3JvbGxCZWhhdmlvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCwgYWxpZ246IEZvY3VzQWxpZ25tZW50ID0gRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTyk6IGJvb2xlYW4ge1xyXG4gICAgZWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XHJcbiAgICBpZiAoISFlbGVtZW50LnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBwYXJzZUZsb2F0KGVsZW1lbnQucGFyZW50RWxlbWVudD8uZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpID8/ICcwJyk7XHJcbiAgICAgIHRoaXMuXyRmb2N1c0l0ZW0ubmV4dCh7IGVsZW1lbnQsIHBvc2l0aW9uLCBhbGlnbiwgYmVoYXZpb3IgfSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNMaXN0KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMubGlzdEVsZW1lbnQ7XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIGVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXNGaXJzdEVsZW1lbnQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMubGlzdEVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KGdldExpc3RFbGVtZW50cygpKSxcclxuICAgICAgZWxMaXN0ID0gKGVsZW1lbnRzID8gQXJyYXkuZnJvbShlbGVtZW50cykgOiBbXSkuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4QSA9IE51bWJlcihhLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSksIGluZGV4QiA9IE51bWJlcihiLmdldEF0dHJpYnV0ZShOR1ZMX0lOREVYKSk7XHJcbiAgICAgICAgaWYgKGluZGV4QSA+IGluZGV4QikgcmV0dXJuIDE7XHJcbiAgICAgICAgaWYgKGluZGV4QSA8IGluZGV4QikgcmV0dXJuIC0xO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgICB9KTtcclxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZWxMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBlbCA9IGVsTGlzdFtpXSwgaW5kZXggPSBOdW1iZXIoZWwuZ2V0QXR0cmlidXRlKE5HVkxfSU5ERVgpKTtcclxuICAgICAgaWYgKCEhZWwgJiYgaW5kZXggPiAwKSB7XHJcbiAgICAgICAgZWxlbWVudCA9IGVsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISFlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZm9jdXMoZWxlbWVudCwgRm9jdXNBbGlnbm1lbnRzLkNFTlRFUiwgQkVIQVZJT1JfSU5TVEFOVCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplKGlkOiBudW1iZXIsIHRyYWNrQm94OiBUcmFja0JveCkge1xyXG4gICAgdGhpcy5faWQgPSBpZDtcclxuICAgIHRoaXMuX3RyYWNrQm94ID0gdHJhY2tCb3g7XHJcbiAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRyYWNrQm94RXZlbnRzLlRJQ0ssIHRoaXMuX29uVGlja0hhbmRsZXIpO1xyXG4gICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUcmFja0JveEV2ZW50cy5DSEFOR0UsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlQ29tcG9uZW50SWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmV4dENvbXBvbmVudElkID0gdGhpcy5fbmV4dENvbXBvbmVudElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiB0aGlzLl9uZXh0Q29tcG9uZW50SWQgKyAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBtYXhQb3NpdGlvbjogbnVtYmVyIHwgbnVsbCA9IG51bGwpOiAoSVJlY3QgJiB7IGlkOiBJZCB8IG51bGw7IGlzRmlyc3Q6IGJvb2xlYW47IGlzTGFzdDogYm9vbGVhbjsgfSkgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveD8uZ2V0Q29tcG9uZW50Qm91bmRzQnlJbnRlcnNlY3Rpb25Qb3NpdGlvbihwb3NpdGlvbiwgbWF4UG9zaXRpb24pID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24oaWQ6IElkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuXyRpbnRlcnNlY3Rpb25FbGVtZW50QnlTbmFwVG9JdGVtQWxpZ24uZ2V0VmFsdWUoKSAhPT0gaWQpIHtcclxuICAgICAgdGhpcy5fJGludGVyc2VjdGlvbkVsZW1lbnRCeVNuYXBUb0l0ZW1BbGlnbi5uZXh0KGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAgKiBUaGUgbWV0aG9kIHNjcm9sbHMgdGhlIGxpc3QgdG8gdGhlIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gYGlkYCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgY2I6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsLCBvcHRpb25zOiBJU2Nyb2xsT3B0aW9ucyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG8ubmV4dCh7IGlkLCBjYiwgb3B0aW9ucyB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjb2xsZWN0aW9uLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvU3RhcnQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9TdGFydC5uZXh0KG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZW5kIG9mIHRoZSBjb250ZW50IHNpemUuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQob3B0aW9ucz86IElTY3JvbGxPcHRpb25zKSB7XHJcbiAgICB0aGlzLl8kc2Nyb2xsVG9FbmQubmV4dChvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fJHVuc3Vic2NyaWJlKSB7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuXyR1bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -9,18 +9,32 @@ 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
|
+
updateTo(value) {
|
|
24
|
+
this._endValue = value;
|
|
25
|
+
this._diff = this._endValue - this._startValue;
|
|
26
|
+
return this.hasAnimation();
|
|
27
|
+
}
|
|
17
28
|
animate(params) {
|
|
18
29
|
this.stop();
|
|
19
30
|
const id = this.generateId();
|
|
20
31
|
this._currentId = id;
|
|
21
32
|
const { withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete, } = params;
|
|
33
|
+
this._startValue = startValue;
|
|
34
|
+
this._endValue = endValue;
|
|
22
35
|
const startTime = performance.now();
|
|
23
|
-
let isCanceled = false, prevPos = startValue,
|
|
36
|
+
let isCanceled = false, prevPos = startValue, startPosDelta = 0, delta = 0, prevTime = startTime, isFinished = false;
|
|
37
|
+
this._diff = this._endValue - this._startValue;
|
|
24
38
|
const step = (currentTime) => {
|
|
25
39
|
if (id !== this._currentId) {
|
|
26
40
|
isCanceled = true;
|
|
@@ -34,10 +48,10 @@ export class Animator {
|
|
|
34
48
|
startDelta = cPos - prevPos;
|
|
35
49
|
startPosDelta += startDelta;
|
|
36
50
|
}
|
|
37
|
-
const elapsed = currentTime - startTime, progress =
|
|
51
|
+
const elapsed = currentTime - startTime, progress = this._startValue === 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
52
|
isFinished = progress === 1;
|
|
39
53
|
delta = currentValue - startDelta - prevPos;
|
|
40
|
-
const
|
|
54
|
+
const frameTimestamp = t - prevTime, actualFrameTimestamp = frameTimestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : frameTimestamp;
|
|
41
55
|
prevTime = t;
|
|
42
56
|
prevPos = currentValue;
|
|
43
57
|
if (onUpdate !== undefined) {
|
|
@@ -46,18 +60,19 @@ export class Animator {
|
|
|
46
60
|
delta,
|
|
47
61
|
elapsed,
|
|
48
62
|
value: !withDelta && isFinished ? endValue : currentValue,
|
|
49
|
-
timestamp,
|
|
63
|
+
timestamp: actualFrameTimestamp,
|
|
50
64
|
};
|
|
51
65
|
onUpdate(data);
|
|
52
66
|
}
|
|
53
67
|
if (isFinished) {
|
|
68
|
+
this._animationId = -1;
|
|
54
69
|
if (onComplete !== undefined) {
|
|
55
70
|
const data = {
|
|
56
71
|
id,
|
|
57
72
|
delta,
|
|
58
73
|
elapsed,
|
|
59
74
|
value: withDelta ? currentValue : endValue,
|
|
60
|
-
timestamp,
|
|
75
|
+
timestamp: actualFrameTimestamp,
|
|
61
76
|
};
|
|
62
77
|
onComplete(data);
|
|
63
78
|
}
|
|
@@ -67,12 +82,20 @@ export class Animator {
|
|
|
67
82
|
}
|
|
68
83
|
};
|
|
69
84
|
this._animationId = requestAnimationFrame(step);
|
|
85
|
+
return this._currentId;
|
|
86
|
+
}
|
|
87
|
+
hasAnimation(id = -1) {
|
|
88
|
+
if ((this._currentId === id || id === -1) && this.animated) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
70
92
|
}
|
|
71
|
-
stop() {
|
|
72
|
-
cancelAnimationFrame(this._animationId);
|
|
93
|
+
stop(id = -1) {
|
|
94
|
+
cancelAnimationFrame(id === -1 ? this._animationId : id);
|
|
95
|
+
this._animationId = -1;
|
|
73
96
|
}
|
|
74
97
|
dispose() {
|
|
75
98
|
this.stop();
|
|
76
99
|
}
|
|
77
100
|
}
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUV6QixVQUFVLEdBQVcsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUV0QyxVQUFVO1FBQ2hCLE9BQU8sUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0I7WUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFWixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFckIsTUFBTSxFQUNKLFNBQVMsR0FBRyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsR0FBRywwQkFBMEIsRUFDM0YsWUFBWSxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsR0FDaEUsR0FBRyxNQUFNLENBQUM7UUFFWCxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxVQUFV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QUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBTklNQVRPUl9NSU5fVElNRVNUQU1QLCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiwgREVGQVVMVF9XSVRIX0RFTFRBIH0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IGVhc2VMaW5lYXIgfSBmcm9tICcuL2Vhc2UnO1xyXG5pbXBvcnQgeyBJQW5pbWF0b3JQYXJhbXMsIElBbmltYXRvclVwZGF0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xyXG5cclxuLyoqXHJcbiAqIEFuaW1hdG9yXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iL21haW4vbGlicmFyeS9zcmMvdXRpbHMvYW5pbWF0b3IvYW5pbWF0b3IudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEFsZXhhbmRyb3ZpY2ggR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0b3Ige1xyXG4gIHByaXZhdGUgc3RhdGljIF9uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2FuaW1hdGlvbklkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50SWQ6IG51bWJlciA9IEFuaW1hdG9yLl9uZXh0SWQ7XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVJZCgpIHtcclxuICAgIHJldHVybiBBbmltYXRvci5fbmV4dElkID0gQW5pbWF0b3IuX25leHRJZCA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogQW5pbWF0b3IuX25leHRJZCArIDE7XHJcbiAgfVxyXG5cclxuICBhbmltYXRlKHBhcmFtczogSUFuaW1hdG9yUGFyYW1zKSB7XHJcbiAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVJZCgpO1xyXG4gICAgdGhpcy5fY3VycmVudElkID0gaWQ7XHJcblxyXG4gICAgY29uc3Qge1xyXG4gICAgICB3aXRoRGVsdGEgPSBERUZBVUxUX1dJVEhfREVMVEEsIHN0YXJ0VmFsdWUsIGVuZFZhbHVlLCBkdXJhdGlvbiA9IERFRkFVTFRfQU5JTUFUSU9OX0RVUkFUSU9OLFxyXG4gICAgICBnZXRQcm9wVmFsdWUsIGVhc2luZ0Z1bmN0aW9uID0gZWFzZUxpbmVhciwgb25VcGRhdGUsIG9uQ29tcGxldGUsXHJcbiAgICB9ID0gcGFyYW1zO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG4gICAgbGV0IGlzQ2FuY2VsZWQgPSBmYWxzZSwgcHJldlBvcyA9IHN0YXJ0VmFsdWUsIHN0YXJ0ID0gc3RhcnRWYWx1ZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsXHJcbiAgICAgIGRpZmYgPSBlbmRWYWx1ZSAtIHN0YXJ0LCBpc0ZpbmlzaGVkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudElkKSB7XHJcbiAgICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBnZXRQcm9wVmFsdWU/LigpIHx8IDA7XHJcbiAgICAgIGxldCBzdGFydERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICBzdGFydERlbHRhID0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzdGFydERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSBzdGFydCA9PT0gZW5kVmFsdWUgPyAxIDogTWF0aC5taW4oZHVyYXRpb24gPiAwID8gZWxhcHNlZCAvIGR1cmF0aW9uIDogMCwgMSksXHJcbiAgICAgICAgZWFzZWRQcm9ncmVzcyA9IGVhc2luZ0Z1bmN0aW9uKHByb2dyZXNzKSxcclxuICAgICAgICB2YWwgPSAod2l0aERlbHRhID8gc3RhcnRQb3NEZWx0YSA6IDApICsgc3RhcnQgKyBkaWZmICogZWFzZWRQcm9ncmVzcyxcclxuICAgICAgICBjdXJyZW50VmFsdWUgPSB2YWwsXHJcbiAgICAgICAgdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgICAgaXNGaW5pc2hlZCA9IHByb2dyZXNzID09PSAxO1xyXG5cclxuICAgICAgZGVsdGEgPSBjdXJyZW50VmFsdWUgLSBzdGFydERlbHRhIC0gcHJldlBvcztcclxuXHJcbiAgICAgIGNvbnN0IHRzID0gdCAtIHByZXZUaW1lLCB0aW1lc3RhbXAgPSB0cyA8IEFOSU1BVE9SX01JTl9USU1FU1RBTVAgPyBBTklNQVRPUl9NSU5fVElNRVNUQU1QIDogdHM7XHJcblxyXG4gICAgICBwcmV2VGltZSA9IHQ7XHJcbiAgICAgIHByZXZQb3MgPSBjdXJyZW50VmFsdWU7XHJcblxyXG4gICAgICBpZiAob25VcGRhdGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgIHZhbHVlOiAhd2l0aERlbHRhICYmIGlzRmluaXNoZWQgPyBlbmRWYWx1ZSA6IGN1cnJlbnRWYWx1ZSxcclxuICAgICAgICAgIHRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uVXBkYXRlKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIGlmIChvbkNvbXBsZXRlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGE6IElBbmltYXRvclVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICBkZWx0YSxcclxuICAgICAgICAgICAgZWxhcHNlZCxcclxuICAgICAgICAgICAgdmFsdWU6IHdpdGhEZWx0YSA/IGN1cnJlbnRWYWx1ZSA6IGVuZFZhbHVlLFxyXG4gICAgICAgICAgICB0aW1lc3RhbXAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb25Db21wbGV0ZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRpb25JZCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5pbWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi91dGlscy9hbmltYXRvci9hbmltYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsMEJBQTBCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUdwQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBQ1gsTUFBTSxDQUFDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFM0IsWUFBWSxHQUFXLENBQUMsQ0FBQztJQUVqQyxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZELFVBQVUsR0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBRTlDLElBQUksRUFBRSxLQUFLLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFFNUIsVUFBVTtRQUNoQixPQUFPLFFBQVEsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsZ0JBQWdCO1lBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWxCLFdBQVcsR0FBVyxDQUFDLENBQUM7SUFFeEIsU0FBUyxHQUFXLENBQUMsQ0FBQztJQUU5QixRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FB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LElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCwgREVGQVVMVF9BTklNQVRJT05fRFVSQVRJT04sIERFRkFVTFRfV0lUSF9ERUxUQSB9IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBlYXNlTGluZWFyIH0gZnJvbSAnLi9lYXNlJztcclxuaW1wb3J0IHsgSUFuaW1hdG9yUGFyYW1zLCBJQW5pbWF0b3JVcGRhdGVEYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcclxuXHJcbi8qKlxyXG4gKiBBbmltYXRvclxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi9tYWluL2xpYnJhcnkvc3JjL3V0aWxzL2FuaW1hdG9yL2FuaW1hdG9yLnRzXHJcbiAqIEBhdXRob3IgRXZnZW5paSBBbGV4YW5kcm92aWNoIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEFuaW1hdG9yIHtcclxuICBwcml2YXRlIHN0YXRpYyBfbmV4dElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBwcml2YXRlIF9hbmltYXRpb25JZDogbnVtYmVyID0gMDtcclxuXHJcbiAgZ2V0IGFuaW1hdGVkKCkgeyByZXR1cm4gdGhpcy5fYW5pbWF0aW9uSWQgPiAtMTsgfVxyXG5cclxuICBnZXQgaXNBbmltYXRlZCgpIHsgcmV0dXJuIHRoaXMuaGFzQW5pbWF0aW9uKHRoaXMuX2N1cnJlbnRJZCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudElkOiBudW1iZXIgPSBBbmltYXRvci5fbmV4dElkO1xyXG5cclxuICBnZXQgaWQoKSB7IHJldHVybiB0aGlzLl9jdXJyZW50SWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUlkKCkge1xyXG4gICAgcmV0dXJuIEFuaW1hdG9yLl9uZXh0SWQgPSBBbmltYXRvci5fbmV4dElkID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBBbmltYXRvci5fbmV4dElkICsgMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpZmY6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX3N0YXJ0VmFsdWU6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2VuZFZhbHVlOiBudW1iZXIgPSAwO1xyXG5cclxuICB1cGRhdGVUbyh2YWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLl9lbmRWYWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5fZGlmZiA9IHRoaXMuX2VuZFZhbHVlIC0gdGhpcy5fc3RhcnRWYWx1ZTtcclxuICAgIHJldHVybiB0aGlzLmhhc0FuaW1hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZShwYXJhbXM6IElBbmltYXRvclBhcmFtcykge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcblxyXG4gICAgY29uc3QgaWQgPSB0aGlzLmdlbmVyYXRlSWQoKTtcclxuICAgIHRoaXMuX2N1cnJlbnRJZCA9IGlkO1xyXG5cclxuICAgIGNvbnN0IHtcclxuICAgICAgd2l0aERlbHRhID0gREVGQVVMVF9XSVRIX0RFTFRBLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgZHVyYXRpb24gPSBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTixcclxuICAgICAgZ2V0UHJvcFZhbHVlLCBlYXNpbmdGdW5jdGlvbiA9IGVhc2VMaW5lYXIsIG9uVXBkYXRlLCBvbkNvbXBsZXRlLFxyXG4gICAgfSA9IHBhcmFtcztcclxuXHJcbiAgICB0aGlzLl9zdGFydFZhbHVlID0gc3RhcnRWYWx1ZTtcclxuICAgIHRoaXMuX2VuZFZhbHVlID0gZW5kVmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XHJcbiAgICBsZXQgaXNDYW5jZWxlZCA9IGZhbHNlLCBwcmV2UG9zID0gc3RhcnRWYWx1ZSwgc3RhcnRQb3NEZWx0YSA9IDAsIGRlbHRhID0gMCwgcHJldlRpbWUgPSBzdGFydFRpbWUsIGlzRmluaXNoZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuX2RpZmYgPSB0aGlzLl9lbmRWYWx1ZSAtIHRoaXMuX3N0YXJ0VmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc3RlcCA9IChjdXJyZW50VGltZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudElkKSB7XHJcbiAgICAgICAgaXNDYW5jZWxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghIWlzQ2FuY2VsZWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNQb3MgPSBnZXRQcm9wVmFsdWU/LigpIHx8IDA7XHJcbiAgICAgIGxldCBzdGFydERlbHRhID0gMDtcclxuICAgICAgaWYgKGNQb3MgIT09IHByZXZQb3MpIHtcclxuICAgICAgICBzdGFydERlbHRhID0gY1BvcyAtIHByZXZQb3M7XHJcbiAgICAgICAgc3RhcnRQb3NEZWx0YSArPSBzdGFydERlbHRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbGFwc2VkID0gY3VycmVudFRpbWUgLSBzdGFydFRpbWUsXHJcbiAgICAgICAgcHJvZ3Jlc3MgPSB0aGlzLl9zdGFydFZhbHVlID09PSBlbmRWYWx1ZSA/IDEgOiBNYXRoLm1pbihkdXJhdGlvbiA+IDAgPyBlbGFwc2VkIC8gZHVyYXRpb24gOiAwLCAxKSxcclxuICAgICAgICBlYXNlZFByb2dyZXNzID0gZWFzaW5nRnVuY3Rpb24ocHJvZ3Jlc3MpLFxyXG4gICAgICAgIHZhbCA9ICh3aXRoRGVsdGEgPyBzdGFydFBvc0RlbHRhIDogMCkgKyB0aGlzLl9zdGFydFZhbHVlICsgdGhpcy5fZGlmZiAqIGVhc2VkUHJvZ3Jlc3MsXHJcbiAgICAgICAgY3VycmVudFZhbHVlID0gdmFsLFxyXG4gICAgICAgIHQgPSBwZXJmb3JtYW5jZS5ub3coKTtcclxuXHJcbiAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcyA9PT0gMTtcclxuXHJcbiAgICAgIGRlbHRhID0gY3VycmVudFZhbHVlIC0gc3RhcnREZWx0YSAtIHByZXZQb3M7XHJcblxyXG4gICAgICBjb25zdCBmcmFtZVRpbWVzdGFtcCA9IHQgLSBwcmV2VGltZSxcclxuICAgICAgICBhY3R1YWxGcmFtZVRpbWVzdGFtcCA9IGZyYW1lVGltZXN0YW1wIDwgQU5JTUFUT1JfTUlOX1RJTUVTVEFNUCA/IEFOSU1BVE9SX01JTl9USU1FU1RBTVAgOiBmcmFtZVRpbWVzdGFtcDtcclxuXHJcbiAgICAgIHByZXZUaW1lID0gdDtcclxuICAgICAgcHJldlBvcyA9IGN1cnJlbnRWYWx1ZTtcclxuXHJcbiAgICAgIGlmIChvblVwZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogSUFuaW1hdG9yVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgZGVsdGEsXHJcbiAgICAgICAgICBlbGFwc2VkLFxyXG4gICAgICAgICAgdmFsdWU6ICF3aXRoRGVsdGEgJiYgaXNGaW5pc2hlZCA/IGVuZFZhbHVlIDogY3VycmVudFZhbHVlLFxyXG4gICAgICAgICAgdGltZXN0YW1wOiBhY3R1YWxGcmFtZVRpbWVzdGFtcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG9uVXBkYXRlKGRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNGaW5pc2hlZCkge1xyXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbklkID0gLTE7XHJcbiAgICAgICAgaWYgKG9uQ29tcGxldGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29uc3QgZGF0YTogSUFuaW1hdG9yVXBkYXRlRGF0YSA9IHtcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIGRlbHRhLFxyXG4gICAgICAgICAgICBlbGFwc2VkLFxyXG4gICAgICAgICAgICB2YWx1ZTogd2l0aERlbHRhID8gY3VycmVudFZhbHVlIDogZW5kVmFsdWUsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogYWN0dWFsRnJhbWVUaW1lc3RhbXAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb25Db21wbGV0ZShkYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9hbmltYXRpb25JZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShzdGVwKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudElkO1xyXG4gIH1cclxuXHJcbiAgaGFzQW5pbWF0aW9uKGlkOiBudW1iZXIgPSAtMSkge1xyXG4gICAgaWYgKCh0aGlzLl9jdXJyZW50SWQgPT09IGlkIHx8IGlkID09PSAtMSkgJiYgdGhpcy5hbmltYXRlZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHN0b3AoaWQ6IG51bWJlciA9IC0xKSB7XHJcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShpZCA9PT0gLTEgPyB0aGlzLl9hbmltYXRpb25JZCA6IGlkKTtcclxuICAgIHRoaXMuX2FuaW1hdGlvbklkID0gLTE7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5zdG9wKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|