@fundamental-ngx/cx 0.38.3-rc.4 → 0.38.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 (73) hide show
  1. package/README.md +1 -1
  2. package/esm2020/fundamental-ngx.module.mjs +16 -0
  3. package/esm2020/public_api.mjs +2 -4
  4. package/fesm2015/fundamental-ngx-cx.mjs +4 -9
  5. package/fesm2015/fundamental-ngx-cx.mjs.map +1 -1
  6. package/fesm2020/fundamental-ngx-cx.mjs +4 -9
  7. package/fesm2020/fundamental-ngx-cx.mjs.map +1 -1
  8. package/fundamental-ngx-cx-v0.38.4.tgz +0 -0
  9. package/{fundamental-ngx-cx.module.d.ts → fundamental-ngx.module.d.ts} +1 -4
  10. package/package.json +4 -21
  11. package/public_api.d.ts +1 -3
  12. package/esm2020/fundamental-ngx-cx.module.mjs +0 -19
  13. package/esm2020/nested-list/fundamental-ngx-cx-nested-list.mjs +0 -5
  14. package/esm2020/nested-list/nested-content/nested-list-content.directive.mjs +0 -131
  15. package/esm2020/nested-list/nested-item/nested-item.component.mjs +0 -290
  16. package/esm2020/nested-list/nested-item/nested-item.interface.mjs +0 -2
  17. package/esm2020/nested-list/nested-item/nested-item.service.mjs +0 -15
  18. package/esm2020/nested-list/nested-link/nested-link.component.mjs +0 -151
  19. package/esm2020/nested-list/nested-list/nested-list.component.mjs +0 -191
  20. package/esm2020/nested-list/nested-list/nested-list.interface.mjs +0 -2
  21. package/esm2020/nested-list/nested-list-directives.mjs +0 -248
  22. package/esm2020/nested-list/nested-list-keyboard.service.mjs +0 -106
  23. package/esm2020/nested-list/nested-list-model.mjs +0 -2
  24. package/esm2020/nested-list/nested-list-popover/nested-list-popover.component.mjs +0 -87
  25. package/esm2020/nested-list/nested-list-popover/nested-list-popover.interface.mjs +0 -2
  26. package/esm2020/nested-list/nested-list-state.service.mjs +0 -24
  27. package/esm2020/nested-list/nested-list.module.mjs +0 -78
  28. package/esm2020/nested-list/prepared-nested-list/prepared-nested-list.component.mjs +0 -53
  29. package/esm2020/nested-list/public_api.mjs +0 -13
  30. package/esm2020/side-navigation/fundamental-ngx-cx-side-navigation.mjs +0 -5
  31. package/esm2020/side-navigation/public_api.mjs +0 -7
  32. package/esm2020/side-navigation/side-navigation-button.directive.mjs +0 -20
  33. package/esm2020/side-navigation/side-navigation-main.component.mjs +0 -45
  34. package/esm2020/side-navigation/side-navigation-model.mjs +0 -2
  35. package/esm2020/side-navigation/side-navigation-utility.directive.mjs +0 -25
  36. package/esm2020/side-navigation/side-navigation.component.mjs +0 -159
  37. package/esm2020/side-navigation/side-navigation.module.mjs +0 -41
  38. package/fesm2015/fundamental-ngx-cx-nested-list.mjs +0 -1306
  39. package/fesm2015/fundamental-ngx-cx-nested-list.mjs.map +0 -1
  40. package/fesm2015/fundamental-ngx-cx-side-navigation.mjs +0 -276
  41. package/fesm2015/fundamental-ngx-cx-side-navigation.mjs.map +0 -1
  42. package/fesm2020/fundamental-ngx-cx-nested-list.mjs +0 -1292
  43. package/fesm2020/fundamental-ngx-cx-nested-list.mjs.map +0 -1
  44. package/fesm2020/fundamental-ngx-cx-side-navigation.mjs +0 -275
  45. package/fesm2020/fundamental-ngx-cx-side-navigation.mjs.map +0 -1
  46. package/fundamental-ngx-cx-v0.38.3-rc.4.tgz +0 -0
  47. package/nested-list/README.md +0 -25
  48. package/nested-list/index.d.ts +0 -5
  49. package/nested-list/nested-content/nested-list-content.directive.d.ts +0 -58
  50. package/nested-list/nested-item/nested-item.component.d.ts +0 -111
  51. package/nested-list/nested-item/nested-item.interface.d.ts +0 -16
  52. package/nested-list/nested-item/nested-item.service.d.ts +0 -18
  53. package/nested-list/nested-link/nested-link.component.d.ts +0 -57
  54. package/nested-list/nested-list/nested-list.component.d.ts +0 -74
  55. package/nested-list/nested-list/nested-list.interface.d.ts +0 -8
  56. package/nested-list/nested-list-directives.d.ts +0 -101
  57. package/nested-list/nested-list-keyboard.service.d.ts +0 -43
  58. package/nested-list/nested-list-model.d.ts +0 -18
  59. package/nested-list/nested-list-popover/nested-list-popover.component.d.ts +0 -49
  60. package/nested-list/nested-list-popover/nested-list-popover.interface.d.ts +0 -7
  61. package/nested-list/nested-list-state.service.d.ts +0 -17
  62. package/nested-list/nested-list.module.d.ts +0 -18
  63. package/nested-list/prepared-nested-list/prepared-nested-list.component.d.ts +0 -31
  64. package/nested-list/public_api.d.ts +0 -12
  65. package/side-navigation/README.md +0 -25
  66. package/side-navigation/index.d.ts +0 -5
  67. package/side-navigation/public_api.d.ts +0 -6
  68. package/side-navigation/side-navigation-button.directive.d.ts +0 -7
  69. package/side-navigation/side-navigation-main.component.d.ts +0 -22
  70. package/side-navigation/side-navigation-model.d.ts +0 -6
  71. package/side-navigation/side-navigation-utility.directive.d.ts +0 -10
  72. package/side-navigation/side-navigation.component.d.ts +0 -72
  73. package/side-navigation/side-navigation.module.d.ts +0 -13
