@bryntum/scheduler-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-scheduler-angular-thin.d.ts +5 -0
- package/bundles/bryntum-scheduler-angular-thin.umd.js +18832 -0
- package/bundles/bryntum-scheduler-angular-thin.umd.js.map +1 -0
- package/esm2015/bryntum-scheduler-angular-thin.js +5 -0
- package/esm2015/lib/bryntum-event-color-field.component.js +795 -0
- package/esm2015/lib/bryntum-project-combo.component.js +937 -0
- package/esm2015/lib/bryntum-resource-combo.component.js +937 -0
- package/esm2015/lib/bryntum-resource-filter.component.js +743 -0
- package/esm2015/lib/bryntum-scheduler-base.component.js +4589 -0
- package/esm2015/lib/bryntum-scheduler-date-picker.component.js +1021 -0
- package/esm2015/lib/bryntum-scheduler-project-model.component.js +365 -0
- package/esm2015/lib/bryntum-scheduler.component.js +4593 -0
- package/esm2015/lib/bryntum-timeline-histogram.component.js +2888 -0
- package/esm2015/lib/bryntum-undo-redo.component.js +698 -0
- package/esm2015/lib/bryntum-view-preset-combo.component.js +746 -0
- package/esm2015/lib/scheduler.module.js +74 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +16 -0
- package/fesm2015/bryntum-scheduler-angular-thin.js +18371 -0
- package/fesm2015/bryntum-scheduler-angular-thin.js.map +1 -0
- package/lib/bryntum-event-color-field.component.d.ts +966 -0
- package/lib/bryntum-project-combo.component.d.ts +1202 -0
- package/lib/bryntum-resource-combo.component.d.ts +1205 -0
- package/lib/bryntum-resource-filter.component.d.ts +888 -0
- package/lib/bryntum-scheduler-base.component.d.ts +5014 -0
- package/lib/bryntum-scheduler-date-picker.component.d.ts +1363 -0
- package/lib/bryntum-scheduler-project-model.component.d.ts +392 -0
- package/lib/bryntum-scheduler.component.d.ts +5016 -0
- package/lib/bryntum-timeline-histogram.component.d.ts +3312 -0
- package/lib/bryntum-undo-redo.component.d.ts +847 -0
- package/lib/bryntum-view-preset-combo.component.d.ts +885 -0
- package/lib/scheduler.module.d.ts +17 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +12 -0
|
@@ -0,0 +1,1021 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum SchedulerDatePicker
|
|
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 { SchedulerDatePicker } from '@bryntum/scheduler-thin';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class BryntumSchedulerDatePickerComponent {
|
|
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
|
+
* Fires before an object is destroyed.
|
|
23
|
+
* @param {object} event Event object
|
|
24
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
25
|
+
*/
|
|
26
|
+
this.onBeforeDestroy = new EventEmitter();
|
|
27
|
+
/**
|
|
28
|
+
* Triggered before a widget is hidden. Return `false` to prevent the action.
|
|
29
|
+
* @param {object} event Event object
|
|
30
|
+
* @param {Core.widget.Widget} event.source The widget being hidden.
|
|
31
|
+
*/
|
|
32
|
+
this.onBeforeHide = new EventEmitter();
|
|
33
|
+
/**
|
|
34
|
+
* Fires before this CalendarPanel refreshes in response to changes in its month.
|
|
35
|
+
* @param {object} event Event object
|
|
36
|
+
* @param {Core.widget.DatePicker} event.source This DatePicker.
|
|
37
|
+
*/
|
|
38
|
+
this.onBeforeRefresh = new EventEmitter();
|
|
39
|
+
/**
|
|
40
|
+
* Fired before this container will load record values into its child fields. This is useful if you
|
|
41
|
+
* want to modify the UI before data is loaded (e.g. set some input field to be readonly)
|
|
42
|
+
* @param {object} event Event object
|
|
43
|
+
* @param {Core.widget.Container} event.source The container
|
|
44
|
+
* @param {Core.data.Model} event.record The record
|
|
45
|
+
*/
|
|
46
|
+
this.onBeforeSetRecord = new EventEmitter();
|
|
47
|
+
/**
|
|
48
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
49
|
+
* @param {object} event Event object
|
|
50
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
51
|
+
*/
|
|
52
|
+
this.onBeforeShow = new EventEmitter();
|
|
53
|
+
/**
|
|
54
|
+
* Fired before state is applied to the source. Allows editing the state object or preventing the operation.
|
|
55
|
+
* @param {object} event Event object
|
|
56
|
+
* @param {any} event.state State object config
|
|
57
|
+
*/
|
|
58
|
+
this.onBeforeStateApply = new EventEmitter();
|
|
59
|
+
/**
|
|
60
|
+
* Fired before state is saved by the StateProvider. Allows editing the state object or preventing the operation.
|
|
61
|
+
* @param {object} event Event object
|
|
62
|
+
* @param {any} event.state State object config
|
|
63
|
+
*/
|
|
64
|
+
this.onBeforeStateSave = new EventEmitter();
|
|
65
|
+
/**
|
|
66
|
+
* Fires when any other event is fired from the object.
|
|
67
|
+
* ...
|
|
68
|
+
* [View online docs...](https://bryntum.com/products/scheduler/docs/api/Scheduler/widget/SchedulerDatePicker#event-catchAll)
|
|
69
|
+
* @param {object} event Event object
|
|
70
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
71
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
72
|
+
*/
|
|
73
|
+
this.onCatchAll = new EventEmitter();
|
|
74
|
+
/**
|
|
75
|
+
* Fired when a date cell is clicked.
|
|
76
|
+
* @param {object} event Event object
|
|
77
|
+
* @param {HTMLElement} event.cell The clicked cell element.
|
|
78
|
+
* @param {Date} event.date The date represented by the cell.
|
|
79
|
+
* @param {number[]} event.week The week array `[year, weekNumber]`.
|
|
80
|
+
* @param {Event} event.domEvent The original DOM event.
|
|
81
|
+
*/
|
|
82
|
+
this.onCellClick = new EventEmitter();
|
|
83
|
+
/**
|
|
84
|
+
* Fires when a Panel is collapsed using the [collapsible](https://bryntum.com/products/scheduler/docs/api/Core/widget/Panel#config-collapsible) setting.
|
|
85
|
+
* @param {object} event Event object
|
|
86
|
+
* @param {Core.widget.Panel} event.source This Panel.
|
|
87
|
+
*/
|
|
88
|
+
this.onCollapse = new EventEmitter();
|
|
89
|
+
/**
|
|
90
|
+
* Fires when the date of this CalendarPanel is set.
|
|
91
|
+
* @param {object} event Event object
|
|
92
|
+
* @param {Date} event.value The new date.
|
|
93
|
+
* @param {Date} event.oldValue The old date.
|
|
94
|
+
* @param {object} event.changes An object which contains properties which indicate what part of the date changed.
|
|
95
|
+
* @param {boolean} event.changes.d True if the date changed in any way.
|
|
96
|
+
* @param {boolean} event.changes.w True if the week changed (including same week in a different year).
|
|
97
|
+
* @param {boolean} event.changes.m True if the month changed (including same month in a different year).
|
|
98
|
+
* @param {boolean} event.changes.y True if the year changed.
|
|
99
|
+
*/
|
|
100
|
+
this.onDateChange = new EventEmitter();
|
|
101
|
+
/**
|
|
102
|
+
* Fires when an object is destroyed.
|
|
103
|
+
* @param {object} event Event object
|
|
104
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
105
|
+
*/
|
|
106
|
+
this.onDestroy = new EventEmitter();
|
|
107
|
+
/**
|
|
108
|
+
* Fires when a field is mutated and the state of the [hasChanges](https://bryntum.com/products/scheduler/docs/api/Core/widget/Container#property-hasChanges) property changes
|
|
109
|
+
* @param {object} event Event object
|
|
110
|
+
* @param {Core.widget.Container} event.source The container.
|
|
111
|
+
* @param {boolean} event.dirty The dirty state of the Container - `true` if there are any fields which have been changed since initial load.
|
|
112
|
+
*/
|
|
113
|
+
this.onDirtyStateChange = new EventEmitter();
|
|
114
|
+
/**
|
|
115
|
+
* Triggered when a widget's [element](https://bryntum.com/products/scheduler/docs/api/Core/widget/Widget#property-element) is available.
|
|
116
|
+
* @param {object} event Event object
|
|
117
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
118
|
+
*/
|
|
119
|
+
this.onElementCreated = new EventEmitter();
|
|
120
|
+
/**
|
|
121
|
+
* Fires when a Panel is expanded using the [collapsible](https://bryntum.com/products/scheduler/docs/api/Core/widget/Panel#config-collapsible) setting.
|
|
122
|
+
* @param {object} event Event object
|
|
123
|
+
* @param {Core.widget.Panel} event.source This Panel.
|
|
124
|
+
*/
|
|
125
|
+
this.onExpand = new EventEmitter();
|
|
126
|
+
/**
|
|
127
|
+
* Fired when focus enters this Widget.
|
|
128
|
+
* @param {object} event Event object
|
|
129
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
130
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
131
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
132
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
133
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
134
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
135
|
+
*/
|
|
136
|
+
this.onFocusIn = new EventEmitter();
|
|
137
|
+
/**
|
|
138
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
139
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
140
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
141
|
+
* @param {object} event Event object
|
|
142
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
143
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
144
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
145
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
146
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
147
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
148
|
+
*/
|
|
149
|
+
this.onFocusOut = new EventEmitter();
|
|
150
|
+
/**
|
|
151
|
+
* Triggered after a widget was hidden
|
|
152
|
+
* @param {object} event Event object
|
|
153
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
154
|
+
*/
|
|
155
|
+
this.onHide = new EventEmitter();
|
|
156
|
+
/**
|
|
157
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
158
|
+
* achieves visibility.
|
|
159
|
+
* ...
|
|
160
|
+
* [View online docs...](https://bryntum.com/products/scheduler/docs/api/Scheduler/widget/SchedulerDatePicker#event-paint)
|
|
161
|
+
* @param {object} event Event object
|
|
162
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
163
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
164
|
+
*/
|
|
165
|
+
this.onPaint = new EventEmitter();
|
|
166
|
+
/**
|
|
167
|
+
* Fired when a Widget's read only state is toggled
|
|
168
|
+
* @param {object} event Event object
|
|
169
|
+
* @param {boolean} event.readOnly Read only or not
|
|
170
|
+
*/
|
|
171
|
+
this.onReadOnly = new EventEmitter();
|
|
172
|
+
/**
|
|
173
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
174
|
+
* to [recompose](https://bryntum.com/products/scheduler/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
175
|
+
*/
|
|
176
|
+
this.onRecompose = new EventEmitter();
|
|
177
|
+
/**
|
|
178
|
+
* Fires when this CalendarPanel refreshes.
|
|
179
|
+
*/
|
|
180
|
+
this.onRefresh = new EventEmitter();
|
|
181
|
+
/**
|
|
182
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/scheduler/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
183
|
+
* @param {object} event Event object
|
|
184
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
185
|
+
* @param {number} event.width The new width
|
|
186
|
+
* @param {number} event.height The new height
|
|
187
|
+
* @param {number} event.oldWidth The old width
|
|
188
|
+
* @param {number} event.oldHeight The old height
|
|
189
|
+
*/
|
|
190
|
+
this.onResize = new EventEmitter();
|
|
191
|
+
/**
|
|
192
|
+
* Fires when a date or date range is selected. If [multiSelect](https://bryntum.com/products/scheduler/docs/api/Core/widget/DatePicker#config-multiSelect) is specified,
|
|
193
|
+
* this will fire upon deselection and selection of dates.
|
|
194
|
+
* @param {object} event Event object
|
|
195
|
+
* @param {Date[]} event.selection The selected dates. If [multiSelect](https://bryntum.com/products/scheduler/docs/api/Core/widget/DatePicker#config-multiSelect) is specified this may be a two element array specifying start and end dates.
|
|
196
|
+
* @param {Date[]} event.oldSelection The previously selected dates. If [multiSelect](https://bryntum.com/products/scheduler/docs/api/Core/widget/DatePicker#config-multiSelect) is specified this may be a two element array specifying start and end dates.
|
|
197
|
+
* @param {boolean} event.userAction This will be `true` if the change was caused by user interaction as opposed to programmatic setting.
|
|
198
|
+
*/
|
|
199
|
+
this.onSelectionChange = new EventEmitter();
|
|
200
|
+
/**
|
|
201
|
+
* Triggered after a widget is shown.
|
|
202
|
+
* @param {object} event Event object
|
|
203
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
204
|
+
*/
|
|
205
|
+
this.onShow = new EventEmitter();
|
|
206
|
+
/**
|
|
207
|
+
* A header [tool](https://bryntum.com/products/scheduler/docs/api/Core/widget/Panel#config-tools) has been clicked.
|
|
208
|
+
* @param {object} event Event object
|
|
209
|
+
* @param {Core.widget.Tool} event.source This Panel.
|
|
210
|
+
* @param {Core.widget.Tool} event.tool The tool which is being clicked.
|
|
211
|
+
*/
|
|
212
|
+
this.onToolClick = new EventEmitter();
|
|
213
|
+
/**
|
|
214
|
+
* Fired when a week number cell is clicked.
|
|
215
|
+
* @param {object} event Event object
|
|
216
|
+
* @param {Date} event.date The start date of the week.
|
|
217
|
+
* @param {number[]} event.week The week array `[year, weekNumber]`.
|
|
218
|
+
* @param {Event} event.domEvent The original DOM event.
|
|
219
|
+
*/
|
|
220
|
+
this.onWeekCellClick = new EventEmitter();
|
|
221
|
+
this.elementRef = element;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Create and append the underlying widget
|
|
225
|
+
*/
|
|
226
|
+
ngOnInit() {
|
|
227
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumSchedulerDatePickerComponent;
|
|
228
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
229
|
+
// @ts-ignore
|
|
230
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
231
|
+
if (['features', 'config'].includes(prop)) {
|
|
232
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
// @ts-ignore
|
|
236
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
237
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
238
|
+
// @ts-ignore
|
|
239
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
240
|
+
// @ts-ignore
|
|
241
|
+
me[event].emit(e);
|
|
242
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
243
|
+
// in Angular listeners
|
|
244
|
+
return e.returnValue;
|
|
245
|
+
};
|
|
246
|
+
});
|
|
247
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
248
|
+
const containerParam = [
|
|
249
|
+
'adopt',
|
|
250
|
+
'appendTo',
|
|
251
|
+
'insertAfter',
|
|
252
|
+
'insertBefore'
|
|
253
|
+
// @ts-ignore
|
|
254
|
+
].find(prop => bryntumConfig[prop]);
|
|
255
|
+
if (!containerParam) {
|
|
256
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
257
|
+
// Button should always be <a> or <button> inside owner element
|
|
258
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
266
|
+
}
|
|
267
|
+
// @ts-ignore
|
|
268
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Watch for changes
|
|
272
|
+
* @param changes
|
|
273
|
+
*/
|
|
274
|
+
ngOnChanges(changes) {
|
|
275
|
+
const { instance } = this, { instanceName } = BryntumSchedulerDatePickerComponent;
|
|
276
|
+
if (!instance) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
// Iterate over all changes
|
|
280
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
281
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumSchedulerDatePickerComponent;
|
|
282
|
+
if (bryntumProps.includes(prop)) {
|
|
283
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
284
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
285
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Destroy the component
|
|
292
|
+
*/
|
|
293
|
+
ngOnDestroy() {
|
|
294
|
+
// @ts-ignore
|
|
295
|
+
if (this.instance && this.instance.destroy) {
|
|
296
|
+
this.instance.destroy();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
BryntumSchedulerDatePickerComponent.instanceClass = SchedulerDatePicker;
|
|
301
|
+
BryntumSchedulerDatePickerComponent.instanceName = 'SchedulerDatePicker';
|
|
302
|
+
BryntumSchedulerDatePickerComponent.bryntumEvents = [
|
|
303
|
+
'onBeforeDestroy',
|
|
304
|
+
'onBeforeHide',
|
|
305
|
+
'onBeforeRefresh',
|
|
306
|
+
'onBeforeSetRecord',
|
|
307
|
+
'onBeforeShow',
|
|
308
|
+
'onBeforeStateApply',
|
|
309
|
+
'onBeforeStateSave',
|
|
310
|
+
'onCatchAll',
|
|
311
|
+
'onCellClick',
|
|
312
|
+
'onCollapse',
|
|
313
|
+
'onDateChange',
|
|
314
|
+
'onDestroy',
|
|
315
|
+
'onDirtyStateChange',
|
|
316
|
+
'onElementCreated',
|
|
317
|
+
'onExpand',
|
|
318
|
+
'onFocusIn',
|
|
319
|
+
'onFocusOut',
|
|
320
|
+
'onHide',
|
|
321
|
+
'onPaint',
|
|
322
|
+
'onReadOnly',
|
|
323
|
+
'onRecompose',
|
|
324
|
+
'onRefresh',
|
|
325
|
+
'onResize',
|
|
326
|
+
'onSelectionChange',
|
|
327
|
+
'onShow',
|
|
328
|
+
'onToolClick',
|
|
329
|
+
'onWeekCellClick'
|
|
330
|
+
];
|
|
331
|
+
BryntumSchedulerDatePickerComponent.bryntumFeatureNames = [];
|
|
332
|
+
BryntumSchedulerDatePickerComponent.bryntumConfigs = BryntumSchedulerDatePickerComponent.bryntumFeatureNames.concat([
|
|
333
|
+
'activeDate',
|
|
334
|
+
'adopt',
|
|
335
|
+
'align',
|
|
336
|
+
'alignSelf',
|
|
337
|
+
'anchor',
|
|
338
|
+
'animateTimeShift',
|
|
339
|
+
'appendTo',
|
|
340
|
+
'ariaDescription',
|
|
341
|
+
'ariaLabel',
|
|
342
|
+
'autoUpdateRecord',
|
|
343
|
+
'bbar',
|
|
344
|
+
'bodyCls',
|
|
345
|
+
'bubbleEvents',
|
|
346
|
+
'callOnFunctions',
|
|
347
|
+
'catchEventHandlerExceptions',
|
|
348
|
+
'cellRenderer',
|
|
349
|
+
'centered',
|
|
350
|
+
'cls',
|
|
351
|
+
'collapsed',
|
|
352
|
+
'collapsible',
|
|
353
|
+
'color',
|
|
354
|
+
'column',
|
|
355
|
+
'config',
|
|
356
|
+
'constrainTo',
|
|
357
|
+
'content',
|
|
358
|
+
'contentElementCls',
|
|
359
|
+
'dataField',
|
|
360
|
+
'dataset',
|
|
361
|
+
'date',
|
|
362
|
+
'dayNameFormat',
|
|
363
|
+
'defaultBindProperty',
|
|
364
|
+
'defaultFocus',
|
|
365
|
+
'defaults',
|
|
366
|
+
'detectCSSCompatibilityIssues',
|
|
367
|
+
'disabled',
|
|
368
|
+
'disabledCls',
|
|
369
|
+
'disabledDates',
|
|
370
|
+
'disableNonWorkingDays',
|
|
371
|
+
'disableOtherMonthCells',
|
|
372
|
+
'disableWeekends',
|
|
373
|
+
'dock',
|
|
374
|
+
'draggable',
|
|
375
|
+
'dragSelect',
|
|
376
|
+
'drawer',
|
|
377
|
+
'editMonth',
|
|
378
|
+
'elementAttributes',
|
|
379
|
+
'eventFilter',
|
|
380
|
+
'eventStore',
|
|
381
|
+
'extraData',
|
|
382
|
+
'flex',
|
|
383
|
+
'floating',
|
|
384
|
+
'focusDisabledDates',
|
|
385
|
+
'footer',
|
|
386
|
+
'header',
|
|
387
|
+
'headerRenderer',
|
|
388
|
+
'height',
|
|
389
|
+
'hidden',
|
|
390
|
+
'hideAnimation',
|
|
391
|
+
'hideOtherMonthCells',
|
|
392
|
+
'hideWhenEmpty',
|
|
393
|
+
'highlightSelectedWeek',
|
|
394
|
+
'html',
|
|
395
|
+
'htmlCls',
|
|
396
|
+
'icon',
|
|
397
|
+
'id',
|
|
398
|
+
'ignoreParentReadOnly',
|
|
399
|
+
'includeYear',
|
|
400
|
+
'inputFieldAlign',
|
|
401
|
+
'insertBefore',
|
|
402
|
+
'insertFirst',
|
|
403
|
+
'itemCls',
|
|
404
|
+
'items',
|
|
405
|
+
'keyMap',
|
|
406
|
+
'labelPosition',
|
|
407
|
+
'layout',
|
|
408
|
+
'layoutStyle',
|
|
409
|
+
'lazyItems',
|
|
410
|
+
'listeners',
|
|
411
|
+
'localeClass',
|
|
412
|
+
'localizable',
|
|
413
|
+
'localizableProperties',
|
|
414
|
+
'margin',
|
|
415
|
+
'maskDefaults',
|
|
416
|
+
'masked',
|
|
417
|
+
'maxDate',
|
|
418
|
+
'maxHeight',
|
|
419
|
+
'maximizeOnMobile',
|
|
420
|
+
'maxWidth',
|
|
421
|
+
'minColumnWidth',
|
|
422
|
+
'minDate',
|
|
423
|
+
'minHeight',
|
|
424
|
+
'minRowHeight',
|
|
425
|
+
'minWidth',
|
|
426
|
+
'monitorResize',
|
|
427
|
+
'month',
|
|
428
|
+
'monthButtonFormat',
|
|
429
|
+
'multiSelect',
|
|
430
|
+
'namedItems',
|
|
431
|
+
'nonWorkingDayCls',
|
|
432
|
+
'nonWorkingDays',
|
|
433
|
+
'otherMonthCls',
|
|
434
|
+
'owner',
|
|
435
|
+
'positioned',
|
|
436
|
+
'preventTooltipOnTouch',
|
|
437
|
+
'readOnly',
|
|
438
|
+
'record',
|
|
439
|
+
'relayStoreEvents',
|
|
440
|
+
'rendition',
|
|
441
|
+
'ripple',
|
|
442
|
+
'rootElement',
|
|
443
|
+
'rtl',
|
|
444
|
+
'scrollable',
|
|
445
|
+
'scrollAction',
|
|
446
|
+
'selection',
|
|
447
|
+
'shadePastDates',
|
|
448
|
+
'showAnimation',
|
|
449
|
+
'showEvents',
|
|
450
|
+
'showTooltipWhenDisabled',
|
|
451
|
+
'showWeekColumn',
|
|
452
|
+
'sixWeeks',
|
|
453
|
+
'span',
|
|
454
|
+
'stateful',
|
|
455
|
+
'statefulEvents',
|
|
456
|
+
'stateId',
|
|
457
|
+
'stateProvider',
|
|
458
|
+
'strictRecordMapping',
|
|
459
|
+
'strips',
|
|
460
|
+
'tab',
|
|
461
|
+
'tabBarItems',
|
|
462
|
+
'tag',
|
|
463
|
+
'tbar',
|
|
464
|
+
'textAlign',
|
|
465
|
+
'textContent',
|
|
466
|
+
'tip',
|
|
467
|
+
'title',
|
|
468
|
+
'todayCls',
|
|
469
|
+
'tools',
|
|
470
|
+
'tooltip',
|
|
471
|
+
'trapFocus',
|
|
472
|
+
'type',
|
|
473
|
+
'ui',
|
|
474
|
+
'weekColumnHeader',
|
|
475
|
+
'weekendCls',
|
|
476
|
+
'weekRenderer',
|
|
477
|
+
'weekStartDay',
|
|
478
|
+
'weight',
|
|
479
|
+
'width',
|
|
480
|
+
'x',
|
|
481
|
+
'y'
|
|
482
|
+
]);
|
|
483
|
+
BryntumSchedulerDatePickerComponent.bryntumConfigsOnly = [
|
|
484
|
+
'activeDate',
|
|
485
|
+
'adopt',
|
|
486
|
+
'align',
|
|
487
|
+
'anchor',
|
|
488
|
+
'ariaDescription',
|
|
489
|
+
'ariaLabel',
|
|
490
|
+
'autoUpdateRecord',
|
|
491
|
+
'bbar',
|
|
492
|
+
'bodyCls',
|
|
493
|
+
'bubbleEvents',
|
|
494
|
+
'cellRenderer',
|
|
495
|
+
'centered',
|
|
496
|
+
'collapsible',
|
|
497
|
+
'color',
|
|
498
|
+
'config',
|
|
499
|
+
'constrainTo',
|
|
500
|
+
'contentElementCls',
|
|
501
|
+
'dataField',
|
|
502
|
+
'dayNameFormat',
|
|
503
|
+
'defaultBindProperty',
|
|
504
|
+
'defaultFocus',
|
|
505
|
+
'defaults',
|
|
506
|
+
'detectCSSCompatibilityIssues',
|
|
507
|
+
'disabledCls',
|
|
508
|
+
'disabledDates',
|
|
509
|
+
'disableNonWorkingDays',
|
|
510
|
+
'disableOtherMonthCells',
|
|
511
|
+
'disableWeekends',
|
|
512
|
+
'dock',
|
|
513
|
+
'draggable',
|
|
514
|
+
'drawer',
|
|
515
|
+
'editMonth',
|
|
516
|
+
'elementAttributes',
|
|
517
|
+
'eventFilter',
|
|
518
|
+
'eventStore',
|
|
519
|
+
'floating',
|
|
520
|
+
'focusDisabledDates',
|
|
521
|
+
'footer',
|
|
522
|
+
'header',
|
|
523
|
+
'headerRenderer',
|
|
524
|
+
'hideAnimation',
|
|
525
|
+
'hideOtherMonthCells',
|
|
526
|
+
'hideWhenEmpty',
|
|
527
|
+
'htmlCls',
|
|
528
|
+
'icon',
|
|
529
|
+
'ignoreParentReadOnly',
|
|
530
|
+
'includeYear',
|
|
531
|
+
'itemCls',
|
|
532
|
+
'lazyItems',
|
|
533
|
+
'listeners',
|
|
534
|
+
'localeClass',
|
|
535
|
+
'localizable',
|
|
536
|
+
'localizableProperties',
|
|
537
|
+
'maskDefaults',
|
|
538
|
+
'masked',
|
|
539
|
+
'maxDate',
|
|
540
|
+
'minColumnWidth',
|
|
541
|
+
'minDate',
|
|
542
|
+
'minRowHeight',
|
|
543
|
+
'monitorResize',
|
|
544
|
+
'month',
|
|
545
|
+
'monthButtonFormat',
|
|
546
|
+
'multiSelect',
|
|
547
|
+
'namedItems',
|
|
548
|
+
'nonWorkingDayCls',
|
|
549
|
+
'nonWorkingDays',
|
|
550
|
+
'otherMonthCls',
|
|
551
|
+
'owner',
|
|
552
|
+
'positioned',
|
|
553
|
+
'preventTooltipOnTouch',
|
|
554
|
+
'relayStoreEvents',
|
|
555
|
+
'ripple',
|
|
556
|
+
'rootElement',
|
|
557
|
+
'scrollAction',
|
|
558
|
+
'showAnimation',
|
|
559
|
+
'showEvents',
|
|
560
|
+
'showTooltipWhenDisabled',
|
|
561
|
+
'showWeekColumn',
|
|
562
|
+
'sixWeeks',
|
|
563
|
+
'stateful',
|
|
564
|
+
'statefulEvents',
|
|
565
|
+
'stateId',
|
|
566
|
+
'stateProvider',
|
|
567
|
+
'strips',
|
|
568
|
+
'tab',
|
|
569
|
+
'tabBarItems',
|
|
570
|
+
'tag',
|
|
571
|
+
'tbar',
|
|
572
|
+
'textAlign',
|
|
573
|
+
'textContent',
|
|
574
|
+
'tip',
|
|
575
|
+
'todayCls',
|
|
576
|
+
'trapFocus',
|
|
577
|
+
'type',
|
|
578
|
+
'ui',
|
|
579
|
+
'weekendCls',
|
|
580
|
+
'weekRenderer',
|
|
581
|
+
'weekStartDay',
|
|
582
|
+
'weight'
|
|
583
|
+
];
|
|
584
|
+
BryntumSchedulerDatePickerComponent.bryntumProps = BryntumSchedulerDatePickerComponent.bryntumFeatureNames.concat([
|
|
585
|
+
'alignSelf',
|
|
586
|
+
'anchorSize',
|
|
587
|
+
'animateTimeShift',
|
|
588
|
+
'appendTo',
|
|
589
|
+
'callOnFunctions',
|
|
590
|
+
'catchEventHandlerExceptions',
|
|
591
|
+
'cls',
|
|
592
|
+
'collapsed',
|
|
593
|
+
'column',
|
|
594
|
+
'content',
|
|
595
|
+
'dataset',
|
|
596
|
+
'date',
|
|
597
|
+
'disabled',
|
|
598
|
+
'dragSelect',
|
|
599
|
+
'extraData',
|
|
600
|
+
'flex',
|
|
601
|
+
'focusVisible',
|
|
602
|
+
'hasChanges',
|
|
603
|
+
'height',
|
|
604
|
+
'hidden',
|
|
605
|
+
'highlightSelectedWeek',
|
|
606
|
+
'html',
|
|
607
|
+
'id',
|
|
608
|
+
'inputFieldAlign',
|
|
609
|
+
'insertBefore',
|
|
610
|
+
'insertFirst',
|
|
611
|
+
'isSettingValues',
|
|
612
|
+
'isValid',
|
|
613
|
+
'items',
|
|
614
|
+
'keyMap',
|
|
615
|
+
'labelPosition',
|
|
616
|
+
'layout',
|
|
617
|
+
'layoutStyle',
|
|
618
|
+
'margin',
|
|
619
|
+
'maxHeight',
|
|
620
|
+
'maximizeOnMobile',
|
|
621
|
+
'maxWidth',
|
|
622
|
+
'minHeight',
|
|
623
|
+
'minWidth',
|
|
624
|
+
'parent',
|
|
625
|
+
'readOnly',
|
|
626
|
+
'record',
|
|
627
|
+
'rendition',
|
|
628
|
+
'rtl',
|
|
629
|
+
'scrollable',
|
|
630
|
+
'selection',
|
|
631
|
+
'shadePastDates',
|
|
632
|
+
'span',
|
|
633
|
+
'state',
|
|
634
|
+
'strictRecordMapping',
|
|
635
|
+
'title',
|
|
636
|
+
'tools',
|
|
637
|
+
'tooltip',
|
|
638
|
+
'values',
|
|
639
|
+
'weekColumnHeader',
|
|
640
|
+
'width',
|
|
641
|
+
'x',
|
|
642
|
+
'y'
|
|
643
|
+
]);
|
|
644
|
+
BryntumSchedulerDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumSchedulerDatePickerComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
645
|
+
BryntumSchedulerDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumSchedulerDatePickerComponent, selector: "bryntum-scheduler-date-picker", inputs: { activeDate: "activeDate", adopt: "adopt", align: "align", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", autoUpdateRecord: "autoUpdateRecord", bbar: "bbar", bodyCls: "bodyCls", bubbleEvents: "bubbleEvents", cellRenderer: "cellRenderer", centered: "centered", collapsible: "collapsible", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", dayNameFormat: "dayNameFormat", defaultBindProperty: "defaultBindProperty", defaultFocus: "defaultFocus", defaults: "defaults", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", disabledCls: "disabledCls", disabledDates: "disabledDates", disableNonWorkingDays: "disableNonWorkingDays", disableOtherMonthCells: "disableOtherMonthCells", disableWeekends: "disableWeekends", dock: "dock", draggable: "draggable", drawer: "drawer", editMonth: "editMonth", elementAttributes: "elementAttributes", eventFilter: "eventFilter", eventStore: "eventStore", floating: "floating", focusDisabledDates: "focusDisabledDates", footer: "footer", header: "header", headerRenderer: "headerRenderer", hideAnimation: "hideAnimation", hideOtherMonthCells: "hideOtherMonthCells", hideWhenEmpty: "hideWhenEmpty", htmlCls: "htmlCls", icon: "icon", ignoreParentReadOnly: "ignoreParentReadOnly", includeYear: "includeYear", itemCls: "itemCls", lazyItems: "lazyItems", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", maxDate: "maxDate", minColumnWidth: "minColumnWidth", minDate: "minDate", minRowHeight: "minRowHeight", monitorResize: "monitorResize", month: "month", monthButtonFormat: "monthButtonFormat", multiSelect: "multiSelect", namedItems: "namedItems", nonWorkingDayCls: "nonWorkingDayCls", nonWorkingDays: "nonWorkingDays", otherMonthCls: "otherMonthCls", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", showAnimation: "showAnimation", showEvents: "showEvents", showTooltipWhenDisabled: "showTooltipWhenDisabled", showWeekColumn: "showWeekColumn", sixWeeks: "sixWeeks", stateful: "stateful", statefulEvents: "statefulEvents", stateId: "stateId", stateProvider: "stateProvider", strips: "strips", tab: "tab", tabBarItems: "tabBarItems", tag: "tag", tbar: "tbar", textAlign: "textAlign", textContent: "textContent", tip: "tip", todayCls: "todayCls", trapFocus: "trapFocus", type: "type", ui: "ui", weekendCls: "weekendCls", weekRenderer: "weekRenderer", weekStartDay: "weekStartDay", weight: "weight", alignSelf: "alignSelf", animateTimeShift: "animateTimeShift", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsed: "collapsed", column: "column", content: "content", dataset: "dataset", date: "date", disabled: "disabled", dragSelect: "dragSelect", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", highlightSelectedWeek: "highlightSelectedWeek", html: "html", id: "id", inputFieldAlign: "inputFieldAlign", insertBefore: "insertBefore", insertFirst: "insertFirst", items: "items", keyMap: "keyMap", labelPosition: "labelPosition", layout: "layout", layoutStyle: "layoutStyle", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", readOnly: "readOnly", record: "record", rendition: "rendition", rtl: "rtl", scrollable: "scrollable", selection: "selection", shadePastDates: "shadePastDates", span: "span", strictRecordMapping: "strictRecordMapping", title: "title", tools: "tools", tooltip: "tooltip", weekColumnHeader: "weekColumnHeader", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", hasChanges: "hasChanges", isSettingValues: "isSettingValues", isValid: "isValid", parent: "parent", state: "state", values: "values" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeRefresh: "onBeforeRefresh", onBeforeSetRecord: "onBeforeSetRecord", onBeforeShow: "onBeforeShow", onBeforeStateApply: "onBeforeStateApply", onBeforeStateSave: "onBeforeStateSave", onCatchAll: "onCatchAll", onCellClick: "onCellClick", onCollapse: "onCollapse", onDateChange: "onDateChange", onDestroy: "onDestroy", onDirtyStateChange: "onDirtyStateChange", onElementCreated: "onElementCreated", onExpand: "onExpand", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onRefresh: "onRefresh", onResize: "onResize", onSelectionChange: "onSelectionChange", onShow: "onShow", onToolClick: "onToolClick", onWeekCellClick: "onWeekCellClick" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
646
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumSchedulerDatePickerComponent, decorators: [{
|
|
647
|
+
type: Component,
|
|
648
|
+
args: [{
|
|
649
|
+
selector: 'bryntum-scheduler-date-picker',
|
|
650
|
+
template: ''
|
|
651
|
+
}]
|
|
652
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { activeDate: [{
|
|
653
|
+
type: Input
|
|
654
|
+
}], adopt: [{
|
|
655
|
+
type: Input
|
|
656
|
+
}], align: [{
|
|
657
|
+
type: Input
|
|
658
|
+
}], anchor: [{
|
|
659
|
+
type: Input
|
|
660
|
+
}], ariaDescription: [{
|
|
661
|
+
type: Input
|
|
662
|
+
}], ariaLabel: [{
|
|
663
|
+
type: Input
|
|
664
|
+
}], autoUpdateRecord: [{
|
|
665
|
+
type: Input
|
|
666
|
+
}], bbar: [{
|
|
667
|
+
type: Input
|
|
668
|
+
}], bodyCls: [{
|
|
669
|
+
type: Input
|
|
670
|
+
}], bubbleEvents: [{
|
|
671
|
+
type: Input
|
|
672
|
+
}], cellRenderer: [{
|
|
673
|
+
type: Input
|
|
674
|
+
}], centered: [{
|
|
675
|
+
type: Input
|
|
676
|
+
}], collapsible: [{
|
|
677
|
+
type: Input
|
|
678
|
+
}], color: [{
|
|
679
|
+
type: Input
|
|
680
|
+
}], config: [{
|
|
681
|
+
type: Input
|
|
682
|
+
}], constrainTo: [{
|
|
683
|
+
type: Input
|
|
684
|
+
}], contentElementCls: [{
|
|
685
|
+
type: Input
|
|
686
|
+
}], dataField: [{
|
|
687
|
+
type: Input
|
|
688
|
+
}], dayNameFormat: [{
|
|
689
|
+
type: Input
|
|
690
|
+
}], defaultBindProperty: [{
|
|
691
|
+
type: Input
|
|
692
|
+
}], defaultFocus: [{
|
|
693
|
+
type: Input
|
|
694
|
+
}], defaults: [{
|
|
695
|
+
type: Input
|
|
696
|
+
}], detectCSSCompatibilityIssues: [{
|
|
697
|
+
type: Input
|
|
698
|
+
}], disabledCls: [{
|
|
699
|
+
type: Input
|
|
700
|
+
}], disabledDates: [{
|
|
701
|
+
type: Input
|
|
702
|
+
}], disableNonWorkingDays: [{
|
|
703
|
+
type: Input
|
|
704
|
+
}], disableOtherMonthCells: [{
|
|
705
|
+
type: Input
|
|
706
|
+
}], disableWeekends: [{
|
|
707
|
+
type: Input
|
|
708
|
+
}], dock: [{
|
|
709
|
+
type: Input
|
|
710
|
+
}], draggable: [{
|
|
711
|
+
type: Input
|
|
712
|
+
}], drawer: [{
|
|
713
|
+
type: Input
|
|
714
|
+
}], editMonth: [{
|
|
715
|
+
type: Input
|
|
716
|
+
}], elementAttributes: [{
|
|
717
|
+
type: Input
|
|
718
|
+
}], eventFilter: [{
|
|
719
|
+
type: Input
|
|
720
|
+
}], eventStore: [{
|
|
721
|
+
type: Input
|
|
722
|
+
}], floating: [{
|
|
723
|
+
type: Input
|
|
724
|
+
}], focusDisabledDates: [{
|
|
725
|
+
type: Input
|
|
726
|
+
}], footer: [{
|
|
727
|
+
type: Input
|
|
728
|
+
}], header: [{
|
|
729
|
+
type: Input
|
|
730
|
+
}], headerRenderer: [{
|
|
731
|
+
type: Input
|
|
732
|
+
}], hideAnimation: [{
|
|
733
|
+
type: Input
|
|
734
|
+
}], hideOtherMonthCells: [{
|
|
735
|
+
type: Input
|
|
736
|
+
}], hideWhenEmpty: [{
|
|
737
|
+
type: Input
|
|
738
|
+
}], htmlCls: [{
|
|
739
|
+
type: Input
|
|
740
|
+
}], icon: [{
|
|
741
|
+
type: Input
|
|
742
|
+
}], ignoreParentReadOnly: [{
|
|
743
|
+
type: Input
|
|
744
|
+
}], includeYear: [{
|
|
745
|
+
type: Input
|
|
746
|
+
}], itemCls: [{
|
|
747
|
+
type: Input
|
|
748
|
+
}], lazyItems: [{
|
|
749
|
+
type: Input
|
|
750
|
+
}], listeners: [{
|
|
751
|
+
type: Input
|
|
752
|
+
}], localeClass: [{
|
|
753
|
+
type: Input
|
|
754
|
+
}], localizable: [{
|
|
755
|
+
type: Input
|
|
756
|
+
}], localizableProperties: [{
|
|
757
|
+
type: Input
|
|
758
|
+
}], maskDefaults: [{
|
|
759
|
+
type: Input
|
|
760
|
+
}], masked: [{
|
|
761
|
+
type: Input
|
|
762
|
+
}], maxDate: [{
|
|
763
|
+
type: Input
|
|
764
|
+
}], minColumnWidth: [{
|
|
765
|
+
type: Input
|
|
766
|
+
}], minDate: [{
|
|
767
|
+
type: Input
|
|
768
|
+
}], minRowHeight: [{
|
|
769
|
+
type: Input
|
|
770
|
+
}], monitorResize: [{
|
|
771
|
+
type: Input
|
|
772
|
+
}], month: [{
|
|
773
|
+
type: Input
|
|
774
|
+
}], monthButtonFormat: [{
|
|
775
|
+
type: Input
|
|
776
|
+
}], multiSelect: [{
|
|
777
|
+
type: Input
|
|
778
|
+
}], namedItems: [{
|
|
779
|
+
type: Input
|
|
780
|
+
}], nonWorkingDayCls: [{
|
|
781
|
+
type: Input
|
|
782
|
+
}], nonWorkingDays: [{
|
|
783
|
+
type: Input
|
|
784
|
+
}], otherMonthCls: [{
|
|
785
|
+
type: Input
|
|
786
|
+
}], owner: [{
|
|
787
|
+
type: Input
|
|
788
|
+
}], positioned: [{
|
|
789
|
+
type: Input
|
|
790
|
+
}], preventTooltipOnTouch: [{
|
|
791
|
+
type: Input
|
|
792
|
+
}], relayStoreEvents: [{
|
|
793
|
+
type: Input
|
|
794
|
+
}], ripple: [{
|
|
795
|
+
type: Input
|
|
796
|
+
}], rootElement: [{
|
|
797
|
+
type: Input
|
|
798
|
+
}], scrollAction: [{
|
|
799
|
+
type: Input
|
|
800
|
+
}], showAnimation: [{
|
|
801
|
+
type: Input
|
|
802
|
+
}], showEvents: [{
|
|
803
|
+
type: Input
|
|
804
|
+
}], showTooltipWhenDisabled: [{
|
|
805
|
+
type: Input
|
|
806
|
+
}], showWeekColumn: [{
|
|
807
|
+
type: Input
|
|
808
|
+
}], sixWeeks: [{
|
|
809
|
+
type: Input
|
|
810
|
+
}], stateful: [{
|
|
811
|
+
type: Input
|
|
812
|
+
}], statefulEvents: [{
|
|
813
|
+
type: Input
|
|
814
|
+
}], stateId: [{
|
|
815
|
+
type: Input
|
|
816
|
+
}], stateProvider: [{
|
|
817
|
+
type: Input
|
|
818
|
+
}], strips: [{
|
|
819
|
+
type: Input
|
|
820
|
+
}], tab: [{
|
|
821
|
+
type: Input
|
|
822
|
+
}], tabBarItems: [{
|
|
823
|
+
type: Input
|
|
824
|
+
}], tag: [{
|
|
825
|
+
type: Input
|
|
826
|
+
}], tbar: [{
|
|
827
|
+
type: Input
|
|
828
|
+
}], textAlign: [{
|
|
829
|
+
type: Input
|
|
830
|
+
}], textContent: [{
|
|
831
|
+
type: Input
|
|
832
|
+
}], tip: [{
|
|
833
|
+
type: Input
|
|
834
|
+
}], todayCls: [{
|
|
835
|
+
type: Input
|
|
836
|
+
}], trapFocus: [{
|
|
837
|
+
type: Input
|
|
838
|
+
}], type: [{
|
|
839
|
+
type: Input
|
|
840
|
+
}], ui: [{
|
|
841
|
+
type: Input
|
|
842
|
+
}], weekendCls: [{
|
|
843
|
+
type: Input
|
|
844
|
+
}], weekRenderer: [{
|
|
845
|
+
type: Input
|
|
846
|
+
}], weekStartDay: [{
|
|
847
|
+
type: Input
|
|
848
|
+
}], weight: [{
|
|
849
|
+
type: Input
|
|
850
|
+
}], alignSelf: [{
|
|
851
|
+
type: Input
|
|
852
|
+
}], animateTimeShift: [{
|
|
853
|
+
type: Input
|
|
854
|
+
}], appendTo: [{
|
|
855
|
+
type: Input
|
|
856
|
+
}], callOnFunctions: [{
|
|
857
|
+
type: Input
|
|
858
|
+
}], catchEventHandlerExceptions: [{
|
|
859
|
+
type: Input
|
|
860
|
+
}], cls: [{
|
|
861
|
+
type: Input
|
|
862
|
+
}], collapsed: [{
|
|
863
|
+
type: Input
|
|
864
|
+
}], column: [{
|
|
865
|
+
type: Input
|
|
866
|
+
}], content: [{
|
|
867
|
+
type: Input
|
|
868
|
+
}], dataset: [{
|
|
869
|
+
type: Input
|
|
870
|
+
}], date: [{
|
|
871
|
+
type: Input
|
|
872
|
+
}], disabled: [{
|
|
873
|
+
type: Input
|
|
874
|
+
}], dragSelect: [{
|
|
875
|
+
type: Input
|
|
876
|
+
}], extraData: [{
|
|
877
|
+
type: Input
|
|
878
|
+
}], flex: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}], height: [{
|
|
881
|
+
type: Input
|
|
882
|
+
}], hidden: [{
|
|
883
|
+
type: Input
|
|
884
|
+
}], highlightSelectedWeek: [{
|
|
885
|
+
type: Input
|
|
886
|
+
}], html: [{
|
|
887
|
+
type: Input
|
|
888
|
+
}], id: [{
|
|
889
|
+
type: Input
|
|
890
|
+
}], inputFieldAlign: [{
|
|
891
|
+
type: Input
|
|
892
|
+
}], insertBefore: [{
|
|
893
|
+
type: Input
|
|
894
|
+
}], insertFirst: [{
|
|
895
|
+
type: Input
|
|
896
|
+
}], items: [{
|
|
897
|
+
type: Input
|
|
898
|
+
}], keyMap: [{
|
|
899
|
+
type: Input
|
|
900
|
+
}], labelPosition: [{
|
|
901
|
+
type: Input
|
|
902
|
+
}], layout: [{
|
|
903
|
+
type: Input
|
|
904
|
+
}], layoutStyle: [{
|
|
905
|
+
type: Input
|
|
906
|
+
}], margin: [{
|
|
907
|
+
type: Input
|
|
908
|
+
}], maxHeight: [{
|
|
909
|
+
type: Input
|
|
910
|
+
}], maximizeOnMobile: [{
|
|
911
|
+
type: Input
|
|
912
|
+
}], maxWidth: [{
|
|
913
|
+
type: Input
|
|
914
|
+
}], minHeight: [{
|
|
915
|
+
type: Input
|
|
916
|
+
}], minWidth: [{
|
|
917
|
+
type: Input
|
|
918
|
+
}], readOnly: [{
|
|
919
|
+
type: Input
|
|
920
|
+
}], record: [{
|
|
921
|
+
type: Input
|
|
922
|
+
}], rendition: [{
|
|
923
|
+
type: Input
|
|
924
|
+
}], rtl: [{
|
|
925
|
+
type: Input
|
|
926
|
+
}], scrollable: [{
|
|
927
|
+
type: Input
|
|
928
|
+
}], selection: [{
|
|
929
|
+
type: Input
|
|
930
|
+
}], shadePastDates: [{
|
|
931
|
+
type: Input
|
|
932
|
+
}], span: [{
|
|
933
|
+
type: Input
|
|
934
|
+
}], strictRecordMapping: [{
|
|
935
|
+
type: Input
|
|
936
|
+
}], title: [{
|
|
937
|
+
type: Input
|
|
938
|
+
}], tools: [{
|
|
939
|
+
type: Input
|
|
940
|
+
}], tooltip: [{
|
|
941
|
+
type: Input
|
|
942
|
+
}], weekColumnHeader: [{
|
|
943
|
+
type: Input
|
|
944
|
+
}], width: [{
|
|
945
|
+
type: Input
|
|
946
|
+
}], x: [{
|
|
947
|
+
type: Input
|
|
948
|
+
}], y: [{
|
|
949
|
+
type: Input
|
|
950
|
+
}], anchorSize: [{
|
|
951
|
+
type: Input
|
|
952
|
+
}], focusVisible: [{
|
|
953
|
+
type: Input
|
|
954
|
+
}], hasChanges: [{
|
|
955
|
+
type: Input
|
|
956
|
+
}], isSettingValues: [{
|
|
957
|
+
type: Input
|
|
958
|
+
}], isValid: [{
|
|
959
|
+
type: Input
|
|
960
|
+
}], parent: [{
|
|
961
|
+
type: Input
|
|
962
|
+
}], state: [{
|
|
963
|
+
type: Input
|
|
964
|
+
}], values: [{
|
|
965
|
+
type: Input
|
|
966
|
+
}], onBeforeDestroy: [{
|
|
967
|
+
type: Output
|
|
968
|
+
}], onBeforeHide: [{
|
|
969
|
+
type: Output
|
|
970
|
+
}], onBeforeRefresh: [{
|
|
971
|
+
type: Output
|
|
972
|
+
}], onBeforeSetRecord: [{
|
|
973
|
+
type: Output
|
|
974
|
+
}], onBeforeShow: [{
|
|
975
|
+
type: Output
|
|
976
|
+
}], onBeforeStateApply: [{
|
|
977
|
+
type: Output
|
|
978
|
+
}], onBeforeStateSave: [{
|
|
979
|
+
type: Output
|
|
980
|
+
}], onCatchAll: [{
|
|
981
|
+
type: Output
|
|
982
|
+
}], onCellClick: [{
|
|
983
|
+
type: Output
|
|
984
|
+
}], onCollapse: [{
|
|
985
|
+
type: Output
|
|
986
|
+
}], onDateChange: [{
|
|
987
|
+
type: Output
|
|
988
|
+
}], onDestroy: [{
|
|
989
|
+
type: Output
|
|
990
|
+
}], onDirtyStateChange: [{
|
|
991
|
+
type: Output
|
|
992
|
+
}], onElementCreated: [{
|
|
993
|
+
type: Output
|
|
994
|
+
}], onExpand: [{
|
|
995
|
+
type: Output
|
|
996
|
+
}], onFocusIn: [{
|
|
997
|
+
type: Output
|
|
998
|
+
}], onFocusOut: [{
|
|
999
|
+
type: Output
|
|
1000
|
+
}], onHide: [{
|
|
1001
|
+
type: Output
|
|
1002
|
+
}], onPaint: [{
|
|
1003
|
+
type: Output
|
|
1004
|
+
}], onReadOnly: [{
|
|
1005
|
+
type: Output
|
|
1006
|
+
}], onRecompose: [{
|
|
1007
|
+
type: Output
|
|
1008
|
+
}], onRefresh: [{
|
|
1009
|
+
type: Output
|
|
1010
|
+
}], onResize: [{
|
|
1011
|
+
type: Output
|
|
1012
|
+
}], onSelectionChange: [{
|
|
1013
|
+
type: Output
|
|
1014
|
+
}], onShow: [{
|
|
1015
|
+
type: Output
|
|
1016
|
+
}], onToolClick: [{
|
|
1017
|
+
type: Output
|
|
1018
|
+
}], onWeekCellClick: [{
|
|
1019
|
+
type: Output
|
|
1020
|
+
}] } });
|
|
1021
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1zY2hlZHVsZXItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1zY2hlZHVsZXItZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBb1ksTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOWEsT0FBTyxFQUF3RixtQkFBbUIsRUFBZ0MsTUFBTSx5QkFBeUIsQ0FBQzs7QUE2NUJsTCxNQUFNLE9BQU8sbUNBQW1DO0lBK1c1QyxZQUFZLE9BQW1CO1FBVHZCLGtCQUFhLEdBQUc7WUFDcEIsS0FBSyxFQUFjLFNBQVM7WUFDNUIsUUFBUSxFQUFXLFNBQVM7WUFDNUIsSUFBSSxFQUFlLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUcsSUFBSTtZQUN2QixRQUFRLEVBQVcsRUFBRTtZQUNyQixTQUFTLEVBQVUsRUFBRTtTQUN4QixDQUFDO1FBc0xGLGtCQUFrQjtRQUNsQjs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUN0Rzs7Ozs7O1dBTUc7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBa0UsQ0FBQztRQUN0SDs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBNkUsQ0FBQztRQUM1SDs7OztXQUlHO1FBQ08sdUJB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c0JBQXBCLE1BQU07Z0JBSUcsU0FBUztzQkFBbEIsTUFBTTtnQkFVRyxRQUFRO3NCQUFqQixNQUFNO2dCQVNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBT0csV0FBVztzQkFBcEIsTUFBTTtnQkFRRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4vKipcbiAqIEFuZ3VsYXIgd3JhcHBlciBmb3IgQnJ5bnR1bSBTY2hlZHVsZXJEYXRlUGlja2VyXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFsaWduU3BlYywgQmFzZSwgQ2FsZW5kYXJQYW5lbCwgQ29udGFpbmVyLCBEYXRlUGlja2VyLCBEb21Db25maWcsIEtleU1hcENvbmZpZywgTGF5b3V0LCBNYXNrQ29uZmlnLCBNZW51SXRlbUNvbmZpZywgTWVudUl0ZW1FbnRyeSwgTW9kZWwsIE1vbnRoLCBNb250aENvbmZpZywgUGFnaW5nVG9vbGJhckNvbmZpZywgUGFuZWwsIFBhbmVsQ29sbGFwc2VyQ29uZmlnLCBQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWcsIFBhbmVsSGVhZGVyLCBSZWN0YW5nbGUsIFNjcm9sbGVyLCBTY3JvbGxlckNvbmZpZywgU3RhdGVQcm92aWRlciwgVGFiQ29uZmlnLCBUb29sLCBUb29sQ29uZmlnLCBUb29sYmFyQ29uZmlnLCBUb29sYmFySXRlbXMsIFRvb2x0aXBDb25maWcsIFZ1ZUNvbmZpZywgV2lkZ2V0IH0gZnJvbSAnQGJyeW50dW0vY29yZS10aGluJztcbmltcG9ydCB7IFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWcsIFNjaGVkdWxlckNvbnRhaW5lckxheW91dENvbmZpZywgRXZlbnRNb2RlbCwgRXZlbnRTdG9yZSwgU2NoZWR1bGVyRGF0ZVBpY2tlciwgU2NoZWR1bGVyRGF0ZVBpY2tlckxpc3RlbmVycyB9IGZyb20gJ0BicnludHVtL3NjaGVkdWxlci10aGluJztcblxuaW1wb3J0IHsgU3RyaW5nSGVscGVyIH0gZnJvbSAnQGJyeW50dW0vY29yZS10aGluJztcblxuZXhwb3J0IHR5cGUgQnJ5bnR1bVNjaGVkdWxlckRhdGVQaWNrZXJQcm9wcyA9IHtcbiAgICAvLyBDb25maWdzXG4gICAgLyoqXG4gICAgICogVGhlIGRhdGUgdGhhdCB0aGUgdXNlciBoYXMgbmF2aWdhdGVkIHRvIHVzaW5nIHRoZSBVSSAqcHJpb3IqIHRvIHNldHRpbmcgdGhlIHdpZGdldCdzXG4gICAgICogdmFsdWUgYnkgc2VsZWN0aW5nIGl0LiBUaGUgaW5pdGlhbCBkZWZhdWx0IGlzIHRvZGF5J3MgZGF0ZS4gQ2FuIGFsc28gYmUgc3VwcGxpZWQgYXMgYSBgWVlZWS1NTS1ERGAgZGF0ZVxuICAgICAqIHN0cmluZy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1hY3RpdmVEYXRlKVxuICAgICAqL1xuICAgIGFjdGl2ZURhdGUgPyA6IERhdGV8J3RvZGF5J3xzdHJpbmdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBhZG9wdCBhcyB0aGlzIFdpZGdldCdzIGVuY2Fwc3VsYXRpbmcgZWxlbWVudC4gVGhlIHdpZGdldCdzXG4gICAgICogY29udGVudCB3aWxsIGJlIHBsYWNlZCBpbnNpZGUgdGhpcyBlbGVtZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWFkb3B0KVxuICAgICAqL1xuICAgIGFkb3B0ID8gOiBIVE1MRWxlbWVudHxzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1hbGlnbilcbiAgICAgKi9cbiAgICBhbGlnbiA/IDogQWxpZ25TcGVjfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFthbGlnbi1zZWxmXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvYWxpZ24tc2VsZikgc3R5bGUuXG4gICAgICovXG4gICAgYWxpZ25TZWxmID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIGFuZCBiZWluZyBzaG93biB0aHJvdWdoIFtzaG93QnldKCNDb3JlL3dpZGdldC9XaWRnZXQjZnVuY3Rpb24tc2hvd0J5KS4qXG4gICAgICogYHRydWVgIHRvIHNob3cgYSBjb25uZWN0b3IgYXJyb3cgcG9pbnRpbmcgdG8gdGhlIGFsaWduIHRhcmdldC5cbiAgICAgKi9cbiAgICBhbmNob3IgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB3aGVuIG5hdmlnYXRpbmcgdGhyb3VnaCB0aW1lLCB0aGUgbmV4dCB0aW1lXG4gICAgICogYmxvY2sgd2lsbCBiZSBhbmltYXRlZCBpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctYW5pbWF0ZVRpbWVTaGlmdClcbiAgICAgKi9cbiAgICBhbmltYXRlVGltZVNoaWZ0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWxlbWVudCAob3IgdGhlIGlkIG9mIGFuIGVsZW1lbnQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgdG8uIENhbiBiZSBjb25maWd1cmVkLCBvciBzZXQgb25jZSBhdFxuICAgICAqIHJ1bnRpbWUuIFRvIGFjY2VzcyB0aGUgZWxlbWVudCBvZiBhIHJlbmRlcmVkIHdpZGdldCwgc2VlIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkuXG4gICAgICovXG4gICAgYXBwZW5kVG8gPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0XG4gICAgICogaW50byBhbiBlbGVtZW50IHdoaWNoIHdpbGwgYmUgbGlua2VkIHVzaW5nIHRoZSBgYXJpYS1kZXNjcmliZWRieWAgYXR0cmlidXRlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWFyaWFEZXNjcmlwdGlvbilcbiAgICAgKi9cbiAgICBhcmlhRGVzY3JpcHRpb24gPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxpemFibGUgc3RyaW5nIChNYXkgY29udGFpbiBgJ0x7fSdgIHRva2VucyB3aGljaCByZXNvbHZlIGluIHRoZSBsb2NhbGUgZmlsZSkgdG8gaW5qZWN0IGFzXG4gICAgICogdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctYXJpYUxhYmVsKVxuICAgICAqL1xuICAgIGFyaWFMYWJlbCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFzc2lnbmVkIFtyZWNvcmRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctcmVjb3JkKSBhdXRvbWF0aWNhbGx5IG9uIGZpZWxkIGNoYW5nZXNcbiAgICAgKi9cbiAgICBhdXRvVXBkYXRlUmVjb3JkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci4gQW5vdGhlciB3YXkgdG8gYWRkIGEgYmJhciBpcyB0byB1c2UgW3N0cmlwc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLXN0cmlwcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctYmJhcilcbiAgICAgKi9cbiAgICBiYmFyID8gOiAoU2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBwYW5lbCdzIGJvZHkgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1ib2R5Q2xzKVxuICAgICAqL1xuICAgIGJvZHlDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWJ1YmJsZUV2ZW50cylcbiAgICAgKi9cbiAgICBidWJibGVFdmVudHMgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIChvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uKSB3aGljaCBjcmVhdGVzIGNvbnRlbnQgaW4sIGFuZCBtYXkgbXV0YXRlIGEgZGF5IGNlbGwgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1jZWxsUmVuZGVyZXIpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHJlbmRlckRhdGFcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZW5kZXJEYXRhLmNlbGwgVGhlIGNlbGwncyBlbmNhcHN1bGF0aW5nIGVsZW1lbnQuIFRoaXMgaGFzIHRoZSBgYi1jYWxlbmRhci1wYW5lbC1jZWxsYCBjbGFzcyBhbmQgaXMgdGhlIGVsZW1lbnQgd2hpY2ggcmVjZWl2ZXMgZm9jdXMsIHNvIHRoaXMgc2hvdWxkIGJlIHRoZSB0YXJnZXQgb2YgYW55IGFjY2Vzc2liaWxpdHkgYXR0cmlidXRlcy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZW5kZXJEYXRhLmlubmVyQ2VsbCBUaGUgaW5uZXIgZWxlbWVudCBvZiB0aGUgY2VsbCB3aGljaCBjb250YWlucyB0aGUgZGF0ZSBudW1iZXIuIFRoaXMgaXMgdGhlIGBhc3BlY3QtcmF0aW8gOiAxYCBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBkYXRlLiBJdCBpcyBub3QgcmVjb21tZW5lZGVkIHRvIG11dGF0ZSB0aGlzIGVsZW1lbnQuIEluc3RlYWQgdXNlIHRoZSBgY2VsbFBheWxvYWRgIGVsZW1lbnQgKHNlZSBiZWxvdykuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVuZGVyRGF0YS5jZWxsUGF5bG9hZCBBbiBlbXB0eSwgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnQsIGJ5IGRlZmF1bHQgZG9ja2VkIGF0IHRoZSBib3R0b20gb2YgdGhlIGNlbGwuIENvbnRlbnQgbWF5IGJlIGFkZGVkIHRvIHRoaXMgZWxlbWVudCB0byBhdWdtZW50IGNlbGwgY29udGVudC5cbiAgICAgKiBAcGFyYW0ge0RhdGV9IHJlbmRlckRhdGEuZGF0ZSBUaGUgZGF0ZSBmb3IgdGhlIGNlbGxcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVuZGVyRGF0YS5kYXkgVGhlIGRheSBmb3IgdGhlIGNlbGwgKGAwYCB0byBgNmAgZm9yIFN1bmRheSB0byBTYXR1cmRheSlcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSByZW5kZXJEYXRhLnJvd0luZGV4IFRoZSByb3cgaW5kZXgsIDAgdG8gbW9udGggcm93IGNvdW50ICg2IGlmIFtzaXhXZWVrc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvRGF0ZVBpY2tlciNjb25maWctc2l4V2Vla3MpIGlzIGB0cnVlYClcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZW5kZXJEYXRhLnJvdyBUaGUgcm93IGVsZW1lbnQgZW5jYXBzdWxhdGluZyB0aGUgd2VlayB3aGljaCB0aGUgY2VsbCBpcyBhIHBhcnQgb2ZcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNhbGVuZGFyUGFuZWx9IHJlbmRlckRhdGEuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcmVuZGVyZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSByZW5kZXJEYXRhLmNlbGxJbmRleCBUaGUgY2VsbCBpbmRleCBpbiB0aGUgd2hvbGUgcGFuZWwuIE1heSBiZSBmcm9tIGAwYCB0byB1cCB0byBgNDJgXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gcmVuZGVyRGF0YS5jb2x1bW5JbmRleCBUaGUgY29sdW1uIGluZGV4LCBgMGAgdG8gYDZgXG4gICAgICogQHBhcmFtIHtudW1iZXJbXX0gcmVuZGVyRGF0YS52aXNpYmxlQ29sdW1uSW5kZXggVGhlIHZpc2libGUgY29sdW1uIGluZGV4IHRha2luZyBoaWRkZW4gbm9uIHdvcmtpbmcgZGF5cyBpbnRvIGFjY291bnRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLERvbUNvbmZpZyx2b2lkfVxuICAgICAqL1xuICAgIGNlbGxSZW5kZXJlciA/IDogKChyZW5kZXJEYXRhOiB7IGNlbGw6IEhUTUxFbGVtZW50LCBpbm5lckNlbGw6IEhUTUxFbGVtZW50LCBjZWxsUGF5bG9hZDogSFRNTEVsZW1lbnQsIGRhdGU6IERhdGUsIGRheTogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyW10sIHJvdzogSFRNTEVsZW1lbnQsIHNvdXJjZTogQ2FsZW5kYXJQYW5lbCwgY2VsbEluZGV4OiBudW1iZXJbXSwgY29sdW1uSW5kZXg6IG51bWJlcltdLCB2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlcltdIH0pID0+IHN0cmluZ3xEb21Db25maWd8dm9pZCl8c3RyaW5nXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjZW50cmUgdGhlIFdpZGdldCBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGNlbnRlcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byBlbGVtZW50LlxuICAgICAqIE1heSBiZSBzcGVjaWZpZWQgYXMgYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nLCBvciBhcyBhbiBvYmplY3QgaW4gd2hpY2ggcHJvcGVydHkgbmFtZXNcbiAgICAgKiB3aXRoIHRydXRoeSB2YWx1ZXMgYXJlIHVzZWQgYXMgdGhlIGNsYXNzIG5hbWVzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWNscylcbiAgICAgKi9cbiAgICBjbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBwYW5lbCBpcyBjb2xsYXBzZWQgKHRoZSBib2R5IG9mIHRoZSBwYW5lbCBpcyBoaWRkZW4gd2hpbGUgb25seSB0aGUgaGVhZGVyIGlzXG4gICAgICogdmlzaWJsZSkuIE9ubHkgdmFsaWQgaWYgdGhlIHBhbmVsIGlzIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKS5cbiAgICAgKi9cbiAgICBjb2xsYXBzZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBlbmFibGVzIGNvbGxhcHNpYmlsaXR5IGZvciB0aGUgcGFuZWwuIFNlZSBbY29sbGFwc2VkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2VkKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1jb2xsYXBzaWJsZSlcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZSA/IDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWdcbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBzcGVjaWZpZWQgY29sb3IgdG8gdGhlIHdpZGdldCwgYnkgc2V0dGluZyB0aGUgYC0tYi1wcmltYXJ5YCBDU1MgdmFyaWFibGUgaW4gdGhlIHdpZGdldHNcbiAgICAgKiBgc3R5bGVgIGJsb2NrLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWNvbG9yKVxuICAgICAqL1xuICAgIGNvbG9yID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIHdoaWNoIGNvbHVtbiB0byBzdGFydCBpbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBjb2x1bW4gPyA6IG51bWJlclxuICAgIGNvbmZpZyA/IDogb2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKSBvciBbcG9zaXRpb25lZF0oI0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctcG9zaXRpb25lZCkuKlxuICAgICAqIEVsZW1lbnQsIFdpZGdldCBvciBSZWN0YW5nbGUgdG8gd2hpY2ggdGhpcyBXaWRnZXQgaXMgY29uc3RyYWluZWQuXG4gICAgICovXG4gICAgY29uc3RyYWluVG8gPyA6IEhUTUxFbGVtZW50fFdpZGdldHxSZWN0YW5nbGVcbiAgICAvKipcbiAgICAgKiBUaGUgSFRNTCBjb250ZW50IHRoYXQgY29leGlzdHMgd2l0aCBzaWJsaW5nIGVsZW1lbnRzIHdoaWNoIG1heSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlXG4gICAgICogW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpIGJ5IHBsdWdpbnMgYW5kIGZlYXR1cmVzLlxuICAgICAqIFdoZW4gc3BlY2lmeWluZyBodG1sLCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgd2lsbCBhbHNvIGhhdmUgdGhlIFtodG1sQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWh0bWxDbHMpXG4gICAgICogY2xhc3MgYWRkZWQgdG8gaXRzIGNsYXNzTGlzdCwgdG8gYWxsb3cgdGFyZ2V0ZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjb250ZW50ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIHRoZSBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCkuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctY29udGVudEVsZW1lbnRDbHMpXG4gICAgICovXG4gICAgY29udGVudEVsZW1lbnRDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgV2lkZ2V0IGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0aGUgR3JpZCdzIFJvd0V4cGFuZGVyIGZlYXR1cmUncyBgd2lkZ2V0YCBjb25maWcsIHByb3ZpZGUgdGhlXG4gICAgICogZmllbGQgb24gdGhlIGV4cGFuZGVkIHJlY29yZCB0byB1c2UgZm9yIHBvcHVsYXRpbmcgdGhpcyB3aWRnZXQncyBzdG9yZSAoaWYgYXBwbGljYWJsZSlcbiAgICAgKi9cbiAgICBkYXRhRmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIE9iamVjdCB0byBhcHBseSB0byBlbGVtZW50cyBkYXRhc2V0IChlYWNoIGtleSB3aWxsIGJlIHVzZWQgYXMgYSBkYXRhLWF0dHJpYnV0ZSBvbiB0aGUgZWxlbWVudClcbiAgICAgKi9cbiAgICBkYXRhc2V0ID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgLyoqXG4gICAgICogVGhlIGluaXRpYWxseSBzZWxlY3RlZCBkYXRlIChvciBhIGBZWVlZLU1NLUREYCBkYXRlIHN0cmluZykuXG4gICAgICovXG4gICAgZGF0ZSA/IDogRGF0ZXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgW0RhdGVIZWxwZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIpIGZvcm1hdCBzdHJpbmcgdG8gZm9ybWF0IHRoZSBkYXkgbmFtZXMuXG4gICAgICovXG4gICAgZGF5TmFtZUZvcm1hdCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldCB3aGVuIGEgc2luZ2xlIHZhbHVlIGlzIHRvIGJlIGFwcGxpZWQgdG8gdGhpcyBXaWRnZXQuIFN1Y2ggYXMgd2hlbiB1c2VkXG4gICAgICogaW4gYSBncmlkIFdpZGdldENvbHVtbiwgdGhpcyBpcyB0aGUgcHJvcGVydHkgdG8gd2hpY2ggdGhlIGNvbHVtbidzIGBmaWVsZGAgaXMgYXBwbGllZC5cbiAgICAgKi9cbiAgICBkZWZhdWx0QmluZFByb3BlcnR5ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBIFtxdWVyeV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2Z1bmN0aW9uLXF1ZXJ5KSBzZWxlY3RvciBmdW5jdGlvbiB3aGljaCBjYW4gaWRlbnRpZnkgdGhlIGRlc2NlbmRhbnQgd2lkZ2V0IHRvIHdoaWNoXG4gICAgICogZm9jdXMgc2hvdWxkIGJlIGRpcmVjdGVkIGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctZGVmYXVsdEZvY3VzKVxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSB3aWRnZXQgV2lkZ2V0IHBhc3NlZCB0byBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1dGh5IHZhbHVlIGlmIHdpZGdldCBpcyB0aGUgZGVmYXVsdCBvbmVcbiAgICAgKi9cbiAgICBkZWZhdWx0Rm9jdXMgPyA6ICgod2lkZ2V0OiBXaWRnZXQpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIG9iamVjdCBjb250YWluaW5nIGRlZmF1bHQgc2V0dGluZ3MgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICovXG4gICAgZGVmYXVsdHMgPyA6IFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWdcbiAgICAvKipcbiAgICAgKiBDaGVjayBmb3IgQ1NTIGNvbXBhdGliaWxpdHkgaXNzdWVzIHdoZW4gdXBncmFkaW5nIHRvIHY3LiBQZXJmb3JtcyB0aGUgZm9sbG93aW5nIGNoZWNrczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1kZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzKVxuICAgICAqL1xuICAgIGRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgd2lkZ2V0LiBJdCBpcyBzaW1pbGFyIHRvIFtyZWFkT25seV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBUaGUgY2xhc3MgbmFtZSB0byBhZGQgdG8gZGlzYWJsZWQgY2FsZW5kYXIgY2VsbHMuXG4gICAgICovXG4gICAgZGlzYWJsZWRDbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVpdGhlciBhbiBhcnJheSBvZiBgRGF0ZWAgb2JqZWN0cyB3aGljaCBhcmUgdG8gYmUgZGlzYWJsZWQgKG9yIGRhdGUgc3RyaW5ncyksIG9yXG4gICAgICogYSBmdW5jdGlvbiAob3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbiksIHdoaWNoLCB3aGVuIHBhc3NlZCBhIGBEYXRlYCByZXR1cm5zIGB0cnVlYCBpZiB0aGVcbiAgICAgKiBkYXRlIGlzIGRpc2FibGVkLiBEaXNhYmxlZCBkYXRlcyBjYW5ub3QgYmUgaW50ZXJhY3RlZCB3aXRoLlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlIHRvIGNoZWNrXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm92aWRlZCBkYXRlIGlzIGRpc2FibGVkXG4gICAgICovXG4gICAgZGlzYWJsZWREYXRlcyA/IDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKXxzdHJpbmd8RGF0ZVtdfHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byByZW5kZXIgbm9uIHdvcmtpbmcgZGF5cyBhcyBbZGlzYWJsZWREYXRlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ2FsZW5kYXJQYW5lbCNjb25maWctZGlzYWJsZWREYXRlcykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctZGlzYWJsZU5vbldvcmtpbmdEYXlzKVxuICAgICAqL1xuICAgIGRpc2FibGVOb25Xb3JraW5nRGF5cyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB0aGlzIGFzIHRydWUgdG8gZGlzYWJsZSBwb2ludGVyIGludGVyYWN0aW9uIHdpdGggY2VsbHMgd2hpY2ggYXJlIG91dHNpZGUgdGhlXG4gICAgICogcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAgICovXG4gICAgZGlzYWJsZU90aGVyTW9udGhDZWxscyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gcmVuZGVyIFNhdHVyZGF5cyBhbmQgU3VuZGF5cyBhcyBbZGlzYWJsZWREYXRlc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ2FsZW5kYXJQYW5lbCNjb25maWctZGlzYWJsZWREYXRlcykuXG4gICAgICovXG4gICAgZGlzYWJsZVdlZWtlbmRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29udHJvbHMgdGhlIHBsYWNlbWVudCBvZiB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgW3BhbmVsJ3MgXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbClcbiAgICAgKiBbc3RyaXBzIGNvbGxlY3Rpb25dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBiZSBhYmxlIHRvIGRyYWcgYSB3aWRnZXQgZnJlZWx5IG9uIHRoZSBwYWdlLiBPciBzZXQgdG8gYW4gb2JqZWN0IHdpdGggYSDCtGhhbmRsZVNlbGVjdG9ywrRcbiAgICAgKiBwcm9wZXJ0eSB3aGljaCBjb250cm9scyB3aGVuIGEgZHJhZyBzaG91bGQgc3RhcnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctZHJhZ2dhYmxlKVxuICAgICAqL1xuICAgIGRyYWdnYWJsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgb25seSB2YWxpZCBpZiBbbXVsdGlTZWxlY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0RhdGVQaWNrZXIjY29uZmlnLW11bHRpU2VsZWN0KSBpcyBzZXQgdG8gYCdyYW5nZSdgXG4gICAgICogb3IgYHRydWVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWRyYWdTZWxlY3QpXG4gICAgICovXG4gICAgZHJhZ1NlbGVjdCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIE1ha2UgdGhpcyBQYW5lbCBhIGRvY2tlZCBkcmF3ZXIgd2hpY2ggc2xpZGVzIG91dCBmcm9tIG9uZSBzaWRlIG9mIHRoZSBicm93c2VyIHZpZXdwb3J0IGJ5IGRlZmF1bHQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctZHJhd2VyKVxuICAgICAqIEBwYXJhbSB7J3N0YXJ0JywnbGVmdCcsJ2VuZCcsJ3JpZ2h0JywndG9wJywnYm90dG9tJ30gc2lkZSBUaGUgc2lkZSBvZiB0aGUgdmlld3BvcnQgdG8gZG9jayB0aGUgZHJhd2VyIHRvLiAgKiBgJ3N0YXJ0J2AgbWVhbnMgdGhlIGBpbmxpbmUtc3RhcnRgIHNpZGUuICogYCdlbmQnYCBtZWFucyB0aGUgYGlubGluZS1lbmRgIHNpZGUuXG4gICAgICogQHBhcmFtIHtzdHJpbmcsbnVtYmVyfSBzaXplIFRoZSBzaXplIG9mIHRoZSBkcmF3ZXIgaW4gaXRzIGNvbGxhcHNpYmxlIGF4aXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbmxpbmUgSWYgdXNpbmcgdGhlIFthcHBlbmRUb10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgdG8gcGxhY2UgdGhlIGRyYXdlciBpbnNpZGUgYSBob3N0IHdpZGdldCwgdGhpcyBtYXkgYmUgc2V0IHRvIGB0cnVlYCB0byBtYWtlIHRoZSBkcmF3ZXIgaW5saW5lIHdpdGhpbiB0aGF0IGhvc3QuIE5vdGUgdGhhdCwgaWYgdXNpbmcgdGhpcywgdGhlIGxheW91dCBvZiB0aGUgaG9zdCBlbGVtZW50IG11c3QgaGF2ZSBgZmxleC1kaXJlY3Rpb25gIHNldCBhcHByb3ByaWF0ZWx5LlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixvYmplY3R9IGF1dG9DbG9zZSBTcGVjaWZpZXMgd2hhdCB1c2VyIGFjdGlvbnMgc2hvdWxkIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRyYXdlci4gRGVmYXVsdHMgdG8gY2xvc2luZyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIgb3Igd2hlbiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFuLHN0cmluZ30gYXV0b0Nsb3NlLm1vdXNlZG93biBJZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgZHJhd2VyLCB0aGUgZHJhd2VyIHdpbGwgYXV0b21hdGljYWxseSBiZSBoaWRkZW4uIElmIHRoZSB2YWx1ZSBpcyBhIHN0cmluZywgaXQgaXMgdXNlZCBhcyBhIENTUyBzZWxlY3RvciB0byBmaWx0ZXIgY2xpY2tzIHdoaWNoIHNob3VsZCBjbG9zZSB0aGUgZHJhd2VyLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbixzdHJpbmd9IGF1dG9DbG9zZS5mb2N1c291dCBJZiBmb2N1cyBtb3ZlcyBvdXRzaWRlIG9mIHRoZSBkcmF3ZXIsIHRoZSBkcmF3ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXV0b0Nsb3NlLm1vdXNlb3V0IEhpZGVzIHRoZSBkcmF3ZXIgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBkcmF3ZXIgYWZ0ZXIgdGhlIGBhdXRvQ2xvc2VEZWxheWAgcGVyaW9kLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhdXRvQ2xvc2VEZWxheSBXaGVuIHVzaW5nIGBtb3VzZW91dGAsIHRoaXMgaXMgdGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICAgICAqL1xuICAgIGRyYXdlciA/IDogYm9vbGVhbnx7c2lkZT86ICdzdGFydCd8J2xlZnQnfCdlbmQnfCdyaWdodCd8J3RvcCd8J2JvdHRvbScsIHNpemU/OiBzdHJpbmd8bnVtYmVyLCBpbmxpbmU/OiBib29sZWFuLCBhdXRvQ2xvc2U6IHsgbW91c2Vkb3duPzogYm9vbGVhbnxzdHJpbmcsIGZvY3Vzb3V0PzogYm9vbGVhbnxzdHJpbmcsIG1vdXNlb3V0Pzogc3RyaW5nIH0sIGF1dG9DbG9zZURlbGF5PzogbnVtYmVyfVxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBtb250aCBhbmQgeWVhciBhcmUgZWRpdGFibGUuIENvbmZpZ3VyZSB0aGlzIGFzIGBmYWxzZWAgdG8gcHJldmVudCB0aGF0LlxuICAgICAqL1xuICAgIGVkaXRNb250aCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBzcGVjaWZ5aW5nIGF0dHJpYnV0ZXMgdG8gYXNzaWduIHRvIHRoZSByb290IGVsZW1lbnQgb2YgdGhpcyB3aWRnZXQuXG4gICAgICogU2V0IGBudWxsYCB2YWx1ZSB0byBhdHRyaWJ1dGUgdG8gcmVtb3ZlIGl0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWVsZW1lbnRBdHRyaWJ1dGVzKVxuICAgICAqL1xuICAgIGVsZW1lbnRBdHRyaWJ1dGVzID8gOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD5cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uLCBvciB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIGluIHRoZSBvd25lcnNoaXAgaGllcmFyY2h5IHRvIGZpbHRlciB3aGljaCBldmVudHNcbiAgICAgKiBhcmUgY29sbGVjdGVkIGludG8gdGhlIGRheSBjZWxsIGRhdGEgYmxvY2tzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWV2ZW50RmlsdGVyKVxuICAgICAqIEBwYXJhbSB7U2NoZWR1bGVyLm1vZGVsLkV2ZW50TW9kZWx9IGV2ZW50IEV2ZW50IGZvciBmaWx0ZXJpbmdcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIGB0cnVlYCB0byBpbmNsdWRlIHRoZSBwYXNzZWQgZXZlbnRcbiAgICAgKi9cbiAgICBldmVudEZpbHRlciA/IDogKChldmVudDogRXZlbnRNb2RlbCkgPT4gYm9vbGVhbil8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIFtldmVudCBzdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL2RhdGEvRXZlbnRTdG9yZSkgZnJvbSB3aGljaCB0aGUgaW4tY2VsbCBldmVudCBwcmVzZW5jZVxuICAgICAqIGluZGljYXRvcnMgYXJlIGRyYXduLlxuICAgICAqL1xuICAgIGV2ZW50U3RvcmUgPyA6IEV2ZW50U3RvcmVcbiAgICBleHRyYURhdGEgPyA6IGFueVxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciksIGl0IHdpbGwgYnkgZGVmYXVsdCBiZSBwYXJ0aWNpcGF0aW5nIGluIGFcbiAgICAgKiBmbGV4Ym94IGxheW91dC4gVGhpcyBjb25maWcgYWxsb3dzIHlvdSB0byBzZXQgdGhpcyB3aWRnZXQnc1xuICAgICAqIFtmbGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvZmxleCkgc3R5bGUuXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgJmx0O2ZsZXgtZ3JvdyZndDsgJmx0O2ZsZXgtc2hyaW5rJmd0OyAmbHQ7ZmxleC1iYXNpcyZndDtgIGZvcm1hdCBzdHJpbmcuXG4gICAgICogbnVtZXJpYy1vbmx5IHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQgYXMgdGhlIGBmbGV4LWdyb3dgIHZhbHVlLlxuICAgICAqL1xuICAgIGZsZXggPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYHRydWVgIHRvIG1vdmUgdGhlIHdpZGdldCBvdXQgb2YgdGhlIGRvY3VtZW50IGZsb3cgYW5kIHBvc2l0aW9uIGl0XG4gICAgICogYWJzb2x1dGVseSBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGZsb2F0aW5nID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgZGlzYWJsZWQgZGF0ZXMgY2Fubm90IGJlIG5hdmlnYXRlZCB0bywgYW5kIHRoZXkgYXJlIHNraXBwZWQgb3ZlclxuICAgICAqIGR1cmluZyBrZXlib2FyZCBuYXZpZ2F0aW9uLiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gZW5hYmxlIG5hdmlnYXRpb24gdG9cbiAgICAgKiBkaXNhYmxlZCBkYXRlcy5cbiAgICAgKi9cbiAgICBmb2N1c0Rpc2FibGVkRGF0ZXMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWcgb2JqZWN0IG9mIGEgZm9vdGVyLiBNYXkgY29udGFpbiBhIGBkb2NrYCwgYGh0bWxgIGFuZCBhIGBjbHNgIHByb3BlcnR5LiBBIGZvb3RlciBpcyBub3QgYSB3aWRnZXQsXG4gICAgICogYnV0IHJhdGhlciBwbGFpbiBIVE1MIHRoYXQgZm9sbG93cyB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYW5lbCdzIGJvZHkgYW5kIFtzdHJpcHNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWZvb3RlcilcbiAgICAgKi9cbiAgICBmb290ZXIgPyA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgY29uZmlnIFtvYmplY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI3R5cGVkZWYtUGFuZWxIZWFkZXIpIGZvciB0aGUgcGFuZWwncyBoZWFkZXIgb3IgYSBzdHJpbmcgaW4gcGxhY2Ugb2YgYSBgdGl0bGVgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWhlYWRlcilcbiAgICAgKi9cbiAgICBoZWFkZXIgPyA6IHN0cmluZ3xib29sZWFufFBhbmVsSGVhZGVyXG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiAob3IgdGhlIG5hbWUgb2YgYSBmdW5jdGlvbikgd2hpY2ggY3JlYXRlcyBjb250ZW50IGluLCBhbmQgbWF5IG11dGF0ZSBhIGRheSBoZWFkZXIgZWxlbWVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1oZWFkZXJSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjZWxsIFRoZSBoZWFkZXIgZWxlbWVudFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBUaGUgZGF5IGNvbHVtbi4gV2lsbCBiZSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGA2YFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB3ZWVrRGF5IFRoZSBjYW5vbmljYWwgZGF5IG51bWJlciB3aGVyZSBNb25kYXkgaXMgYDBgIGFuZCBTdW5kYXkgaXMgYDZgXG4gICAgICogQHJldHVybnMge3N0cmluZyxEb21Db25maWcsdm9pZH1cbiAgICAgKi9cbiAgICBoZWFkZXJSZW5kZXJlciA/IDogKChjZWxsOiBIVE1MRWxlbWVudCwgY29sdW1uSW5kZXg6IG51bWJlciwgd2Vla0RheTogbnVtYmVyKSA9PiBzdHJpbmd8RG9tQ29uZmlnfHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIGhlaWdodCwgdXNlZCB0byBzZXQgZWxlbWVudCBgc3R5bGUuaGVpZ2h0YC4gRWl0aGVyIHNwZWNpZnkgYSB2YWxpZCBoZWlnaHQgc3RyaW5nIG9yIGEgbnVtYmVyLFxuICAgICAqIHdoaWNoIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgaGVpZ2h0LCBidXQgaW4gc29tZVxuICAgICAqIGNhc2VzIHRoaXMgY29uZmlnIGlzIGNvbnZlbmllbnQuXG4gICAgICovXG4gICAgaGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIHdpdGggdHJ1ZSB0byBtYWtlIHdpZGdldCBpbml0aWFsbHkgaGlkZGVuLlxuICAgICAqL1xuICAgIGhpZGRlbiA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWhpZGVBbmltYXRpb24pXG4gICAgICovXG4gICAgaGlkZUFuaW1hdGlvbiA/IDogYm9vbGVhbnxvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gaGlkZSBjZWxscyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgbW9udGguXG4gICAgICovXG4gICAgaGlkZU90aGVyTW9udGhDZWxscyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYHRydWVgIHRvIG1ha2UgdGhpcyBjb250YWluZXIgaGlkZSB3aGVuIGl0IGhhcyBubyB2aXNpYmxlIGNoaWxkcmVuIChFaXRoZXIgZW1wdHlcbiAgICAgKiBvciBhbGwgY2hpbGRyZW4gaGlkZGVuKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1oaWRlV2hlbkVtcHR5KVxuICAgICAqL1xuICAgIGhpZGVXaGVuRW1wdHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGFkZCBhIGhpZ2hsaWdodGVkIGJvcmRlciBhbmQgYmFja2dyb3VuZCB0byB0aGUgd2VlayByb3cgd2hpY2hcbiAgICAgKiBlbmNhcHN1bGF0ZXMgdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICovXG4gICAgaGlnaGxpZ2h0U2VsZWN0ZWRXZWVrID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogVGhlIEhUTUwgdG8gZGlzcGxheSBpbml0aWFsbHkgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIG1hcmt1cCAoY2FsbGVkIGF0IHdpZGdldCBjb25zdHJ1Y3Rpb24gdGltZSkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctaHRtbClcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gd2lkZ2V0IFRoZSBjYWxsaW5nIFdpZGdldFxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgaHRtbCA/IDogc3RyaW5nfCgod2lkZ2V0OiBXaWRnZXQpID0+IHN0cmluZyl8RG9tQ29uZmlnfERvbUNvbmZpZ1tdfFZ1ZUNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBDU1MgY2xhc3MoZXMpIHRvIGFkZCB3aGVuIEhUTUwgY29udGVudCBpcyBiZWluZyBhcHBsaWVkIHRvIHRoaXMgd2lkZ2V0LlxuICAgICAqL1xuICAgIGh0bWxDbHMgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBpY29uIHRvIHNob3cgYmVmb3JlIHRoZSBbdGl0bGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10aXRsZSkuIEVpdGhlciBwYXNzIGEgQ1NTIGNsYXNzIGFzIGEgc3RyaW5nLCBvciBwYXNzIGFcbiAgICAgKiBbRG9tQ29uZmlnXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL2hlbHBlci9Eb21IZWxwZXIjdHlwZWRlZi1Eb21Db25maWcpIG9iamVjdCBkZXNjcmliaW5nIGFuIGVsZW1lbnQgdG8gcmVwcmVzZW50IHRoZSBpY29uLlxuICAgICAqL1xuICAgIGljb24gPyA6IHN0cmluZ3xEb21Db25maWdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQgaWQsIGlmIG5vdCBzcGVjaWZpZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiBBbHNvIHVzZWQgZm9yIGxvb2t1cHMgdGhyb3VnaCBXaWRnZXQuZ2V0QnlJZFxuICAgICAqL1xuICAgIGlkID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB3aWRnZXRzIHJlYWQtb25seSBzdGF0ZSBzaG91bGQgYmUgY29udHJvbGxlZCBieSBpdHMgcGFyZW50LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWlnbm9yZVBhcmVudFJlYWRPbmx5KVxuICAgICAqL1xuICAgIGlnbm9yZVBhcmVudFJlYWRPbmx5ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIHllYXIgaXMgdmlzaWJsZS4gQ29uZmlndXJlIHRoaXMgYXMgYGZhbHNlYCB0byBwcmV2ZW50IHRoYXQuXG4gICAgICovXG4gICAgaW5jbHVkZVllYXIgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb252ZW5pZW5jZSBzZXR0aW5nIHRvIGFsaWduIGlucHV0IGZpZWxkcyBvZiBjaGlsZCB3aWRnZXRzLiBCeSBkZWZhdWx0LCB0aGUgRmllbGQgaW5wdXQgZWxlbWVudCBpc1xuICAgICAqIHBsYWNlZCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGBsYWJlbGAuIElmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgaW5wdXQgZmllbGRzIGFsaWduZWQgdG8gdGhlXG4gICAgICogcmlnaHQsIHNldCB0aGlzIGNvbmZpZyB0byBgJ2VuZCdgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWlucHV0RmllbGRBbGlnbilcbiAgICAgKi9cbiAgICBpbnB1dEZpZWxkQWxpZ24gPyA6ICdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBFbGVtZW50IChvciBlbGVtZW50IGlkKSB0byBpbnNlcnQgdGhpcyB3aWRnZXQgYmVmb3JlLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRGaXJzdCA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQW4gb3B0aW9uYWwgQ1NTIGNsYXNzIHRvIGFkZCB0byBjaGlsZCBpdGVtcyBvZiB0aGlzIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBpdGVtQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB0eXBlZCBjaGlsZCB3aWRnZXQgY29uZmlnIG9iamVjdHMgb3IgV2lkZ2V0cy4gTWF5IGFsc28gYmUgc3BlY2lmaWVkXG4gICAgICogYXMgYW4gYXJyYXkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctaXRlbXMpXG4gICAgICovXG4gICAgaXRlbXMgPyA6IFJlY29yZDxzdHJpbmcsIFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeT58KFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWd8TWVudUl0ZW1FbnRyeXxXaWRnZXQpW11cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogQ29udmVuaWVuY2Ugc2V0dGluZyB0byB1c2Ugc2FtZSBsYWJlbCBwbGFjZW1lbnQgb24gYWxsIGNoaWxkIHdpZGdldHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbGFiZWxQb3NpdGlvbilcbiAgICAgKi9cbiAgICBsYWJlbFBvc2l0aW9uID8gOiAnYmVmb3JlJ3wnYWJvdmUnfCdhbGlnbi1iZWZvcmUnfCdhdXRvJ3xudWxsXG4gICAgLyoqXG4gICAgICogVGhlIHNob3J0IG5hbWUgb2YgYSBoZWxwZXIgY2xhc3Mgd2hpY2ggbWFuYWdlcyByZW5kZXJpbmcgYW5kIHN0eWxpbmcgb2YgY2hpbGQgaXRlbXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbGF5b3V0KVxuICAgICAqL1xuICAgIGxheW91dCA/IDogc3RyaW5nfFNjaGVkdWxlckNvbnRhaW5lckxheW91dENvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBDU1Mgc3R5bGUgcHJvcGVydGllcyB0byBhcHBseSB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWxheW91dFN0eWxlKVxuICAgICAqL1xuICAgIGxheW91dFN0eWxlID8gOiBvYmplY3RcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBbY2hpbGQgaXRlbV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcykgKmNvbmZpZyBvYmplY3RzKiB3aGljaCBpcyB0byBiZSBjb252ZXJ0ZWQgaW50b1xuICAgICAqIGluc3RhbmNlcyBvbmx5IHdoZW4gdGhpcyBDb250YWluZXIgaXMgcmVuZGVyZWQsIHJhdGhlciB0aGFuIGVhZ2VybHkgYXQgY29uc3RydWN0IHRpbWUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbGF6eUl0ZW1zKVxuICAgICAqL1xuICAgIGxhenlJdGVtcyA/IDogUmVjb3JkPHN0cmluZywgU2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZz58U2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZ1tdfFdpZGdldFtdXG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogU2NoZWR1bGVyRGF0ZVBpY2tlckxpc3RlbmVyc1xuICAgIC8qKlxuICAgICAqIEEgY2xhc3MgdHJhbnNsYXRpb25zIG9mIHdoaWNoIGFyZSB1c2VkIGZvciB0cmFuc2xhdGluZyB0aGlzIGVudGl0eS5cbiAgICAgKiBUaGlzIGlzIG9mdGVuIHVzZWQgd2hlbiB0cmFuc2xhdGlvbnMgb2YgYW4gaXRlbSBhcmUgZGVmaW5lZCBvbiBpdHMgY29udGFpbmVyIGNsYXNzLlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWxvY2FsZUNsYXNzKVxuICAgICAqL1xuICAgIGxvY2FsZUNsYXNzID8gOiB0eXBlb2YgQmFzZVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIG9mIHRoaXMgb2JqZWN0LlxuICAgICAqL1xuICAgIGxvY2FsaXphYmxlID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBwcm9wZXJ0aWVzIHdoaWNoIHZhbHVlcyBzaG91bGQgYmUgdHJhbnNsYXRlZCBhdXRvbWF0aWNhbGx5IHVwb24gYSBsb2NhbGUgYXBwbHlpbmcuXG4gICAgICogSW4gY2FzZSB0aGVyZSBpcyBhIG5lZWQgdG8gbG9jYWxpemUgbm90IHR5cGljYWwgdmFsdWUgKG5vdCBhIFN0cmluZyB2YWx1ZSBvciBhIGZpZWxkIHdpdGggcmUtZGVmaW5lZCBzZXR0ZXIvZ2V0dGVyKSxcbiAgICAgKiB5b3UgY291bGQgdXNlICdsb2NhbGVLZXknIG1ldGEgY29uZmlndXJhdGlvbi5cbiAgICAgKiBFeGFtcGxlOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLWxvY2FsaXphYmxlUHJvcGVydGllcylcbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZVByb3BlcnRpZXMgPyA6IHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogV2lkZ2V0J3MgbWFyZ2luLiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGBUUkJMYCBmb3JtYXQgc3RyaW5nLlxuICAgICAqIG51bWVyaWMtb25seSB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIHBpeGVscy5cbiAgICAgKi9cbiAgICBtYXJnaW4gPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGlzIGNvbmZpZyBvYmplY3QgY29udGFpbnMgdGhlIGRlZmF1bHRzIGZvciB0aGUgW01hc2tdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L01hc2spIGNyZWF0ZWQgZm9yIHRoZVxuICAgICAqIFttYXNrZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza2VkKSBjb25maWcuIEFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYG1hc2tlZGAgY29uZmlnIHdpbGwgb3ZlcnJpZGUgdGhlc2VcbiAgICAgKiB2YWx1ZXMuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NYXNrKSBjb25maWcgb2JqZWN0LlxuICAgICAqL1xuICAgIG1hc2tlZCA/IDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZ1xuICAgIC8qKlxuICAgICAqIFRoZSBtYXhpbXVtIHNlbGVjdGFibGUgZGF0ZS4gU2VsZWN0aW9uIG9mIGFuZCBuYXZpZ2F0aW9uIHRvIGRhdGVzIGFmdGVyXG4gICAgICogdGhpcyBkYXRlIHdpbGwgbm90IGJlIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIG1heERhdGUgPyA6IERhdGVcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1heEhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctaGVpZ2h0KSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4SGVpZ2h0ID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbWF4aW1pemVPbk1vYmlsZSlcbiAgICAgKi9cbiAgICBtYXhpbWl6ZU9uTW9iaWxlID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGVsZW1lbnRzIG1heFdpZHRoLiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW3dpZHRoXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCBkYXkgY2VsbHMgZmxleCB0byBzaGFyZSBhdmFpbGFibGUgUGFuZWwgd2lkdGggZXF1YWxseS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1taW5Db2x1bW5XaWR0aClcbiAgICAgKi9cbiAgICBtaW5Db2x1bW5XaWR0aCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiBTZWxlY3Rpb24gb2YgYW5kIG5hdmlnYXRpb24gdG8gZGF0ZXMgcHJpb3JcbiAgICAgKiB0byB0aGlzIGRhdGUgd2lsbCBub3QgYmUgcG9zc2libGUuXG4gICAgICovXG4gICAgbWluRGF0ZSA/IDogRGF0ZVxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50J3MgbWluSGVpZ2h0LiBDYW4gYmUgZWl0aGVyIGEgU3RyaW5nIG9yIGEgTnVtYmVyICh3aGljaCB3aWxsIGhhdmUgJ3B4JyBhcHBlbmRlZCkuIE5vdGUgdGhhdFxuICAgICAqIGxpa2UgW2hlaWdodF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1oZWlnaHQpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5IZWlnaHQgPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB3ZWVrIHJvd3MgZmxleCB0byBzaGFyZSBhdmFpbGFibGUgUGFuZWwgaGVpZ2h0IGVxdWFsbHkuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbWluUm93SGVpZ2h0KVxuICAgICAqL1xuICAgIG1pblJvd0hlaWdodCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy13aWR0aCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbldpZHRoID8gOiBzdHJpbmd8bnVtYmVyXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGlzIGlzIGNvbmZpZ3VyZWQgYXMgYHRydWVgIGEgW1Jlc2l6ZU9ic2VydmVyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXIpXG4gICAgICogaXMgdXNlZCB0byBtb25pdG9yIHRoaXMgZWxlbWVudCBmb3Igc2l6ZSBjaGFuZ2VzIGNhdXNlZCBieSBlaXRoZXIgc3R5bGUgbWFuaXB1bGF0aW9uLCBvciBieSBDU1NcbiAgICAgKiBsYXlvdXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbW9uaXRvclJlc2l6ZSlcbiAgICAgKi9cbiAgICBtb25pdG9yUmVzaXplID8gOiBib29sZWFufHtcbiAgICAgICAgaW1tZWRpYXRlPzogYm9vbGVhblxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIFtNb250aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS91dGlsL01vbnRoKSBNb250aCB1dGlsaXR5IG9iamVjdCB3aGljaCBlbmNhcHN1bGF0ZXMgdGhpcyBQYW5lbCdzIG1vbnRoXG4gICAgICogYW5kIHByb3ZpZGVzIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gYW5kIG5hdmlnYXRpb24gc2VydmljZXMuXG4gICAgICovXG4gICAgbW9udGggPyA6IE1vbnRofE1vbnRoQ29uZmlnXG4gICAgLyoqXG4gICAgICogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlIHRvIGNyZWF0ZSB0aGUgdGV4dCBvZiB0aGUgbW9udGggYnV0dG9uLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLW1vbnRoQnV0dG9uRm9ybWF0KVxuICAgICAqL1xuICAgIG1vbnRoQnV0dG9uRm9ybWF0ID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIGVuYWJsZSBzZWxlY3RpbmcgbXVsdGlwbGUgZGlzY29udGlndW91cyBkYXRlIHJhbmdlcyB1c2luZ1xuICAgICAqIGNsaWNrIGFuZCBTaGlmdCtjbGljayB0byBjcmVhdGUgcmFuZ2VzIGFuZCBDdHJsK2NsaWNrIHRvIHNlbGVjdC9kZXNlbGVjdCBpbmRpdmlkdWFsIGRhdGVzLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLW11bHRpU2VsZWN0KVxuICAgICAqL1xuICAgIG11bHRpU2VsZWN0ID8gOiBib29sZWFufCdyYW5nZSd8J3NpbXBsZSdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyBkZWZhdWx0IGNvbmZpZyBvYmplY3RzIHdoaWNoIG1heSBiZSByZWZlcmVuY2VkIGJ5IG5hbWUgaW4gdGhlIFtpdGVtc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1pdGVtcylcbiAgICAgKiBjb25maWcuIEZvciBleGFtcGxlLCBhIHNwZWNpYWxpemVkIFtNZW51XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9NZW51KSBzdWJjbGFzcyBtYXkgaGF2ZSBhIGBuYW1lZEl0ZW1zYCBkZWZhdWx0XG4gICAgICogdmFsdWUgZGVmaW5lZCBsaWtlIHRoaXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctbmFtZWRJdGVtcylcbiAgICAgKi9cbiAgICBuYW1lZEl0ZW1zID8gOiBSZWNvcmQ8c3RyaW5nLCBTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnPlxuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBuYW1lIHRvIGFkZCB0byBjYWxlbmRhciBjZWxscyB3aGljaCBhcmUgW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9DYWxlbmRhclBhbmVsI2NvbmZpZy1ub25Xb3JraW5nRGF5cykuXG4gICAgICovXG4gICAgbm9uV29ya2luZ0RheUNscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogTm9uLXdvcmtpbmcgZGF5cyBhcyBhbiBvYmplY3Qgd2hlcmUga2V5cyBhcmUgZGF5IGluZGljZXMsIDAtNiAoU3VuZGF5LVNhdHVyZGF5KSwgYW5kIHRoZSB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogRGVmYXVsdHMgdG8gW25vbldvcmtpbmdEYXlzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL2hlbHBlci9EYXRlSGVscGVyI3Byb3BlcnR5LW5vbldvcmtpbmdEYXlzLXN0YXRpYykuXG4gICAgICovXG4gICAgbm9uV29ya2luZ0RheXMgPyA6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+XG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGNhbGVuZGFyIGNlbGxzIHdoaWNoIGFyZSBpbiB0aGUgcHJldmlvdXMgb3IgbmV4dCBtb250aC5cbiAgICAgKi9cbiAgICBvdGhlck1vbnRoQ2xzID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIjcHJvcGVydHktaXRlbXMpIG9mIGEgQ29udGFpbmVyKSwgdGhpcyBjb25maWcgd2lsbCBiZSBpZ25vcmVkLiBJbiB0aGlzIGNhc2VcbiAgICAgKiB0aGUgb3duZXIgaXMgPHN0cm9uZz5hbHdheXM8L3N0cm9uZz4gdGhlIGVuY2Fwc3VsYXRpbmcgQ29udGFpbmVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLW93bmVyKVxuICAgICAqL1xuICAgIG93bmVyID8gOiBXaWRnZXR8YW55XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB3aGVuIGEgd2lkZ2V0IGlzIHJlbmRlcmVkIGludG8gYW5vdGhlciB3aWRnZXQncyBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1jb250ZW50RWxlbWVudCksIGJ1dCBtdXN0XG4gICAgICogbm90IHBhcnRpY2lwYXRlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQgb2YgdGhhdCB3aWRnZXQsIGFuZCBtdXN0IGJlIHBvc2l0aW9uZWQgcmVsYXRpdmVseSB0byB0aGF0XG4gICAgICogd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHdpZGdldCBpcyByZWFkLW9ubHkuICBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHdpZGdldCBpcyBhbiBpbnB1dFxuICAgICAqIGZpZWxkLCA8c3Ryb25nPm9yIGNvbnRhaW5zIGlucHV0IGZpZWxkcyBhdCBhbnkgZGVwdGg8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBbUmVjb3JkXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL2RhdGEvTW9kZWwpIHdob3NlIHZhbHVlcyB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgZmllbGRzIGluIHRoZSBjb250YWluZXIuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctcmVjb3JkKVxuICAgICAqL1xuICAgIHJlY29yZCA/IDogTW9kZWxcbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogRWl0aGVyIGEgZGVmYXVsdCBgcmVuZGl0aW9uYCB0byBhcHBseSB0byBhbGwgY2hpbGQgd2lkZ2V0cywgb3IgYSBtYXAgb2YgcmVuZGl0aW9ucyBrZXllZCBieSBjaGlsZCB3aWRnZXRcbiAgICAgKiBgdHlwZWAuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctcmVuZGl0aW9uKVxuICAgICAqL1xuICAgIHJlbmRpdGlvbiA/IDogc3RyaW5nfFJlY29yZDxzdHJpbmcsIHN0cmluZz58bnVsbFxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gaGF2ZSB0aGUgY29tcG9uZW50IGRpc3BsYXkgYSB0cmFuc2x1Y2VudCByaXBwbGUgd2hlbiBpdHNcbiAgICAgKiBbZm9jdXNFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGF0IHRvIGRvIGlmIGRvY3VtZW50IGlzIHNjcm9sbGVkIHdoaWxlIFdpZGdldCBpcyB2aXNpYmxlIChvbmx5IHJlbGV2YW50IHdoZW4gZmxvYXRpbmcgaXMgc2V0IHRvIGB0cnVlYCkuXG4gICAgICogVmFsaWQgdmFsdWVzOiDCtG51bGzCtDogZG8gbm90aGluZywgwrRoaWRlwrQ6IGhpZGUgdGhlIHdpZGdldCBvciDCtHJlYWxpZ27CtDogcmVhbGlnbiB0byB0aGUgdGFyZ2V0IGlmIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHNjcm9sbEFjdGlvbiA/IDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsXG4gICAgLyoqXG4gICAgICogSWYgW211bHRpU2VsZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9EYXRlUGlja2VyI2NvbmZpZy1tdWx0aVNlbGVjdCkgaXMgY29uZmlndXJlZCBhcyBgdHJ1ZWAsIHRoaXMgaXMgYW4gYXJyYXkgb2YgZGF0ZXNcbiAgICAgKiB3aGljaCBhcmUgc2VsZWN0ZWQuIFRoZXJlIG1heSBiZSBtdWx0aXBsZSwgZGlzY29udGlndW91cyBkYXRlIHJhbmdlcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1zZWxlY3Rpb24pXG4gICAgICovXG4gICAgc2VsZWN0aW9uID8gOiBEYXRlW118c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgYXMgYHRydWVgIHRvIHJlbmRlciBwYXN0IGRhdGVzIGluIGEgbGlnaHRlciB0ZXh0IGNvbG9yLlxuICAgICAqL1xuICAgIHNoYWRlUGFzdERhdGVzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctc2hvd0FuaW1hdGlvbilcbiAgICAgKi9cbiAgICBzaG93QW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIEhvdyB0byBzaG93IHByZXNlbmNlIG9mIGV2ZW50cyBpbiB0aGUgY29uZmlndXJlZCBbZXZlbnRTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy1ldmVudFN0b3JlKSBpbiB0aGVcbiAgICAgKiBkYXkgY2VsbHMuIFZhbHVlcyBtYXkgYmU6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctc2hvd0V2ZW50cylcbiAgICAgKi9cbiAgICBzaG93RXZlbnRzID8gOiBib29sZWFufCdjb3VudCd8J2hlYXRtYXAnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1kaXNhYmxlZClcbiAgICAgKi9cbiAgICBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSBhcyBgdHJ1ZWAgdG8gc2hvdyBhIHdlZWsgbnVtYmVyIGNvbHVtbiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNhbGVuZGFyIGJsb2NrLlxuICAgICAqL1xuICAgIHNob3dXZWVrQ29sdW1uID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBhbHdheXMgc2hvdyBhIHNpeC13ZWVrIGNhbGVuZGFyLlxuICAgICAqL1xuICAgIHNpeFdlZWtzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciBob3cgbWFueSBjb2x1bW5zIHRvIHNwYW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgc3BhbiA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhpcyB2YWx1ZSBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctc3RhdGVmdWwpXG4gICAgICovXG4gICAgc3RhdGVmdWwgPyA6IGJvb2xlYW58b2JqZWN0fHN0cmluZ1tdXG4gICAgLyoqXG4gICAgICogVGhlIGV2ZW50cyB0aGF0LCB3aGVuIGZpcmVkIGJ5IHRoaXMgY29tcG9uZW50LCBzaG91bGQgdHJpZ2dlciBpdCB0byBzYXZlIGl0cyBzdGF0ZSBieSBjYWxsaW5nXG4gICAgICogW3NhdmVTdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNmdW5jdGlvbi1zYXZlU3RhdGUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXN0YXRlZnVsRXZlbnRzKVxuICAgICAqL1xuICAgIHN0YXRlZnVsRXZlbnRzID8gOiBvYmplY3R8c3RyaW5nW11cbiAgICAvKipcbiAgICAgKiBUaGUga2V5IHRvIHVzZSB3aGVuIHNhdmluZyB0aGlzIG9iamVjdCdzIHN0YXRlIGluIHRoZSBbc3RhdGVQcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNjb25maWctc3RhdGVQcm92aWRlcikuIElmIHRoaXMgY29uZmlnIGlzXG4gICAgICogbm90IGFzc2lnbmVkLCBhbmQgW3N0YXRlZnVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL21peGluL1N0YXRlI2NvbmZpZy1zdGF0ZWZ1bCkgaXMgbm90IHNldCB0byBgZmFsc2VgLCB0aGUgW2lkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1pZClcbiAgICAgKiAoaWYgZXhwbGljaXRseSBzcGVjaWZpZWQpIHdpbGwgYmUgdXNlZCBhcyB0aGUgYHN0YXRlSWRgLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXN0YXRlSWQpXG4gICAgICovXG4gICAgc3RhdGVJZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGBTdGF0ZVByb3ZpZGVyYCB0byB1c2UgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGlzIG9iamVjdCdzIFtzdGF0ZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS9taXhpbi9TdGF0ZSNwcm9wZXJ0eS1zdGF0ZSkuIEJ5IGRlZmF1bHQsIGBzdGF0ZWBcbiAgICAgKiB3aWxsIGJlIHNhdmVkIHVzaW5nIHRoZSBbZGVmYXVsdCBzdGF0ZSBwcm92aWRlcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS9zdGF0ZS9TdGF0ZVByb3ZpZGVyI3Byb3BlcnR5LWluc3RhbmNlLXN0YXRpYykuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctc3RhdGVQcm92aWRlcilcbiAgICAgKi9cbiAgICBzdGF0ZVByb3ZpZGVyID8gOiBTdGF0ZVByb3ZpZGVyXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBgdHJ1ZWAgdG8gbWF0Y2ggZmllbGRzIGJ5IHRoZWlyIGBuYW1lYCBwcm9wZXJ0eSBvbmx5IHdoZW4gYXNzaWduaW5nIGEgW3JlY29yZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI2NvbmZpZy1yZWNvcmQpLFxuICAgICAqIHdpdGhvdXQgZmFsbGluZyBiYWNrIHRvIGByZWZgLlxuICAgICAqL1xuICAgIHN0cmljdFJlY29yZE1hcHBpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3QgY29udGFpbmluZyB3aWRnZXRzIGtleWVkIGJ5IG5hbWUuIEJ5IGRlZmF1bHQgKHdoZW4gbm8gYHR5cGVgIGlzIGdpdmVuKSwgc3RyaXBzIGFyZVxuICAgICAqIFt0b29sYmFyc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbGJhcikuIElmIHlvdSB3YW50IHRvIHBhc3MgYW4gYXJyYXksIHlvdSBjYW4gdXNlXG4gICAgICogdGhlIHRvb2xiYXIncyBbaXRlbXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNjb25maWctaXRlbXMpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXN0cmlwcylcbiAgICAgKi9cbiAgICBzdHJpcHMgPyA6IFJlY29yZDxzdHJpbmcsIFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWc+XG4gICAgLyoqXG4gICAgICogQSBjb25maWd1cmF0aW9uIGZvciB0aGUgW3RhYl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiKSBjcmVhdGVkIGZvciB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIHBsYWNlZCBpbiBhXG4gICAgICogW1RhYlBhbmVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9UYWJQYW5lbCkuIEZvciBleGFtcGxlLCB0aGlzIGNvbmZpZyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSBpY29uIG9mIHRoZSBgdGFiYCBmb3JcbiAgICAgKiB0aGlzIHdpZGdldDpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy10YWIpXG4gICAgICovXG4gICAgdGFiID8gOiBib29sZWFufFRhYkNvbmZpZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBjb250YWluZXIgaXMgdXNlZCBhcyBhIHRhYiBpbiBhIFRhYlBhbmVsLCB0aGVzZSBpdGVtcyBhcmUgYWRkZWQgdG8gdGhlXG4gICAgICogW1RhYkJhcl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiQmFyKSB3aGVuIHRoaXMgY29udGFpbmVyIGlzIHRoZSBhY3RpdmUgdGFiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXRhYkJhckl0ZW1zKVxuICAgICAqL1xuICAgIHRhYkJhckl0ZW1zID8gOiBUb29sYmFySXRlbXNbXXxXaWRnZXRbXVxuICAgIC8qKlxuICAgICAqIFRoZSB0YWcgbmFtZSBvZiB0aGlzIFdpZGdldCdzIHJvb3QgZWxlbWVudFxuICAgICAqL1xuICAgIHRhZyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBDb25maWcgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBhIFtUb29sYmFyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Ub29sYmFyKSxcbiAgICAgKiBvciBhcnJheSBvZiBjb25maWcgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIGNoaWxkIGl0ZW1zIG9mIGEgVG9vbGJhci5cbiAgICAgKiBUaGlzIGNyZWF0ZXMgYSB0b29sYmFyIGRvY2tlZCB0byB0aGUgdG9wIG9mIHRoZSBwYW5lbCBpbW1lZGlhdGVseSBiZWxvdyB0aGUgaGVhZGVyLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXRiYXIpXG4gICAgICovXG4gICAgdGJhciA/IDogKFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWd8c3RyaW5nKVtdfFRvb2xiYXJDb25maWd8UGFnaW5nVG9vbGJhckNvbmZpZ3xudWxsXG4gICAgLyoqXG4gICAgICogVGV4dCBhbGlnbm1lbnQ6ICdsZWZ0JywgJ2NlbnRlcicgb3IgJ3JpZ2h0Jy4gQWxzbyBhY2NlcHRzIGRpcmVjdGlvbiBuZXV0cmFsICdzdGFydCcgYW5kICdlbmQnLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXRleHRBbGlnbilcbiAgICAgKi9cbiAgICB0ZXh0QWxpZ24gPyA6ICdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCdzdGFydCd8J2VuZCdcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGB0cnVlYCBmb3IgYSBjb250YWluZXIgdXNlZCB0byBzaG93IHRleHQgbWFya3VwLiBJdCB3aWxsIGFwcGx5IHRoZSBDU1MgY2xhc3MgYGItdGV4dC1jb250ZW50YFxuICAgICAqIHdoaWNoIHNwZWNpZmllcyBhIGRlZmF1bHQgbWF4LXdpZHRoIHRoYXQgbWFrZXMgbG9uZyB0ZXh0IG1vcmUgcmVhZGFibGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctdGV4dENvbnRlbnQpXG4gICAgICovXG4gICAgdGV4dENvbnRlbnQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZyBvYmplY3QgdG8gY3JlYXRlIGEgdG9vbHRpcCB3aGljaCB3aWxsIHNob3cgb24gaG92ZXIgb2YgYSBkYXRlIGNlbGwgaW5jbHVkaW5nIGRpc2FibGVkLCB3ZWVrZW5kLFxuICAgICAqIGFuZCBcIm90aGVyIG1vbnRoXCIgY2VsbHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWctdGlwKVxuICAgICAqL1xuICAgIHRpcCA/IDogVG9vbHRpcENvbmZpZ1xuICAgIC8qKlxuICAgICAqIEEgdGl0bGUgdG8gZGlzcGxheSBpbiB0aGUgaGVhZGVyIG9yIG93bmluZyBUYWJQYW5lbC4gQ2F1c2VzIGNyZWF0aW9uIGFuZCBkb2NraW5nIG9mIGEgaGVhZGVyXG4gICAgICogdG8gdGhlIHRvcCBpZiBubyBoZWFkZXIgaXMgY29uZmlndXJlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy10aXRsZSlcbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIHRoZSBjYWxlbmRhciBjZWxsIHdoaWNoIGNvbnRhaW5zIHRvZGF5J3MgZGF0ZS5cbiAgICAgKi9cbiAgICB0b2RheUNscyA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIFt0b29sc10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvVG9vbCkgdG8gYWRkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGB0aXRsZWAgaW4gdGhlIFBhbmVsIGhlYWRlci4gRWFjaFxuICAgICAqIHByb3BlcnR5IG5hbWUgaXMgdGhlIHJlZmVyZW5jZSBieSB3aGljaCBhbiBpbnN0YW50aWF0ZWQgdG9vbCBtYXkgYmUgcmV0cmlldmVkIGZyb20gdGhlIGxpdmVcbiAgICAgKiBgW3Rvb2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9taXhpbi9Ub29sYWJsZSNwcm9wZXJ0eS10b29scylgIHByb3BlcnR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXRvb2xzKVxuICAgICAqL1xuICAgIHRvb2xzID8gOiBSZWNvcmQ8c3RyaW5nLCBUb29sQ29uZmlnPnxudWxsXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBmb3IgdGhlIHdpZGdldCwgZWl0aGVyIGFzIGEgc3RyaW5nIG9yIGFzIGEgVG9vbHRpcCBjb25maWcgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXRvb2x0aXApXG4gICAgICovXG4gICAgdG9vbHRpcCA/IDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbFxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRhYmJpbmcgd2l0aGluIGEgUGFuZWwgaXMgbm90IGNvbnRhaW5lZCwgaWUgeW91IGNhbiBUQUIgb3V0IG9mIHRoZSBQYW5lbFxuICAgICAqIGZvcndhcmRzIG9yIGJhY2t3YXJkcy5cbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBgdHJ1ZWAgdG8gZGlzYWxsb3cgdGFiYmluZyBvdXQgb2YgdGhlIFBhbmVsLCBhbmQgbWFrZSB0YWJiaW5nIGNpcmN1bGFyIHdpdGhpbiB0aGlzIFBhbmVsLlxuICAgICAqL1xuICAgIHRyYXBGb2N1cyA/IDogYm9vbGVhblxuICAgIHR5cGUgPyA6ICdkYXRlcGlja2VyJ1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBDU1MgY2xhc3MgbmFtZSBzdWZmaXhlcyB0byBhcHBseSB0byB0aGUgZWxlbWVudHMgcmVuZGVyZWQgYnkgdGhpcyB3aWRnZXQuIFRoaXMgbWF5IGJlIHNwZWNpZmllZFxuICAgICAqIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzIHdpdGggdHJ1dGh5XG4gICAgICogdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2NvbmZpZy11aSlcbiAgICAgKi9cbiAgICB1aSA/IDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBoZWFkZXIgdGV4dCBmb3IgdGhlIHdlZWsgbnVtYmVyIGNvbHVtbiwgaWYgc2hvd24uXG4gICAgICovXG4gICAgd2Vla0NvbHVtbkhlYWRlciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhlIGNsYXNzIG5hbWUgdG8gYWRkIHRvIGNhbGVuZGFyIGNlbGxzIHdoaWNoIGFyZSB3ZWVrZW5kIGRhdGVzLlxuICAgICAqL1xuICAgIHdlZWtlbmRDbHMgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24gKG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24pIHdoaWNoIGNyZWF0ZXMgY29udGVudCBpbiwgYW5kIG1heSBtdXRhdGUgdGhlIHdlZWsgY2VsbCBlbGVtZW50IGF0IHRoZSBzdGFydCBvZiBhIHdlZWsgcm93LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXdlZWtSZW5kZXJlcilcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB3ZWVrQ2VsbCBUaGUgaGVhZGVyIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSB3ZWVrIEFuIGFycmF5IGNvbnRhaW5pbmcgYFt5ZWFyLCB3ZWVrTnVtYmVyXWBcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nLERvbUNvbmZpZyx2b2lkfVxuICAgICAqL1xuICAgIHdlZWtSZW5kZXJlciA/IDogKCh3ZWVrQ2VsbDogSFRNTEVsZW1lbnQsIHdlZWs6IG51bWJlcltdKSA9PiBzdHJpbmd8RG9tQ29uZmlnfHZvaWQpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRoZSB3ZWVrIHN0YXJ0IGRheSwgMCBtZWFuaW5nIFN1bmRheSwgNiBtZWFuaW5nIFNhdHVyZGF5LlxuICAgICAqIERlZmF1bHRzIHRvIFt3ZWVrU3RhcnREYXldKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvaGVscGVyL0RhdGVIZWxwZXIjcHJvcGVydHktd2Vla1N0YXJ0RGF5LXN0YXRpYykuXG4gICAgICovXG4gICAgd2Vla1N0YXJ0RGF5ID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIHdpZGdldHMgd2VpZ2h0IGRldGVybWluZXMgaXRzIHBvc2l0aW9uIGFtb25nIHNpYmxpbmdzIHdoZW4gYWRkZWQgdG8gYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjY29uZmlnLXgpXG4gICAgICovXG4gICAgeCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHkgcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL1NjaGVkdWxlci93aWRnZXQvU2NoZWR1bGVyRGF0ZVBpY2tlciNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLXNjaGVkdWxlci1kYXRlLXBpY2tlcicsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtU2NoZWR1bGVyRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VDbGFzcyA9IFNjaGVkdWxlckRhdGVQaWNrZXI7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlTmFtZSA9ICdTY2hlZHVsZXJEYXRlUGlja2VyJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZVJlZnJlc2gnLFxuICAgICAgICAnb25CZWZvcmVTZXRSZWNvcmQnLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQmVmb3JlU3RhdGVBcHBseScsXG4gICAgICAgICdvbkJlZm9yZVN0YXRlU2F2ZScsXG4gICAgICAgICdvbkNhdGNoQWxsJyxcbiAgICAgICAgJ29uQ2VsbENsaWNrJyxcbiAgICAgICAgJ29uQ29sbGFwc2UnLFxuICAgICAgICAnb25EYXRlQ2hhbmdlJyxcbiAgICAgICAgJ29uRGVzdHJveScsXG4gICAgICAgICdvbkRpcnR5U3RhdGVDaGFuZ2UnLFxuICAgICAgICAnb25FbGVtZW50Q3JlYXRlZCcsXG4gICAgICAgICdvbkV4cGFuZCcsXG4gICAgICAgICdvbkZvY3VzSW4nLFxuICAgICAgICAnb25Gb2N1c091dCcsXG4gICAgICAgICdvbkhpZGUnLFxuICAgICAgICAnb25QYWludCcsXG4gICAgICAgICdvblJlYWRPbmx5JyxcbiAgICAgICAgJ29uUmVjb21wb3NlJyxcbiAgICAgICAgJ29uUmVmcmVzaCcsXG4gICAgICAgICdvblJlc2l6ZScsXG4gICAgICAgICdvblNlbGVjdGlvbkNoYW5nZScsXG4gICAgICAgICdvblNob3cnLFxuICAgICAgICAnb25Ub29sQ2xpY2snLFxuICAgICAgICAnb25XZWVrQ2VsbENsaWNrJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtU2NoZWR1bGVyRGF0ZVBpY2tlckNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhY3RpdmVEYXRlJyxcbiAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgJ2FsaWduJyxcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYW5pbWF0ZVRpbWVTaGlmdCcsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2F1dG9VcGRhdGVSZWNvcmQnLFxuICAgICAgICAnYmJhcicsXG4gICAgICAgICdib2R5Q2xzJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NlbGxSZW5kZXJlcicsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF0YXNldCcsXG4gICAgICAgICdkYXRlJyxcbiAgICAgICAgJ2RheU5hbWVGb3JtYXQnLFxuICAgICAgICAnZGVmYXVsdEJpbmRQcm9wZXJ0eScsXG4gICAgICAgICdkZWZhdWx0Rm9jdXMnLFxuICAgICAgICAnZGVmYXVsdHMnLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkaXNhYmxlZENscycsXG4gICAgICAgICdkaXNhYmxlZERhdGVzJyxcbiAgICAgICAgJ2Rpc2FibGVOb25Xb3JraW5nRGF5cycsXG4gICAgICAgICdkaXNhYmxlT3RoZXJNb250aENlbGxzJyxcbiAgICAgICAgJ2Rpc2FibGVXZWVrZW5kcycsXG4gICAgICAgICdkb2NrJyxcbiAgICAgICAgJ2RyYWdnYWJsZScsXG4gICAgICAgICdkcmFnU2VsZWN0JyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdlZGl0TW9udGgnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXZlbnRGaWx0ZXInLFxuICAgICAgICAnZXZlbnRTdG9yZScsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdmb2N1c0Rpc2FibGVkRGF0ZXMnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdoZWlnaHQnLFxuICAgICAgICAnaGlkZGVuJyxcbiAgICAgICAgJ2hpZGVBbmltYXRpb24nLFxuICAgICAgICAnaGlkZU90aGVyTW9udGhDZWxscycsXG4gICAgICAgICdoaWRlV2hlbkVtcHR5JyxcbiAgICAgICAgJ2hpZ2hsaWdodFNlbGVjdGVkV2VlaycsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2h0bWxDbHMnLFxuICAgICAgICAnaWNvbicsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbmNsdWRlWWVhcicsXG4gICAgICAgICdpbnB1dEZpZWxkQWxpZ24nLFxuICAgICAgICAnaW5zZXJ0QmVmb3JlJyxcbiAgICAgICAgJ2luc2VydEZpcnN0JyxcbiAgICAgICAgJ2l0ZW1DbHMnLFxuICAgICAgICAnaXRlbXMnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xhYmVsUG9zaXRpb24nLFxuICAgICAgICAnbGF5b3V0JyxcbiAgICAgICAgJ2xheW91dFN0eWxlJyxcbiAgICAgICAgJ2xhenlJdGVtcycsXG4gICAgICAgICdsaXN0ZW5lcnMnLFxuICAgICAgICAnbG9jYWxlQ2xhc3MnLFxuICAgICAgICAnbG9jYWxpemFibGUnLFxuICAgICAgICAnbG9jYWxpemFibGVQcm9wZXJ0aWVzJyxcbiAgICAgICAgJ21hcmdpbicsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heERhdGUnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluQ29sdW1uV2lkdGgnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtaW5IZWlnaHQnLFxuICAgICAgICAnbWluUm93SGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnbW9udGhCdXR0b25Gb3JtYXQnLFxuICAgICAgICAnbXVsdGlTZWxlY3QnLFxuICAgICAgICAnbmFtZWRJdGVtcycsXG4gICAgICAgICdub25Xb3JraW5nRGF5Q2xzJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ290aGVyTW9udGhDbHMnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbGF5U3RvcmVFdmVudHMnLFxuICAgICAgICAncmVuZGl0aW9uJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2VsZWN0aW9uJyxcbiAgICAgICAgJ3NoYWRlUGFzdERhdGVzJyxcbiAgICAgICAgJ3Nob3dBbmltYXRpb24nLFxuICAgICAgICAnc2hvd0V2ZW50cycsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzaG93V2Vla0NvbHVtbicsXG4gICAgICAgICdzaXhXZWVrcycsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3N0cmlwcycsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFiQmFySXRlbXMnLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RiYXInLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RleHRDb250ZW50JyxcbiAgICAgICAgJ3RpcCcsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b2RheUNscycsXG4gICAgICAgICd0b29scycsXG4gICAgICAgICd0b29sdGlwJyxcbiAgICAgICAgJ3RyYXBGb2N1cycsXG4gICAgICAgICd0eXBlJyxcbiAgICAgICAgJ3VpJyxcbiAgICAgICAgJ3dlZWtDb2x1bW5IZWFkZXInLFxuICAgICAgICAnd2Vla2VuZENscycsXG4gICAgICAgICd3ZWVrUmVuZGVyZXInLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWN0aXZlRGF0ZScsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdhdXRvVXBkYXRlUmVjb3JkJyxcbiAgICAgICAgJ2JiYXInLFxuICAgICAgICAnYm9keUNscycsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2VsbFJlbmRlcmVyJyxcbiAgICAgICAgJ2NlbnRlcmVkJyxcbiAgICAgICAgJ2NvbGxhcHNpYmxlJyxcbiAgICAgICAgJ2NvbG9yJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50RWxlbWVudENscycsXG4gICAgICAgICdkYXRhRmllbGQnLFxuICAgICAgICAnZGF5TmFtZUZvcm1hdCcsXG4gICAgICAgICdkZWZhdWx0QmluZFByb3BlcnR5JyxcbiAgICAgICAgJ2RlZmF1bHRGb2N1cycsXG4gICAgICAgICdkZWZhdWx0cycsXG4gICAgICAgICdkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzJyxcbiAgICAgICAgJ2Rpc2FibGVkQ2xzJyxcbiAgICAgICAgJ2Rpc2FibGVkRGF0ZXMnLFxuICAgICAgICAnZGlzYWJsZU5vbldvcmtpbmdEYXlzJyxcbiAgICAgICAgJ2Rpc2FibGVPdGhlck1vbnRoQ2VsbHMnLFxuICAgICAgICAnZGlzYWJsZVdlZWtlbmRzJyxcbiAgICAgICAgJ2RvY2snLFxuICAgICAgICAnZHJhZ2dhYmxlJyxcbiAgICAgICAgJ2RyYXdlcicsXG4gICAgICAgICdlZGl0TW9udGgnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZXZlbnRGaWx0ZXInLFxuICAgICAgICAnZXZlbnRTdG9yZScsXG4gICAgICAgICdmbG9hdGluZycsXG4gICAgICAgICdmb2N1c0Rpc2FibGVkRGF0ZXMnLFxuICAgICAgICAnZm9vdGVyJyxcbiAgICAgICAgJ2hlYWRlcicsXG4gICAgICAgICdoZWFkZXJSZW5kZXJlcicsXG4gICAgICAgICdoaWRlQW5pbWF0aW9uJyxcbiAgICAgICAgJ2hpZGVPdGhlck1vbnRoQ2VsbHMnLFxuICAgICAgICAnaGlkZVdoZW5FbXB0eScsXG4gICAgICAgICdodG1sQ2xzJyxcbiAgICAgICAgJ2ljb24nLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaW5jbHVkZVllYXInLFxuICAgICAgICAnaXRlbUNscycsXG4gICAgICAgICdsYXp5SXRlbXMnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21heERhdGUnLFxuICAgICAgICAnbWluQ29sdW1uV2lkdGgnLFxuICAgICAgICAnbWluRGF0ZScsXG4gICAgICAgICdtaW5Sb3dIZWlnaHQnLFxuICAgICAgICAnbW9uaXRvclJlc2l6ZScsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICdtb250aEJ1dHRvbkZvcm1hdCcsXG4gICAgICAgICdtdWx0aVNlbGVjdCcsXG4gICAgICAgICduYW1lZEl0ZW1zJyxcbiAgICAgICAgJ25vbldvcmtpbmdEYXlDbHMnLFxuICAgICAgICAnbm9uV29ya2luZ0RheXMnLFxuICAgICAgICAnb3RoZXJNb250aENscycsXG4gICAgICAgICdvd25lcicsXG4gICAgICAgICdwb3NpdGlvbmVkJyxcbiAgICAgICAgJ3ByZXZlbnRUb29sdGlwT25Ub3VjaCcsXG4gICAgICAgICdyZWxheVN0b3JlRXZlbnRzJyxcbiAgICAgICAgJ3JpcHBsZScsXG4gICAgICAgICdyb290RWxlbWVudCcsXG4gICAgICAgICdzY3JvbGxBY3Rpb24nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93RXZlbnRzJyxcbiAgICAgICAgJ3Nob3dUb29sdGlwV2hlbkRpc2FibGVkJyxcbiAgICAgICAgJ3Nob3dXZWVrQ29sdW1uJyxcbiAgICAgICAgJ3NpeFdlZWtzJyxcbiAgICAgICAgJ3N0YXRlZnVsJyxcbiAgICAgICAgJ3N0YXRlZnVsRXZlbnRzJyxcbiAgICAgICAgJ3N0YXRlSWQnLFxuICAgICAgICAnc3RhdGVQcm92aWRlcicsXG4gICAgICAgICdzdHJpcHMnLFxuICAgICAgICAndGFiJyxcbiAgICAgICAgJ3RhYkJhckl0ZW1zJyxcbiAgICAgICAgJ3RhZycsXG4gICAgICAgICd0YmFyJyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0ZXh0Q29udGVudCcsXG4gICAgICAgICd0aXAnLFxuICAgICAgICAndG9kYXlDbHMnLFxuICAgICAgICAndHJhcEZvY3VzJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAndWknLFxuICAgICAgICAnd2Vla2VuZENscycsXG4gICAgICAgICd3ZWVrUmVuZGVyZXInLFxuICAgICAgICAnd2Vla1N0YXJ0RGF5JyxcbiAgICAgICAgJ3dlaWdodCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1TY2hlZHVsZXJEYXRlUGlja2VyQ29tcG9uZW50LmJyeW50dW1GZWF0dXJlTmFtZXMuY29uY2F0KFtcbiAgICAgICAgJ2FsaWduU2VsZicsXG4gICAgICAgICdhbmNob3JTaXplJyxcbiAgICAgICAgJ2FuaW1hdGVUaW1lU2hpZnQnLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2VkJyxcbiAgICAgICAgJ2NvbHVtbicsXG4gICAgICAgICdjb250ZW50JyxcbiAgICAgICAgJ2RhdGFzZXQnLFxuICAgICAgICAnZGF0ZScsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkcmFnU2VsZWN0JyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2ZvY3VzVmlzaWJsZScsXG4gICAgICAgICdoYXNDaGFuZ2VzJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlnaGxpZ2h0U2VsZWN0ZWRXZWVrJyxcbiAgICAgICAgJ2h0bWwnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnaW5wdXRGaWVsZEFsaWduJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdpc1NldHRpbmdWYWx1ZXMnLFxuICAgICAgICAnaXNWYWxpZCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbGFiZWxQb3NpdGlvbicsXG4gICAgICAgICdsYXlvdXQnLFxuICAgICAgICAnbGF5b3V0U3R5bGUnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVjb3JkJyxcbiAgICAgICAgJ3JlbmRpdGlvbicsXG4gICAgICAgICdydGwnLFxuICAgICAgICAnc2Nyb2xsYWJsZScsXG4gICAgICAgICdzZWxlY3Rpb24nLFxuICAgICAgICAnc2hhZGVQYXN0RGF0ZXMnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdGF0ZScsXG4gICAgICAgICdzdHJpY3RSZWNvcmRNYXBwaW5nJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3Rvb2xzJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAndmFsdWVzJyxcbiAgICAgICAgJ3dlZWtDb2x1bW5IZWFkZXInLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IFNjaGVkdWxlckRhdGVQaWNrZXI7XG5cbiAgICBwcml2YXRlIGJyeW50dW1Db25maWcgPSB7XG4gICAgICAgIGFkb3B0ICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFwcGVuZFRvICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGhyZWYgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFuZ3VsYXJDb21wb25lbnQgOiB0aGlzLFxuICAgICAgICBmZWF0dXJlcyAgICAgICAgIDoge30sXG4gICAgICAgIGxpc3RlbmVycyAgICAgICAgOiB7fVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLy8gQ29uZmlncyBvbmx5XG4gICAgQElucHV0KCkgYWN0aXZlRGF0ZSAgICAgICAgICAgICAgICAgICAhIDogRGF0ZXwndG9kYXknfHN0cmluZztcbiAgICBASW5wdXQoKSBhZG9wdCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgYWxpZ24gICAgICAgICAgICAgICAgICAgICAgICAhIDogQWxpZ25TcGVjfHN0cmluZztcbiAgICBASW5wdXQoKSBhbmNob3IgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b1VwZGF0ZVJlY29yZCAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBiYmFyICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoU2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZ3xzdHJpbmcpW118VG9vbGJhckNvbmZpZ3xQYWdpbmdUb29sYmFyQ29uZmlnfG51bGw7XG4gICAgQElucHV0KCkgYm9keUNscyAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBidWJibGVFdmVudHMgICAgICAgICAgICAgICAgICEgOiBvYmplY3Q7XG4gICAgQElucHV0KCkgY2VsbFJlbmRlcmVyICAgICAgICAgICAgICAgICAhIDogKChyZW5kZXJEYXRhOiB7IGNlbGw6IEhUTUxFbGVtZW50LCBpbm5lckNlbGw6IEhUTUxFbGVtZW50LCBjZWxsUGF5bG9hZDogSFRNTEVsZW1lbnQsIGRhdGU6IERhdGUsIGRheTogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyW10sIHJvdzogSFRNTEVsZW1lbnQsIHNvdXJjZTogQ2FsZW5kYXJQYW5lbCwgY2VsbEluZGV4OiBudW1iZXJbXSwgY29sdW1uSW5kZXg6IG51bWJlcltdLCB2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlcltdIH0pID0+IHN0cmluZ3xEb21Db25maWd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sbGFwc2libGUgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxQYW5lbENvbGxhcHNlckNvbmZpZ3xQYW5lbENvbGxhcHNlck92ZXJsYXlDb25maWc7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRheU5hbWVGb3JtYXQgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZWZhdWx0QmluZFByb3BlcnR5ICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGVmYXVsdEZvY3VzICAgICAgICAgICAgICAgICAhIDogKCh3aWRnZXQ6IFdpZGdldCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRzICAgICAgICAgICAgICAgICAgICAgISA6IFNjaGVkdWxlckNvbnRhaW5lckl0ZW1Db25maWc7XG4gICAgQElucHV0KCkgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZENscyAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGlzYWJsZWREYXRlcyAgICAgICAgICAgICAgICAhIDogKChkYXRlOiBEYXRlKSA9PiBib29sZWFuKXxzdHJpbmd8RGF0ZVtdfHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIGRpc2FibGVOb25Xb3JraW5nRGF5cyAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgZGlzYWJsZU90aGVyTW9udGhDZWxscyAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkaXNhYmxlV2Vla2VuZHMgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRvY2sgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICd0b3AnfCdib3R0b20nfCdsZWZ0J3wncmlnaHQnfCdzdGFydCd8J2VuZCd8J2hlYWRlcid8J3ByZS1oZWFkZXInfG9iamVjdDtcbiAgICBASW5wdXQoKSBkcmFnZ2FibGUgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHtcbiAgICAgICAgaGFuZGxlU2VsZWN0b3I/OiBzdHJpbmdcbiAgICB9O1xuICAgIEBJbnB1dCgpIGRyYXdlciAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e3NpZGU/OiAnc3RhcnQnfCdsZWZ0J3wnZW5kJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nLCBzaXplPzogc3RyaW5nfG51bWJlciwgaW5saW5lPzogYm9vbGVhbiwgYXV0b0Nsb3NlOiB7IG1vdXNlZG93bj86IGJvb2xlYW58c3RyaW5nLCBmb2N1c291dD86IGJvb2xlYW58c3RyaW5nLCBtb3VzZW91dD86IHN0cmluZyB9LCBhdXRvQ2xvc2VEZWxheT86IG51bWJlcn07XG4gICAgQElucHV0KCkgZWRpdE1vbnRoICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZXZlbnRGaWx0ZXIgICAgICAgICAgICAgICAgICAhIDogKChldmVudDogRXZlbnRNb2RlbCkgPT4gYm9vbGVhbil8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGV2ZW50U3RvcmUgICAgICAgICAgICAgICAgICAgISA6IEV2ZW50U3RvcmU7XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBmb2N1c0Rpc2FibGVkRGF0ZXMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGZvb3RlciAgICAgICAgICAgICAgICAgICAgICAgISA6IHtcbiAgICAgICAgZG9jaz86ICd0b3AnfCdyaWdodCd8J2JvdHRvbSd8J2xlZnQnfCdzdGFydCd8J2VuZCdcbiAgICAgICAgaHRtbD86IHN0cmluZ1xuICAgICAgICBjbHM/OiBzdHJpbmdcbiAgICB9fHN0cmluZztcbiAgICBASW5wdXQoKSBoZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8Ym9vbGVhbnxQYW5lbEhlYWRlcjtcbiAgICBASW5wdXQoKSBoZWFkZXJSZW5kZXJlciAgICAgICAgICAgICAgICEgOiAoKGNlbGw6IEhUTUxFbGVtZW50LCBjb2x1bW5JbmRleDogbnVtYmVyLCB3ZWVrRGF5OiBudW1iZXIpID0+IHN0cmluZ3xEb21Db25maWd8dm9pZCl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGVBbmltYXRpb24gICAgICAgICAgICAgICAgISA6IGJvb2xlYW58b2JqZWN0O1xuICAgIEBJbnB1dCgpIGhpZGVPdGhlck1vbnRoQ2VsbHMgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaGlkZVdoZW5FbXB0eSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBodG1sQ2xzICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8b2JqZWN0O1xuICAgIEBJbnB1dCgpIGljb24gICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xEb21Db25maWc7XG4gICAgQElucHV0KCkgaWdub3JlUGFyZW50UmVhZE9ubHkgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpbmNsdWRlWWVhciAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGl0ZW1DbHMgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBsYXp5SXRlbXMgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnPnxTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgbGlzdGVuZXJzICAgICAgICAgICAgICAgICAgICAhIDogU2NoZWR1bGVyRGF0ZVBpY2tlckxpc3RlbmVycztcbiAgICBASW5wdXQoKSBsb2NhbGVDbGFzcyAgICAgICAgICAgICAgICAgICEgOiB0eXBlb2YgQmFzZTtcbiAgICBASW5wdXQoKSBsb2NhbGl6YWJsZSAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlUHJvcGVydGllcyAgICAgICAgISA6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIG1hc2tEZWZhdWx0cyAgICAgICAgICAgICAgICAgISA6IE1hc2tDb25maWc7XG4gICAgQElucHV0KCkgbWFza2VkICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmd8TWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXhEYXRlICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIG1pbkNvbHVtbldpZHRoICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5EYXRlICAgICAgICAgICAgICAgICAgICAgICEgOiBEYXRlO1xuICAgIEBJbnB1dCgpIG1pblJvd0hlaWdodCAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbW9uaXRvclJlc2l6ZSAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9O1xuICAgIEBJbnB1dCgpIG1vbnRoICAgICAgICAgICAgICAgICAgICAgICAgISA6IE1vbnRofE1vbnRoQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbnRoQnV0dG9uRm9ybWF0ICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBtdWx0aVNlbGVjdCAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdyYW5nZSd8J3NpbXBsZSc7XG4gICAgQElucHV0KCkgbmFtZWRJdGVtcyAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgbm9uV29ya2luZ0RheUNscyAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG5vbldvcmtpbmdEYXlzICAgICAgICAgICAgICAgISA6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+O1xuICAgIEBJbnB1dCgpIG90aGVyTW9udGhDbHMgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd0V2ZW50cyAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnY291bnQnfCdoZWF0bWFwJztcbiAgICBASW5wdXQoKSBzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNob3dXZWVrQ29sdW1uICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc2l4V2Vla3MgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBzdGF0ZWZ1bCAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG9iamVjdHxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzdGF0ZWZ1bEV2ZW50cyAgICAgICAgICAgICAgICEgOiBvYmplY3R8c3RyaW5nW107XG4gICAgQElucHV0KCkgc3RhdGVJZCAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHN0YXRlUHJvdmlkZXIgICAgICAgICAgICAgICAgISA6IFN0YXRlUHJvdmlkZXI7XG4gICAgQElucHV0KCkgc3RyaXBzICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgU2NoZWR1bGVyQ29udGFpbmVySXRlbUNvbmZpZz47XG4gICAgQElucHV0KCkgdGFiICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxUYWJDb25maWc7XG4gICAgQElucHV0KCkgdGFiQmFySXRlbXMgICAgICAgICAgICAgICAgICAhIDogVG9vbGJhckl0ZW1zW118V2lkZ2V0W107XG4gICAgQElucHV0KCkgdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRiYXIgICAgICAgICAgICAgICAgICAgICAgICAgISA6IChTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnfHN0cmluZylbXXxUb29sYmFyQ29uZmlnfFBhZ2luZ1Rvb2xiYXJDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB0ZXh0QWxpZ24gICAgICAgICAgICAgICAgICAgICEgOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnO1xuICAgIEBJbnB1dCgpIHRleHRDb250ZW50ICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdGlwICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogVG9vbHRpcENvbmZpZztcbiAgICBASW5wdXQoKSB0b2RheUNscyAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdHJhcEZvY3VzICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAnZGF0ZXBpY2tlcic7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogJ3BsYWluJ3wndG9vbGJhcid8c3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB3ZWVrZW5kQ2xzICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgd2Vla1JlbmRlcmVyICAgICAgICAgICAgICAgICAhIDogKCh3ZWVrQ2VsbDogSFRNTEVsZW1lbnQsIHdlZWs6IG51bWJlcltdKSA9PiBzdHJpbmd8RG9tQ29uZmlnfHZvaWQpfHN0cmluZztcbiAgICBASW5wdXQoKSB3ZWVrU3RhcnREYXkgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgd2VpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuXG4gICAgLy8gQ29uZmlncyBhbmQgcHJvcGVydGllc1xuICAgIEBJbnB1dCgpIGFsaWduU2VsZiAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFuaW1hdGVUaW1lU2hpZnQgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhcHBlbmRUbyAgICAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBjYWxsT25GdW5jdGlvbnMgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBjb2xsYXBzZWQgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgY29udGVudCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGF0YXNldCAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8UmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBASW5wdXQoKSBkYXRlICAgICAgICAgICAgICAgICAgICAgICAgISA6IERhdGV8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnwnaW5lcnQnO1xuICAgIEBJbnB1dCgpIGRyYWdTZWxlY3QgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBleHRyYURhdGEgICAgICAgICAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSBmbGV4ICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhpZGRlbiAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoaWdobGlnaHRTZWxlY3RlZFdlZWsgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KCh3aWRnZXQ6IFdpZGdldCkgPT4gc3RyaW5nKXxEb21Db25maWd8RG9tQ29uZmlnW118VnVlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGlucHV0RmllbGRBbGlnbiAgICAgICAgICAgICAhIDogJ3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSBpbnNlcnRCZWZvcmUgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpbnNlcnRGaXJzdCAgICAgICAgICAgICAgICAgISA6IEhUTUxFbGVtZW50fHN0cmluZztcbiAgICBASW5wdXQoKSBpdGVtcyAgICAgICAgICAgICAgICAgICAgICAgISA6IChTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnfFdpZGdldClbXXxSZWNvcmQ8c3RyaW5nLCBTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtQ29uZmlnPnxXaWRnZXRbXXxSZWNvcmQ8c3RyaW5nLCBTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnk+fChTY2hlZHVsZXJDb250YWluZXJJdGVtQ29uZmlnfE1lbnVJdGVtRW50cnl8V2lkZ2V0KVtdO1xuICAgIEBJbnB1dCgpIGtleU1hcCAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgS2V5TWFwQ29uZmlnPjtcbiAgICBASW5wdXQoKSBsYWJlbFBvc2l0aW9uICAgICAgICAgICAgICAgISA6ICdiZWZvcmUnfCdhYm92ZSd8J2FsaWduLWJlZm9yZSd8J2F1dG8nfG51bGw7XG4gICAgQElucHV0KCkgbGF5b3V0ICAgICAgICAgICAgICAgICAgICAgICEgOiBMYXlvdXR8c3RyaW5nfFNjaGVkdWxlckNvbnRhaW5lckxheW91dENvbmZpZztcbiAgICBASW5wdXQoKSBsYXlvdXRTdHlsZSAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBtYXJnaW4gICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgbWF4SGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1heGltaXplT25Nb2JpbGUgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhXaWR0aCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluSGVpZ2h0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG1pbldpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcmVjb3JkICAgICAgICAgICAgICAgICAgICAgICEgOiBNb2RlbDtcbiAgICBASW5wdXQoKSByZW5kaXRpb24gICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fG51bGw7XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsZXJ8Ym9vbGVhbnxTY3JvbGxlckNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgISA6IERhdGVbXXxzdHJpbmdbXTtcbiAgICBASW5wdXQoKSBzaGFkZVBhc3REYXRlcyAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RyaWN0UmVjb3JkTWFwcGluZyAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRpdGxlICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRvb2xzICAgICAgICAgICAgICAgICAgICAgICAhIDogUmVjb3JkPHN0cmluZywgVG9vbHxUb29sQ29uZmlnPnxudWxsfFJlY29yZDxzdHJpbmcsIFRvb2w+fFJlY29yZDxzdHJpbmcsIFRvb2xDb25maWc+O1xuICAgIEBJbnB1dCgpIHRvb2x0aXAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfFRvb2x0aXBDb25maWd8bnVsbDtcbiAgICBASW5wdXQoKSB3ZWVrQ29sdW1uSGVhZGVyICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB3aWR0aCAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcnxzdHJpbmc7XG4gICAgQElucHV0KCkgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBQcm9wZXJ0aWVzIG9ubHlcbiAgICBASW5wdXQoKSBhbmNob3JTaXplICAgICAgISA6IG51bWJlcltdO1xuICAgIEBJbnB1dCgpIGZvY3VzVmlzaWJsZSAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBoYXNDaGFuZ2VzICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNTZXR0aW5nVmFsdWVzICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGlzVmFsaWQgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwYXJlbnQgICAgICAgICAgISA6IFdpZGdldDtcbiAgICBASW5wdXQoKSBzdGF0ZSAgICAgICAgICAgISA6IGFueTtcbiAgICBASW5wdXQoKSB2YWx1ZXMgICAgICAgICAgISA6IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG5cbiAgICAvLyBFdmVudHMgZW1pdHRlcnNcbiAgICAvKipcbiAgICAgKiBGaXJlcyBiZWZvcmUgYW4gb2JqZWN0IGlzIGRlc3Ryb3llZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLkJhc2V9IGV2ZW50LnNvdXJjZSBUaGUgT2JqZWN0IHRoYXQgaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZURlc3Ryb3k6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IEJhc2UgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBiZWZvcmUgYSB3aWRnZXQgaXMgaGlkZGVuLiBSZXR1cm4gYGZhbHNlYCB0byBwcmV2ZW50IHRoZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBoaWRkZW4uXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoaXMgQ2FsZW5kYXJQYW5lbCByZWZyZXNoZXMgaW4gcmVzcG9uc2UgdG8gY2hhbmdlcyBpbiBpdHMgbW9udGguXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuRGF0ZVBpY2tlcn0gZXZlbnQuc291cmNlIFRoaXMgRGF0ZVBpY2tlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVSZWZyZXNoOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBEYXRlUGlja2VyIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCBiZWZvcmUgdGhpcyBjb250YWluZXIgd2lsbCBsb2FkIHJlY29yZCB2YWx1ZXMgaW50byBpdHMgY2hpbGQgZmllbGRzLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3VcbiAgICAgKiB3YW50IHRvIG1vZGlmeSB0aGUgVUkgYmVmb3JlIGRhdGEgaXMgbG9hZGVkIChlLmcuIHNldCBzb21lIGlucHV0IGZpZWxkIHRvIGJlIHJlYWRvbmx5KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LkNvbnRhaW5lcn0gZXZlbnQuc291cmNlIFRoZSBjb250YWluZXJcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTZXRSZWNvcmQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IENvbnRhaW5lciwgcmVjb3JkOiBNb2RlbCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIGJlZm9yZSBzdGF0ZSBpcyBhcHBsaWVkIHRvIHRoZSBzb3VyY2UuIEFsbG93cyBlZGl0aW5nIHRoZSBzdGF0ZSBvYmplY3Qgb3IgcHJldmVudGluZyB0aGUgb3BlcmF0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQuc3RhdGUgU3RhdGUgb2JqZWN0IGNvbmZpZ1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVN0YXRlQXBwbHk6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgYmVmb3JlIHN0YXRlIGlzIHNhdmVkIGJ5IHRoZSBTdGF0ZVByb3ZpZGVyLiBBbGxvd3MgZWRpdGluZyB0aGUgc3RhdGUgb2JqZWN0IG9yIHByZXZlbnRpbmcgdGhlIG9wZXJhdGlvbi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50LnN0YXRlIFN0YXRlIG9iamVjdCBjb25maWdcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTdGF0ZVNhdmU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzdGF0ZTogYW55IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbnkgb3RoZXIgZXZlbnQgaXMgZmlyZWQgZnJvbSB0aGUgb2JqZWN0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9TY2hlZHVsZXIvd2lkZ2V0L1NjaGVkdWxlckRhdGVQaWNrZXIjZXZlbnQtY2F0Y2hBbGwpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7e1trZXk6IHN0cmluZ106IGFueSwgdHlwZTogc3RyaW5nfX0gZXZlbnQuZXZlbnQgVGhlIE9iamVjdCB0aGF0IGNvbnRhaW5zIGV2ZW50IGRldGFpbHNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQuZXZlbnQudHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgd2hpY2ggaXMgY2F1Z2h0IGJ5IHRoZSBsaXN0ZW5lclxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNhdGNoQWxsOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHtba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ30pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGEgZGF0ZSBjZWxsIGlzIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmNlbGwgVGhlIGNsaWNrZWQgY2VsbCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgZGF0ZSByZXByZXNlbnRlZCBieSB0aGUgY2VsbC5cbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBldmVudC53ZWVrIFRoZSB3ZWVrIGFycmF5IGBbeWVhciwgd2Vla051bWJlcl1gLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBvcmlnaW5hbCBET00gZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2VsbENsaWNrOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgY2VsbDogSFRNTEVsZW1lbnQsIGRhdGU6IERhdGUsIHdlZWs6IG51bWJlcltdLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBjb2xsYXBzZWQgdXNpbmcgdGhlIFtjb2xsYXBzaWJsZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvUGFuZWwjY29uZmlnLWNvbGxhcHNpYmxlKSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlBhbmVsfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gdGhlIGRhdGUgb2YgdGhpcyBDYWxlbmRhclBhbmVsIGlzIHNldC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC52YWx1ZSBUaGUgbmV3IGRhdGUuXG4gICAgICogQHBhcmFtIHtEYXRlfSBldmVudC5vbGRWYWx1ZSBUaGUgb2xkIGRhdGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50LmNoYW5nZXMgQW4gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHByb3BlcnRpZXMgd2hpY2ggaW5kaWNhdGUgd2hhdCBwYXJ0IG9mIHRoZSBkYXRlIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VzLmQgVHJ1ZSBpZiB0aGUgZGF0ZSBjaGFuZ2VkIGluIGFueSB3YXkuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jaGFuZ2VzLncgVHJ1ZSBpZiB0aGUgd2VlayBjaGFuZ2VkIChpbmNsdWRpbmcgc2FtZSB3ZWVrIGluIGEgZGlmZmVyZW50IHllYXIpLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlcy5tIFRydWUgaWYgdGhlIG1vbnRoIGNoYW5nZWQgKGluY2x1ZGluZyBzYW1lIG1vbnRoIGluIGEgZGlmZmVyZW50IHllYXIpLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY2hhbmdlcy55IFRydWUgaWYgdGhlIHllYXIgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EYXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgdmFsdWU6IERhdGUsIG9sZFZhbHVlOiBEYXRlLCBjaGFuZ2VzOiB7IGQ6IGJvb2xlYW4sIHc6IGJvb2xlYW4sIG06IGJvb2xlYW4sIHk6IGJvb2xlYW4gfSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhIGZpZWxkIGlzIG11dGF0ZWQgYW5kIHRoZSBzdGF0ZSBvZiB0aGUgW2hhc0NoYW5nZXNdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0NvbnRhaW5lciNwcm9wZXJ0eS1oYXNDaGFuZ2VzKSBwcm9wZXJ0eSBjaGFuZ2VzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuQ29udGFpbmVyfSBldmVudC5zb3VyY2UgVGhlIGNvbnRhaW5lci5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmRpcnR5IFRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgQ29udGFpbmVyIC0gYHRydWVgIGlmIHRoZXJlIGFyZSBhbnkgZmllbGRzIHdoaWNoIGhhdmUgYmVlbiBjaGFuZ2VkIHNpbmNlIGluaXRpYWwgbG9hZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25EaXJ0eVN0YXRlQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBDb250YWluZXIsIGRpcnR5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCdzIFtlbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5lbGVtZW50IFRoZSBXaWRnZXQncyBlbGVtZW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVsZW1lbnRDcmVhdGVkOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgZWxlbWVudDogSFRNTEVsZW1lbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBQYW5lbCBpcyBleHBhbmRlZCB1c2luZyB0aGUgW2NvbGxhcHNpYmxlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9QYW5lbCNjb25maWctY29sbGFwc2libGUpIHNldHRpbmcuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuUGFuZWx9IGV2ZW50LnNvdXJjZSBUaGlzIFBhbmVsLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkV4cGFuZDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogUGFuZWwgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZW50ZXJzIHRoaXMgV2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNJbjogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSBgYmx1cmAgZXZlbnQuXG4gICAgICogZm9jdXMgbW92aW5nIGZyb20gd2l0aGluIHRoaXMgV2lkZ2V0J3Mgb3duZXJzaGlwIHRyZWUsIGV2ZW4gaWYgdGhlcmUgYXJlIGZsb2F0aW5nIHdpZGdldHNcbiAgICAgKiB3aWxsIG5vdCB0cmlnZ2VyIHRoaXMgZXZlbnQuIFRoaXMgaXMgd2hlbiBmb2N1cyBleGl0cyB0aGlzIHdpZGdldCBjb21wbGV0ZWx5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuZnJvbUVsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC50b0VsZW1lbnQgVGhlIGVsZW1lbnQgd2hpY2ggZ2FpbmVkIGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5mcm9tV2lkZ2V0IFRoZSB3aWRnZXQgd2hpY2ggbG9zdCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQudG9XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5iYWNrd2FyZHMgYHRydWVgIGlmIHRoZSBgdG9FbGVtZW50YCBpcyBiZWZvcmUgdGhlIGBmcm9tRWxlbWVudGAgaW4gZG9jdW1lbnQgb3JkZXIuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXNPdXQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZnJvbUVsZW1lbnQ6IEhUTUxFbGVtZW50LCB0b0VsZW1lbnQ6IEhUTUxFbGVtZW50LCBmcm9tV2lkZ2V0OiBXaWRnZXQsIHRvV2lkZ2V0OiBXaWRnZXQsIGJhY2t3YXJkczogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGFmdGVyIGEgd2lkZ2V0IHdhcyBoaWRkZW5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGlkZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgd2hlbiBhIHdpZGdldCB3aGljaCBoYWQgYmVlbiBpbiBhIG5vbi12aXNpYmxlIHN0YXRlIGZvciBhbnkgcmVhc29uXG4gICAgICogYWNoaWV2ZXMgdmlzaWJpbGl0eS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvU2NoZWR1bGVyL3dpZGdldC9TY2hlZHVsZXJEYXRlUGlja2VyI2V2ZW50LXBhaW50KVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgcGFpbnRlZC5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmZpcnN0UGFpbnQgYHRydWVgIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHBhaW50LlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblBhaW50OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZpcnN0UGFpbnQ6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSBXaWRnZXQncyByZWFkIG9ubHkgc3RhdGUgaXMgdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LnJlYWRPbmx5IFJlYWQgb25seSBvciBub3RcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWFkT25seTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlYWRPbmx5OiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIGFmdGVyIGEgd2lkZ2V0J3MgZWxlbWVudHMgaGF2ZSBiZWVuIHN5bmNocm9uaXplZCBkdWUgdG8gYSBkaXJlY3Qgb3IgaW5kaXJlY3QgY2FsbFxuICAgICAqIHRvIFtyZWNvbXBvc2VdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlcyB3aGVuIHRoaXMgQ2FsZW5kYXJQYW5lbCByZWZyZXNoZXMuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKCkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gdGhlIGVuY2Fwc3VsYXRpbmcgZWxlbWVudCBvZiBhIFdpZGdldCByZXNpemVzICpvbmx5IHdoZW4gW21vbml0b3JSZXNpemVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbW9uaXRvclJlc2l6ZSkgaXMgYHRydWVgKi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGlzIFdpZGdldFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC53aWR0aCBUaGUgbmV3IHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmhlaWdodCBUaGUgbmV3IGhlaWdodFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudC5vbGRXaWR0aCBUaGUgb2xkIHdpZHRoXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZEhlaWdodCBUaGUgb2xkIGhlaWdodFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlc2l6ZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgb2xkV2lkdGg6IG51bWJlciwgb2xkSGVpZ2h0OiBudW1iZXIgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYSBkYXRlIG9yIGRhdGUgcmFuZ2UgaXMgc2VsZWN0ZWQuIElmIFttdWx0aVNlbGVjdF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9zY2hlZHVsZXIvZG9jcy9hcGkvQ29yZS93aWRnZXQvRGF0ZVBpY2tlciNjb25maWctbXVsdGlTZWxlY3QpIGlzIHNwZWNpZmllZCxcbiAgICAgKiB0aGlzIHdpbGwgZmlyZSB1cG9uIGRlc2VsZWN0aW9uIGFuZCBzZWxlY3Rpb24gb2YgZGF0ZXMuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZVtdfSBldmVudC5zZWxlY3Rpb24gVGhlIHNlbGVjdGVkIGRhdGVzLiBJZiBbbXVsdGlTZWxlY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0RhdGVQaWNrZXIjY29uZmlnLW11bHRpU2VsZWN0KSBpcyBzcGVjaWZpZWQgdGhpcyBtYXkgYmUgYSB0d28gZWxlbWVudCBhcnJheSBzcGVjaWZ5aW5nIHN0YXJ0IGFuZCBlbmQgZGF0ZXMuXG4gICAgICogQHBhcmFtIHtEYXRlW119IGV2ZW50Lm9sZFNlbGVjdGlvbiBUaGUgcHJldmlvdXNseSBzZWxlY3RlZCBkYXRlcy4gSWYgW211bHRpU2VsZWN0XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL3NjaGVkdWxlci9kb2NzL2FwaS9Db3JlL3dpZGdldC9EYXRlUGlja2VyI2NvbmZpZy1tdWx0aVNlbGVjdCkgaXMgc3BlY2lmaWVkIHRoaXMgbWF5IGJlIGEgdHdvIGVsZW1lbnQgYXJyYXkgc3BlY2lmeWluZyBzdGFydCBhbmQgZW5kIGRhdGVzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQudXNlckFjdGlvbiBUaGlzIHdpbGwgYmUgYHRydWVgIGlmIHRoZSBjaGFuZ2Ugd2FzIGNhdXNlZCBieSB1c2VyIGludGVyYWN0aW9uIGFzIG9wcG9zZWQgdG8gcHJvZ3JhbW1hdGljIHNldHRpbmcuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc2VsZWN0aW9uOiBEYXRlW10sIG9sZFNlbGVjdGlvbjogRGF0ZVtdLCB1c2VyQWN0aW9uOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNob3c6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQSBoZWFkZXIgW3Rvb2xdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvc2NoZWR1bGVyL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy10b29scykgaGFzIGJlZW4gY2xpY2tlZC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5Ub29sfSBldmVudC5zb3VyY2UgVGhpcyBQYW5lbC5cbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LlRvb2x9IGV2ZW50LnRvb2wgVGhlIHRvb2wgd2hpY2ggaXMgYmVpbmcgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub29sQ2xpY2s6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFRvb2wsIHRvb2w6IFRvb2wgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gYSB3ZWVrIG51bWJlciBjZWxsIGlzIGNsaWNrZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7RGF0ZX0gZXZlbnQuZGF0ZSBUaGUgc3RhcnQgZGF0ZSBvZiB0aGUgd2Vlay5cbiAgICAgKiBAcGFyYW0ge251bWJlcltdfSBldmVudC53ZWVrIFRoZSB3ZWVrIGFycmF5IGBbeWVhciwgd2Vla051bWJlcl1gLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmRvbUV2ZW50IFRoZSBvcmlnaW5hbCBET00gZXZlbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uV2Vla0NlbGxDbGljazogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGRhdGU6IERhdGUsIHdlZWs6IG51bWJlcltdLCBkb21FdmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuZCBhcHBlbmQgdGhlIHVuZGVybHlpbmcgd2lkZ2V0XG4gICAgICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBtZSA9IHRoaXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnXG4gICAgICAgICAgICB9ID0gbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2VDbGFzcyxcbiAgICAgICAgICAgICAgICBpbnN0YW5jZU5hbWUsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ3MsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUV2ZW50c1xuICAgICAgICAgICAgfSA9IEJyeW50dW1TY2hlZHVsZXJEYXRlUGlja2VyQ29tcG9uZW50O1xuXG4gICAgICAgIGJyeW50dW1Db25maWdzLmZpbHRlcihwcm9wID0+IHByb3AgaW4gdGhpcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoYnJ5bnR1bUNvbmZpZywgcHJvcCwgdGhpc1twcm9wXSk7XG4gICAgICAgICAgICBpZiAoWydmZWF0dXJlcycsICdjb25maWcnXS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbmZpZ1Byb3AoaW5zdGFuY2VOYW1lLCBwcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgYnJ5bnR1bUV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gdGhpc1tldmVudF0gJiYgdGhpc1tldmVudF0ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgY29uc3RcbiAgICAgICAgICAgICAgICB1bmNhcGl0YWxpemUgPSAoc3RyOiBzdHJpbmcpID0+IHN0ci5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0ci5zbGljZSgxKSxcbiAgICAgICAgICAgICAgICBldmVudE5hbWUgPSAoc3RyOiBzdHJpbmcpID0+IHVuY2FwaXRhbGl6ZShzdHIuc2xpY2UoMikpO1xuXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBicnludHVtQ29uZmlnLmxpc3RlbmVyc1tldmVudE5hbWUoZXZlbnQpXSA9IGUgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBtZVtldmVudF0uZW1pdChlKTtcbiAgICAgICAgICAgICAgICAvLyBFdmVudEVtaXR0ZXIgZG9lcyBub3QgcmV0dXJuIHZhbHVlcyBpbiB0aGUgbm9ybWFsIHdheSwgd29yayBhcm91bmQgaXQgYnkgc2V0dGluZyBgcmV0dXJuVmFsdWVgIGZsYWdcbiAgICAgICAgICAgICAgICAvLyBpbiBBbmd1bGFyIGxpc3RlbmVyc1xuICAgICAgICAgICAgICAgIHJldHVybiBlLnJldHVyblZhbHVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gSWYgY29tcG9uZW50IGhhcyBubyBjb250YWluZXIgc3BlY2lmaWVkIGluIGNvbmZpZyB0aGVuIHVzZSBhZG9wdCB0byBXcmFwcGVyJ3MgZWxlbWVudFxuICAgICAgICBjb25zdFxuICAgICAgICAgICAgY29udGFpbmVyUGFyYW0gPSBbXG4gICAgICAgICAgICAgICAgJ2Fkb3B0JyxcbiAgICAgICAgICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAgICAgICAgICdpbnNlcnRBZnRlcicsXG4gICAgICAgICAgICAgICAgJ2luc2VydEJlZm9yZSdcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBdLmZpbmQocHJvcCA9PiBicnludHVtQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJQYXJhbSkge1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlTmFtZSA9PT0gJ0J1dHRvbicgfHwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldFJvb3ROb2RlKCkgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgICAgICAgICAgICAgLy8gQnV0dG9uIHNob3VsZCBhbHdheXMgYmUgPGE+IG9yIDxidXR0b24+IGluc2lkZSBvd25lciBlbGVtZW50XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hcHBlbmRUbyA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWcuYWRvcHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdDb250YWluZXIoaW5zdGFuY2VOYW1lLCBjb250YWluZXJQYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIG1lLmluc3RhbmNlID0gaW5zdGFuY2VOYW1lID09PSAnV2lkZ2V0JyA/IFdpZGdldC5jcmVhdGUoYnJ5bnR1bUNvbmZpZykgOiBuZXcgaW5zdGFuY2VDbGFzcyhicnludHVtQ29uZmlnKTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdhdGNoIGZvciBjaGFuZ2VzXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgeyBpbnN0YW5jZU5hbWUgfSA9IEJyeW50dW1TY2hlZHVsZXJEYXRlUGlja2VyQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1TY2hlZHVsZXJEYXRlUGlja2VyQ29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKGJyeW50dW1Qcm9wcy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuYXBwbHlQcm9wVmFsdWUoaW5zdGFuY2UsIHByb3AsIG5ld1ZhbHVlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGJyeW50dW1Db25maWdzT25seS5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmRldldhcm5pbmdVcGRhdGVQcm9wKGluc3RhbmNlTmFtZSwgcHJvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXN0cm95IHRoZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZSAmJiB0aGlzLmluc3RhbmNlLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|