@bryntum/calendar-angular-thin 7.1.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 +44 -0
- package/bryntum-calendar-angular-thin.d.ts +5 -0
- package/bundles/bryntum-calendar-angular-thin.umd.js +22195 -0
- package/bundles/bryntum-calendar-angular-thin.umd.js.map +1 -0
- package/esm2015/bryntum-calendar-angular-thin.js +5 -0
- package/esm2015/lib/bryntum-agenda-view.component.js +2503 -0
- package/esm2015/lib/bryntum-calendar-date-picker.component.js +1045 -0
- package/esm2015/lib/bryntum-calendar-project-model.component.js +369 -0
- package/esm2015/lib/bryntum-calendar.component.js +2355 -0
- package/esm2015/lib/bryntum-day-agenda-view.component.js +1338 -0
- package/esm2015/lib/bryntum-day-resource-view.component.js +1347 -0
- package/esm2015/lib/bryntum-day-view.component.js +1323 -0
- package/esm2015/lib/bryntum-event-list.component.js +2453 -0
- package/esm2015/lib/bryntum-mode-selector.component.js +702 -0
- package/esm2015/lib/bryntum-month-agenda-view.component.js +1201 -0
- package/esm2015/lib/bryntum-month-grid.component.js +1262 -0
- package/esm2015/lib/bryntum-month-view.component.js +1337 -0
- package/esm2015/lib/bryntum-range-menu.component.js +884 -0
- package/esm2015/lib/bryntum-resource-view.component.js +1068 -0
- package/esm2015/lib/bryntum-week-view.component.js +1323 -0
- package/esm2015/lib/bryntum-year-view.component.js +1163 -0
- package/esm2015/lib/calendar.module.js +99 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +21 -0
- package/fesm2015/bryntum-calendar-angular-thin.js +21714 -0
- package/fesm2015/bryntum-calendar-angular-thin.js.map +1 -0
- package/lib/bryntum-agenda-view.component.d.ts +2953 -0
- package/lib/bryntum-calendar-date-picker.component.d.ts +1525 -0
- package/lib/bryntum-calendar-project-model.component.d.ts +399 -0
- package/lib/bryntum-calendar.component.d.ts +2577 -0
- package/lib/bryntum-day-agenda-view.component.d.ts +1960 -0
- package/lib/bryntum-day-resource-view.component.d.ts +2025 -0
- package/lib/bryntum-day-view.component.d.ts +1980 -0
- package/lib/bryntum-event-list.component.d.ts +2888 -0
- package/lib/bryntum-mode-selector.component.d.ts +851 -0
- package/lib/bryntum-month-agenda-view.component.d.ts +1765 -0
- package/lib/bryntum-month-grid.component.d.ts +1731 -0
- package/lib/bryntum-month-view.component.d.ts +1897 -0
- package/lib/bryntum-range-menu.component.d.ts +1130 -0
- package/lib/bryntum-resource-view.component.d.ts +1512 -0
- package/lib/bryntum-week-view.component.d.ts +1980 -0
- package/lib/bryntum-year-view.component.d.ts +1661 -0
- package/lib/calendar.module.d.ts +22 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +17 -0
|
@@ -0,0 +1,1323 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum DayView
|
|
4
|
+
*/
|
|
5
|
+
import { Component, EventEmitter, Output, Input } from '@angular/core';
|
|
6
|
+
import WrapperHelper from './wrapper.helper';
|
|
7
|
+
import { Widget } from '@bryntum/core-thin';
|
|
8
|
+
import { DayView } from '@bryntum/calendar-thin';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class BryntumDayViewComponent {
|
|
11
|
+
constructor(element) {
|
|
12
|
+
this.bryntumConfig = {
|
|
13
|
+
adopt: undefined,
|
|
14
|
+
appendTo: undefined,
|
|
15
|
+
href: undefined,
|
|
16
|
+
angularComponent: this,
|
|
17
|
+
features: {},
|
|
18
|
+
listeners: {}
|
|
19
|
+
};
|
|
20
|
+
// Events emitters
|
|
21
|
+
/**
|
|
22
|
+
* This event fires whenever the [autoCreate gesture](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) is detected
|
|
23
|
+
* and also when a [drag-create](https://bryntum.com/products/calendar/docs/api/Calendar/feature/CalendarDrag) gesture is detected.
|
|
24
|
+
* ...
|
|
25
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-beforeAutoCreate)
|
|
26
|
+
* @param {object} event Event object
|
|
27
|
+
* @param {Event} event.domEvent The DOM event which initiated the creation.
|
|
28
|
+
* @param {Date} event.date *DEPRECATED in favour of `startDate`.* The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
|
|
29
|
+
* @param {Date} event.startDate The starting time of the event to be created. If this is in a `DayView`, this will be snapped according to the specification in [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate)
|
|
30
|
+
* @param {Date} event.endDate The ending time of the event to be created.
|
|
31
|
+
* @param {Scheduler.model.ResourceModel} event.resourceRecord The resource if the UI includes a resource.
|
|
32
|
+
* @param {CalendarView} event.view This view.
|
|
33
|
+
*/
|
|
34
|
+
this.onBeforeAutoCreate = new EventEmitter();
|
|
35
|
+
/**
|
|
36
|
+
* Triggered before a view's orientating date changes.
|
|
37
|
+
* ...
|
|
38
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-beforeChangeDate)
|
|
39
|
+
* @param {object} event Event object
|
|
40
|
+
* @param {Date} event.oldDate The current orientating date of this view.
|
|
41
|
+
* @param {Date} event.date The new date to which this view is to be orientated.
|
|
42
|
+
*/
|
|
43
|
+
this.onBeforeChangeDate = new EventEmitter();
|
|
44
|
+
/**
|
|
45
|
+
* Fires before an object is destroyed.
|
|
46
|
+
* @param {object} event Event object
|
|
47
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
48
|
+
*/
|
|
49
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
50
|
+
/**
|
|
51
|
+
* Triggered before a widget is hidden. Return `false` to prevent the action.
|
|
52
|
+
* @param {object} event Event object
|
|
53
|
+
* @param {Core.widget.Widget} event.source The widget being hidden.
|
|
54
|
+
*/
|
|
55
|
+
this.onBeforeHide = new EventEmitter();
|
|
56
|
+
/**
|
|
57
|
+
* Triggered before a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
|
|
58
|
+
* @param {object} event Event object
|
|
59
|
+
* @param {Core.widget.Widget} event.source The widget whose `responsiveState` is to be changed
|
|
60
|
+
* @param {string} event.state The new value for the widget's `responsiveState`
|
|
61
|
+
* @param {string} event.oldState The previous value for the widget's `responsiveState`
|
|
62
|
+
*/
|
|
63
|
+
this.onBeforeResponsiveStateChange = new EventEmitter();
|
|
64
|
+
/**
|
|
65
|
+
* Fired before this container will load record values into its child fields. This is useful if you
|
|
66
|
+
* want to modify the UI before data is loaded (e.g. set some input field to be readonly)
|
|
67
|
+
* @param {object} event Event object
|
|
68
|
+
* @param {Core.widget.Container} event.source The container
|
|
69
|
+
* @param {Core.data.Model} event.record The record
|
|
70
|
+
*/
|
|
71
|
+
this.onBeforeSetRecord = new EventEmitter();
|
|
72
|
+
/**
|
|
73
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
74
|
+
* @param {object} event Event object
|
|
75
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
76
|
+
*/
|
|
77
|
+
this.onBeforeShow = new EventEmitter();
|
|
78
|
+
/**
|
|
79
|
+
* Fired before state is applied to the source. Allows editing the state object or preventing the operation.
|
|
80
|
+
* @param {object} event Event object
|
|
81
|
+
* @param {any} event.state State object config
|
|
82
|
+
*/
|
|
83
|
+
this.onBeforeStateApply = new EventEmitter();
|
|
84
|
+
/**
|
|
85
|
+
* Fired before state is saved by the StateProvider. Allows editing the state object or preventing the operation.
|
|
86
|
+
* @param {object} event Event object
|
|
87
|
+
* @param {any} event.state State object config
|
|
88
|
+
*/
|
|
89
|
+
this.onBeforeStateSave = new EventEmitter();
|
|
90
|
+
/**
|
|
91
|
+
* Fires when any other event is fired from the object.
|
|
92
|
+
* ...
|
|
93
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-catchAll)
|
|
94
|
+
* @param {object} event Event object
|
|
95
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
96
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
97
|
+
*/
|
|
98
|
+
this.onCatchAll = new EventEmitter();
|
|
99
|
+
/**
|
|
100
|
+
* Fired when a new set of events has been gathered for this view's date range.
|
|
101
|
+
* @param {object} event Event object
|
|
102
|
+
* @param {Map<any, any>} event.cellMap The map of date keys to [day cell](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DayCellCollecter#typedef-DayCell) data blocks.
|
|
103
|
+
*/
|
|
104
|
+
this.onCellMapPopulated = new EventEmitter();
|
|
105
|
+
/**
|
|
106
|
+
* Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
|
|
107
|
+
* @param {object} event Event object
|
|
108
|
+
* @param {Core.widget.Panel} event.source This Panel.
|
|
109
|
+
*/
|
|
110
|
+
this.onCollapse = new EventEmitter();
|
|
111
|
+
/**
|
|
112
|
+
* Fired after one day cell's events are collected in sorted order according to the
|
|
113
|
+
* [eventSorter](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-eventSorter)
|
|
114
|
+
* ...
|
|
115
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-dayCellPopulated)
|
|
116
|
+
* @param {object} event Event object
|
|
117
|
+
* @param {Scheduler.model.EventModel[]} event.events The events to be shown for the passed date
|
|
118
|
+
* @param {Date} event.The date the events are to be shown in.
|
|
119
|
+
*/
|
|
120
|
+
this.onDayCellPopulated = new EventEmitter();
|
|
121
|
+
/**
|
|
122
|
+
* Fires when an object is destroyed.
|
|
123
|
+
* @param {object} event Event object
|
|
124
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
125
|
+
*/
|
|
126
|
+
this.onDestroy = new EventEmitter();
|
|
127
|
+
/**
|
|
128
|
+
* Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/calendar/docs/api/Core/widget/Container#property-hasChanges) property changes
|
|
129
|
+
* @param {object} event Event object
|
|
130
|
+
* @param {Core.widget.Container} event.source The container.
|
|
131
|
+
* @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
|
|
132
|
+
*/
|
|
133
|
+
this.onDirtyStateChange = new EventEmitter();
|
|
134
|
+
/**
|
|
135
|
+
* Triggered when a widget's [element](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#property-element) is available.
|
|
136
|
+
* @param {object} event Event object
|
|
137
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
138
|
+
*/
|
|
139
|
+
this.onElementCreated = new EventEmitter();
|
|
140
|
+
/**
|
|
141
|
+
* Fired when an [autoCreate](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/CalendarMixin#config-autoCreate) gesture has created a new event
|
|
142
|
+
* and added it to the event store.
|
|
143
|
+
* ...
|
|
144
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-eventAutoCreated)
|
|
145
|
+
* @param {object} event Event object
|
|
146
|
+
* @param {CalendarView} event.source This Calendar view instance.
|
|
147
|
+
* @param {Scheduler.model.EventModel} event.eventRecord The new event record.
|
|
148
|
+
*/
|
|
149
|
+
this.onEventAutoCreated = new EventEmitter();
|
|
150
|
+
/**
|
|
151
|
+
* Fires when a day spanning event is found, and the date to which its encapsulating event bar
|
|
152
|
+
* extends has been calculated.
|
|
153
|
+
* ...
|
|
154
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-eventPropagate)
|
|
155
|
+
* @param {object} event Event object
|
|
156
|
+
* @param {Date} event.eventEndDate The end date for which to calculate the propagate end date.
|
|
157
|
+
* @param {Date} event.propagateEndDate The system-calculated end point of the event bar.
|
|
158
|
+
* @param {boolean} event.isAllDay `true` if the event is an all day event, or spans multiple days.
|
|
159
|
+
* @param {boolean} event.isOverflow `true` if this is being called as part of further propagation.
|
|
160
|
+
* @param {boolean} event.overflows `true` if the event extends into future cells.
|
|
161
|
+
* @param {Scheduler.model.EventModel} event.eventRecord The event record being propagated.
|
|
162
|
+
* @param {Date} event.date The date from which the event is being propagated.
|
|
163
|
+
*/
|
|
164
|
+
this.onEventPropagate = new EventEmitter();
|
|
165
|
+
/**
|
|
166
|
+
* Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-collapsible) setting.
|
|
167
|
+
* @param {object} event Event object
|
|
168
|
+
* @param {Core.widget.Panel} event.source This Panel.
|
|
169
|
+
*/
|
|
170
|
+
this.onExpand = new EventEmitter();
|
|
171
|
+
/**
|
|
172
|
+
* Fired when focus enters this Widget.
|
|
173
|
+
* @param {object} event Event object
|
|
174
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
175
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
176
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
177
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
178
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
179
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
180
|
+
*/
|
|
181
|
+
this.onFocusIn = new EventEmitter();
|
|
182
|
+
/**
|
|
183
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
184
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
185
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
186
|
+
* @param {object} event Event object
|
|
187
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
188
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
189
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
190
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
191
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
192
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
193
|
+
*/
|
|
194
|
+
this.onFocusOut = new EventEmitter();
|
|
195
|
+
/**
|
|
196
|
+
* Triggered after a widget was hidden
|
|
197
|
+
* @param {object} event Event object
|
|
198
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
199
|
+
*/
|
|
200
|
+
this.onHide = new EventEmitter();
|
|
201
|
+
/**
|
|
202
|
+
* Fires when this DayView changes an aspect of its layout. This happens when changing
|
|
203
|
+
* [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight), [minDayWidth](#Calendar/widget/DayView#property-minDayWidth), and when the available
|
|
204
|
+
* day container height changes.
|
|
205
|
+
* @param {object} event Event object
|
|
206
|
+
* @param {Calendar.widget.DayView} event.source The triggering instance.
|
|
207
|
+
*/
|
|
208
|
+
this.onLayoutUpdate = new EventEmitter();
|
|
209
|
+
/**
|
|
210
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
211
|
+
* achieves visibility.
|
|
212
|
+
* ...
|
|
213
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-paint)
|
|
214
|
+
* @param {object} event Event object
|
|
215
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
216
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
217
|
+
*/
|
|
218
|
+
this.onPaint = new EventEmitter();
|
|
219
|
+
/**
|
|
220
|
+
* Fired when the range of dates encapsulated by this view changes.
|
|
221
|
+
* ...
|
|
222
|
+
* [View online docs...](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#event-rangeChange)
|
|
223
|
+
* @param {object} event Event object
|
|
224
|
+
* @param {typeof DateRangeOwner} event.source This calendar view instance.
|
|
225
|
+
* @param {object} event.old The old date range <strong>if any</strong>.
|
|
226
|
+
* @param {Date} event.old.startDate the old start date.
|
|
227
|
+
* @param {Date} event.old.endDate the old end date.
|
|
228
|
+
* @param {object} event.new The new date range
|
|
229
|
+
* @param {Date} event.new.startDate the new start date.
|
|
230
|
+
* @param {Date} event.new.endDate the new end date.
|
|
231
|
+
*/
|
|
232
|
+
this.onRangeChange = new EventEmitter();
|
|
233
|
+
/**
|
|
234
|
+
* Fired when a Widget's read only state is toggled
|
|
235
|
+
* @param {object} event Event object
|
|
236
|
+
* @param {boolean} event.readOnly Read only or not
|
|
237
|
+
*/
|
|
238
|
+
this.onReadOnly = new EventEmitter();
|
|
239
|
+
/**
|
|
240
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
241
|
+
* to [recompose](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
242
|
+
*/
|
|
243
|
+
this.onRecompose = new EventEmitter();
|
|
244
|
+
/**
|
|
245
|
+
* Fires when this DayView refreshes.
|
|
246
|
+
* @param {object} event Event object
|
|
247
|
+
* @param {Calendar.widget.DayView} event.source The triggering instance.
|
|
248
|
+
*/
|
|
249
|
+
this.onRefresh = new EventEmitter();
|
|
250
|
+
/**
|
|
251
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/calendar/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
252
|
+
* @param {object} event Event object
|
|
253
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
254
|
+
* @param {number} event.width The new width
|
|
255
|
+
* @param {number} event.height The new height
|
|
256
|
+
* @param {number} event.oldWidth The old width
|
|
257
|
+
* @param {number} event.oldHeight The old height
|
|
258
|
+
*/
|
|
259
|
+
this.onResize = new EventEmitter();
|
|
260
|
+
/**
|
|
261
|
+
* Triggered when a new [responsiveState](https://bryntum.com/products/calendar/docs/api/Core/widget/mixin/Responsive#config-responsiveState) is applied.
|
|
262
|
+
* @param {object} event Event object
|
|
263
|
+
* @param {Core.widget.Widget} event.source The widget whose `responsiveState` has changed
|
|
264
|
+
* @param {string} event.state The new value for the widget's `responsiveState`
|
|
265
|
+
* @param {string} event.oldState The previous value for the widget's `responsiveState`
|
|
266
|
+
*/
|
|
267
|
+
this.onResponsiveStateChange = new EventEmitter();
|
|
268
|
+
/**
|
|
269
|
+
* Fired when the [shiftIncrement](https://bryntum.com/products/calendar/docs/api/Calendar/widget/mixin/DateRangeOwner#property-shiftIncrement) of this view changes.
|
|
270
|
+
* @param {object} event Event object
|
|
271
|
+
* @param {object} event.old The shift increment *if any*.
|
|
272
|
+
* @param {object} event.new The shift increment
|
|
273
|
+
*/
|
|
274
|
+
this.onShiftIncrementChange = new EventEmitter();
|
|
275
|
+
/**
|
|
276
|
+
* Triggered after a widget is shown.
|
|
277
|
+
* @param {object} event Event object
|
|
278
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
279
|
+
*/
|
|
280
|
+
this.onShow = new EventEmitter();
|
|
281
|
+
/**
|
|
282
|
+
* Triggered when changing the [hourHeight](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#property-hourHeight) causes an
|
|
283
|
+
* [hour height breakpoint](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-hourHeightBreakpoints) to be crossed
|
|
284
|
+
* and the displayed subTick intervals in the time axis change.
|
|
285
|
+
* @param {object} event Event object
|
|
286
|
+
* @param {object} event.old The old hour height tick resolution object.
|
|
287
|
+
* @param {number} event.old.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
|
|
288
|
+
* @param {string} event.old.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
|
|
289
|
+
* @param {object} event.new The new hour height tick resolution object.
|
|
290
|
+
* @param {number} event.new.level The level `0` to `4` where `0` is the default with no subTick times displayed, and `4` means every 5 minute time is displayed.
|
|
291
|
+
* @param {string} event.new.step The time duration of visible subTicks. This is a string in the format required by [parseDuration](https://bryntum.com/products/calendar/docs/api/Core/helper/DateHelper#function-parseDuration-static)
|
|
292
|
+
*/
|
|
293
|
+
this.onTickChange = new EventEmitter();
|
|
294
|
+
/**
|
|
295
|
+
* Fired when a time axis is clicked on. If the handler returns
|
|
296
|
+
* `false` the current pointer event is not processed further.
|
|
297
|
+
* @param {object} event Event object
|
|
298
|
+
* @param {Event} event.domEvent The triggering DOM event.
|
|
299
|
+
* @param {Date} event.preciseTime The exact date and time at the clicked position
|
|
300
|
+
* @param {Date} event.time The date and time at the clicked position snapped according to the [increment](https://bryntum.com/products/calendar/docs/api/Calendar/widget/DayView#config-increment) and [timeSnapType](#Calendar/widget/DayView#config-timeSnapType)
|
|
301
|
+
*/
|
|
302
|
+
this.onTimeAxisClick = new EventEmitter();
|
|
303
|
+
/**
|
|
304
|
+
* A header [tool](https://bryntum.com/products/calendar/docs/api/Core/widget/Panel#config-tools) has been clicked.
|
|
305
|
+
* @param {object} event Event object
|
|
306
|
+
* @param {Core.widget.Tool} event.source This Panel.
|
|
307
|
+
* @param {Core.widget.Tool} event.tool The tool which is being clicked.
|
|
308
|
+
*/
|
|
309
|
+
this.onToolClick = new EventEmitter();
|
|
310
|
+
this.elementRef = element;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Create and append the underlying widget
|
|
314
|
+
*/
|
|
315
|
+
ngOnInit() {
|
|
316
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumDayViewComponent;
|
|
317
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
318
|
+
// @ts-ignore
|
|
319
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
320
|
+
if (['features', 'config'].includes(prop)) {
|
|
321
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
322
|
+
}
|
|
323
|
+
});
|
|
324
|
+
// @ts-ignore
|
|
325
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
326
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
327
|
+
// @ts-ignore
|
|
328
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
329
|
+
// @ts-ignore
|
|
330
|
+
me[event].emit(e);
|
|
331
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
332
|
+
// in Angular listeners
|
|
333
|
+
return e.returnValue;
|
|
334
|
+
};
|
|
335
|
+
});
|
|
336
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
337
|
+
const containerParam = [
|
|
338
|
+
'adopt',
|
|
339
|
+
'appendTo',
|
|
340
|
+
'insertAfter',
|
|
341
|
+
'insertBefore'
|
|
342
|
+
// @ts-ignore
|
|
343
|
+
].find(prop => bryntumConfig[prop]);
|
|
344
|
+
if (!containerParam) {
|
|
345
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
346
|
+
// Button should always be <a> or <button> inside owner element
|
|
347
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
355
|
+
}
|
|
356
|
+
// @ts-ignore
|
|
357
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Watch for changes
|
|
361
|
+
* @param changes
|
|
362
|
+
*/
|
|
363
|
+
ngOnChanges(changes) {
|
|
364
|
+
const { instance } = this, { instanceName } = BryntumDayViewComponent;
|
|
365
|
+
if (!instance) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
// Iterate over all changes
|
|
369
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
370
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumDayViewComponent;
|
|
371
|
+
if (bryntumProps.includes(prop)) {
|
|
372
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
373
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
374
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Destroy the component
|
|
381
|
+
*/
|
|
382
|
+
ngOnDestroy() {
|
|
383
|
+
// @ts-ignore
|
|
384
|
+
if (this.instance && this.instance.destroy) {
|
|
385
|
+
this.instance.destroy();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
BryntumDayViewComponent.instanceClass = DayView;
|
|
390
|
+
BryntumDayViewComponent.instanceName = 'DayView';
|
|
391
|
+
BryntumDayViewComponent.bryntumEvents = [
|
|
392
|
+
'onBeforeAutoCreate',
|
|
393
|
+
'onBeforeChangeDate',
|
|
394
|
+
'onBeforeDestroy',
|
|
395
|
+
'onBeforeHide',
|
|
396
|
+
'onBeforeResponsiveStateChange',
|
|
397
|
+
'onBeforeSetRecord',
|
|
398
|
+
'onBeforeShow',
|
|
399
|
+
'onBeforeStateApply',
|
|
400
|
+
'onBeforeStateSave',
|
|
401
|
+
'onCatchAll',
|
|
402
|
+
'onCellMapPopulated',
|
|
403
|
+
'onCollapse',
|
|
404
|
+
'onDayCellPopulated',
|
|
405
|
+
'onDestroy',
|
|
406
|
+
'onDirtyStateChange',
|
|
407
|
+
'onElementCreated',
|
|
408
|
+
'onEventAutoCreated',
|
|
409
|
+
'onEventPropagate',
|
|
410
|
+
'onExpand',
|
|
411
|
+
'onFocusIn',
|
|
412
|
+
'onFocusOut',
|
|
413
|
+
'onHide',
|
|
414
|
+
'onLayoutUpdate',
|
|
415
|
+
'onPaint',
|
|
416
|
+
'onRangeChange',
|
|
417
|
+
'onReadOnly',
|
|
418
|
+
'onRecompose',
|
|
419
|
+
'onRefresh',
|
|
420
|
+
'onResize',
|
|
421
|
+
'onResponsiveStateChange',
|
|
422
|
+
'onShiftIncrementChange',
|
|
423
|
+
'onShow',
|
|
424
|
+
'onTickChange',
|
|
425
|
+
'onTimeAxisClick',
|
|
426
|
+
'onToolClick'
|
|
427
|
+
];
|
|
428
|
+
BryntumDayViewComponent.bryntumFeatureNames = [];
|
|
429
|
+
BryntumDayViewComponent.bryntumConfigs = BryntumDayViewComponent.bryntumFeatureNames.concat([
|
|
430
|
+
'actionButtons',
|
|
431
|
+
'activationKey',
|
|
432
|
+
'adopt',
|
|
433
|
+
'align',
|
|
434
|
+
'alignSelf',
|
|
435
|
+
'allDayEvents',
|
|
436
|
+
'allowDragCreate',
|
|
437
|
+
'allowDragMove',
|
|
438
|
+
'allowDragResize',
|
|
439
|
+
'allowZoomUnderflow',
|
|
440
|
+
'anchor',
|
|
441
|
+
'animateTimeShift',
|
|
442
|
+
'appendTo',
|
|
443
|
+
'ariaDescription',
|
|
444
|
+
'ariaLabel',
|
|
445
|
+
'autoCreate',
|
|
446
|
+
'bbar',
|
|
447
|
+
'bodyCls',
|
|
448
|
+
'bubbleEvents',
|
|
449
|
+
'callOnFunctions',
|
|
450
|
+
'catchEventHandlerExceptions',
|
|
451
|
+
'centered',
|
|
452
|
+
'cls',
|
|
453
|
+
'collapsed',
|
|
454
|
+
'collapsible',
|
|
455
|
+
'color',
|
|
456
|
+
'column',
|
|
457
|
+
'columnHeaderRenderer',
|
|
458
|
+
'compactHeader',
|
|
459
|
+
'config',
|
|
460
|
+
'constrainTo',
|
|
461
|
+
'contentElementCls',
|
|
462
|
+
'coreHours',
|
|
463
|
+
'currentTimeIndicatorRenderer',
|
|
464
|
+
'dashedSubticks',
|
|
465
|
+
'dataField',
|
|
466
|
+
'dataset',
|
|
467
|
+
'date',
|
|
468
|
+
'dateFilter',
|
|
469
|
+
'dateFormat',
|
|
470
|
+
'dateSeparator',
|
|
471
|
+
'dayCellRenderer',
|
|
472
|
+
'dayEndTime',
|
|
473
|
+
'dayHeaderRenderer',
|
|
474
|
+
'dayNameFormat',
|
|
475
|
+
'dayStartShift',
|
|
476
|
+
'dayStartTime',
|
|
477
|
+
'defaultBindProperty',
|
|
478
|
+
'defaultFocus',
|
|
479
|
+
'defaults',
|
|
480
|
+
'defaultScrollOptions',
|
|
481
|
+
'descriptionFormat',
|
|
482
|
+
'descriptionRenderer',
|
|
483
|
+
'detectCSSCompatibilityIssues',
|
|
484
|
+
'disabled',
|
|
485
|
+
'dock',
|
|
486
|
+
'draggable',
|
|
487
|
+
'dragUnit',
|
|
488
|
+
'drawer',
|
|
489
|
+
'elementAttributes',
|
|
490
|
+
'endDate',
|
|
491
|
+
'eventFilter',
|
|
492
|
+
'eventHeaderRenderer',
|
|
493
|
+
'eventLayout',
|
|
494
|
+
'eventRenderer',
|
|
495
|
+
'eventSorter',
|
|
496
|
+
'eventSpacing',
|
|
497
|
+
'extendAllDayEndDay',
|
|
498
|
+
'extraData',
|
|
499
|
+
'filterEventResources',
|
|
500
|
+
'fitHours',
|
|
501
|
+
'fixedDuration',
|
|
502
|
+
'flex',
|
|
503
|
+
'floating',
|
|
504
|
+
'footer',
|
|
505
|
+
'getPrimaryResource',
|
|
506
|
+
'header',
|
|
507
|
+
'height',
|
|
508
|
+
'hidden',
|
|
509
|
+
'hideAnimation',
|
|
510
|
+
'hideEmptyDays',
|
|
511
|
+
'hideNonWorkingDays',
|
|
512
|
+
'hideWhenEmpty',
|
|
513
|
+
'hourHeight',
|
|
514
|
+
'hourHeightBreakpoints',
|
|
515
|
+
'icon',
|
|
516
|
+
'id',
|
|
517
|
+
'ignoreParentReadOnly',
|
|
518
|
+
'increment',
|
|
519
|
+
'inputFieldAlign',
|
|
520
|
+
'insertBefore',
|
|
521
|
+
'insertFirst',
|
|
522
|
+
'interDayDrag',
|
|
523
|
+
'interDayResize',
|
|
524
|
+
'itemCls',
|
|
525
|
+
'items',
|
|
526
|
+
'keyMap',
|
|
527
|
+
'labelPosition',
|
|
528
|
+
'layout',
|
|
529
|
+
'layoutStyle',
|
|
530
|
+
'lazyItems',
|
|
531
|
+
'listeners',
|
|
532
|
+
'localeClass',
|
|
533
|
+
'localizable',
|
|
534
|
+
'localizableProperties',
|
|
535
|
+
'margin',
|
|
536
|
+
'maskDefaults',
|
|
537
|
+
'masked',
|
|
538
|
+
'maxAllDayHeight',
|
|
539
|
+
'maxDate',
|
|
540
|
+
'maxHeight',
|
|
541
|
+
'maximizeOnMobile',
|
|
542
|
+
'maxWidth',
|
|
543
|
+
'minDate',
|
|
544
|
+
'minDayWidth',
|
|
545
|
+
'minEventHeight',
|
|
546
|
+
'minHeight',
|
|
547
|
+
'minHourHeight',
|
|
548
|
+
'minWidth',
|
|
549
|
+
'monitorResize',
|
|
550
|
+
'namedItems',
|
|
551
|
+
'noMatchingDates',
|
|
552
|
+
'nonWorkingDays',
|
|
553
|
+
'overflowPopup',
|
|
554
|
+
'owner',
|
|
555
|
+
'pastEventCls',
|
|
556
|
+
'positioned',
|
|
557
|
+
'preventTooltipOnTouch',
|
|
558
|
+
'range',
|
|
559
|
+
'readOnly',
|
|
560
|
+
'relayStoreEvents',
|
|
561
|
+
'rendition',
|
|
562
|
+
'resourceImagePath',
|
|
563
|
+
'responsive',
|
|
564
|
+
'responsiveRoot',
|
|
565
|
+
'responsiveState',
|
|
566
|
+
'responsiveTarget',
|
|
567
|
+
'ripple',
|
|
568
|
+
'rootElement',
|
|
569
|
+
'rtl',
|
|
570
|
+
'scrollable',
|
|
571
|
+
'scrollAction',
|
|
572
|
+
'selectorButton',
|
|
573
|
+
'selectorMenuItem',
|
|
574
|
+
'shiftIncrement',
|
|
575
|
+
'shortDateFormat',
|
|
576
|
+
'shortDateTimeFormat',
|
|
577
|
+
'shortEventCls',
|
|
578
|
+
'shortEventDuration',
|
|
579
|
+
'showAllDayHeader',
|
|
580
|
+
'showAnimation',
|
|
581
|
+
'showBullet',
|
|
582
|
+
'showCurrentTime',
|
|
583
|
+
'showResourceAvatars',
|
|
584
|
+
'showTime',
|
|
585
|
+
'showTooltipWhenDisabled',
|
|
586
|
+
'sixMinuteTicks',
|
|
587
|
+
'snapRelativeToEventStartDate',
|
|
588
|
+
'span',
|
|
589
|
+
'stackMultiDayEvents',
|
|
590
|
+
'startDate',
|
|
591
|
+
'stateful',
|
|
592
|
+
'statefulEvents',
|
|
593
|
+
'stateId',
|
|
594
|
+
'stateProvider',
|
|
595
|
+
'strictRecordMapping',
|
|
596
|
+
'strips',
|
|
597
|
+
'syncCalendarDate',
|
|
598
|
+
'syncViewDate',
|
|
599
|
+
'tab',
|
|
600
|
+
'tabBarItems',
|
|
601
|
+
'tag',
|
|
602
|
+
'tbar',
|
|
603
|
+
'textAlign',
|
|
604
|
+
'tickRenderer',
|
|
605
|
+
'timeAxisTimeFormat',
|
|
606
|
+
'timeFormat',
|
|
607
|
+
'timeSnapType',
|
|
608
|
+
'title',
|
|
609
|
+
'tools',
|
|
610
|
+
'tooltip',
|
|
611
|
+
'trapFocus',
|
|
612
|
+
'type',
|
|
613
|
+
'ui',
|
|
614
|
+
'visibleStartTime',
|
|
615
|
+
'weekStartDay',
|
|
616
|
+
'weight',
|
|
617
|
+
'width',
|
|
618
|
+
'x',
|
|
619
|
+
'y',
|
|
620
|
+
'zoomOnMouseWheel'
|
|
621
|
+
]);
|
|
622
|
+
BryntumDayViewComponent.bryntumConfigsOnly = [
|
|
623
|
+
'actionButtons',
|
|
624
|
+
'activationKey',
|
|
625
|
+
'adopt',
|
|
626
|
+
'align',
|
|
627
|
+
'allDayEvents',
|
|
628
|
+
'anchor',
|
|
629
|
+
'ariaDescription',
|
|
630
|
+
'ariaLabel',
|
|
631
|
+
'bbar',
|
|
632
|
+
'bodyCls',
|
|
633
|
+
'bubbleEvents',
|
|
634
|
+
'centered',
|
|
635
|
+
'collapsible',
|
|
636
|
+
'color',
|
|
637
|
+
'columnHeaderRenderer',
|
|
638
|
+
'config',
|
|
639
|
+
'constrainTo',
|
|
640
|
+
'contentElementCls',
|
|
641
|
+
'currentTimeIndicatorRenderer',
|
|
642
|
+
'dataField',
|
|
643
|
+
'dayCellRenderer',
|
|
644
|
+
'dayHeaderRenderer',
|
|
645
|
+
'dayNameFormat',
|
|
646
|
+
'dayStartShift',
|
|
647
|
+
'defaultBindProperty',
|
|
648
|
+
'defaultFocus',
|
|
649
|
+
'defaults',
|
|
650
|
+
'descriptionRenderer',
|
|
651
|
+
'detectCSSCompatibilityIssues',
|
|
652
|
+
'dock',
|
|
653
|
+
'draggable',
|
|
654
|
+
'drawer',
|
|
655
|
+
'elementAttributes',
|
|
656
|
+
'endDate',
|
|
657
|
+
'eventFilter',
|
|
658
|
+
'eventHeaderRenderer',
|
|
659
|
+
'eventLayout',
|
|
660
|
+
'eventRenderer',
|
|
661
|
+
'eventSorter',
|
|
662
|
+
'eventSpacing',
|
|
663
|
+
'floating',
|
|
664
|
+
'footer',
|
|
665
|
+
'getPrimaryResource',
|
|
666
|
+
'header',
|
|
667
|
+
'hideAnimation',
|
|
668
|
+
'hideWhenEmpty',
|
|
669
|
+
'icon',
|
|
670
|
+
'ignoreParentReadOnly',
|
|
671
|
+
'itemCls',
|
|
672
|
+
'lazyItems',
|
|
673
|
+
'listeners',
|
|
674
|
+
'localeClass',
|
|
675
|
+
'localizable',
|
|
676
|
+
'localizableProperties',
|
|
677
|
+
'maskDefaults',
|
|
678
|
+
'masked',
|
|
679
|
+
'maxAllDayHeight',
|
|
680
|
+
'monitorResize',
|
|
681
|
+
'namedItems',
|
|
682
|
+
'overflowPopup',
|
|
683
|
+
'owner',
|
|
684
|
+
'positioned',
|
|
685
|
+
'preventTooltipOnTouch',
|
|
686
|
+
'relayStoreEvents',
|
|
687
|
+
'resourceImagePath',
|
|
688
|
+
'responsive',
|
|
689
|
+
'responsiveRoot',
|
|
690
|
+
'responsiveState',
|
|
691
|
+
'responsiveTarget',
|
|
692
|
+
'ripple',
|
|
693
|
+
'rootElement',
|
|
694
|
+
'scrollAction',
|
|
695
|
+
'selectorButton',
|
|
696
|
+
'selectorMenuItem',
|
|
697
|
+
'shortEventCls',
|
|
698
|
+
'shortEventDuration',
|
|
699
|
+
'showAllDayHeader',
|
|
700
|
+
'showAnimation',
|
|
701
|
+
'showBullet',
|
|
702
|
+
'showResourceAvatars',
|
|
703
|
+
'showTooltipWhenDisabled',
|
|
704
|
+
'startDate',
|
|
705
|
+
'stateful',
|
|
706
|
+
'statefulEvents',
|
|
707
|
+
'stateId',
|
|
708
|
+
'stateProvider',
|
|
709
|
+
'strips',
|
|
710
|
+
'tab',
|
|
711
|
+
'tabBarItems',
|
|
712
|
+
'tag',
|
|
713
|
+
'tbar',
|
|
714
|
+
'textAlign',
|
|
715
|
+
'tickRenderer',
|
|
716
|
+
'timeAxisTimeFormat',
|
|
717
|
+
'timeFormat',
|
|
718
|
+
'trapFocus',
|
|
719
|
+
'type',
|
|
720
|
+
'ui',
|
|
721
|
+
'visibleStartTime',
|
|
722
|
+
'weekStartDay',
|
|
723
|
+
'weight',
|
|
724
|
+
'zoomOnMouseWheel'
|
|
725
|
+
];
|
|
726
|
+
BryntumDayViewComponent.bryntumProps = BryntumDayViewComponent.bryntumFeatureNames.concat([
|
|
727
|
+
'alignSelf',
|
|
728
|
+
'allowDragCreate',
|
|
729
|
+
'allowDragMove',
|
|
730
|
+
'allowDragResize',
|
|
731
|
+
'allowZoomUnderflow',
|
|
732
|
+
'anchorSize',
|
|
733
|
+
'animateTimeShift',
|
|
734
|
+
'appendTo',
|
|
735
|
+
'autoCreate',
|
|
736
|
+
'callOnFunctions',
|
|
737
|
+
'catchEventHandlerExceptions',
|
|
738
|
+
'cls',
|
|
739
|
+
'collapsed',
|
|
740
|
+
'column',
|
|
741
|
+
'compactHeader',
|
|
742
|
+
'coreHours',
|
|
743
|
+
'dashedSubticks',
|
|
744
|
+
'dataset',
|
|
745
|
+
'date',
|
|
746
|
+
'dateFilter',
|
|
747
|
+
'dateFormat',
|
|
748
|
+
'dateSeparator',
|
|
749
|
+
'dayCellCls',
|
|
750
|
+
'dayEndTime',
|
|
751
|
+
'dayStartTime',
|
|
752
|
+
'defaultScrollOptions',
|
|
753
|
+
'descriptionFormat',
|
|
754
|
+
'disabled',
|
|
755
|
+
'dragUnit',
|
|
756
|
+
'extendAllDayEndDay',
|
|
757
|
+
'extraData',
|
|
758
|
+
'filterEventResources',
|
|
759
|
+
'firstVisibleCell',
|
|
760
|
+
'firstVisibleDate',
|
|
761
|
+
'fitHours',
|
|
762
|
+
'fixedDuration',
|
|
763
|
+
'flex',
|
|
764
|
+
'focusVisible',
|
|
765
|
+
'hasChanges',
|
|
766
|
+
'height',
|
|
767
|
+
'hidden',
|
|
768
|
+
'hideEmptyDays',
|
|
769
|
+
'hideNonWorkingDays',
|
|
770
|
+
'horizontalScroller',
|
|
771
|
+
'hourHeight',
|
|
772
|
+
'hourHeightBreakpoints',
|
|
773
|
+
'id',
|
|
774
|
+
'increment',
|
|
775
|
+
'inputFieldAlign',
|
|
776
|
+
'insertBefore',
|
|
777
|
+
'insertFirst',
|
|
778
|
+
'interDayDrag',
|
|
779
|
+
'interDayResize',
|
|
780
|
+
'isSettingValues',
|
|
781
|
+
'isValid',
|
|
782
|
+
'items',
|
|
783
|
+
'keyMap',
|
|
784
|
+
'labelPosition',
|
|
785
|
+
'lastVisibleCell',
|
|
786
|
+
'lastVisibleDate',
|
|
787
|
+
'layout',
|
|
788
|
+
'layoutStyle',
|
|
789
|
+
'margin',
|
|
790
|
+
'maxDate',
|
|
791
|
+
'maxHeight',
|
|
792
|
+
'maximizeOnMobile',
|
|
793
|
+
'maxWidth',
|
|
794
|
+
'minDate',
|
|
795
|
+
'minDayWidth',
|
|
796
|
+
'minEventHeight',
|
|
797
|
+
'minHeight',
|
|
798
|
+
'minHourHeight',
|
|
799
|
+
'minWidth',
|
|
800
|
+
'noMatchingDates',
|
|
801
|
+
'nonWorkingDays',
|
|
802
|
+
'parent',
|
|
803
|
+
'pastEventCls',
|
|
804
|
+
'range',
|
|
805
|
+
'readOnly',
|
|
806
|
+
'record',
|
|
807
|
+
'rendition',
|
|
808
|
+
'rtl',
|
|
809
|
+
'scrollable',
|
|
810
|
+
'shiftIncrement',
|
|
811
|
+
'shortDateFormat',
|
|
812
|
+
'shortDateTimeFormat',
|
|
813
|
+
'showCurrentTime',
|
|
814
|
+
'showTime',
|
|
815
|
+
'sixMinuteTicks',
|
|
816
|
+
'snapRelativeToEventStartDate',
|
|
817
|
+
'span',
|
|
818
|
+
'stackMultiDayEvents',
|
|
819
|
+
'state',
|
|
820
|
+
'strictRecordMapping',
|
|
821
|
+
'syncCalendarDate',
|
|
822
|
+
'syncViewDate',
|
|
823
|
+
'timeSnapType',
|
|
824
|
+
'title',
|
|
825
|
+
'tools',
|
|
826
|
+
'tooltip',
|
|
827
|
+
'values',
|
|
828
|
+
'width',
|
|
829
|
+
'x',
|
|
830
|
+
'y'
|
|
831
|
+
]);
|
|
832
|
+
BryntumDayViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayViewComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
833
|
+
BryntumDayViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumDayViewComponent, selector: "bryntum-day-view", inputs: { actionButtons: "actionButtons", activationKey: "activationKey", adopt: "adopt", align: "align", allDayEvents: "allDayEvents", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", centered: "centered", collapsible: "collapsible", color: "color", columnHeaderRenderer: "columnHeaderRenderer", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", currentTimeIndicatorRenderer: "currentTimeIndicatorRenderer", dataField: "dataField", dayCellRenderer: "dayCellRenderer", dayHeaderRenderer: "dayHeaderRenderer", dayNameFormat: "dayNameFormat", dayStartShift: "dayStartShift", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", descriptionRenderer: "descriptionRenderer", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", dock: "dock", draggable: "draggable", drawer: "drawer", elementAttributes: "elementAttributes", endDate: "endDate", eventFilter: "eventFilter", eventHeaderRenderer: "eventHeaderRenderer", eventLayout: "eventLayout", eventRenderer: "eventRenderer", eventSorter: "eventSorter", eventSpacing: "eventSpacing", floating: "floating", footer: "footer", getPrimaryResource: "getPrimaryResource", header: "header", hideAnimation: "hideAnimation", hideWhenEmpty: "hideWhenEmpty", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxAllDayHeight: "maxAllDayHeight", monitorResize: "monitorResize", namedItems: "namedItems", overflowPopup: "overflowPopup", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", resourceImagePath: "resourceImagePath", responsive: "responsive", responsiveRoot: "responsiveRoot", responsiveState: "responsiveState", responsiveTarget: "responsiveTarget", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", selectorButton: "selectorButton", selectorMenuItem: "selectorMenuItem", shortEventCls: "shortEventCls", shortEventDuration: "shortEventDuration", showAllDayHeader: "showAllDayHeader", showAnimation: "showAnimation", showBullet: "showBullet", showResourceAvatars: "showResourceAvatars", showTooltipWhenDisabled: "showTooltipWhenDisabled", startDate: "startDate", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", tickRenderer: "tickRenderer", timeAxisTimeFormat: "timeAxisTimeFormat", timeFormat: "timeFormat", trapFocus: "trapFocus", type: "type", ui: "ui", visibleStartTime: "visibleStartTime", weekStartDay: "weekStartDay", weight: "weight", zoomOnMouseWheel: "zoomOnMouseWheel", alignSelf: "alignSelf", allowDragCreate: "allowDragCreate", allowDragMove: "allowDragMove", allowDragResize: "allowDragResize", allowZoomUnderflow: "allowZoomUnderflow", animateTimeShift: "animateTimeShift", appendTo: "appendTo", autoCreate: "autoCreate", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", compactHeader: "compactHeader", coreHours: "coreHours", dashedSubticks: "dashedSubticks", dataset: "dataset", date: "date", dateFilter: "dateFilter", dateFormat: "dateFormat", dateSeparator: "dateSeparator", dayEndTime: "dayEndTime", dayStartTime: "dayStartTime", defaultScrollOptions: "defaultScrollOptions", descriptionFormat: "descriptionFormat", disabled: "disabled", dragUnit: "dragUnit", extendAllDayEndDay: "extendAllDayEndDay", extraData: "extraData", filterEventResources: "filterEventResources", fitHours: "fitHours", fixedDuration: "fixedDuration", flex: "flex", height: "height", hidden: "hidden", hideEmptyDays: "hideEmptyDays", hideNonWorkingDays: "hideNonWorkingDays", hourHeight: "hourHeight", hourHeightBreakpoints: "hourHeightBreakpoints", id: "id", increment: "increment", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", interDayDrag: "interDayDrag", interDayResize: "interDayResize", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxDate: "maxDate", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minDate: "minDate", minDayWidth: "minDayWidth", minEventHeight: "minEventHeight", minHeight: "minHeight", minHourHeight: "minHourHeight", minWidth: "minWidth", noMatchingDates: "noMatchingDates", nonWorkingDays: "nonWorkingDays", pastEventCls: "pastEventCls", range: "range", readOnly: "readOnly", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", shiftIncrement: "shiftIncrement", shortDateFormat: "shortDateFormat", shortDateTimeFormat: "shortDateTimeFormat", showCurrentTime: "showCurrentTime", showTime: "showTime", sixMinuteTicks: "sixMinuteTicks", snapRelativeToEventStartDate: "snapRelativeToEventStartDate", span: "span", stackMultiDayEvents: "stackMultiDayEvents", strictRecordMapping: "strictRecordMapping", syncCalendarDate: "syncCalendarDate", syncViewDate: "syncViewDate", timeSnapType: "timeSnapType", title: "title", tools: "tools", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", dayCellCls: "dayCellCls", firstVisibleCell: "firstVisibleCell", firstVisibleDate: "firstVisibleDate", focusVisible: "focusVisible", hasChanges: "hasChanges", horizontalScroller: "horizontalScroller", isSettingValues: "isSettingValues", isValid: "isValid", lastVisibleCell: "lastVisibleCell", lastVisibleDate: "lastVisibleDate", parent: "parent", record: "record", state: "state", values: "values" }, outputs: { onBeforeAutoCreate: "onBeforeAutoCreate", onBeforeChangeDate: "onBeforeChangeDate", onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeResponsiveStateChange: "onBeforeResponsiveStateChange", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onCatchAll: "onCatchAll", onCellMapPopulated: "onCellMapPopulated", onCollapse: "onCollapse", onDayCellPopulated: "onDayCellPopulated", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onEventAutoCreated: "onEventAutoCreated", onEventPropagate: "onEventPropagate", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onLayoutUpdate: "onLayoutUpdate", onPaint: "onPaint", onRangeChange: "onRangeChange", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRefresh: "onRefresh", onResize: "onResize", onResponsiveStateChange: "onResponsiveStateChange", onShiftIncrementChange: "onShiftIncrementChange", onShow: "onShow", onTickChange: "onTickChange", onTimeAxisClick: "onTimeAxisClick", onToolClick: "onToolClick" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
834
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumDayViewComponent, decorators: [{
|
|
835
|
+
type: Component,
|
|
836
|
+
args: [{
|
|
837
|
+
selector: 'bryntum-day-view',
|
|
838
|
+
template: ''
|
|
839
|
+
}]
|
|
840
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { actionButtons: [{
|
|
841
|
+
type: Input
|
|
842
|
+
}], activationKey: [{
|
|
843
|
+
type: Input
|
|
844
|
+
}], adopt: [{
|
|
845
|
+
type: Input
|
|
846
|
+
}], align: [{
|
|
847
|
+
type: Input
|
|
848
|
+
}], allDayEvents: [{
|
|
849
|
+
type: Input
|
|
850
|
+
}], anchor: [{
|
|
851
|
+
type: Input
|
|
852
|
+
}], ariaDescription: [{
|
|
853
|
+
type: Input
|
|
854
|
+
}], ariaLabel: [{
|
|
855
|
+
type: Input
|
|
856
|
+
}], bbar: [{
|
|
857
|
+
type: Input
|
|
858
|
+
}], bodyCls: [{
|
|
859
|
+
type: Input
|
|
860
|
+
}], bubbleEvents: [{
|
|
861
|
+
type: Input
|
|
862
|
+
}], centered: [{
|
|
863
|
+
type: Input
|
|
864
|
+
}], collapsible: [{
|
|
865
|
+
type: Input
|
|
866
|
+
}], color: [{
|
|
867
|
+
type: Input
|
|
868
|
+
}], columnHeaderRenderer: [{
|
|
869
|
+
type: Input
|
|
870
|
+
}], config: [{
|
|
871
|
+
type: Input
|
|
872
|
+
}], constrainTo: [{
|
|
873
|
+
type: Input
|
|
874
|
+
}], contentElementCls: [{
|
|
875
|
+
type: Input
|
|
876
|
+
}], currentTimeIndicatorRenderer: [{
|
|
877
|
+
type: Input
|
|
878
|
+
}], dataField: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}], dayCellRenderer: [{
|
|
881
|
+
type: Input
|
|
882
|
+
}], dayHeaderRenderer: [{
|
|
883
|
+
type: Input
|
|
884
|
+
}], dayNameFormat: [{
|
|
885
|
+
type: Input
|
|
886
|
+
}], dayStartShift: [{
|
|
887
|
+
type: Input
|
|
888
|
+
}], defaultBindProperty: [{
|
|
889
|
+
type: Input
|
|
890
|
+
}], defaultFocus: [{
|
|
891
|
+
type: Input
|
|
892
|
+
}], defaults: [{
|
|
893
|
+
type: Input
|
|
894
|
+
}], descriptionRenderer: [{
|
|
895
|
+
type: Input
|
|
896
|
+
}], detectCSSCompatibilityIssues: [{
|
|
897
|
+
type: Input
|
|
898
|
+
}], dock: [{
|
|
899
|
+
type: Input
|
|
900
|
+
}], draggable: [{
|
|
901
|
+
type: Input
|
|
902
|
+
}], drawer: [{
|
|
903
|
+
type: Input
|
|
904
|
+
}], elementAttributes: [{
|
|
905
|
+
type: Input
|
|
906
|
+
}], endDate: [{
|
|
907
|
+
type: Input
|
|
908
|
+
}], eventFilter: [{
|
|
909
|
+
type: Input
|
|
910
|
+
}], eventHeaderRenderer: [{
|
|
911
|
+
type: Input
|
|
912
|
+
}], eventLayout: [{
|
|
913
|
+
type: Input
|
|
914
|
+
}], eventRenderer: [{
|
|
915
|
+
type: Input
|
|
916
|
+
}], eventSorter: [{
|
|
917
|
+
type: Input
|
|
918
|
+
}], eventSpacing: [{
|
|
919
|
+
type: Input
|
|
920
|
+
}], floating: [{
|
|
921
|
+
type: Input
|
|
922
|
+
}], footer: [{
|
|
923
|
+
type: Input
|
|
924
|
+
}], getPrimaryResource: [{
|
|
925
|
+
type: Input
|
|
926
|
+
}], header: [{
|
|
927
|
+
type: Input
|
|
928
|
+
}], hideAnimation: [{
|
|
929
|
+
type: Input
|
|
930
|
+
}], hideWhenEmpty: [{
|
|
931
|
+
type: Input
|
|
932
|
+
}], icon: [{
|
|
933
|
+
type: Input
|
|
934
|
+
}], ignoreParentReadOnly: [{
|
|
935
|
+
type: Input
|
|
936
|
+
}], itemCls: [{
|
|
937
|
+
type: Input
|
|
938
|
+
}], lazyItems: [{
|
|
939
|
+
type: Input
|
|
940
|
+
}], listeners: [{
|
|
941
|
+
type: Input
|
|
942
|
+
}], localeClass: [{
|
|
943
|
+
type: Input
|
|
944
|
+
}], localizable: [{
|
|
945
|
+
type: Input
|
|
946
|
+
}], localizableProperties: [{
|
|
947
|
+
type: Input
|
|
948
|
+
}], maskDefaults: [{
|
|
949
|
+
type: Input
|
|
950
|
+
}], masked: [{
|
|
951
|
+
type: Input
|
|
952
|
+
}], maxAllDayHeight: [{
|
|
953
|
+
type: Input
|
|
954
|
+
}], monitorResize: [{
|
|
955
|
+
type: Input
|
|
956
|
+
}], namedItems: [{
|
|
957
|
+
type: Input
|
|
958
|
+
}], overflowPopup: [{
|
|
959
|
+
type: Input
|
|
960
|
+
}], owner: [{
|
|
961
|
+
type: Input
|
|
962
|
+
}], positioned: [{
|
|
963
|
+
type: Input
|
|
964
|
+
}], preventTooltipOnTouch: [{
|
|
965
|
+
type: Input
|
|
966
|
+
}], relayStoreEvents: [{
|
|
967
|
+
type: Input
|
|
968
|
+
}], resourceImagePath: [{
|
|
969
|
+
type: Input
|
|
970
|
+
}], responsive: [{
|
|
971
|
+
type: Input
|
|
972
|
+
}], responsiveRoot: [{
|
|
973
|
+
type: Input
|
|
974
|
+
}], responsiveState: [{
|
|
975
|
+
type: Input
|
|
976
|
+
}], responsiveTarget: [{
|
|
977
|
+
type: Input
|
|
978
|
+
}], ripple: [{
|
|
979
|
+
type: Input
|
|
980
|
+
}], rootElement: [{
|
|
981
|
+
type: Input
|
|
982
|
+
}], scrollAction: [{
|
|
983
|
+
type: Input
|
|
984
|
+
}], selectorButton: [{
|
|
985
|
+
type: Input
|
|
986
|
+
}], selectorMenuItem: [{
|
|
987
|
+
type: Input
|
|
988
|
+
}], shortEventCls: [{
|
|
989
|
+
type: Input
|
|
990
|
+
}], shortEventDuration: [{
|
|
991
|
+
type: Input
|
|
992
|
+
}], showAllDayHeader: [{
|
|
993
|
+
type: Input
|
|
994
|
+
}], showAnimation: [{
|
|
995
|
+
type: Input
|
|
996
|
+
}], showBullet: [{
|
|
997
|
+
type: Input
|
|
998
|
+
}], showResourceAvatars: [{
|
|
999
|
+
type: Input
|
|
1000
|
+
}], showTooltipWhenDisabled: [{
|
|
1001
|
+
type: Input
|
|
1002
|
+
}], startDate: [{
|
|
1003
|
+
type: Input
|
|
1004
|
+
}], stateful: [{
|
|
1005
|
+
type: Input
|
|
1006
|
+
}], statefulEvents: [{
|
|
1007
|
+
type: Input
|
|
1008
|
+
}], stateId: [{
|
|
1009
|
+
type: Input
|
|
1010
|
+
}], stateProvider: [{
|
|
1011
|
+
type: Input
|
|
1012
|
+
}], strips: [{
|
|
1013
|
+
type: Input
|
|
1014
|
+
}], tab: [{
|
|
1015
|
+
type: Input
|
|
1016
|
+
}], tabBarItems: [{
|
|
1017
|
+
type: Input
|
|
1018
|
+
}], tag: [{
|
|
1019
|
+
type: Input
|
|
1020
|
+
}], tbar: [{
|
|
1021
|
+
type: Input
|
|
1022
|
+
}], textAlign: [{
|
|
1023
|
+
type: Input
|
|
1024
|
+
}], tickRenderer: [{
|
|
1025
|
+
type: Input
|
|
1026
|
+
}], timeAxisTimeFormat: [{
|
|
1027
|
+
type: Input
|
|
1028
|
+
}], timeFormat: [{
|
|
1029
|
+
type: Input
|
|
1030
|
+
}], trapFocus: [{
|
|
1031
|
+
type: Input
|
|
1032
|
+
}], type: [{
|
|
1033
|
+
type: Input
|
|
1034
|
+
}], ui: [{
|
|
1035
|
+
type: Input
|
|
1036
|
+
}], visibleStartTime: [{
|
|
1037
|
+
type: Input
|
|
1038
|
+
}], weekStartDay: [{
|
|
1039
|
+
type: Input
|
|
1040
|
+
}], weight: [{
|
|
1041
|
+
type: Input
|
|
1042
|
+
}], zoomOnMouseWheel: [{
|
|
1043
|
+
type: Input
|
|
1044
|
+
}], alignSelf: [{
|
|
1045
|
+
type: Input
|
|
1046
|
+
}], allowDragCreate: [{
|
|
1047
|
+
type: Input
|
|
1048
|
+
}], allowDragMove: [{
|
|
1049
|
+
type: Input
|
|
1050
|
+
}], allowDragResize: [{
|
|
1051
|
+
type: Input
|
|
1052
|
+
}], allowZoomUnderflow: [{
|
|
1053
|
+
type: Input
|
|
1054
|
+
}], animateTimeShift: [{
|
|
1055
|
+
type: Input
|
|
1056
|
+
}], appendTo: [{
|
|
1057
|
+
type: Input
|
|
1058
|
+
}], autoCreate: [{
|
|
1059
|
+
type: Input
|
|
1060
|
+
}], callOnFunctions: [{
|
|
1061
|
+
type: Input
|
|
1062
|
+
}], catchEventHandlerExceptions: [{
|
|
1063
|
+
type: Input
|
|
1064
|
+
}], cls: [{
|
|
1065
|
+
type: Input
|
|
1066
|
+
}], collapsed: [{
|
|
1067
|
+
type: Input
|
|
1068
|
+
}], column: [{
|
|
1069
|
+
type: Input
|
|
1070
|
+
}], compactHeader: [{
|
|
1071
|
+
type: Input
|
|
1072
|
+
}], coreHours: [{
|
|
1073
|
+
type: Input
|
|
1074
|
+
}], dashedSubticks: [{
|
|
1075
|
+
type: Input
|
|
1076
|
+
}], dataset: [{
|
|
1077
|
+
type: Input
|
|
1078
|
+
}], date: [{
|
|
1079
|
+
type: Input
|
|
1080
|
+
}], dateFilter: [{
|
|
1081
|
+
type: Input
|
|
1082
|
+
}], dateFormat: [{
|
|
1083
|
+
type: Input
|
|
1084
|
+
}], dateSeparator: [{
|
|
1085
|
+
type: Input
|
|
1086
|
+
}], dayEndTime: [{
|
|
1087
|
+
type: Input
|
|
1088
|
+
}], dayStartTime: [{
|
|
1089
|
+
type: Input
|
|
1090
|
+
}], defaultScrollOptions: [{
|
|
1091
|
+
type: Input
|
|
1092
|
+
}], descriptionFormat: [{
|
|
1093
|
+
type: Input
|
|
1094
|
+
}], disabled: [{
|
|
1095
|
+
type: Input
|
|
1096
|
+
}], dragUnit: [{
|
|
1097
|
+
type: Input
|
|
1098
|
+
}], extendAllDayEndDay: [{
|
|
1099
|
+
type: Input
|
|
1100
|
+
}], extraData: [{
|
|
1101
|
+
type: Input
|
|
1102
|
+
}], filterEventResources: [{
|
|
1103
|
+
type: Input
|
|
1104
|
+
}], fitHours: [{
|
|
1105
|
+
type: Input
|
|
1106
|
+
}], fixedDuration: [{
|
|
1107
|
+
type: Input
|
|
1108
|
+
}], flex: [{
|
|
1109
|
+
type: Input
|
|
1110
|
+
}], height: [{
|
|
1111
|
+
type: Input
|
|
1112
|
+
}], hidden: [{
|
|
1113
|
+
type: Input
|
|
1114
|
+
}], hideEmptyDays: [{
|
|
1115
|
+
type: Input
|
|
1116
|
+
}], hideNonWorkingDays: [{
|
|
1117
|
+
type: Input
|
|
1118
|
+
}], hourHeight: [{
|
|
1119
|
+
type: Input
|
|
1120
|
+
}], hourHeightBreakpoints: [{
|
|
1121
|
+
type: Input
|
|
1122
|
+
}], id: [{
|
|
1123
|
+
type: Input
|
|
1124
|
+
}], increment: [{
|
|
1125
|
+
type: Input
|
|
1126
|
+
}], inputFieldAlign: [{
|
|
1127
|
+
type: Input
|
|
1128
|
+
}], insertBefore: [{
|
|
1129
|
+
type: Input
|
|
1130
|
+
}], insertFirst: [{
|
|
1131
|
+
type: Input
|
|
1132
|
+
}], interDayDrag: [{
|
|
1133
|
+
type: Input
|
|
1134
|
+
}], interDayResize: [{
|
|
1135
|
+
type: Input
|
|
1136
|
+
}], items: [{
|
|
1137
|
+
type: Input
|
|
1138
|
+
}], keyMap: [{
|
|
1139
|
+
type: Input
|
|
1140
|
+
}], labelPosition: [{
|
|
1141
|
+
type: Input
|
|
1142
|
+
}], layout: [{
|
|
1143
|
+
type: Input
|
|
1144
|
+
}], layoutStyle: [{
|
|
1145
|
+
type: Input
|
|
1146
|
+
}], margin: [{
|
|
1147
|
+
type: Input
|
|
1148
|
+
}], maxDate: [{
|
|
1149
|
+
type: Input
|
|
1150
|
+
}], maxHeight: [{
|
|
1151
|
+
type: Input
|
|
1152
|
+
}], maximizeOnMobile: [{
|
|
1153
|
+
type: Input
|
|
1154
|
+
}], maxWidth: [{
|
|
1155
|
+
type: Input
|
|
1156
|
+
}], minDate: [{
|
|
1157
|
+
type: Input
|
|
1158
|
+
}], minDayWidth: [{
|
|
1159
|
+
type: Input
|
|
1160
|
+
}], minEventHeight: [{
|
|
1161
|
+
type: Input
|
|
1162
|
+
}], minHeight: [{
|
|
1163
|
+
type: Input
|
|
1164
|
+
}], minHourHeight: [{
|
|
1165
|
+
type: Input
|
|
1166
|
+
}], minWidth: [{
|
|
1167
|
+
type: Input
|
|
1168
|
+
}], noMatchingDates: [{
|
|
1169
|
+
type: Input
|
|
1170
|
+
}], nonWorkingDays: [{
|
|
1171
|
+
type: Input
|
|
1172
|
+
}], pastEventCls: [{
|
|
1173
|
+
type: Input
|
|
1174
|
+
}], range: [{
|
|
1175
|
+
type: Input
|
|
1176
|
+
}], readOnly: [{
|
|
1177
|
+
type: Input
|
|
1178
|
+
}], rendition: [{
|
|
1179
|
+
type: Input
|
|
1180
|
+
}], rtl: [{
|
|
1181
|
+
type: Input
|
|
1182
|
+
}], scrollable: [{
|
|
1183
|
+
type: Input
|
|
1184
|
+
}], shiftIncrement: [{
|
|
1185
|
+
type: Input
|
|
1186
|
+
}], shortDateFormat: [{
|
|
1187
|
+
type: Input
|
|
1188
|
+
}], shortDateTimeFormat: [{
|
|
1189
|
+
type: Input
|
|
1190
|
+
}], showCurrentTime: [{
|
|
1191
|
+
type: Input
|
|
1192
|
+
}], showTime: [{
|
|
1193
|
+
type: Input
|
|
1194
|
+
}], sixMinuteTicks: [{
|
|
1195
|
+
type: Input
|
|
1196
|
+
}], snapRelativeToEventStartDate: [{
|
|
1197
|
+
type: Input
|
|
1198
|
+
}], span: [{
|
|
1199
|
+
type: Input
|
|
1200
|
+
}], stackMultiDayEvents: [{
|
|
1201
|
+
type: Input
|
|
1202
|
+
}], strictRecordMapping: [{
|
|
1203
|
+
type: Input
|
|
1204
|
+
}], syncCalendarDate: [{
|
|
1205
|
+
type: Input
|
|
1206
|
+
}], syncViewDate: [{
|
|
1207
|
+
type: Input
|
|
1208
|
+
}], timeSnapType: [{
|
|
1209
|
+
type: Input
|
|
1210
|
+
}], title: [{
|
|
1211
|
+
type: Input
|
|
1212
|
+
}], tools: [{
|
|
1213
|
+
type: Input
|
|
1214
|
+
}], tooltip: [{
|
|
1215
|
+
type: Input
|
|
1216
|
+
}], width: [{
|
|
1217
|
+
type: Input
|
|
1218
|
+
}], x: [{
|
|
1219
|
+
type: Input
|
|
1220
|
+
}], y: [{
|
|
1221
|
+
type: Input
|
|
1222
|
+
}], anchorSize: [{
|
|
1223
|
+
type: Input
|
|
1224
|
+
}], dayCellCls: [{
|
|
1225
|
+
type: Input
|
|
1226
|
+
}], firstVisibleCell: [{
|
|
1227
|
+
type: Input
|
|
1228
|
+
}], firstVisibleDate: [{
|
|
1229
|
+
type: Input
|
|
1230
|
+
}], focusVisible: [{
|
|
1231
|
+
type: Input
|
|
1232
|
+
}], hasChanges: [{
|
|
1233
|
+
type: Input
|
|
1234
|
+
}], horizontalScroller: [{
|
|
1235
|
+
type: Input
|
|
1236
|
+
}], isSettingValues: [{
|
|
1237
|
+
type: Input
|
|
1238
|
+
}], isValid: [{
|
|
1239
|
+
type: Input
|
|
1240
|
+
}], lastVisibleCell: [{
|
|
1241
|
+
type: Input
|
|
1242
|
+
}], lastVisibleDate: [{
|
|
1243
|
+
type: Input
|
|
1244
|
+
}], parent: [{
|
|
1245
|
+
type: Input
|
|
1246
|
+
}], record: [{
|
|
1247
|
+
type: Input
|
|
1248
|
+
}], state: [{
|
|
1249
|
+
type: Input
|
|
1250
|
+
}], values: [{
|
|
1251
|
+
type: Input
|
|
1252
|
+
}], onBeforeAutoCreate: [{
|
|
1253
|
+
type: Output
|
|
1254
|
+
}], onBeforeChangeDate: [{
|
|
1255
|
+
type: Output
|
|
1256
|
+
}], onBeforeDestroy: [{
|
|
1257
|
+
type: Output
|
|
1258
|
+
}], onBeforeHide: [{
|
|
1259
|
+
type: Output
|
|
1260
|
+
}], onBeforeResponsiveStateChange: [{
|
|
1261
|
+
type: Output
|
|
1262
|
+
}], onBeforeSetRecord: [{
|
|
1263
|
+
type: Output
|
|
1264
|
+
}], onBeforeShow: [{
|
|
1265
|
+
type: Output
|
|
1266
|
+
}], onBeforeStateApply: [{
|
|
1267
|
+
type: Output
|
|
1268
|
+
}], onBeforeStateSave: [{
|
|
1269
|
+
type: Output
|
|
1270
|
+
}], onCatchAll: [{
|
|
1271
|
+
type: Output
|
|
1272
|
+
}], onCellMapPopulated: [{
|
|
1273
|
+
type: Output
|
|
1274
|
+
}], onCollapse: [{
|
|
1275
|
+
type: Output
|
|
1276
|
+
}], onDayCellPopulated: [{
|
|
1277
|
+
type: Output
|
|
1278
|
+
}], onDestroy: [{
|
|
1279
|
+
type: Output
|
|
1280
|
+
}], onDirtyStateChange: [{
|
|
1281
|
+
type: Output
|
|
1282
|
+
}], onElementCreated: [{
|
|
1283
|
+
type: Output
|
|
1284
|
+
}], onEventAutoCreated: [{
|
|
1285
|
+
type: Output
|
|
1286
|
+
}], onEventPropagate: [{
|
|
1287
|
+
type: Output
|
|
1288
|
+
}], onExpand: [{
|
|
1289
|
+
type: Output
|
|
1290
|
+
}], onFocusIn: [{
|
|
1291
|
+
type: Output
|
|
1292
|
+
}], onFocusOut: [{
|
|
1293
|
+
type: Output
|
|
1294
|
+
}], onHide: [{
|
|
1295
|
+
type: Output
|
|
1296
|
+
}], onLayoutUpdate: [{
|
|
1297
|
+
type: Output
|
|
1298
|
+
}], onPaint: [{
|
|
1299
|
+
type: Output
|
|
1300
|
+
}], onRangeChange: [{
|
|
1301
|
+
type: Output
|
|
1302
|
+
}], onReadOnly: [{
|
|
1303
|
+
type: Output
|
|
1304
|
+
}], onRecompose: [{
|
|
1305
|
+
type: Output
|
|
1306
|
+
}], onRefresh: [{
|
|
1307
|
+
type: Output
|
|
1308
|
+
}], onResize: [{
|
|
1309
|
+
type: Output
|
|
1310
|
+
}], onResponsiveStateChange: [{
|
|
1311
|
+
type: Output
|
|
1312
|
+
}], onShiftIncrementChange: [{
|
|
1313
|
+
type: Output
|
|
1314
|
+
}], onShow: [{
|
|
1315
|
+
type: Output
|
|
1316
|
+
}], onTickChange: [{
|
|
1317
|
+
type: Output
|
|
1318
|
+
}], onTimeAxisClick: [{
|
|
1319
|
+
type: Output
|
|
1320
|
+
}], onToolClick: [{
|
|
1321
|
+
type: Output
|
|
1322
|
+
}] } });
|
|
1323
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1kYXktdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnQvc3JjL2xpYi9icnludHVtLWRheS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzREFBc0Q7QUFDdEQ7O0dBRUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQThYLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhhLE9BQU8sRUFBNkssT0FBTyxFQUF5RSxNQUFNLHdCQUF3QixDQUFDOztBQXF4Q25TLE1BQU0sT0FBTyx1QkFBdUI7SUFrZGhDLFlBQVksT0FBbUI7UUFUdkIsa0JBQWEsR0FBRztZQUNwQixLQUFLLEVBQWMsU0FBUztZQUM1QixRQUFRLEVBQVcsU0FBUztZQUM1QixJQUFJLEVBQWUsU0FBUztZQUM1QixnQkFBZ0IsRUFBRyxJQUFJO1lBQ3ZCLFFBQVEsRUFBVyxFQUFFO1lBQ3JCLFNBQVMsRUFBVSxFQUFFO1NBQ3hCLENBQUM7UUEyUEYsa0JBQWtCO1FBQ2xCOzs7Ozs7Ozs7Ozs7V0FZRztRQUNPLHVCQUFrQixHQUFRLElBQUksWUFBWSxFQUF5SyxDQUFDO1FBQzlOOzs7Ozs7O1dBT0c7UUFDTyx1QkFBa0IsR0FBUSxJQUFJLFlBQVksRUFBb0YsQ0FBQztRQUN6STs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7Ozs7O1dBTUc7UUFDTyxrQ0FBNkIsR0FBUSxJQUFJLFlBQVksRUFBaUYsQ0FBQztRQUNqSjs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJ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QVVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFlRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBTUcsUUFBUTtzQkFBakIsTUFBTTtnQkFXRyxTQUFTO3NCQUFsQixNQUFNO2dCQWFHLFVBQVU7c0JBQW5CLE1BQU07Z0JBTUcsTUFBTTtzQkFBZixNQUFNO2dCQVFHLGNBQWM7c0JBQXZCLE1BQU07Z0JBVUcsT0FBTztzQkFBaEIsTUFBTTtnQkFjRyxhQUFhO3NCQUF0QixNQUFNO2dCQU1HLFVBQVU7c0JBQW5CLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFNRyxTQUFTO3NCQUFsQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBUUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQU9HLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBYUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxlQUFlO3NCQUF4QixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIERheVZpZXdcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgV3JhcHBlckhlbHBlciBmcm9tICcuL3dyYXBwZXIuaGVscGVyJztcblxuaW1wb3J0IHsgQWxpZ25TcGVjLCBCYXNlLCBCcnludHVtU2Nyb2xsT3B0aW9ucywgQnV0dG9uQ29uZmlnLCBDb250YWluZXIsIERvbUNvbmZpZywgRHVyYXRpb25Db25maWcsIEtleU1hcENvbmZpZywgTGF5b3V0LCBNYXNrQ29uZmlnLCBNZW51SXRlbUNvbmZpZywgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIFBhZ2luZ1Rvb2xiYXJDb25maWcsIFBhbmVsLCBQYW5lbENvbGxhcHNlckNvbmZpZywgUGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnLCBQYW5lbEhlYWRlciwgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0YXRlUHJvdmlkZXIsIFRhYkNvbmZpZywgVG9vbCwgVG9vbENvbmZpZywgVG9vbGJhckNvbmZpZywgVG9vbGJhckl0ZW1zLCBUb29sdGlwQ29uZmlnLCBXaWRnZXQgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuaW1wb3J0IHsgRXZlbnRNb2RlbCwgUmVzb3VyY2VNb2RlbCB9IGZyb20gJ0BicnludHVtL3NjaGVkdWxlci10aGluJztcbmltcG9ydCB7IEFjdGlvbkJ1dHRvbnNDb25maWcsIENhbGVuZGFyUm93LCBDYWxlbmRhclJvd0NvbmZpZywgQ2FsZW5kYXJWaWV3LCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWcsIENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnLCBEYXRlUmFuZ2VPd25lciwgRGF5Q2VsbCwgRGF5Q2VsbFdpdGhFdmVudHMsIERheVZpZXcsIERheVZpZXdMaXN0ZW5lcnMsIEV2ZW50QmFyLCBGbHVpZERheUxheW91dENvbmZpZywgT3ZlcmZsb3dQb3B1cENvbmZpZyB9IGZyb20gJ0BicnludHVtL2NhbGVuZGFyLXRoaW4nO1xuXG5pbXBvcnQgeyBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuXG5leHBvcnQgdHlwZSBCcnludHVtRGF5Vmlld1Byb3BzID0ge1xuICAgIC8vIENvbmZpZ3NcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2YgYnV0dG9uIHNwZWNpZmljYXRpb25zIHdoaWNoIGFkZCBjbGlja2FibGUgaWNvbiBidXR0b25zIHRvXG4gICAgICogdGhlIHJlbmRlcmVkIGV2ZW50IGJsb2NrcyB3aGljaCBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctYWN0aW9uQnV0dG9ucylcbiAgICAgKi9cbiAgICBhY3Rpb25CdXR0b25zID8gOiBBY3Rpb25CdXR0b25zQ29uZmlnW118UmVjb3JkPHN0cmluZywgQWN0aW9uQnV0dG9uc0NvbmZpZz5cbiAgICAvKipcbiAgICAgKiBBIGtleSB0byB1c2UgdG8gYWN0aXZhdGUgdGhpcyB2aWV3LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1hY3RpdmF0aW9uS2V5KVxuICAgICAqL1xuICAgIGFjdGl2YXRpb25LZXkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1hbGlnbilcbiAgICAgKi9cbiAgICBhbGlnbiA/IDogQWxpZ25TcGVjfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2FsaWduLXNlbGZdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9hbGlnbi1zZWxmKSBzdHlsZS5cbiAgICAgKi9cbiAgICBhbGlnblNlbGYgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW0NhbGVuZGFyUm93XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9DYWxlbmRhclJvdykgd2lkZ2V0IGNvbnRhaW5pbmcgdGhlIGhvcml6b250YWwgc2VyaWVzIG9mIGNhbGVuZGFyIGNlbGxzIHdpdGggdGhlXG4gICAgICogZGF5IGhlYWRlcnMgYW5kIGFueSBhbGwtZGF5LCBvciBkYXktc3Bhbm5pbmcgZXZlbnRzIHdoaWNoIGZhbGwgaW5zaWRlIHRoaXMgdmlldydzIHRpbWUgcmFuZ2UuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWFsbERheUV2ZW50cylcbiAgICAgKi9cbiAgICBhbGxEYXlFdmVudHMgPyA6IENhbGVuZGFyUm93fENhbGVuZGFyUm93Q29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZy1jcmVhdGluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ0NyZWF0ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gZGlzYWJsZSBkcmFnLW1vdmluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ01vdmUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgZmFsc2VgIHRvIGRpc2FibGUgZHJhZy1yZXNpemluZyBldmVudHMgaW4gdGhpcyB2aWV3LlxuICAgICAqL1xuICAgIGFsbG93RHJhZ1Jlc2l6ZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHdoZW4gbW91c2V3aGVlbCB6b29taW5nIG91dCBmcm9tICpvdmVyZmxvd2luZyogdGhlIGNsaWVudCBoZWlnaHQsIGl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gem9vbVxuICAgICAqIGZ1cnRoZXIgb3V0IHNvIHRoYXQgdGhlIGhvdXJzICp1bmRlcmZsb3cqIHRoZSBjbGllbnQgaGVpZ2h0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1hbGxvd1pvb21VbmRlcmZsb3cpXG4gICAgICovXG4gICAgYWxsb3dab29tVW5kZXJmbG93ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIGFuZCBiZWluZyBzaG93biB0aHJvdWdoIFtzaG93QnldKCNDb3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tc2hvd0J5KS4qXG4gICAgICogYHRydWVgIHRvIHNob3cgYSBjb25uZWN0b3IgYXJyb3cgcG9pbnRpbmcgdG8gdGhlIGFsaWduIHRhcmdldC5cbiAgICAgKi9cbiAgICBhbmNob3IgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB3aGVuIG5hdmlnYXRpbmcgdGhyb3VnaCB0aW1lLCB0aGUgbmV4dCB0aW1lXG4gICAgICogYmxvY2sgd2lsbCBiZSBhbmltYXRlZCBpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWFuaW1hdGVUaW1lU2hpZnQpXG4gICAgICovXG4gICAgYW5pbWF0ZVRpbWVTaGlmdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICovXG4gICAgYXBwZW5kVG8gPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0XG4gICAgICogaW50byBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgbGlua2VkIHVzaW5nIHRoZSBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1hcmlhRGVzY3JpcHRpb24pXG4gICAgICovXG4gICAgYXJpYURlc2NyaXB0aW9uID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGxvY2FsaXphYmxlIHN0cmluZyAoTWF5IGNvbnRhaW4gYCdMe30nYCB0b2tlbnMgd2hpY2ggcmVzb2x2ZSBpbiB0aGUgbG9jYWxlIGZpbGUpIHRvIGluamVjdCBhc1xuICAgICAqIHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiB0aGlzIGNvbmZpZyBpcyBzZXQsIHRoZW4gdGhlIGBnZXN0dXJlYCBjb25maWd1cmVkICh3aGljaCBkZWZhdWx0cyB0byBgZGJsY2xpY2tgKSBjcmVhdGVzIGFcbiAgICAgKiBuZXcgZXZlbnQgYXQgdGhlIG1vdXNlIG9yIHRvdWNoIGV2ZW50J3MgdGltZSBwb2ludC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctYXV0b0NyZWF0ZSlcbiAgICAgKi9cbiAgICBhdXRvQ3JlYXRlID8gOiB7XG4gICAgICAgIGdlc3R1cmU/OiBzdHJpbmdcbiAgICAgICAgbmV3TmFtZT86IEZ1bmN0aW9ufHN0cmluZ1xuICAgICAgICBzdGVwPzogc3RyaW5nXG4gICAgICAgIHNuYXBUeXBlPzogJ3JvdW5kJ3wnY2VpbCd8J2Zsb29yJ1xuICAgICAgICBkdXJhdGlvbj86IHN0cmluZ1xuICAgICAgICBzdGFydEhvdXI/OiBudW1iZXJcbiAgICB9fHN0cmluZ3xib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2xiYXIpLFxuICAgICAqIG9yIGFycmF5IG9mIGNvbmZpZyBvYmplY3RzIHJlcHJlc2VudGluZyB0aGUgY2hpbGQgaXRlbXMgb2YgYSBUb29sYmFyLiBBbm90aGVyIHdheSB0byBhZGQgYSBiYmFyIGlzIHRvIHVzZSBbc3RyaXBzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1iYmFyKVxuICAgICAqL1xuICAgIGJiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgcGFuZWwncyBib2R5IGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWJvZHlDbHMpXG4gICAgICovXG4gICAgYm9keUNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aGVyZSBwcm9wZXJ0eSBuYW1lcyB3aXRoIGEgdHJ1dGh5IHZhbHVlIGluZGljYXRlIHdoaWNoIGV2ZW50cyBzaG91bGQgYnViYmxlIHVwIHRoZSBvd25lcnNoaXBcbiAgICAgKiBoaWVyYXJjaHkgd2hlbiB0cmlnZ2VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWJ1YmJsZUV2ZW50cylcbiAgICAgKi9cbiAgICBidWJibGVFdmVudHMgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWNhbGxPbkZ1bmN0aW9ucylcbiAgICAgKi9cbiAgICBjYWxsT25GdW5jdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBpZiBhbiBldmVudCBoYW5kbGVyIHRocm93cyBhbiBleGNlcHRpb24sIHRoZSBlcnJvciBwcm9wYWdhdGVzIHVwIHRoZSBzdGFjayBhbmQgdGhlXG4gICAgICogYXBwbGljYXRpb24gc3RhdGUgaXMgdW5kZWZpbmVkLiBDb2RlIHdoaWNoIGZvbGxvd3MgdGhlIGV2ZW50IGhhbmRsZXIgd2lsbCAqbm90KiBiZSBleGVjdXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zKVxuICAgICAqL1xuICAgIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjZW50cmUgdGhlIFdpZGdldCBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGNlbnRlcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jbHMpXG4gICAgICovXG4gICAgY2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgd2hldGhlciB0aGUgcGFuZWwgaXMgY29sbGFwc2VkICh0aGUgYm9keSBvZiB0aGUgcGFuZWwgaXMgaGlkZGVuIHdoaWxlIG9ubHkgdGhlIGhlYWRlciBpc1xuICAgICAqIHZpc2libGUpLiBPbmx5IHZhbGlkIGlmIHRoZSBwYW5lbCBpcyBbY29sbGFwc2libGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKS5cbiAgICAgKi9cbiAgICBjb2xsYXBzZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBlbmFibGVzIGNvbGxhcHNpYmlsaXR5IGZvciB0aGUgcGFuZWwuIFNlZSBbY29sbGFwc2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1jb2xsYXBzZWQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gd2hpY2ggaXMgcGFzc2VkIHRoZSBbRGF5Q2VsbFdpdGhFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjdHlwZWRlZi1EYXlDZWxsV2l0aEV2ZW50cykgb2JqZWN0IHdoaWNoXG4gICAgICogZGVzY3JpYmVzIHRoZSBldmVudHMgYW5kIGRldGFpbHMgb2YgdGhlIGRheS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctY29sdW1uSGVhZGVyUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtEYXlDZWxsV2l0aEV2ZW50c30gY2VsbERhdGEgQSBkYXRhIGJsb2NrIGRlc2NyaWJpbmcgdGhlIGRhdGUgYW5kIHRoZSBldmVudHMgZm9yIHRoYXQgZGF0ZS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLG9iamVjdH1cbiAgICAgKi9cbiAgICBjb2x1bW5IZWFkZXJSZW5kZXJlciA/IDogKChjZWxsRGF0YTogRGF5Q2VsbFdpdGhFdmVudHMpID0+IHN0cmluZ3xvYmplY3QpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIHByb3BlcnR5IGFzIGB0cnVlYCB0byBzaG93IHRoZSBkYXkgbmFtZSBhbmQgZGF0ZSBoZWFkZXJzIGluIGEgbW9yZSBjb21wYWN0IHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jb21wYWN0SGVhZGVyKVxuICAgICAqL1xuICAgIGNvbXBhY3RIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBvciBbcG9zaXRpb25lZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcG9zaXRpb25lZCkuKlxuICAgICAqIEVsZW1lbnQsIFdpZGdldCBvciBSZWN0YW5nbGUgdG8gd2hpY2ggdGhpcyBXaWRnZXQgaXMgY29uc3RyYWluZWQuXG4gICAgICovXG4gICAgY29uc3RyYWluVG8gPyA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGVcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctY29udGVudEVsZW1lbnRDbHMpXG4gICAgICovXG4gICAgY29udGVudEVsZW1lbnRDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0d28gcHJvcGVydGllcywgYHN0YXJ0YCBhbmQgYGVuZGAgcmVwcmVzZW50aW5nIHRoZSBzdGFydCBhbmRcbiAgICAgKiBlbmQgb2YgY29yZSB3b3JraW5nIGhvdXJzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jb3JlSG91cnMpXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIERhdGUgZm9yIGhvdXJzIGNhbGN1bGF0aW9uXG4gICAgICogQHJldHVybnMge29iamVjdFtdfVxuICAgICAqL1xuICAgIGNvcmVIb3VycyA/IDogb2JqZWN0fCgoZGF0ZTogRGF0ZSkgPT4gb2JqZWN0W10pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBwcm9kdWNlcyBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBibG9jayB0byBjcmVhdGUgdGhlIGN1cnJlbnQgdGltZSBpbmRpY2F0b3JcbiAgICAgKiB3aGljaCBpcyBkaXNwbGF5ZWQgaW4gYSBkYXkgY29sdW1uIHdoaWNoIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgZGF0ZS4gSXQgaXMgdGhlIGRldmVsb3BlcidzIHJlc3BvbnNpYmlsaXR5XG4gICAgICogdG8gYWRkIENTUyBjbGFzc2VzIGFuZCB0aGUgYXBwcm9wcmlhdGUgQ1NTIHJ1bGVzIHRvIHByb2R1Y2UgdGhlIGRlc2lyZSBhcHBlYXJhbmNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1jdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyKVxuICAgICAqIEByZXR1cm5zIHtEb21Db25maWd9IEFuIG9iamVjdCB3aGljaCBkZXNjcmliZXMgdGhlIERPTSBzdHJ1Y3R1cmUgb2YgdGhlIHRvZGF5IGluZGljYXRvciBlbGVtZW50LlxuICAgICAqL1xuICAgIGN1cnJlbnRUaW1lSW5kaWNhdG9yUmVuZGVyZXIgPyA6ICgoKSA9PiBEb21Db25maWcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGhhbGYgaG91ciwgZmlmdGVlbiBtaW51dGUgdGljayBsaW5lcyBhcmUgcmVuZGVyZWQgaW4gYSBsb3dlciBjb250cmFzdFxuICAgICAqIGNvbG91ciB0aGFuIGhvdXIgbGluZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRhc2hlZFN1YnRpY2tzKVxuICAgICAqL1xuICAgIGRhc2hlZFN1YnRpY2tzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIFdpZGdldCBjb25maWd1cmF0aW9uIGlzIHVzZWQgaW4gdGhlIEdyaWQncyBSb3dFeHBhbmRlciBmZWF0dXJlJ3MgYHdpZGdldGAgY29uZmlnLCBwcm92aWRlIHRoZVxuICAgICAqIGZpZWxkIG9uIHRoZSBleHBhbmRlZCByZWNvcmQgdG8gdXNlIGZvciBwb3B1bGF0aW5nIHRoaXMgd2lkZ2V0J3Mgc3RvcmUgKGlmIGFwcGxpY2FibGUpXG4gICAgICovXG4gICAgZGF0YUZpZWxkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBPYmplY3QgdG8gYXBwbHkgdG8gZWxlbWVudHMgZGF0YXNldCAoZWFjaCBrZXkgd2lsbCBiZSB1c2VkIGFzIGEgZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGVsZW1lbnQpXG4gICAgICovXG4gICAgZGF0YXNldCA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICAgIC8qKlxuICAgICAqIFRoZSBkYXRlIHRvIG9yaWVudCB0aGlzIHZpZXcncyBbcmFuZ2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2NvbmZpZy1yYW5nZSkgYXJvdW5kLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kYXRlKVxuICAgICAqL1xuICAgIGRhdGUgPyA6IERhdGVcbiAgICAvKipcbiAgICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uLCBvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIGluIHRoZSBvd25lcnNoaXAgaGllcmFyY2h5IHdoaWNoIGFuXG4gICAgICogYXBwbGljYXRpb24gbWF5IHByb3ZpZGUgdG8gZmlsdGVyIG91dCBkYXkgY29sdW1ucyBmb3IgaW5kaXZpZHVhbCBkYXRlcy5cbiAgICAgKiBAcGFyYW0ge0RheUNlbGx9IGNvbnRleHQgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGRheSBjb2x1bW4gdG8gYmUgY3JlYXRlZC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIGBmYWxzZWAgdG8gbm90IGRpc3BsYXkgYSBjb2x1bW4gZm9yIHRoZSBwYXNzZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkYXRlRmlsdGVyID8gOiAoKGNvbnRleHQ6IERheUNlbGwpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB0byB1c2UgdG8gY3JlYXRlIGRhdGUgb3V0cHV0IGZvciB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkYXRlRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogQSBzdHJpbmcgdXNlZCB0byBzZXBhcmF0ZSBzdGFydCBhbmQgZW5kIGRhdGVzIGluIHRoZSBbZGVzY3JpcHRpb25Gb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRlc2NyaXB0aW9uRm9ybWF0KS5cbiAgICAgKi9cbiAgICBkYXRlU2VwYXJhdG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciBuYW1lIG9mIGEgZnVuY3Rpb24gd2hpY2ggaXMgcGFzc2VkIHRoZSBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RvbUhlbHBlciN0eXBlZGVmLURvbUNvbmZpZykgb2JqZWN0IHdoaWNoXG4gICAgICogd2lsbCBiZSB1c2VkIHRvIHN5bmMgd2l0aCBhIGRheSBjb2x1bW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRheUNlbGxSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZyxvYmplY3R9IGRvbUNvbmZpZyBBIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBjb25maWcgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gc3luYyB0aGUgZGF5IGNvbHVtbiBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Db25maWcuY2xhc3NOYW1lIEFuIG9iamVjdCB3aG8ncyB0cnV0aHkgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhcHBsaWVkIGFzIGNsYXNzIG5hbWVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Db25maWcuc3R5bGUgQSBDU1Mgc3R5bGUgZGVmaW5pdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRvbUNvbmZpZy5kYXRhc2V0IFRoZSBET00gZGF0YSBwcm9wZXJ0aWVzIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZ1tdfSBjaGlsZHJlbiBUaGUgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGRlZmluaXRpb25zIGZvciB0aGUgZXZlbnRzIGluIHRoZSBkYXkuXG4gICAgICogQHBhcmFtIHtEYXlDZWxsfSBjZWxsRGF0YSBBIGBEYXlDZWxsYCBvYmplY3QgdGhhdCBjb250YWlucyBkYXRhIGFib3V0IHRoZSBjZWxsLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZGF5Q2VsbFJlbmRlcmVyID8gOiAoKGRvbUNvbmZpZzogeyBjbGFzc05hbWU6IG9iamVjdCwgc3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0IH0sIGNoaWxkcmVuOiBEb21Db25maWdbXSwgY2VsbERhdGE6IERheUNlbGwpID0+IHN0cmluZyl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWl0aGVyIHRoZSBlbmQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIGVuZCBkYXRlIG9mIHRoZSBsYXN0IHJlbmRlcmVkIHRpbWUgYmxvY2suXG4gICAgICogWW91IGNhbiBhbHNvIHNldCB0aGlzIHZhbHVlIHRvIGEgbXMgdGltZXN0YW1wIHJlcHJlc2VudGluZyB0aW1lIGZyb20gbWlkbmlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRheUVuZFRpbWUpXG4gICAgICovXG4gICAgZGF5RW5kVGltZSA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIG5hbWUgb2YgYSBmdW5jdGlvbiB3aGljaCBpcyBwYXNzZWQgdGhlIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3Qgd2hpY2hcbiAgICAgKiB3aWxsIGJlIHVzZWQgdG8gc3luYyB3aXRoIGEgZGF5IGNlbGwgaGVhZGVyIDxzdHJvbmc+aW4gdGhlIGFsbCBkYXkgcm93PC9zdHJvbmc+LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kYXlIZWFkZXJSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZyxvYmplY3R9IGhlYWRlckRvbUNvbmZpZyBBIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBjb25maWcgb2JqZWN0IHdoaWNoIGlzIHVzZWQgdG8gc3luYyB0aGUgZGF5IGhlYWRlciBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBoZWFkZXJEb21Db25maWcuY2xhc3NOYW1lIEFuIG9iamVjdCB3aG8ncyB0cnV0aHkgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhcHBsaWVkIGFzIGNsYXNzIG5hbWVzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBoZWFkZXJEb21Db25maWcuc3R5bGUgQSBDU1Mgc3R5bGUgZGVmaW5pdGlvbiBvYmplY3QuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGhlYWRlckRvbUNvbmZpZy5kYXRhc2V0IFRoZSBET00gZGF0YSBwcm9wZXJ0aWVzIHRvIHNldC5cbiAgICAgKiBAcGFyYW0ge0RvbUNvbmZpZ1tdfSBoZWFkZXJEb21Db25maWcuY2hpbGRyZW4gVGhlIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBkZWZpbml0aW9ucyB0aGUgaGVhZGVyIGNvbnRlbnQuIFRoZXJlIHdpbGwgYmUgMiBgY2hpbGRyZW5gIGVuY2Fwc3VsYXRpbmcgdGhlIGRheSBuYW1lIGFuZCB0aGUgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RheUNlbGx9IGNlbGxEYXRhIEEgYERheUNlbGxgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGRhdGEgYWJvdXQgdGhlIGNlbGwuXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBkYXlIZWFkZXJSZW5kZXJlciA/IDogKChoZWFkZXJEb21Db25maWc6IHsgY2xhc3NOYW1lOiBvYmplY3QsIHN0eWxlOiBvYmplY3QsIGRhdGFzZXQ6IG9iamVjdCwgY2hpbGRyZW46IERvbUNvbmZpZ1tdIH0sIGNlbGxEYXRhOiBEYXlDZWxsKSA9PiBzdHJpbmcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBbRGF0ZUhlbHBlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyKSBmb3JtYXQgc3RyaW5nL2Z1bmN0aW9uIGZvciBkYXkgbmFtZXMgaW4gdGhlIGhlYWRlciByb3cgKGUuZy4sIFwiZGRkXCIgZm9yIFwiTW9uXCIsIFwiVHVlXCIsIC4uLilcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkYXlOYW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogRWl0aGVyIHRoZSBzdGFydCBob3VyIG9mIHRoZSBkYXksIG9yIGEgKjI0IGhvdXIqwqBgSEg6TU1gIHN0cmluZyBkZW5vdGluZyB0aGUgc3RhcnQgdGltZSBmb3IgZGF5cy4gVGhpc1xuICAgICAqIGlzIG1pZG5pZ2h0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRheVN0YXJ0U2hpZnQpXG4gICAgICovXG4gICAgZGF5U3RhcnRTaGlmdCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCByZW5kZXJlZFxuICAgICAqIGRhaWx5IHRpbWUgYmxvY2suIFlvdSBjYW4gYWxzbyBzZXQgdGhpcyB2YWx1ZSB0byBhIG1zIHRpbWVzdGFtcCByZXByZXNlbnRpbmcgdGltZSBmcm9tIG1pZG5pZ2h0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kYXlTdGFydFRpbWUpXG4gICAgICovXG4gICAgZGF5U3RhcnRUaW1lID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldCB3aGVuIGEgc2luZ2xlIHZhbHVlIGlzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBXaWRnZXQuIFN1Y2ggYXMgd2hlbiB1c2VkXG4gICAgICogaW4gYSBncmlkIFdpZGdldENvbHVtbiwgdGhpcyBpcyB0aGUgcHJvcGVydHkgdG8gd2hpY2ggdGhlIGNvbHVtbidzIGBmaWVsZGAgaXMgYXBwbGllZC5cbiAgICAgKi9cbiAgICBkZWZhdWx0QmluZFByb3BlcnR5ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtxdWVyeV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjZnVuY3Rpb24tcXVlcnkpIHNlbGVjdG9yIGZ1bmN0aW9uIHdoaWNoIGNhbiBpZGVudGlmeSB0aGUgZGVzY2VuZGFudCB3aWRnZXQgdG8gd2hpY2hcbiAgICAgKiBmb2N1cyBzaG91bGQgYmUgZGlyZWN0ZWQgYnkgZGVmYXVsdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZGVmYXVsdEZvY3VzKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSB3aWRnZXQgV2lkZ2V0IHBhc3NlZCB0byBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1dGh5IHZhbHVlIGlmIHdpZGdldCBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBkZWZhdWx0Rm9jdXMgPyA6ICgod2lkZ2V0OiBXaWRnZXQpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgc2V0dGluZ3MgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICovXG4gICAgZGVmYXVsdHMgPyA6IENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIE9wdGlvbnMgdG8gYWRkIGludG8gc2Nyb2xsIG9wdGlvbnMgd2hlbiB0aGUgW3Njcm9sbFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2Z1bmN0aW9uLXNjcm9sbFRvKSBtZXRob2QgaXMgY2FsbGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kZWZhdWx0U2Nyb2xsT3B0aW9ucylcbiAgICAgKi9cbiAgICBkZWZhdWx0U2Nyb2xsT3B0aW9ucyA/IDogQnJ5bnR1bVNjcm9sbE9wdGlvbnNcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0ZSBmb3JtYXQgdXNlZCBieSB0aGUgZGVmYXVsdCBbZGVzY3JpcHRpb25SZW5kZXJlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGVzY3JpcHRpb25SZW5kZXJlcikgZm9yIHJlbmRlcmluZyB0aGUgdmlldydzIGRlc2NyaXB0aW9uLlxuICAgICAqIElmIHRoaXMgdmFsdWUgaXMgYG51bGxgLCB0aGUgW2RhdGVGb3JtYXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL3ZpZXcvbWl4aW4vRGVzY3JpYmFibGUjY29uZmlnLWRhdGVGb3JtYXQpIChhbmQgcG90ZW50aWFsbHkgW2RhdGVTZXBhcmF0b3JdKCNTY2hlZHVsZXIvdmlldy9taXhpbi9EZXNjcmliYWJsZSNjb25maWctZGF0ZVNlcGFyYXRvcikpIHdpbGxcbiAgICAgKiBiZSB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdClcbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBkZXNjcmlwdGlvbkZvcm1hdCA/IDogc3RyaW5nfHN0cmluZ1tdfGJvb2xlYW5bXXwoKGRhdGU6IERhdGUpID0+IHN0cmluZyl8RnVuY3Rpb25bXVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyB0aGUgdGV4dHVhbCBkZXNjcmlwdGlvbiBmb3IgdGhpcyB2aWV3LiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlXG4gICAgICogW2Rlc2NyaXB0aW9uRm9ybWF0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci92aWV3L21peGluL0Rlc2NyaWJhYmxlI2NvbmZpZy1kZXNjcmlwdGlvbkZvcm1hdCkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRlc2NyaXB0aW9uUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHZpZXcgVGhlIGFjdGl2ZSB2aWV3IGluIGNhc2UgdGhlIGZ1bmN0aW9uIGlzIGluIGFub3RoZXIgc2NvcGUuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gRGVzY3JpcHRpb24gc3RyaW5nXG4gICAgICovXG4gICAgZGVzY3JpcHRpb25SZW5kZXJlciA/IDogKHZpZXc6IFdpZGdldCkgPT4gc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ2hlY2sgZm9yIENTUyBjb21wYXRpYmlsaXR5IGlzc3VlcyB3aGVuIHVwZ3JhZGluZyB0byB2Ny4gUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBjaGVja3M6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcmVhZE9ubHkpIGV4Y2VwdCBhIGRpc2FibGVkIHdpZGdldFxuICAgICAqIGNhbm5vdCBiZSBmb2N1c2VkLCB1c2VzIGEgZGlmZmVyZW50IHJlbmRpdGlvbiAodXN1YWxseSBncmV5aXNoKSBhbmQgZG9lcyBub3QgYWxsb3cgc2VsZWN0aW5nIGl0cyB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZGlzYWJsZWQpXG4gICAgICovXG4gICAgZGlzYWJsZWQgPyA6IGJvb2xlYW58J2luZXJ0J1xuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuIFR5cGljYWwgdmFsdWVzIGZvciB0aGlzIGNvbmZpZyBhcmUgYCd0b3AnYCxcbiAgICAgKiBgJ2JvdHRvbSdgLCBgJ2xlZnQnYCwgb3IgYCdyaWdodCdgLCB3aGljaCBjYXVzZSB0aGUgd2lkZ2V0IHRvIGJlIHBsYWNlZCBvbiB0aGF0IHNpZGUgb2YgdGhlIHBhbmVsJ3NcbiAgICAgKiBib2R5LiBTdWNoIHdpZGdldHMgYXJlIGNhbGxlZCBcImVkZ2Ugc3RyaXBzXCIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIGJlIGFibGUgdG8gZHJhZyBhIHdpZGdldCBmcmVlbHkgb24gdGhlIHBhZ2UuIE9yIHNldCB0byBhbiBvYmplY3Qgd2l0aCBhIMK0aGFuZGxlU2VsZWN0b3LCtFxuICAgICAqIHByb3BlcnR5IHdoaWNoIGNvbnRyb2xzIHdoZW4gYSBkcmFnIHNob3VsZCBzdGFydC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBbZHVyYXRpb25Vbml0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWR1cmF0aW9uVW5pdCkgdG8gdXNlIHdoZW4gZHJhZy1jcmVhdGluZyBldmVudHNcbiAgICAgKiBpbiB0aGlzIHZpZXcuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWRyYWdVbml0KVxuICAgICAqL1xuICAgIGRyYWdVbml0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBNYWtlIHRoaXMgUGFuZWwgYSBkb2NrZWQgZHJhd2VyIHdoaWNoIHNsaWRlcyBvdXQgZnJvbSBvbmUgc2lkZSBvZiB0aGUgYnJvd3NlciB2aWV3cG9ydCBieSBkZWZhdWx0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1kcmF3ZXIpXG4gICAgICogQHBhcmFtIHsnc3RhcnQnLCdsZWZ0JywnZW5kJywncmlnaHQnLCd0b3AnLCdib3R0b20nfSBzaWRlIFRoZSBzaWRlIG9mIHRoZSB2aWV3cG9ydCB0byBkb2NrIHRoZSBkcmF3ZXIgdG8uICAqIGAnc3RhcnQnYCBtZWFucyB0aGUgYGlubGluZS1zdGFydGAgc2lkZS4gKiBgJ2VuZCdgIG1lYW5zIHRoZSBgaW5saW5lLWVuZGAgc2lkZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZyxudW1iZXJ9IHNpemUgVGhlIHNpemUgb2YgdGhlIGRyYXdlciBpbiBpdHMgY29sbGFwc2libGUgYXhpcy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlubGluZSBJZiB1c2luZyB0aGUgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIHRvIHBsYWNlIHRoZSBkcmF3ZXIgaW5zaWRlIGEgaG9zdCB3aWRnZXQsIHRoaXMgbWF5IGJlIHNldCB0byBgdHJ1ZWAgdG8gbWFrZSB0aGUgZHJhd2VyIGlubGluZSB3aXRoaW4gdGhhdCBob3N0LiBOb3RlIHRoYXQsIGlmIHVzaW5nIHRoaXMsIHRoZSBsYXlvdXQgb2YgdGhlIGhvc3QgZWxlbWVudCBtdXN0IGhhdmUgYGZsZXgtZGlyZWN0aW9uYCBzZXQgYXBwcm9wcmlhdGVseS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sb2JqZWN0fSBhdXRvQ2xvc2UgU3BlY2lmaWVzIHdoYXQgdXNlciBhY3Rpb25zIHNob3VsZCBhdXRvbWF0aWNhbGx5IGNsb3NlIHRoZSBkcmF3ZXIuIERlZmF1bHRzIHRvIGNsb3Npbmcgd2hlbiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyIG9yIHdoZW4gZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5tb3VzZWRvd24gSWYgdGhlIHVzZXIgY2xpY2tzIG91dHNpZGUgb2YgdGhlIGRyYXdlciwgdGhlIGRyYXdlciB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaGlkZGVuLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGl0IGlzIHVzZWQgYXMgYSBDU1Mgc2VsZWN0b3IgdG8gZmlsdGVyIGNsaWNrcyB3aGljaCBzaG91bGQgY2xvc2UgdGhlIGRyYXdlci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW4sc3RyaW5nfSBhdXRvQ2xvc2UuZm9jdXNvdXQgSWYgZm9jdXMgbW92ZXMgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGF1dG9DbG9zZS5tb3VzZW91dCBIaWRlcyB0aGUgZHJhd2VyIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgZHJhd2VyIGFmdGVyIHRoZSBgYXV0b0Nsb3NlRGVsYXlgIHBlcmlvZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYXV0b0Nsb3NlRGVsYXkgV2hlbiB1c2luZyBgbW91c2VvdXRgLCB0aGlzIGlzIHRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHNcbiAgICAgKi9cbiAgICBkcmF3ZXIgPyA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZWxlbWVudEF0dHJpYnV0ZXMpXG4gICAgICovXG4gICAgZWxlbWVudEF0dHJpYnV0ZXMgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZ3xudWxsPlxuICAgIC8qKlxuICAgICAqIFRoZSBlbmQgZGF0ZSAoVGltZSBjb21wb25lbnQgaXMgemVyb2VkKSBvZiB0aGlzIHZpZXcuIE5vdGUgdGhhdCBpbiB0ZXJtcyBvZiBmdWxsIGRheXMsXG4gICAgICogdGhpcyBpcyBleGNsdXNpdmUsIGllOiAyMDIwLTAxLTAxMiB0byAyMDIwLTAxLTA4IGlzICpzZXZlbiogZGF5cy4gVGhlIGVuZCBpcyAwMDowMDowMCBvblxuICAgICAqIHRoZSA4dGguXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWVuZERhdGUpXG4gICAgICovXG4gICAgZW5kRGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgdG8gZmlsdGVyIHdoaWNoIGV2ZW50c1xuICAgICAqIGFyZSBjb2xsZWN0ZWQgaW50byB0aGUgZGF5IGNlbGwgZGF0YSBibG9ja3MuXG4gICAgICogUmV0dXJuIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBwYXNzZWQgZXZlbnQsIG9yIGEgKmZhbHN5KiB2YWx1ZSB0byBleGNsdWRlIHRoZSBldmVudC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudCB0aGUgcGFzc2VkIGV2ZW50XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZXZlbnRGaWx0ZXIgPyA6ICgoZXZlbnQ6IEV2ZW50TW9kZWwpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ldmVudEhlYWRlclJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSBhYm91dCB0aGUgZXZlbnQgYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZGV0YWlsLnZpZXcgVGhlIHZpZXcgcmVuZGVyaW5nIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGRldGFpbC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gZGV0YWlsLnJlc291cmNlUmVjb3JkIFRoZSByZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEgQSBkYXRhIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLnN0eWxlIFRoZSBzdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5jbHMgVGhlIGNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZXZlbnQgZWxlbWVudCBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdHJ1dGh5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25TdHlsZSBUaGUgaWNvblN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBpY29uIGVsZW1lbnQgaWYgYW4gaWNvbiBlbGVtZW50IGlzIHRvIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvbkNscyBUaGUgaWNvbkNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgaWNvbiBlbGVtZW50LiBJbml0aWFsbHkgc2V0IGZyb20gdGhlIGV2ZW50IHJlY29yZCdzIFtpY29uQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWljb25DbHMpLiBDYW4gYmUgbXV0YXRlZCBieSB0aGUgcmVuZGVyZXIuIElmIG51bGwsIG9yIG5vIHByb3BlcnRpZXMgYXJlIHNldCwgbm8gaWNvbiB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50Q29sb3IgQ29sb3IgdG8gYmUgYXBwbGllZCB0byB0aGUgZXZlbnRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuZGF0YXNldCBBbiBvYmplY3Qgd2hpY2ggcHJvZHVjZXMgdGhlIGBkYXRhc2V0YCBvZiB0aGUgcmVzdWx0aW5nIGV2ZW50IGJhclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZGV0YWlsLnJlbmRlckRhdGEuc29saWRCYXIgVGhpcyBpcyB2YWxpZCBmb3Igdmlld3Mgd2hpY2ggY3JlYXRlIGV2ZW50IGJhcnMuIFRoaXMgaXMgc2V0IHRvIGB0cnVlYCBieSBkZWZhdWx0IGZvciBhbGwgZGF5IGFuZCBpbnRlcmRheSBldmVudHMgc28gdGhhdCB0aGVzZSBhcHBlYXIgYXMgYSBzb2xpZCBibG9jayBvZiBiYWNrZ3JvdW5kIGNvbG9yLiBBbiBldmVudFJlbmRlcmVyIG1heSBtdXRhdGUgdGhpcyBmbGFnIHRvIGNoYW5nZSBpbiB3aGF0IG1hbm5lciB0aGUgZXZlbnQgYmFyIGlzIGNvbG9yZWQgLSBhcyBhIHNvbGlkIGJhciBvZiBjb2xvciwgb3IgdXNpbmcgdGhlIGZvcmVncm91bmQgY29sb3IgKHRleHQgYW5kIGljb25zKSBzdWNoIGFzIHRoZSBNb250aFZpZXcsIHRoZSBDYWxlbmRhclJvdyAoYWxsIGRheSBldmVudHMgaW4gYSBEYXlWaWV3KSwgYW5kIE92ZXJmbG93UG9wdXBzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmJvZHlDb2xvciBXaGVuIHVzZWQgaW4gYSBbRGF5Vmlld10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyksIHRoaXMgY29sb3IgaXMgYXBwbGllZCB0byB0aGUgYm9keSBvZiB0aGUgZXZlbnQgZWxlbWVudC4gTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBsaWdodCBlbm91Z2ggdGhhdCB0aGUgdGV4dCBjb2xvciAoRnJvbSB0aGUgU0FTUyB2YXJpYWJsZSBgJGRheXZpZXctZXZlbnQtY29sb3JgKSBpcyB2aXNpYmxlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwuc2hvd0J1bGxldCBJZiB0aGVyZSBpcyBubyBgaWNvbkNsc2AsIGFuZCB0aGUgZXZlbnQgaXMgbm90IHJlY3VycmluZywgdGhlbiBieSBkZWZhdWx0IGEgXCJidWxsZXRcIiBjaXJjdWxhciBpY29uIGlzIHNob3duIGlmIHRoZSB2aWV3J3MgW3Nob3dCdWxsZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3dCdWxsZXQpIGlmIHNldC4gU2V0dGluZyB0aGlzIHByb3BlcnR5IGluIGFuIGV2ZW50IHJlbmRlcmVyIG92ZXJyaWRlcyB0aGlzIGJlaGF2aW91ci5cbiAgICAgKiBAcmV0dXJucyB7RG9tQ29uZmlnLERvbUNvbmZpZ1tdLHN0cmluZyx2b2lkfVxuICAgICAqL1xuICAgIGV2ZW50SGVhZGVyUmVuZGVyZXIgPyA6ICgoZGV0YWlsOiB7IHZpZXc6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCByZW5kZXJEYXRhOiB7IHN0eWxlOiBvYmplY3QsIGNsczogb2JqZWN0LCBpY29uU3R5bGU6IG9iamVjdCwgaWNvbkNsczogb2JqZWN0LCBldmVudENvbG9yOiBzdHJpbmcsIGRhdGFzZXQ6IG9iamVjdCwgc29saWRCYXI6IGJvb2xlYW4sIGJvZHlDb2xvcjogc3RyaW5nIH0sIHNob3dCdWxsZXQ6IGJvb2xlYW4gfSkgPT4gRG9tQ29uZmlnfERvbUNvbmZpZ1tdfHN0cmluZ3x2b2lkKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIHRvIG1hbmFnZSBldmVudCBsYXlvdXQgY2xhc3MuXG4gICAgICogU2VlIFtGbHVpZERheUxheW91dF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9sYXlvdXQvZGF5L0ZsdWlkRGF5TGF5b3V0KSBjbGFzcyBkb2NzIHRvIHNlZSBhbGwgcG9zc2libGUgY29uZmlndXJhdGlvbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWV2ZW50TGF5b3V0KVxuICAgICAqL1xuICAgIGV2ZW50TGF5b3V0ID8gOiBGbHVpZERheUxheW91dENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggeW91XG4gICAgICogY2FuIHNwZWNpZnkgdG8gY3VzdG9taXplIGV2ZW50IERPTSBjb250ZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ldmVudFJlbmRlcmVyKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgZGF0YSBhYm91dCB0aGUgZXZlbnQgYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyVmlld30gZGV0YWlsLnZpZXcgVGhlIHZpZXcgcmVuZGVyaW5nIHRoZSBldmVudFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGRldGFpbC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gZGV0YWlsLnJlc291cmNlUmVjb3JkIFRoZSBSZXNvdXJjZSByZWNvcmRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEgQSBkYXRhIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBldmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLnN0eWxlIFRoZSBzdHlsZSBwcm9wZXJ0eSBpcyBhbiBvYmplY3QgY29udGFpbmluZyBzdHlsZSBwcm9wZXJ0aWVzIGZvciB0aGUgZXZlbnQgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5jbHMgVGhlIGNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgZXZlbnQgZWxlbWVudCBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgdHJ1dGh5XG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRldGFpbC5yZW5kZXJEYXRhLmljb25TdHlsZSBUaGUgaWNvblN0eWxlIHByb3BlcnR5IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHN0eWxlIHByb3BlcnRpZXMgZm9yIHRoZSBpY29uIGVsZW1lbnQgaWYgYW4gaWNvbiBlbGVtZW50IGlzIHRvIGJlIHVzZWRcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuaWNvbkNscyBUaGUgaWNvbkNscyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgaWNvbiBlbGVtZW50LiBJbml0aWFsbHkgc2V0IGZyb20gdGhlIGV2ZW50IHJlY29yZCdzIFtpY29uQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9FdmVudE1vZGVsI2ZpZWxkLWljb25DbHMpLiBDYW4gYmUgbXV0YXRlZCBieSB0aGUgcmVuZGVyZXIuIElmIG51bGwsIG9yIG5vIHByb3BlcnRpZXMgYXJlIHNldCwgbm8gaWNvbiB3aWxsIGJlIHJlbmRlcmVkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50Q29sb3IgQ29sb3IgdG8gYmUgYXBwbGllZCB0byB0aGUgZXZlbnQuIFRoaXMgbWF5IGJlIGEgQ1NTIGNvbG9yIG5hbWUgb3IgYSBDU1MgY29sb3IgdmFsdWUgaW4gYW55IG9mIHRoZSBzdXBwb3J0ZWQgQ1NTIGNvbG9yIGZvcm1hdHMgc3VjaCBhcyBgI1JSR0dCQmAsIGByZ2IoMjU1LCAwLCAwKWAsIG9yIGByZ2JhKDI1NSwgMCwgMCwgMC41KWAuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLmV2ZW50QmFja2dyb3VuZCBBIENTUyBiYWNrZ3JvdW5kIHN0eWxlIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGV2ZW50LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBiYWNrZ3JvdW5kIGltYWdlIG9yIGdyYWRpZW50IGZvciB0aGUgZXZlbnQgYmFyLiBUaGlzIG92ZXJyaWRlcyB0aGUgYGV2ZW50Q29sb3JgIHByb3BlcnR5IGlmIHByZXNlbnQuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbC5yZW5kZXJEYXRhLnRleHRDb2xvciBBIENTUyBjb2xvciB0byBiZSBhcHBsaWVkIHRvIHRoZSBldmVudCB0ZXh0LiBUaGlzIGlzIG5vdCBzZXQgYnkgZGVmYXVsdCwgYnV0IGNhbiBiZSBzZXQgYnkgdGhlIHJlbmRlcmVyIHRvIHByb3ZpZGUgYSBjdXN0b20gY29sb3IgZm9yIHRoZSBldmVudCBuYW1lIHRleHQgaW4gdGhlIGV2ZW50IGJhci4gVGhpcyBtYXkgYmUgYSBDU1MgY29sb3IgbmFtZSBvciBhIENTUyBjb2xvciB2YWx1ZSBpbiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBDU1MgY29sb3IgZm9ybWF0cyBzdWNoIGFzIGAjUlJHR0JCYCwgYHJnYigyNTUsIDAsIDApYCwgb3IgYHJnYmEoMjU1LCAwLCAwLCAwLjUpYC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsLnJlbmRlckRhdGEuZXZlbnRJbm5lclN0eWxlIFRoZSBldmVudElubmVyU3R5bGUgcHJvcGVydHkgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgc3R5bGUgcHJvcGVydGllcyBmb3IgdGhlIGlubmVyIHBhcnQgb2YgdGhlIGV2ZW50IGVsZW1lbnQsIHRoZSBgLmItY2FsLWV2ZW50YCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBkZXRhaWwucmVuZGVyRGF0YS5kYXRhc2V0IEFuIG9iamVjdCB3aGljaCBwcm9kdWNlcyB0aGUgYGRhdGFzZXRgIG9mIHRoZSByZXN1bHRpbmcgZXZlbnQgYmFyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBkZXRhaWwucmVuZGVyRGF0YS5zb2xpZEJhciBUaGlzIGlzIHZhbGlkIGZvciB2aWV3cyB3aGljaCBjcmVhdGUgZXZlbnQgYmFycy4gVGhpcyBpcyBzZXQgdG8gYHRydWVgIGJ5IGRlZmF1bHQgZm9yIGFsbCBkYXkgYW5kIGludGVyZGF5IGV2ZW50cyBzbyB0aGF0IHRoZXNlIGFwcGVhciBhcyBhIHNvbGlkIGJsb2NrIG9mIGJhY2tncm91bmQgY29sb3IuIEFuIGV2ZW50UmVuZGVyZXIgbWF5IG11dGF0ZSB0aGlzIGZsYWcgdG8gY2hhbmdlIGluIHdoYXQgbWFubmVyIHRoZSBldmVudCBiYXIgaXMgY29sb3JlZCAtIGFzIGEgc29saWQgYmFyIG9mIGNvbG9yLCBvciB1c2luZyB0aGUgZm9yZWdyb3VuZCBjb2xvciAodGV4dCBhbmQgaWNvbnMpIHN1Y2ggYXMgdGhlIE1vbnRoVmlldywgdGhlIENhbGVuZGFyUm93IChhbGwgZGF5IGV2ZW50cyBpbiBhIERheVZpZXcpLCBhbmQgT3ZlcmZsb3dQb3B1cHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsLnJlbmRlckRhdGEuYm9keUNvbG9yIFdoZW4gdXNlZCBpbiBhIFtEYXlWaWV3XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3KSwgdGhpcyBjb2xvciBpcyBhcHBsaWVkIHRvIHRoZSBib2R5IG9mIHRoZSBldmVudCBlbGVtZW50LiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGxpZ2h0IGVub3VnaCB0aGF0IHRoZSB0ZXh0IGNvbG9yIChGcm9tIHRoZSBTQVNTIHZhcmlhYmxlIGAkZGF5dmlldy1ldmVudC1jb2xvcmApIGlzIHZpc2libGVcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRldGFpbC5yZW5kZXJEYXRhLnNob3dCdWxsZXQgSWYgdGhlcmUgaXMgbm8gYGljb25DbHNgLCBhbmQgdGhlIGV2ZW50IGlzIG5vdCByZWN1cnJpbmcsIHRoZW4gYnkgZGVmYXVsdCBhIFwiYnVsbGV0XCIgY2lyY3VsYXIgaWNvbiBpcyBzaG93biBpZiB0aGUgdmlldydzIFtzaG93QnVsbGV0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93QnVsbGV0KSBpZiBzZXQuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbiBhbiBldmVudCByZW5kZXJlciBvdmVycmlkZXMgdGhpcyBiZWhhdmlvdXIuXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxEb21Db25maWdbXSxzdHJpbmcsdm9pZH0gVGhlIGNvbnRlbnQgdG8gYmUgdXNlZCBhcyB0aGUgZXZlbnQgYm9keS5cbiAgICAgKi9cbiAgICBldmVudFJlbmRlcmVyID8gOiAoKGRldGFpbDogeyB2aWV3OiBDYWxlbmRhclZpZXcsIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCwgcmVuZGVyRGF0YTogeyBzdHlsZTogb2JqZWN0LCBjbHM6IG9iamVjdCwgaWNvblN0eWxlOiBvYmplY3QsIGljb25DbHM6IG9iamVjdCwgZXZlbnRDb2xvcjogc3RyaW5nLCBldmVudEJhY2tncm91bmQ6IHN0cmluZywgdGV4dENvbG9yOiBzdHJpbmcsIGV2ZW50SW5uZXJTdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIHNvbGlkQmFyOiBib29sZWFuLCBib2R5Q29sb3I6IHN0cmluZywgc2hvd0J1bGxldDogYm9vbGVhbiB9IH0pID0+IERvbUNvbmZpZ3xEb21Db25maWdbXXxzdHJpbmd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB3aGljaCBjb21wYXJlcyBldmVudHMgd2hpY2ggc29tZSB2aWV3cyB1c2UgdG8gZGVjaWRlIHVwb24gcmVuZGVyaW5nIG9yZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ldmVudFNvcnRlcilcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsLEV2ZW50QmFyfSBsaHMgVGhlIGxlZnQgc2lkZSB2YWx1ZSB0byBjb25wYXJlXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbCxFdmVudEJhcn0gcmhzIFRoZSByaWdodCBzaWRlIHZhbHVlIHRvIGNvbnBhcmVcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIGV2ZW50U29ydGVyID8gOiAobGhzOiBFdmVudE1vZGVsfEV2ZW50QmFyLCByaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIpID0+IG51bWJlclxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBwaXhlbHMgdG8gcmVkdWNlIHRoZSBoZWlnaHQgb2YgZXZlbnRzIGJ5LCB0byBsZWF2ZSBhIGdhcCBiZXR3ZWVuIHRoZW0uXG4gICAgICovXG4gICAgZXZlbnRTcGFjaW5nID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgZW5kIGRhdGUgb2YgYW4gYWxsIGRheSBldmVudCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFVJIGFzXG4gICAgICogdGhlIGxhc3QgY2FsZW5kYXIgZGF0ZSBvbiB3aGljaCB0aGUgZXZlbnQgZmFsbHMuIEZvciBtb3N0IGVuZCB1c2VycywgdGhpcyBpcyB0aGVcbiAgICAgKiBleHBlY3RlZCB2YWx1ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZXh0ZW5kQWxsRGF5RW5kRGF5KVxuICAgICAqL1xuICAgIGV4dGVuZEFsbERheUVuZERheSA/IDogYm9vbGVhblxuICAgIGV4dHJhRGF0YSA/IDogYW55XG4gICAgLyoqXG4gICAgICogSWYgdGhpcyBpcyBzZXQgdG8gYHRydWVgLCB0aGVuIHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggYXNzaWduZWQgcmVzb3VyY2Ugb2YgYSBtdWx0aSBhc3NpZ25lZCBldmVudFxuICAgICAqIHRvIHVzZSB0byBjcmVhdGUgdGhlIGV2ZW50IFVJLCB0aGUgZmlyc3QgcmVzb3VyY2Ugd2hpY2ggaXMgc3RpbGwgc2VsZWN0ZWQgaW4gdGhlXG4gICAgICogW3Jlc291cmNlRmlsdGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9TaWRlYmFyI3Byb3BlcnR5LXJlc291cmNlRmlsdGVyKSBpcyB1c2VkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1maWx0ZXJFdmVudFJlc291cmNlcylcbiAgICAgKi9cbiAgICBmaWx0ZXJFdmVudFJlc291cmNlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGhvdXJzIGluIHRoZSBkYXkgd2lsbCBiZSBzaXplZCBzbyB0aGF0IHRoZXkgZml0IGluIHRoZSBhdmFpbGFibGVcbiAgICAgKiBoZWlnaHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWZpdEhvdXJzKVxuICAgICAqL1xuICAgIGZpdEhvdXJzID8gOiBib29sZWFufHtcbiAgICAgICAgbWluSGVpZ2h0PzogbnVtYmVyXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHJlY29uZmlndXJpbmcgdGhlIFtzdGFydERhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXN0YXJ0RGF0ZSkgbWFpbnRhaW5zIHRoZSBjdXJyZW50IGR1cmF0aW9uXG4gICAgICogb2YgdGhlIHZpZXcgYW5kIG1vdmVzIHRoZSBbZW5kRGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctZW5kRGF0ZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWZpeGVkRHVyYXRpb24pXG4gICAgICovXG4gICAgZml4ZWREdXJhdGlvbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWcgb2JqZWN0IG9mIGEgZm9vdGVyLiBNYXkgY29udGFpbiBhIGBkb2NrYCwgYGh0bWxgIGFuZCBhIGBjbHNgIHByb3BlcnR5LiBBIGZvb3RlciBpcyBub3QgYSB3aWRnZXQsXG4gICAgICogYnV0IHJhdGhlciBwbGFpbiBIVE1MIHRoYXQgZm9sbG93cyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYW5lbCdzIGJvZHkgYW5kIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWZvb3RlcilcbiAgICAgKi9cbiAgICBmb290ZXIgPyA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgRnVuY3Rpb24gKG9yIG5hbWUgb2YgYSBmdW5jdGlvbiBpbiB0aGUgb3duZXJzaGlwIGhpZXJhcmNoeSkgd2hpY2ggcmV0dXJucyB0aGVcbiAgICAgKiBbcmVzb3VyY2UgcmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL1NjaGVkdWxlci9tb2RlbC9SZXNvdXJjZU1vZGVsKSB0byB1c2UgdG8gY3JlYXRlIHRoZSBVSSBmb3IgYW4gZXZlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWdldFByaW1hcnlSZXNvdXJjZSlcbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudFJlY29yZCBUaGUgZXZlbnQgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBwcmltYXJ5IHJlc291cmNlLlxuICAgICAqIEByZXR1cm5zIHtTY2hlZHVsZXIubW9kZWwuUmVzb3VyY2VNb2RlbH0gVGhlIHJlc291cmNlIHRvIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBldmVudC5cbiAgICAgKi9cbiAgICBnZXRQcmltYXJ5UmVzb3VyY2UgPyA6ICgoZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwpID0+IFJlc291cmNlTW9kZWwpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjdHlwZWRlZi1QYW5lbEhlYWRlcikgZm9yIHRoZSBwYW5lbCdzIGhlYWRlciBvciBhIHN0cmluZyBpbiBwbGFjZSBvZiBhIGB0aXRsZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgaGVpZ2h0LCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS5oZWlnaHRgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIGhlaWdodCBzdHJpbmcgb3IgYSBudW1iZXIsXG4gICAgICogd2hpY2ggd2lsbCBnZXQgJ3B4JyBhcHBlbmRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIENTUyBhcyB0aGUgcHJpbWFyeSB3YXkgdG8gY29udHJvbCBoZWlnaHQsIGJ1dCBpbiBzb21lXG4gICAgICogY2FzZXMgdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICBoZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgd2l0aCB0cnVlIHRvIG1ha2Ugd2lkZ2V0IGluaXRpYWxseSBoaWRkZW4uXG4gICAgICovXG4gICAgaGlkZGVuID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBoaWRlIGRheSBjb2x1bW5zIHdoaWNoIGNvbnRhaW4gbm8gZXZlbnRzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1oaWRlRW1wdHlEYXlzKVxuICAgICAqL1xuICAgIGhpZGVFbXB0eURheXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGhpZGUgW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1ub25Xb3JraW5nRGF5cylcbiAgICAgKi9cbiAgICBoaWRlTm9uV29ya2luZ0RheXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCB0byBtYWtlIHRoaXMgY29udGFpbmVyIGhpZGUgd2hlbiBpdCBoYXMgbm8gdmlzaWJsZSBjaGlsZHJlbiAoRWl0aGVyIGVtcHR5XG4gICAgICogb3IgYWxsIGNoaWxkcmVuIGhpZGRlbikuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhpZGVXaGVuRW1wdHkpXG4gICAgICovXG4gICAgaGlkZVdoZW5FbXB0eSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBoZWlnaHQgPHN0cm9uZz5pbiBwaXhlbHM8L3N0cm9uZz4gb2Ygb25lIGhvdXIgY2VsbCBpbiBhIGRheSBjb2x1bW4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhvdXJIZWlnaHQpXG4gICAgICovXG4gICAgaG91ckhlaWdodCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgd2hpY2ggZW5jYXBzdWxhdGVzIGEgc2V0IG9mIFtob3VySGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ob3VySGVpZ2h0KSBicmVha3BvaW50cyB3aGljaFxuICAgICAqIGRpY3RhdGUgd2hlbiBzdWJ0aWNrcyAtIGludGVydmVuaW5nIHRpbWUgaW5kaWNhdG9ycyAtIGFyZSBpbnRyb2R1Y2VkIGludG8gdGhlIERheVZpZXcnc1xuICAgICAqIHRpbWUgYXhpcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodEJyZWFrcG9pbnRzKVxuICAgICAqL1xuICAgIGhvdXJIZWlnaHRCcmVha3BvaW50cyA/IDogbnVtYmVyW11cbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRpdGxlKS4gRWl0aGVyIHBhc3MgYSBDU1MgY2xhc3MgYXMgYSBzdHJpbmcsIG9yIHBhc3MgYVxuICAgICAqIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgZGVzY3JpYmluZyBhbiBlbGVtZW50IHRvIHJlcHJlc2VudCB0aGUgaWNvbi5cbiAgICAgKi9cbiAgICBpY29uID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaWdub3JlUGFyZW50UmVhZE9ubHkpXG4gICAgICovXG4gICAgaWdub3JlUGFyZW50UmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIG1pbGxpc2Vjb25kIHZhbHVlIHRvIHdoaWNoIHRvIHNuYXAgcG9pbnRlciB0aW1lcyB3aGVuIGNsaWNraW5nIG9yIGRyYWdnaW5nIHdpdGhpbiBhIGRheSBjb2x1bW5cbiAgICAgKiBhbmQgd2hlbiBjYWxjdWxhdGluZyB0aGUgaG92ZXJlZCB0aW1lIGZvciB0aGUgW1NjaGVkdWxlVG9vbHRpcF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci9mZWF0dXJlL1NjaGVkdWxlVG9vbHRpcCkgdG9vbHRpcC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaW5jcmVtZW50KVxuICAgICAqL1xuICAgIGluY3JlbWVudCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbnZlbmllbmNlIHNldHRpbmcgdG8gYWxpZ24gaW5wdXQgZmllbGRzIG9mIGNoaWxkIHdpZGdldHMuIEJ5IGRlZmF1bHQsIHRoZSBGaWVsZCBpbnB1dCBlbGVtZW50IGlzXG4gICAgICogcGxhY2VkIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgYGxhYmVsYC4gSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBpbnB1dCBmaWVsZHMgYWxpZ25lZCB0byB0aGVcbiAgICAgKiByaWdodCwgc2V0IHRoaXMgY29uZmlnIHRvIGAnZW5kJ2AuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWlucHV0RmllbGRBbGlnbilcbiAgICAgKi9cbiAgICBpbnB1dEZpZWxkQWxpZ24gPyA6ICdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctYXBwZW5kVG8pIGNvbmZpZyBpcyBpZ25vcmVkLlxuICAgICAqL1xuICAgIGluc2VydEJlZm9yZSA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgZWxlbWVudCBpZCkgdG8gYXBwZW5kIHRoaXMgd2lkZ2V0IGVsZW1lbnQgdG8sIGFzIGEgZmlyc3QgY2hpbGQuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGRyYWctbW92aW5nIGFuIGV2ZW50IGFsbG93cyB0aGUgZHJhZyBnZXN0dXJlIHRvIG1vdmUgdGhlIGV2ZW50IGludG8gb3RoZXIgZGF5IGNvbHVtbnMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWludGVyRGF5RHJhZylcbiAgICAgKi9cbiAgICBpbnRlckRheURyYWcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkcmFnLXJlc2l6aW5nIGFuIGV2ZW50IChpbmNsdWRpbmcgY3JlYXRpbmcgYSBuZXcgZXZlbnQpIGFsbG93cyB0aGUgZHJhZyBnZXN0dXJlIHRvIHNwYW4gbXVsdGlwbGUgZGF5XG4gICAgICogY29sdW1ucyB0byBtYWtlIHRoZSBldmVudCBhbiBpbnRlciBkYXkgZXZlbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWludGVyRGF5UmVzaXplKVxuICAgICAqL1xuICAgIGludGVyRGF5UmVzaXplID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgQ1NTIGNsYXNzIHRvIGFkZCB0byBjaGlsZCBpdGVtcyBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBpdGVtQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0eXBlZCBjaGlsZCB3aWRnZXQgY29uZmlnIG9iamVjdHMgb3IgV2lkZ2V0cy4gTWF5IGFsc28gYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWl0ZW1zKVxuICAgICAqL1xuICAgIGl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5fFdpZGdldClbXVxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCB3aG9zZSBrZXlzIGFyZSB0aGUgW2tleV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5KSBuYW1lXG4gICAgICogYW5kIG9wdGlvbmFsIG1vZGlmaWVyIHByZWZpeGVzOiBgJ0N0cmwrJ2AsIGAnQWx0KydgLCBgJ01ldGErJ2AsIGFuZCBgJ1NoaWZ0KydgIChjYXNlLWluc2Vuc2l0aXZlKS4gVGhlIHZhbHVlc1xuICAgICAqIGFyZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFuY2UgbWV0aG9kIHRvIGNhbGwgd2hlbiB0aGUga2V5c3Ryb2tlIGlzIHJlY2VpdmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWxhYmVsUG9zaXRpb24pXG4gICAgICovXG4gICAgbGFiZWxQb3NpdGlvbiA/IDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSBzaG9ydCBuYW1lIG9mIGEgaGVscGVyIGNsYXNzIHdoaWNoIG1hbmFnZXMgcmVuZGVyaW5nIGFuZCBzdHlsaW5nIG9mIGNoaWxkIGl0ZW1zLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1sYXlvdXQpXG4gICAgICovXG4gICAgbGF5b3V0ID8gOiBzdHJpbmd8Q2FsZW5kYXJDb250YWluZXJMYXlvdXRDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIHN0eWxlIHByb3BlcnRpZXMgdG8gYXBwbHkgdG8gdGhlIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1sYXlvdXRTdHlsZSlcbiAgICAgKi9cbiAgICBsYXlvdXRTdHlsZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgW2NoaWxkIGl0ZW1dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykgKmNvbmZpZyBvYmplY3RzKiB3aGljaCBpcyB0byBiZSBjb252ZXJ0ZWQgaW50b1xuICAgICAqIGluc3RhbmNlcyBvbmx5IHdoZW4gdGhpcyBDb250YWluZXIgaXMgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGVhZ2VybHkgYXQgY29uc3RydWN0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWxhenlJdGVtcylcbiAgICAgKi9cbiAgICBsYXp5SXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz58Q2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBUaGUgbGlzdGVuZXIgc2V0IGZvciB0aGlzIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogRGF5Vmlld0xpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1sb2NhbGVDbGFzcylcbiAgICAgKi9cbiAgICBsb2NhbGVDbGFzcyA/IDogdHlwZW9mIEJhc2VcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHJvcGVydGllcyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgYXV0b21hdGljYWxseSB1cG9uIGEgbG9jYWxlIGFwcGx5aW5nLlxuICAgICAqIEluIGNhc2UgdGhlcmUgaXMgYSBuZWVkIHRvIGxvY2FsaXplIG5vdCB0eXBpY2FsIHZhbHVlIChub3QgYSBTdHJpbmcgdmFsdWUgb3IgYSBmaWVsZCB3aXRoIHJlLWRlZmluZWQgc2V0dGVyL2dldHRlciksXG4gICAgICogeW91IGNvdWxkIHVzZSAnbG9jYWxlS2V5JyBtZXRhIGNvbmZpZ3VyYXRpb24uXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctbG9jYWxpemFibGVQcm9wZXJ0aWVzKVxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlUHJvcGVydGllcyA/IDogc3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBtYXJnaW4uIFRoaXMgbWF5IGJlIGNvbmZpZ3VyZWQgYXMgYSBzaW5nbGUgbnVtYmVyIG9yIGEgYFRSQkxgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIG1hcmdpbiA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoaXMgY29uZmlnIG9iamVjdCBjb250YWlucyB0aGUgZGVmYXVsdHMgZm9yIHRoZSBbTWFza10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjcmVhdGVkIGZvciB0aGVcbiAgICAgKiBbbWFza2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza2VkKSBjb25maWcuIEFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYG1hc2tlZGAgY29uZmlnIHdpbGwgb3ZlcnJpZGUgdGhlc2VcbiAgICAgKiB2YWx1ZXMuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNvbmZpZyBvYmplY3QuXG4gICAgICovXG4gICAgbWFza2VkID8gOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gaGVpZ2h0IHRoZSBhbGwgZGF5IGV2ZW50IHJvdyBpcyBhbGxvd2VkIHRvIGdyb3cgd2l0aGluIHRoaXMgdmlld1xuICAgICAqIHdoZW4gaXQgaXMgZXhwYW5kZWQgdG8gc2hvdyBhbGwgaXRzIFwiYWxsIGRheVwiIGV2ZW50cy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctbWF4QWxsRGF5SGVpZ2h0KVxuICAgICAqL1xuICAgIG1heEFsbERheUhlaWdodCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIGRhdGUgdG8gd2hpY2ggdGhlIGBlbmREYXRlYCBvZiB0aGlzIHZpZXcgbWF5IGJlIG5hdmlnYXRlZC5cbiAgICAgKi9cbiAgICBtYXhEYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWF4SGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLW1heGltaXplT25Nb2JpbGUpXG4gICAgICovXG4gICAgbWF4aW1pemVPbk1vYmlsZSA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtYXhXaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBkYXRlIHRvIHdoaWNoIHRoZSBgc3RhcnREYXRlYCBvZiB0aGlzIHZpZXcgbWF5IGJlIG5hdmlnYXRlZC5cbiAgICAgKi9cbiAgICBtaW5EYXRlID8gOiBEYXRlfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtaW5pbXVtIHdpZHRoIG9mIGEgZGF5IGNvbHVtbi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctbWluRGF5V2lkdGgpXG4gICAgICovXG4gICAgbWluRGF5V2lkdGggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBoZWlnaHQgdG8gd2hpY2ggZXZlbnQgYmxvY2tzIGluIGEgZGF5IGNlbGwgbWF5IHNocmluay4gSWYgYW4gZXZlbnQgaGFzIHZlcnlcbiAgICAgKiBzaG9ydCBkdXJhdGlvbiwgd2hhdGV2ZXIgdGhlIFtob3VySGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ob3VySGVpZ2h0KSwgYW5kIHJlZ2FyZGxlc3Mgb2ZcbiAgICAgKiBbdGltZWxpbmUgem9vbWluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNmdW5jdGlvbi16b29tVG8pLCB0aGUgZXZlbnQgYmxvY2sgd2lsbCBuZXZlciBkcm9wIGJlbG93IHRoaXMgaGVpZ2h0LlxuICAgICAqL1xuICAgIG1pbkV2ZW50SGVpZ2h0ID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnQncyBtaW5IZWlnaHQuIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbaGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluSGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gaGVpZ2h0IDxzdHJvbmc+aW4gcGl4ZWxzPC9zdHJvbmc+IHRvIGFsbG93IGEgem9vbSByZXF1ZXN0IHRvIHpvb20gb3V0IHRvLlxuICAgICAqL1xuICAgIG1pbkhvdXJIZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWluV2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgaXMgY29uZmlndXJlZCBhcyBgdHJ1ZWAgYSBbUmVzaXplT2JzZXJ2ZXJdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNpemVPYnNlcnZlcilcbiAgICAgKiBpcyB1c2VkIHRvIG1vbml0b3IgdGhpcyBlbGVtZW50IGZvciBzaXplIGNoYW5nZXMgY2F1c2VkIGJ5IGVpdGhlciBzdHlsZSBtYW5pcHVsYXRpb24sIG9yIGJ5IENTU1xuICAgICAqIGxheW91dC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IGNvbmZpZyBvYmplY3RzIHdoaWNoIG1heSBiZSByZWZlcmVuY2VkIGJ5IG5hbWUgaW4gdGhlIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKVxuICAgICAqIGNvbmZpZy4gRm9yIGV4YW1wbGUsIGEgc3BlY2lhbGl6ZWQgW01lbnVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWVudSkgc3ViY2xhc3MgbWF5IGhhdmUgYSBgbmFtZWRJdGVtc2AgZGVmYXVsdFxuICAgICAqIHZhbHVlIGRlZmluZWQgbGlrZSB0aGlzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1uYW1lZEl0ZW1zKVxuICAgICAqL1xuICAgIG5hbWVkSXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz5cbiAgICAvKipcbiAgICAgKiBUZXh0IG9yIEhUTUwsIG9yIGEgW0RvbUNvbmZpZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIGJsb2NrIHRvIGRpc3BsYXkgd2hlbiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGhhdmUgYmVlbiBmaWx0ZXJlZCBvdXQuXG4gICAgICovXG4gICAgbm9NYXRjaGluZ0RhdGVzID8gOiBzdHJpbmd8RG9tQ29uZmlnXG4gICAgLyoqXG4gICAgICogTm9uLXdvcmtpbmcgZGF5cyBhcyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZGF5IGluZGljZXMsIDAtNiAoU3VuZGF5LVNhdHVyZGF5KSwgYW5kIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogRGVmYXVsdHMgdG8gW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktbm9uV29ya2luZ0RheXMtc3RhdGljKS5cbiAgICAgKi9cbiAgICBub25Xb3JraW5nRGF5cyA/IDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIFtPdmVyZmxvd1BvcHVwXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9PdmVyZmxvd1BvcHVwKSB0aGF0IHRoZVxuICAgICAqIFthbGxEYXlFdmVudHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktYWxsRGF5RXZlbnRzKSBtYXkgc2hvdyB3aGVuIGV2ZW50cyBmb3Igb25lIGRheSBvdmVyZmxvdyB0aGUgYXZhaWxhYmxlIHNwYWNlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1vdmVyZmxvd1BvcHVwKVxuICAgICAqL1xuICAgIG92ZXJmbG93UG9wdXAgPyA6IE92ZXJmbG93UG9wdXBDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1pdGVtcykgb2YgYSBDb250YWluZXIpLCB0aGlzIGNvbmZpZyB3aWxsIGJlIGlnbm9yZWQuIEluIHRoaXMgY2FzZVxuICAgICAqIHRoZSBvd25lciBpcyA8c3Ryb25nPmFsd2F5czwvc3Ryb25nPiB0aGUgZW5jYXBzdWxhdGluZyBDb250YWluZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLW93bmVyKVxuICAgICAqL1xuICAgIG93bmVyID8gOiBXaWRnZXR8YW55XG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGV2ZW50cyB3aGljaCBoYXZlIGFuIGVuZCBkYXRlIGluIHRoZSBwYXN0LiBEZWZhdWx0cyB0byBgJ2ItcGFzdC1ldmVudCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1wYXN0RXZlbnRDbHMpXG4gICAgICovXG4gICAgcGFzdEV2ZW50Q2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHdoZW4gYSB3aWRnZXQgaXMgcmVuZGVyZWQgaW50byBhbm90aGVyIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLCBidXQgbXVzdFxuICAgICAqIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0IG9mIHRoYXQgd2lkZ2V0LCBhbmQgbXVzdCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlbHkgdG8gdGhhdFxuICAgICAqIHdpZGdldCdzIFtjb250ZW50RWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1wb3NpdGlvbmVkKVxuICAgICAqL1xuICAgIHBvc2l0aW9uZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50IHRvb2x0aXAgZnJvbSBiZWluZyBkaXNwbGF5ZWQgb24gdG91Y2ggZGV2aWNlcy4gVXNlZnVsIGZvciBleGFtcGxlIGZvciBidXR0b25zIHRoYXQgZGlzcGxheSBhXG4gICAgICogbWVudSBvbiBjbGljayBldGMsIHNpbmNlIHRoZSB0b29sdGlwIHdvdWxkIGJlIGRpc3BsYXllZCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgICAqL1xuICAgIHByZXZlbnRUb29sdGlwT25Ub3VjaCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHJhbmdlIGFyb3VuZCB0aGUgW2RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2NvbmZpZy1kYXRlKSB0byBkaXNwbGF5IGV2ZW50cyBmb3IuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXJhbmdlKVxuICAgICAqL1xuICAgIHJhbmdlID8gOiBzdHJpbmd8RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoaXMgd2lkZ2V0IGlzIHJlYWQtb25seS4gIFRoaXMgaXMgb25seSB2YWxpZCBpZiB0aGUgd2lkZ2V0IGlzIGFuIGlucHV0XG4gICAgICogZmllbGQsIDxzdHJvbmc+b3IgY29udGFpbnMgaW5wdXQgZmllbGRzIGF0IGFueSBkZXB0aDwvc3Ryb25nPi5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXJlbmRpdGlvbilcbiAgICAgKi9cbiAgICByZW5kaXRpb24gPyA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGxcbiAgICAvKipcbiAgICAgKiBQYXRoIHRvIGxvYWQgcmVzb3VyY2UgaW1hZ2VzIGZyb20uIFVzZWQgYnkgdGhlIFtzaG93UmVzb3VyY2VBdmF0YXJzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG93UmVzb3VyY2VBdmF0YXJzKSBjb25maWdcbiAgICAgKiB0byBjcmVhdGUgVVJMcyB1c2luZyB0aGUgcmVzb3VyY2Unc1xuICAgICAqIFtpbWFnZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9TY2hlZHVsZXIvbW9kZWwvUmVzb3VyY2VNb2RlbCNmaWVsZC1pbWFnZSkgb3JcbiAgICAgKiBbaW1hZ2VVcmxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvU2NoZWR1bGVyL21vZGVsL1Jlc291cmNlTW9kZWwjZmllbGQtaW1hZ2VVcmwpIGZpZWxkczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctcmVzb3VyY2VJbWFnZVBhdGgpXG4gICAgICovXG4gICAgcmVzb3VyY2VJbWFnZVBhdGggPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFyaW91cyByZXNwb25zaXZlIHN0YXRlIG9iamVjdHMga2V5ZWQgYnkgdGhlaXIgbmFtZS4gRWFjaCBrZXkgKGV4Y2VwdCBgJyonYCwgc2VlIGJlbG93KSBpblxuICAgICAqIHRoaXMgb2JqZWN0IGlzIGEgc3RhdGUgbmFtZSAoc2VlIFtyZXNwb25zaXZlU3RhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVN0YXRlKSkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlIGlzIHRoZVxuICAgICAqIGFzc29jaWF0ZWQgW1Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI3R5cGVkZWYtUmVzcG9uc2l2ZVN0YXRlKSBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXJlc3BvbnNpdmUpXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZSA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBtYXJrIHRoaXMgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgW3Jlc3BvbnNpdmVUYXJnZXRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvbWl4aW4vUmVzcG9uc2l2ZSNjb25maWctcmVzcG9uc2l2ZVRhcmdldCkgZm9yIGRlc2NlbmRhbnRzIHRoYXQgZG9cbiAgICAgKiBub3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBbcmVzcG9uc2l2ZVRhcmdldF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlVGFyZ2V0KSBvZiB0aGVpciBvd24uXG4gICAgICovXG4gICAgcmVzcG9uc2l2ZVJvb3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBbcmVzcG9uc2l2ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlKSBjb25maWcuIFRoaXMgaXMgYXNzaWduZWQgaW50ZXJuYWxseVxuICAgICAqIGFuZCBzaG91bGQgbm90IGJlIGFzc2lnbmVkIGRpcmVjdGx5LlxuICAgICAqL1xuICAgIHJlc3BvbnNpdmVTdGF0ZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIHdpZGdldCB3aG9zZSBzaXplIGFuZCBvdGhlciBwcm9wZXJ0aWVzIGRyaXZlIHRoaXMgb2JqZWN0J3MgcmVzcG9uc2l2ZSBiZWhhdmlvci4gSWYgdGhpcyBjb25maWcgaXMgbm90XG4gICAgICogc3BlY2lmaWVkLCB0aGUgY2xvc2VzdCBhbmNlc3RvciB0aGF0IHNwZWNpZmllZCBbcmVzcG9uc2l2ZVJvb3Q9dHJ1ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlUm9vdCkgd2lsbCBiZVxuICAgICAqIHVzZWQuIElmIHRoZXJlIGlzIG5vIHN1Y2ggYW5jZXN0b3IsIHRoZW4gdGhlIGluc3RhbmNlIHVzaW5nIHRoaXMgbWl4aW4gaXMgdXNlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctcmVzcG9uc2l2ZVRhcmdldClcbiAgICAgKi9cbiAgICByZXNwb25zaXZlVGFyZ2V0ID8gOiBzdHJpbmd8V2lkZ2V0XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWZvY3VzRWxlbWVudCksIG9yIFtlbGVtZW50XSgjQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWVsZW1lbnQpIGlzIHRhcHBlZCA8ZW0+aWYgdGhlXG4gICAgICogY3VycmVudCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzPC9lbT4uIE91dCBvZiB0aGUgYm94LCBvbmx5IHRoZSBNYXRlcmlhbCB0aGVtZSBzdXBwb3J0cyByaXBwbGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1yaXBwbGUpXG4gICAgICovXG4gICAgcmlwcGxlID8gOiBib29sZWFufHtcbiAgICAgICAgZGVsZWdhdGU/OiBzdHJpbmdcbiAgICAgICAgY29sb3I/OiBzdHJpbmdcbiAgICAgICAgcmFkaXVzPzogbnVtYmVyXG4gICAgICAgIGNsaXA/OiBzdHJpbmdcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgeW91IGFyZSByZW5kZXJpbmcgdGhpcyB3aWRnZXQgdG8gYSBzaGFkb3cgcm9vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgdGhpcyBjb25maWcgdG8gdGhlIHNoYWRvd1Jvb3QuIElmIG5vdCBpbnNpZGUgYSB3ZWIgY29tcG9uZW50LCBzZXQgaXQgdG8gYGRvY3VtZW50LmJvZHlgXG4gICAgICovXG4gICAgcm9vdEVsZW1lbnQgPyA6IFNoYWRvd1Jvb3R8SFRNTEVsZW1lbnRcbiAgICAvKipcbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGB0cnVlYCB0byBtYWtlIHRoZSB3aWRnZXQncyBlbGVtZW50IHVzZSB0aGUgYGRpcmVjdGlvbjpydGxgIHN0eWxlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXNjcm9sbGFibGUpXG4gICAgICovXG4gICAgc2Nyb2xsYWJsZSA/IDogYm9vbGVhbnxTY3JvbGxlckNvbmZpZ3xTY3JvbGxlclxuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hhdCB0byBkbyBpZiBkb2N1bWVudCBpcyBzY3JvbGxlZCB3aGlsZSBXaWRnZXQgaXMgdmlzaWJsZSAob25seSByZWxldmFudCB3aGVuIGZsb2F0aW5nIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqIFZhbGlkIHZhbHVlczogwrRudWxswrQ6IGRvIG5vdGhpbmcsIMK0aGlkZcK0OiBoaWRlIHRoZSB3aWRnZXQgb3IgwrRyZWFsaWduwrQ6IHJlYWxpZ24gdG8gdGhlIHRhcmdldCBpZiBwb3NzaWJsZS5cbiAgICAgKi9cbiAgICBzY3JvbGxBY3Rpb24gPyA6ICdoaWRlJ3wncmVhbGlnbid8bnVsbFxuICAgIC8qKlxuICAgICAqIEEgYnV0dG9uIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHVzZSBmb3IgdGhlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBtb2RlIHNlbGVjdG9yIGJ1dHRvbiBmb3IgdGhpcyBtb2RlLlxuICAgICAqL1xuICAgIHNlbGVjdG9yQnV0dG9uID8gOiBCdXR0b25Db25maWdcbiAgICAvKipcbiAgICAgKiBBIG1lbnUgaXRlbSBjb25maWd1cmF0aW9uIG9iamVjdCB0byB1c2UgZm9yIHRoZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgbW9kZSBzZWxlY3RvciBtZW51IGl0ZW0gZm9yIHRoaXMgbW9kZS5cbiAgICAgKi9cbiAgICBzZWxlY3Rvck1lbnVJdGVtID8gOiBNZW51SXRlbUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSB0aW1lIHJhbmdlIHRvIG1vdmUgYnkgd2hlbiBbbmV4dF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vRGF0ZVJhbmdlT3duZXIjZnVuY3Rpb24tbmV4dCkgb3IgW3ByZXZpb3VzXSgjQ2FsZW5kYXIvd2lkZ2V0L21peGluL0RhdGVSYW5nZU93bmVyI2Z1bmN0aW9uLXByZXZpb3VzKSBpcyBjYWxsZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXNoaWZ0SW5jcmVtZW50KVxuICAgICAqL1xuICAgIHNoaWZ0SW5jcmVtZW50ID8gOiBzdHJpbmd8RHVyYXRpb25Db25maWdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVGb3JtYXQgPyA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZylcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdG8gdXNlIHRvIGNyZWF0ZSBkYXRlIGFuZCB0aW1lIG91dHB1dCBmb3JcbiAgICAgKiBhYmJyZXZpYXRlZCB2aWV3IGRlc2NyaXB0aW9ucy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgVGhlIGRhdGUgdG8gZm9ybWF0LlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBzaG9ydERhdGVUaW1lRm9ybWF0ID8gOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGV2ZW50cyB3aGljaCBoYXZlIGR1cmF0aW9uIGxlc3MgdGhhbiBvciBlcXVhbCB0b1xuICAgICAqIFtzaG9ydEV2ZW50RHVyYXRpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLXNob3J0RXZlbnREdXJhdGlvbikuXG4gICAgICovXG4gICAgc2hvcnRFdmVudENscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGR1cmF0aW9uIGF0IHdoaWNoIGJlbG93IGFuZCBlcXVhbCB0byB0aGlzIHZhbHVlLCBhbiBldmVudCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBnZXRzXG4gICAgICogdGhlIFtzaG9ydEV2ZW50Q2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1zaG9ydEV2ZW50Q2xzKSBhZGRlZCB0byBpdCBzbyB0aGF0IHNtYWxsIGV2ZW50IGJhcnMgY2FuIGhhdmUgc3R5bGUgcmVhcnJhbmdlbWVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXNob3J0RXZlbnREdXJhdGlvbilcbiAgICAgKi9cbiAgICBzaG9ydEV2ZW50RHVyYXRpb24gPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBTaG93cyBhbiBhbGwgZGF5IGhlYWRlciBhYm92ZSB0aGUgbWFpbiBzY2hlZHVsZSBmb3IgQWxsIERheSBldmVudHMuXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgYWxsIGRheSwgb3IgbXVsdGktZGF5IGV2ZW50cyBpbiBhbiBhbGwgZGF5IGhlYWRlciwgYnV0XG4gICAgICogdG8gaGF2ZSB0aGVtIHNob3dpbmcgd3JhcHBpbmcgdGhyb3VnaCB0aGUgZGF5IGNlbGxzLlxuICAgICAqL1xuICAgIHNob3dBbGxEYXlIZWFkZXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zaG93QW5pbWF0aW9uKVxuICAgICAqL1xuICAgIHNob3dBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogPHN0cm9uZz5Ob3QgYXBwbGljYWJsZSBpbiBhIGBEYXlWaWV3YDwvc3Ryb25nPlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zaG93QnVsbGV0KVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFyIFRoaXMgaXMgYGZhbHNlYCBieSBkZWZhdWx0LiBTZXQgdGhpcyB0byBgdHJ1ZWAgaW4gbW9kZXMgd2hlcmUgYSBzb2xpZCBldmVudCBiYXIgc2hvdWxkIHNob3cgYSBidWxsZXQgaWNvblxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gbm9CYXIgVGhpcyBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC4gRXZlbnRzIHdpdGggbm8gYmFja2dyb3VuZCBjb2xvdXIsIHVzZSB0aGlzIHRvIHNob3cgdGhlIGV2ZW50J3MgZGVmaW5lZCBgZXZlbnRDb2xvcmBcbiAgICAgKi9cbiAgICBzaG93QnVsbGV0ID8gOiBib29sZWFufHtiYXI/OiBib29sZWFuLCBub0Jhcj86IGJvb2xlYW59XG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCA8Yj50b2RheSdzPC9iPiBkYXRlIHNob3dzIGEgY3VycmVudCB0aW1lIGxpbmUgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgdGltZS4gVGhpc1xuICAgICAqIGxpbmUgaXMgY29uZmluZWQgdG8gdGhlIGRheSBjZWxsIGZvciA8Yj50b2RheTwvYj4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXNob3dDdXJyZW50VGltZSlcbiAgICAgKi9cbiAgICBzaG93Q3VycmVudFRpbWUgPyA6IGJvb2xlYW58e1xuICAgICAgICBmdWxsV2lkdGg/OiBib29sZWFuXG4gICAgICAgIHNob3dUaW1lPzogYm9vbGVhblxuICAgICAgICBvblRvcD86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBzaG93IGF2YXRhcnMgb2YgdGhlIGFzc2lnbmVkIHJlc291cmNlcyAoY2FsZW5kYXJzKSBhdCB0aGVcbiAgICAgKiBzdGFydCBvZiB0aGUgZXZlbnQgYmFyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zaG93UmVzb3VyY2VBdmF0YXJzKVxuICAgICAqL1xuICAgIHNob3dSZXNvdXJjZUF2YXRhcnMgPyA6IGJvb2xlYW58c3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGBmYWxzZWAgdG8gaGlkZSB0aGUgc3RhcnQgdGltZSBub3JtYWxseSBzaG93biBhdCB0aGUgdG9wIG9mIHRoZSBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXNob3dUaW1lKVxuICAgICAqL1xuICAgIHNob3dUaW1lID8gOiBib29sZWFufFJlY29yZDwoJ3N0YXJ0VGltZSd8J2VuZFRpbWUnfCdkdXJhdGlvbicpLCBib29sZWFufHN0cmluZ3xGdW5jdGlvbj5cbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBub3Qgc2hvdyB0aGUgdG9vbHRpcCB3aGVuIHRoaXMgd2lkZ2V0IGlzIFtkaXNhYmxlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZGlzYWJsZWQpXG4gICAgICovXG4gICAgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgbW9zdCBncmFudWxhciB0aW1lIHRpY2sgbGV2ZWwgaW4gdGhlIERheVZpZXcncyB0aW1lIGF4aXMgaXMgZml2ZSBtaW51dGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1zaXhNaW51dGVUaWNrcylcbiAgICAgKi9cbiAgICBzaXhNaW51dGVUaWNrcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFmZmVjdHMgZHJhZyBkcm9wIGFuZCBtb3Zpbmcgb2YgZXZlbnRzIHdpdGggcmVnYXJkIHRvIHRoZSBbaW5jcmVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LWluY3JlbWVudClcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZSlcbiAgICAgKi9cbiAgICBzbmFwUmVsYXRpdmVUb0V2ZW50U3RhcnREYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBzdGFjayBtdWx0aS1kYXkgZXZlbnRzIHdpdGhpbiBlYWNoIGNlbGwgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIHN0YXJ0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXN0YWNrTXVsdGlEYXlFdmVudHMpXG4gICAgICovXG4gICAgc3RhY2tNdWx0aURheUV2ZW50cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRoZSBzdGFydCBkYXRlIChUaW1lIGNvbXBvbmVudCBpcyB6ZXJvZWQpIG9mIHRoaXMgdmlldy5cbiAgICAgKi9cbiAgICBzdGFydERhdGUgPyA6IERhdGVcbiAgICAvKipcbiAgICAgKiBUaGlzIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctc3RhdGVmdWwpXG4gICAgICovXG4gICAgc3RhdGVmdWwgPyA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50cyB0aGF0LCB3aGVuIGZpcmVkIGJ5IHRoaXMgY29tcG9uZW50LCBzaG91bGQgdHJpZ2dlciBpdCB0byBzYXZlIGl0cyBzdGF0ZSBieSBjYWxsaW5nXG4gICAgICogW3NhdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2Z1bmN0aW9uLXNhdmVTdGF0ZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXN0YXRlZnVsRXZlbnRzKVxuICAgICAqL1xuICAgIHN0YXRlZnVsRXZlbnRzID8gOiBvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGlzIG9iamVjdCdzIHN0YXRlIGluIHRoZSBbc3RhdGVQcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZVByb3ZpZGVyKS4gSWYgdGhpcyBjb25maWcgaXNcbiAgICAgKiBub3QgYXNzaWduZWQsIGFuZCBbc3RhdGVmdWxdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVmdWwpIGlzIG5vdCBzZXQgdG8gYGZhbHNlYCwgdGhlIFtpZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaWQpXG4gICAgICogKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSB3aWxsIGJlIHVzZWQgYXMgdGhlIGBzdGF0ZUlkYC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctc3RhdGVJZClcbiAgICAgKi9cbiAgICBzdGF0ZUlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgYFN0YXRlUHJvdmlkZXJgIHRvIHVzZSB0byBzYXZlIGFuZCByZXN0b3JlIHRoaXMgb2JqZWN0J3MgW3N0YXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvbWl4aW4vU3RhdGUjcHJvcGVydHktc3RhdGUpLiBCeSBkZWZhdWx0LCBgc3RhdGVgXG4gICAgICogd2lsbCBiZSBzYXZlZCB1c2luZyB0aGUgW2RlZmF1bHQgc3RhdGUgcHJvdmlkZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9zdGF0ZS9TdGF0ZVByb3ZpZGVyI3Byb3BlcnR5LWluc3RhbmNlLXN0YXRpYykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXN0YXRlUHJvdmlkZXIpXG4gICAgICovXG4gICAgc3RhdGVQcm92aWRlciA/IDogU3RhdGVQcm92aWRlclxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1hdGNoIGZpZWxkcyBieSB0aGVpciBgbmFtZWAgcHJvcGVydHkgb25seSB3aGVuIGFzc2lnbmluZyBhIFtyZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1yZWNvcmQpLFxuICAgICAqIHdpdGhvdXQgZmFsbGluZyBiYWNrIHRvIGByZWZgLlxuICAgICAqL1xuICAgIHN0cmljdFJlY29yZE1hcHBpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKS4gSWYgeW91IHdhbnQgdG8gcGFzcyBhbiBhcnJheSwgeW91IGNhbiB1c2VcbiAgICAgKiB0aGUgdG9vbGJhcidzIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjY29uZmlnLWl0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctc3RyaXBzKVxuICAgICAqL1xuICAgIHN0cmlwcyA/IDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBjb252ZXJzZSBvZiBbc3luY1ZpZXdEYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI3Byb3BlcnR5LXN5bmNWaWV3RGF0ZSlcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctc3luY0NhbGVuZGFyRGF0ZSlcbiAgICAgKi9cbiAgICBzeW5jQ2FsZW5kYXJEYXRlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIGNvbnZlcnNlIG9mIFtzeW5jQ2FsZW5kYXJEYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI3Byb3BlcnR5LXN5bmNDYWxlbmRhckRhdGUpXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXN5bmNWaWV3RGF0ZSlcbiAgICAgKi9cbiAgICBzeW5jVmlld0RhdGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1RhYikgY3JlYXRlZCBmb3IgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBwbGFjZWQgaW4gYVxuICAgICAqIFtUYWJQYW5lbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgY29udGFpbmVyIGlzIHVzZWQgYXMgYSB0YWIgaW4gYSBUYWJQYW5lbCwgdGhlc2UgaXRlbXMgYXJlIGFkZGVkIHRvIHRoZVxuICAgICAqIFtUYWJCYXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10YWJCYXJJdGVtcylcbiAgICAgKi9cbiAgICB0YWJCYXJJdGVtcyA/IDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W11cbiAgICAvKipcbiAgICAgKiBUaGUgdGFnIG5hbWUgb2YgdGhpcyBXaWRnZXQncyByb290IGVsZW1lbnRcbiAgICAgKi9cbiAgICB0YWcgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgQ29uZmlnIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBbVG9vbGJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgYSB0b29sYmFyIGRvY2tlZCB0byB0aGUgdG9wIG9mIHRoZSBwYW5lbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUgaGVhZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10YmFyKVxuICAgICAqL1xuICAgIHRiYXIgPyA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiwgb3IgbmFtZSBvZiBhIGZ1bmN0aW9uIHdoaWNoIHlpZWxkcyBhIFtEb21Db25maWddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRG9tSGVscGVyI3R5cGVkZWYtRG9tQ29uZmlnKSBvYmplY3QgdG8gdXNlIGFzIGEgdGljayBiYWNrZ3JvdW5kIGVsZW1lbnRcbiAgICAgKiBmb3IgdGhlIHRpY2sgY29udGV4dCBwYXNzZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXRpY2tSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGlja0NvbnRleHQgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNvbnRleHQgZm9yIHRoZSB0aWNrIGJlaW5nIHJlbmRlcmVkLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGlja0NvbnRleHQuc3RhcnRUaW1lIFRoZSBzdGFydCB0aW1lIG9mIHRoZSB0aWNrLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gdGlja0NvbnRleHQuZW5kVGltZSBUaGUgZW5kIHRpbWUgb2YgdGhlIHRpY2suXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbFtdfSB0aWNrQ29udGV4dC5ldmVudHMgVGhlIGV2ZW50cyB0aGF0IHZpc3VhbGx5IGludGVyc2VjdCB3aXRoIHRoZSB0aWNrLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC50aWNrSW5kZXggVGhlIHplcm8tYmFzZWQgb3ZlcmFsbCB0aWNrIGluZGV4LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB0aWNrQ29udGV4dC5zdWJ0aWNrSW5kZXggVGhlIHplcm8tYmFzZWQgc3VidGljayBpbmRleCAqd2l0aGluKiB0aGUgaG91ci5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGlja0NvbnRleHQuc3VidGlja0NvdW50IFRoZSB0b3RhbCBudW1iZXIgb2YgdmlzaWJsZSBzdWJ0aWNrcyBpbiBhbiBob3VyLlxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLlJlc291cmNlTW9kZWx9IHRpY2tDb250ZXh0LnJlc291cmNlUmVjb3JkICpJZiogdGhpcyB2aWV3IGlzIGEgcmVzb3VyY2UgdmlldywgdGhlIHJlc291cmNlIHJlY29yZC5cbiAgICAgKiBAcmV0dXJucyB7RG9tQ29uZmlnfSBUaGUgRE9NIGNvbmZpZyBvYmplY3QgdG8gdXNlIGZvciB0aGUgdGljay5cbiAgICAgKi9cbiAgICB0aWNrUmVuZGVyZXIgPyA6ICgodGlja0NvbnRleHQ6IHsgc3RhcnRUaW1lOiBEYXRlLCBlbmRUaW1lOiBEYXRlLCBldmVudHM6IEV2ZW50TW9kZWxbXSwgdGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tJbmRleDogbnVtYmVyLCBzdWJ0aWNrQ291bnQ6IG51bWJlciwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwgfSkgPT4gRG9tQ29uZmlnKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtEYXRlSGVscGVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcvZnVuY3Rpb24gdXNlZCB0byBmb3JtYXQgdGhlIHRpbWUgZGlzcGxheWVkIGluIHRoZVxuICAgICAqIHRpbWUgYXhpcyBhdCB0aGUgbGVmdCBzaWRlIG9mIHRoZSB2aWV3LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCBkYXRlLlxuICAgICAqL1xuICAgIHRpbWVBeGlzVGltZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIEEgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlcikgZm9ybWF0IHN0cmluZy9mdW5jdGlvbiB1c2VkIHRvIGZvcm1hdCB0aGUgdGltZSBkaXNwbGF5ZWQgaW4gZXZlbnRzXG4gICAgICogQHBhcmFtIHtEYXRlfSBkYXRlIFRoZSBkYXRlIHRvIGZvcm1hdC5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGRhdGUuXG4gICAgICovXG4gICAgdGltZUZvcm1hdCA/IDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKVxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHJvdW5kaW5nIHRvIGFwcGx5IHdoZW4gY2FsY3VsYXRpbmcgYSBkYXRlIGZyb20gYSBwb2ludGVyIHBvc2l0aW9uIGluIGEgZGF5XG4gICAgICogY29sdW1uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10aW1lU25hcFR5cGUpXG4gICAgICovXG4gICAgdGltZVNuYXBUeXBlID8gOiAncm91bmQnfCdjZWlsJ3wnZmxvb3InfG51bGxcbiAgICAvKipcbiAgICAgKiBBIHRpdGxlIHRvIGRpc3BsYXkgaW4gdGhlIGhlYWRlciBvciBvd25pbmcgVGFiUGFuZWwuIENhdXNlcyBjcmVhdGlvbiBhbmQgZG9ja2luZyBvZiBhIGhlYWRlclxuICAgICAqIHRvIHRoZSB0b3AgaWYgbm8gaGVhZGVyIGlzIGNvbmZpZ3VyZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXRpdGxlKVxuICAgICAqL1xuICAgIHRpdGxlID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1Rvb2wpIHRvIGFkZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBgdGl0bGVgIGluIHRoZSBQYW5lbCBoZWFkZXIuIEVhY2hcbiAgICAgKiBwcm9wZXJ0eSBuYW1lIGlzIHRoZSByZWZlcmVuY2UgYnkgd2hpY2ggYW4gaW5zdGFudGlhdGVkIHRvb2wgbWF5IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBsaXZlXG4gICAgICogYFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy10b29scylcbiAgICAgKi9cbiAgICB0b29scyA/IDogUmVjb3JkPHN0cmluZywgVG9vbENvbmZpZz58bnVsbFxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgZm9yIHRoZSB3aWRnZXQsIGVpdGhlciBhcyBhIHN0cmluZyBvciBhcyBhIFRvb2x0aXAgY29uZmlnIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctdG9vbHRpcClcbiAgICAgKi9cbiAgICB0b29sdGlwID8gOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGFiYmluZyB3aXRoaW4gYSBQYW5lbCBpcyBub3QgY29udGFpbmVkLCBpZSB5b3UgY2FuIFRBQiBvdXQgb2YgdGhlIFBhbmVsXG4gICAgICogZm9yd2FyZHMgb3IgYmFja3dhcmRzLlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIGB0cnVlYCB0byBkaXNhbGxvdyB0YWJiaW5nIG91dCBvZiB0aGUgUGFuZWwsIGFuZCBtYWtlIHRhYmJpbmcgY2lyY3VsYXIgd2l0aGluIHRoaXMgUGFuZWwuXG4gICAgICovXG4gICAgdHJhcEZvY3VzID8gOiBib29sZWFuXG4gICAgdHlwZSA/IDogJ2RheXZpZXcnfCdkYXknXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzcyBuYW1lIHN1ZmZpeGVzIHRvIGFwcGx5IHRvIHRoZSBlbGVtZW50cyByZW5kZXJlZCBieSB0aGlzIHdpZGdldC4gVGhpcyBtYXkgYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBhbiBhcnJheSBvZiBzdHJpbmdzLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXMgd2l0aCB0cnV0aHlcbiAgICAgKiB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIEVpdGhlciB0aGUgc3RhcnQgaG91ciBvZiB0aGUgZGF5LCBvciBhICoyNCBob3VyKsKgYEhIOk1NYCBzdHJpbmcgZGVub3RpbmcgdGhlIGluaXRpYWxseSB2aXNpYmxlIHN0YXJ0XG4gICAgICogdGltZSBvZiB0aGUgZGF5LiBEZWZhdWx0cyB0byA3YW0uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXZpc2libGVTdGFydFRpbWUpXG4gICAgICovXG4gICAgdmlzaWJsZVN0YXJ0VGltZSA/IDogc3RyaW5nfG51bWJlcnx7XG4gICAgICAgIHRpbWU/OiBzdHJpbmd8bnVtYmVyXG4gICAgICAgIGJsb2NrPzogJ3N0YXJ0J3wnZW5kJ3wnY2VudGVyJ3wnbmVhcmVzdCdcbiAgICAgICAgZWRnZU9mZnNldD86IG51bWJlclxuICAgICAgICBhbmltYXRlPzogb2JqZWN0fGJvb2xlYW58bnVtYmVyXG4gICAgICAgIGR1cmF0aW9uPzogbnVtYmVyXG4gICAgICAgIGVhc2luZz86IHN0cmluZ1xuICAgIH18bnVsbFxuICAgIC8qKlxuICAgICAqIFRoZSB3ZWVrIHN0YXJ0IGRheSwgMCBtZWFuaW5nIFN1bmRheSwgNiBtZWFuaW5nIFNhdHVyZGF5LlxuICAgICAqIERlZmF1bHRzIHRvIFt3ZWVrU3RhcnREYXldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNwcm9wZXJ0eS13ZWVrU3RhcnREYXktc3RhdGljKS5cbiAgICAgKi9cbiAgICB3ZWVrU3RhcnREYXkgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKS5cbiAgICAgKiBIaWdoZXIgd2VpZ2h0cyBnbyBmdXJ0aGVyIGRvd24uXG4gICAgICovXG4gICAgd2VpZ2h0ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyB3aWR0aCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUud2lkdGhgLiBFaXRoZXIgc3BlY2lmeSBhIHZhbGlkIHdpZHRoIHN0cmluZyBvciBhIG51bWJlciwgd2hpY2hcbiAgICAgKiB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIHdpZHRoLCBidXQgaW4gc29tZSBjYXNlc1xuICAgICAqIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgd2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeCBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWcteClcbiAgICAgKi9cbiAgICB4ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgeSBwb3NpdGlvbiBmb3IgdGhlIHdpZGdldC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBZb3UgY2FuIHpvb20gaW4gYW5kIG91dCBvbiB0aGUgdGltZSBheGlzIHVzaW5nIENUUkwta2V5ICsgbW91c2Ugd2hlZWxcbiAgICAgKiBvbiBtb3VzZS1iYXNlZCBkZXZpY2VzIG9yIHBpbmNoLXpvb20gb24gdG91Y2ggZGV2aWNlcy5cbiAgICAgKiBTZWUgYWxzbyB0aGUgW2hvdXJIZWlnaHRCcmVha3BvaW50c10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNjb25maWctaG91ckhlaWdodEJyZWFrcG9pbnRzKSBjb25maWcgb3B0aW9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy16b29tT25Nb3VzZVdoZWVsKVxuICAgICAqL1xuICAgIHpvb21Pbk1vdXNlV2hlZWwgPyA6IGJvb2xlYW58bnVtYmVyXG5cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3IgOiAnYnJ5bnR1bS1kYXktdmlldycsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtRGF5Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IERheVZpZXc7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdEYXlWaWV3JztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVBdXRvQ3JlYXRlJyxcbiAgICAgICAgJ29uQmVmb3JlQ2hhbmdlRGF0ZScsXG4gICAgICAgICdvbkJlZm9yZURlc3Ryb3knLFxuICAgICAgICAnb25CZWZvcmVIaWRlJyxcbiAgICAgICAgJ29uQmVmb3JlUmVzcG9uc2l2ZVN0YXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uQmVmb3JlU2V0UmVjb3JkJyxcbiAgICAgICAgJ29uQmVmb3JlU2hvdycsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlQXBwbHknLFxuICAgICAgICAnb25CZWZvcmVTdGF0ZVNhdmUnLFxuICAgICAgICAnb25DYXRjaEFsbCcsXG4gICAgICAgICdvbkNlbGxNYXBQb3B1bGF0ZWQnLFxuICAgICAgICAnb25Db2xsYXBzZScsXG4gICAgICAgICdvbkRheUNlbGxQb3B1bGF0ZWQnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRGlydHlTdGF0ZUNoYW5nZScsXG4gICAgICAgICdvbkVsZW1lbnRDcmVhdGVkJyxcbiAgICAgICAgJ29uRXZlbnRBdXRvQ3JlYXRlZCcsXG4gICAgICAgICdvbkV2ZW50UHJvcGFnYXRlJyxcbiAgICAgICAgJ29uRXhwYW5kJyxcbiAgICAgICAgJ29uRm9jdXNJbicsXG4gICAgICAgICdvbkZvY3VzT3V0JyxcbiAgICAgICAgJ29uSGlkZScsXG4gICAgICAgICdvbkxheW91dFVwZGF0ZScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmFuZ2VDaGFuZ2UnLFxuICAgICAgICAnb25SZWFkT25seScsXG4gICAgICAgICdvblJlY29tcG9zZScsXG4gICAgICAgICdvblJlZnJlc2gnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25SZXNwb25zaXZlU3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25TaGlmdEluY3JlbWVudENoYW5nZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25UaWNrQ2hhbmdlJyxcbiAgICAgICAgJ29uVGltZUF4aXNDbGljaycsXG4gICAgICAgICdvblRvb2xDbGljaydcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUZlYXR1cmVOYW1lczogc3RyaW5nW10gPSBbXG5cbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bUNvbmZpZ3M6IHN0cmluZ1tdID0gQnJ5bnR1bURheVZpZXdDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWN0aW9uQnV0dG9ucycsXG4gICAgICAgICdhY3RpdmF0aW9uS2V5JyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbGxEYXlFdmVudHMnLFxuICAgICAgICAnYWxsb3dEcmFnQ3JlYXRlJyxcbiAgICAgICAgJ2FsbG93RHJhZ01vdmUnLFxuICAgICAgICAnYWxsb3dEcmFnUmVzaXplJyxcbiAgICAgICAgJ2FsbG93Wm9vbVVuZGVyZmxvdycsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYW5pbWF0ZVRpbWVTaGlmdCcsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9DcmVhdGUnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzZWQnLFxuICAgICAgICAnY29sbGFwc2libGUnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbHVtbkhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2NvbXBhY3RIZWFkZXInLFxuICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgJ2NvbnN0cmFpblRvJyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2NvcmVIb3VycycsXG4gICAgICAgICdjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyJyxcbiAgICAgICAgJ2Rhc2hlZFN1YnRpY2tzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZGF0ZUZpbHRlcicsXG4gICAgICAgICdkYXRlRm9ybWF0JyxcbiAgICAgICAgJ2RhdGVTZXBhcmF0b3InLFxuICAgICAgICAnZGF5Q2VsbFJlbmRlcmVyJyxcbiAgICAgICAgJ2RheUVuZFRpbWUnLFxuICAgICAgICAnZGF5SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkYXlTdGFydFNoaWZ0JyxcbiAgICAgICAgJ2RheVN0YXJ0VGltZScsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZWZhdWx0U2Nyb2xsT3B0aW9ucycsXG4gICAgICAgICdkZXNjcmlwdGlvbkZvcm1hdCcsXG4gICAgICAgICdkZXNjcmlwdGlvblJlbmRlcmVyJyxcbiAgICAgICAgJ2RldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMnLFxuICAgICAgICAnZGlzYWJsZWQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZHJhZ1VuaXQnLFxuICAgICAgICAnZHJhd2VyJyxcbiAgICAgICAgJ2VsZW1lbnRBdHRyaWJ1dGVzJyxcbiAgICAgICAgJ2VuZERhdGUnLFxuICAgICAgICAnZXZlbnRGaWx0ZXInLFxuICAgICAgICAnZXZlbnRIZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdldmVudExheW91dCcsXG4gICAgICAgICdldmVudFJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50U29ydGVyJyxcbiAgICAgICAgJ2V2ZW50U3BhY2luZycsXG4gICAgICAgICdleHRlbmRBbGxEYXlFbmREYXknLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbHRlckV2ZW50UmVzb3VyY2VzJyxcbiAgICAgICAgJ2ZpdEhvdXJzJyxcbiAgICAgICAgJ2ZpeGVkRHVyYXRpb24nLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdmb290ZXInLFxuICAgICAgICAnZ2V0UHJpbWFyeVJlc291cmNlJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZUVtcHR5RGF5cycsXG4gICAgICAgICdoaWRlTm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdob3VySGVpZ2h0JyxcbiAgICAgICAgJ2hvdXJIZWlnaHRCcmVha3BvaW50cycsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2luY3JlbWVudCcsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2ludGVyRGF5RHJhZycsXG4gICAgICAgICdpbnRlckRheVJlc2l6ZScsXG4gICAgICAgICdpdGVtQ2xzJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xheW91dCcsXG4gICAgICAgICdsYXlvdXRTdHlsZScsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXJnaW4nLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbWF4RGF0ZScsXG4gICAgICAgICdtYXhIZWlnaHQnLFxuICAgICAgICAnbWF4aW1pemVPbk1vYmlsZScsXG4gICAgICAgICdtYXhXaWR0aCcsXG4gICAgICAgICdtaW5EYXRlJyxcbiAgICAgICAgJ21pbkRheVdpZHRoJyxcbiAgICAgICAgJ21pbkV2ZW50SGVpZ2h0JyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5Ib3VySGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbmFtZWRJdGVtcycsXG4gICAgICAgICdub01hdGNoaW5nRGF0ZXMnLFxuICAgICAgICAnbm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnb3ZlcmZsb3dQb3B1cCcsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwYXN0RXZlbnRDbHMnLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmFuZ2UnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZW5kaXRpb24nLFxuICAgICAgICAncmVzb3VyY2VJbWFnZVBhdGgnLFxuICAgICAgICAncmVzcG9uc2l2ZScsXG4gICAgICAgICdyZXNwb25zaXZlUm9vdCcsXG4gICAgICAgICdyZXNwb25zaXZlU3RhdGUnLFxuICAgICAgICAncmVzcG9uc2l2ZVRhcmdldCcsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3NlbGVjdG9yQnV0dG9uJyxcbiAgICAgICAgJ3NlbGVjdG9yTWVudUl0ZW0nLFxuICAgICAgICAnc2hpZnRJbmNyZW1lbnQnLFxuICAgICAgICAnc2hvcnREYXRlRm9ybWF0JyxcbiAgICAgICAgJ3Nob3J0RGF0ZVRpbWVGb3JtYXQnLFxuICAgICAgICAnc2hvcnRFdmVudENscycsXG4gICAgICAgICdzaG9ydEV2ZW50RHVyYXRpb24nLFxuICAgICAgICAnc2hvd0FsbERheUhlYWRlcicsXG4gICAgICAgICdzaG93QW5pbWF0aW9uJyxcbiAgICAgICAgJ3Nob3dCdWxsZXQnLFxuICAgICAgICAnc2hvd0N1cnJlbnRUaW1lJyxcbiAgICAgICAgJ3Nob3dSZXNvdXJjZUF2YXRhcnMnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhcnREYXRlJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpY2tSZW5kZXJlcicsXG4gICAgICAgICd0aW1lQXhpc1RpbWVGb3JtYXQnLFxuICAgICAgICAndGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lU25hcFR5cGUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0cmFwRm9jdXMnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXNpYmxlU3RhcnRUaW1lJyxcbiAgICAgICAgJ3dlZWtTdGFydERheScsXG4gICAgICAgICd3ZWlnaHQnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5JyxcbiAgICAgICAgJ3pvb21Pbk1vdXNlV2hlZWwnXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWN0aW9uQnV0dG9ucycsXG4gICAgICAgICdhY3RpdmF0aW9uS2V5JyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsbERheUV2ZW50cycsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdiYmFyJyxcbiAgICAgICAgJ2JvZHlDbHMnLFxuICAgICAgICAnYnViYmxlRXZlbnRzJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbkhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdjdXJyZW50VGltZUluZGljYXRvclJlbmRlcmVyJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXlDZWxsUmVuZGVyZXInLFxuICAgICAgICAnZGF5SGVhZGVyUmVuZGVyZXInLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkYXlTdGFydFNoaWZ0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGVmYXVsdEZvY3VzJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uUmVuZGVyZXInLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmF3ZXInLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW5kRGF0ZScsXG4gICAgICAgICdldmVudEZpbHRlcicsXG4gICAgICAgICdldmVudEhlYWRlclJlbmRlcmVyJyxcbiAgICAgICAgJ2V2ZW50TGF5b3V0JyxcbiAgICAgICAgJ2V2ZW50UmVuZGVyZXInLFxuICAgICAgICAnZXZlbnRTb3J0ZXInLFxuICAgICAgICAnZXZlbnRTcGFjaW5nJyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2Zvb3RlcicsXG4gICAgICAgICdnZXRQcmltYXJ5UmVzb3VyY2UnLFxuICAgICAgICAnaGVhZGVyJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdpY29uJyxcbiAgICAgICAgJ2lnbm9yZVBhcmVudFJlYWRPbmx5JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnbGF6eUl0ZW1zJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFza0RlZmF1bHRzJyxcbiAgICAgICAgJ21hc2tlZCcsXG4gICAgICAgICdtYXhBbGxEYXlIZWlnaHQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ292ZXJmbG93UG9wdXAnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyZXNvdXJjZUltYWdlUGF0aCcsXG4gICAgICAgICdyZXNwb25zaXZlJyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVSb290JyxcbiAgICAgICAgJ3Jlc3BvbnNpdmVTdGF0ZScsXG4gICAgICAgICdyZXNwb25zaXZlVGFyZ2V0JyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2VsZWN0b3JCdXR0b24nLFxuICAgICAgICAnc2VsZWN0b3JNZW51SXRlbScsXG4gICAgICAgICdzaG9ydEV2ZW50Q2xzJyxcbiAgICAgICAgJ3Nob3J0RXZlbnREdXJhdGlvbicsXG4gICAgICAgICdzaG93QWxsRGF5SGVhZGVyJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0J1bGxldCcsXG4gICAgICAgICdzaG93UmVzb3VyY2VBdmF0YXJzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3N0YXJ0RGF0ZScsXG4gICAgICAgICdzdGF0ZWZ1bCcsXG4gICAgICAgICdzdGF0ZWZ1bEV2ZW50cycsXG4gICAgICAgICdzdGF0ZUlkJyxcbiAgICAgICAgJ3N0YXRlUHJvdmlkZXInLFxuICAgICAgICAnc3RyaXBzJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWJCYXJJdGVtcycsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGJhcicsXG4gICAgICAgICd0ZXh0QWxpZ24nLFxuICAgICAgICAndGlja1JlbmRlcmVyJyxcbiAgICAgICAgJ3RpbWVBeGlzVGltZUZvcm1hdCcsXG4gICAgICAgICd0aW1lRm9ybWF0JyxcbiAgICAgICAgJ3RyYXBGb2N1cycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3Zpc2libGVTdGFydFRpbWUnLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd6b29tT25Nb3VzZVdoZWVsJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtUHJvcHM6IHN0cmluZ1tdID0gQnJ5bnR1bURheVZpZXdDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWxpZ25TZWxmJyxcbiAgICAgICAgJ2FsbG93RHJhZ0NyZWF0ZScsXG4gICAgICAgICdhbGxvd0RyYWdNb3ZlJyxcbiAgICAgICAgJ2FsbG93RHJhZ1Jlc2l6ZScsXG4gICAgICAgICdhbGxvd1pvb21VbmRlcmZsb3cnLFxuICAgICAgICAnYW5jaG9yU2l6ZScsXG4gICAgICAgICdhbmltYXRlVGltZVNoaWZ0JyxcbiAgICAgICAgJ2FwcGVuZFRvJyxcbiAgICAgICAgJ2F1dG9DcmVhdGUnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb21wYWN0SGVhZGVyJyxcbiAgICAgICAgJ2NvcmVIb3VycycsXG4gICAgICAgICdkYXNoZWRTdWJ0aWNrcycsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZGF0ZUZpbHRlcicsXG4gICAgICAgICdkYXRlRm9ybWF0JyxcbiAgICAgICAgJ2RhdGVTZXBhcmF0b3InLFxuICAgICAgICAnZGF5Q2VsbENscycsXG4gICAgICAgICdkYXlFbmRUaW1lJyxcbiAgICAgICAgJ2RheVN0YXJ0VGltZScsXG4gICAgICAgICdkZWZhdWx0U2Nyb2xsT3B0aW9ucycsXG4gICAgICAgICdkZXNjcmlwdGlvbkZvcm1hdCcsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkcmFnVW5pdCcsXG4gICAgICAgICdleHRlbmRBbGxEYXlFbmREYXknLFxuICAgICAgICAnZXh0cmFEYXRhJyxcbiAgICAgICAgJ2ZpbHRlckV2ZW50UmVzb3VyY2VzJyxcbiAgICAgICAgJ2ZpcnN0VmlzaWJsZUNlbGwnLFxuICAgICAgICAnZmlyc3RWaXNpYmxlRGF0ZScsXG4gICAgICAgICdmaXRIb3VycycsXG4gICAgICAgICdmaXhlZER1cmF0aW9uJyxcbiAgICAgICAgJ2ZsZXgnLFxuICAgICAgICAnZm9jdXNWaXNpYmxlJyxcbiAgICAgICAgJ2hhc0NoYW5nZXMnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdoaWRlRW1wdHlEYXlzJyxcbiAgICAgICAgJ2hpZGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdob3Jpem9udGFsU2Nyb2xsZXInLFxuICAgICAgICAnaG91ckhlaWdodCcsXG4gICAgICAgICdob3VySGVpZ2h0QnJlYWtwb2ludHMnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5jcmVtZW50JyxcbiAgICAgICAgJ2lucHV0RmllbGRBbGlnbicsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAnaW50ZXJEYXlEcmFnJyxcbiAgICAgICAgJ2ludGVyRGF5UmVzaXplJyxcbiAgICAgICAgJ2lzU2V0dGluZ1ZhbHVlcycsXG4gICAgICAgICdpc1ZhbGlkJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2tleU1hcCcsXG4gICAgICAgICdsYWJlbFBvc2l0aW9uJyxcbiAgICAgICAgJ2xhc3RWaXNpYmxlQ2VsbCcsXG4gICAgICAgICdsYXN0VmlzaWJsZURhdGUnLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXhEYXRlJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkRhdGUnLFxuICAgICAgICAnbWluRGF5V2lkdGgnLFxuICAgICAgICAnbWluRXZlbnRIZWlnaHQnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbkhvdXJIZWlnaHQnLFxuICAgICAgICAnbWluV2lkdGgnLFxuICAgICAgICAnbm9NYXRjaGluZ0RhdGVzJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ3BhcmVudCcsXG4gICAgICAgICdwYXN0RXZlbnRDbHMnLFxuICAgICAgICAncmFuZ2UnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzaGlmdEluY3JlbWVudCcsXG4gICAgICAgICdzaG9ydERhdGVGb3JtYXQnLFxuICAgICAgICAnc2hvcnREYXRlVGltZUZvcm1hdCcsXG4gICAgICAgICdzaG93Q3VycmVudFRpbWUnLFxuICAgICAgICAnc2hvd1RpbWUnLFxuICAgICAgICAnc2l4TWludXRlVGlja3MnLFxuICAgICAgICAnc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZScsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YWNrTXVsdGlEYXlFdmVudHMnLFxuICAgICAgICAnc3RhdGUnLFxuICAgICAgICAnc3RyaWN0UmVjb3JkTWFwcGluZycsXG4gICAgICAgICdzeW5jQ2FsZW5kYXJEYXRlJyxcbiAgICAgICAgJ3N5bmNWaWV3RGF0ZScsXG4gICAgICAgICd0aW1lU25hcFR5cGUnLFxuICAgICAgICAndGl0bGUnLFxuICAgICAgICAndG9vbHMnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd2YWx1ZXMnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IERheVZpZXc7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWN0aW9uQnV0dG9ucyAgICAgICAgICAgICAgICAhIDogQWN0aW9uQnV0dG9uc0NvbmZpZ1tdfFJlY29yZDxzdHJpbmcsIEFjdGlvbkJ1dHRvbnNDb25maWc+O1xuICAgIEBJbnB1dCgpIGFjdGl2YXRpb25LZXkgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxpZ24gICAgICAgICAgICAgICAgICAgICAgICAhIDogQWxpZ25TcGVjfHN0cmluZztcbiAgICBASW5wdXQoKSBhbGxEYXlFdmVudHMgICAgICAgICAgICAgICAgICEgOiBDYWxlbmRhclJvd3xDYWxlbmRhclJvd0NvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIGFuY2hvciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYXJpYURlc2NyaXB0aW9uICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBiYmFyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSBib2R5Q2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGJ1YmJsZUV2ZW50cyAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjZW50ZXJlZCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNpYmxlICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58UGFuZWxDb2xsYXBzZXJDb25maWd8UGFuZWxDb2xsYXBzZXJPdmVybGF5Q29uZmlnO1xuICAgIEBJbnB1dCgpIGNvbG9yICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2x1bW5IZWFkZXJSZW5kZXJlciAgICAgICAgICEgOiAoKGNlbGxEYXRhOiBEYXlDZWxsV2l0aEV2ZW50cykgPT4gc3RyaW5nfG9iamVjdCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY3VycmVudFRpbWVJbmRpY2F0b3JSZW5kZXJlciAhIDogKCgpID0+IERvbUNvbmZpZyl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGFGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkYXlDZWxsUmVuZGVyZXIgICAgICAgICAgICAgICEgOiAoKGRvbUNvbmZpZzogeyBjbGFzc05hbWU6IG9iamVjdCwgc3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0IH0sIGNoaWxkcmVuOiBEb21Db25maWdbXSwgY2VsbERhdGE6IERheUNlbGwpID0+IHN0cmluZyl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheUhlYWRlclJlbmRlcmVyICAgICAgICAgICAgISA6ICgoaGVhZGVyRG9tQ29uZmlnOiB7IGNsYXNzTmFtZTogb2JqZWN0LCBzdHlsZTogb2JqZWN0LCBkYXRhc2V0OiBvYmplY3QsIGNoaWxkcmVuOiBEb21Db25maWdbXSB9LCBjZWxsRGF0YTogRGF5Q2VsbCkgPT4gc3RyaW5nKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGF5TmFtZUZvcm1hdCAgICAgICAgICAgICAgICAhIDogc3RyaW5nfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKTtcbiAgICBASW5wdXQoKSBkYXlTdGFydFNoaWZ0ICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRCaW5kUHJvcGVydHkgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0Rm9jdXMgICAgICAgICAgICAgICAgICEgOiAoKHdpZGdldDogV2lkZ2V0KSA9PiBib29sZWFuKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdHMgICAgICAgICAgICAgICAgICAgICAhIDogQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uUmVuZGVyZXIgICAgICAgICAgISA6ICh2aWV3OiBXaWRnZXQpID0+IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmFnZ2FibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn07XG4gICAgQElucHV0KCkgZWxlbWVudEF0dHJpYnV0ZXMgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+O1xuICAgIEBJbnB1dCgpIGVuZERhdGUgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgZXZlbnRGaWx0ZXIgICAgICAgICAgICAgICAgICAhIDogKChldmVudDogRXZlbnRNb2RlbCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50SGVhZGVyUmVuZGVyZXIgICAgICAgICAgISA6ICgoZGV0YWlsOiB7IHZpZXc6IENhbGVuZGFyVmlldywgZXZlbnRSZWNvcmQ6IEV2ZW50TW9kZWwsIHJlc291cmNlUmVjb3JkOiBSZXNvdXJjZU1vZGVsLCByZW5kZXJEYXRhOiB7IHN0eWxlOiBvYmplY3QsIGNsczogb2JqZWN0LCBpY29uU3R5bGU6IG9iamVjdCwgaWNvbkNsczogb2JqZWN0LCBldmVudENvbG9yOiBzdHJpbmcsIGRhdGFzZXQ6IG9iamVjdCwgc29saWRCYXI6IGJvb2xlYW4sIGJvZHlDb2xvcjogc3RyaW5nIH0sIHNob3dCdWxsZXQ6IGJvb2xlYW4gfSkgPT4gRG9tQ29uZmlnfERvbUNvbmZpZ1tdfHN0cmluZ3x2b2lkKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZXZlbnRMYXlvdXQgICAgICAgICAgICAgICAgICAhIDogRmx1aWREYXlMYXlvdXRDb25maWc7XG4gICAgQElucHV0KCkgZXZlbnRSZW5kZXJlciAgICAgICAgICAgICAgICAhIDogKChkZXRhaWw6IHsgdmlldzogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHJlbmRlckRhdGE6IHsgc3R5bGU6IG9iamVjdCwgY2xzOiBvYmplY3QsIGljb25TdHlsZTogb2JqZWN0LCBpY29uQ2xzOiBvYmplY3QsIGV2ZW50Q29sb3I6IHN0cmluZywgZXZlbnRCYWNrZ3JvdW5kOiBzdHJpbmcsIHRleHRDb2xvcjogc3RyaW5nLCBldmVudElubmVyU3R5bGU6IG9iamVjdCwgZGF0YXNldDogb2JqZWN0LCBzb2xpZEJhcjogYm9vbGVhbiwgYm9keUNvbG9yOiBzdHJpbmcsIHNob3dCdWxsZXQ6IGJvb2xlYW4gfSB9KSA9PiBEb21Db25maWd8RG9tQ29uZmlnW118c3RyaW5nfHZvaWQpfHN0cmluZztcbiAgICBASW5wdXQoKSBldmVudFNvcnRlciAgICAgICAgICAgICAgICAgICEgOiAobGhzOiBFdmVudE1vZGVsfEV2ZW50QmFyLCByaHM6IEV2ZW50TW9kZWx8RXZlbnRCYXIpID0+IG51bWJlcjtcbiAgICBASW5wdXQoKSBldmVudFNwYWNpbmcgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb290ZXIgICAgICAgICAgICAgICAgICAgICAgICEgOiB7XG4gICAgICAgIGRvY2s/OiAndG9wJ3wncmlnaHQnfCdib3R0b20nfCdsZWZ0J3wnc3RhcnQnfCdlbmQnXG4gICAgICAgIGh0bWw/OiBzdHJpbmdcbiAgICAgICAgY2xzPzogc3RyaW5nXG4gICAgfXxzdHJpbmc7XG4gICAgQElucHV0KCkgZ2V0UHJpbWFyeVJlc291cmNlICAgICAgICAgICAhIDogKChldmVudFJlY29yZDogRXZlbnRNb2RlbCkgPT4gUmVzb3VyY2VNb2RlbCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyO1xuICAgIEBJbnB1dCgpIGhpZGVBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGhpZGVXaGVuRW1wdHkgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfERvbUNvbmZpZztcbiAgICBASW5wdXQoKSBpZ25vcmVQYXJlbnRSZWFkT25seSAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGl0ZW1DbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXp5SXRlbXMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWc+fENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgISA6IERheVZpZXdMaXN0ZW5lcnM7XG4gICAgQElucHV0KCkgbG9jYWxlQ2xhc3MgICAgICAgICAgICAgICAgICAhIDogdHlwZW9mIEJhc2U7XG4gICAgQElucHV0KCkgbG9jYWxpemFibGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZVByb3BlcnRpZXMgICAgICAgICEgOiBzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBtYXNrRGVmYXVsdHMgICAgICAgICAgICAgICAgICEgOiBNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1hc2tlZCAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWF4QWxsRGF5SGVpZ2h0ICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtb25pdG9yUmVzaXplICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnPjtcbiAgICBASW5wdXQoKSBvdmVyZmxvd1BvcHVwICAgICAgICAgICAgICAgICEgOiBPdmVyZmxvd1BvcHVwQ29uZmlnO1xuICAgIEBJbnB1dCgpIG93bmVyICAgICAgICAgICAgICAgICAgICAgICAgISA6IFdpZGdldHxhbnk7XG4gICAgQElucHV0KCkgcG9zaXRpb25lZCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwcmV2ZW50VG9vbHRpcE9uVG91Y2ggICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbGF5U3RvcmVFdmVudHMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVzb3VyY2VJbWFnZVBhdGggICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmUgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlUm9vdCAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmVTdGF0ZSAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSByZXNwb25zaXZlVGFyZ2V0ICAgICAgICAgICAgICEgOiBzdHJpbmd8V2lkZ2V0O1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2VsZWN0b3JCdXR0b24gICAgICAgICAgICAgICAhIDogQnV0dG9uQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNlbGVjdG9yTWVudUl0ZW0gICAgICAgICAgICAgISA6IE1lbnVJdGVtQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNob3J0RXZlbnRDbHMgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzaG9ydEV2ZW50RHVyYXRpb24gICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIHNob3dBbGxEYXlIZWFkZXIgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd0J1bGxldCAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7YmFyPzogYm9vbGVhbiwgbm9CYXI/OiBib29sZWFufTtcbiAgICBASW5wdXQoKSBzaG93UmVzb3VyY2VBdmF0YXJzICAgICAgICAgICEgOiBib29sZWFufHN0cmluZztcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0YXJ0RGF0ZSAgICAgICAgICAgICAgICAgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgc3RhdGVmdWwgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVmdWxFdmVudHMgICAgICAgICAgICAgICAhIDogb2JqZWN0fHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHN0YXRlSWQgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBzdGF0ZVByb3ZpZGVyICAgICAgICAgICAgICAgICEgOiBTdGF0ZVByb3ZpZGVyO1xuICAgIEBJbnB1dCgpIHN0cmlwcyAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiQmFySXRlbXMgICAgICAgICAgICAgICAgICAhIDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHRleHRBbGlnbiAgICAgICAgICAgICAgICAgICAgISA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCc7XG4gICAgQElucHV0KCkgdGlja1JlbmRlcmVyICAgICAgICAgICAgICAgICAhIDogKCh0aWNrQ29udGV4dDogeyBzdGFydFRpbWU6IERhdGUsIGVuZFRpbWU6IERhdGUsIGV2ZW50czogRXZlbnRNb2RlbFtdLCB0aWNrSW5kZXg6IG51bWJlciwgc3VidGlja0luZGV4OiBudW1iZXIsIHN1YnRpY2tDb3VudDogbnVtYmVyLCByZXNvdXJjZVJlY29yZDogUmVzb3VyY2VNb2RlbCB9KSA9PiBEb21Db25maWcpfHN0cmluZztcbiAgICBASW5wdXQoKSB0aW1lQXhpc1RpbWVGb3JtYXQgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHRpbWVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnZGF5dmlldyd8J2RheSc7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB2aXNpYmxlU3RhcnRUaW1lICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyfHtcbiAgICAgICAgdGltZT86IHN0cmluZ3xudW1iZXJcbiAgICAgICAgYmxvY2s/OiAnc3RhcnQnfCdlbmQnfCdjZW50ZXInfCduZWFyZXN0J1xuICAgICAgICBlZGdlT2Zmc2V0PzogbnVtYmVyXG4gICAgICAgIGFuaW1hdGU/OiBvYmplY3R8Ym9vbGVhbnxudW1iZXJcbiAgICAgICAgZHVyYXRpb24/OiBudW1iZXJcbiAgICAgICAgZWFzaW5nPzogc3RyaW5nXG4gICAgfXxudWxsO1xuICAgIEBJbnB1dCgpIHdlZWtTdGFydERheSAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgem9vbU9uTW91c2VXaGVlbCAgICAgICAgICAgICAhIDogYm9vbGVhbnxudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsbG93RHJhZ0NyZWF0ZSAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWxsb3dEcmFnTW92ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbGxvd0RyYWdSZXNpemUgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFsbG93Wm9vbVVuZGVyZmxvdyAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYW5pbWF0ZVRpbWVTaGlmdCAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b0NyZWF0ZSAgICAgICAgICAgICAgICAgICAhIDoge1xuICAgICAgICBnZXN0dXJlPzogc3RyaW5nXG4gICAgICAgIG5ld05hbWU/OiBGdW5jdGlvbnxzdHJpbmdcbiAgICAgICAgc3RlcD86IHN0cmluZ1xuICAgICAgICBzbmFwVHlwZT86ICdyb3VuZCd8J2NlaWwnfCdmbG9vcidcbiAgICAgICAgZHVyYXRpb24/OiBzdHJpbmdcbiAgICAgICAgc3RhcnRIb3VyPzogbnVtYmVyXG4gICAgfXxzdHJpbmd8Ym9vbGVhbjtcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xzICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBjb21wYWN0SGVhZGVyICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvcmVIb3VycyAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdHwoKGRhdGU6IERhdGUpID0+IG9iamVjdFtdKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZGFzaGVkU3VidGlja3MgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkYXRhc2V0ICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIGRhdGVGaWx0ZXIgICAgICAgICAgICAgICAgICAgISA6ICgoY29udGV4dDogRGF5Q2VsbCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGVGb3JtYXQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgZGF0ZVNlcGFyYXRvciAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheUVuZFRpbWUgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgZGF5U3RhcnRUaW1lICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBkZWZhdWx0U2Nyb2xsT3B0aW9ucyAgICAgICAgICEgOiBCcnludHVtU2Nyb2xsT3B0aW9ucztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbkZvcm1hdCAgICAgICAgICAgICEgOiBzdHJpbmd8c3RyaW5nW118Ym9vbGVhbltdfCgoZGF0ZTogRGF0ZSkgPT4gc3RyaW5nKXxGdW5jdGlvbltdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58J2luZXJ0JztcbiAgICBASW5wdXQoKSBkcmFnVW5pdCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXh0ZW5kQWxsRGF5RW5kRGF5ICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmlsdGVyRXZlbnRSZXNvdXJjZXMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmaXRIb3VycyAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgbWluSGVpZ2h0PzogbnVtYmVyXG4gICAgfTtcbiAgICBASW5wdXQoKSBmaXhlZER1cmF0aW9uICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZsZXggICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhpZGVFbXB0eURheXMgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZU5vbldvcmtpbmdEYXlzICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3VySGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgaG91ckhlaWdodEJyZWFrcG9pbnRzICAgICAgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluY3JlbWVudCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgaW5wdXRGaWVsZEFsaWduICAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgaW5zZXJ0Rmlyc3QgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGludGVyRGF5RHJhZyAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaW50ZXJEYXlSZXNpemUgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnfFdpZGdldClbXXxSZWNvcmQ8c3RyaW5nLCBDYWxlbmRhckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1Db25maWc+fFdpZGdldFtdfFJlY29yZDxzdHJpbmcsIENhbGVuZGFyQ29udGFpbmVySXRlbUNvbmZpZ3xNZW51SXRlbUVudHJ5PnwoQ2FsZW5kYXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnl8V2lkZ2V0KVtdO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIEtleU1hcENvbmZpZz47XG4gICAgQElucHV0KCkgbGFiZWxQb3NpdGlvbiAgICAgICAgICAgICAgICAhIDogJ2JlZm9yZSd8J2Fib3ZlJ3wnYWxpZ24tYmVmb3JlJ3wnYXV0byd8bnVsbDtcbiAgICBASW5wdXQoKSBsYXlvdXQgICAgICAgICAgICAgICAgICAgICAgICEgOiBMYXlvdXR8c3RyaW5nfENhbGVuZGFyQ29udGFpbmVyTGF5b3V0Q29uZmlnO1xuICAgIEBJbnB1dCgpIGxheW91dFN0eWxlICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heERhdGUgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heEhlaWdodCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4aW1pemVPbk1vYmlsZSAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkRhdGUgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1pbkRheVdpZHRoICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWluRXZlbnRIZWlnaHQgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbkhvdXJIZWlnaHQgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5XaWR0aCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG5vTWF0Y2hpbmdEYXRlcyAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgbm9uV29ya2luZ0RheXMgICAgICAgICAgICAgICAhIDogUmVjb3JkPG51bWJlciwgYm9vbGVhbj47XG4gICAgQElucHV0KCkgcGFzdEV2ZW50Q2xzICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJhbmdlICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZztcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJlbmRpdGlvbiAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGw7XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzY3JvbGxhYmxlICAgICAgICAgICAgICAgICAgICEgOiBTY3JvbGxlcnxib29sZWFufFNjcm9sbGVyQ29uZmlnO1xuICAgIEBJbnB1dCgpIHNoaWZ0SW5jcmVtZW50ICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEdXJhdGlvbkNvbmZpZztcbiAgICBASW5wdXQoKSBzaG9ydERhdGVGb3JtYXQgICAgICAgICAgICAgICEgOiBzdHJpbmd8KChkYXRlOiBEYXRlKSA9PiBzdHJpbmcpO1xuICAgIEBJbnB1dCgpIHNob3J0RGF0ZVRpbWVGb3JtYXQgICAgICAgICAgISA6IHN0cmluZ3woKGRhdGU6IERhdGUpID0+IHN0cmluZyk7XG4gICAgQElucHV0KCkgc2hvd0N1cnJlbnRUaW1lICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGZ1bGxXaWR0aD86IGJvb2xlYW5cbiAgICAgICAgc2hvd1RpbWU/OiBib29sZWFuXG4gICAgICAgIG9uVG9wPzogYm9vbGVhblxuICAgIH07XG4gICAgQElucHV0KCkgc2hvd1RpbWUgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxSZWNvcmQ8KCdzdGFydFRpbWUnfCdlbmRUaW1lJ3wnZHVyYXRpb24nKSwgYm9vbGVhbnxzdHJpbmd8RnVuY3Rpb24+O1xuICAgIEBJbnB1dCgpIHNpeE1pbnV0ZVRpY2tzICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc25hcFJlbGF0aXZlVG9FdmVudFN0YXJ0RGF0ZSAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzcGFuICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhY2tNdWx0aURheUV2ZW50cyAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdHJpY3RSZWNvcmRNYXBwaW5nICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN5bmNDYWxlbmRhckRhdGUgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3luY1ZpZXdEYXRlICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0aW1lU25hcFR5cGUgICAgICAgICAgICAgICAgICEgOiAncm91bmQnfCdjZWlsJ3wnZmxvb3InfG51bGw7XG4gICAgQElucHV0KCkgdGl0bGUgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIFRvb2x8VG9vbENvbmZpZz58bnVsbHxSZWNvcmQ8c3RyaW5nLCBUb29sPnxSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPjtcbiAgICBASW5wdXQoKSB0b29sdGlwICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGFuY2hvclNpemUgICAgICAgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgZGF5Q2VsbENscyAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZmlyc3RWaXNpYmxlQ2VsbCAgICEgOiBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBmaXJzdFZpc2libGVEYXRlICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhhc0NoYW5nZXMgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBob3Jpem9udGFsU2Nyb2xsZXIgISA6IFNjcm9sbGVyO1xuICAgIEBJbnB1dCgpIGlzU2V0dGluZ1ZhbHVlcyAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc1ZhbGlkICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbGFzdFZpc2libGVDZWxsICAgICEgOiBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBsYXN0VmlzaWJsZURhdGUgICAgISA6IERhdGU7XG4gICAgQElucHV0KCkgcGFyZW50ICAgICAgICAgICAgICEgOiBXaWRnZXQ7XG4gICAgQElucHV0KCkgcmVjb3JkICAgICAgICAgICAgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSB2YWx1ZXMgICAgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cbiAgICAvLyBFdmVudHMgZW1pdHRlcnNcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGZpcmVzIHdoZW5ldmVyIHRoZSBbYXV0b0NyZWF0ZSBnZXN0dXJlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKSBpcyBkZXRlY3RlZFxuICAgICAqIGFuZCBhbHNvIHdoZW4gYSBbZHJhZy1jcmVhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvZmVhdHVyZS9DYWxlbmRhckRyYWcpIGdlc3R1cmUgaXMgZGV0ZWN0ZWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjZXZlbnQtYmVmb3JlQXV0b0NyZWF0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZG9tRXZlbnQgVGhlIERPTSBldmVudCB3aGljaCBpbml0aWF0ZWQgdGhlIGNyZWF0aW9uLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSAqREVQUkVDQVRFRCBpbiBmYXZvdXIgb2YgYHN0YXJ0RGF0ZWAuKiBUaGUgc3RhcnRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC4gSWYgdGhpcyBpcyBpbiBhIGBEYXlWaWV3YCwgdGhpcyB3aWxsIGJlIHNuYXBwZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpY2F0aW9uIGluIFthdXRvQ3JlYXRlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9DYWxlbmRhck1peGluI2NvbmZpZy1hdXRvQ3JlYXRlKVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuc3RhcnREYXRlIFRoZSBzdGFydGluZyB0aW1lIG9mIHRoZSBldmVudCB0byBiZSBjcmVhdGVkLiBJZiB0aGlzIGlzIGluIGEgYERheVZpZXdgLCB0aGlzIHdpbGwgYmUgc25hcHBlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gaW4gW2F1dG9DcmVhdGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWF1dG9DcmVhdGUpXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5lbmREYXRlIFRoZSBlbmRpbmcgdGltZSBvZiB0aGUgZXZlbnQgdG8gYmUgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5SZXNvdXJjZU1vZGVsfSBldmVudC5yZXNvdXJjZVJlY29yZCBUaGUgcmVzb3VyY2UgaWYgdGhlIFVJIGluY2x1ZGVzIGEgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGV2ZW50LnZpZXcgVGhpcyB2aWV3LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUF1dG9DcmVhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBkb21FdmVudDogRXZlbnQsIGRhdGU6IERhdGUsIHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSwgcmVzb3VyY2VSZWNvcmQ6IFJlc291cmNlTW9kZWwsIHZpZXc6IENhbGVuZGFyVmlldyB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB2aWV3J3Mgb3JpZW50YXRpbmcgZGF0ZSBjaGFuZ2VzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2V2ZW50LWJlZm9yZUNoYW5nZURhdGUpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub2xkRGF0ZSBUaGUgY3VycmVudCBvcmllbnRhdGluZyBkYXRlIG9mIHRoaXMgdmlldy5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LmRhdGUgVGhlIG5ldyBkYXRlIHRvIHdoaWNoIHRoaXMgdmlldyBpcyB0byBiZSBvcmllbnRhdGVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUNoYW5nZURhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBvbGREYXRlOiBEYXRlLCBkYXRlOiBEYXRlIH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSBuZXcgW3Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlU3RhdGUpIGlzIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCB3aG9zZSBgcmVzcG9uc2l2ZVN0YXRlYCBpcyB0byBiZSBjaGFuZ2VkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LnN0YXRlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGRTdGF0ZSBUaGUgcHJldmlvdXMgdmFsdWUgZm9yIHRoZSB3aWRnZXQncyBgcmVzcG9uc2l2ZVN0YXRlYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVJlc3BvbnNpdmVTdGF0ZUNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBzdGF0ZTogc3RyaW5nLCBvbGRTdGF0ZTogc3RyaW5nIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIHNhdmVkIGJ5IHRoZSBTdGF0ZVByb3ZpZGVyLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIG5ldyBzZXQgb2YgZXZlbnRzIGhhcyBiZWVuIGdhdGhlcmVkIGZvciB0aGlzIHZpZXcncyBkYXRlIHJhbmdlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge01hcDxhbnksIGFueT59IGV2ZW50LmNlbGxNYXAgVGhlIG1hcCBvZiBkYXRlIGtleXMgdG8gW2RheSBjZWxsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXlDZWxsQ29sbGVjdGVyI3R5cGVkZWYtRGF5Q2VsbCkgZGF0YSBibG9ja3MuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbE1hcFBvcHVsYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGNlbGxNYXA6IE1hcDxhbnksIGFueT4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbGxhcHNlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBQYW5lbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYWZ0ZXIgb25lIGRheSBjZWxsJ3MgZXZlbnRzIGFyZSBjb2xsZWN0ZWQgaW4gc29ydGVkIG9yZGVyIGFjY29yZGluZyB0byB0aGVcbiAgICAgKiBbZXZlbnRTb3J0ZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L21peGluL0NhbGVuZGFyTWl4aW4jY29uZmlnLWV2ZW50U29ydGVyKVxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2V2ZW50LWRheUNlbGxQb3B1bGF0ZWQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWxbXX0gZXZlbnQuZXZlbnRzIFRoZSBldmVudHMgdG8gYmUgc2hvd24gZm9yIHRoZSBwYXNzZWQgZGF0ZVxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuVGhlIGRhdGUgdGhlIGV2ZW50cyBhcmUgdG8gYmUgc2hvd24gaW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGF5Q2VsbFBvcHVsYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGV2ZW50czogRXZlbnRNb2RlbFtdLCBUaGU6IERhdGUgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkRlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBmaWVsZCBpcyBtdXRhdGVkIGFuZCB0aGUgc3RhdGUgb2YgdGhlIFtoYXNDaGFuZ2VzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhbiBbYXV0b0NyZWF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvbWl4aW4vQ2FsZW5kYXJNaXhpbiNjb25maWctYXV0b0NyZWF0ZSkgZ2VzdHVyZSBoYXMgY3JlYXRlZCBhIG5ldyBldmVudFxuICAgICAqIGFuZCBhZGRlZCBpdCB0byB0aGUgZXZlbnQgc3RvcmUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjZXZlbnQtZXZlbnRBdXRvQ3JlYXRlZClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDYWxlbmRhclZpZXd9IGV2ZW50LnNvdXJjZSBUaGlzIENhbGVuZGFyIHZpZXcgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHtTY2hlZHVsZXIubW9kZWwuRXZlbnRNb2RlbH0gZXZlbnQuZXZlbnRSZWNvcmQgVGhlIG5ldyBldmVudCByZWNvcmQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRBdXRvQ3JlYXRlZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQ2FsZW5kYXJWaWV3LCBldmVudFJlY29yZDogRXZlbnRNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIGRheSBzcGFubmluZyBldmVudCBpcyBmb3VuZCwgYW5kIHRoZSBkYXRlIHRvIHdoaWNoIGl0cyBlbmNhcHN1bGF0aW5nIGV2ZW50IGJhclxuICAgICAqIGV4dGVuZHMgaGFzIGJlZW4gY2FsY3VsYXRlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNldmVudC1ldmVudFByb3BhZ2F0ZSlcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5ldmVudEVuZERhdGUgVGhlIGVuZCBkYXRlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHByb3BhZ2F0ZSBlbmQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnByb3BhZ2F0ZUVuZERhdGUgVGhlIHN5c3RlbS1jYWxjdWxhdGVkIGVuZCBwb2ludCBvZiB0aGUgZXZlbnQgYmFyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNBbGxEYXkgYHRydWVgIGlmIHRoZSBldmVudCBpcyBhbiBhbGwgZGF5IGV2ZW50LCBvciBzcGFucyBtdWx0aXBsZSBkYXlzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuaXNPdmVyZmxvdyBgdHJ1ZWAgaWYgdGhpcyBpcyBiZWluZyBjYWxsZWQgYXMgcGFydCBvZiBmdXJ0aGVyIHByb3BhZ2F0aW9uLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQub3ZlcmZsb3dzIGB0cnVlYCBpZiB0aGUgZXZlbnQgZXh0ZW5kcyBpbnRvIGZ1dHVyZSBjZWxscy5cbiAgICAgKiBAcGFyYW0ge1NjaGVkdWxlci5tb2RlbC5FdmVudE1vZGVsfSBldmVudC5ldmVudFJlY29yZCBUaGUgZXZlbnQgcmVjb3JkIGJlaW5nIHByb3BhZ2F0ZWQuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5kYXRlIFRoZSBkYXRlIGZyb20gd2hpY2ggdGhlIGV2ZW50IGlzIGJlaW5nIHByb3BhZ2F0ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRXZlbnRQcm9wYWdhdGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBldmVudEVuZERhdGU6IERhdGUsIHByb3BhZ2F0ZUVuZERhdGU6IERhdGUsIGlzQWxsRGF5OiBib29sZWFuLCBpc092ZXJmbG93OiBib29sZWFuLCBvdmVyZmxvd3M6IGJvb2xlYW4sIGV2ZW50UmVjb3JkOiBFdmVudE1vZGVsLCBkYXRlOiBEYXRlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIGEgUGFuZWwgaXMgZXhwYW5kZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoaXMgRGF5VmlldyBjaGFuZ2VzIGFuIGFzcGVjdCBvZiBpdHMgbGF5b3V0LiBUaGlzIGhhcHBlbnMgd2hlbiBjaGFuZ2luZ1xuICAgICAqIFtob3VySGVpZ2h0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I3Byb3BlcnR5LWhvdXJIZWlnaHQpLCBbbWluRGF5V2lkdGhdKCNDYWxlbmRhci93aWRnZXQvRGF5VmlldyNwcm9wZXJ0eS1taW5EYXlXaWR0aCksIGFuZCB3aGVuIHRoZSBhdmFpbGFibGVcbiAgICAgKiBkYXkgY29udGFpbmVyIGhlaWdodCBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NhbGVuZGFyLndpZGdldC5EYXlWaWV3fSBldmVudC5zb3VyY2UgVGhlIHRyaWdnZXJpbmcgaW5zdGFuY2UuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uTGF5b3V0VXBkYXRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBEYXlWaWV3IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9DYWxlbmRhci93aWRnZXQvRGF5VmlldyNldmVudC1wYWludClcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHBhaW50ZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5maXJzdFBhaW50IGB0cnVlYCBpZiB0aGlzIGlzIHRoZSBmaXJzdCBwYWludC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWludDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmaXJzdFBhaW50OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSByYW5nZSBvZiBkYXRlcyBlbmNhcHN1bGF0ZWQgYnkgdGhpcyB2aWV3IGNoYW5nZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjZXZlbnQtcmFuZ2VDaGFuZ2UpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7dHlwZW9mIERhdGVSYW5nZU93bmVyfSBldmVudC5zb3VyY2UgVGhpcyBjYWxlbmRhciB2aWV3IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIG9sZCBkYXRlIHJhbmdlIDxzdHJvbmc+aWYgYW55PC9zdHJvbmc+LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQub2xkLnN0YXJ0RGF0ZSB0aGUgb2xkIHN0YXJ0IGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGQuZW5kRGF0ZSB0aGUgb2xkIGVuZCBkYXRlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5uZXcgVGhlIG5ldyBkYXRlIHJhbmdlXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5uZXcuc3RhcnREYXRlIHRoZSBuZXcgc3RhcnQgZGF0ZS5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50Lm5ldy5lbmREYXRlIHRoZSBuZXcgZW5kIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmFuZ2VDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IHR5cGVvZiBEYXRlUmFuZ2VPd25lciwgb2xkOiB7IHN0YXJ0RGF0ZTogRGF0ZSwgZW5kRGF0ZTogRGF0ZSB9LCBuZXc6IHsgc3RhcnREYXRlOiBEYXRlLCBlbmREYXRlOiBEYXRlIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBXaWRnZXQncyByZWFkIG9ubHkgc3RhdGUgaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnJlYWRPbmx5IFJlYWQgb25seSBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWFkT25seTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlYWRPbmx5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgd2lkZ2V0J3MgZWxlbWVudHMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZCBkdWUgdG8gYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2FsbFxuICAgICAqIHRvIFtyZWNvbXBvc2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2Z1bmN0aW9uLXJlY29tcG9zZSksIGlmIHRoaXMgcmVzdWx0cyBpbiBzb21lIGNoYW5nZSB0byB0aGUgd2lkZ2V0J3MgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlY29tcG9zZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhpcyBEYXlWaWV3IHJlZnJlc2hlcy5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDYWxlbmRhci53aWRnZXQuRGF5Vmlld30gZXZlbnQuc291cmNlIFRoZSB0cmlnZ2VyaW5nIGluc3RhbmNlLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlZnJlc2g6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IERheVZpZXcgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSBuZXcgW3Jlc3BvbnNpdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9jYWxlbmRhci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9SZXNwb25zaXZlI2NvbmZpZy1yZXNwb25zaXZlU3RhdGUpIGlzIGFwcGxpZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCB3aG9zZSBgcmVzcG9uc2l2ZVN0YXRlYCBoYXMgY2hhbmdlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5zdGF0ZSBUaGUgbmV3IHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQub2xkU3RhdGUgVGhlIHByZXZpb3VzIHZhbHVlIGZvciB0aGUgd2lkZ2V0J3MgYHJlc3BvbnNpdmVTdGF0ZWBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZXNwb25zaXZlU3RhdGVDaGFuZ2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgc3RhdGU6IHN0cmluZywgb2xkU3RhdGU6IHN0cmluZyB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiB0aGUgW3NoaWZ0SW5jcmVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9taXhpbi9EYXRlUmFuZ2VPd25lciNwcm9wZXJ0eS1zaGlmdEluY3JlbWVudCkgb2YgdGhpcyB2aWV3IGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudC5vbGQgVGhlIHNoaWZ0IGluY3JlbWVudCAqaWYgYW55Ki5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQubmV3IFRoZSBzaGlmdCBpbmNyZW1lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaGlmdEluY3JlbWVudENoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IG9sZD86IG9iamVjdCwgbmV3OiBvYmplY3QgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBjaGFuZ2luZyB0aGUgW2hvdXJIZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjcHJvcGVydHktaG91ckhlaWdodCkgY2F1c2VzIGFuXG4gICAgICogW2hvdXIgaGVpZ2h0IGJyZWFrcG9pbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLWhvdXJIZWlnaHRCcmVha3BvaW50cykgdG8gYmUgY3Jvc3NlZFxuICAgICAqIGFuZCB0aGUgZGlzcGxheWVkIHN1YlRpY2sgaW50ZXJ2YWxzIGluIHRoZSB0aW1lIGF4aXMgY2hhbmdlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQub2xkIFRoZSBvbGQgaG91ciBoZWlnaHQgdGljayByZXNvbHV0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkLmxldmVsIFRoZSBsZXZlbCBgMGAgdG8gYDRgIHdoZXJlIGAwYCBpcyB0aGUgZGVmYXVsdCB3aXRoIG5vIHN1YlRpY2sgdGltZXMgZGlzcGxheWVkLCBhbmQgYDRgIG1lYW5zIGV2ZXJ5IDUgbWludXRlIHRpbWUgaXMgZGlzcGxheWVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5vbGQuc3RlcCBUaGUgdGltZSBkdXJhdGlvbiBvZiB2aXNpYmxlIHN1YlRpY2tzLiBUaGlzIGlzIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgcmVxdWlyZWQgYnkgW3BhcnNlRHVyYXRpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNmdW5jdGlvbi1wYXJzZUR1cmF0aW9uLXN0YXRpYylcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQubmV3IFRoZSBuZXcgaG91ciBoZWlnaHQgdGljayByZXNvbHV0aW9uIG9iamVjdC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQubmV3LmxldmVsIFRoZSBsZXZlbCBgMGAgdG8gYDRgIHdoZXJlIGAwYCBpcyB0aGUgZGVmYXVsdCB3aXRoIG5vIHN1YlRpY2sgdGltZXMgZGlzcGxheWVkLCBhbmQgYDRgIG1lYW5zIGV2ZXJ5IDUgbWludXRlIHRpbWUgaXMgZGlzcGxheWVkLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudC5uZXcuc3RlcCBUaGUgdGltZSBkdXJhdGlvbiBvZiB2aXNpYmxlIHN1YlRpY2tzLiBUaGlzIGlzIGEgc3RyaW5nIGluIHRoZSBmb3JtYXQgcmVxdWlyZWQgYnkgW3BhcnNlRHVyYXRpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS9oZWxwZXIvRGF0ZUhlbHBlciNmdW5jdGlvbi1wYXJzZUR1cmF0aW9uLXN0YXRpYylcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaWNrQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgb2xkOiB7IGxldmVsOiBudW1iZXIsIHN0ZXA6IHN0cmluZyB9LCBuZXc6IHsgbGV2ZWw6IG51bWJlciwgc3RlcDogc3RyaW5nIH0gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSB0aW1lIGF4aXMgaXMgY2xpY2tlZCBvbi4gSWYgdGhlIGhhbmRsZXIgcmV0dXJuc1xuICAgICAqIGBmYWxzZWAgdGhlIGN1cnJlbnQgcG9pbnRlciBldmVudCBpcyBub3QgcHJvY2Vzc2VkIGZ1cnRoZXIuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSB0cmlnZ2VyaW5nIERPTSBldmVudC5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IGV2ZW50LnByZWNpc2VUaW1lIFRoZSBleGFjdCBkYXRlIGFuZCB0aW1lIGF0IHRoZSBjbGlja2VkIHBvc2l0aW9uXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC50aW1lIFRoZSBkYXRlIGFuZCB0aW1lIGF0IHRoZSBjbGlja2VkIHBvc2l0aW9uIHNuYXBwZWQgYWNjb3JkaW5nIHRvIHRoZSBbaW5jcmVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2NhbGVuZGFyL2RvY3MvYXBpL0NhbGVuZGFyL3dpZGdldC9EYXlWaWV3I2NvbmZpZy1pbmNyZW1lbnQpIGFuZCBbdGltZVNuYXBUeXBlXSgjQ2FsZW5kYXIvd2lkZ2V0L0RheVZpZXcjY29uZmlnLXRpbWVTbmFwVHlwZSlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25UaW1lQXhpc0NsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZG9tRXZlbnQ6IEV2ZW50LCBwcmVjaXNlVGltZTogRGF0ZSwgdGltZTogRGF0ZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQSBoZWFkZXIgW3Rvb2xdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvY2FsZW5kYXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXRvb2xzKSBoYXMgYmVlbiBjbGlja2VkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuVG9vbH0gZXZlbnQudG9vbCBUaGUgdG9vbCB3aGljaCBpcyBiZWluZyBjbGlja2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblRvb2xDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogVG9vbCwgdG9vbDogVG9vbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW5kIGFwcGVuZCB0aGUgdW5kZXJseWluZyB3aWRnZXRcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIG1lID0gdGhpcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdcbiAgICAgICAgICAgIH0gPSBtZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNsYXNzLFxuICAgICAgICAgICAgICAgIGluc3RhbmNlTmFtZSxcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlncyxcbiAgICAgICAgICAgICAgICBicnludHVtRXZlbnRzXG4gICAgICAgICAgICB9ID0gQnJ5bnR1bURheVZpZXdDb21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bURheVZpZXdDb21wb25lbnQ7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGNoYW5nZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcykuZm9yRWFjaCgoW3Byb3AsIGNoYW5nZV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAoY2hhbmdlIGFzIFNpbXBsZUNoYW5nZSkuY3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICAgICAgeyBicnludHVtQ29uZmlnc09ubHksIGJyeW50dW1Qcm9wcyB9ID0gQnJ5bnR1bURheVZpZXdDb21wb25lbnQ7XG4gICAgICAgICAgICBpZiAoYnJ5bnR1bVByb3BzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShpbnN0YW5jZSwgcHJvcCwgbmV3VmFsdWUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoYnJ5bnR1bUNvbmZpZ3NPbmx5LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ1VwZGF0ZVByb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UuZGVzdHJveSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|