@@ -1,290 +0,0 @@
1
- import { ContentChild, Component, ElementRef, EventEmitter, HostBinding, Input, Output, forwardRef } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { filter, takeUntil } from 'rxjs/operators';
4
- import { NestedLinkComponent } from '../nested-link/nested-link.component';
5
- import { NestedListKeyboardService } from '../nested-list-keyboard.service';
6
- import { NestedListContentDirective } from '../nested-content/nested-list-content.directive';
7
- import { NestedListStateService } from '../nested-list-state.service';
8
- import { NestedItemService } from './nested-item.service';
9
- import { NestedListComponent } from '../nested-list/nested-list.component';
10
- import { NestedListExpandIconComponent } from '../nested-list-directives';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "./nested-item.service";
13
- import * as i2 from "../nested-list-keyboard.service";
14
- import * as i3 from "../nested-list-state.service";
15
- let sideNavigationItemUniqueId = 0;
16
- export class NestedItemComponent {
17
- /** @hidden */
18
- constructor(_itemService, _keyboardService, _stateService, elementRef) {
19
- this._itemService = _itemService;
20
- this._keyboardService = _keyboardService;
21
- this._stateService = _stateService;
22
- this.elementRef = elementRef;
23
- /** Event thrown, when expanded state is changed */
24
- this.expandedChange = new EventEmitter();
25
- /** Event thrown, when any keyboard event is dispatched on this, or link element */
26
- this.keyboardTriggered = new EventEmitter();
27
- /** @hidden */
28
- this.fdNestedListItemClass = true;
29
- /** Whether this item is a header item. */
30
- this.header = false;
31
- /** Whether this item is only meant for display purposes, meaning it cannot be used for navigation or shown as selected. */
32
- this.display = false;
33
- /** @hidden */
34
- this._ariaLevel = null;
35
- /** @hidden */
36
- this._display = 'block';
37
- /** @hidden */
38
- this._narrow = false;
39
- /** @hidden */
40
- this._expanded = false;
41
- /** @hidden */
42
- this._ariaExpanded = null;
43
- /** @hidden */
44
- this._ariaSelected = null;
45
- /** @hidden */
46
- this._ariaDisabled = false;
47
- /** @hidden */
48
- this._ariaHidden = true;
49
- /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */
50
- this._onDestroy$ = new Subject();
51
- /** Unique element ID */
52
- this._elementId = 'fdNestedItem' + sideNavigationItemUniqueId++;
53
- }
54
- /** Whether item should be expanded */
55
- set expanded(expanded) {
56
- if (expanded !== this._expanded) {
57
- this.propagateOpenChange(expanded);
58
- }
59
- }
60
- /** @hidden */
61
- get expanded() {
62
- return this._expanded;
63
- }
64
- /** @hidden */
65
- ngAfterContentInit() {
66
- this._setUpSubscriptions();
67
- this._propagateHasChildrenProperty();
68
- this._passItemReferences();
69
- /** Propagate initial open state to children */
70
- this.propagateOpenChange(this._expanded);
71
- if (this.linkItem) {
72
- this._ariaSelected = this.linkItem.selected;
73
- this._ariaDisabled = !this._stateService.selectable && !this.linkItem.selected;
74
- this._title = this.linkItem.getTitle();
75
- }
76
- }
77
- /** @hidden */
78
- ngOnDestroy() {
79
- this._onDestroy$.next();
80
- this._onDestroy$.complete();
81
- }
82
- /** Check if the item element has any child */
83
- get hasChildren() {
84
- return !!this._itemService?.list;
85
- }
86
- /** Get all of the children item elements */
87
- get allChildrenItems() {
88
- if (this._itemService?.list) {
89
- return this._itemService.list.nestedItems.toArray();
90
- }
91
- return [];
92
- }
93
- /** Method that expand the item and propagate it to children */
94
- triggerOpen() {
95
- if (!this.expanded) {
96
- /** Propagate initial open state to children */
97
- this.propagateOpenChange(true);
98
- }
99
- }
100
- /** Method that close the item and propagate it to children */
101
- triggerClose() {
102
- if (this.expanded) {
103
- /** Propagate initial open state to children */
104
- this.propagateOpenChange(false);
105
- }
106
- }
107
- /** Method that toggle the item and propagate it to children */
108
- toggle() {
109
- /** Propagate initial open state to children */
110
- this.propagateOpenChange(!this._expanded);
111
- }
112
- /** Method that dispatches `click` event on link item*/
113
- click() {
114
- if (!this.display) {
115
- if (this.contentItem) {
116
- this.contentItem.click();
117
- }
118
- else if (this.linkItem) {
119
- this.linkItem.click();
120
- }
121
- }
122
- }
123
- /** Method that focuses link item*/
124
- focus() {
125
- if (this.contentItem) {
126
- this.contentItem.focus();
127
- }
128
- else if (this.linkItem) {
129
- this.linkItem.focus();
130
- }
131
- }
132
- /** Method that provides information if element, or children of this element has passed id */
133
- containsId(id) {
134
- if (this._elementId === id) {
135
- return true;
136
- }
137
- if (this._itemService.list) {
138
- return !!this._itemService.list.nestedItems.find((item) => item.containsId(id));
139
- }
140
- return false;
141
- }
142
- /**
143
- * @hidden
144
- * Propagate open state to all of the children
145
- */
146
- propagateOpenChange(open) {
147
- this._expanded = open;
148
- if (this.hasChildren) {
149
- this._ariaExpanded = this._expanded;
150
- }
151
- this.expandIcon?.changeExpandedState(open);
152
- /** Propagate hidden flag to list component, that is passed from child */
153
- if (this._itemService.list) {
154
- this._itemService.list.hidden = !open;
155
- this._itemService.list.detectChanges();
156
- }
157
- /** Propagate open flag to popover list component, that is passed from child */
158
- if (this._itemService.popover) {
159
- this._itemService.popover.open = open;
160
- }
161
- /**
162
- * If there are any list below
163
- * Trigger event to provide keyboard support to new list of opened item element.
164
- * */
165
- if (this._shouldRefreshKeyboardService()) {
166
- this._keyboardService.refresh$.next();
167
- }
168
- this.expandedChange.emit(open);
169
- }
170
- /** @hidden */
171
- _shouldRefreshKeyboardService() {
172
- return !!(this._itemService.popover || this._itemService.list || this.contentItem);
173
- }
174
- /** @hidden */
175
- _setUpSubscriptions() {
176
- if (this._stateService.condensed) {
177
- this._role = 'menuitemradio';
178
- }
179
- if (!this.display) {
180
- /** Subscribe to mouse click event, thrown by link item */
181
- this._itemService.toggle.pipe(takeUntil(this._onDestroy$)).subscribe(() => this.toggle());
182
- /** Subscribe to mouse click event, thrown by link item */
183
- this._itemService.click
184
- .pipe(takeUntil(this._onDestroy$))
185
- .subscribe(() => this._stateService.onSelected.next(this._elementId));
186
- }
187
- /** Subscribe to keyboard event and throw it farther */
188
- this._itemService.keyDown
189
- .pipe(takeUntil(this._onDestroy$))
190
- .subscribe((keyboardEvent) => this.keyboardTriggered.emit(keyboardEvent));
191
- /** Subscribe to selected state change, it's not triggered, when selectable flag is disabled*/
192
- this._stateService.onSelected
193
- .pipe(takeUntil(this._onDestroy$), filter(() => this._stateService.selectable))
194
- .subscribe((id) => this._selectedChange(id));
195
- }
196
- /** @hidden */
197
- _propagateHasChildrenProperty() {
198
- if (this.contentItem && this.hasChildren) {
199
- this._ariaExpanded = false;
200
- this.contentItem.hasChildren = true;
201
- this.contentItem.changeDetRef.detectChanges();
202
- }
203
- }
204
- /** Pass this element to popover child item, to allow control `expanded` value */
205
- _passItemReferences() {
206
- if (this._itemService.popover) {
207
- this._itemService.popover.parentItemElement = this;
208
- }
209
- }
210
- /** Change of selected state of content or link, if there is any children with I */
211
- _selectedChange(id) {
212
- const selected = this.containsId(id);
213
- this._ariaSelected = selected;
214
- if (this.contentItem) {
215
- this.contentItem.changeSelected(selected);
216
- }
217
- else if (this.linkItem) {
218
- this.linkItem.changeSelected(selected);
219
- }
220
- }
221
- }
222
- NestedItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NestedItemComponent, deps: [{ token: i1.NestedItemService }, { token: i2.NestedListKeyboardService }, { token: i3.NestedListStateService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
223
- NestedItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: NestedItemComponent, selector: "[cxNestedItem], [fdx-nested-list-item], li[fdx-nested-list-item]", inputs: { expanded: "expanded", fdNestedListItemClass: "fdNestedListItemClass", header: "header", display: "display" }, outputs: { expandedChange: "expandedChange", keyboardTriggered: "keyboardTriggered" }, host: { properties: { "class.fdx-nested-list__item": "this.fdNestedListItemClass", "class.fdx-nested-list__item--header": "this.header", "attr.aria-level": "this._ariaLevel", "attr.title": "this._title", "style.display": "this._display", "attr.role": "this._role", "attr.aria-expanded": "this._ariaExpanded", "attr.aria-selected": "this._ariaSelected", "attr.aria-disabled": "this._ariaDisabled", "attr.aria-label": "this._ariaLabel", "attr.aria-hidden": "this._ariaHidden" } }, providers: [NestedItemService], queries: [{ propertyName: "linkItem", first: true, predicate: NestedLinkComponent, descendants: true }, { propertyName: "contentItem", first: true, predicate: NestedListContentDirective, descendants: true }, { propertyName: "expandIcon", first: true, predicate: NestedListExpandIconComponent, descendants: true }, { propertyName: "_nestedList", first: true, predicate: i0.forwardRef(function () { return NestedListComponent; }), descendants: true }], ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true });
224
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NestedItemComponent, decorators: [{
225
- type: Component,
226
- args: [{
227
- // eslint-disable-next-line @angular-eslint/component-selector
228
- selector: '[cxNestedItem], [fdx-nested-list-item], li[fdx-nested-list-item]',
229
- template: ` <ng-content></ng-content> `,
230
- providers: [NestedItemService]
231
- }]
232
- }], ctorParameters: function () { return [{ type: i1.NestedItemService }, { type: i2.NestedListKeyboardService }, { type: i3.NestedListStateService }, { type: i0.ElementRef }]; }, propDecorators: { expanded: [{
233
- type: Input
234
- }], expandedChange: [{
235
- type: Output
236
- }], keyboardTriggered: [{
237
- type: Output
238
- }], fdNestedListItemClass: [{
239
- type: Input
240
- }, {
241
- type: HostBinding,
242
- args: ['class.fdx-nested-list__item']
243
- }], header: [{
244
- type: Input
245
- }, {
246
- type: HostBinding,
247
- args: ['class.fdx-nested-list__item--header']
248
- }], display: [{
249
- type: Input
250
- }], linkItem: [{
251
- type: ContentChild,
252
- args: [NestedLinkComponent]
253
- }], contentItem: [{
254
- type: ContentChild,
255
- args: [NestedListContentDirective]
256
- }], expandIcon: [{
257
- type: ContentChild,
258
- args: [NestedListExpandIconComponent, { descendants: true }]
259
- }], _nestedList: [{
260
- type: ContentChild,
261
- args: [forwardRef(() => NestedListComponent)]
262
- }], _ariaLevel: [{
263
- type: HostBinding,
264
- args: ['attr.aria-level']
265
- }], _title: [{
266
- type: HostBinding,
267
- args: ['attr.title']
268
- }], _display: [{
269
- type: HostBinding,
270
- args: ['style.display']
271
- }], _role: [{
272
- type: HostBinding,
273
- args: ['attr.role']
274
- }], _ariaExpanded: [{
275
- type: HostBinding,
276
- args: ['attr.aria-expanded']
277
- }], _ariaSelected: [{
278
- type: HostBinding,
279
- args: ['attr.aria-selected']
280
- }], _ariaDisabled: [{
281
- type: HostBinding,
282
- args: ['attr.aria-disabled']
283
- }], _ariaLabel: [{
284
- type: HostBinding,
285
- args: ['attr.aria-label']
286
- }], _ariaHidden: [{
287
- type: HostBinding,
288
- args: ['attr.aria-hidden']
289
- }] } });
290
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jeC9zcmMvbGliL25lc3RlZC1saXN0L25lc3RlZC1pdGVtL25lc3RlZC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsWUFBWSxFQUNaLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRTFFLElBQUksMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0FBUW5DLE1BQU0sT0FBTyxtQkFBbUI7SUEwRzVCLGNBQWM7SUFDZCxZQUNZLFlBQStCLEVBQy9CLGdCQUEyQyxFQUMzQyxhQUFxQyxFQUN0QyxVQUFzQjtRQUhyQixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxrQkFBYSxH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QVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2lCQUNqQzs4TUFHZ0IsUUFBUTtzQkFBcEIsS0FBSztnQkFhRyxjQUFjO3NCQUR0QixNQUFNO2dCQUtFLGlCQUFpQjtzQkFEekIsTUFBTTtnQkFNUCxxQkFBcUI7c0JBRnBCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsNkJBQTZCO2dCQU0xQyxNQUFNO3NCQUZMLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMscUNBQXFDO2dCQUtsRCxPQUFPO3NCQUROLEtBQUs7Z0JBUU4sUUFBUTtzQkFEUCxZQUFZO3VCQUFDLG1CQUFtQjtnQkFTakMsV0FBVztzQkFEVixZQUFZO3VCQUFDLDBCQUEwQjtnQkFLeEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFLbEUsV0FBVztzQkFEVixZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFLbkQsVUFBVTtzQkFEVCxXQUFXO3VCQUFDLGlCQUFpQjtnQkFLOUIsTUFBTTtzQkFETCxXQUFXO3VCQUFDLFlBQVk7Z0JBS3pCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyxlQUFlO2dCQVFwQixLQUFLO3NCQURaLFdBQVc7dUJBQUMsV0FBVztnQkFRaEIsYUFBYTtzQkFEcEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBS3pCLGFBQWE7c0JBRHBCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQUt6QixhQUFhO3NCQURwQixXQUFXO3VCQUFDLG9CQUFvQjtnQkFLekIsVUFBVTtzQkFEakIsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBS3RCLFdBQVc7c0JBRGxCLFdBQVc7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE5lc3RlZExpbmtDb21wb25lbnQgfSBmcm9tICcuLi9uZXN0ZWQtbGluay9uZXN0ZWQtbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmVzdGVkTGlzdEtleWJvYXJkU2VydmljZSB9IGZyb20gJy4uL25lc3RlZC1saXN0LWtleWJvYXJkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmVzdGVkTGlzdENvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuLi9uZXN0ZWQtY29udGVudC9uZXN0ZWQtbGlzdC1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOZXN0ZWRMaXN0U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vbmVzdGVkLWxpc3Qtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZXN0ZWRJdGVtSW50ZXJmYWNlIH0gZnJvbSAnLi9uZXN0ZWQtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTmVzdGVkSXRlbVNlcnZpY2UgfSBmcm9tICcuL25lc3RlZC1pdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IE5lc3RlZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi9uZXN0ZWQtbGlzdC9uZXN0ZWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmVzdGVkTGlzdEV4cGFuZEljb25Db21wb25lbnQgfSBmcm9tICcuLi9uZXN0ZWQtbGlzdC1kaXJlY3RpdmVzJztcblxubGV0IHNpZGVOYXZpZ2F0aW9uSXRlbVVuaXF1ZUlkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tjeE5lc3RlZEl0ZW1dLCBbZmR4LW5lc3RlZC1saXN0LWl0ZW1dLCBsaVtmZHgtbmVzdGVkLWxpc3QtaXRlbV0nLFxuICAgIHRlbXBsYXRlOiBgIDxuZy1jb250ZW50PjwvbmctY29udGVudD4gYCxcbiAgICBwcm92aWRlcnM6IFtOZXN0ZWRJdGVtU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTmVzdGVkSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE5lc3RlZEl0ZW1JbnRlcmZhY2UsIE9uRGVzdHJveSB7XG4gICAgLyoqIFdoZXRoZXIgaXRlbSBzaG91bGQgYmUgZXhwYW5kZWQgKi9cbiAgICBASW5wdXQoKSBzZXQgZXhwYW5kZWQoZXhwYW5kZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGV4cGFuZGVkICE9PSB0aGlzLl9leHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVPcGVuQ2hhbmdlKGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBleHBhbmRlZCBzdGF0ZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgZXhwYW5kZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gYW55IGtleWJvYXJkIGV2ZW50IGlzIGRpc3BhdGNoZWQgb24gdGhpcywgb3IgbGluayBlbGVtZW50ICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkga2V5Ym9hcmRUcmlnZ2VyZWQ6IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkeC1uZXN0ZWQtbGlzdF9faXRlbScpXG4gICAgZmROZXN0ZWRMaXN0SXRlbUNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoaXMgaXRlbSBpcyBhIGhlYWRlciBpdGVtLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHgtbmVzdGVkLWxpc3RfX2l0ZW0tLWhlYWRlcicpXG4gICAgaGVhZGVyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIGl0ZW0gaXMgb25seSBtZWFudCBmb3IgZGlzcGxheSBwdXJwb3NlcywgbWVhbmluZyBpdCBjYW5ub3QgYmUgdXNlZCBmb3IgbmF2aWdhdGlvbiBvciBzaG93biBhcyBzZWxlY3RlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXkgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGxpbmsgZGlyZWN0aXZlLCB0byBhbGxvdyBtYW5pcHVsYXRpbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoTmVzdGVkTGlua0NvbXBvbmVudClcbiAgICBsaW5rSXRlbTogTmVzdGVkTGlua0NvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNb3N0bHkgdXNlZCwgd2hlbiB0aGlzIGl0ZW0gaGFzIGxpc3RcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbnRlbnQgZGlyZWN0aXZlLCB0byBhbGxvdyBtYW5pcHVsYXRpbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoTmVzdGVkTGlzdENvbnRlbnREaXJlY3RpdmUpXG4gICAgY29udGVudEl0ZW06IE5lc3RlZExpc3RDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKE5lc3RlZExpc3RFeHBhbmRJY29uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgZXhwYW5kSWNvbjogTmVzdGVkTGlzdEV4cGFuZEljb25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBOZXN0ZWRMaXN0Q29tcG9uZW50KSlcbiAgICBfbmVzdGVkTGlzdDogTmVzdGVkTGlzdENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKVxuICAgIF9hcmlhTGV2ZWw6IE51bGxhYmxlPG51bWJlcj4gPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGl0bGUnKVxuICAgIF90aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICAgIF9kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX25hcnJvdyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHJpdmF0ZSBfcm9sZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9leHBhbmRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgcHJpdmF0ZSBfYXJpYUV4cGFuZGVkOiBOdWxsYWJsZTxib29sZWFuPiA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBwcml2YXRlIF9hcmlhU2VsZWN0ZWQ6IE51bGxhYmxlPGJvb2xlYW4+ID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIHByaXZhdGUgX2FyaWFEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbCcpXG4gICAgcHJpdmF0ZSBfYXJpYUxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpXG4gICAgcHJpdmF0ZSBfYXJpYUhpZGRlbiA9IHRydWU7XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBVbmlxdWUgZWxlbWVudCBJRCAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRJZDogc3RyaW5nID0gJ2ZkTmVzdGVkSXRlbScgKyBzaWRlTmF2aWdhdGlvbkl0ZW1VbmlxdWVJZCsrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IE5lc3RlZEl0ZW1TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9rZXlib2FyZFNlcnZpY2U6IE5lc3RlZExpc3RLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3N0YXRlU2VydmljZTogTmVzdGVkTGlzdFN0YXRlU2VydmljZSxcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0VXBTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUhhc0NoaWxkcmVuUHJvcGVydHkoKTtcbiAgICAgICAgdGhpcy5fcGFzc0l0ZW1SZWZlcmVuY2VzKCk7XG4gICAgICAgIC8qKiBQcm9wYWdhdGUgaW5pdGlhbCBvcGVuIHN0YXRlIHRvIGNoaWxkcmVuICovXG4gICAgICAgIHRoaXMucHJvcGFnYXRlT3BlbkNoYW5nZSh0aGlzLl9leHBhbmRlZCk7XG5cbiAgICAgICAgaWYgKHRoaXMubGlua0l0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuX2FyaWFTZWxlY3RlZCA9IHRoaXMubGlua0l0ZW0uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB0aGlzLl9hcmlhRGlzYWJsZWQgPSAhdGhpcy5fc3RhdGVTZXJ2aWNlLnNlbGVjdGFibGUgJiYgIXRoaXMubGlua0l0ZW0uc2VsZWN0ZWQ7XG4gICAgICAgICAgICB0aGlzLl90aXRsZSA9IHRoaXMubGlua0l0ZW0uZ2V0VGl0bGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIENoZWNrIGlmIHRoZSBpdGVtIGVsZW1lbnQgaGFzIGFueSBjaGlsZCAqL1xuICAgIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5faXRlbVNlcnZpY2U/Lmxpc3Q7XG4gICAgfVxuXG4gICAgLyoqIEdldCBhbGwgb2YgdGhlIGNoaWxkcmVuIGl0ZW0gZWxlbWVudHMgKi9cbiAgICBnZXQgYWxsQ2hpbGRyZW5JdGVtcygpOiBOZXN0ZWRJdGVtSW50ZXJmYWNlW10ge1xuICAgICAgICBpZiAodGhpcy5faXRlbVNlcnZpY2U/Lmxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pdGVtU2VydmljZS5saXN0Lm5lc3RlZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgZXhwYW5kIHRoZSBpdGVtIGFuZCBwcm9wYWdhdGUgaXQgdG8gY2hpbGRyZW4gKi9cbiAgICB0cmlnZ2VyT3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAvKiogUHJvcGFnYXRlIGluaXRpYWwgb3BlbiBzdGF0ZSB0byBjaGlsZHJlbiAqL1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVPcGVuQ2hhbmdlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IGNsb3NlIHRoZSBpdGVtIGFuZCBwcm9wYWdhdGUgaXQgdG8gY2hpbGRyZW4gKi9cbiAgICB0cmlnZ2VyQ2xvc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAvKiogUHJvcGFnYXRlIGluaXRpYWwgb3BlbiBzdGF0ZSB0byBjaGlsZHJlbiAqL1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVPcGVuQ2hhbmdlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCB0b2dnbGUgdGhlIGl0ZW0gYW5kIHByb3BhZ2F0ZSBpdCB0byBjaGlsZHJlbiAqL1xuICAgIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICAgICAgLyoqIFByb3BhZ2F0ZSBpbml0aWFsIG9wZW4gc3RhdGUgdG8gY2hpbGRyZW4gKi9cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVPcGVuQ2hhbmdlKCF0aGlzLl9leHBhbmRlZCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IGRpc3BhdGNoZXMgYGNsaWNrYCBldmVudCBvbiBsaW5rIGl0ZW0qL1xuICAgIGNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzcGxheSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRJdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGlua0l0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtJdGVtLmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgZm9jdXNlcyBsaW5rIGl0ZW0qL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50SXRlbSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZW50SXRlbS5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGlua0l0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubGlua0l0ZW0uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBpZiBlbGVtZW50LCBvciBjaGlsZHJlbiBvZiB0aGlzIGVsZW1lbnQgaGFzIHBhc3NlZCBpZCAqL1xuICAgIGNvbnRhaW5zSWQoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudElkID09PSBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faXRlbVNlcnZpY2UubGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5faXRlbVNlcnZpY2UubGlzdC5uZXN0ZWRJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmNvbnRhaW5zSWQoaWQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUHJvcGFnYXRlIG9wZW4gc3RhdGUgdG8gYWxsIG9mIHRoZSBjaGlsZHJlblxuICAgICAqL1xuICAgIHByaXZhdGUgcHJvcGFnYXRlT3BlbkNoYW5nZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkID0gb3BlbjtcblxuICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fYXJpYUV4cGFuZGVkID0gdGhpcy5fZXhwYW5kZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cGFuZEljb24/LmNoYW5nZUV4cGFuZGVkU3RhdGUob3Blbik7XG5cbiAgICAgICAgLyoqIFByb3BhZ2F0ZSBoaWRkZW4gZmxhZyB0byBsaXN0IGNvbXBvbmVudCwgdGhhdCBpcyBwYXNzZWQgZnJvbSBjaGlsZCAqL1xuICAgICAgICBpZiAodGhpcy5faXRlbVNlcnZpY2UubGlzdCkge1xuICAgICAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UubGlzdC5oaWRkZW4gPSAhb3BlbjtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmxpc3QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFByb3BhZ2F0ZSBvcGVuIGZsYWcgdG8gcG9wb3ZlciBsaXN0IGNvbXBvbmVudCwgdGhhdCBpcyBwYXNzZWQgZnJvbSBjaGlsZCAqL1xuICAgICAgICBpZiAodGhpcy5faXRlbVNlcnZpY2UucG9wb3Zlcikge1xuICAgICAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UucG9wb3Zlci5vcGVuID0gb3BlbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGVyZSBhcmUgYW55IGxpc3QgYmVsb3dcbiAgICAgICAgICogVHJpZ2dlciBldmVudCB0byBwcm92aWRlIGtleWJvYXJkIHN1cHBvcnQgdG8gbmV3IGxpc3Qgb2Ygb3BlbmVkIGl0ZW0gZWxlbWVudC5cbiAgICAgICAgICogKi9cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZFJlZnJlc2hLZXlib2FyZFNlcnZpY2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRTZXJ2aWNlLnJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChvcGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFJlZnJlc2hLZXlib2FyZFNlcnZpY2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLl9pdGVtU2VydmljZS5wb3BvdmVyIHx8IHRoaXMuX2l0ZW1TZXJ2aWNlLmxpc3QgfHwgdGhpcy5jb250ZW50SXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9zdGF0ZVNlcnZpY2UuY29uZGVuc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9yb2xlID0gJ21lbnVpdGVtcmFkaW8nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmRpc3BsYXkpIHtcbiAgICAgICAgICAgIC8qKiBTdWJzY3JpYmUgdG8gbW91c2UgY2xpY2sgZXZlbnQsIHRocm93biBieSBsaW5rIGl0ZW0gKi9cbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnRvZ2dsZS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMudG9nZ2xlKCkpO1xuXG4gICAgICAgICAgICAvKiogU3Vic2NyaWJlIHRvIG1vdXNlIGNsaWNrIGV2ZW50LCB0aHJvd24gYnkgbGluayBpdGVtICovXG4gICAgICAgICAgICB0aGlzLl9pdGVtU2VydmljZS5jbGlja1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3N0YXRlU2VydmljZS5vblNlbGVjdGVkLm5leHQodGhpcy5fZWxlbWVudElkKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiogU3Vic2NyaWJlIHRvIGtleWJvYXJkIGV2ZW50IGFuZCB0aHJvdyBpdCBmYXJ0aGVyICovXG4gICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmtleURvd25cbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGtleWJvYXJkRXZlbnQpID0+IHRoaXMua2V5Ym9hcmRUcmlnZ2VyZWQuZW1pdChrZXlib2FyZEV2ZW50KSk7XG5cbiAgICAgICAgLyoqIFN1YnNjcmliZSB0byBzZWxlY3RlZCBzdGF0ZSBjaGFuZ2UsIGl0J3Mgbm90IHRyaWdnZXJlZCwgd2hlbiBzZWxlY3RhYmxlIGZsYWcgaXMgZGlzYWJsZWQqL1xuICAgICAgICB0aGlzLl9zdGF0ZVNlcnZpY2Uub25TZWxlY3RlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9zdGF0ZVNlcnZpY2Uuc2VsZWN0YWJsZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGlkKSA9PiB0aGlzLl9zZWxlY3RlZENoYW5nZShpZCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvcGFnYXRlSGFzQ2hpbGRyZW5Qcm9wZXJ0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGVudEl0ZW0gJiYgdGhpcy5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5fYXJpYUV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRJdGVtLmhhc0NoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEl0ZW0uY2hhbmdlRGV0UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBQYXNzIHRoaXMgZWxlbWVudCB0byBwb3BvdmVyIGNoaWxkIGl0ZW0sIHRvIGFsbG93IGNvbnRyb2wgYGV4cGFuZGVkYCB2YWx1ZSAqL1xuICAgIHByaXZhdGUgX3Bhc3NJdGVtUmVmZXJlbmNlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1TZXJ2aWNlLnBvcG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnBvcG92ZXIucGFyZW50SXRlbUVsZW1lbnQgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBvZiBzZWxlY3RlZCBzdGF0ZSBvZiBjb250ZW50IG9yIGxpbmssIGlmIHRoZXJlIGlzIGFueSBjaGlsZHJlbiB3aXRoIEkgKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZENoYW5nZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5jb250YWluc0lkKGlkKTtcbiAgICAgICAgdGhpcy5fYXJpYVNlbGVjdGVkID0gc2VsZWN0ZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGVudEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuY29udGVudEl0ZW0uY2hhbmdlU2VsZWN0ZWQoc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGlua0l0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMubGlua0l0ZW0uY2hhbmdlU2VsZWN0ZWQoc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWl0ZW0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jeC9zcmMvbGliL25lc3RlZC1saXN0L25lc3RlZC1pdGVtL25lc3RlZC1pdGVtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0TWVudUl0ZW0gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbWVudSc7XG5pbXBvcnQgeyBOZXN0ZWRMaW5rQ29tcG9uZW50IH0gZnJvbSAnLi4vbmVzdGVkLWxpbmsvbmVzdGVkLWxpbmsuY29tcG9uZW50JztcblxuLyoqIEludGVyZmFjZSwgdG8gcmVkdWNlIGFtb3VudCBvZiBjaXJjdWxhciBkZXBlbmRlbmN5IHdhcm5pbmdzICovXG5leHBvcnQgaW50ZXJmYWNlIE5lc3RlZEl0ZW1JbnRlcmZhY2UgZXh0ZW5kcyBEZWZhdWx0TWVudUl0ZW0ge1xuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuICAgIGtleWJvYXJkVHJpZ2dlcmVkOiBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRFdmVudD47XG4gICAgdHJpZ2dlck9wZW46ICgpID0+IHZvaWQ7XG4gICAgdHJpZ2dlckNsb3NlOiAoKSA9PiB2b2lkO1xuICAgIGxpbmtJdGVtOiBOZXN0ZWRMaW5rQ29tcG9uZW50O1xuICAgIGFsbENoaWxkcmVuSXRlbXM6IE5lc3RlZEl0ZW1JbnRlcmZhY2VbXTtcbiAgICBoYXNDaGlsZHJlbjogYm9vbGVhbjtcbiAgICBjb250YWluc0lkOiAoaWQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgICBjbGljazogKCkgPT4gdm9pZDtcbiAgICBmb2N1czogKCkgPT4gdm9pZDtcbn1cbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- /** Contains references to popover or list nested components, that are placed as direct children of item component */
3
- export class NestedItemService {
4
- constructor() {
5
- /** Subject fired when expand icon is clicked */
6
- this.toggle = new Subject();
7
- /** Subject fired, when child elements are focused */
8
- this.focus = new Subject();
9
- /** Subject fired, when content or link is clicked */
10
- this.click = new Subject();
11
- /** KeyDown handler, it is triggered from link, content and item elements */
12
- this.keyDown = new Subject();
13
- }
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWl0ZW0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY3gvc3JjL2xpYi9uZXN0ZWQtbGlzdC9uZXN0ZWQtaXRlbS9uZXN0ZWQtaXRlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IscUhBQXFIO0FBQ3JILE1BQU0sT0FBTyxpQkFBaUI7SUFBOUI7UUFNSSxnREFBZ0Q7UUFDaEQsV0FBTSxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWxELHFEQUFxRDtRQUNyRCxVQUFLLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFM0MscURBQXFEO1FBQ3JELFVBQUssR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUzQyw0RUFBNEU7UUFDNUUsWUFBTyxHQUEyQixJQUFJLE9BQU8sRUFBaUIsQ0FBQztJQUNuRSxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZXN0ZWRMaXN0SW50ZXJmYWNlIH0gZnJvbSAnLi4vbmVzdGVkLWxpc3QvbmVzdGVkLWxpc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IE5lc3RlZExpc3RQb3BvdmVySW50ZXJmYWNlIH0gZnJvbSAnLi4vbmVzdGVkLWxpc3QtcG9wb3Zlci9uZXN0ZWQtbGlzdC1wb3BvdmVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbi8qKiBDb250YWlucyByZWZlcmVuY2VzIHRvIHBvcG92ZXIgb3IgbGlzdCBuZXN0ZWQgY29tcG9uZW50cywgdGhhdCBhcmUgcGxhY2VkIGFzIGRpcmVjdCBjaGlsZHJlbiBvZiBpdGVtIGNvbXBvbmVudCAqL1xuZXhwb3J0IGNsYXNzIE5lc3RlZEl0ZW1TZXJ2aWNlIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxpc3Q6IE5lc3RlZExpc3RJbnRlcmZhY2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwb3BvdmVyPzogTmVzdGVkTGlzdFBvcG92ZXJJbnRlcmZhY2U7XG5cbiAgICAvKiogU3ViamVjdCBmaXJlZCB3aGVuIGV4cGFuZCBpY29uIGlzIGNsaWNrZWQgKi9cbiAgICB0b2dnbGU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgLyoqIFN1YmplY3QgZmlyZWQsIHdoZW4gY2hpbGQgZWxlbWVudHMgYXJlIGZvY3VzZWQgKi9cbiAgICBmb2N1czogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogU3ViamVjdCBmaXJlZCwgd2hlbiBjb250ZW50IG9yIGxpbmsgaXMgY2xpY2tlZCAqL1xuICAgIGNsaWNrOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBLZXlEb3duIGhhbmRsZXIsIGl0IGlzIHRyaWdnZXJlZCBmcm9tIGxpbmssIGNvbnRlbnQgYW5kIGl0ZW0gZWxlbWVudHMgKi9cbiAgICBrZXlEb3duOiBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+ID0gbmV3IFN1YmplY3Q8S2V5Ym9hcmRFdmVudD4oKTtcbn1cbiJdfQ==
@@ -1,151 +0,0 @@
1
- import { ChangeDetectorRef, ContentChild, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, Renderer2 } from '@angular/core';
2
- import { NestedListButtonDirective, NestedListTitleDirective } from '../nested-list-directives';
3
- import { NestedItemService } from '../nested-item/nested-item.service';
4
- import { NestedListExpandIconComponent } from '../nested-list-directives';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "../nested-item/nested-item.service";
7
- import * as i2 from "@angular/common";
8
- export class NestedLinkComponent {
9
- /** @hidden */
10
- constructor(changeDetRef, _renderer, _elementRef, _itemService) {
11
- this.changeDetRef = changeDetRef;
12
- this._renderer = _renderer;
13
- this._elementRef = _elementRef;
14
- this._itemService = _itemService;
15
- /** Whether this element is selected*/
16
- this.selected = false;
17
- /** Event thrown, when selected state is changed */
18
- this.selectedChange = new EventEmitter();
19
- /** @hidden */
20
- this.cxNestedListItemClass = true;
21
- /** @hidden */
22
- this.role = 'treeitem';
23
- }
24
- /** @hidden */
25
- get elementRef() {
26
- return this._elementRef;
27
- }
28
- /** Handler for keyboard events */
29
- onKeyDown(event) {
30
- this._itemService.keyDown.next(event);
31
- }
32
- /** Handler for mouse events */
33
- onClick() {
34
- if (this._collapseOnly) {
35
- this._expandIcon.onClick();
36
- }
37
- else {
38
- this._itemService.click.next();
39
- if (this.onClickCallback) {
40
- this.onClickCallback();
41
- }
42
- }
43
- }
44
- /** Handler for focus events */
45
- onFocus() {
46
- this._itemService.focus.next();
47
- }
48
- /** Method to trigger selected state change */
49
- changeSelected(selected) {
50
- this.selected = selected;
51
- this.selectedChange.emit(selected);
52
- }
53
- /** Set focus on the element. */
54
- focus() {
55
- this._elementRef.nativeElement.focus();
56
- }
57
- /** Dispatches the click event on the element */
58
- click() {
59
- this._elementRef.nativeElement.click();
60
- }
61
- /** Returns the title value of the title directive */
62
- getTitle() {
63
- return this.title && this.title.getInnerText();
64
- }
65
- /** @hidden */
66
- get _collapseOnly() {
67
- return !this._nestedListButton && this._expandIcon;
68
- }
69
- }
70
- NestedLinkComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NestedLinkComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.NestedItemService }], target: i0.ɵɵFactoryTarget.Component });
71
- NestedLinkComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.2", type: NestedLinkComponent, selector: "[fdx-nested-list-link], button[fdx-nested-list-link], a[fdx-nested-list-link], div[fdx-nested-list-link]", inputs: { onClickCallback: "onClickCallback", selected: "selected", ariaDescribedby: "ariaDescribedby" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "keydown": "onKeyDown($event)", "click": "onClick()", "focus": "onFocus()" }, properties: { "attr.tabindex": "!_nestedListButton ? 0 : -1", "class.is-selected": "this.selected", "attr.aria-label": "this._ariaLabel", "attr.aria-describedby": "this.ariaDescribedby", "class.fdx-nested-list__link": "this.cxNestedListItemClass", "attr.role": "this.role" } }, queries: [{ propertyName: "title", first: true, predicate: NestedListTitleDirective, descendants: true }, { propertyName: "_nestedListButton", first: true, predicate: NestedListButtonDirective, descendants: true }, { propertyName: "_expandIcon", first: true, predicate: NestedListExpandIconComponent, descendants: true }], ngImport: i0, template: `
72
- <div *ngIf="!_nestedListButton" class="fdx-nested-list__link-container">
73
- <ng-container *ngTemplateOutlet="containerContent"></ng-container>
74
- </div>
75
- <a *ngIf="_nestedListButton" tabindex="0" class="fdx-nested-list__link-container">
76
- <ng-container *ngTemplateOutlet="containerContent"></ng-container>
77
- </a>
78
- <ng-content select="[fdx-nested-list-button]"></ng-content>
79
- <ng-template #containerContent>
80
- <ng-content select="[fdx-nested-list-icon]"></ng-content>
81
- <ng-content select="[fdx-nested-list-title]"></ng-content>
82
- <ng-content select="[fdx-nested-list-expand-icon]"></ng-content>
83
- </ng-template>
84
- `, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.2", ngImport: i0, type: NestedLinkComponent, decorators: [{
86
- type: Component,
87
- args: [{
88
- template: `
89
- <div *ngIf="!_nestedListButton" class="fdx-nested-list__link-container">
90
- <ng-container *ngTemplateOutlet="containerContent"></ng-container>
91
- </div>
92
- <a *ngIf="_nestedListButton" tabindex="0" class="fdx-nested-list__link-container">
93
- <ng-container *ngTemplateOutlet="containerContent"></ng-container>
94
- </a>
95
- <ng-content select="[fdx-nested-list-button]"></ng-content>
96
- <ng-template #containerContent>
97
- <ng-content select="[fdx-nested-list-icon]"></ng-content>
98
- <ng-content select="[fdx-nested-list-title]"></ng-content>
99
- <ng-content select="[fdx-nested-list-expand-icon]"></ng-content>
100
- </ng-template>
101
- `,
102
- selector:
103
- // eslint-disable-next-line @angular-eslint/component-selector
104
- '[fdx-nested-list-link], button[fdx-nested-list-link], a[fdx-nested-list-link], div[fdx-nested-list-link]',
105
- host: {
106
- '[attr.tabindex]': '!_nestedListButton ? 0 : -1'
107
- }
108
- }]
109
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.NestedItemService }]; }, propDecorators: { onClickCallback: [{
110
- type: Input
111
- }], selected: [{
112
- type: Input
113
- }, {
114
- type: HostBinding,
115
- args: ['class.is-selected']
116
- }], _ariaLabel: [{
117
- type: HostBinding,
118
- args: ['attr.aria-label']
119
- }], ariaDescribedby: [{
120
- type: Input
121
- }, {
122
- type: HostBinding,
123
- args: ['attr.aria-describedby']
124
- }], selectedChange: [{
125
- type: Output
126
- }], cxNestedListItemClass: [{
127
- type: HostBinding,
128
- args: ['class.fdx-nested-list__link']
129
- }], role: [{
130
- type: HostBinding,
131
- args: ['attr.role']
132
- }], title: [{
133
- type: ContentChild,
134
- args: [NestedListTitleDirective]
135
- }], _nestedListButton: [{
136
- type: ContentChild,
137
- args: [NestedListButtonDirective]
138
- }], _expandIcon: [{
139
- type: ContentChild,
140
- args: [NestedListExpandIconComponent]
141
- }], onKeyDown: [{
142
- type: HostListener,
143
- args: ['keydown', ['$event']]
144
- }], onClick: [{
145
- type: HostListener,
146
- args: ['click']
147
- }], onFocus: [{
148
- type: HostListener,
149
- args: ['focus']
150
- }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWxpbmsuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jeC9zcmMvbGliL25lc3RlZC1saXN0L25lc3RlZC1saW5rL25lc3RlZC1saW5rLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBd0IxRSxNQUFNLE9BQU8sbUJBQW1CO0lBOEM1QixjQUFjO0lBQ2QsWUFDVyxZQUErQixFQUM5QixTQUFvQixFQUNwQixXQUF1QixFQUN2QixZQUErQjtRQUhoQyxpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixpQkFBWSxHQUFaLFlBQVksQ0FBbUI7UUE5QzNDLHNDQUFzQztRQUd0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBV2pCLG1EQUFtRDtRQUVuRCxtQkFBYyxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXBFLGNBQWM7UUFFZCwwQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFFN0IsY0FBYztRQUVkLFNBQUksR0FBRyxVQUFVLENBQUM7SUF1QmYsQ0FBQztJQUVKLGNBQWM7SUFDZCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUVsQyxTQUFTLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCwrQkFBK0I7SUFFL0IsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzlCO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQztJQUVELCtCQUErQjtJQUUvQixPQUFPO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxjQUFjLENBQUMsUUFBaUI7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxLQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFZLGFBQWE7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3ZELENBQUM7O2dIQTVHUSxtQkFBbUI7b0dBQW5CLG1CQUFtQixxc0JBbUNkLHdCQUF3QixvRkFJeEIseUJBQXlCLDhFQUl6Qiw2QkFBNkIsZ0RBaEVqQzs7Ozs7Ozs7Ozs7OztLQWFUOzJGQVFRLG1CQUFtQjtrQkF0Qi9CLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7O0tBYVQ7b0JBQ0QsUUFBUTtvQkFDSiw4REFBOEQ7b0JBQzlELDBHQUEwRztvQkFDOUcsSUFBSSxFQUFFO3dCQUNGLGlCQUFpQixFQUFFLDZCQUE2QjtxQkFDbkQ7aUJBQ0o7eUxBSUcsZUFBZTtzQkFEZCxLQUFLO2dCQU1OLFFBQVE7c0JBRlAsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBS2hDLFVBQVU7c0JBRFQsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBTTlCLGVBQWU7c0JBRmQsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBS3BDLGNBQWM7c0JBRGIsTUFBTTtnQkFLUCxxQkFBcUI7c0JBRHBCLFdBQVc7dUJBQUMsNkJBQTZCO2dCQUsxQyxJQUFJO3NCQURILFdBQVc7dUJBQUMsV0FBVztnQkFReEIsS0FBSztzQkFESixZQUFZO3VCQUFDLHdCQUF3QjtnQkFLdEMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLHlCQUF5QjtnQkFLdkMsV0FBVztzQkFEVixZQUFZO3VCQUFDLDZCQUE2QjtnQkFrQjNDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT25DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPO2dCQWNyQixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5lc3RlZExpc3RCdXR0b25EaXJlY3RpdmUsIE5lc3RlZExpc3RUaXRsZURpcmVjdGl2ZSB9IGZyb20gJy4uL25lc3RlZC1saXN0LWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgTmVzdGVkSXRlbVNlcnZpY2UgfSBmcm9tICcuLi9uZXN0ZWQtaXRlbS9uZXN0ZWQtaXRlbS5zZXJ2aWNlJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBOZXN0ZWRMaXN0RXhwYW5kSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL25lc3RlZC1saXN0LWRpcmVjdGl2ZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIV9uZXN0ZWRMaXN0QnV0dG9uXCIgY2xhc3M9XCJmZHgtbmVzdGVkLWxpc3RfX2xpbmstY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGFpbmVyQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGEgKm5nSWY9XCJfbmVzdGVkTGlzdEJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZmR4LW5lc3RlZC1saXN0X19saW5rLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRhaW5lckNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmR4LW5lc3RlZC1saXN0LWJ1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGFpbmVyQ29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZHgtbmVzdGVkLWxpc3QtaWNvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmR4LW5lc3RlZC1saXN0LXRpdGxlXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmZHgtbmVzdGVkLWxpc3QtZXhwYW5kLWljb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgc2VsZWN0b3I6XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgICAgICdbZmR4LW5lc3RlZC1saXN0LWxpbmtdLCBidXR0b25bZmR4LW5lc3RlZC1saXN0LWxpbmtdLCBhW2ZkeC1uZXN0ZWQtbGlzdC1saW5rXSwgZGl2W2ZkeC1uZXN0ZWQtbGlzdC1saW5rXScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJyFfbmVzdGVkTGlzdEJ1dHRvbiA/IDAgOiAtMSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE5lc3RlZExpbmtDb21wb25lbnQge1xuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbiBjbGljayBldmVudCBkaXNwYXRjaCBvbiB0aGlzIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBvbkNsaWNrQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGlzIGVsZW1lbnQgaXMgc2VsZWN0ZWQqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1zZWxlY3RlZCcpXG4gICAgc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKVxuICAgIF9hcmlhTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpXG4gICAgYXJpYURlc2NyaWJlZGJ5OiBOdWxsYWJsZTxzdHJpbmcgfCBudW1iZXI+O1xuXG4gICAgLyoqIEV2ZW50IHRocm93biwgd2hlbiBzZWxlY3RlZCBzdGF0ZSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZHgtbmVzdGVkLWxpc3RfX2xpbmsnKVxuICAgIGN4TmVzdGVkTGlzdEl0ZW1DbGFzcyA9IHRydWU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICByb2xlID0gJ3RyZWVpdGVtJztcblxuICAgIC8qKlxuICAgICAqICBAaGlkZGVuXG4gICAgICogIFJlZmVyZW5jZSB0byB0aXRsZSBlbGVtZW50LCBpdCBpcyB1c2VkLCB0byBnZXQgdGl0bGUgZm9yIGNvbmRlbnNlZCBtb2RlLlxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoTmVzdGVkTGlzdFRpdGxlRGlyZWN0aXZlKVxuICAgIHRpdGxlOiBOZXN0ZWRMaXN0VGl0bGVEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoTmVzdGVkTGlzdEJ1dHRvbkRpcmVjdGl2ZSlcbiAgICBfbmVzdGVkTGlzdEJ1dHRvbjogTmVzdGVkTGlzdEJ1dHRvbkRpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChOZXN0ZWRMaXN0RXhwYW5kSWNvbkNvbXBvbmVudClcbiAgICBfZXhwYW5kSWNvbjogTmVzdGVkTGlzdEV4cGFuZEljb25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2hhbmdlRGV0UmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IE5lc3RlZEl0ZW1TZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVyIGZvciBrZXlib2FyZCBldmVudHMgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2Uua2V5RG93bi5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlciBmb3IgbW91c2UgZXZlbnRzICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICAgIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jb2xsYXBzZU9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZEljb24ub25DbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuY2xpY2submV4dCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMub25DbGlja0NhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsaWNrQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBIYW5kbGVyIGZvciBmb2N1cyBldmVudHMgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faXRlbVNlcnZpY2UuZm9jdXMubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdG8gdHJpZ2dlciBzZWxlY3RlZCBzdGF0ZSBjaGFuZ2UgKi9cbiAgICBjaGFuZ2VTZWxlY3RlZChzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdChzZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqIFNldCBmb2N1cyBvbiB0aGUgZWxlbWVudC4gKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIERpc3BhdGNoZXMgdGhlIGNsaWNrIGV2ZW50IG9uIHRoZSBlbGVtZW50ICovXG4gICAgY2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIHRoZSB0aXRsZSB2YWx1ZSBvZiB0aGUgdGl0bGUgZGlyZWN0aXZlICovXG4gICAgZ2V0VGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGUgJiYgdGhpcy50aXRsZS5nZXRJbm5lclRleHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9jb2xsYXBzZU9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fbmVzdGVkTGlzdEJ1dHRvbiAmJiB0aGlzLl9leHBhbmRJY29uO1xuICAgIH1cbn1cbiJdfQ==