@bryntum/grid-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-grid-angular-thin.d.ts +5 -0
- package/bundles/bryntum-grid-angular-thin.umd.js +12313 -0
- package/bundles/bryntum-grid-angular-thin.umd.js.map +1 -0
- package/esm2015/bryntum-grid-angular-thin.js +5 -0
- package/esm2015/lib/bryntum-a-i-filter-field.component.js +792 -0
- package/esm2015/lib/bryntum-checklist-filter-combo.component.js +944 -0
- package/esm2015/lib/bryntum-grid-base.component.js +2100 -0
- package/esm2015/lib/bryntum-grid-chart-designer.component.js +589 -0
- package/esm2015/lib/bryntum-grid-field-filter-picker-group.component.js +755 -0
- package/esm2015/lib/bryntum-grid-field-filter-picker.component.js +745 -0
- package/esm2015/lib/bryntum-grid.component.js +2104 -0
- package/esm2015/lib/bryntum-group-bar.component.js +728 -0
- package/esm2015/lib/bryntum-tree-combo.component.js +933 -0
- package/esm2015/lib/bryntum-tree-grid.component.js +2104 -0
- package/esm2015/lib/grid.module.js +69 -0
- package/esm2015/lib/wrapper.helper.js +74 -0
- package/esm2015/public-api.js +15 -0
- package/fesm2015/bryntum-grid-angular-thin.js +11856 -0
- package/fesm2015/bryntum-grid-angular-thin.js.map +1 -0
- package/lib/bryntum-a-i-filter-field.component.d.ts +969 -0
- package/lib/bryntum-checklist-filter-combo.component.d.ts +1211 -0
- package/lib/bryntum-grid-base.component.d.ts +2272 -0
- package/lib/bryntum-grid-chart-designer.component.d.ts +692 -0
- package/lib/bryntum-grid-field-filter-picker-group.component.d.ts +930 -0
- package/lib/bryntum-grid-field-filter-picker.component.d.ts +917 -0
- package/lib/bryntum-grid.component.d.ts +2274 -0
- package/lib/bryntum-group-bar.component.d.ts +873 -0
- package/lib/bryntum-tree-combo.component.d.ts +1200 -0
- package/lib/bryntum-tree-grid.component.d.ts +2274 -0
- package/lib/grid.module.d.ts +16 -0
- package/lib/wrapper.helper.d.ts +26 -0
- package/package.json +33 -0
- package/public-api.d.ts +11 -0
|
@@ -0,0 +1,728 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
/**
|
|
3
|
+
* Angular wrapper for Bryntum GroupBar
|
|
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 { GroupBar } from '@bryntum/grid-thin';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
export class BryntumGroupBarComponent {
|
|
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
|
+
* User going to activate an item in the list either by pointer or keyboard.
|
|
35
|
+
* The active record, list item index, and the triggering event are passed.
|
|
36
|
+
* It is preventable by returning `false`
|
|
37
|
+
* @param {object} event Event object
|
|
38
|
+
* @param {Core.widget.List} event.source The List instance
|
|
39
|
+
* @param {HTMLElement} event.item The clicked list element
|
|
40
|
+
* @param {Core.data.Model} event.record Activated record
|
|
41
|
+
* @param {number} event.index List item index
|
|
42
|
+
* @param {Event} event.event Triggering event
|
|
43
|
+
*/
|
|
44
|
+
this.onBeforeItem = new EventEmitter();
|
|
45
|
+
/**
|
|
46
|
+
* Triggered before a widget is shown. Return `false` to prevent the action.
|
|
47
|
+
* @param {object} event Event object
|
|
48
|
+
* @param {Core.widget.Widget,any} event.source The widget being shown
|
|
49
|
+
*/
|
|
50
|
+
this.onBeforeShow = new EventEmitter();
|
|
51
|
+
/**
|
|
52
|
+
* Fires when any other event is fired from the object.
|
|
53
|
+
* ...
|
|
54
|
+
* [View online docs...](https://bryntum.com/products/grid/docs/api/Grid/widget/GroupBar#event-catchAll)
|
|
55
|
+
* @param {object} event Event object
|
|
56
|
+
* @param {{[key: string]: any, type: string}} event.event The Object that contains event details
|
|
57
|
+
* @param {string} event.event.type The type of the event which is caught by the listener
|
|
58
|
+
*/
|
|
59
|
+
this.onCatchAll = new EventEmitter();
|
|
60
|
+
/**
|
|
61
|
+
* Fires when an object is destroyed.
|
|
62
|
+
* @param {object} event Event object
|
|
63
|
+
* @param {Core.Base} event.source The Object that is being destroyed.
|
|
64
|
+
*/
|
|
65
|
+
this.onDestroy = new EventEmitter();
|
|
66
|
+
/**
|
|
67
|
+
* Triggered when a widget's [element](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#property-element) is available.
|
|
68
|
+
* @param {object} event Event object
|
|
69
|
+
* @param {HTMLElement} event.element The Widget's element.
|
|
70
|
+
*/
|
|
71
|
+
this.onElementCreated = new EventEmitter();
|
|
72
|
+
/**
|
|
73
|
+
* Fired when focus enters this Widget.
|
|
74
|
+
* @param {object} event Event object
|
|
75
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
76
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
77
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
78
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
79
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
80
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
81
|
+
*/
|
|
82
|
+
this.onFocusIn = new EventEmitter();
|
|
83
|
+
/**
|
|
84
|
+
* Fired when focus exits this Widget's ownership tree. This is different from a `blur` event.
|
|
85
|
+
* focus moving from within this Widget's ownership tree, even if there are floating widgets
|
|
86
|
+
* will not trigger this event. This is when focus exits this widget completely.
|
|
87
|
+
* @param {object} event Event object
|
|
88
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
89
|
+
* @param {HTMLElement} event.fromElement The element which lost focus.
|
|
90
|
+
* @param {HTMLElement} event.toElement The element which gained focus.
|
|
91
|
+
* @param {Core.widget.Widget} event.fromWidget The widget which lost focus.
|
|
92
|
+
* @param {Core.widget.Widget} event.toWidget The widget which gained focus.
|
|
93
|
+
* @param {boolean} event.backwards `true` if the `toElement` is before the `fromElement` in document order.
|
|
94
|
+
*/
|
|
95
|
+
this.onFocusOut = new EventEmitter();
|
|
96
|
+
/**
|
|
97
|
+
* Triggered after a widget was hidden
|
|
98
|
+
* @param {object} event Event object
|
|
99
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
100
|
+
*/
|
|
101
|
+
this.onHide = new EventEmitter();
|
|
102
|
+
/**
|
|
103
|
+
* User activated an item in the list either by pointer or keyboard.
|
|
104
|
+
* The active record, list item index, and the triggering event are passed.
|
|
105
|
+
* @param {object} event Event object
|
|
106
|
+
* @param {Core.widget.List} event.source The List instance
|
|
107
|
+
* @param {HTMLElement} event.item The clicked list element
|
|
108
|
+
* @param {Core.data.Model} event.record Activated record
|
|
109
|
+
* @param {number} event.index List item index
|
|
110
|
+
* @param {Event} event.event Triggering event
|
|
111
|
+
*/
|
|
112
|
+
this.onItem = new EventEmitter();
|
|
113
|
+
/**
|
|
114
|
+
* Triggered when a widget which had been in a non-visible state for any reason
|
|
115
|
+
* achieves visibility.
|
|
116
|
+
* ...
|
|
117
|
+
* [View online docs...](https://bryntum.com/products/grid/docs/api/Grid/widget/GroupBar#event-paint)
|
|
118
|
+
* @param {object} event Event object
|
|
119
|
+
* @param {Core.widget.Widget} event.source The widget being painted.
|
|
120
|
+
* @param {boolean} event.firstPaint `true` if this is the first paint.
|
|
121
|
+
*/
|
|
122
|
+
this.onPaint = new EventEmitter();
|
|
123
|
+
/**
|
|
124
|
+
* Fired when a Widget's read only state is toggled
|
|
125
|
+
* @param {object} event Event object
|
|
126
|
+
* @param {boolean} event.readOnly Read only or not
|
|
127
|
+
*/
|
|
128
|
+
this.onReadOnly = new EventEmitter();
|
|
129
|
+
/**
|
|
130
|
+
* This event is fired after a widget's elements have been synchronized due to a direct or indirect call
|
|
131
|
+
* to [recompose](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#function-recompose), if this results in some change to the widget's rendered DOM elements.
|
|
132
|
+
*/
|
|
133
|
+
this.onRecompose = new EventEmitter();
|
|
134
|
+
/**
|
|
135
|
+
* Fired when the encapsulating element of a Widget resizes *only when [monitorResize](https://bryntum.com/products/grid/docs/api/Core/widget/Widget#config-monitorResize) is `true`*.
|
|
136
|
+
* @param {object} event Event object
|
|
137
|
+
* @param {Core.widget.Widget} event.source This Widget
|
|
138
|
+
* @param {number} event.width The new width
|
|
139
|
+
* @param {number} event.height The new height
|
|
140
|
+
* @param {number} event.oldWidth The old width
|
|
141
|
+
* @param {number} event.oldHeight The old height
|
|
142
|
+
*/
|
|
143
|
+
this.onResize = new EventEmitter();
|
|
144
|
+
/**
|
|
145
|
+
* Fired when selection changes
|
|
146
|
+
* @param {object} event Event object
|
|
147
|
+
* @param {Core.widget.List} event.source The List instance
|
|
148
|
+
* @param {Core.data.Model[]} event.selected An array of the currently selected records
|
|
149
|
+
*/
|
|
150
|
+
this.onSelectionChange = new EventEmitter();
|
|
151
|
+
/**
|
|
152
|
+
* Triggered after a widget is shown.
|
|
153
|
+
* @param {object} event Event object
|
|
154
|
+
* @param {Core.widget.Widget} event.source The widget
|
|
155
|
+
*/
|
|
156
|
+
this.onShow = new EventEmitter();
|
|
157
|
+
/**
|
|
158
|
+
* Group item expanded or collapsed
|
|
159
|
+
* @param {object} event Event object
|
|
160
|
+
* @param {Core.data.Model} event.groupRecord Group record
|
|
161
|
+
* @param {boolean} event.collapse Collapsed (true) or expanded (false)
|
|
162
|
+
*/
|
|
163
|
+
this.onToggleGroup = new EventEmitter();
|
|
164
|
+
/**
|
|
165
|
+
* Tree parent node expanded or collapsed
|
|
166
|
+
* @param {object} event Event object
|
|
167
|
+
* @param {Core.data.Model} event.record The parent record which has been toggled
|
|
168
|
+
* @param {boolean} event.collapse Collapsed (true) or expanded (false)
|
|
169
|
+
*/
|
|
170
|
+
this.onToggleNode = new EventEmitter();
|
|
171
|
+
this.elementRef = element;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create and append the underlying widget
|
|
175
|
+
*/
|
|
176
|
+
ngOnInit() {
|
|
177
|
+
const me = this, { elementRef, bryntumConfig } = me, { instanceClass, instanceName, bryntumConfigs, bryntumEvents } = BryntumGroupBarComponent;
|
|
178
|
+
bryntumConfigs.filter(prop => prop in this).forEach(prop => {
|
|
179
|
+
// @ts-ignore
|
|
180
|
+
WrapperHelper.applyPropValue(bryntumConfig, prop, this[prop]);
|
|
181
|
+
if (['features', 'config'].includes(prop)) {
|
|
182
|
+
WrapperHelper.devWarningConfigProp(instanceName, prop);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
// @ts-ignore
|
|
186
|
+
bryntumEvents.filter(event => this[event] && this[event].observers.length > 0).forEach(event => {
|
|
187
|
+
const uncapitalize = (str) => str.charAt(0).toLowerCase() + str.slice(1), eventName = (str) => uncapitalize(str.slice(2));
|
|
188
|
+
// @ts-ignore
|
|
189
|
+
bryntumConfig.listeners[eventName(event)] = e => {
|
|
190
|
+
// @ts-ignore
|
|
191
|
+
me[event].emit(e);
|
|
192
|
+
// EventEmitter does not return values in the normal way, work around it by setting `returnValue` flag
|
|
193
|
+
// in Angular listeners
|
|
194
|
+
return e.returnValue;
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
// If component has no container specified in config then use adopt to Wrapper's element
|
|
198
|
+
const containerParam = [
|
|
199
|
+
'adopt',
|
|
200
|
+
'appendTo',
|
|
201
|
+
'insertAfter',
|
|
202
|
+
'insertBefore'
|
|
203
|
+
// @ts-ignore
|
|
204
|
+
].find(prop => bryntumConfig[prop]);
|
|
205
|
+
if (!containerParam) {
|
|
206
|
+
if (instanceName === 'Button' || elementRef.nativeElement.getRootNode() instanceof ShadowRoot) {
|
|
207
|
+
// Button should always be <a> or <button> inside owner element
|
|
208
|
+
bryntumConfig.appendTo = elementRef.nativeElement;
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
bryntumConfig.adopt = elementRef.nativeElement;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
WrapperHelper.devWarningContainer(instanceName, containerParam);
|
|
216
|
+
}
|
|
217
|
+
// @ts-ignore
|
|
218
|
+
me.instance = instanceName === 'Widget' ? Widget.create(bryntumConfig) : new instanceClass(bryntumConfig);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Watch for changes
|
|
222
|
+
* @param changes
|
|
223
|
+
*/
|
|
224
|
+
ngOnChanges(changes) {
|
|
225
|
+
const { instance } = this, { instanceName } = BryntumGroupBarComponent;
|
|
226
|
+
if (!instance) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
// Iterate over all changes
|
|
230
|
+
Object.entries(changes).forEach(([prop, change]) => {
|
|
231
|
+
const newValue = change.currentValue, { instance } = this, { bryntumConfigsOnly, bryntumProps } = BryntumGroupBarComponent;
|
|
232
|
+
if (bryntumProps.includes(prop)) {
|
|
233
|
+
WrapperHelper.applyPropValue(instance, prop, newValue, false);
|
|
234
|
+
if (bryntumConfigsOnly.includes(prop)) {
|
|
235
|
+
WrapperHelper.devWarningUpdateProp(instanceName, prop);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Destroy the component
|
|
242
|
+
*/
|
|
243
|
+
ngOnDestroy() {
|
|
244
|
+
// @ts-ignore
|
|
245
|
+
if (this.instance && this.instance.destroy) {
|
|
246
|
+
this.instance.destroy();
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
BryntumGroupBarComponent.instanceClass = GroupBar;
|
|
251
|
+
BryntumGroupBarComponent.instanceName = 'GroupBar';
|
|
252
|
+
BryntumGroupBarComponent.bryntumEvents = [
|
|
253
|
+
'onBeforeDestroy',
|
|
254
|
+
'onBeforeHide',
|
|
255
|
+
'onBeforeItem',
|
|
256
|
+
'onBeforeShow',
|
|
257
|
+
'onCatchAll',
|
|
258
|
+
'onDestroy',
|
|
259
|
+
'onElementCreated',
|
|
260
|
+
'onFocusIn',
|
|
261
|
+
'onFocusOut',
|
|
262
|
+
'onHide',
|
|
263
|
+
'onItem',
|
|
264
|
+
'onPaint',
|
|
265
|
+
'onReadOnly',
|
|
266
|
+
'onRecompose',
|
|
267
|
+
'onResize',
|
|
268
|
+
'onSelectionChange',
|
|
269
|
+
'onShow',
|
|
270
|
+
'onToggleGroup',
|
|
271
|
+
'onToggleNode'
|
|
272
|
+
];
|
|
273
|
+
BryntumGroupBarComponent.bryntumFeatureNames = [];
|
|
274
|
+
BryntumGroupBarComponent.bryntumConfigs = BryntumGroupBarComponent.bryntumFeatureNames.concat([
|
|
275
|
+
'activateOnMouseover',
|
|
276
|
+
'adopt',
|
|
277
|
+
'align',
|
|
278
|
+
'alignSelf',
|
|
279
|
+
'allowGroupSelect',
|
|
280
|
+
'anchor',
|
|
281
|
+
'appendTo',
|
|
282
|
+
'ariaDescription',
|
|
283
|
+
'ariaLabel',
|
|
284
|
+
'bubbleEvents',
|
|
285
|
+
'callOnFunctions',
|
|
286
|
+
'catchEventHandlerExceptions',
|
|
287
|
+
'centered',
|
|
288
|
+
'clearSelectionOnEmptySpaceClick',
|
|
289
|
+
'closable',
|
|
290
|
+
'closeHandler',
|
|
291
|
+
'cls',
|
|
292
|
+
'collapsibleGroups',
|
|
293
|
+
'color',
|
|
294
|
+
'column',
|
|
295
|
+
'config',
|
|
296
|
+
'constrainTo',
|
|
297
|
+
'content',
|
|
298
|
+
'contentElementCls',
|
|
299
|
+
'dataField',
|
|
300
|
+
'dataset',
|
|
301
|
+
'defaultBindProperty',
|
|
302
|
+
'detectCSSCompatibilityIssues',
|
|
303
|
+
'disabled',
|
|
304
|
+
'displayField',
|
|
305
|
+
'dock',
|
|
306
|
+
'draggable',
|
|
307
|
+
'elementAttributes',
|
|
308
|
+
'emptyText',
|
|
309
|
+
'extraData',
|
|
310
|
+
'flex',
|
|
311
|
+
'floating',
|
|
312
|
+
'getItemCls',
|
|
313
|
+
'getItemStyle',
|
|
314
|
+
'groupHeaderTpl',
|
|
315
|
+
'height',
|
|
316
|
+
'hidden',
|
|
317
|
+
'hideAnimation',
|
|
318
|
+
'html',
|
|
319
|
+
'htmlCls',
|
|
320
|
+
'iconTpl',
|
|
321
|
+
'id',
|
|
322
|
+
'ignoreParentReadOnly',
|
|
323
|
+
'insertBefore',
|
|
324
|
+
'insertFirst',
|
|
325
|
+
'isSelectable',
|
|
326
|
+
'items',
|
|
327
|
+
'itemTpl',
|
|
328
|
+
'keyMap',
|
|
329
|
+
'listeners',
|
|
330
|
+
'localeClass',
|
|
331
|
+
'localizable',
|
|
332
|
+
'localizableProperties',
|
|
333
|
+
'margin',
|
|
334
|
+
'maskDefaults',
|
|
335
|
+
'masked',
|
|
336
|
+
'maxHeight',
|
|
337
|
+
'maximizeOnMobile',
|
|
338
|
+
'maxWidth',
|
|
339
|
+
'minHeight',
|
|
340
|
+
'minWidth',
|
|
341
|
+
'monitorResize',
|
|
342
|
+
'multiSelect',
|
|
343
|
+
'owner',
|
|
344
|
+
'positioned',
|
|
345
|
+
'preventTooltipOnTouch',
|
|
346
|
+
'readOnly',
|
|
347
|
+
'relayStoreEvents',
|
|
348
|
+
'ripple',
|
|
349
|
+
'rootElement',
|
|
350
|
+
'rtl',
|
|
351
|
+
'scrollable',
|
|
352
|
+
'scrollAction',
|
|
353
|
+
'selectAllItem',
|
|
354
|
+
'selected',
|
|
355
|
+
'showAnimation',
|
|
356
|
+
'showTooltipWhenDisabled',
|
|
357
|
+
'span',
|
|
358
|
+
'store',
|
|
359
|
+
'tab',
|
|
360
|
+
'tag',
|
|
361
|
+
'textAlign',
|
|
362
|
+
'title',
|
|
363
|
+
'toggleAllIfCtrlPressed',
|
|
364
|
+
'tooltip',
|
|
365
|
+
'tooltipTemplate',
|
|
366
|
+
'type',
|
|
367
|
+
'ui',
|
|
368
|
+
'virtualize',
|
|
369
|
+
'weight',
|
|
370
|
+
'width',
|
|
371
|
+
'x',
|
|
372
|
+
'y'
|
|
373
|
+
]);
|
|
374
|
+
BryntumGroupBarComponent.bryntumConfigsOnly = [
|
|
375
|
+
'activateOnMouseover',
|
|
376
|
+
'adopt',
|
|
377
|
+
'align',
|
|
378
|
+
'allowGroupSelect',
|
|
379
|
+
'anchor',
|
|
380
|
+
'ariaDescription',
|
|
381
|
+
'ariaLabel',
|
|
382
|
+
'bubbleEvents',
|
|
383
|
+
'centered',
|
|
384
|
+
'clearSelectionOnEmptySpaceClick',
|
|
385
|
+
'closable',
|
|
386
|
+
'closeHandler',
|
|
387
|
+
'color',
|
|
388
|
+
'config',
|
|
389
|
+
'constrainTo',
|
|
390
|
+
'contentElementCls',
|
|
391
|
+
'dataField',
|
|
392
|
+
'defaultBindProperty',
|
|
393
|
+
'detectCSSCompatibilityIssues',
|
|
394
|
+
'displayField',
|
|
395
|
+
'dock',
|
|
396
|
+
'draggable',
|
|
397
|
+
'elementAttributes',
|
|
398
|
+
'floating',
|
|
399
|
+
'getItemCls',
|
|
400
|
+
'getItemStyle',
|
|
401
|
+
'groupHeaderTpl',
|
|
402
|
+
'hideAnimation',
|
|
403
|
+
'htmlCls',
|
|
404
|
+
'iconTpl',
|
|
405
|
+
'ignoreParentReadOnly',
|
|
406
|
+
'isSelectable',
|
|
407
|
+
'itemTpl',
|
|
408
|
+
'listeners',
|
|
409
|
+
'localeClass',
|
|
410
|
+
'localizable',
|
|
411
|
+
'localizableProperties',
|
|
412
|
+
'maskDefaults',
|
|
413
|
+
'masked',
|
|
414
|
+
'monitorResize',
|
|
415
|
+
'owner',
|
|
416
|
+
'positioned',
|
|
417
|
+
'preventTooltipOnTouch',
|
|
418
|
+
'relayStoreEvents',
|
|
419
|
+
'ripple',
|
|
420
|
+
'rootElement',
|
|
421
|
+
'scrollAction',
|
|
422
|
+
'selectAllItem',
|
|
423
|
+
'showAnimation',
|
|
424
|
+
'showTooltipWhenDisabled',
|
|
425
|
+
'tab',
|
|
426
|
+
'tag',
|
|
427
|
+
'textAlign',
|
|
428
|
+
'tooltipTemplate',
|
|
429
|
+
'type',
|
|
430
|
+
'ui',
|
|
431
|
+
'virtualize',
|
|
432
|
+
'weight'
|
|
433
|
+
];
|
|
434
|
+
BryntumGroupBarComponent.bryntumProps = BryntumGroupBarComponent.bryntumFeatureNames.concat([
|
|
435
|
+
'alignSelf',
|
|
436
|
+
'anchorSize',
|
|
437
|
+
'appendTo',
|
|
438
|
+
'callOnFunctions',
|
|
439
|
+
'catchEventHandlerExceptions',
|
|
440
|
+
'cls',
|
|
441
|
+
'collapsibleGroups',
|
|
442
|
+
'column',
|
|
443
|
+
'content',
|
|
444
|
+
'dataset',
|
|
445
|
+
'disabled',
|
|
446
|
+
'emptyText',
|
|
447
|
+
'extraData',
|
|
448
|
+
'flex',
|
|
449
|
+
'focusVisible',
|
|
450
|
+
'height',
|
|
451
|
+
'hidden',
|
|
452
|
+
'html',
|
|
453
|
+
'id',
|
|
454
|
+
'insertBefore',
|
|
455
|
+
'insertFirst',
|
|
456
|
+
'items',
|
|
457
|
+
'keyMap',
|
|
458
|
+
'margin',
|
|
459
|
+
'maxHeight',
|
|
460
|
+
'maximizeOnMobile',
|
|
461
|
+
'maxWidth',
|
|
462
|
+
'minHeight',
|
|
463
|
+
'minWidth',
|
|
464
|
+
'multiSelect',
|
|
465
|
+
'parent',
|
|
466
|
+
'readOnly',
|
|
467
|
+
'rtl',
|
|
468
|
+
'scrollable',
|
|
469
|
+
'selected',
|
|
470
|
+
'span',
|
|
471
|
+
'store',
|
|
472
|
+
'title',
|
|
473
|
+
'toggleAllIfCtrlPressed',
|
|
474
|
+
'tooltip',
|
|
475
|
+
'width',
|
|
476
|
+
'x',
|
|
477
|
+
'y'
|
|
478
|
+
]);
|
|
479
|
+
BryntumGroupBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGroupBarComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
480
|
+
BryntumGroupBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.0", type: BryntumGroupBarComponent, selector: "bryntum-group-bar", inputs: { activateOnMouseover: "activateOnMouseover", adopt: "adopt", align: "align", allowGroupSelect: "allowGroupSelect", anchor: "anchor", ariaDescription: "ariaDescription", ariaLabel: "ariaLabel", bubbleEvents: "bubbleEvents", centered: "centered", clearSelectionOnEmptySpaceClick: "clearSelectionOnEmptySpaceClick", closable: "closable", closeHandler: "closeHandler", color: "color", config: "config", constrainTo: "constrainTo", contentElementCls: "contentElementCls", dataField: "dataField", defaultBindProperty: "defaultBindProperty", detectCSSCompatibilityIssues: "detectCSSCompatibilityIssues", displayField: "displayField", dock: "dock", draggable: "draggable", elementAttributes: "elementAttributes", floating: "floating", getItemCls: "getItemCls", getItemStyle: "getItemStyle", groupHeaderTpl: "groupHeaderTpl", hideAnimation: "hideAnimation", htmlCls: "htmlCls", iconTpl: "iconTpl", ignoreParentReadOnly: "ignoreParentReadOnly", isSelectable: "isSelectable", itemTpl: "itemTpl", listeners: "listeners", localeClass: "localeClass", localizable: "localizable", localizableProperties: "localizableProperties", maskDefaults: "maskDefaults", masked: "masked", monitorResize: "monitorResize", owner: "owner", positioned: "positioned", preventTooltipOnTouch: "preventTooltipOnTouch", relayStoreEvents: "relayStoreEvents", ripple: "ripple", rootElement: "rootElement", scrollAction: "scrollAction", selectAllItem: "selectAllItem", showAnimation: "showAnimation", showTooltipWhenDisabled: "showTooltipWhenDisabled", tab: "tab", tag: "tag", textAlign: "textAlign", tooltipTemplate: "tooltipTemplate", type: "type", ui: "ui", virtualize: "virtualize", weight: "weight", alignSelf: "alignSelf", appendTo: "appendTo", callOnFunctions: "callOnFunctions", catchEventHandlerExceptions: "catchEventHandlerExceptions", cls: "cls", collapsibleGroups: "collapsibleGroups", column: "column", content: "content", dataset: "dataset", disabled: "disabled", emptyText: "emptyText", extraData: "extraData", flex: "flex", height: "height", hidden: "hidden", html: "html", id: "id", insertBefore: "insertBefore", insertFirst: "insertFirst", items: "items", keyMap: "keyMap", margin: "margin", maxHeight: "maxHeight", maximizeOnMobile: "maximizeOnMobile", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", multiSelect: "multiSelect", readOnly: "readOnly", rtl: "rtl", scrollable: "scrollable", selected: "selected", span: "span", store: "store", title: "title", toggleAllIfCtrlPressed: "toggleAllIfCtrlPressed", tooltip: "tooltip", width: "width", x: "x", y: "y", anchorSize: "anchorSize", focusVisible: "focusVisible", parent: "parent" }, outputs: { onBeforeDestroy: "onBeforeDestroy", onBeforeHide: "onBeforeHide", onBeforeItem: "onBeforeItem", onBeforeShow: "onBeforeShow", onCatchAll: "onCatchAll", onDestroy: "onDestroy", onElementCreated: "onElementCreated", onFocusIn: "onFocusIn", onFocusOut: "onFocusOut", onHide: "onHide", onItem: "onItem", onPaint: "onPaint", onReadOnly: "onReadOnly", onRecompose: "onRecompose", onResize: "onResize", onSelectionChange: "onSelectionChange", onShow: "onShow", onToggleGroup: "onToggleGroup", onToggleNode: "onToggleNode" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.0", ngImport: i0, type: BryntumGroupBarComponent, decorators: [{
|
|
482
|
+
type: Component,
|
|
483
|
+
args: [{
|
|
484
|
+
selector: 'bryntum-group-bar',
|
|
485
|
+
template: ''
|
|
486
|
+
}]
|
|
487
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { activateOnMouseover: [{
|
|
488
|
+
type: Input
|
|
489
|
+
}], adopt: [{
|
|
490
|
+
type: Input
|
|
491
|
+
}], align: [{
|
|
492
|
+
type: Input
|
|
493
|
+
}], allowGroupSelect: [{
|
|
494
|
+
type: Input
|
|
495
|
+
}], anchor: [{
|
|
496
|
+
type: Input
|
|
497
|
+
}], ariaDescription: [{
|
|
498
|
+
type: Input
|
|
499
|
+
}], ariaLabel: [{
|
|
500
|
+
type: Input
|
|
501
|
+
}], bubbleEvents: [{
|
|
502
|
+
type: Input
|
|
503
|
+
}], centered: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], clearSelectionOnEmptySpaceClick: [{
|
|
506
|
+
type: Input
|
|
507
|
+
}], closable: [{
|
|
508
|
+
type: Input
|
|
509
|
+
}], closeHandler: [{
|
|
510
|
+
type: Input
|
|
511
|
+
}], color: [{
|
|
512
|
+
type: Input
|
|
513
|
+
}], config: [{
|
|
514
|
+
type: Input
|
|
515
|
+
}], constrainTo: [{
|
|
516
|
+
type: Input
|
|
517
|
+
}], contentElementCls: [{
|
|
518
|
+
type: Input
|
|
519
|
+
}], dataField: [{
|
|
520
|
+
type: Input
|
|
521
|
+
}], defaultBindProperty: [{
|
|
522
|
+
type: Input
|
|
523
|
+
}], detectCSSCompatibilityIssues: [{
|
|
524
|
+
type: Input
|
|
525
|
+
}], displayField: [{
|
|
526
|
+
type: Input
|
|
527
|
+
}], dock: [{
|
|
528
|
+
type: Input
|
|
529
|
+
}], draggable: [{
|
|
530
|
+
type: Input
|
|
531
|
+
}], elementAttributes: [{
|
|
532
|
+
type: Input
|
|
533
|
+
}], floating: [{
|
|
534
|
+
type: Input
|
|
535
|
+
}], getItemCls: [{
|
|
536
|
+
type: Input
|
|
537
|
+
}], getItemStyle: [{
|
|
538
|
+
type: Input
|
|
539
|
+
}], groupHeaderTpl: [{
|
|
540
|
+
type: Input
|
|
541
|
+
}], hideAnimation: [{
|
|
542
|
+
type: Input
|
|
543
|
+
}], htmlCls: [{
|
|
544
|
+
type: Input
|
|
545
|
+
}], iconTpl: [{
|
|
546
|
+
type: Input
|
|
547
|
+
}], ignoreParentReadOnly: [{
|
|
548
|
+
type: Input
|
|
549
|
+
}], isSelectable: [{
|
|
550
|
+
type: Input
|
|
551
|
+
}], itemTpl: [{
|
|
552
|
+
type: Input
|
|
553
|
+
}], listeners: [{
|
|
554
|
+
type: Input
|
|
555
|
+
}], localeClass: [{
|
|
556
|
+
type: Input
|
|
557
|
+
}], localizable: [{
|
|
558
|
+
type: Input
|
|
559
|
+
}], localizableProperties: [{
|
|
560
|
+
type: Input
|
|
561
|
+
}], maskDefaults: [{
|
|
562
|
+
type: Input
|
|
563
|
+
}], masked: [{
|
|
564
|
+
type: Input
|
|
565
|
+
}], monitorResize: [{
|
|
566
|
+
type: Input
|
|
567
|
+
}], owner: [{
|
|
568
|
+
type: Input
|
|
569
|
+
}], positioned: [{
|
|
570
|
+
type: Input
|
|
571
|
+
}], preventTooltipOnTouch: [{
|
|
572
|
+
type: Input
|
|
573
|
+
}], relayStoreEvents: [{
|
|
574
|
+
type: Input
|
|
575
|
+
}], ripple: [{
|
|
576
|
+
type: Input
|
|
577
|
+
}], rootElement: [{
|
|
578
|
+
type: Input
|
|
579
|
+
}], scrollAction: [{
|
|
580
|
+
type: Input
|
|
581
|
+
}], selectAllItem: [{
|
|
582
|
+
type: Input
|
|
583
|
+
}], showAnimation: [{
|
|
584
|
+
type: Input
|
|
585
|
+
}], showTooltipWhenDisabled: [{
|
|
586
|
+
type: Input
|
|
587
|
+
}], tab: [{
|
|
588
|
+
type: Input
|
|
589
|
+
}], tag: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], textAlign: [{
|
|
592
|
+
type: Input
|
|
593
|
+
}], tooltipTemplate: [{
|
|
594
|
+
type: Input
|
|
595
|
+
}], type: [{
|
|
596
|
+
type: Input
|
|
597
|
+
}], ui: [{
|
|
598
|
+
type: Input
|
|
599
|
+
}], virtualize: [{
|
|
600
|
+
type: Input
|
|
601
|
+
}], weight: [{
|
|
602
|
+
type: Input
|
|
603
|
+
}], alignSelf: [{
|
|
604
|
+
type: Input
|
|
605
|
+
}], appendTo: [{
|
|
606
|
+
type: Input
|
|
607
|
+
}], callOnFunctions: [{
|
|
608
|
+
type: Input
|
|
609
|
+
}], catchEventHandlerExceptions: [{
|
|
610
|
+
type: Input
|
|
611
|
+
}], cls: [{
|
|
612
|
+
type: Input
|
|
613
|
+
}], collapsibleGroups: [{
|
|
614
|
+
type: Input
|
|
615
|
+
}], column: [{
|
|
616
|
+
type: Input
|
|
617
|
+
}], content: [{
|
|
618
|
+
type: Input
|
|
619
|
+
}], dataset: [{
|
|
620
|
+
type: Input
|
|
621
|
+
}], disabled: [{
|
|
622
|
+
type: Input
|
|
623
|
+
}], emptyText: [{
|
|
624
|
+
type: Input
|
|
625
|
+
}], extraData: [{
|
|
626
|
+
type: Input
|
|
627
|
+
}], flex: [{
|
|
628
|
+
type: Input
|
|
629
|
+
}], height: [{
|
|
630
|
+
type: Input
|
|
631
|
+
}], hidden: [{
|
|
632
|
+
type: Input
|
|
633
|
+
}], html: [{
|
|
634
|
+
type: Input
|
|
635
|
+
}], id: [{
|
|
636
|
+
type: Input
|
|
637
|
+
}], insertBefore: [{
|
|
638
|
+
type: Input
|
|
639
|
+
}], insertFirst: [{
|
|
640
|
+
type: Input
|
|
641
|
+
}], items: [{
|
|
642
|
+
type: Input
|
|
643
|
+
}], keyMap: [{
|
|
644
|
+
type: Input
|
|
645
|
+
}], margin: [{
|
|
646
|
+
type: Input
|
|
647
|
+
}], maxHeight: [{
|
|
648
|
+
type: Input
|
|
649
|
+
}], maximizeOnMobile: [{
|
|
650
|
+
type: Input
|
|
651
|
+
}], maxWidth: [{
|
|
652
|
+
type: Input
|
|
653
|
+
}], minHeight: [{
|
|
654
|
+
type: Input
|
|
655
|
+
}], minWidth: [{
|
|
656
|
+
type: Input
|
|
657
|
+
}], multiSelect: [{
|
|
658
|
+
type: Input
|
|
659
|
+
}], readOnly: [{
|
|
660
|
+
type: Input
|
|
661
|
+
}], rtl: [{
|
|
662
|
+
type: Input
|
|
663
|
+
}], scrollable: [{
|
|
664
|
+
type: Input
|
|
665
|
+
}], selected: [{
|
|
666
|
+
type: Input
|
|
667
|
+
}], span: [{
|
|
668
|
+
type: Input
|
|
669
|
+
}], store: [{
|
|
670
|
+
type: Input
|
|
671
|
+
}], title: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}], toggleAllIfCtrlPressed: [{
|
|
674
|
+
type: Input
|
|
675
|
+
}], tooltip: [{
|
|
676
|
+
type: Input
|
|
677
|
+
}], width: [{
|
|
678
|
+
type: Input
|
|
679
|
+
}], x: [{
|
|
680
|
+
type: Input
|
|
681
|
+
}], y: [{
|
|
682
|
+
type: Input
|
|
683
|
+
}], anchorSize: [{
|
|
684
|
+
type: Input
|
|
685
|
+
}], focusVisible: [{
|
|
686
|
+
type: Input
|
|
687
|
+
}], parent: [{
|
|
688
|
+
type: Input
|
|
689
|
+
}], onBeforeDestroy: [{
|
|
690
|
+
type: Output
|
|
691
|
+
}], onBeforeHide: [{
|
|
692
|
+
type: Output
|
|
693
|
+
}], onBeforeItem: [{
|
|
694
|
+
type: Output
|
|
695
|
+
}], onBeforeShow: [{
|
|
696
|
+
type: Output
|
|
697
|
+
}], onCatchAll: [{
|
|
698
|
+
type: Output
|
|
699
|
+
}], onDestroy: [{
|
|
700
|
+
type: Output
|
|
701
|
+
}], onElementCreated: [{
|
|
702
|
+
type: Output
|
|
703
|
+
}], onFocusIn: [{
|
|
704
|
+
type: Output
|
|
705
|
+
}], onFocusOut: [{
|
|
706
|
+
type: Output
|
|
707
|
+
}], onHide: [{
|
|
708
|
+
type: Output
|
|
709
|
+
}], onItem: [{
|
|
710
|
+
type: Output
|
|
711
|
+
}], onPaint: [{
|
|
712
|
+
type: Output
|
|
713
|
+
}], onReadOnly: [{
|
|
714
|
+
type: Output
|
|
715
|
+
}], onRecompose: [{
|
|
716
|
+
type: Output
|
|
717
|
+
}], onResize: [{
|
|
718
|
+
type: Output
|
|
719
|
+
}], onSelectionChange: [{
|
|
720
|
+
type: Output
|
|
721
|
+
}], onShow: [{
|
|
722
|
+
type: Output
|
|
723
|
+
}], onToggleGroup: [{
|
|
724
|
+
type: Output
|
|
725
|
+
}], onToggleNode: [{
|
|
726
|
+
type: Output
|
|
727
|
+
}] } });
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ5bnR1bS1ncm91cC1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tcG9uZW50L3NyYy9saWIvYnJ5bnR1bS1ncm91cC1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RDs7R0FFRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWtELE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sYUFBYSxNQUFNLGtCQUFrQixDQUFDO0FBRTdDLE9BQU8sRUFBOE0sTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDeFAsT0FBTyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxvQkFBb0IsQ0FBQzs7QUE2a0JqRSxNQUFNLE9BQU8sd0JBQXdCO0lBNFBqQyxZQUFZLE9BQW1CO1FBVHZCLGtCQUFhLEdBQUc7WUFDcEIsS0FBSyxFQUFjLFNBQVM7WUFDNUIsUUFBUSxFQUFXLFNBQVM7WUFDNUIsSUFBSSxFQUFlLFNBQVM7WUFDNUIsZ0JBQWdCLEVBQUcsSUFBSTtZQUN2QixRQUFRLEVBQVcsRUFBRTtZQUNyQixTQUFTLEVBQVUsRUFBRTtTQUN4QixDQUFDO1FBMEhGLGtCQUFrQjtRQUNsQjs7OztXQUlHO1FBQ08sb0JBQWUsR0FBUSxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUNoRzs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBeUUsQ0FBQztRQUN4SDs7Ozs7Ozs7OztXQVVHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBc0ksQ0FBQztRQUNyTDs7OztXQUlHO1FBQ08saUJBQVksR0FBUSxJQUFJLFlBQVksRUFBNkUsQ0FBQztRQUM1SDs7Ozs7OztXQU9HO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFnRSxDQUFDO1FBQzdHOzs7O1dBSUc7UUFDTyxjQUFTLEdBQVEsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFDMUY7Ozs7V0FJRztRQUNPLHFCQUFnQixHQUFRLElBQUksWUFBWSxFQUFzRCxDQUFDO1FBQ3pHOzs7Ozs7Ozs7V0FTRztRQUNPLGNBQVMsR0FBUSxJQUFJLFlBQVksRUFBNEosQ0FBQztRQUN4TTs7Ozs7Ozs7Ozs7V0FXRztRQUNPLGVBQVUsR0FBUSxJQUFJLFlBQVksRUFBNEosQ0FBQztRQUN6TTs7OztXQUlHO1FBQ08sV0FBTSxHQUFRLElBQUksWUFBWSxFQUFnRCxDQUFDO1FBQ3pGOzs7Ozs7Ozs7V0FTRztRQUNPLFdBQU0sR0FBUSxJQUFJLFlBQVksRUFBNkcsQ0FBQztRQUN0Sjs7Ozs7Ozs7V0FRRztRQUNPLFlBQU8sR0FBUSxJQUFJLFlBQVksRUFBcUUsQ0FBQztRQUMvRzs7OztXQUlHO1FBQ08sZUFBVSxHQUFRLElBQUksWUFBWSxFQUFtRCxDQUFDO1FBQ2hHOzs7V0FHRztRQUNPLGdCQUFXLEdBQVEsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDckU7Ozs7Ozs7O1dBUUc7UUFDTyxhQUFRLEdBQVEsSUFBSSxZQUFZLEVBQW9ILENBQUM7UUFDL0o7Ozs7O1dBS0c7UUFDTyxzQkFBaUIsR0FBUSxJQUFJLFlBQVksRUFBaUUsQ0FBQztRQUNySDs7OztXQUlHO1FBQ08sV0FBTSxHQUFRLElBQUksWUFBWSxFQUFnRCxDQUFDO1FBQ3pGOzs7OztXQUtHO1FBQ08sa0JBQWEsR0FBUSxJQUFJLFlBQVksRUFBdUUsQ0FBQztRQUN2SDs7Ozs7V0FLRztRQUNPLGlCQUFZLEdBQVEsSUFBSSxZQUFZLEVBQWtFLENBQUM7UUE3UTdHLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUE4UUQ7O09BRUc7SUFDSCxRQUFRO1FBQ0osTUFDSSxFQUFFLEdBQUcsSUFBSSxFQUNULEVBQ0ksVUFBVSxFQUNWLGFBQWEsRUFDaEIsR0FBRyxFQUFFLEVBQ04sRUFDSSxhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxhQUFhLEVBQ2hCLEdBQUcsd0JBQXdCLENBQUM7UUFFakMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsYUFBYTtZQUNiLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdkMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUMxRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsYUFBYTtRQUNiLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNGLE1BQ0ksWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQzFFLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1RCxhQUFhO1lBQ2IsYUFBYSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDNUMsYUFBYTtnQkFDYixFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixzR0FBc0c7Z0JBQ3RHLHVCQUF1QjtnQkFDdkIsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ3pCLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0ZBQXdGO1FBQ3hGLE1BQ0ksY0FBYyxHQUFHO1lBQ2IsT0FBTztZQUNQLFVBQVU7WUFDVixhQUFhO1lBQ2IsY0FBYztZQUNkLGFBQWE7U0FDaEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ2pCLElBQUksWUFBWSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxZQUFZLFVBQVUsRUFBRTtnQkFDM0YsK0RBQStEO2dCQUMvRCxhQUFhLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7YUFDckQ7aUJBQ0k7Z0JBQ0QsYUFBYSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO2FBQ2xEO1NBQ0o7YUFDSTtZQUNELGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDbkU7UUFFRCxhQUFhO1FBQ2IsRUFBRSxDQUFDLFFBQVEsR0FBRyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUU5RyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLE1BQ0ksRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLEVBQ25CLEVBQUUsWUFBWSxFQUFFLEdBQUcsd0JBQXdCLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU87U0FDVjtRQUNELDJCQUEyQjtRQUMzQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDL0MsTUFDSSxRQUFRLEdBQUksTUFBdUIsQ0FBQyxZQUFZLEVBQ2hELEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUNuQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxHQUFHLHdCQUF3QixDQUFDO1lBQ3BFLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0IsYUFBYSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25DLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzFEO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDUCxhQUFhO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDOztBQS9tQmEsc0NBQWEsR0FBRyxRQUFRLENBQUM7QUFFekIscUNBQVksR0FBRyxVQUFVLENBQUM7QUFFekIsc0NBQWEsR0FBYTtJQUNyQyxpQkFBaUI7SUFDakIsY0FBYztJQUNkLGNBQWM7SUFDZCxjQUFjO0lBQ2QsWUFBWTtJQUNaLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixRQUFRO0lBQ1IsUUFBUTtJQUNSLFNBQVM7SUFDVCxZQUFZO0lBQ1osYUFBYTtJQUNiLFVBQVU7SUFDVixtQkFBbUI7SUFDbkIsUUFBUTtJQUNSLGVBQWU7SUFDZixjQUFjO0NBQ2pCLENBQUM7QUFFYSw0Q0FBbUIsR0FBYSxFQUU5QyxDQUFDO0FBRWEsdUNBQWMsR0FBYSx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7SUFDMUYscUJBQXFCO0lBQ3JCLE9BQU87SUFDUCxPQUFPO0lBQ1AsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsVUFBVTtJQUNWLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsVUFBVTtJQUNWLGlDQUFpQztJQUNqQyxVQUFVO0lBQ1YsY0FBYztJQUNkLEtBQUs7SUFDTCxtQkFBbUI7SUFDbkIsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsYUFBYTtJQUNiLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFNBQVM7SUFDVCxxQkFBcUI7SUFDckIsOEJBQThCO0lBQzlCLFVBQVU7SUFDVixjQUFjO0lBQ2QsTUFBTTtJQUNOLFdBQVc7SUFDWCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFdBQVc7SUFDWCxNQUFNO0lBQ04sVUFBVTtJQUNWLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixRQUFRO0lBQ1IsZUFBZTtJQUNmLE1BQU07SUFDTixTQUFTO0lBQ1QsU0FBUztJQUNULElBQUk7SUFDSixzQkFBc0I7SUFDdEIsY0FBYztJQUNkLGFBQWE7SUFDYixjQUFjO0lBQ2QsT0FBTztJQUNQLFNBQVM7SUFDVCxRQUFRO0lBQ1IsV0FBVztJQUNYLGFBQWE7SUFDYixhQUFhO0lBQ2IsdUJBQXVCO0lBQ3ZCLFFBQVE7SUFDUixjQUFjO0lBQ2QsUUFBUTtJQUNSLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsZUFBZTtJQUNmLGFBQWE7SUFDYixPQUFPO0lBQ1AsWUFBWTtJQUNaLHVCQUF1QjtJQUN2QixVQUFVO0lBQ1Ysa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixhQUFhO0lBQ2IsS0FBSztJQUNMLFlBQVk7SUFDWixjQUFjO0lBQ2QsZUFBZTtJQUNmLFVBQVU7SUFDVixlQUFlO0lBQ2YseUJBQXlCO0lBQ3pCLE1BQU07SUFDTixPQUFPO0lBQ1AsS0FBSztJQUNMLEtBQUs7SUFDTCxXQUFXO0lBQ1gsT0FBTztJQUNQLHdCQUF3QjtJQUN4QixTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLE1BQU07SUFDTixJQUFJO0lBQ0osWUFBWTtJQUNaLFFBQVE7SUFDUixPQUFPO0lBQ1AsR0FBRztJQUNILEdBQUc7Q0FDTixDQUFDLENBQUM7QUFFWSwyQ0FBa0IsR0FBYTtJQUMxQyxxQkFBcUI7SUFDckIsT0FBTztJQUNQLE9BQU87SUFDUCxrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLGlCQUFpQjtJQUNqQixXQUFXO0lBQ1gsY0FBYztJQUNkLFVBQVU7SUFDVixpQ0FBaUM7SUFDakMsVUFBVTtJQUNWLGNBQWM7SUFDZCxPQUFPO0lBQ1AsUUFBUTtJQUNSLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLHFCQUFxQjtJQUNyQiw4QkFBOEI7SUFDOUIsY0FBYztJQUNkLE1BQU07SUFDTixXQUFXO0lBQ1gsbUJBQW1CO0lBQ25CLFVBQVU7SUFDVixZQUFZO0lBQ1osY0FBYztJQUNkLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsU0FBUztJQUNULFNBQVM7SUFDVCxzQkFBc0I7SUFDdEIsY0FBYztJQUNkLFNBQVM7SUFDVCxXQUFXO0lBQ1gsYUFBYTtJQUNiLGFBQWE7SUFDYix1QkFBdUI7SUFDdkIsY0FBYztJQUNkLFFBQVE7SUFDUixlQUFlO0lBQ2YsT0FBTztJQUNQLFlBQVk7SUFDWix1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixhQUFhO0lBQ2IsY0FBYztJQUNkLGVBQWU7SUFDZixlQUFlO0lBQ2YseUJBQXlCO0lBQ3pCLEtBQUs7SUFDTCxLQUFLO0lBQ0wsV0FBVztJQUNYLGlCQUFpQjtJQUNqQixNQUFNO0lBQ04sSUFBSTtJQUNKLFlBQVk7SUFDWixRQUFRO0NBQ1gsQ0FBQztBQUVhLHFDQUFZLEdBQWEsd0JBQXdCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO0lBQ3hGLFdBQVc7SUFDWCxZQUFZO0lBQ1osVUFBVTtJQUNWLGlCQUFpQjtJQUNqQiw2QkFBNkI7SUFDN0IsS0FBSztJQUNMLG1CQUFtQjtJQUNuQixRQUFRO0lBQ1IsU0FBUztJQUNULFNBQVM7SUFDVCxVQUFVO0lBQ1YsV0FBVztJQUNYLFdBQVc7SUFDWCxNQUFNO0lBQ04sY0FBYztJQUNkLFFBQVE7SUFDUixRQUFRO0lBQ1IsTUFBTTtJQUNOLElBQUk7SUFDSixjQUFjO0lBQ2QsYUFBYTtJQUNiLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsYUFBYTtJQUNiLFFBQVE7SUFDUixVQUFVO0lBQ1YsS0FBSztJQUNMLFlBQVk7SUFDWixVQUFVO0lBQ1YsTUFBTTtJQUNOLE9BQU87SUFDUCxPQUFPO0lBQ1Asd0JBQXdCO0lBQ3hCLFNBQVM7SUFDVCxPQUFPO0lBQ1AsR0FBRztJQUNILEdBQUc7Q0FDTixDQUFDLENBQUM7cUhBOU9NLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLG1yR0FGdEIsRUFBRTsyRkFFSix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFHLG1CQUFtQjtvQkFDOUIsUUFBUSxFQUFHLEVBQUU7aUJBQ2hCO2lHQWtRWSxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBTUcsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csRUFBRTtzQkFBVixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxDQUFDO3NCQUFULEtBQUs7Z0JBQ0csQ0FBQztzQkFBVCxLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBUUksZUFBZTtzQkFBeEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQVlHLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsWUFBWTtzQkFBckIsTUFBTTtnQkFTRyxVQUFVO3NCQUFuQixNQUFNO2dCQU1HLFNBQVM7c0JBQWxCLE1BQU07Z0JBTUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQVdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBYUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFNRyxNQUFNO3NCQUFmLE1BQU07Z0JBV0csTUFBTTtzQkFBZixNQUFNO2dCQVVHLE9BQU87c0JBQWhCLE1BQU07Z0JBTUcsVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQVVHLFFBQVE7c0JBQWpCLE1BQU07Z0JBT0csaUJBQWlCO3NCQUExQixNQUFNO2dCQU1HLE1BQU07c0JBQWYsTUFBTTtnQkFPRyxhQUFhO3NCQUF0QixNQUFNO2dCQU9HLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qKlxuICogQW5ndWxhciB3cmFwcGVyIGZvciBCcnludHVtIEdyb3VwQmFyXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IFdyYXBwZXJIZWxwZXIgZnJvbSAnLi93cmFwcGVyLmhlbHBlcic7XG5cbmltcG9ydCB7IEFsaWduU3BlYywgQmFzZSwgQ29sbGVjdGlvbiwgQ29sbGVjdGlvbkNvbmZpZywgRG9tQ29uZmlnLCBLZXlNYXBDb25maWcsIExpc3QsIE1hc2tDb25maWcsIE1vZGVsLCBNb2RlbENvbmZpZywgUmVjdGFuZ2xlLCBTY3JvbGxlciwgU2Nyb2xsZXJDb25maWcsIFN0b3JlLCBTdG9yZUNvbmZpZywgVGFiQ29uZmlnLCBUb29sdGlwQ29uZmlnLCBWdWVDb25maWcsIFdpZGdldCB9IGZyb20gJ0BicnludHVtL2NvcmUtdGhpbic7XG5pbXBvcnQgeyBHcm91cEJhciwgR3JvdXBCYXJMaXN0ZW5lcnMgfSBmcm9tICdAYnJ5bnR1bS9ncmlkLXRoaW4nO1xuXG5pbXBvcnQgeyBTdHJpbmdIZWxwZXIgfSBmcm9tICdAYnJ5bnR1bS9jb3JlLXRoaW4nO1xuXG5leHBvcnQgdHlwZSBCcnludHVtR3JvdXBCYXJQcm9wcyA9IHtcbiAgICAvLyBDb25maWdzXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBhY3RpdmF0ZSBpdGVtcyBvbiBtb3VzZW92ZXIuIFRoaXMgaXMgdXNlZCBieSB0aGUgQ29tYm9cbiAgICAgKiBmaWVsZCB3aGVuIHVzaW5nIGEgTGlzdCBhcyBpdHMgZHJvcGRvd24uXG4gICAgICovXG4gICAgYWN0aXZhdGVPbk1vdXNlb3ZlciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFkb3B0IGFzIHRoaXMgV2lkZ2V0J3MgZW5jYXBzdWxhdGluZyBlbGVtZW50LiBUaGUgd2lkZ2V0J3NcbiAgICAgKiBjb250ZW50IHdpbGwgYmUgcGxhY2VkIGluc2lkZSB0aGlzIGVsZW1lbnQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctYWRvcHQpXG4gICAgICovXG4gICAgYWRvcHQgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1hbGlnbilcbiAgICAgKi9cbiAgICBhbGlnbiA/IDogQWxpZ25TcGVjfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyB3aWRnZXQgaXMgYSBjaGlsZCBvZiBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLCBpdCB3aWxsIGJ5IGRlZmF1bHQgYmUgcGFydGljaXBhdGluZyBpbiBhXG4gICAgICogZmxleGJveCBsYXlvdXQuIFRoaXMgY29uZmlnIGFsbG93cyB5b3UgdG8gc2V0IHRoaXMgd2lkZ2V0J3NcbiAgICAgKiBbYWxpZ24tc2VsZl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2FsaWduLXNlbGYpIHN0eWxlLlxuICAgICAqL1xuICAgIGFsaWduU2VsZiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBhbGxvdyBzZWxlY3RpbmcgZ3JvdXBzIChhbGwgdGhlIGdyb3VwIGNoaWxkIHJlY29yZHMgd2lsbCBiZSB0b2dnbGVkKS4gT25seVxuICAgICAqIGFwcGxpY2FibGUgd2hlbiB0aGUgc3RvcmUgaXMgZ3JvdXBlZC5cbiAgICAgKi9cbiAgICBhbGxvd0dyb3VwU2VsZWN0ID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykgYW5kIGJlaW5nIHNob3duIHRocm91Z2ggW3Nob3dCeV0oI0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1zaG93QnkpLipcbiAgICAgKiBgdHJ1ZWAgdG8gc2hvdyBhIGNvbm5lY3RvciBhcnJvdyBwb2ludGluZyB0byB0aGUgYWxpZ24gdGFyZ2V0LlxuICAgICAqL1xuICAgIGFuY2hvciA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIHRoZSBpZCBvZiBhbiBlbGVtZW50KSB0byBhcHBlbmQgdGhpcyB3aWRnZXQncyBlbGVtZW50IHRvLiBDYW4gYmUgY29uZmlndXJlZCwgb3Igc2V0IG9uY2UgYXRcbiAgICAgKiBydW50aW1lLiBUbyBhY2Nlc3MgdGhlIGVsZW1lbnQgb2YgYSByZW5kZXJlZCB3aWRnZXQsIHNlZSBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KS5cbiAgICAgKi9cbiAgICBhcHBlbmRUbyA/IDogSFRNTEVsZW1lbnR8c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3RcbiAgICAgKiBpbnRvIGFuIGVsZW1lbnQgd2hpY2ggd2lsbCBiZSBsaW5rZWQgdXNpbmcgdGhlIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctYXJpYURlc2NyaXB0aW9uKVxuICAgICAqL1xuICAgIGFyaWFEZXNjcmlwdGlvbiA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBsb2NhbGl6YWJsZSBzdHJpbmcgKE1heSBjb250YWluIGAnTHt9J2AgdG9rZW5zIHdoaWNoIHJlc29sdmUgaW4gdGhlIGxvY2FsZSBmaWxlKSB0byBpbmplY3QgYXNcbiAgICAgKiB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1hcmlhTGFiZWwpXG4gICAgICovXG4gICAgYXJpYUxhYmVsID8gOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hlcmUgcHJvcGVydHkgbmFtZXMgd2l0aCBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0ZSB3aGljaCBldmVudHMgc2hvdWxkIGJ1YmJsZSB1cCB0aGUgb3duZXJzaGlwXG4gICAgICogaGllcmFyY2h5IHdoZW4gdHJpZ2dlcmVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWJ1YmJsZUV2ZW50cylcbiAgICAgKi9cbiAgICBidWJibGVFdmVudHMgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqIFNldCB0byBgZmFsc2VgIHRvIG5vdCBjYWxsIG9uWFhYIG1ldGhvZCBuYW1lcyAoZS5nLiBgb25TaG93YCwgYG9uQ2xpY2tgKSwgYXMgYW4gZWFzeSB3YXkgdG8gbGlzdGVuIGZvciBldmVudHMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctY2FsbE9uRnVuY3Rpb25zKVxuICAgICAqL1xuICAgIGNhbGxPbkZ1bmN0aW9ucyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEJ5IGRlZmF1bHQsIGlmIGFuIGV2ZW50IGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdGhlIGVycm9yIHByb3BhZ2F0ZXMgdXAgdGhlIHN0YWNrIGFuZCB0aGVcbiAgICAgKiBhcHBsaWNhdGlvbiBzdGF0ZSBpcyB1bmRlZmluZWQuIENvZGUgd2hpY2ggZm9sbG93cyB0aGUgZXZlbnQgaGFuZGxlciB3aWxsICpub3QqIGJlIGV4ZWN1dGVkLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucylcbiAgICAgKi9cbiAgICBjYXRjaEV2ZW50SGFuZGxlckV4Y2VwdGlvbnMgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBjZW50cmUgdGhlIFdpZGdldCBpbiBicm93c2VyIHZpZXdwb3J0IHNwYWNlLlxuICAgICAqL1xuICAgIGNlbnRlcmVkID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBjbGVhciBzZWxlY3Rpb24gd2hlbiBjbGlja2luZyBvbiBlbXB0eSBzcGFjZSBpbnNpZGUgdGhlIExpc3TCtHMgZWxlbWVudC5cbiAgICAgKi9cbiAgICBjbGVhclNlbGVjdGlvbk9uRW1wdHlTcGFjZUNsaWNrID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBkaXNwbGF5IGEgY2xpY2thYmxlIGNsb3NlIGljb24gYWZ0ZXIgdGhlIFtpdGVtVHBsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTGlzdCNjb25maWctaXRlbVRwbCkuXG4gICAgICogV2hlbiB0YXBwZWQsIHRoZSBjb25maWd1cmVkIFtjbG9zZUhhbmRsZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGlwVmlldyNjb25maWctY2xvc2VIYW5kbGVyKSBpcyBjYWxsZWQgcGFzc2luZyB0aGUgYXNzb2NpYXRlZCByZWNvcmQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctY2xvc2FibGUpXG4gICAgICovXG4gICAgY2xvc2FibGUgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBJZiBbY2xvc2FibGVdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9DaGlwVmlldyNjb25maWctY2xvc2FibGUpIGlzIGB0cnVlYCwgdGhpcyBpcyB0aGUgbmFtZSBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGhhbmRsZSB3aGF0IHRoZSBcImNsb3NlXCJcbiAgICAgKiBhY3Rpb24gbWVhbnMuIElmIG5vdCBwcm92aWRlZCwgdGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGNoaXAgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yZS5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjbG9zZUhhbmRsZXIgPyA6IHN0cmluZ3woKCkgPT4gdm9pZClcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzZXMgdG8gYWRkIHRvIGVsZW1lbnQuXG4gICAgICogTWF5IGJlIHNwZWNpZmllZCBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lc1xuICAgICAqIHdpdGggdHJ1dGh5IHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctY2xzKVxuICAgICAqL1xuICAgIGNscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRydWUgdG8gYWRkIGEgY29sbGFwc2UgaWNvbiB0byB0b2dnbGUgZ3JvdXBzIGJlaW5nIGNvbGxhcHNlZCBvciBleHBhbmRlZFxuICAgICAqL1xuICAgIGNvbGxhcHNpYmxlR3JvdXBzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgc3BlY2lmaWVkIGNvbG9yIHRvIHRoZSB3aWRnZXQsIGJ5IHNldHRpbmcgdGhlIGAtLWItcHJpbWFyeWAgQ1NTIHZhcmlhYmxlIGluIHRoZSB3aWRnZXRzXG4gICAgICogYHN0eWxlYCBibG9jay5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1jb2xvcilcbiAgICAgKi9cbiAgICBjb2xvciA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljIGNvbnRyb2wgb3ZlciB3aGljaCBjb2x1bW4gdG8gc3RhcnQgaW4gd2hlbiB1c2VkIGluIGEgZ3JpZCBsYXlvdXQuXG4gICAgICovXG4gICAgY29sdW1uID8gOiBudW1iZXJcbiAgICBjb25maWcgPyA6IG9iamVjdFxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpIG9yIFtwb3NpdGlvbmVkXSgjQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1wb3NpdGlvbmVkKS4qXG4gICAgICogRWxlbWVudCwgV2lkZ2V0IG9yIFJlY3RhbmdsZSB0byB3aGljaCB0aGlzIFdpZGdldCBpcyBjb25zdHJhaW5lZC5cbiAgICAgKi9cbiAgICBjb25zdHJhaW5UbyA/IDogSFRNTEVsZW1lbnR8V2lkZ2V0fFJlY3RhbmdsZVxuICAgIC8qKlxuICAgICAqIFRoZSBIVE1MIGNvbnRlbnQgdGhhdCBjb2V4aXN0cyB3aXRoIHNpYmxpbmcgZWxlbWVudHMgd2hpY2ggbWF5IGhhdmUgYmVlbiBhZGRlZCB0byB0aGVcbiAgICAgKiBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpIGJ5IHBsdWdpbnMgYW5kIGZlYXR1cmVzLlxuICAgICAqIFdoZW4gc3BlY2lmeWluZyBodG1sLCB0aGlzIHdpZGdldCdzIGVsZW1lbnQgd2lsbCBhbHNvIGhhdmUgdGhlIFtodG1sQ2xzXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1odG1sQ2xzKVxuICAgICAqIGNsYXNzIGFkZGVkIHRvIGl0cyBjbGFzc0xpc3QsIHRvIGFsbG93IHRhcmdldGVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY29udGVudCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIENTUyBjbGFzc2VzIHRvIGFkZCB0byB0aGUgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KS5cbiAgICAgKiBNYXkgYmUgc3BlY2lmaWVkIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZywgb3IgYXMgYW4gb2JqZWN0IGluIHdoaWNoIHByb3BlcnR5IG5hbWVzXG4gICAgICogd2l0aCB0cnV0aHkgdmFsdWVzIGFyZSB1c2VkIGFzIHRoZSBjbGFzcyBuYW1lczpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1jb250ZW50RWxlbWVudENscylcbiAgICAgKi9cbiAgICBjb250ZW50RWxlbWVudENscyA/IDogc3RyaW5nfG9iamVjdFxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBXaWRnZXQgY29uZmlndXJhdGlvbiBpcyB1c2VkIGluIHRoZSBHcmlkJ3MgUm93RXhwYW5kZXIgZmVhdHVyZSdzIGB3aWRnZXRgIGNvbmZpZywgcHJvdmlkZSB0aGVcbiAgICAgKiBmaWVsZCBvbiB0aGUgZXhwYW5kZWQgcmVjb3JkIHRvIHVzZSBmb3IgcG9wdWxhdGluZyB0aGlzIHdpZGdldCdzIHN0b3JlIChpZiBhcHBsaWNhYmxlKVxuICAgICAqL1xuICAgIGRhdGFGaWVsZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogT2JqZWN0IHRvIGFwcGx5IHRvIGVsZW1lbnRzIGRhdGFzZXQgKGVhY2gga2V5IHdpbGwgYmUgdXNlZCBhcyBhIGRhdGEtYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50KVxuICAgICAqL1xuICAgIGRhdGFzZXQgPyA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gc2V0IHdoZW4gYSBzaW5nbGUgdmFsdWUgaXMgdG8gYmUgYXBwbGllZCB0byB0aGlzIFdpZGdldC4gU3VjaCBhcyB3aGVuIHVzZWRcbiAgICAgKiBpbiBhIGdyaWQgV2lkZ2V0Q29sdW1uLCB0aGlzIGlzIHRoZSBwcm9wZXJ0eSB0byB3aGljaCB0aGUgY29sdW1uJ3MgYGZpZWxkYCBpcyBhcHBsaWVkLlxuICAgICAqL1xuICAgIGRlZmF1bHRCaW5kUHJvcGVydHkgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENoZWNrIGZvciBDU1MgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2hlbiB1cGdyYWRpbmcgdG8gdjcuIFBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgY2hlY2tzOlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWRldGVjdENTU0NvbXBhdGliaWxpdHlJc3N1ZXMpXG4gICAgICovXG4gICAgZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcyA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIERpc2FibGUgb3IgZW5hYmxlIHRoZSB3aWRnZXQuIEl0IGlzIHNpbWlsYXIgdG8gW3JlYWRPbmx5XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1yZWFkT25seSkgZXhjZXB0IGEgZGlzYWJsZWQgd2lkZ2V0XG4gICAgICogY2Fubm90IGJlIGZvY3VzZWQsIHVzZXMgYSBkaWZmZXJlbnQgcmVuZGl0aW9uICh1c3VhbGx5IGdyZXlpc2gpIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWxlY3RpbmcgaXRzIHZhbHVlLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWRpc2FibGVkKVxuICAgICAqL1xuICAgIGRpc2FibGVkID8gOiBib29sZWFufCdpbmVydCdcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kZWwgZmllbGQgdG8gcmVuZGVyIGludG8gZWFjaCBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBkaXNwbGF5RmllbGQgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBwbGFjZW1lbnQgb2YgdGhpcyB3aWRnZXQgd2hlbiBpdCBpcyBhZGRlZCB0byBhIFtwYW5lbCdzIF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsKVxuICAgICAqIFtzdHJpcHMgY29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1BhbmVsI2NvbmZpZy1zdHJpcHMpLiBUeXBpY2FsIHZhbHVlcyBmb3IgdGhpcyBjb25maWcgYXJlIGAndG9wJ2AsXG4gICAgICogYCdib3R0b20nYCwgYCdsZWZ0J2AsIG9yIGAncmlnaHQnYCwgd2hpY2ggY2F1c2UgdGhlIHdpZGdldCB0byBiZSBwbGFjZWQgb24gdGhhdCBzaWRlIG9mIHRoZSBwYW5lbCdzXG4gICAgICogYm9keS4gU3VjaCB3aWRnZXRzIGFyZSBjYWxsZWQgXCJlZGdlIHN0cmlwc1wiLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWRvY2spXG4gICAgICovXG4gICAgZG9jayA/IDogJ3RvcCd8J2JvdHRvbSd8J2xlZnQnfCdyaWdodCd8J3N0YXJ0J3wnZW5kJ3wnaGVhZGVyJ3wncHJlLWhlYWRlcid8b2JqZWN0XG4gICAgLyoqXG4gICAgICogKk9ubHkgdmFsaWQgaWYgdGhpcyBXaWRnZXQgaXMgW2Zsb2F0aW5nXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1mbG9hdGluZykuKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gYmUgYWJsZSB0byBkcmFnIGEgd2lkZ2V0IGZyZWVseSBvbiB0aGUgcGFnZS4gT3Igc2V0IHRvIGFuIG9iamVjdCB3aXRoIGEgwrRoYW5kbGVTZWxlY3RvcsK0XG4gICAgICogcHJvcGVydHkgd2hpY2ggY29udHJvbHMgd2hlbiBhIGRyYWcgc2hvdWxkIHN0YXJ0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWRyYWdnYWJsZSlcbiAgICAgKi9cbiAgICBkcmFnZ2FibGUgPyA6IGJvb2xlYW58e1xuICAgICAgICBoYW5kbGVTZWxlY3Rvcj86IHN0cmluZ1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgc3BlY2lmeWluZyBhdHRyaWJ1dGVzIHRvIGFzc2lnbiB0byB0aGUgcm9vdCBlbGVtZW50IG9mIHRoaXMgd2lkZ2V0LlxuICAgICAqIFNldCBgbnVsbGAgdmFsdWUgdG8gYXR0cmlidXRlIHRvIHJlbW92ZSBpdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1lbGVtZW50QXR0cmlidXRlcylcbiAgICAgKi9cbiAgICBlbGVtZW50QXR0cmlidXRlcyA/IDogUmVjb3JkPHN0cmluZywgc3RyaW5nfG51bGw+XG4gICAgLyoqXG4gICAgICogVGhlIHRleHQgdG8gc2hvdyB3aGVuIHRoZSBsaXN0IGlzIGVtcHR5LiBJZiBub3Qgc2V0LCB0aGUgbGlzdCB3aWxsIGJlIGVtcHR5LlxuICAgICAqL1xuICAgIGVtcHR5VGV4dCA/IDogc3RyaW5nXG4gICAgZXh0cmFEYXRhID8gOiBhbnlcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoaXMgd2lkZ2V0IGlzIGEgY2hpbGQgb2YgYSBbQ29udGFpbmVyXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyKSwgaXQgd2lsbCBieSBkZWZhdWx0IGJlIHBhcnRpY2lwYXRpbmcgaW4gYVxuICAgICAqIGZsZXhib3ggbGF5b3V0LiBUaGlzIGNvbmZpZyBhbGxvd3MgeW91IHRvIHNldCB0aGlzIHdpZGdldCdzXG4gICAgICogW2ZsZXhdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9mbGV4KSBzdHlsZS5cbiAgICAgKiBUaGlzIG1heSBiZSBjb25maWd1cmVkIGFzIGEgc2luZ2xlIG51bWJlciBvciBhIGAmbHQ7ZmxleC1ncm93Jmd0OyAmbHQ7ZmxleC1zaHJpbmsmZ3Q7ICZsdDtmbGV4LWJhc2lzJmd0O2AgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyB0aGUgYGZsZXgtZ3Jvd2AgdmFsdWUuXG4gICAgICovXG4gICAgZmxleCA/IDogbnVtYmVyfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgdG8gbW92ZSB0aGUgd2lkZ2V0IG91dCBvZiB0aGUgZG9jdW1lbnQgZmxvdyBhbmQgcG9zaXRpb24gaXRcbiAgICAgKiBhYnNvbHV0ZWx5IGluIGJyb3dzZXIgdmlld3BvcnQgc3BhY2UuXG4gICAgICovXG4gICAgZmxvYXRpbmcgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBhIGZ1bmN0aW9uIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIHdoaWNoIHdoZW4gcGFzc2VkIGEgcmVjb3JkIGluIHRoZVxuICAgICAqIGxpc3QsIHJldHVybnMgYSBDU1MgY2xhc3MgbmFtZSBzdHJpbmcgdG8gYXBwbHkgdG8gaXRzIGxpc3QgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gcmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldEl0ZW1DbHMgPyA6ICgocmVjb3JkOiBNb2RlbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmUgdGhpcyBhcyBhIGZ1bmN0aW9uIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24sIHdoaWNoIHdoZW4gcGFzc2VkIGEgcmVjb3JkIGluIHRoZVxuICAgICAqIGxpc3QsIHJldHVybnMgYSBzdHlsZSBzdHJpbmcgdG8gYXBwbHkgdG8gaXRzIGxpc3QgaXRlbS5cbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gcmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldEl0ZW1TdHlsZSA/IDogKChyZWNvcmQ6IE1vZGVsKSA9PiBzdHJpbmcpfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRlbXBsYXRlIGZ1bmN0aW9uIHdoaWNoIGlzIHBhc3NlZCBhIGdyb3VwIHJlY29yZCBhbmQgdGhlIHVwcGVyY2FzZWQgZ3JvdXAgZmllbGQgbmFtZS4gVGhlIHRleHQgcmV0dXJuZWRcbiAgICAgKiB3aWxsIGJlIHJlbmRlcmVkIGFzIHRoZSBncm91cCBoZWFkZXIuXG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IHJlY29yZCBUaGUgcmVjb3JkXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwTmFtZSBUaGUgY3VycmVudCBncm91cCBuYW1lXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICBncm91cEhlYWRlclRwbCA/IDogKHJlY29yZDogTW9kZWwsIGdyb3VwTmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBXaWRnZXQncyBoZWlnaHQsIHVzZWQgdG8gc2V0IGVsZW1lbnQgYHN0eWxlLmhlaWdodGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgaGVpZ2h0IHN0cmluZyBvciBhIG51bWJlcixcbiAgICAgKiB3aGljaCB3aWxsIGdldCAncHgnIGFwcGVuZGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgQ1NTIGFzIHRoZSBwcmltYXJ5IHdheSB0byBjb250cm9sIGhlaWdodCwgYnV0IGluIHNvbWVcbiAgICAgKiBjYXNlcyB0aGlzIGNvbmZpZyBpcyBjb252ZW5pZW50LlxuICAgICAqL1xuICAgIGhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZSB3aXRoIHRydWUgdG8gbWFrZSB3aWRnZXQgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKi9cbiAgICBoaWRkZW4gPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiAqT25seSB2YWxpZCBpZiB0aGlzIFdpZGdldCBpcyBbZmxvYXRpbmddKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWZsb2F0aW5nKS4qXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctaGlkZUFuaW1hdGlvbilcbiAgICAgKi9cbiAgICBoaWRlQW5pbWF0aW9uID8gOiBib29sZWFufG9iamVjdFxuICAgIC8qKlxuICAgICAqIFRoZSBIVE1MIHRvIGRpc3BsYXkgaW5pdGlhbGx5IG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBtYXJrdXAgKGNhbGxlZCBhdCB3aWRnZXQgY29uc3RydWN0aW9uIHRpbWUpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLWh0bWwpXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IHdpZGdldCBUaGUgY2FsbGluZyBXaWRnZXRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGh0bWwgPyA6IHN0cmluZ3woKHdpZGdldDogV2lkZ2V0KSA9PiBzdHJpbmcpfERvbUNvbmZpZ3xEb21Db25maWdbXXxWdWVDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNsYXNzKGVzKSB0byBhZGQgd2hlbiBIVE1MIGNvbnRlbnQgaXMgYmVpbmcgYXBwbGllZCB0byB0aGlzIHdpZGdldC5cbiAgICAgKi9cbiAgICBodG1sQ2xzID8gOiBzdHJpbmd8b2JqZWN0XG4gICAgLyoqXG4gICAgICogQSB0ZW1wbGF0ZSBmdW5jdGlvbiwgd2hpY2gsIHdoZW4gcGFzc2VkIGEgcmVjb3JkLCByZXR1cm5zIHRoZSBtYXJrdXAgd2hpY2ggZW5jYXBzdWxhdGVzIGEgY2hpcCdzIGljb24gdG8gYmVcbiAgICAgKiBwbGFjZWQgYmVmb3JlIHRoZSBbaXRlbVRwbF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0xpc3QjY29uZmlnLWl0ZW1UcGwpLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSByZWNvcmQgVGhlIHJlY29yZCB0byBwcm92aWRlIGFuIGljb24gZm9yXG4gICAgICogQHJldHVybnMge0RvbUNvbmZpZyxzdHJpbmcsdm9pZH1cbiAgICAgKi9cbiAgICBpY29uVHBsID8gOiAocmVjb3JkOiBNb2RlbCkgPT4gRG9tQ29uZmlnfHN0cmluZ3x2b2lkXG4gICAgLyoqXG4gICAgICogV2lkZ2V0IGlkLCBpZiBub3Qgc3BlY2lmaWVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gQWxzbyB1c2VkIGZvciBsb29rdXBzIHRocm91Z2ggV2lkZ2V0LmdldEJ5SWRcbiAgICAgKi9cbiAgICBpZCA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgd2lkZ2V0cyByZWFkLW9ubHkgc3RhdGUgc2hvdWxkIGJlIGNvbnRyb2xsZWQgYnkgaXRzIHBhcmVudC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1pZ25vcmVQYXJlbnRSZWFkT25seSlcbiAgICAgKi9cbiAgICBpZ25vcmVQYXJlbnRSZWFkT25seSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGluc2VydCB0aGlzIHdpZGdldCBiZWZvcmUuIElmIHByb3ZpZGVkLCBbYXBwZW5kVG9dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWFwcGVuZFRvKSBjb25maWcgaXMgaWdub3JlZC5cbiAgICAgKi9cbiAgICBpbnNlcnRCZWZvcmUgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEVsZW1lbnQgKG9yIGVsZW1lbnQgaWQpIHRvIGFwcGVuZCB0aGlzIHdpZGdldCBlbGVtZW50IHRvLCBhcyBhIGZpcnN0IGNoaWxkLiBJZiBwcm92aWRlZCwgW2FwcGVuZFRvXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1hcHBlbmRUbykgY29uZmlnIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgaW5zZXJ0Rmlyc3QgPyA6IEhUTUxFbGVtZW50fHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEEgZnVuY3Rpb24sIG9yIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaW4gdGhlIG93bmVyc2hpcCBoaWVyYXJjaHkgd2hpY2ggaXMgdXNlZCB0byBkZXRlcm1pbmVcbiAgICAgKiB3aGV0aGVyIGEgcmVjb3JkIGlzIHNlbGVjdGFibGUuIEJ5IGRlZmF1bHQsIGFsbCByZWNvcmRzIGFyZSBzZWxlY3RhYmxlIGV4Y2VwdCBncm91cCBoZWFkZXJcbiAgICAgKiByZWNvcmRzIGluIGEgZ3JvdXBlZCBzdG9yZS5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByZWNvcmQgaXMgc2VsZWN0YWJsZVxuICAgICAqL1xuICAgIGlzU2VsZWN0YWJsZSA/IDogKCgpID0+IGJvb2xlYW4pfHN0cmluZ1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIE9iamVjdHMgd2hpY2ggYXJlIGNvbnZlcnRlZCBpbnRvIHJlY29yZHMgYW5kIHVzZWQgdG8gY3JlYXRlIHRoaXNcbiAgICAgKiBMaXN0J3MgW3N0b3JlXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTGlzdCNjb25maWctc3RvcmUpXG4gICAgICovXG4gICAgaXRlbXMgPyA6IG9iamVjdFtdXG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgZnVuY3Rpb24gKG9yIG5hbWUgb2YgYSB0ZW1wbGF0ZSBmdW5jdGlvbiksIHdoaWNoLCB3aGVuIHBhc3NlZCBhIHJlY29yZCwgcmV0dXJucyB0aGUgdGV4dHVhbCBIVE1MIGZvclxuICAgICAqIHRoYXQgaXRlbS4gRGVmYXVsdHMgdG8gYSBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIHRoZSByZWNvcmTCtHMgW2Rpc3BsYXlGaWVsZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L0xpc3QjY29uZmlnLWRpc3BsYXlGaWVsZClcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gcmVjb3JkIFRoZSByZWNvcmRcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIGl0ZW1UcGwgPyA6ICgocmVjb3JkOiBNb2RlbCkgPT4gc3RyaW5nKXxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBBbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgdGhlIFtrZXldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSkgbmFtZVxuICAgICAqIGFuZCBvcHRpb25hbCBtb2RpZmllciBwcmVmaXhlczogYCdDdHJsKydgLCBgJ0FsdCsnYCwgYCdNZXRhKydgLCBhbmQgYCdTaGlmdCsnYCAoY2FzZS1pbnNlbnNpdGl2ZSkuIFRoZSB2YWx1ZXNcbiAgICAgKiBhcmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlIG1ldGhvZCB0byBjYWxsIHdoZW4gdGhlIGtleXN0cm9rZSBpcyByZWNlaXZlZC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1rZXlNYXApXG4gICAgICovXG4gICAga2V5TWFwID8gOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3RlbmVyIHNldCBmb3IgdGhpcyBvYmplY3QuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctbGlzdGVuZXJzKVxuICAgICAqL1xuICAgIGxpc3RlbmVycyA/IDogR3JvdXBCYXJMaXN0ZW5lcnNcbiAgICAvKipcbiAgICAgKiBBIGNsYXNzIHRyYW5zbGF0aW9ucyBvZiB3aGljaCBhcmUgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhpcyBlbnRpdHkuXG4gICAgICogVGhpcyBpcyBvZnRlbiB1c2VkIHdoZW4gdHJhbnNsYXRpb25zIG9mIGFuIGl0ZW0gYXJlIGRlZmluZWQgb24gaXRzIGNvbnRhaW5lciBjbGFzcy5cbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1sb2NhbGVDbGFzcylcbiAgICAgKi9cbiAgICBsb2NhbGVDbGFzcyA/IDogdHlwZW9mIEJhc2VcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGxvY2FsaXphdGlvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBsb2NhbGl6YWJsZSA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgcHJvcGVydGllcyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyYW5zbGF0ZWQgYXV0b21hdGljYWxseSB1cG9uIGEgbG9jYWxlIGFwcGx5aW5nLlxuICAgICAqIEluIGNhc2UgdGhlcmUgaXMgYSBuZWVkIHRvIGxvY2FsaXplIG5vdCB0eXBpY2FsIHZhbHVlIChub3QgYSBTdHJpbmcgdmFsdWUgb3IgYSBmaWVsZCB3aXRoIHJlLWRlZmluZWQgc2V0dGVyL2dldHRlciksXG4gICAgICogeW91IGNvdWxkIHVzZSAnbG9jYWxlS2V5JyBtZXRhIGNvbmZpZ3VyYXRpb24uXG4gICAgICogRXhhbXBsZTpcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1sb2NhbGl6YWJsZVByb3BlcnRpZXMpXG4gICAgICovXG4gICAgbG9jYWxpemFibGVQcm9wZXJ0aWVzID8gOiBzdHJpbmdbXVxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIG1hcmdpbi4gVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBhIHNpbmdsZSBudW1iZXIgb3IgYSBgVFJCTGAgZm9ybWF0IHN0cmluZy5cbiAgICAgKiBudW1lcmljLW9ubHkgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBwaXhlbHMuXG4gICAgICovXG4gICAgbWFyZ2luID8gOiBudW1iZXJ8c3RyaW5nXG4gICAgLyoqXG4gICAgICogVGhpcyBjb25maWcgb2JqZWN0IGNvbnRhaW5zIHRoZSBkZWZhdWx0cyBmb3IgdGhlIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY3JlYXRlZCBmb3IgdGhlXG4gICAgICogW21hc2tlZF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctbWFza2VkKSBjb25maWcuIEFueSBwcm9wZXJ0aWVzIHNwZWNpZmllZCBpbiB0aGUgYG1hc2tlZGAgY29uZmlnIHdpbGwgb3ZlcnJpZGUgdGhlc2VcbiAgICAgKiB2YWx1ZXMuXG4gICAgICovXG4gICAgbWFza0RlZmF1bHRzID8gOiBNYXNrQ29uZmlnXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhcHBseSB0aGUgZGVmYXVsdCBtYXNrIHRvIHRoZSB3aWRnZXQuIEFsdGVybmF0aXZlbHksIHRoaXMgY2FuIGJlIHRoZSBtYXNrIG1lc3NhZ2Ugb3IgYVxuICAgICAqIFtNYXNrXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTWFzaykgY29uZmlnIG9iamVjdC5cbiAgICAgKi9cbiAgICBtYXNrZWQgPyA6IGJvb2xlYW58c3RyaW5nfE1hc2tDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1heEhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1heEhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1tYXhpbWl6ZU9uTW9iaWxlKVxuICAgICAqL1xuICAgIG1heGltaXplT25Nb2JpbGUgPyA6IG51bWJlcnxzdHJpbmdcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudHMgbWF4V2lkdGguIENhbiBiZSBlaXRoZXIgYSBTdHJpbmcgb3IgYSBOdW1iZXIgKHdoaWNoIHdpbGwgaGF2ZSAncHgnIGFwcGVuZGVkKS4gTm90ZSB0aGF0XG4gICAgICogbGlrZSBbd2lkdGhdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLXdpZHRoKSwgKnJlYWRpbmcqIHRoZSB2YWx1ZSB3aWxsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgbWF4V2lkdGggPyA6IHN0cmluZ3xudW1iZXJcbiAgICAvKipcbiAgICAgKiBUaGUgZWxlbWVudCdzIG1pbkhlaWdodC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFtoZWlnaHRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjY29uZmlnLWhlaWdodCksICpyZWFkaW5nKiB0aGUgdmFsdWUgd2lsbCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIG1pbkhlaWdodCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSBlbGVtZW50cyBtaW5XaWR0aC4gQ2FuIGJlIGVpdGhlciBhIFN0cmluZyBvciBhIE51bWJlciAod2hpY2ggd2lsbCBoYXZlICdweCcgYXBwZW5kZWQpLiBOb3RlIHRoYXRcbiAgICAgKiBsaWtlIFt3aWR0aF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctd2lkdGgpLCAqcmVhZGluZyogdGhlIHZhbHVlIHdpbGwgcmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIGluIHBpeGVscy5cbiAgICAgKi9cbiAgICBtaW5XaWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhpcyBpcyBjb25maWd1cmVkIGFzIGB0cnVlYCBhIFtSZXNpemVPYnNlcnZlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1Jlc2l6ZU9ic2VydmVyKVxuICAgICAqIGlzIHVzZWQgdG8gbW9uaXRvciB0aGlzIGVsZW1lbnQgZm9yIHNpemUgY2hhbmdlcyBjYXVzZWQgYnkgZWl0aGVyIHN0eWxlIG1hbmlwdWxhdGlvbiwgb3IgYnkgQ1NTXG4gICAgICogbGF5b3V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLW1vbml0b3JSZXNpemUpXG4gICAgICovXG4gICAgbW9uaXRvclJlc2l6ZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGltbWVkaWF0ZT86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBhbGxvdyBtdWx0aSBzZWxlY3QgYW5kIGFsbG93IGNsaWNraW5nIGFuZCBrZXkgbmF2aWdhdGlvbiB0byBzZWxlY3QgbXVsdGlwbGUgY2hpcHMuXG4gICAgICovXG4gICAgbXVsdGlTZWxlY3QgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBUaGUgb3duaW5nIFdpZGdldCBvZiB0aGlzIFdpZGdldC4gSWYgdGhpcyBXaWRnZXQgaXMgZGlyZWN0bHkgY29udGFpbmVkICh0aGF0IGlzLCBpdCBpcyBvbmUgb2YgdGhlXG4gICAgICogW2l0ZW1zXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvQ29udGFpbmVyI3Byb3BlcnR5LWl0ZW1zKSBvZiBhIENvbnRhaW5lciksIHRoaXMgY29uZmlnIHdpbGwgYmUgaWdub3JlZC4gSW4gdGhpcyBjYXNlXG4gICAgICogdGhlIG93bmVyIGlzIDxzdHJvbmc+YWx3YXlzPC9zdHJvbmc+IHRoZSBlbmNhcHN1bGF0aW5nIENvbnRhaW5lci5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1vd25lcilcbiAgICAgKi9cbiAgICBvd25lciA/IDogV2lkZ2V0fGFueVxuICAgIC8qKlxuICAgICAqIFNldCB0byBgdHJ1ZWAgd2hlbiBhIHdpZGdldCBpcyByZW5kZXJlZCBpbnRvIGFub3RoZXIgd2lkZ2V0J3MgW2NvbnRlbnRFbGVtZW50XShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I3Byb3BlcnR5LWNvbnRlbnRFbGVtZW50KSwgYnV0IG11c3RcbiAgICAgKiBub3QgcGFydGljaXBhdGUgaW4gdGhlIHN0YW5kYXJkIGxheW91dCBvZiB0aGF0IHdpZGdldCwgYW5kIG11c3QgYmUgcG9zaXRpb25lZCByZWxhdGl2ZWx5IHRvIHRoYXRcbiAgICAgKiB3aWRnZXQncyBbY29udGVudEVsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktY29udGVudEVsZW1lbnQpLlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLXBvc2l0aW9uZWQpXG4gICAgICovXG4gICAgcG9zaXRpb25lZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFByZXZlbnQgdG9vbHRpcCBmcm9tIGJlaW5nIGRpc3BsYXllZCBvbiB0b3VjaCBkZXZpY2VzLiBVc2VmdWwgZm9yIGV4YW1wbGUgZm9yIGJ1dHRvbnMgdGhhdCBkaXNwbGF5IGFcbiAgICAgKiBtZW51IG9uIGNsaWNrIGV0Yywgc2luY2UgdGhlIHRvb2x0aXAgd291bGQgYmUgZGlzcGxheWVkIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgICovXG4gICAgcHJldmVudFRvb2x0aXBPblRvdWNoID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGlzIHdpZGdldCBpcyByZWFkLW9ubHkuICBUaGlzIGlzIG9ubHkgdmFsaWQgaWYgdGhlIHdpZGdldCBpcyBhbiBpbnB1dFxuICAgICAqIGZpZWxkLCA8c3Ryb25nPm9yIGNvbnRhaW5zIGlucHV0IGZpZWxkcyBhdCBhbnkgZGVwdGg8L3N0cm9uZz4uXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctcmVhZE9ubHkpXG4gICAgICovXG4gICAgcmVhZE9ubHkgPyA6IGJvb2xlYW5cbiAgICByZWxheVN0b3JlRXZlbnRzID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlIGFzIGB0cnVlYCB0byBoYXZlIHRoZSBjb21wb25lbnQgZGlzcGxheSBhIHRyYW5zbHVjZW50IHJpcHBsZSB3aGVuIGl0c1xuICAgICAqIFtmb2N1c0VsZW1lbnRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZm9jdXNFbGVtZW50KSwgb3IgW2VsZW1lbnRdKCNDb3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZWxlbWVudCkgaXMgdGFwcGVkIDxlbT5pZiB0aGVcbiAgICAgKiBjdXJyZW50IHRoZW1lIHN1cHBvcnRzIHJpcHBsZXM8L2VtPi4gT3V0IG9mIHRoZSBib3gsIG9ubHkgdGhlIE1hdGVyaWFsIHRoZW1lIHN1cHBvcnRzIHJpcHBsZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctcmlwcGxlKVxuICAgICAqL1xuICAgIHJpcHBsZSA/IDogYm9vbGVhbnx7XG4gICAgICAgIGRlbGVnYXRlPzogc3RyaW5nXG4gICAgICAgIGNvbG9yPzogc3RyaW5nXG4gICAgICAgIHJhZGl1cz86IG51bWJlclxuICAgICAgICBjbGlwPzogc3RyaW5nXG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHlvdSBhcmUgcmVuZGVyaW5nIHRoaXMgd2lkZ2V0IHRvIGEgc2hhZG93IHJvb3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IHRoaXMgY29uZmlnIHRvIHRoZSBzaGFkb3dSb290LiBJZiBub3QgaW5zaWRlIGEgd2ViIGNvbXBvbmVudCwgc2V0IGl0IHRvIGBkb2N1bWVudC5ib2R5YFxuICAgICAqL1xuICAgIHJvb3RFbGVtZW50ID8gOiBTaGFkb3dSb290fEhUTUxFbGVtZW50XG4gICAgLyoqXG4gICAgICogVGhpcyBtYXkgYmUgY29uZmlndXJlZCBhcyBgdHJ1ZWAgdG8gbWFrZSB0aGUgd2lkZ2V0J3MgZWxlbWVudCB1c2UgdGhlIGBkaXJlY3Rpb246cnRsYCBzdHlsZS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1ydGwpXG4gICAgICovXG4gICAgcnRsID8gOiBib29sZWFuXG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgKGFuZCBvcHRpb25hbGx5IGluIHdoaWNoIGF4ZXMpIGEgV2lkZ2V0IG1heSBzY3JvbGwuIGB0cnVlYCBtZWFucyB0aGlzIHdpZGdldCBtYXkgc2Nyb2xsXG4gICAgICogaW4gYm90aCBheGVzLiBNYXkgYmUgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYm9vbGVhbiBgb3ZlcmZsb3dYYCBhbmQgYG92ZXJmbG93WWAgcHJvcGVydGllcyB3aGljaCBhcmVcbiAgICAgKiBhcHBsaWVkIHRvIENTUyBzdHlsZSBwcm9wZXJ0aWVzIGBvdmVyZmxvd1hgIGFuZCBgb3ZlcmZsb3dZYC4gSWYgdGhleSBhcmUgYm9vbGVhbiwgdGhleSBhcmUgdHJhbnNsYXRlZCB0b1xuICAgICAqIENTUyBvdmVyZmxvdyBwcm9wZXJ0aWVzIHRodXM6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctc2Nyb2xsYWJsZSlcbiAgICAgKi9cbiAgICBzY3JvbGxhYmxlID8gOiBib29sZWFufFNjcm9sbGVyQ29uZmlnfFNjcm9sbGVyXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGF0IHRvIGRvIGlmIGRvY3VtZW50IGlzIHNjcm9sbGVkIHdoaWxlIFdpZGdldCBpcyB2aXNpYmxlIChvbmx5IHJlbGV2YW50IHdoZW4gZmxvYXRpbmcgaXMgc2V0IHRvIGB0cnVlYCkuXG4gICAgICogVmFsaWQgdmFsdWVzOiDCtG51bGzCtDogZG8gbm90aGluZywgwrRoaWRlwrQ6IGhpZGUgdGhlIHdpZGdldCBvciDCtHJlYWxpZ27CtDogcmVhbGlnbiB0byB0aGUgdGFyZ2V0IGlmIHBvc3NpYmxlLlxuICAgICAqL1xuICAgIHNjcm9sbEFjdGlvbiA/IDogJ2hpZGUnfCdyZWFsaWduJ3xudWxsXG4gICAgLyoqXG4gICAgICogU2V0IHRvIGB0cnVlYCB0byBhZGQgYSBcIlNlbGVjdCBhbGxcIiBpdGVtIHRvIHRoZSBsaXN0IHRvIHNlbGVjdC91bnNlbGVjdCBhbGwgaXRlbXMgYXQgb25jZS5cbiAgICAgKiBPbmx5IGFwcGxpZXMgd2hlbiBbbXVsdGlTZWxlY3RdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9MaXN0I2NvbmZpZy1tdWx0aVNlbGVjdCkgbW9kZSBpcyBlbmFibGVkLlxuICAgICAqL1xuICAgIHNlbGVjdEFsbEl0ZW0gPyA6IGJvb2xlYW58c3RyaW5nXG4gICAgLyoqXG4gICAgICogQSBbQ29sbGVjdGlvbl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvdXRpbC9Db2xsZWN0aW9uKSwgb3IgQ29sbGVjdGlvbiBjb25maWcgb2JqZWN0IHRvIHVzZSB0byBjb250YWluIHRoaXMgTGlzdCdzIHNlbGVjdGVkXG4gICAgICogcmVjb3Jkcy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1zZWxlY3RlZClcbiAgICAgKi9cbiAgICBzZWxlY3RlZCA/IDogb2JqZWN0W118bnVtYmVyW118c3RyaW5nW118Q29sbGVjdGlvbnxDb2xsZWN0aW9uQ29uZmlnfENvbGxlY3Rpb25Db25maWdbXVxuICAgIC8qKlxuICAgICAqICpPbmx5IHZhbGlkIGlmIHRoaXMgV2lkZ2V0IGlzIFtmbG9hdGluZ10oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNjb25maWctZmxvYXRpbmcpLipcbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1zaG93QW5pbWF0aW9uKVxuICAgICAqL1xuICAgIHNob3dBbmltYXRpb24gPyA6IGJvb2xlYW58b2JqZWN0XG4gICAgLyoqXG4gICAgICogU2V0IHRvIGBmYWxzZWAgdG8gbm90IHNob3cgdGhlIHRvb2x0aXAgd2hlbiB0aGlzIHdpZGdldCBpcyBbZGlzYWJsZWRdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9XaWRnZXQjcHJvcGVydHktZGlzYWJsZWQpXG4gICAgICovXG4gICAgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgPyA6IGJvb2xlYW5cbiAgICAvKipcbiAgICAgKiBQcm9ncmFtbWF0aWMgY29udHJvbCBvdmVyIGhvdyBtYW55IGNvbHVtbnMgdG8gc3BhbiB3aGVuIHVzZWQgaW4gYSBncmlkIGxheW91dC5cbiAgICAgKi9cbiAgICBzcGFuID8gOiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBBIFtTdG9yZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvZGF0YS9TdG9yZSkgd2hpY2ggcHJvdmlkZXMgdGhlIHJlY29yZHMgd2hpY2ggbWFwIHRvIExpc3QgaXRlbXMuIEVhY2ggcmVjb3JkIGlzIHBhc3NlZCB0aHJvdWdoIHRoZVxuICAgICAqIFtpdGVtVHBsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvTGlzdCNjb25maWctaXRlbVRwbCkgdG8gcHJvZHVjZSB0aGUgRE9NIHN0cnVjdHVyZSBvZiB0aGUgTGlzdC4gTWF5IGJlIGdlbmVyYXRlZCBmcm9tIGFuIGFycmF5IG9mIFtpdGVtc10oI0NvcmUvd2lkZ2V0L0xpc3QjY29uZmlnLWl0ZW1zKS5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy1zdG9yZSlcbiAgICAgKi9cbiAgICBzdG9yZSA/IDogb2JqZWN0fG9iamVjdFtdfFN0b3JlQ29uZmlnfFN0b3JlfFN0b3JlQ29uZmlnW11cbiAgICAvKipcbiAgICAgKiBBIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBbdGFiXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiKSBjcmVhdGVkIGZvciB0aGlzIHdpZGdldCB3aGVuIGl0IGlzIHBsYWNlZCBpbiBhXG4gICAgICogW1RhYlBhbmVsXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvVGFiUGFuZWwpLiBGb3IgZXhhbXBsZSwgdGhpcyBjb25maWcgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgaWNvbiBvZiB0aGUgYHRhYmAgZm9yXG4gICAgICogdGhpcyB3aWRnZXQ6XG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctdGFiKVxuICAgICAqL1xuICAgIHRhYiA/IDogYm9vbGVhbnxUYWJDb25maWdcbiAgICAvKipcbiAgICAgKiBUaGUgdGFnIG5hbWUgb2YgdGhpcyBXaWRnZXQncyByb290IGVsZW1lbnRcbiAgICAgKi9cbiAgICB0YWcgPyA6IHN0cmluZ1xuICAgIC8qKlxuICAgICAqIFRleHQgYWxpZ25tZW50OiAnbGVmdCcsICdjZW50ZXInIG9yICdyaWdodCcuIEFsc28gYWNjZXB0cyBkaXJlY3Rpb24gbmV1dHJhbCAnc3RhcnQnIGFuZCAnZW5kJy5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy10ZXh0QWxpZ24pXG4gICAgICovXG4gICAgdGV4dEFsaWduID8gOiAnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnXG4gICAgLyoqXG4gICAgICogVGhlIHRpdGxlIHRvIHNob3cgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdC5cbiAgICAgKi9cbiAgICB0aXRsZSA/IDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogU2VsZWN0L2Rlc2VsZWN0IGFsbCBpZiBgQ01EYC9gQ1RSTGAgaXMgcHJlc3NlZCB3aGVuIGNsaWNraW5nXG4gICAgICovXG4gICAgdG9nZ2xlQWxsSWZDdHJsUHJlc3NlZCA/IDogYm9vbGVhblxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgZm9yIHRoZSB3aWRnZXQsIGVpdGhlciBhcyBhIHN0cmluZyBvciBhcyBhIFRvb2x0aXAgY29uZmlnIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2NvbmZpZy10b29sdGlwKVxuICAgICAqL1xuICAgIHRvb2x0aXAgPyA6IHN0cmluZ3xUb29sdGlwQ29uZmlnfG51bGxcbiAgICAvKipcbiAgICAgKiBUZW1wbGF0ZSBmdW5jdGlvbiB0byBwcm92aWRlIGEgdG9vbHRpcCAodGV4dHVhbCwgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IEhUTUwtZW5jb2RlZCkgc2hvd24gd2hlbiBob3ZlcmluZyBhbiBpdGVtLlxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSByZWNvcmQgVGhlIHJlY29yZCByZXByZXNlbnRpbmcgdGhlIGl0ZW1cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHRvb2x0aXBUZW1wbGF0ZSA/IDogKHJlY29yZDogTW9kZWwpID0+IHN0cmluZ1xuICAgIHR5cGUgPyA6ICdncm91cGJhcidcbiAgICAvKipcbiAgICAgKiBDdXN0b20gQ1NTIGNsYXNzIG5hbWUgc3VmZml4ZXMgdG8gYXBwbHkgdG8gdGhlIGVsZW1lbnRzIHJlbmRlcmVkIGJ5IHRoaXMgd2lkZ2V0LiBUaGlzIG1heSBiZSBzcGVjaWZpZWRcbiAgICAgKiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcsIGFuIGFycmF5IG9mIHN0cmluZ3MsIG9yIGFzIGFuIG9iamVjdCBpbiB3aGljaCBwcm9wZXJ0eSBuYW1lcyB3aXRoIHRydXRoeVxuICAgICAqIHZhbHVlcyBhcmUgdXNlZCBhcyB0aGUgY2xhc3MgbmFtZXMuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctdWkpXG4gICAgICovXG4gICAgdWkgPyA6IHN0cmluZ3xvYmplY3RcbiAgICAvKipcbiAgICAgKiBDb250cm9scyB2aXJ0dWFsaXphdGlvbiBvZiBsaXN0IGl0ZW1zIHVzaW5nIHRoZSBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJgIEFQSSB0byByZW5kZXIgaXRlbXMgb25seSB3aGVuXG4gICAgICogc2Nyb2xsZWQgaW50byB2aWV3LiBUaGlzIGlzIG9ubHkgdXNlZnVsIGZvciBsaXN0cyB3aXRoIGNvbXBsZXggbWFya3VwLCBmb3Igc2ltcGxlIGxpc3RzIGl0IGxpa2VseSBhZGRzXG4gICAgICogb3ZlcmhlYWQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWctdmlydHVhbGl6ZSlcbiAgICAgKi9cbiAgICB2aXJ0dWFsaXplID8gOiBib29sZWFufG51bWJlclxuICAgIC8qKlxuICAgICAqIEEgd2lkZ2V0cyB3ZWlnaHQgZGV0ZXJtaW5lcyBpdHMgcG9zaXRpb24gYW1vbmcgc2libGluZ3Mgd2hlbiBhZGRlZCB0byBhIFtDb250YWluZXJdKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9Db3JlL3dpZGdldC9Db250YWluZXIpLlxuICAgICAqIEhpZ2hlciB3ZWlnaHRzIGdvIGZ1cnRoZXIgZG93bi5cbiAgICAgKi9cbiAgICB3ZWlnaHQgPyA6IG51bWJlclxuICAgIC8qKlxuICAgICAqIFdpZGdldCdzIHdpZHRoLCB1c2VkIHRvIHNldCBlbGVtZW50IGBzdHlsZS53aWR0aGAuIEVpdGhlciBzcGVjaWZ5IGEgdmFsaWQgd2lkdGggc3RyaW5nIG9yIGEgbnVtYmVyLCB3aGljaFxuICAgICAqIHdpbGwgZ2V0ICdweCcgYXBwZW5kZWQuIFdlIHJlY29tbWVuZCB1c2luZyBDU1MgYXMgdGhlIHByaW1hcnkgd2F5IHRvIGNvbnRyb2wgd2lkdGgsIGJ1dCBpbiBzb21lIGNhc2VzXG4gICAgICogdGhpcyBjb25maWcgaXMgY29udmVuaWVudC5cbiAgICAgKi9cbiAgICB3aWR0aCA/IDogc3RyaW5nfG51bWJlclxuICAgIC8qKlxuICAgICAqIFRoZSB4IHBvc2l0aW9uIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjY29uZmlnLXgpXG4gICAgICovXG4gICAgeCA/IDogbnVtYmVyXG4gICAgLyoqXG4gICAgICogVGhlIHkgcG9zaXRpb24gZm9yIHRoZSB3aWRnZXQuXG4gICAgICogLi4uXG4gICAgICogW1ZpZXcgb25saW5lIGRvY3MuLi5dKGh0dHBzOi8vYnJ5bnR1bS5jb20vcHJvZHVjdHMvZ3JpZC9kb2NzL2FwaS9HcmlkL3dpZGdldC9Hcm91cEJhciNjb25maWcteSlcbiAgICAgKi9cbiAgICB5ID8gOiBudW1iZXJcblxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvciA6ICdicnludHVtLWdyb3VwLWJhcicsXG4gICAgdGVtcGxhdGUgOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBCcnludHVtR3JvdXBCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIGluc3RhbmNlQ2xhc3MgPSBHcm91cEJhcjtcblxuICAgIHB1YmxpYyBzdGF0aWMgaW5zdGFuY2VOYW1lID0gJ0dyb3VwQmFyJztcblxuICAgIHByaXZhdGUgc3RhdGljIGJyeW50dW1FdmVudHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAnb25CZWZvcmVEZXN0cm95JyxcbiAgICAgICAgJ29uQmVmb3JlSGlkZScsXG4gICAgICAgICdvbkJlZm9yZUl0ZW0nLFxuICAgICAgICAnb25CZWZvcmVTaG93JyxcbiAgICAgICAgJ29uQ2F0Y2hBbGwnLFxuICAgICAgICAnb25EZXN0cm95JyxcbiAgICAgICAgJ29uRWxlbWVudENyZWF0ZWQnLFxuICAgICAgICAnb25Gb2N1c0luJyxcbiAgICAgICAgJ29uRm9jdXNPdXQnLFxuICAgICAgICAnb25IaWRlJyxcbiAgICAgICAgJ29uSXRlbScsXG4gICAgICAgICdvblBhaW50JyxcbiAgICAgICAgJ29uUmVhZE9ubHknLFxuICAgICAgICAnb25SZWNvbXBvc2UnLFxuICAgICAgICAnb25SZXNpemUnLFxuICAgICAgICAnb25TZWxlY3Rpb25DaGFuZ2UnLFxuICAgICAgICAnb25TaG93JyxcbiAgICAgICAgJ29uVG9nZ2xlR3JvdXAnLFxuICAgICAgICAnb25Ub2dnbGVOb2RlJ1xuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtRmVhdHVyZU5hbWVzOiBzdHJpbmdbXSA9IFtcblxuICAgIF07XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnczogc3RyaW5nW10gPSBCcnludHVtR3JvdXBCYXJDb21wb25lbnQuYnJ5bnR1bUZlYXR1cmVOYW1lcy5jb25jYXQoW1xuICAgICAgICAnYWN0aXZhdGVPbk1vdXNlb3ZlcicsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYWxsb3dHcm91cFNlbGVjdCcsXG4gICAgICAgICdhbmNob3InLFxuICAgICAgICAnYXBwZW5kVG8nLFxuICAgICAgICAnYXJpYURlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2FyaWFMYWJlbCcsXG4gICAgICAgICdidWJibGVFdmVudHMnLFxuICAgICAgICAnY2FsbE9uRnVuY3Rpb25zJyxcbiAgICAgICAgJ2NhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbGVhclNlbGVjdGlvbk9uRW1wdHlTcGFjZUNsaWNrJyxcbiAgICAgICAgJ2Nsb3NhYmxlJyxcbiAgICAgICAgJ2Nsb3NlSGFuZGxlcicsXG4gICAgICAgICdjbHMnLFxuICAgICAgICAnY29sbGFwc2libGVHcm91cHMnLFxuICAgICAgICAnY29sb3InLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2NvbmZpZycsXG4gICAgICAgICdjb25zdHJhaW5UbycsXG4gICAgICAgICdjb250ZW50JyxcbiAgICAgICAgJ2NvbnRlbnRFbGVtZW50Q2xzJyxcbiAgICAgICAgJ2RhdGFGaWVsZCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNhYmxlZCcsXG4gICAgICAgICdkaXNwbGF5RmllbGQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZW1wdHlUZXh0JyxcbiAgICAgICAgJ2V4dHJhRGF0YScsXG4gICAgICAgICdmbGV4JyxcbiAgICAgICAgJ2Zsb2F0aW5nJyxcbiAgICAgICAgJ2dldEl0ZW1DbHMnLFxuICAgICAgICAnZ2V0SXRlbVN0eWxlJyxcbiAgICAgICAgJ2dyb3VwSGVhZGVyVHBsJyxcbiAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICdoaWRkZW4nLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2h0bWxDbHMnLFxuICAgICAgICAnaWNvblRwbCcsXG4gICAgICAgICdpZCcsXG4gICAgICAgICdpZ25vcmVQYXJlbnRSZWFkT25seScsXG4gICAgICAgICdpbnNlcnRCZWZvcmUnLFxuICAgICAgICAnaW5zZXJ0Rmlyc3QnLFxuICAgICAgICAnaXNTZWxlY3RhYmxlJyxcbiAgICAgICAgJ2l0ZW1zJyxcbiAgICAgICAgJ2l0ZW1UcGwnLFxuICAgICAgICAna2V5TWFwJyxcbiAgICAgICAgJ2xpc3RlbmVycycsXG4gICAgICAgICdsb2NhbGVDbGFzcycsXG4gICAgICAgICdsb2NhbGl6YWJsZScsXG4gICAgICAgICdsb2NhbGl6YWJsZVByb3BlcnRpZXMnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21hc2tEZWZhdWx0cycsXG4gICAgICAgICdtYXNrZWQnLFxuICAgICAgICAnbWF4SGVpZ2h0JyxcbiAgICAgICAgJ21heGltaXplT25Nb2JpbGUnLFxuICAgICAgICAnbWF4V2lkdGgnLFxuICAgICAgICAnbWluSGVpZ2h0JyxcbiAgICAgICAgJ21pbldpZHRoJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnbXVsdGlTZWxlY3QnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEFsbEl0ZW0nLFxuICAgICAgICAnc2VsZWN0ZWQnLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICdzcGFuJyxcbiAgICAgICAgJ3N0b3JlJyxcbiAgICAgICAgJ3RhYicsXG4gICAgICAgICd0YWcnLFxuICAgICAgICAndGV4dEFsaWduJyxcbiAgICAgICAgJ3RpdGxlJyxcbiAgICAgICAgJ3RvZ2dsZUFsbElmQ3RybFByZXNzZWQnLFxuICAgICAgICAndG9vbHRpcCcsXG4gICAgICAgICd0b29sdGlwVGVtcGxhdGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXJ0dWFsaXplJyxcbiAgICAgICAgJ3dlaWdodCcsXG4gICAgICAgICd3aWR0aCcsXG4gICAgICAgICd4JyxcbiAgICAgICAgJ3knXG4gICAgXSk7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBicnludHVtQ29uZmlnc09ubHk6IHN0cmluZ1tdID0gW1xuICAgICAgICAnYWN0aXZhdGVPbk1vdXNlb3ZlcicsXG4gICAgICAgICdhZG9wdCcsXG4gICAgICAgICdhbGlnbicsXG4gICAgICAgICdhbGxvd0dyb3VwU2VsZWN0JyxcbiAgICAgICAgJ2FuY2hvcicsXG4gICAgICAgICdhcmlhRGVzY3JpcHRpb24nLFxuICAgICAgICAnYXJpYUxhYmVsJyxcbiAgICAgICAgJ2J1YmJsZUV2ZW50cycsXG4gICAgICAgICdjZW50ZXJlZCcsXG4gICAgICAgICdjbGVhclNlbGVjdGlvbk9uRW1wdHlTcGFjZUNsaWNrJyxcbiAgICAgICAgJ2Nsb3NhYmxlJyxcbiAgICAgICAgJ2Nsb3NlSGFuZGxlcicsXG4gICAgICAgICdjb2xvcicsXG4gICAgICAgICdjb25maWcnLFxuICAgICAgICAnY29uc3RyYWluVG8nLFxuICAgICAgICAnY29udGVudEVsZW1lbnRDbHMnLFxuICAgICAgICAnZGF0YUZpZWxkJyxcbiAgICAgICAgJ2RlZmF1bHRCaW5kUHJvcGVydHknLFxuICAgICAgICAnZGV0ZWN0Q1NTQ29tcGF0aWJpbGl0eUlzc3VlcycsXG4gICAgICAgICdkaXNwbGF5RmllbGQnLFxuICAgICAgICAnZG9jaycsXG4gICAgICAgICdkcmFnZ2FibGUnLFxuICAgICAgICAnZWxlbWVudEF0dHJpYnV0ZXMnLFxuICAgICAgICAnZmxvYXRpbmcnLFxuICAgICAgICAnZ2V0SXRlbUNscycsXG4gICAgICAgICdnZXRJdGVtU3R5bGUnLFxuICAgICAgICAnZ3JvdXBIZWFkZXJUcGwnLFxuICAgICAgICAnaGlkZUFuaW1hdGlvbicsXG4gICAgICAgICdodG1sQ2xzJyxcbiAgICAgICAgJ2ljb25UcGwnLFxuICAgICAgICAnaWdub3JlUGFyZW50UmVhZE9ubHknLFxuICAgICAgICAnaXNTZWxlY3RhYmxlJyxcbiAgICAgICAgJ2l0ZW1UcGwnLFxuICAgICAgICAnbGlzdGVuZXJzJyxcbiAgICAgICAgJ2xvY2FsZUNsYXNzJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlJyxcbiAgICAgICAgJ2xvY2FsaXphYmxlUHJvcGVydGllcycsXG4gICAgICAgICdtYXNrRGVmYXVsdHMnLFxuICAgICAgICAnbWFza2VkJyxcbiAgICAgICAgJ21vbml0b3JSZXNpemUnLFxuICAgICAgICAnb3duZXInLFxuICAgICAgICAncG9zaXRpb25lZCcsXG4gICAgICAgICdwcmV2ZW50VG9vbHRpcE9uVG91Y2gnLFxuICAgICAgICAncmVsYXlTdG9yZUV2ZW50cycsXG4gICAgICAgICdyaXBwbGUnLFxuICAgICAgICAncm9vdEVsZW1lbnQnLFxuICAgICAgICAnc2Nyb2xsQWN0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEFsbEl0ZW0nLFxuICAgICAgICAnc2hvd0FuaW1hdGlvbicsXG4gICAgICAgICdzaG93VG9vbHRpcFdoZW5EaXNhYmxlZCcsXG4gICAgICAgICd0YWInLFxuICAgICAgICAndGFnJyxcbiAgICAgICAgJ3RleHRBbGlnbicsXG4gICAgICAgICd0b29sdGlwVGVtcGxhdGUnLFxuICAgICAgICAndHlwZScsXG4gICAgICAgICd1aScsXG4gICAgICAgICd2aXJ0dWFsaXplJyxcbiAgICAgICAgJ3dlaWdodCdcbiAgICBdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYnJ5bnR1bVByb3BzOiBzdHJpbmdbXSA9IEJyeW50dW1Hcm91cEJhckNvbXBvbmVudC5icnludHVtRmVhdHVyZU5hbWVzLmNvbmNhdChbXG4gICAgICAgICdhbGlnblNlbGYnLFxuICAgICAgICAnYW5jaG9yU2l6ZScsXG4gICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICdjYWxsT25GdW5jdGlvbnMnLFxuICAgICAgICAnY2F0Y2hFdmVudEhhbmRsZXJFeGNlcHRpb25zJyxcbiAgICAgICAgJ2NscycsXG4gICAgICAgICdjb2xsYXBzaWJsZUdyb3VwcycsXG4gICAgICAgICdjb2x1bW4nLFxuICAgICAgICAnY29udGVudCcsXG4gICAgICAgICdkYXRhc2V0JyxcbiAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgJ2VtcHR5VGV4dCcsXG4gICAgICAgICdleHRyYURhdGEnLFxuICAgICAgICAnZmxleCcsXG4gICAgICAgICdmb2N1c1Zpc2libGUnLFxuICAgICAgICAnaGVpZ2h0JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgICdodG1sJyxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ2luc2VydEJlZm9yZScsXG4gICAgICAgICdpbnNlcnRGaXJzdCcsXG4gICAgICAgICdpdGVtcycsXG4gICAgICAgICdrZXlNYXAnLFxuICAgICAgICAnbWFyZ2luJyxcbiAgICAgICAgJ21heEhlaWdodCcsXG4gICAgICAgICdtYXhpbWl6ZU9uTW9iaWxlJyxcbiAgICAgICAgJ21heFdpZHRoJyxcbiAgICAgICAgJ21pbkhlaWdodCcsXG4gICAgICAgICdtaW5XaWR0aCcsXG4gICAgICAgICdtdWx0aVNlbGVjdCcsXG4gICAgICAgICdwYXJlbnQnLFxuICAgICAgICAncmVhZE9ubHknLFxuICAgICAgICAncnRsJyxcbiAgICAgICAgJ3Njcm9sbGFibGUnLFxuICAgICAgICAnc2VsZWN0ZWQnLFxuICAgICAgICAnc3BhbicsXG4gICAgICAgICdzdG9yZScsXG4gICAgICAgICd0aXRsZScsXG4gICAgICAgICd0b2dnbGVBbGxJZkN0cmxQcmVzc2VkJyxcbiAgICAgICAgJ3Rvb2x0aXAnLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICAneCcsXG4gICAgICAgICd5J1xuICAgIF0pO1xuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHB1YmxpYyBpbnN0YW5jZSE6IEdyb3VwQmFyO1xuXG4gICAgcHJpdmF0ZSBicnludHVtQ29uZmlnID0ge1xuICAgICAgICBhZG9wdCAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhcHBlbmRUbyAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBocmVmICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBhbmd1bGFyQ29tcG9uZW50IDogdGhpcyxcbiAgICAgICAgZmVhdHVyZXMgICAgICAgICA6IHt9LFxuICAgICAgICBsaXN0ZW5lcnMgICAgICAgIDoge31cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3Mgb25seVxuICAgIEBJbnB1dCgpIGFjdGl2YXRlT25Nb3VzZW92ZXIgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgYWRvcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWduICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IEFsaWduU3BlY3xzdHJpbmc7XG4gICAgQElucHV0KCkgYWxsb3dHcm91cFNlbGVjdCAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBhbmNob3IgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGFyaWFEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBhcmlhTGFiZWwgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYnViYmxlRXZlbnRzICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0O1xuICAgIEBJbnB1dCgpIGNlbnRlcmVkICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xlYXJTZWxlY3Rpb25PbkVtcHR5U3BhY2VDbGljayAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbG9zYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNsb3NlSGFuZGxlciAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3woKCkgPT4gdm9pZCk7XG4gICAgQElucHV0KCkgY29sb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG9iamVjdDtcbiAgICBASW5wdXQoKSBjb25zdHJhaW5UbyAgICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxXaWRnZXR8UmVjdGFuZ2xlO1xuICAgIEBJbnB1dCgpIGNvbnRlbnRFbGVtZW50Q2xzICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZGF0YUZpZWxkICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRCaW5kUHJvcGVydHkgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkZXRlY3RDU1NDb21wYXRpYmlsaXR5SXNzdWVzICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGRpc3BsYXlGaWVsZCAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSBkb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAndG9wJ3wnYm90dG9tJ3wnbGVmdCd8J3JpZ2h0J3wnc3RhcnQnfCdlbmQnfCdoZWFkZXInfCdwcmUtaGVhZGVyJ3xvYmplY3Q7XG4gICAgQElucHV0KCkgZHJhZ2dhYmxlICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnx7XG4gICAgICAgIGhhbmRsZVNlbGVjdG9yPzogc3RyaW5nXG4gICAgfTtcbiAgICBASW5wdXQoKSBlbGVtZW50QXR0cmlidXRlcyAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmd8bnVsbD47XG4gICAgQElucHV0KCkgZmxvYXRpbmcgICAgICAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBnZXRJdGVtQ2xzICAgICAgICAgICAgICAgICAgICAgICEgOiAoKHJlY29yZDogTW9kZWwpID0+IHN0cmluZyl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGdldEl0ZW1TdHlsZSAgICAgICAgICAgICAgICAgICAgISA6ICgocmVjb3JkOiBNb2RlbCkgPT4gc3RyaW5nKXxzdHJpbmc7XG4gICAgQElucHV0KCkgZ3JvdXBIZWFkZXJUcGwgICAgICAgICAgICAgICAgICAhIDogKHJlY29yZDogTW9kZWwsIGdyb3VwTmFtZTogc3RyaW5nKSA9PiBzdHJpbmc7XG4gICAgQElucHV0KCkgaGlkZUFuaW1hdGlvbiAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgaHRtbENscyAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSBpY29uVHBsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAocmVjb3JkOiBNb2RlbCkgPT4gRG9tQ29uZmlnfHN0cmluZ3x2b2lkO1xuICAgIEBJbnB1dCgpIGlnbm9yZVBhcmVudFJlYWRPbmx5ICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNTZWxlY3RhYmxlICAgICAgICAgICAgICAgICAgICAhIDogKCgpID0+IGJvb2xlYW4pfHN0cmluZztcbiAgICBASW5wdXQoKSBpdGVtVHBsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiAoKHJlY29yZDogTW9kZWwpID0+IHN0cmluZyl8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGxpc3RlbmVycyAgICAgICAgICAgICAgICAgICAgICAgISA6IEdyb3VwQmFyTGlzdGVuZXJzO1xuICAgIEBJbnB1dCgpIGxvY2FsZUNsYXNzICAgICAgICAgICAgICAgICAgICAgISA6IHR5cGVvZiBCYXNlO1xuICAgIEBJbnB1dCgpIGxvY2FsaXphYmxlICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgbG9jYWxpemFibGVQcm9wZXJ0aWVzICAgICAgICAgICAhIDogc3RyaW5nW107XG4gICAgQElucHV0KCkgbWFza0RlZmF1bHRzICAgICAgICAgICAgICAgICAgICAhIDogTWFza0NvbmZpZztcbiAgICBASW5wdXQoKSBtYXNrZWQgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufHN0cmluZ3xNYXNrQ29uZmlnO1xuICAgIEBJbnB1dCgpIG1vbml0b3JSZXNpemUgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBpbW1lZGlhdGU/OiBib29sZWFuXG4gICAgfTtcbiAgICBASW5wdXQoKSBvd25lciAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBXaWRnZXR8YW55O1xuICAgIEBJbnB1dCgpIHBvc2l0aW9uZWQgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHJldmVudFRvb2x0aXBPblRvdWNoICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWxheVN0b3JlRXZlbnRzICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJpcHBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW58e1xuICAgICAgICBkZWxlZ2F0ZT86IHN0cmluZ1xuICAgICAgICBjb2xvcj86IHN0cmluZ1xuICAgICAgICByYWRpdXM/OiBudW1iZXJcbiAgICAgICAgY2xpcD86IHN0cmluZ1xuICAgIH07XG4gICAgQElucHV0KCkgcm9vdEVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAhIDogU2hhZG93Um9vdHxIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKSBzY3JvbGxBY3Rpb24gICAgICAgICAgICAgICAgICAgICEgOiAnaGlkZSd8J3JlYWxpZ24nfG51bGw7XG4gICAgQElucHV0KCkgc2VsZWN0QWxsSXRlbSAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxzdHJpbmc7XG4gICAgQElucHV0KCkgc2hvd0FuaW1hdGlvbiAgICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbnxvYmplY3Q7XG4gICAgQElucHV0KCkgc2hvd1Rvb2x0aXBXaGVuRGlzYWJsZWQgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0YWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufFRhYkNvbmZpZztcbiAgICBASW5wdXQoKSB0YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgdGV4dEFsaWduICAgICAgICAgICAgICAgICAgICAgICAhIDogJ2xlZnQnfCdjZW50ZXInfCdyaWdodCd8J3N0YXJ0J3wnZW5kJztcbiAgICBASW5wdXQoKSB0b29sdGlwVGVtcGxhdGUgICAgICAgICAgICAgICAgICEgOiAocmVjb3JkOiBNb2RlbCkgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6ICdncm91cGJhcic7XG4gICAgQElucHV0KCkgdWkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG9iamVjdDtcbiAgICBASW5wdXQoKSB2aXJ0dWFsaXplICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufG51bWJlcjtcbiAgICBASW5wdXQoKSB3ZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG5cbiAgICAvLyBDb25maWdzIGFuZCBwcm9wZXJ0aWVzXG4gICAgQElucHV0KCkgYWxpZ25TZWxmICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXBwZW5kVG8gICAgICAgICAgICAgICAgICAgICEgOiBIVE1MRWxlbWVudHxzdHJpbmc7XG4gICAgQElucHV0KCkgY2FsbE9uRnVuY3Rpb25zICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNhdGNoRXZlbnRIYW5kbGVyRXhjZXB0aW9ucyAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjbHMgICAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xvYmplY3Q7XG4gICAgQElucHV0KCkgY29sbGFwc2libGVHcm91cHMgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyO1xuICAgIEBJbnB1dCgpIGNvbnRlbnQgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGRhdGFzZXQgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0fFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFufCdpbmVydCc7XG4gICAgQElucHV0KCkgZW1wdHlUZXh0ICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXh0cmFEYXRhICAgICAgICAgICAgICAgICAgICEgOiBhbnk7XG4gICAgQElucHV0KCkgZmxleCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGhlaWdodCAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBoaWRkZW4gICAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaHRtbCAgICAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8KCh3aWRnZXQ6IFdpZGdldCkgPT4gc3RyaW5nKXxEb21Db25maWd8RG9tQ29uZmlnW118VnVlQ29uZmlnO1xuICAgIEBJbnB1dCgpIGlkICAgICAgICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEJlZm9yZSAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGluc2VydEZpcnN0ICAgICAgICAgICAgICAgICAhIDogSFRNTEVsZW1lbnR8c3RyaW5nO1xuICAgIEBJbnB1dCgpIGl0ZW1zICAgICAgICAgICAgICAgICAgICAgICAhIDogb2JqZWN0W107XG4gICAgQElucHV0KCkga2V5TWFwICAgICAgICAgICAgICAgICAgICAgICEgOiBSZWNvcmQ8c3RyaW5nLCBLZXlNYXBDb25maWc+O1xuICAgIEBJbnB1dCgpIG1hcmdpbiAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSBtYXhIZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWF4aW1pemVPbk1vYmlsZSAgICAgICAgICAgICEgOiBudW1iZXJ8c3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heFdpZHRoICAgICAgICAgICAgICAgICAgICAhIDogc3RyaW5nfG51bWJlcjtcbiAgICBASW5wdXQoKSBtaW5IZWlnaHQgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZ3xudW1iZXI7XG4gICAgQElucHV0KCkgbWluV2lkdGggICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8bnVtYmVyO1xuICAgIEBJbnB1dCgpIG11bHRpU2VsZWN0ICAgICAgICAgICAgICAgICAhIDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZWFkT25seSAgICAgICAgICAgICAgICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgcnRsICAgICAgICAgICAgICAgICAgICAgICAgICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHNjcm9sbGFibGUgICAgICAgICAgICAgICAgICAhIDogU2Nyb2xsZXJ8Ym9vbGVhbnxTY3JvbGxlckNvbmZpZztcbiAgICBASW5wdXQoKSBzZWxlY3RlZCAgICAgICAgICAgICAgICAgICAgISA6IE1vZGVsfE1vZGVsW118c3RyaW5nfHN0cmluZ1tdfG51bWJlcnxudW1iZXJbXXxDb2xsZWN0aW9ufG9iamVjdFtdfENvbGxlY3Rpb25Db25maWd8TW9kZWxDb25maWdbXXxDb2xsZWN0aW9uQ29uZmlnW107XG4gICAgQElucHV0KCkgc3BhbiAgICAgICAgICAgICAgICAgICAgICAgICEgOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RvcmUgICAgICAgICAgICAgICAgICAgICAgICEgOiBvYmplY3R8b2JqZWN0W118U3RvcmVDb25maWd8U3RvcmV8U3RvcmVDb25maWdbXTtcbiAgICBASW5wdXQoKSB0aXRsZSAgICAgICAgICAgICAgICAgICAgICAgISA6IHN0cmluZztcbiAgICBASW5wdXQoKSB0b2dnbGVBbGxJZkN0cmxQcmVzc2VkICAgICAgISA6IGJvb2xlYW47XG4gICAgQElucHV0KCkgdG9vbHRpcCAgICAgICAgICAgICAgICAgICAgICEgOiBzdHJpbmd8VG9vbHRpcENvbmZpZ3xudWxsO1xuICAgIEBJbnB1dCgpIHdpZHRoICAgICAgICAgICAgICAgICAgICAgICAhIDogbnVtYmVyfHN0cmluZztcbiAgICBASW5wdXQoKSB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcbiAgICBASW5wdXQoKSB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgISA6IG51bWJlcjtcblxuICAgIC8vIFByb3BlcnRpZXMgb25seVxuICAgIEBJbnB1dCgpIGFuY2hvclNpemUgICAhIDogbnVtYmVyW107XG4gICAgQElucHV0KCkgZm9jdXNWaXNpYmxlICEgOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHBhcmVudCAgICAgICAhIDogV2lkZ2V0O1xuXG4gICAgLy8gRXZlbnRzIGVtaXR0ZXJzXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIGFuIG9iamVjdCBpcyBkZXN0cm95ZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5CYXNlfSBldmVudC5zb3VyY2UgVGhlIE9iamVjdCB0aGF0IGlzIGJlaW5nIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVEZXN0cm95OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBCYXNlIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYmVmb3JlIGEgd2lkZ2V0IGlzIGhpZGRlbi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXQgYmVpbmcgaGlkZGVuLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFVzZXIgZ29pbmcgdG8gYWN0aXZhdGUgYW4gaXRlbSBpbiB0aGUgbGlzdCBlaXRoZXIgYnkgcG9pbnRlciBvciBrZXlib2FyZC5cbiAgICAgKiBUaGUgYWN0aXZlIHJlY29yZCwgbGlzdCBpdGVtIGluZGV4LCBhbmQgdGhlIHRyaWdnZXJpbmcgZXZlbnQgYXJlIHBhc3NlZC5cbiAgICAgKiBJdCBpcyBwcmV2ZW50YWJsZSBieSByZXR1cm5pbmcgYGZhbHNlYFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lkxpc3R9IGV2ZW50LnNvdXJjZSBUaGUgTGlzdCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50Lml0ZW0gVGhlIGNsaWNrZWQgbGlzdCBlbGVtZW50XG4gICAgICogQHBhcmFtIHtDb3JlLmRhdGEuTW9kZWx9IGV2ZW50LnJlY29yZCBBY3RpdmF0ZWQgcmVjb3JkXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LmluZGV4IExpc3QgaXRlbSBpbmRleFxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50LmV2ZW50IFRyaWdnZXJpbmcgZXZlbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVJdGVtOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBMaXN0LCBpdGVtOiBIVE1MRWxlbWVudCwgcmVjb3JkOiBNb2RlbCwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEV2ZW50IH0pID0+IFByb21pc2U8Ym9vbGVhbj58Ym9vbGVhbnx2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIGJlZm9yZSBhIHdpZGdldCBpcyBzaG93bi4gUmV0dXJuIGBmYWxzZWAgdG8gcHJldmVudCB0aGUgYWN0aW9uLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldCxhbnl9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0IGJlaW5nIHNob3duXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmVmb3JlU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0fGFueSB9KSA9PiBQcm9taXNlPGJvb2xlYW4+fGJvb2xlYW58dm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVzIHdoZW4gYW55IG90aGVyIGV2ZW50IGlzIGZpcmVkIGZyb20gdGhlIG9iamVjdC5cbiAgICAgKiAuLi5cbiAgICAgKiBbVmlldyBvbmxpbmUgZG9jcy4uLl0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0dyaWQvd2lkZ2V0L0dyb3VwQmFyI2V2ZW50LWNhdGNoQWxsKVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3tba2V5OiBzdHJpbmddOiBhbnksIHR5cGU6IHN0cmluZ319IGV2ZW50LmV2ZW50IFRoZSBPYmplY3QgdGhhdCBjb250YWlucyBldmVudCBkZXRhaWxzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50LmV2ZW50LnR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IHdoaWNoIGlzIGNhdWdodCBieSB0aGUgbGlzdGVuZXJcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DYXRjaEFsbDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7W2tleTogc3RyaW5nXTogYW55LCB0eXBlOiBzdHJpbmd9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZXMgd2hlbiBhbiBvYmplY3QgaXMgZGVzdHJveWVkLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuQmFzZX0gZXZlbnQuc291cmNlIFRoZSBPYmplY3QgdGhhdCBpcyBiZWluZyBkZXN0cm95ZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRGVzdHJveTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogQmFzZSB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcmVkIHdoZW4gYSB3aWRnZXQncyBbZWxlbWVudF0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNwcm9wZXJ0eS1lbGVtZW50KSBpcyBhdmFpbGFibGUuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LmVsZW1lbnQgVGhlIFdpZGdldCdzIGVsZW1lbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRWxlbWVudENyZWF0ZWQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBlbGVtZW50OiBIVE1MRWxlbWVudCB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBmb2N1cyBlbnRlcnMgdGhpcyBXaWRnZXQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c0luOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIGZyb21FbGVtZW50OiBIVE1MRWxlbWVudCwgdG9FbGVtZW50OiBIVE1MRWxlbWVudCwgZnJvbVdpZGdldDogV2lkZ2V0LCB0b1dpZGdldDogV2lkZ2V0LCBiYWNrd2FyZHM6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEZpcmVkIHdoZW4gZm9jdXMgZXhpdHMgdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIGBibHVyYCBldmVudC5cbiAgICAgKiBmb2N1cyBtb3ZpbmcgZnJvbSB3aXRoaW4gdGhpcyBXaWRnZXQncyBvd25lcnNoaXAgdHJlZSwgZXZlbiBpZiB0aGVyZSBhcmUgZmxvYXRpbmcgd2lkZ2V0c1xuICAgICAqIHdpbGwgbm90IHRyaWdnZXIgdGhpcyBldmVudC4gVGhpcyBpcyB3aGVuIGZvY3VzIGV4aXRzIHRoaXMgd2lkZ2V0IGNvbXBsZXRlbHkuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhpcyBXaWRnZXRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBldmVudC5mcm9tRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGV2ZW50LnRvRWxlbWVudCBUaGUgZWxlbWVudCB3aGljaCBnYWluZWQgZm9jdXMuXG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LmZyb21XaWRnZXQgVGhlIHdpZGdldCB3aGljaCBsb3N0IGZvY3VzLlxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC50b1dpZGdldCBUaGUgd2lkZ2V0IHdoaWNoIGdhaW5lZCBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV2ZW50LmJhY2t3YXJkcyBgdHJ1ZWAgaWYgdGhlIGB0b0VsZW1lbnRgIGlzIGJlZm9yZSB0aGUgYGZyb21FbGVtZW50YCBpbiBkb2N1bWVudCBvcmRlci5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Gb2N1c091dDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0LCBmcm9tRWxlbWVudDogSFRNTEVsZW1lbnQsIHRvRWxlbWVudDogSFRNTEVsZW1lbnQsIGZyb21XaWRnZXQ6IFdpZGdldCwgdG9XaWRnZXQ6IFdpZGdldCwgYmFja3dhcmRzOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyZWQgYWZ0ZXIgYSB3aWRnZXQgd2FzIGhpZGRlblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFVzZXIgYWN0aXZhdGVkIGFuIGl0ZW0gaW4gdGhlIGxpc3QgZWl0aGVyIGJ5IHBvaW50ZXIgb3Iga2V5Ym9hcmQuXG4gICAgICogVGhlIGFjdGl2ZSByZWNvcmQsIGxpc3QgaXRlbSBpbmRleCwgYW5kIHRoZSB0cmlnZ2VyaW5nIGV2ZW50IGFyZSBwYXNzZWQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuTGlzdH0gZXZlbnQuc291cmNlIFRoZSBMaXN0IGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZXZlbnQuaXRlbSBUaGUgY2xpY2tlZCBsaXN0IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQucmVjb3JkIEFjdGl2YXRlZCByZWNvcmRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaW5kZXggTGlzdCBpdGVtIGluZGV4XG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQuZXZlbnQgVHJpZ2dlcmluZyBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkl0ZW06IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IExpc3QsIGl0ZW06IEhUTUxFbGVtZW50LCByZWNvcmQ6IE1vZGVsLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQgfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCB3aGVuIGEgd2lkZ2V0IHdoaWNoIGhhZCBiZWVuIGluIGEgbm9uLXZpc2libGUgc3RhdGUgZm9yIGFueSByZWFzb25cbiAgICAgKiBhY2hpZXZlcyB2aXNpYmlsaXR5LlxuICAgICAqIC4uLlxuICAgICAqIFtWaWV3IG9ubGluZSBkb2NzLi4uXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvR3JpZC93aWRnZXQvR3JvdXBCYXIjZXZlbnQtcGFpbnQpXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS53aWRnZXQuV2lkZ2V0fSBldmVudC5zb3VyY2UgVGhlIHdpZGdldCBiZWluZyBwYWludGVkLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuZmlyc3RQYWludCBgdHJ1ZWAgaWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFpbnQuXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUGFpbnQ6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KChldmVudDogeyBzb3VyY2U6IFdpZGdldCwgZmlyc3RQYWludDogYm9vbGVhbiB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBhIFdpZGdldCdzIHJlYWQgb25seSBzdGF0ZSBpcyB0b2dnbGVkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQucmVhZE9ubHkgUmVhZCBvbmx5IG9yIG5vdFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblJlYWRPbmx5OiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgcmVhZE9ubHk6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgYSB3aWRnZXQncyBlbGVtZW50cyBoYXZlIGJlZW4gc3luY2hyb25pemVkIGR1ZSB0byBhIGRpcmVjdCBvciBpbmRpcmVjdCBjYWxsXG4gICAgICogdG8gW3JlY29tcG9zZV0oaHR0cHM6Ly9icnludHVtLmNvbS9wcm9kdWN0cy9ncmlkL2RvY3MvYXBpL0NvcmUvd2lkZ2V0L1dpZGdldCNmdW5jdGlvbi1yZWNvbXBvc2UpLCBpZiB0aGlzIHJlc3VsdHMgaW4gc29tZSBjaGFuZ2UgdG8gdGhlIHdpZGdldCdzIHJlbmRlcmVkIERPTSBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25SZWNvbXBvc2U6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8KCgpID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBGaXJlZCB3aGVuIHRoZSBlbmNhcHN1bGF0aW5nIGVsZW1lbnQgb2YgYSBXaWRnZXQgcmVzaXplcyAqb25seSB3aGVuIFttb25pdG9yUmVzaXplXShodHRwczovL2JyeW50dW0uY29tL3Byb2R1Y3RzL2dyaWQvZG9jcy9hcGkvQ29yZS93aWRnZXQvV2lkZ2V0I2NvbmZpZy1tb25pdG9yUmVzaXplKSBpcyBgdHJ1ZWAqLlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0LldpZGdldH0gZXZlbnQuc291cmNlIFRoaXMgV2lkZ2V0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50LndpZHRoIFRoZSBuZXcgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQuaGVpZ2h0IFRoZSBuZXcgaGVpZ2h0XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50Lm9sZFdpZHRoIFRoZSBvbGQgd2lkdGhcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZXZlbnQub2xkSGVpZ2h0IFRoZSBvbGQgaGVpZ2h0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUmVzaXplOiBhbnkgPSBuZXcgRXZlbnRFbWl0dGVyPCgoZXZlbnQ6IHsgc291cmNlOiBXaWRnZXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBvbGRXaWR0aDogbnVtYmVyLCBvbGRIZWlnaHQ6IG51bWJlciB9KSA9PiB2b2lkKXxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogRmlyZWQgd2hlbiBzZWxlY3Rpb24gY2hhbmdlc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUud2lkZ2V0Lkxpc3R9IGV2ZW50LnNvdXJjZSBUaGUgTGlzdCBpbnN0YW5jZVxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsW119IGV2ZW50LnNlbGVjdGVkIEFuIGFycmF5IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVjb3Jkc1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogTGlzdCwgc2VsZWN0ZWQ6IE1vZGVsW10gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyaWdnZXJlZCBhZnRlciBhIHdpZGdldCBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgRXZlbnQgb2JqZWN0XG4gICAgICogQHBhcmFtIHtDb3JlLndpZGdldC5XaWRnZXR9IGV2ZW50LnNvdXJjZSBUaGUgd2lkZ2V0XG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHNvdXJjZTogV2lkZ2V0IH0pID0+IHZvaWQpfHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBHcm91cCBpdGVtIGV4cGFuZGVkIG9yIGNvbGxhcHNlZFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBFdmVudCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge0NvcmUuZGF0YS5Nb2RlbH0gZXZlbnQuZ3JvdXBSZWNvcmQgR3JvdXAgcmVjb3JkXG4gICAgICogQHBhcmFtIHtib29sZWFufSBldmVudC5jb2xsYXBzZSBDb2xsYXBzZWQgKHRydWUpIG9yIGV4cGFuZGVkIChmYWxzZSlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Ub2dnbGVHcm91cDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IGdyb3VwUmVjb3JkOiBNb2RlbCwgY29sbGFwc2U6IGJvb2xlYW4gfSkgPT4gdm9pZCl8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIFRyZWUgcGFyZW50IG5vZGUgZXhwYW5kZWQgb3IgY29sbGFwc2VkXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEV2ZW50IG9iamVjdFxuICAgICAqIEBwYXJhbSB7Q29yZS5kYXRhLk1vZGVsfSBldmVudC5yZWNvcmQgVGhlIHBhcmVudCByZWNvcmQgd2hpY2ggaGFzIGJlZW4gdG9nZ2xlZFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gZXZlbnQuY29sbGFwc2UgQ29sbGFwc2VkICh0cnVlKSBvciBleHBhbmRlZCAoZmFsc2UpXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uVG9nZ2xlTm9kZTogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjwoKGV2ZW50OiB7IHJlY29yZDogTW9kZWwsIGNvbGxhcHNlOiBib29sZWFuIH0pID0+IHZvaWQpfHN0cmluZz4oKTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbmQgYXBwZW5kIHRoZSB1bmRlcmx5aW5nIHdpZGdldFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdFxuICAgICAgICAgICAgbWUgPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZ1xuICAgICAgICAgICAgfSA9IG1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlQ2xhc3MsXG4gICAgICAgICAgICAgICAgaW5zdGFuY2VOYW1lLFxuICAgICAgICAgICAgICAgIGJyeW50dW1Db25maWdzLFxuICAgICAgICAgICAgICAgIGJyeW50dW1FdmVudHNcbiAgICAgICAgICAgIH0gPSBCcnludHVtR3JvdXBCYXJDb21wb25lbnQ7XG5cbiAgICAgICAgYnJ5bnR1bUNvbmZpZ3MuZmlsdGVyKHByb3AgPT4gcHJvcCBpbiB0aGlzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgV3JhcHBlckhlbHBlci5hcHBseVByb3BWYWx1ZShicnludHVtQ29uZmlnLCBwcm9wLCB0aGlzW3Byb3BdKTtcbiAgICAgICAgICAgIGlmIChbJ2ZlYXR1cmVzJywgJ2NvbmZpZyddLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nQ29uZmlnUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBicnludHVtRXZlbnRzLmZpbHRlcihldmVudCA9PiB0aGlzW2V2ZW50XSAmJiB0aGlzW2V2ZW50XS5vYnNlcnZlcnMubGVuZ3RoID4gMCkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIHVuY2FwaXRhbGl6ZSA9IChzdHI6IHN0cmluZykgPT4gc3RyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLFxuICAgICAgICAgICAgICAgIGV2ZW50TmFtZSA9IChzdHI6IHN0cmluZykgPT4gdW5jYXBpdGFsaXplKHN0ci5zbGljZSgyKSk7XG5cbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGJyeW50dW1Db25maWcubGlzdGVuZXJzW2V2ZW50TmFtZShldmVudCldID0gZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIG1lW2V2ZW50XS5lbWl0KGUpO1xuICAgICAgICAgICAgICAgIC8vIEV2ZW50RW1pdHRlciBkb2VzIG5vdCByZXR1cm4gdmFsdWVzIGluIHRoZSBub3JtYWwgd2F5LCB3b3JrIGFyb3VuZCBpdCBieSBzZXR0aW5nIGByZXR1cm5WYWx1ZWAgZmxhZ1xuICAgICAgICAgICAgICAgIC8vIGluIEFuZ3VsYXIgbGlzdGVuZXJzXG4gICAgICAgICAgICAgICAgcmV0dXJuIGUucmV0dXJuVmFsdWU7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiBjb21wb25lbnQgaGFzIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQgaW4gY29uZmlnIHRoZW4gdXNlIGFkb3B0IHRvIFdyYXBwZXIncyBlbGVtZW50XG4gICAgICAgIGNvbnN0XG4gICAgICAgICAgICBjb250YWluZXJQYXJhbSA9IFtcbiAgICAgICAgICAgICAgICAnYWRvcHQnLFxuICAgICAgICAgICAgICAgICdhcHBlbmRUbycsXG4gICAgICAgICAgICAgICAgJ2luc2VydEFmdGVyJyxcbiAgICAgICAgICAgICAgICAnaW5zZXJ0QmVmb3JlJ1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIF0uZmluZChwcm9wID0+IGJyeW50dW1Db25maWdbcHJvcF0pO1xuICAgICAgICBpZiAoIWNvbnRhaW5lclBhcmFtKSB7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VOYW1lID09PSAnQnV0dG9uJyB8fCBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Um9vdE5vZGUoKSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAvLyBCdXR0b24gc2hvdWxkIGFsd2F5cyBiZSA8YT4gb3IgPGJ1dHRvbj4gaW5zaWRlIG93bmVyIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBicnludHVtQ29uZmlnLmFwcGVuZFRvID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJ5bnR1bUNvbmZpZy5hZG9wdCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFdyYXBwZXJIZWxwZXIuZGV2V2FybmluZ0NvbnRhaW5lcihpbnN0YW5jZU5hbWUsIGNvbnRhaW5lclBhcmFtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgbWUuaW5zdGFuY2UgPSBpbnN0YW5jZU5hbWUgPT09ICdXaWRnZXQnID8gV2lkZ2V0LmNyZWF0ZShicnludHVtQ29uZmlnKSA6IG5ldyBpbnN0YW5jZUNsYXNzKGJyeW50dW1Db25maWcpO1xuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2F0Y2ggZm9yIGNoYW5nZXNcbiAgICAgKiBAcGFyYW0gY2hhbmdlc1xuICAgICAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3RcbiAgICAgICAgICAgIHsgaW5zdGFuY2UgfSA9IHRoaXMsXG4gICAgICAgICAgICB7IGluc3RhbmNlTmFtZSB9ID0gQnJ5bnR1bUdyb3VwQmFyQ29tcG9uZW50O1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBjaGFuZ2VzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMpLmZvckVhY2goKFtwcm9wLCBjaGFuZ2VdKSA9PiB7XG4gICAgICAgICAgICBjb25zdFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gKGNoYW5nZSBhcyBTaW1wbGVDaGFuZ2UpLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB7IGluc3RhbmNlIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIHsgYnJ5bnR1bUNvbmZpZ3NPbmx5LCBicnludHVtUHJvcHMgfSA9IEJyeW50dW1Hcm91cEJhckNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmIChicnludHVtUHJvcHMuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICBXcmFwcGVySGVscGVyLmFwcGx5UHJvcFZhbHVlKGluc3RhbmNlLCBwcm9wLCBuZXdWYWx1ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChicnludHVtQ29uZmlnc09ubHkuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgV3JhcHBlckhlbHBlci5kZXZXYXJuaW5nVXBkYXRlUHJvcChpbnN0YW5jZU5hbWUsIHByb3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveSB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5kZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|