@schneideress/dashboardframework 13.0.0 → 17.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/esm2022/gridster/index.mjs +12 -0
- package/esm2022/gridster/lib/gridster.component.mjs +627 -0
- package/esm2022/gridster/lib/gridster.interface.mjs +3 -0
- package/esm2022/gridster/lib/gridster.module.mjs +17 -0
- package/esm2022/gridster/lib/gridsterCompact.service.mjs +126 -0
- package/esm2022/gridster/lib/gridsterConfig.constant.mjs +118 -0
- package/esm2022/gridster/lib/gridsterConfig.interface.mjs +37 -0
- package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +2 -0
- package/esm2022/gridster/lib/gridsterDraggable.service.mjs +405 -0
- package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +255 -0
- package/esm2022/gridster/lib/gridsterItem.component.mjs +228 -0
- package/esm2022/gridster/lib/gridsterItem.interface.mjs +3 -0
- package/esm2022/gridster/lib/gridsterPreview.component.mjs +36 -0
- package/esm2022/gridster/lib/gridsterPush.service.mjs +316 -0
- package/esm2022/gridster/lib/gridsterPushResize.service.mjs +225 -0
- package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +2 -0
- package/esm2022/gridster/lib/gridsterRenderer.service.mjs +274 -0
- package/esm2022/gridster/lib/gridsterResizable.service.mjs +470 -0
- package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +2 -0
- package/esm2022/gridster/lib/gridsterScroll.service.mjs +134 -0
- package/esm2022/gridster/lib/gridsterSwap.service.mjs +87 -0
- package/esm2022/gridster/lib/gridsterUtils.service.mjs +92 -0
- package/esm2022/lib/custom.notifier.options.mjs +41 -0
- package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +460 -0
- package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +43 -0
- package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +767 -0
- package/esm2022/lib/ra.base.dashboard.filter.mjs +41 -0
- package/esm2022/lib/ra.base.dashboard.template.mjs +33 -0
- package/esm2022/lib/ra.dashbard.event.bus.mjs +46 -0
- package/esm2022/lib/ra.dashboard.module.mjs +55 -0
- package/esm2022/lib/ra.dashboard.responsive.service.mjs +139 -0
- package/esm2022/lib/ra.dashboard.service.mjs +77 -0
- package/esm2022/lib/ra.event.enum.mjs +60 -0
- package/esm2022/lib/ra.gridster.config.mjs +56 -0
- package/esm2022/public-api.mjs +13 -0
- package/esm2022/schneideress-dashboardframework.mjs +5 -0
- package/fesm2022/schneideress-dashboardframework.mjs +5198 -0
- package/fesm2022/schneideress-dashboardframework.mjs.map +1 -0
- package/gridster/index.d.ts +9 -0
- package/gridster/lib/gridster.component.d.ts +79 -0
- package/gridster/lib/gridster.interface.d.ts +49 -0
- package/gridster/lib/gridster.module.d.ts +8 -0
- package/gridster/lib/gridsterCompact.service.d.ts +11 -0
- package/gridster/lib/gridsterConfig.constant.d.ts +2 -0
- package/gridster/lib/gridsterConfig.interface.d.ts +155 -0
- package/gridster/lib/gridsterConfigS.interface.d.ts +107 -0
- package/gridster/lib/gridsterDraggable.service.d.ts +68 -0
- package/gridster/lib/gridsterEmptyCell.service.d.ts +31 -0
- package/gridster/lib/gridsterItem.component.d.ts +61 -0
- package/gridster/lib/gridsterItem.interface.d.ts +64 -0
- package/gridster/lib/gridsterPreview.component.d.ts +17 -0
- package/gridster/lib/gridsterPush.service.d.ts +34 -0
- package/gridster/lib/gridsterPushResize.service.d.ts +26 -0
- package/gridster/lib/gridsterRenderer.interface.d.ts +14 -0
- package/gridster/lib/gridsterRenderer.service.d.ts +37 -0
- package/gridster/lib/gridsterResizable.service.d.ts +86 -0
- package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -0
- package/gridster/lib/gridsterScroll.service.d.ts +7 -0
- package/gridster/lib/gridsterSwap.service.d.ts +13 -0
- package/gridster/lib/gridsterUtils.service.d.ts +16 -0
- package/{schneideress-dashboardframework.d.ts → index.d.ts} +5 -5
- package/lib/custom.notifier.options.d.ts +2 -2
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +88 -88
- package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +20 -20
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +142 -142
- package/lib/ra.base.dashboard.filter.d.ts +17 -17
- package/lib/ra.base.dashboard.template.d.ts +18 -18
- package/lib/ra.dashbard.event.bus.d.ts +23 -23
- package/lib/ra.dashboard.module.d.ts +16 -17
- package/lib/ra.dashboard.responsive.service.d.ts +24 -24
- package/lib/ra.dashboard.service.d.ts +25 -25
- package/lib/ra.event.enum.d.ts +57 -57
- package/lib/ra.gridster.config.d.ts +2 -2
- package/package.json +11 -17
- package/public-api.d.ts +9 -9
- package/esm2020/lib/custom.notifier.options.mjs +0 -41
- package/esm2020/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -445
- package/esm2020/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
- package/esm2020/lib/ra-widget-container/ra.widget.container.component.mjs +0 -767
- package/esm2020/lib/ra.base.dashboard.filter.mjs +0 -44
- package/esm2020/lib/ra.base.dashboard.template.mjs +0 -36
- package/esm2020/lib/ra.dashbard.event.bus.mjs +0 -46
- package/esm2020/lib/ra.dashboard.module.mjs +0 -64
- package/esm2020/lib/ra.dashboard.responsive.service.mjs +0 -136
- package/esm2020/lib/ra.dashboard.service.mjs +0 -77
- package/esm2020/lib/ra.event.enum.mjs +0 -60
- package/esm2020/lib/ra.gridster.config.mjs +0 -56
- package/esm2020/public-api.mjs +0 -15
- package/esm2020/schneideress-dashboardframework.mjs +0 -5
- package/fesm2015/schneideress-dashboardframework.mjs +0 -1800
- package/fesm2015/schneideress-dashboardframework.mjs.map +0 -1
- package/fesm2020/schneideress-dashboardframework.mjs +0 -1790
- package/fesm2020/schneideress-dashboardframework.mjs.map +0 -1
|
@@ -0,0 +1,470 @@
|
|
|
1
|
+
import { DirTypes } from './gridsterConfig.interface';
|
|
2
|
+
import { GridsterPush } from './gridsterPush.service';
|
|
3
|
+
import { GridsterPushResize } from './gridsterPushResize.service';
|
|
4
|
+
import { cancelScroll, scroll } from './gridsterScroll.service';
|
|
5
|
+
import { GridsterUtils } from './gridsterUtils.service';
|
|
6
|
+
export class GridsterResizable {
|
|
7
|
+
constructor(gridsterItem, gridster, zone) {
|
|
8
|
+
this.zone = zone;
|
|
9
|
+
/**
|
|
10
|
+
* The direction function may reference any of the `GridsterResizable` class methods, that are
|
|
11
|
+
* responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference
|
|
12
|
+
* the `handleNorth` method when the north handle is pressed and moved by a mouse.
|
|
13
|
+
*/
|
|
14
|
+
this.directionFunction = null;
|
|
15
|
+
this.dragMove = (e) => {
|
|
16
|
+
if (this.directionFunction === null) {
|
|
17
|
+
throw new Error('The `directionFunction` has not been set before calling `dragMove`.');
|
|
18
|
+
}
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
GridsterUtils.checkTouchEvent(e);
|
|
22
|
+
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
23
|
+
this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
24
|
+
scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction, true, this.resizeEventScrollType);
|
|
25
|
+
const scale = this.gridster.options.scale || 1;
|
|
26
|
+
this.directionFunction({
|
|
27
|
+
clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,
|
|
28
|
+
clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale
|
|
29
|
+
});
|
|
30
|
+
this.lastMouse.clientX = e.clientX;
|
|
31
|
+
this.lastMouse.clientY = e.clientY;
|
|
32
|
+
this.zone.run(() => {
|
|
33
|
+
this.gridster.updateGrid();
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
this.dragStop = (e) => {
|
|
37
|
+
e.stopPropagation();
|
|
38
|
+
e.preventDefault();
|
|
39
|
+
cancelScroll();
|
|
40
|
+
this.mousemove();
|
|
41
|
+
this.mouseup();
|
|
42
|
+
this.mouseleave();
|
|
43
|
+
this.cancelOnBlur();
|
|
44
|
+
this.touchmove();
|
|
45
|
+
this.touchend();
|
|
46
|
+
this.touchcancel();
|
|
47
|
+
this.gridster.dragInProgress = false;
|
|
48
|
+
this.gridster.updateGrid();
|
|
49
|
+
if (this.gridster.options.resizable &&
|
|
50
|
+
this.gridster.options.resizable.stop) {
|
|
51
|
+
Promise.resolve(this.gridster.options.resizable.stop(this.gridsterItem.item, this.gridsterItem, e)).then(this.makeResize, this.cancelResize);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.makeResize();
|
|
55
|
+
}
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');
|
|
58
|
+
if (this.gridster) {
|
|
59
|
+
this.gridster.movingItem = null;
|
|
60
|
+
this.gridster.previewStyle();
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
this.cancelResize = () => {
|
|
65
|
+
this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;
|
|
66
|
+
this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;
|
|
67
|
+
this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
|
|
68
|
+
this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
|
|
69
|
+
this.gridsterItem.setSize();
|
|
70
|
+
this.push.restoreItems();
|
|
71
|
+
this.pushResize.restoreItems();
|
|
72
|
+
this.push.destroy();
|
|
73
|
+
this.push = null;
|
|
74
|
+
this.pushResize.destroy();
|
|
75
|
+
this.pushResize = null;
|
|
76
|
+
};
|
|
77
|
+
this.makeResize = () => {
|
|
78
|
+
this.gridsterItem.setSize();
|
|
79
|
+
this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
|
|
80
|
+
this.push.setPushedItems();
|
|
81
|
+
this.pushResize.setPushedItems();
|
|
82
|
+
this.push.destroy();
|
|
83
|
+
this.push = null;
|
|
84
|
+
this.pushResize.destroy();
|
|
85
|
+
this.pushResize = null;
|
|
86
|
+
};
|
|
87
|
+
this.handleNorth = (e) => {
|
|
88
|
+
this.top = e.clientY + this.offsetTop - this.diffTop;
|
|
89
|
+
this.height = this.bottom - this.top;
|
|
90
|
+
if (this.minHeight > this.height) {
|
|
91
|
+
this.height = this.minHeight;
|
|
92
|
+
this.top = this.bottom - this.minHeight;
|
|
93
|
+
}
|
|
94
|
+
else if (this.gridster.options.enableBoundaryControl) {
|
|
95
|
+
this.top = Math.max(0, this.top);
|
|
96
|
+
this.height = this.bottom - this.top;
|
|
97
|
+
}
|
|
98
|
+
const marginTop = this.gridster.options.pushItems ? this.margin : 0;
|
|
99
|
+
this.newPosition = this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);
|
|
100
|
+
if (this.gridsterItem.$item.y !== this.newPosition) {
|
|
101
|
+
this.itemBackup[1] = this.gridsterItem.$item.y;
|
|
102
|
+
this.itemBackup[3] = this.gridsterItem.$item.rows;
|
|
103
|
+
this.gridsterItem.$item.rows +=
|
|
104
|
+
this.gridsterItem.$item.y - this.newPosition;
|
|
105
|
+
this.gridsterItem.$item.y = this.newPosition;
|
|
106
|
+
this.pushResize.pushItems(this.pushResize.fromSouth);
|
|
107
|
+
this.push.pushItems(this.push.fromSouth, this.gridster.$options.disablePushOnResize);
|
|
108
|
+
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
109
|
+
this.gridsterItem.$item.y = this.itemBackup[1];
|
|
110
|
+
this.gridsterItem.$item.rows = this.itemBackup[3];
|
|
111
|
+
this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);
|
|
112
|
+
this.setItemTop(this.gridster.positionYToPixels(this.gridsterItem.$item.y));
|
|
113
|
+
this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
|
|
114
|
+
this.margin);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.gridster.previewStyle();
|
|
119
|
+
}
|
|
120
|
+
this.pushResize.checkPushBack();
|
|
121
|
+
this.push.checkPushBack();
|
|
122
|
+
}
|
|
123
|
+
this.setItemTop(this.top);
|
|
124
|
+
this.setItemHeight(this.height);
|
|
125
|
+
};
|
|
126
|
+
this.handleWest = (e) => {
|
|
127
|
+
const clientX = this.gridster.$options.dirType === DirTypes.RTL
|
|
128
|
+
? this.originalClientX + (this.originalClientX - e.clientX)
|
|
129
|
+
: e.clientX;
|
|
130
|
+
this.left = clientX + this.offsetLeft - this.diffLeft;
|
|
131
|
+
this.width = this.right - this.left;
|
|
132
|
+
if (this.minWidth > this.width) {
|
|
133
|
+
this.width = this.minWidth;
|
|
134
|
+
this.left = this.right - this.minWidth;
|
|
135
|
+
}
|
|
136
|
+
else if (this.gridster.options.enableBoundaryControl) {
|
|
137
|
+
this.left = Math.max(0, this.left);
|
|
138
|
+
this.width = this.right - this.left;
|
|
139
|
+
}
|
|
140
|
+
const marginLeft = this.gridster.options.pushItems ? this.margin : 0;
|
|
141
|
+
this.newPosition = this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);
|
|
142
|
+
if (this.gridsterItem.$item.x !== this.newPosition) {
|
|
143
|
+
this.itemBackup[0] = this.gridsterItem.$item.x;
|
|
144
|
+
this.itemBackup[2] = this.gridsterItem.$item.cols;
|
|
145
|
+
this.gridsterItem.$item.cols +=
|
|
146
|
+
this.gridsterItem.$item.x - this.newPosition;
|
|
147
|
+
this.gridsterItem.$item.x = this.newPosition;
|
|
148
|
+
this.pushResize.pushItems(this.pushResize.fromEast);
|
|
149
|
+
this.push.pushItems(this.push.fromEast, this.gridster.$options.disablePushOnResize);
|
|
150
|
+
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
151
|
+
this.gridsterItem.$item.x = this.itemBackup[0];
|
|
152
|
+
this.gridsterItem.$item.cols = this.itemBackup[2];
|
|
153
|
+
this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);
|
|
154
|
+
this.setItemLeft(this.gridster.positionXToPixels(this.gridsterItem.$item.x));
|
|
155
|
+
this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
|
|
156
|
+
this.margin);
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.gridster.previewStyle();
|
|
161
|
+
}
|
|
162
|
+
this.pushResize.checkPushBack();
|
|
163
|
+
this.push.checkPushBack();
|
|
164
|
+
}
|
|
165
|
+
this.setItemLeft(this.left);
|
|
166
|
+
this.setItemWidth(this.width);
|
|
167
|
+
};
|
|
168
|
+
this.handleSouth = (e) => {
|
|
169
|
+
this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;
|
|
170
|
+
if (this.minHeight > this.height) {
|
|
171
|
+
this.height = this.minHeight;
|
|
172
|
+
}
|
|
173
|
+
this.bottom = this.top + this.height;
|
|
174
|
+
if (this.gridster.options.enableBoundaryControl) {
|
|
175
|
+
const margin = this.outerMarginBottom ?? this.margin;
|
|
176
|
+
const box = this.gridster.el.getBoundingClientRect();
|
|
177
|
+
this.bottom = Math.min(this.bottom, box.bottom - box.top - 2 * margin);
|
|
178
|
+
this.height = this.bottom - this.top;
|
|
179
|
+
}
|
|
180
|
+
const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;
|
|
181
|
+
this.newPosition = this.gridster.pixelsToPositionY(this.bottom + marginBottom, Math.ceil);
|
|
182
|
+
if (this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==
|
|
183
|
+
this.newPosition) {
|
|
184
|
+
this.itemBackup[3] = this.gridsterItem.$item.rows;
|
|
185
|
+
this.gridsterItem.$item.rows =
|
|
186
|
+
this.newPosition - this.gridsterItem.$item.y;
|
|
187
|
+
this.pushResize.pushItems(this.pushResize.fromNorth);
|
|
188
|
+
this.push.pushItems(this.push.fromNorth, this.gridster.$options.disablePushOnResize);
|
|
189
|
+
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
190
|
+
this.gridsterItem.$item.rows = this.itemBackup[3];
|
|
191
|
+
this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
|
|
192
|
+
this.margin);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.gridster.previewStyle();
|
|
197
|
+
}
|
|
198
|
+
this.pushResize.checkPushBack();
|
|
199
|
+
this.push.checkPushBack();
|
|
200
|
+
}
|
|
201
|
+
this.setItemHeight(this.height);
|
|
202
|
+
};
|
|
203
|
+
this.handleEast = (e) => {
|
|
204
|
+
const clientX = this.gridster.$options.dirType === DirTypes.RTL
|
|
205
|
+
? this.originalClientX + (this.originalClientX - e.clientX)
|
|
206
|
+
: e.clientX;
|
|
207
|
+
this.width = clientX + this.offsetLeft - this.diffRight - this.left;
|
|
208
|
+
if (this.minWidth > this.width) {
|
|
209
|
+
this.width = this.minWidth;
|
|
210
|
+
}
|
|
211
|
+
this.right = this.left + this.width;
|
|
212
|
+
if (this.gridster.options.enableBoundaryControl) {
|
|
213
|
+
const margin = this.outerMarginRight ?? this.margin;
|
|
214
|
+
const box = this.gridster.el.getBoundingClientRect();
|
|
215
|
+
this.right = Math.min(this.right, box.right - box.left - 2 * margin);
|
|
216
|
+
this.width = this.right - this.left;
|
|
217
|
+
}
|
|
218
|
+
const marginRight = this.gridster.options.pushItems ? 0 : this.margin;
|
|
219
|
+
this.newPosition = this.gridster.pixelsToPositionX(this.right + marginRight, Math.ceil);
|
|
220
|
+
if (this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==
|
|
221
|
+
this.newPosition) {
|
|
222
|
+
this.itemBackup[2] = this.gridsterItem.$item.cols;
|
|
223
|
+
this.gridsterItem.$item.cols =
|
|
224
|
+
this.newPosition - this.gridsterItem.$item.x;
|
|
225
|
+
this.pushResize.pushItems(this.pushResize.fromWest);
|
|
226
|
+
this.push.pushItems(this.push.fromWest, this.gridster.$options.disablePushOnResize);
|
|
227
|
+
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
228
|
+
this.gridsterItem.$item.cols = this.itemBackup[2];
|
|
229
|
+
this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
|
|
230
|
+
this.margin);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.gridster.previewStyle();
|
|
235
|
+
}
|
|
236
|
+
this.pushResize.checkPushBack();
|
|
237
|
+
this.push.checkPushBack();
|
|
238
|
+
}
|
|
239
|
+
this.setItemWidth(this.width);
|
|
240
|
+
};
|
|
241
|
+
this.handleNorthWest = (e) => {
|
|
242
|
+
this.handleNorth(e);
|
|
243
|
+
this.handleWest(e);
|
|
244
|
+
};
|
|
245
|
+
this.handleNorthEast = (e) => {
|
|
246
|
+
this.handleNorth(e);
|
|
247
|
+
this.handleEast(e);
|
|
248
|
+
};
|
|
249
|
+
this.handleSouthWest = (e) => {
|
|
250
|
+
this.handleSouth(e);
|
|
251
|
+
this.handleWest(e);
|
|
252
|
+
};
|
|
253
|
+
this.handleSouthEast = (e) => {
|
|
254
|
+
this.handleSouth(e);
|
|
255
|
+
this.handleEast(e);
|
|
256
|
+
};
|
|
257
|
+
this.gridsterItem = gridsterItem;
|
|
258
|
+
this.gridster = gridster;
|
|
259
|
+
this.lastMouse = {
|
|
260
|
+
clientX: 0,
|
|
261
|
+
clientY: 0
|
|
262
|
+
};
|
|
263
|
+
this.itemBackup = [0, 0, 0, 0];
|
|
264
|
+
this.resizeEventScrollType = {
|
|
265
|
+
west: false,
|
|
266
|
+
east: false,
|
|
267
|
+
north: false,
|
|
268
|
+
south: false
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
destroy() {
|
|
272
|
+
this.gridster?.previewStyle();
|
|
273
|
+
this.gridster = this.gridsterItem = null;
|
|
274
|
+
}
|
|
275
|
+
dragStart(e) {
|
|
276
|
+
if (e.which && e.which !== 1) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
if (this.gridster.options.resizable &&
|
|
280
|
+
this.gridster.options.resizable.start) {
|
|
281
|
+
this.gridster.options.resizable.start(this.gridsterItem.item, this.gridsterItem, e);
|
|
282
|
+
}
|
|
283
|
+
e.stopPropagation();
|
|
284
|
+
e.preventDefault();
|
|
285
|
+
this.zone.runOutsideAngular(() => {
|
|
286
|
+
this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);
|
|
287
|
+
this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);
|
|
288
|
+
});
|
|
289
|
+
this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);
|
|
290
|
+
this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);
|
|
291
|
+
this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);
|
|
292
|
+
this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);
|
|
293
|
+
this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);
|
|
294
|
+
this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');
|
|
295
|
+
this.lastMouse.clientX = e.clientX;
|
|
296
|
+
this.lastMouse.clientY = e.clientY;
|
|
297
|
+
this.left = this.gridsterItem.left;
|
|
298
|
+
this.top = this.gridsterItem.top;
|
|
299
|
+
this.originalClientX = e.clientX;
|
|
300
|
+
this.originalClientY = e.clientY;
|
|
301
|
+
this.width = this.gridsterItem.width;
|
|
302
|
+
this.height = this.gridsterItem.height;
|
|
303
|
+
this.bottom = this.gridsterItem.top + this.gridsterItem.height;
|
|
304
|
+
this.right = this.gridsterItem.left + this.gridsterItem.width;
|
|
305
|
+
this.margin = this.gridster.$options.margin;
|
|
306
|
+
this.outerMarginTop = this.gridster.$options.outerMarginTop;
|
|
307
|
+
this.outerMarginRight = this.gridster.$options.outerMarginRight;
|
|
308
|
+
this.outerMarginBottom = this.gridster.$options.outerMarginBottom;
|
|
309
|
+
this.outerMarginLeft = this.gridster.$options.outerMarginLeft;
|
|
310
|
+
this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
311
|
+
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
312
|
+
this.diffLeft = e.clientX + this.offsetLeft - this.left;
|
|
313
|
+
this.diffRight = e.clientX + this.offsetLeft - this.right;
|
|
314
|
+
this.diffTop = e.clientY + this.offsetTop - this.top;
|
|
315
|
+
this.diffBottom = e.clientY + this.offsetTop - this.bottom;
|
|
316
|
+
this.minHeight =
|
|
317
|
+
this.gridster.positionYToPixels(this.gridsterItem.$item.minItemRows ||
|
|
318
|
+
this.gridster.$options.minItemRows) - this.margin;
|
|
319
|
+
this.minWidth =
|
|
320
|
+
this.gridster.positionXToPixels(this.gridsterItem.$item.minItemCols ||
|
|
321
|
+
this.gridster.$options.minItemCols) - this.margin;
|
|
322
|
+
this.gridster.movingItem = this.gridsterItem.$item;
|
|
323
|
+
this.gridster.previewStyle();
|
|
324
|
+
this.push = new GridsterPush(this.gridsterItem);
|
|
325
|
+
this.pushResize = new GridsterPushResize(this.gridsterItem);
|
|
326
|
+
this.gridster.dragInProgress = true;
|
|
327
|
+
this.gridster.updateGrid();
|
|
328
|
+
const { classList } = e.target;
|
|
329
|
+
if (classList.contains('handle-n')) {
|
|
330
|
+
this.resizeEventScrollType.north = true;
|
|
331
|
+
this.directionFunction = this.handleNorth;
|
|
332
|
+
}
|
|
333
|
+
else if (classList.contains('handle-w')) {
|
|
334
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
335
|
+
this.resizeEventScrollType.east = true;
|
|
336
|
+
this.directionFunction = this.handleEast;
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
this.resizeEventScrollType.west = true;
|
|
340
|
+
this.directionFunction = this.handleWest;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
else if (classList.contains('handle-s')) {
|
|
344
|
+
this.resizeEventScrollType.south = true;
|
|
345
|
+
this.directionFunction = this.handleSouth;
|
|
346
|
+
}
|
|
347
|
+
else if (classList.contains('handle-e')) {
|
|
348
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
349
|
+
this.resizeEventScrollType.west = true;
|
|
350
|
+
this.directionFunction = this.handleWest;
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
this.resizeEventScrollType.east = true;
|
|
354
|
+
this.directionFunction = this.handleEast;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
else if (classList.contains('handle-nw')) {
|
|
358
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
359
|
+
this.resizeEventScrollType.north = true;
|
|
360
|
+
this.resizeEventScrollType.east = true;
|
|
361
|
+
this.directionFunction = this.handleNorthEast;
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
this.resizeEventScrollType.north = true;
|
|
365
|
+
this.resizeEventScrollType.west = true;
|
|
366
|
+
this.directionFunction = this.handleNorthWest;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else if (classList.contains('handle-ne')) {
|
|
370
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
371
|
+
this.resizeEventScrollType.north = true;
|
|
372
|
+
this.resizeEventScrollType.west = true;
|
|
373
|
+
this.directionFunction = this.handleNorthWest;
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
this.resizeEventScrollType.north = true;
|
|
377
|
+
this.resizeEventScrollType.east = true;
|
|
378
|
+
this.directionFunction = this.handleNorthEast;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
else if (classList.contains('handle-sw')) {
|
|
382
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
383
|
+
this.resizeEventScrollType.south = true;
|
|
384
|
+
this.resizeEventScrollType.east = true;
|
|
385
|
+
this.directionFunction = this.handleSouthEast;
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
this.resizeEventScrollType.south = true;
|
|
389
|
+
this.resizeEventScrollType.west = true;
|
|
390
|
+
this.directionFunction = this.handleSouthWest;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
else if (classList.contains('handle-se')) {
|
|
394
|
+
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
395
|
+
this.resizeEventScrollType.south = true;
|
|
396
|
+
this.resizeEventScrollType.west = true;
|
|
397
|
+
this.directionFunction = this.handleSouthWest;
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
this.resizeEventScrollType.south = true;
|
|
401
|
+
this.resizeEventScrollType.east = true;
|
|
402
|
+
this.directionFunction = this.handleSouthEast;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
toggle() {
|
|
407
|
+
this.resizeEnabled = this.gridsterItem.canBeResized();
|
|
408
|
+
this.resizableHandles = this.gridsterItem.getResizableHandles();
|
|
409
|
+
}
|
|
410
|
+
dragStartDelay(e) {
|
|
411
|
+
GridsterUtils.checkTouchEvent(e);
|
|
412
|
+
if (!this.gridster.$options.resizable.delayStart) {
|
|
413
|
+
this.dragStart(e);
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
const timeout = setTimeout(() => {
|
|
417
|
+
this.dragStart(e);
|
|
418
|
+
cancelDrag();
|
|
419
|
+
}, this.gridster.$options.resizable.delayStart);
|
|
420
|
+
const { cancelMouse, cancelMouseLeave, cancelOnBlur, cancelTouchMove, cancelTouchEnd, cancelTouchCancel } = this.zone.runOutsideAngular(() => {
|
|
421
|
+
// Note: all of these events are being added within the `<root>` zone since they all
|
|
422
|
+
// don't do any view updates and don't require Angular running change detection.
|
|
423
|
+
// All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`
|
|
424
|
+
// is responsible only for removing event listeners.
|
|
425
|
+
const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
|
|
426
|
+
const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
|
|
427
|
+
const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
|
|
428
|
+
const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
|
|
429
|
+
const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
|
|
430
|
+
const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
|
|
431
|
+
return {
|
|
432
|
+
cancelMouse,
|
|
433
|
+
cancelMouseLeave,
|
|
434
|
+
cancelOnBlur,
|
|
435
|
+
cancelTouchMove,
|
|
436
|
+
cancelTouchEnd,
|
|
437
|
+
cancelTouchCancel
|
|
438
|
+
};
|
|
439
|
+
});
|
|
440
|
+
function cancelMove(eventMove) {
|
|
441
|
+
GridsterUtils.checkTouchEvent(eventMove);
|
|
442
|
+
if (Math.abs(eventMove.clientX - e.clientX) > 9 ||
|
|
443
|
+
Math.abs(eventMove.clientY - e.clientY) > 9) {
|
|
444
|
+
cancelDrag();
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
function cancelDrag() {
|
|
448
|
+
clearTimeout(timeout);
|
|
449
|
+
cancelOnBlur();
|
|
450
|
+
cancelMouse();
|
|
451
|
+
cancelMouseLeave();
|
|
452
|
+
cancelTouchMove();
|
|
453
|
+
cancelTouchEnd();
|
|
454
|
+
cancelTouchCancel();
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
setItemTop(top) {
|
|
458
|
+
this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);
|
|
459
|
+
}
|
|
460
|
+
setItemLeft(left) {
|
|
461
|
+
this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);
|
|
462
|
+
}
|
|
463
|
+
setItemHeight(height) {
|
|
464
|
+
this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');
|
|
465
|
+
}
|
|
466
|
+
setItemWidth(width) {
|
|
467
|
+
this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlclJlc2l6YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsTUFBTSxPQUFPLGlCQUFpQjtJQThENUIsWUFDRSxZQUE0QyxFQUM1QyxRQUFvQyxFQUM1QixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQXZEdEI7Ozs7V0FJRztRQUNLLHNCQUFpQixHQUVkLElBQUksQ0FBQztRQTBPaEIsYUFBUSxHQUFHLENBQUMsQ0FBYSxFQUFRLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUVBQXFFLENBQ3RFLENBQUM7WUFDSixDQUFDO1lBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQztZQUN6RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUM7WUFDNUUsTUFBTSxDQUNKLElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLElBQUksRUFDVCxJQUFJLENBQUMsR0FBRyxFQUNSLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksRUFDSixJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7WUFFRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDckIsT0FBTyxFQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLO2dCQUNuRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEtBQUs7YUFDM0UsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVGLGFBQVEsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQ2pDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsWUFBWSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVM7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE9BQU8sQ0FDYixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFDdEIsSUFBSSxDQUFDLFlBQVksRUFDakIsQ0FBQyxDQUNGLENBQ0YsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDO1lBQ0QsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUNwQix3QkFBd0IsQ0FDekIsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO29CQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixpQkFBWSxHQUFHLEdBQVMsRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBRUYsZUFBVSxHQUFHLEdBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDdkIsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBRU0sZ0JBQVcsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQzVDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDckQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQ2hELElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUyxFQUNwQixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSTtvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUMzQyxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FDYixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDO29CQUNGLElBQUksQ0FBQyxhQUFhLENBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUMzRCxJQUFJLENBQUMsTUFBTSxDQUNkLENBQUM7b0JBQ0YsT0FBTztnQkFDVCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7UUFFTSxlQUFVLEdBQUcsQ0FBQyxDQUFhLEVBQVEsRUFBRTtZQUMzQyxNQUFNLE9BQU8sR0FDWCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUc7Z0JBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN6QyxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RDLENBQUM7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxFQUN0QixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSTtvQkFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUMzQyxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkUsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDO29CQUNGLElBQUksQ0FBQyxZQUFZLENBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQzNELElBQUksQ0FBQyxNQUFNLENBQ2QsQ0FBQztvQkFDRixPQUFPO2dCQUNULENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMvQixDQUFDO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQztRQUVNLGdCQUFXLEdBQUcsQ0FBQyxDQUFhLEVBQVEsRUFBRTtZQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdEUsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7Z0JBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQ1gsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQ2xDLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDdkMsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLEVBQzFCLElBQUksQ0FBQyxJQUFJLENBQ1YsQ0FBQztZQUNGLElBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3hELElBQUksQ0FBQyxXQUFXLEVBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUMzQyxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQzNELElBQUksQ0FBQyxNQUFNLENBQ2QsQ0FBQztvQkFDRixPQUFPO2dCQUNULENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUMvQixDQUFDO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUVNLGVBQVUsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQzNDLE1BQU0sT0FBTyxHQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsR0FBRztnQkFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQzNELENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRXBFLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDcEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztnQkFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEMsQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3RFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQ3hCLElBQUksQ0FBQyxJQUFJLENBQ1YsQ0FBQztZQUNGLElBQ0UsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7Z0JBQ3hELElBQUksQ0FBQyxXQUFXLEVBQ2hCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUk7b0JBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUMzQyxDQUFDO2dCQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLFlBQVksQ0FDZixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FDZCxDQUFDO29CQUNGLE9BQU87Z0JBQ1QsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBRU0sb0JBQWUsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7UUFFTSxvQkFBZSxHQUFHLENBQUMsQ0FBYSxFQUFRLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FBQztRQUVNLG9CQUFlLEdBQUcsQ0FBQyxDQUFhLEVBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDO1FBRU0sb0JBQWUsR0FBRyxDQUFDLENBQWEsRUFBUSxFQUFFO1lBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUM7UUEzZkEsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRztZQUMzQixJQUFJLEVBQUUsS0FBSztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUssQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLENBQWE7UUFDckIsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0IsT0FBTztRQUNULENBQUM7UUFDRCxJQUNFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFDckMsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUN0QixJQUFJLENBQUMsWUFBWSxFQUNqQixDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNoRCxVQUFVLEVBQ1YsV0FBVyxFQUNYLElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztZQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFDaEIsV0FBVyxFQUNYLElBQUksQ0FBQyxRQUFRLENBQ2QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQzlDLFVBQVUsRUFDVixTQUFTLEVBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2pELFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ25ELFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQy9DLFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2xELFVBQVUsRUFDVixhQUFhLEVBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FDZCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFDcEIsd0JBQXdCLENBQ3pCLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDaEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztRQUM1RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDekUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FDckMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUNyQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTNCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBcUIsQ0FBQztRQUU5QyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUN4QyxJQUFJLENBQUMsaUJBQWlCLEdBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFRLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2pELENBQUM7YUFBTSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLEdBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsR0FBUSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQXVVRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxDQUEwQjtRQUN2QyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFlLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFlLENBQUMsQ0FBQztZQUNoQyxVQUFVLEVBQUUsQ0FBQztRQUNmLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQsTUFBTSxFQUNKLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLGVBQWUsRUFDZixjQUFjLEVBQ2QsaUJBQWlCLEVBQ2xCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsb0ZBQW9GO1lBQ3BGLGdGQUFnRjtZQUNoRix1RkFBdUY7WUFDdkYsb0RBQW9EO1lBRXBELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDbkQsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLENBQ1gsQ0FBQztZQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN4RCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNwRCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN2RCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN0RCxVQUFVLEVBQ1YsVUFBVSxFQUNWLFVBQVUsQ0FDWCxDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3pELFVBQVUsRUFDVixhQUFhLEVBQ2IsVUFBVSxDQUNYLENBQUM7WUFDRixPQUFPO2dCQUNMLFdBQVc7Z0JBQ1gsZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLGVBQWU7Z0JBQ2YsY0FBYztnQkFDZCxpQkFBaUI7YUFDbEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxVQUFVLENBQUMsU0FBcUI7WUFDdkMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxJQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBSSxDQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBSSxDQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFDM0QsQ0FBQztnQkFDRCxVQUFVLEVBQUUsQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBRUQsU0FBUyxVQUFVO1lBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixZQUFZLEVBQUUsQ0FBQztZQUNmLFdBQVcsRUFBRSxDQUFDO1lBQ2QsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixlQUFlLEVBQUUsQ0FBQztZQUNsQixjQUFjLEVBQUUsQ0FBQztZQUNqQixpQkFBaUIsRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVc7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksQ0FBQyxJQUFJLEVBQ1QsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUN4QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFDcEIsUUFBUSxFQUNSLE1BQU0sR0FBRyxJQUFJLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUNwQixPQUFPLEVBQ1AsS0FBSyxHQUFHLElBQUksQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4vZ3JpZHN0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpclR5cGVzIH0gZnJvbSAnLi9ncmlkc3RlckNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRzdGVyUHVzaCB9IGZyb20gJy4vZ3JpZHN0ZXJQdXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJQdXNoUmVzaXplIH0gZnJvbSAnLi9ncmlkc3RlclB1c2hSZXNpemUuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB9IGZyb20gJy4vZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgY2FuY2VsU2Nyb2xsLCBzY3JvbGwgfSBmcm9tICcuL2dyaWRzdGVyU2Nyb2xsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJVdGlscyB9IGZyb20gJy4vZ3JpZHN0ZXJVdGlscy5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyUmVzaXphYmxlIHtcbiAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XG4gIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZTtcbiAgbGFzdE1vdXNlOiB7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgfTtcbiAgaXRlbUJhY2t1cDogbnVtYmVyW107XG4gIHJlc2l6ZUV2ZW50U2Nyb2xsVHlwZTogR3JpZHN0ZXJSZXNpemVFdmVudFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gZnVuY3Rpb24gbWF5IHJlZmVyZW5jZSBhbnkgb2YgdGhlIGBHcmlkc3RlclJlc2l6YWJsZWAgY2xhc3MgbWV0aG9kcywgdGhhdCBhcmVcbiAgICogcmVzcG9uc2libGUgZm9yIGdyaWRzdGVyIHJlc2l6ZSB3aGVuIHRoZSBgZHJhZ21vdmVgIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQuIEUuZy4gaXQgbWF5IHJlZmVyZW5jZVxuICAgKiB0aGUgYGhhbmRsZU5vcnRoYCBtZXRob2Qgd2hlbiB0aGUgbm9ydGggaGFuZGxlIGlzIHByZXNzZWQgYW5kIG1vdmVkIGJ5IGEgbW91c2UuXG4gICAqL1xuICBwcml2YXRlIGRpcmVjdGlvbkZ1bmN0aW9uOlxuICAgIHwgKChldmVudDogUGljazxNb3VzZUV2ZW50LCAnY2xpZW50WCcgfCAnY2xpZW50WSc+KSA9PiB2b2lkKVxuICAgIHwgbnVsbCA9IG51bGw7XG5cbiAgcmVzaXplRW5hYmxlZCE6IGJvb2xlYW47XG4gIHJlc2l6YWJsZUhhbmRsZXMhOiB7XG4gICAgczogYm9vbGVhbjtcbiAgICBlOiBib29sZWFuO1xuICAgIG46IGJvb2xlYW47XG4gICAgdzogYm9vbGVhbjtcbiAgICBzZTogYm9vbGVhbjtcbiAgICBuZTogYm9vbGVhbjtcbiAgICBzdzogYm9vbGVhbjtcbiAgICBudzogYm9vbGVhbjtcbiAgfTtcbiAgbW91c2Vtb3ZlITogKCkgPT4gdm9pZDtcbiAgbW91c2V1cCE6ICgpID0+IHZvaWQ7XG4gIG1vdXNlbGVhdmUhOiAoKSA9PiB2b2lkO1xuICBjYW5jZWxPbkJsdXIhOiAoKSA9PiB2b2lkO1xuICB0b3VjaG1vdmUhOiAoKSA9PiB2b2lkO1xuICB0b3VjaGVuZCE6ICgpID0+IHZvaWQ7XG4gIHRvdWNoY2FuY2VsITogKCkgPT4gdm9pZDtcbiAgcHVzaCE6IEdyaWRzdGVyUHVzaDtcbiAgcHVzaFJlc2l6ZSE6IEdyaWRzdGVyUHVzaFJlc2l6ZTtcbiAgbWluSGVpZ2h0ITogbnVtYmVyO1xuICBtaW5XaWR0aCE6IG51bWJlcjtcbiAgb2Zmc2V0VG9wITogbnVtYmVyO1xuICBvZmZzZXRMZWZ0ITogbnVtYmVyO1xuICBkaWZmVG9wITogbnVtYmVyO1xuICBkaWZmTGVmdCE6IG51bWJlcjtcbiAgZGlmZlJpZ2h0ITogbnVtYmVyO1xuICBkaWZmQm90dG9tITogbnVtYmVyO1xuICBtYXJnaW4hOiBudW1iZXI7XG4gIG91dGVyTWFyZ2luVG9wITogbnVtYmVyIHwgbnVsbDtcbiAgb3V0ZXJNYXJnaW5SaWdodCE6IG51bWJlciB8IG51bGw7XG4gIG91dGVyTWFyZ2luQm90dG9tITogbnVtYmVyIHwgbnVsbDtcbiAgb3V0ZXJNYXJnaW5MZWZ0ITogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxDbGllbnRYITogbnVtYmVyO1xuICBvcmlnaW5hbENsaWVudFkhOiBudW1iZXI7XG4gIHRvcCE6IG51bWJlcjtcbiAgbGVmdCE6IG51bWJlcjtcbiAgYm90dG9tITogbnVtYmVyO1xuICByaWdodCE6IG51bWJlcjtcbiAgd2lkdGghOiBudW1iZXI7XG4gIGhlaWdodCE6IG51bWJlcjtcbiAgbmV3UG9zaXRpb24hOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtID0gZ3JpZHN0ZXJJdGVtO1xuICAgIHRoaXMuZ3JpZHN0ZXIgPSBncmlkc3RlcjtcbiAgICB0aGlzLmxhc3RNb3VzZSA9IHtcbiAgICAgIGNsaWVudFg6IDAsXG4gICAgICBjbGllbnRZOiAwXG4gICAgfTtcbiAgICB0aGlzLml0ZW1CYWNrdXAgPSBbMCwgMCwgMCwgMF07XG4gICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUgPSB7XG4gICAgICB3ZXN0OiBmYWxzZSxcbiAgICAgIGVhc3Q6IGZhbHNlLFxuICAgICAgbm9ydGg6IGZhbHNlLFxuICAgICAgc291dGg6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlcj8ucHJldmlld1N0eWxlKCk7XG4gICAgdGhpcy5ncmlkc3RlciA9IHRoaXMuZ3JpZHN0ZXJJdGVtID0gbnVsbCE7XG4gIH1cblxuICBkcmFnU3RhcnQoZTogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChlLndoaWNoICYmIGUud2hpY2ggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZSAmJlxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdGFydFxuICAgICkge1xuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdGFydChcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbSxcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0sXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgfVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMubW91c2Vtb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgICAgdGhpcy5kcmFnTW92ZVxuICAgICAgKTtcbiAgICAgIHRoaXMudG91Y2htb3ZlID0gdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuZWwsXG4gICAgICAgICd0b3VjaG1vdmUnLFxuICAgICAgICB0aGlzLmRyYWdNb3ZlXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMubW91c2V1cCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICdkb2N1bWVudCcsXG4gICAgICAnbW91c2V1cCcsXG4gICAgICB0aGlzLmRyYWdTdG9wXG4gICAgKTtcbiAgICB0aGlzLm1vdXNlbGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlbGVhdmUnLFxuICAgICAgdGhpcy5kcmFnU3RvcFxuICAgICk7XG4gICAgdGhpcy5jYW5jZWxPbkJsdXIgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnd2luZG93JyxcbiAgICAgICdibHVyJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuICAgIHRoaXMudG91Y2hlbmQgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ3RvdWNoZW5kJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuICAgIHRoaXMudG91Y2hjYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ3RvdWNoY2FuY2VsJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgICdncmlkc3Rlci1pdGVtLXJlc2l6aW5nJ1xuICAgICk7XG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID0gZS5jbGllbnRZO1xuICAgIHRoaXMubGVmdCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQ7XG4gICAgdGhpcy50b3AgPSB0aGlzLmdyaWRzdGVySXRlbS50b3A7XG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFggPSBlLmNsaWVudFg7XG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFkgPSBlLmNsaWVudFk7XG4gICAgdGhpcy53aWR0aCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLndpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gdGhpcy5ncmlkc3Rlckl0ZW0udG9wICsgdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLmdyaWRzdGVySXRlbS5sZWZ0ICsgdGhpcy5ncmlkc3Rlckl0ZW0ud2lkdGg7XG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcbiAgICB0aGlzLm91dGVyTWFyZ2luVG9wID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblRvcDtcbiAgICB0aGlzLm91dGVyTWFyZ2luUmlnaHQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luUmlnaHQ7XG4gICAgdGhpcy5vdXRlck1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b207XG4gICAgdGhpcy5vdXRlck1hcmdpbkxlZnQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XG4gICAgdGhpcy5vZmZzZXRUb3AgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbFRvcCAtIHRoaXMuZ3JpZHN0ZXIuZWwub2Zmc2V0VG9wO1xuICAgIHRoaXMuZGlmZkxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmxlZnQ7XG4gICAgdGhpcy5kaWZmUmlnaHQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLnJpZ2h0O1xuICAgIHRoaXMuZGlmZlRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy50b3A7XG4gICAgdGhpcy5kaWZmQm90dG9tID0gZS5jbGllbnRZICsgdGhpcy5vZmZzZXRUb3AgLSB0aGlzLmJvdHRvbTtcbiAgICB0aGlzLm1pbkhlaWdodCA9XG4gICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWVRvUGl4ZWxzKFxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtUm93cyB8fFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWluSXRlbVJvd3NcbiAgICAgICkgLSB0aGlzLm1hcmdpbjtcbiAgICB0aGlzLm1pbldpZHRoID1cbiAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHMoXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLm1pbkl0ZW1Db2xzIHx8XG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtQ29sc1xuICAgICAgKSAtIHRoaXMubWFyZ2luO1xuICAgIHRoaXMuZ3JpZHN0ZXIubW92aW5nSXRlbSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtO1xuICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XG4gICAgdGhpcy5wdXNoID0gbmV3IEdyaWRzdGVyUHVzaCh0aGlzLmdyaWRzdGVySXRlbSk7XG4gICAgdGhpcy5wdXNoUmVzaXplID0gbmV3IEdyaWRzdGVyUHVzaFJlc2l6ZSh0aGlzLmdyaWRzdGVySXRlbSk7XG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XG5cbiAgICBjb25zdCB7IGNsYXNzTGlzdCB9ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtbicpKSB7XG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID0gPGFueT4gdGhpcy5oYW5kbGVOb3J0aDtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLXcnKSkge1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZUVhc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVXZXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtcycpKSB7XG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtZScpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlV2VzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZUVhc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1udycpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUubm9ydGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5lYXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aEVhc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoV2VzdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLW5lJykpIHtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoV2VzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLm5vcnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlTm9ydGhFYXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtc3cnKSkge1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlU291dGhFYXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aFdlc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zZScpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aFdlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoRWFzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBgZGlyZWN0aW9uRnVuY3Rpb25gIGhhcyBub3QgYmVlbiBzZXQgYmVmb3JlIGNhbGxpbmcgYGRyYWdNb3ZlYC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIEdyaWRzdGVyVXRpbHMuY2hlY2tUb3VjaEV2ZW50KGUpO1xuICAgIHRoaXMub2Zmc2V0VG9wID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxUb3AgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldFRvcDtcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XG4gICAgc2Nyb2xsKFxuICAgICAgdGhpcy5ncmlkc3RlcixcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgZSxcbiAgICAgIHRoaXMubGFzdE1vdXNlLFxuICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbixcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZVxuICAgICk7XG5cbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5zY2FsZSB8fCAxO1xuICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24oe1xuICAgICAgY2xpZW50WDpcbiAgICAgICAgdGhpcy5vcmlnaW5hbENsaWVudFggKyAoZS5jbGllbnRYIC0gdGhpcy5vcmlnaW5hbENsaWVudFgpIC8gc2NhbGUsXG4gICAgICBjbGllbnRZOiB0aGlzLm9yaWdpbmFsQ2xpZW50WSArIChlLmNsaWVudFkgLSB0aGlzLm9yaWdpbmFsQ2xpZW50WSkgLyBzY2FsZVxuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID0gZS5jbGllbnRZO1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgZHJhZ1N0b3AgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNhbmNlbFNjcm9sbCgpO1xuICAgIHRoaXMubW91c2Vtb3ZlKCk7XG4gICAgdGhpcy5tb3VzZXVwKCk7XG4gICAgdGhpcy5tb3VzZWxlYXZlKCk7XG4gICAgdGhpcy5jYW5jZWxPbkJsdXIoKTtcbiAgICB0aGlzLnRvdWNobW92ZSgpO1xuICAgIHRoaXMudG91Y2hlbmQoKTtcbiAgICB0aGlzLnRvdWNoY2FuY2VsKCk7XG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZHN0ZXIudXBkYXRlR3JpZCgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUgJiZcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RvcFxuICAgICkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlLnN0b3AoXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbSxcbiAgICAgICAgICB0aGlzLmdyaWRzdGVySXRlbSxcbiAgICAgICAgICBlXG4gICAgICAgIClcbiAgICAgICkudGhlbih0aGlzLm1ha2VSZXNpemUsIHRoaXMuY2FuY2VsUmVzaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYWtlUmVzaXplKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgICAnZ3JpZHN0ZXItaXRlbS1yZXNpemluZydcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlcikge1xuICAgICAgICB0aGlzLmdyaWRzdGVyLm1vdmluZ0l0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNhbmNlbFJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzID0gdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbS5jb2xzIHx8IDE7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ucm93cyB8fCAxO1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLmdyaWRzdGVySXRlbS5pdGVtLnggfHwgMDtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbS55IHx8IDA7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xuICAgIHRoaXMucHVzaC5yZXN0b3JlSXRlbXMoKTtcbiAgICB0aGlzLnB1c2hSZXNpemUucmVzdG9yZUl0ZW1zKCk7XG4gICAgdGhpcy5wdXNoLmRlc3Ryb3koKTtcbiAgICB0aGlzLnB1c2ggPSBudWxsITtcbiAgICB0aGlzLnB1c2hSZXNpemUuZGVzdHJveSgpO1xuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG51bGwhO1xuICB9O1xuXG4gIG1ha2VSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmNoZWNrSXRlbUNoYW5nZXMoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSxcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW1cbiAgICApO1xuICAgIHRoaXMucHVzaC5zZXRQdXNoZWRJdGVtcygpO1xuICAgIHRoaXMucHVzaFJlc2l6ZS5zZXRQdXNoZWRJdGVtcygpO1xuICAgIHRoaXMucHVzaC5kZXN0cm95KCk7XG4gICAgdGhpcy5wdXNoID0gbnVsbCE7XG4gICAgdGhpcy5wdXNoUmVzaXplLmRlc3Ryb3koKTtcbiAgICB0aGlzLnB1c2hSZXNpemUgPSBudWxsITtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZU5vcnRoID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLnRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmVG9wO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ib3R0b20gLSB0aGlzLnRvcDtcbiAgICBpZiAodGhpcy5taW5IZWlnaHQgPiB0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcbiAgICAgIHRoaXMudG9wID0gdGhpcy5ib3R0b20gLSB0aGlzLm1pbkhlaWdodDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcbiAgICAgIHRoaXMudG9wID0gTWF0aC5tYXgoMCwgdGhpcy50b3ApO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Ub3AgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gdGhpcy5tYXJnaW4gOiAwO1xuICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLmdyaWRzdGVyLnBpeGVsc1RvUG9zaXRpb25ZKFxuICAgICAgdGhpcy50b3AgKyBtYXJnaW5Ub3AsXG4gICAgICBNYXRoLmZsb29yXG4gICAgKTtcbiAgICBpZiAodGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSAhPT0gdGhpcy5uZXdQb3NpdGlvbikge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzFdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFszXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3M7XG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzICs9XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgLSB0aGlzLm5ld1Bvc2l0aW9uO1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMubmV3UG9zaXRpb247XG4gICAgICB0aGlzLnB1c2hSZXNpemUucHVzaEl0ZW1zKHRoaXMucHVzaFJlc2l6ZS5mcm9tU291dGgpO1xuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcbiAgICAgICAgdGhpcy5wdXNoLmZyb21Tb3V0aCxcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuY2hlY2tDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgPSB0aGlzLml0ZW1CYWNrdXBbMV07XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPSB0aGlzLml0ZW1CYWNrdXBbM107XG4gICAgICAgIHRoaXMudG9wID0gdGhpcy5ncmlkc3Rlci5wb3NpdGlvbllUb1BpeGVscyh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55KTtcbiAgICAgICAgdGhpcy5zZXRJdGVtVG9wKFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtSGVpZ2h0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1Ub3AodGhpcy50b3ApO1xuICAgIHRoaXMuc2V0SXRlbUhlaWdodCh0aGlzLmhlaWdodCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVXZXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjbGllbnRYID1cbiAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMXG4gICAgICAgID8gdGhpcy5vcmlnaW5hbENsaWVudFggKyAodGhpcy5vcmlnaW5hbENsaWVudFggLSBlLmNsaWVudFgpXG4gICAgICAgIDogZS5jbGllbnRYO1xuICAgIHRoaXMubGVmdCA9IGNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmRpZmZMZWZ0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XG4gICAgaWYgKHRoaXMubWluV2lkdGggPiB0aGlzLndpZHRoKSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgIHRoaXMubGVmdCA9IHRoaXMucmlnaHQgLSB0aGlzLm1pbldpZHRoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkc3Rlci5vcHRpb25zLmVuYWJsZUJvdW5kYXJ5Q29udHJvbCkge1xuICAgICAgdGhpcy5sZWZ0ID0gTWF0aC5tYXgoMCwgdGhpcy5sZWZ0KTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gdGhpcy5ncmlkc3Rlci5vcHRpb25zLnB1c2hJdGVtcyA/IHRoaXMubWFyZ2luIDogMDtcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcbiAgICAgIHRoaXMubGVmdCArIG1hcmdpbkxlZnQsXG4gICAgICBNYXRoLmZsb29yXG4gICAgKTtcbiAgICBpZiAodGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCAhPT0gdGhpcy5uZXdQb3NpdGlvbikge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzBdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueDtcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFsyXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHM7XG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICs9XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggLSB0aGlzLm5ld1Bvc2l0aW9uO1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMubmV3UG9zaXRpb247XG4gICAgICB0aGlzLnB1c2hSZXNpemUucHVzaEl0ZW1zKHRoaXMucHVzaFJlc2l6ZS5mcm9tRWFzdCk7XG4gICAgICB0aGlzLnB1c2gucHVzaEl0ZW1zKFxuICAgICAgICB0aGlzLnB1c2guZnJvbUVhc3QsXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ID0gdGhpcy5pdGVtQmFja3VwWzBdO1xuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzID0gdGhpcy5pdGVtQmFja3VwWzJdO1xuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpO1xuICAgICAgICB0aGlzLnNldEl0ZW1MZWZ0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtV2lkdGgoXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvblhUb1BpeGVscyh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzKSAtXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcbiAgICAgIHRoaXMucHVzaC5jaGVja1B1c2hCYWNrKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SXRlbUxlZnQodGhpcy5sZWZ0KTtcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZVNvdXRoID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLmhlaWdodCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmQm90dG9tIC0gdGhpcy50b3A7XG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5taW5IZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci5vcHRpb25zLmVuYWJsZUJvdW5kYXJ5Q29udHJvbCkge1xuICAgICAgY29uc3QgbWFyZ2luID0gdGhpcy5vdXRlck1hcmdpbkJvdHRvbSA/PyB0aGlzLm1hcmdpbjtcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmJvdHRvbSA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmJvdHRvbSxcbiAgICAgICAgYm94LmJvdHRvbSAtIGJveC50b3AgLSAyICogbWFyZ2luXG4gICAgICApO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Cb3R0b20gPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gMCA6IHRoaXMubWFyZ2luO1xuICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLmdyaWRzdGVyLnBpeGVsc1RvUG9zaXRpb25ZKFxuICAgICAgdGhpcy5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXG4gICAgICBNYXRoLmNlaWxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzICE9PVxuICAgICAgdGhpcy5uZXdQb3NpdGlvblxuICAgICkge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzNdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cztcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPVxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21Ob3J0aCk7XG4gICAgICB0aGlzLnB1c2gucHVzaEl0ZW1zKFxuICAgICAgICB0aGlzLnB1c2guZnJvbU5vcnRoLFxuICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpc2FibGVQdXNoT25SZXNpemVcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuaXRlbUJhY2t1cFszXTtcbiAgICAgICAgdGhpcy5zZXRJdGVtSGVpZ2h0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1IZWlnaHQodGhpcy5oZWlnaHQpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgY2xpZW50WCA9XG4gICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTFxuICAgICAgICA/IHRoaXMub3JpZ2luYWxDbGllbnRYICsgKHRoaXMub3JpZ2luYWxDbGllbnRYIC0gZS5jbGllbnRYKVxuICAgICAgICA6IGUuY2xpZW50WDtcbiAgICB0aGlzLndpZHRoID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZlJpZ2h0IC0gdGhpcy5sZWZ0O1xuXG4gICAgaWYgKHRoaXMubWluV2lkdGggPiB0aGlzLndpZHRoKSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICB9XG4gICAgdGhpcy5yaWdodCA9IHRoaXMubGVmdCArIHRoaXMud2lkdGg7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMub3V0ZXJNYXJnaW5SaWdodCA/PyB0aGlzLm1hcmdpbjtcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnJpZ2h0ID0gTWF0aC5taW4odGhpcy5yaWdodCwgYm94LnJpZ2h0IC0gYm94LmxlZnQgLSAyICogbWFyZ2luKTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuZ3JpZHN0ZXIucGl4ZWxzVG9Qb3NpdGlvblgoXG4gICAgICB0aGlzLnJpZ2h0ICsgbWFyZ2luUmlnaHQsXG4gICAgICBNYXRoLmNlaWxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICE9PVxuICAgICAgdGhpcy5uZXdQb3NpdGlvblxuICAgICkge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzJdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scztcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPVxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueDtcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21XZXN0KTtcbiAgICAgIHRoaXMucHVzaC5wdXNoSXRlbXMoXG4gICAgICAgIHRoaXMucHVzaC5mcm9tV2VzdCxcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuY2hlY2tDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPSB0aGlzLml0ZW1CYWNrdXBbMl07XG4gICAgICAgIHRoaXMuc2V0SXRlbVdpZHRoKFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZU5vcnRoV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5oYW5kbGVOb3J0aChlKTtcbiAgICB0aGlzLmhhbmRsZVdlc3QoZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb3J0aEVhc3QgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuaGFuZGxlTm9ydGgoZSk7XG4gICAgdGhpcy5oYW5kbGVFYXN0KGUpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlU291dGhXZXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLmhhbmRsZVNvdXRoKGUpO1xuICAgIHRoaXMuaGFuZGxlV2VzdChlKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZVNvdXRoRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5oYW5kbGVTb3V0aChlKTtcbiAgICB0aGlzLmhhbmRsZUVhc3QoZSk7XG4gIH07XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplRW5hYmxlZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmNhbkJlUmVzaXplZCgpO1xuICAgIHRoaXMucmVzaXphYmxlSGFuZGxlcyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmdldFJlc2l6YWJsZUhhbmRsZXMoKTtcbiAgfVxuXG4gIGRyYWdTdGFydERlbGF5KGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZSk7XG5cbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucmVzaXphYmxlLmRlbGF5U3RhcnQpIHtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0KGUgYXMgTW91c2VFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnU3RhcnQoZSBhcyBNb3VzZUV2ZW50KTtcbiAgICAgIGNhbmNlbERyYWcoKTtcbiAgICB9LCB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnJlc2l6YWJsZS5kZWxheVN0YXJ0KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGNhbmNlbE1vdXNlLFxuICAgICAgY2FuY2VsTW91c2VMZWF2ZSxcbiAgICAgIGNhbmNlbE9uQmx1cixcbiAgICAgIGNhbmNlbFRvdWNoTW92ZSxcbiAgICAgIGNhbmNlbFRvdWNoRW5kLFxuICAgICAgY2FuY2VsVG91Y2hDYW5jZWxcbiAgICB9ID0gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IGFsbCBvZiB0aGVzZSBldmVudHMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYDxyb290PmAgem9uZSBzaW5jZSB0aGV5IGFsbFxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHZpZXcgdXBkYXRlcyBhbmQgZG9uJ3QgcmVxdWlyZSBBbmd1bGFyIHJ1bm5pbmcgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgIC8vIEFsbCBldmVudCBsaXN0ZW5lcnMgY2FsbCBgY2FuY2VsRHJhZ2Agb25jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCwgdGhlIGBjYW5jZWxEcmFnYFxuICAgICAgLy8gaXMgcmVzcG9uc2libGUgb25seSBmb3IgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzLlxuXG4gICAgICBjb25zdCBjYW5jZWxNb3VzZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgJ21vdXNldXAnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsTW91c2VMZWF2ZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgJ21vdXNlbGVhdmUnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsT25CbHVyID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnd2luZG93JyxcbiAgICAgICAgJ2JsdXInLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsVG91Y2hNb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAndG91Y2htb3ZlJyxcbiAgICAgICAgY2FuY2VsTW92ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNhbmNlbFRvdWNoRW5kID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAndG91Y2hlbmQnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsVG91Y2hDYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXG4gICAgICAgIGNhbmNlbERyYWdcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWxNb3VzZSxcbiAgICAgICAgY2FuY2VsTW91c2VMZWF2ZSxcbiAgICAgICAgY2FuY2VsT25CbHVyLFxuICAgICAgICBjYW5jZWxUb3VjaE1vdmUsXG4gICAgICAgIGNhbmNlbFRvdWNoRW5kLFxuICAgICAgICBjYW5jZWxUb3VjaENhbmNlbFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGNhbmNlbE1vdmUoZXZlbnRNb3ZlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICBHcmlkc3RlclV0aWxzLmNoZWNrVG91Y2hFdmVudChldmVudE1vdmUpO1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhldmVudE1vdmUuY2xpZW50WCAtIChlIGFzIE1vdXNlRXZlbnQpLmNsaWVudFgpID4gOSB8fFxuICAgICAgICBNYXRoLmFicyhldmVudE1vdmUuY2xpZW50WSAtIChlIGFzIE1vdXNlRXZlbnQpLmNsaWVudFkpID4gOVxuICAgICAgKSB7XG4gICAgICAgIGNhbmNlbERyYWcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxEcmFnKCk6IHZvaWQge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2FuY2VsT25CbHVyKCk7XG4gICAgICBjYW5jZWxNb3VzZSgpO1xuICAgICAgY2FuY2VsTW91c2VMZWF2ZSgpO1xuICAgICAgY2FuY2VsVG91Y2hNb3ZlKCk7XG4gICAgICBjYW5jZWxUb3VjaEVuZCgpO1xuICAgICAgY2FuY2VsVG91Y2hDYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBzZXRJdGVtVG9wKHRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlci5ncmlkUmVuZGVyZXIuc2V0Q2VsbFBvc2l0aW9uKFxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIsXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRvcFxuICAgICk7XG4gIH1cblxuICBzZXRJdGVtTGVmdChsZWZ0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRzdGVyLmdyaWRSZW5kZXJlci5zZXRDZWxsUG9zaXRpb24oXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlcixcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgbGVmdCxcbiAgICAgIHRoaXMudG9wXG4gICAgKTtcbiAgfVxuXG4gIHNldEl0ZW1IZWlnaHQoaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgJ2hlaWdodCcsXG4gICAgICBoZWlnaHQgKyAncHgnXG4gICAgKTtcbiAgfVxuXG4gIHNldEl0ZW1XaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgICd3aWR0aCcsXG4gICAgICB3aWR0aCArICdweCdcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmEtZGFzaGJvYXJkLWZyYW1ld29yay9zcmMvZ3JpZHN0ZXIvbGliL2dyaWRzdGVyUmVzaXplRXZlbnRUeXBlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB7XG4gIG5vcnRoOiBib29sZWFuO1xuICBzb3V0aDogYm9vbGVhbjtcbiAgd2VzdDogYm9vbGVhbjtcbiAgZWFzdDogYm9vbGVhbjtcbn1cbiJdfQ==
|