@ditojs/admin 2.93.0 → 2.94.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.
Files changed (49) hide show
  1. package/dist/dito-admin.es.js +1667 -1517
  2. package/dist/dito-admin.umd.js +6 -6
  3. package/package.json +11 -12
  4. package/src/components/DitoAccount.vue +7 -1
  5. package/src/components/DitoCreateButton.vue +6 -2
  6. package/src/components/DitoDialog.vue +1 -1
  7. package/src/components/DitoErrors.vue +1 -0
  8. package/src/components/DitoForm.vue +1 -0
  9. package/src/components/DitoFormInner.vue +5 -0
  10. package/src/components/DitoHeader.vue +1 -1
  11. package/src/components/DitoLabel.vue +6 -1
  12. package/src/components/DitoMenu.vue +1 -0
  13. package/src/components/DitoNavigation.vue +1 -1
  14. package/src/components/DitoNotifications.vue +1 -1
  15. package/src/components/DitoPane.vue +3 -0
  16. package/src/components/DitoPanel.vue +2 -0
  17. package/src/components/DitoSchema.vue +1 -0
  18. package/src/components/DitoScopes.vue +1 -0
  19. package/src/components/DitoSpinner.vue +2 -0
  20. package/src/components/DitoTableHead.vue +10 -0
  21. package/src/components/DitoTabs.vue +18 -2
  22. package/src/components/DitoTrail.vue +2 -1
  23. package/src/components/DitoTreeItem.vue +10 -0
  24. package/src/mixins/DitoMixin.js +4 -2
  25. package/src/mixins/PulldownMixin.js +9 -0
  26. package/src/types/DitoTypeCheckboxes.vue +2 -0
  27. package/src/types/DitoTypeList.vue +2 -0
  28. package/src/types/DitoTypeMultiselect.vue +2 -0
  29. package/src/types/DitoTypeRadio.vue +2 -0
  30. package/src/types/DitoTypeUpload.vue +4 -4
  31. package/src/utils/ui/dist/dito-ui.es.js +2729 -0
  32. package/src/utils/ui/dist/dito-ui.umd.js +2744 -0
  33. package/src/utils/ui/dist/style.css +1139 -0
  34. package/types/index.d.ts +74 -11
  35. package/types/tests/admin.test-d.ts +0 -27
  36. package/types/tests/component-buttons.test-d.ts +0 -44
  37. package/types/tests/component-list.test-d.ts +0 -159
  38. package/types/tests/component-misc.test-d.ts +0 -137
  39. package/types/tests/component-object.test-d.ts +0 -69
  40. package/types/tests/component-section.test-d.ts +0 -174
  41. package/types/tests/component-select.test-d.ts +0 -107
  42. package/types/tests/components.test-d.ts +0 -81
  43. package/types/tests/context.test-d.ts +0 -31
  44. package/types/tests/fixtures.ts +0 -24
  45. package/types/tests/form.test-d.ts +0 -109
  46. package/types/tests/instance.test-d.ts +0 -20
  47. package/types/tests/schema-features.test-d.ts +0 -402
  48. package/types/tests/variance.test-d.ts +0 -125
  49. package/types/tests/view.test-d.ts +0 -146
@@ -0,0 +1,2744 @@
1
+ ;(function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined'
3
+ ? factory(exports, require('@ditojs/utils'))
4
+ : typeof define === 'function' && define.amd
5
+ ? define(['exports', '@ditojs/utils'], factory)
6
+ : ((global =
7
+ typeof globalThis !== 'undefined' ? globalThis : global || self),
8
+ factory((global['dito-ui'] = {}), global['@ditojs/utils']))
9
+ })(this, function (exports2, utils) {
10
+ 'use strict'
11
+ const index = ''
12
+ function getAbsoluteBoundingRect(el) {
13
+ const doc = document
14
+ const win = window
15
+ const body = doc.body
16
+ let offsetX =
17
+ win.pageXOffset !== void 0
18
+ ? win.pageXOffset
19
+ : (doc.documentElement || body.parentNode || body).scrollLeft
20
+ let offsetY =
21
+ win.pageYOffset !== void 0
22
+ ? win.pageYOffset
23
+ : (doc.documentElement || body.parentNode || body).scrollTop
24
+ const rect = el.getBoundingClientRect()
25
+ if (el !== body) {
26
+ let parent = el.parentNode
27
+ while (parent !== body) {
28
+ offsetX += parent.scrollLeft
29
+ offsetY += parent.scrollTop
30
+ parent = parent.parentNode
31
+ }
32
+ }
33
+ return {
34
+ bottom: rect.bottom + offsetY,
35
+ height: rect.height,
36
+ left: rect.left + offsetX,
37
+ right: rect.right + offsetX,
38
+ top: rect.top + offsetY,
39
+ width: rect.width
40
+ }
41
+ }
42
+ function copyDate(date, {
43
+ year,
44
+ month,
45
+ day,
46
+ hour,
47
+ minute,
48
+ second,
49
+ millisecond
50
+ } = {}) {
51
+ return new Date(
52
+ utils.pick(year, date && date.getFullYear(), 0),
53
+ utils.pick(month, date && date.getMonth(), 0),
54
+ utils.pick(day, date && date.getDate(), 0),
55
+ utils.pick(hour, date && date.getHours(), 0),
56
+ utils.pick(minute, date && date.getMinutes(), 0),
57
+ utils.pick(second, date && date.getSeconds(), 0),
58
+ utils.pick(millisecond, date && date.getMilliseconds(), 0)
59
+ )
60
+ }
61
+ function convertDate(date) {
62
+ return utils.isDate(date) ? date : date ? new Date(date) : null
63
+ }
64
+ function addEvents(target, events2) {
65
+ for (const type in events2) {
66
+ target.addEventListener(type, events2[type], false)
67
+ }
68
+ return {
69
+ remove() {
70
+ for (const type in events2) {
71
+ target.removeEventListener(type, events2[type], false)
72
+ }
73
+ }
74
+ }
75
+ }
76
+ function getKey(event) {
77
+ return {
78
+ 37: 'left',
79
+ 38: 'up',
80
+ 39: 'right',
81
+ 40: 'down',
82
+ 13: 'enter'
83
+ }[event.keyCode]
84
+ }
85
+ function getKeyNavigation(event) {
86
+ const key = getKey(event)
87
+ return {
88
+ hor: { left: -1, right: 1 }[key] || 0,
89
+ ver: { up: -1, down: 1 }[key] || 0,
90
+ enter: key === 'enter'
91
+ }
92
+ }
93
+ function scrollTo(element, to, duration) {
94
+ const requestAnimationFrame = (
95
+ window.requestAnimationFrame ||
96
+ function () {
97
+ return setTimeout(arguments[0], 10)
98
+ }
99
+ )
100
+ if (duration <= 0) {
101
+ element.scrollTop = to
102
+ } else {
103
+ const difference = to - element.scrollTop
104
+ const perTick = difference / duration * 10
105
+ requestAnimationFrame(() => {
106
+ element.scrollTop = element.scrollTop + perTick
107
+ if (element.scrollTop === to) {
108
+ return
109
+ }
110
+ scrollTo(element, to, duration - 10)
111
+ })
112
+ }
113
+ }
114
+ function setSelection(field, start, end) {
115
+ if (field.createTextRange) {
116
+ const range = field.createTextRange()
117
+ range.collapse(true)
118
+ range.moveStart('character', start)
119
+ range.moveEnd('character', end)
120
+ range.select()
121
+ field.focus()
122
+ } else if (field.setSelectionRange) {
123
+ field.focus()
124
+ field.setSelectionRange(start, end)
125
+ } else if ('selectionStart' in field) {
126
+ field.selectionStart = start
127
+ field.selectionEnd = end
128
+ field.focus()
129
+ }
130
+ }
131
+ const render$8 = function () {
132
+ const _vm = this
133
+ const _h = _vm.$createElement
134
+ const _c = _vm._self._c || _h
135
+ return _c(
136
+ 'div',
137
+ {
138
+ staticClass: 'dito-calendar'
139
+ },
140
+ [
141
+ _c(
142
+ 'div',
143
+ {
144
+ staticClass: 'dito-calendar-popup'
145
+ },
146
+ [
147
+ _c(
148
+ 'div',
149
+ {
150
+ staticClass: 'dito-calendar-inner'
151
+ },
152
+ [
153
+ _vm.currentMode === 'day'
154
+ ? [
155
+ _c(
156
+ 'div',
157
+ {
158
+ staticClass: 'dito-calendar-header'
159
+ },
160
+ [
161
+ _c('a', {
162
+ staticClass:
163
+ 'dito-calendar-step-prev dito-calendar-step-year',
164
+ on: {
165
+ click: function ($event) {
166
+ return _vm.stepYear(-1)
167
+ }
168
+ }
169
+ }),
170
+ _c('a', {
171
+ staticClass:
172
+ 'dito-calendar-step-prev dito-calendar-step-month',
173
+ on: {
174
+ click: function ($event) {
175
+ return _vm.stepMonth(-1)
176
+ }
177
+ }
178
+ }),
179
+ _c('span', [
180
+ _c(
181
+ 'a',
182
+ {
183
+ staticClass: 'dito-calendar-select-year',
184
+ on: {
185
+ click: function ($event) {
186
+ return _vm.setMode('year')
187
+ }
188
+ }
189
+ },
190
+ [
191
+ _vm._v(
192
+ _vm._s(
193
+ _vm.dateToString(_vm.currentValue, {
194
+ year: 1
195
+ })
196
+ )
197
+ )
198
+ ]
199
+ ),
200
+ _c(
201
+ 'a',
202
+ {
203
+ staticClass: 'dito-calendar-select-month',
204
+ on: {
205
+ click: function ($event) {
206
+ return _vm.setMode('month')
207
+ }
208
+ }
209
+ },
210
+ [
211
+ _vm._v(
212
+ _vm._s(
213
+ _vm.dateToString(_vm.currentValue, {
214
+ month: 1
215
+ })
216
+ )
217
+ )
218
+ ]
219
+ )
220
+ ]),
221
+ _c('a', {
222
+ staticClass:
223
+ 'dito-calendar-step-next dito-calendar-step-month',
224
+ on: {
225
+ click: function ($event) {
226
+ return _vm.stepMonth(1)
227
+ }
228
+ }
229
+ }),
230
+ _c('a', {
231
+ staticClass:
232
+ 'dito-calendar-step-next dito-calendar-step-year',
233
+ on: {
234
+ click: function ($event) {
235
+ return _vm.stepYear(1)
236
+ }
237
+ }
238
+ })
239
+ ]
240
+ ),
241
+ _c(
242
+ 'div',
243
+ {
244
+ staticClass: 'dito-calendar-body'
245
+ },
246
+ [
247
+ _c(
248
+ 'div',
249
+ {
250
+ staticClass: 'dito-calendar-weekdays'
251
+ },
252
+ _vm._l(_vm.weekdayNames, function (weekday) {
253
+ return _c('span', [_vm._v(_vm._s(weekday.short))])
254
+ }),
255
+ 0
256
+ ),
257
+ _c(
258
+ 'div',
259
+ {
260
+ staticClass: 'dito-calendar-dates'
261
+ },
262
+ _vm._l(_vm.dateRange, function (date) {
263
+ return _c(
264
+ 'span',
265
+ {
266
+ class: (
267
+ date.state && `dito-calendar-item-${
268
+ date.state
269
+ }`
270
+ ),
271
+ on: {
272
+ click: function ($event) {
273
+ return _vm.selectDate(
274
+ date.date,
275
+ date.state,
276
+ true
277
+ )
278
+ }
279
+ }
280
+ },
281
+ [_vm._v(_vm._s(date.text))]
282
+ )
283
+ }),
284
+ 0
285
+ )
286
+ ]
287
+ ),
288
+ _c(
289
+ 'div',
290
+ {
291
+ staticClass: 'dito-calendar-footer'
292
+ },
293
+ [
294
+ _c('a', {
295
+ staticClass: 'dito-calendar-select-today',
296
+ attrs: {
297
+ role: 'button',
298
+ title: _vm.dateToString(new Date(), {
299
+ year: 1,
300
+ month: 1,
301
+ day: 1
302
+ })
303
+ },
304
+ on: {
305
+ click: function ($event) {
306
+ _vm.selectDate(new Date())
307
+ }
308
+ }
309
+ })
310
+ ]
311
+ )
312
+ ]
313
+ : _vm.currentMode === 'month'
314
+ ? [
315
+ _c(
316
+ 'div',
317
+ {
318
+ staticClass: 'dito-calendar-header'
319
+ },
320
+ [
321
+ _c('a', {
322
+ staticClass: 'dito-calendar-step-prev',
323
+ on: {
324
+ click: function ($event) {
325
+ return _vm.stepYear(-1)
326
+ }
327
+ }
328
+ }),
329
+ _c('span', [
330
+ _c(
331
+ 'a',
332
+ {
333
+ staticClass: 'dito-calendar-select-year',
334
+ on: {
335
+ click: function ($event) {
336
+ return _vm.setMode('year')
337
+ }
338
+ }
339
+ },
340
+ [
341
+ _vm._v(
342
+ _vm._s(
343
+ _vm.dateToString(_vm.currentValue, {
344
+ year: 1
345
+ })
346
+ )
347
+ )
348
+ ]
349
+ )
350
+ ]),
351
+ _c('a', {
352
+ staticClass: 'dito-calendar-step-next',
353
+ on: {
354
+ click: function ($event) {
355
+ return _vm.stepYear(1)
356
+ }
357
+ }
358
+ })
359
+ ]
360
+ ),
361
+ _c(
362
+ 'div',
363
+ {
364
+ staticClass: 'dito-calendar-body'
365
+ },
366
+ [
367
+ _c(
368
+ 'div',
369
+ {
370
+ staticClass: 'dito-calendar-months'
371
+ },
372
+ _vm._l(_vm.monthNames, function (month, index2) {
373
+ return _c(
374
+ 'span',
375
+ {
376
+ class: _vm.getMonthClass(index2),
377
+ on: {
378
+ click: function ($event) {
379
+ return _vm.selectMonth(index2)
380
+ }
381
+ }
382
+ },
383
+ [_vm._v(_vm._s(month.short))]
384
+ )
385
+ }),
386
+ 0
387
+ )
388
+ ]
389
+ )
390
+ ]
391
+ : _vm.currentMode === 'year'
392
+ ? [
393
+ _c(
394
+ 'div',
395
+ {
396
+ staticClass: 'dito-calendar-header'
397
+ },
398
+ [
399
+ _c('a', {
400
+ staticClass: 'dito-calendar-step-prev',
401
+ on: {
402
+ click: function ($event) {
403
+ return _vm.stepDecade(-1)
404
+ }
405
+ }
406
+ }),
407
+ _c('span', [
408
+ _vm._v(
409
+ _vm._s(_vm.decadeToString(_vm.currentValue))
410
+ )
411
+ ]),
412
+ _c('a', {
413
+ staticClass: 'dito-calendar-step-next',
414
+ on: {
415
+ click: function ($event) {
416
+ return _vm.stepDecade(1)
417
+ }
418
+ }
419
+ })
420
+ ]
421
+ ),
422
+ _c(
423
+ 'div',
424
+ {
425
+ staticClass: 'dito-calendar-body'
426
+ },
427
+ [
428
+ _c(
429
+ 'div',
430
+ {
431
+ staticClass: 'dito-calendar-years'
432
+ },
433
+ _vm._l(_vm.yearRange, function (year) {
434
+ return _c(
435
+ 'span',
436
+ {
437
+ class: _vm.getYearClass(year),
438
+ on: {
439
+ click: function ($event) {
440
+ return _vm.selectYear(year)
441
+ }
442
+ }
443
+ },
444
+ [_vm._v(_vm._s(year))]
445
+ )
446
+ }),
447
+ 0
448
+ )
449
+ ]
450
+ )
451
+ ]
452
+ : _vm._e()
453
+ ],
454
+ 2
455
+ )
456
+ ]
457
+ )
458
+ ]
459
+ )
460
+ }
461
+ const staticRenderFns$8 = []
462
+ render$8._withStripped = true
463
+ const Calendar_vue_vue_type_style_index_0_lang = ''
464
+ function normalizeComponent(
465
+ scriptExports,
466
+ render2,
467
+ staticRenderFns2,
468
+ functionalTemplate,
469
+ injectStyles,
470
+ scopeId,
471
+ moduleIdentifier,
472
+ shadowMode
473
+ ) {
474
+ const options =
475
+ typeof scriptExports === 'function'
476
+ ? scriptExports.options
477
+ : scriptExports
478
+ if (render2) {
479
+ options.render = render2
480
+ options.staticRenderFns = staticRenderFns2
481
+ options._compiled = true
482
+ }
483
+ if (functionalTemplate) {
484
+ options.functional = true
485
+ }
486
+ if (scopeId) {
487
+ options._scopeId = 'data-v-' + scopeId
488
+ }
489
+ let hook
490
+ if (moduleIdentifier) {
491
+ hook = function (context) {
492
+ context = (
493
+ context ||
494
+ this.$vnode && this.$vnode.ssrContext ||
495
+ this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext
496
+ )
497
+ if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
498
+ context = __VUE_SSR_CONTEXT__
499
+ }
500
+ if (injectStyles) {
501
+ injectStyles.call(this, context)
502
+ }
503
+ if (context && context._registeredComponents) {
504
+ context._registeredComponents.add(moduleIdentifier)
505
+ }
506
+ }
507
+ options._ssrRegister = hook
508
+ } else if (injectStyles) {
509
+ hook = shadowMode
510
+ ? function () {
511
+ injectStyles.call(
512
+ this,
513
+ (options.functional ? this.parent : this).$root.$options
514
+ .shadowRoot
515
+ )
516
+ }
517
+ : injectStyles
518
+ }
519
+ if (hook) {
520
+ if (options.functional) {
521
+ options._injectStyles = hook
522
+ const originalRender = options.render
523
+ options.render = function renderWithStyleInjection(h, context) {
524
+ hook.call(context)
525
+ return originalRender(h, context)
526
+ }
527
+ } else {
528
+ const existing = options.beforeCreate
529
+ options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
530
+ }
531
+ }
532
+ return {
533
+ exports: scriptExports,
534
+ options
535
+ }
536
+ }
537
+ const __vue2_script$9 = {
538
+ props: {
539
+ value: { type: Date, default: null },
540
+ locale: { type: String, default: 'en-US' },
541
+ disabledDate: { type: Function, default: () => false },
542
+ mode: { type: String, default: 'day' }
543
+ },
544
+ data() {
545
+ const { weekdayNames, monthNames } = getLocaleNames(this.locale)
546
+ return {
547
+ weekdayNames,
548
+ monthNames,
549
+ dateRange: [],
550
+ yearRange: [],
551
+ currentValue: (
552
+ this.value || copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
553
+ ),
554
+ currentMode: this.mode
555
+ }
556
+ },
557
+ watch: {
558
+ currentValue: 'updateDateRange',
559
+ disabledDate: 'updateDateRange',
560
+ value(newVal, oldVal) {
561
+ if (+newVal !== +oldVal) {
562
+ this.currentValue = newVal || new Date()
563
+ }
564
+ },
565
+ mode(mode) {
566
+ this.currentMode = mode
567
+ }
568
+ },
569
+ mounted() {
570
+ this.updateDateRange()
571
+ },
572
+ methods: {
573
+ getMonthClass(month) {
574
+ return {
575
+ 'dito-calendar-item-active': (
576
+ this.value &&
577
+ month === this.value.getMonth() &&
578
+ this.currentValue.getFullYear() === this.value.getFullYear()
579
+ ),
580
+ 'dito-calendar-item-current': month === this.currentValue.getMonth()
581
+ }
582
+ },
583
+ getYearClass(year) {
584
+ return {
585
+ 'dito-calendar-item-active': (
586
+ this.value && year === this.value.getFullYear()
587
+ ),
588
+ 'dito-calendar-item-current': year === this.currentValue.getFullYear()
589
+ }
590
+ },
591
+ setDate(overrides) {
592
+ this.currentValue = copyDate(this.currentValue, overrides)
593
+ },
594
+ stepDecade(step) {
595
+ this.setDate({
596
+ year: this.currentValue.getFullYear() + step * 10
597
+ })
598
+ },
599
+ setMode(mode) {
600
+ this.currentMode = mode
601
+ },
602
+ stepMonth(step) {
603
+ const { currentValue } = this
604
+ const { year, month } = this.getYearMonth(
605
+ currentValue.getFullYear(),
606
+ currentValue.getMonth() + step
607
+ )
608
+ this.setDate({
609
+ month,
610
+ day: Math.min(
611
+ this.getDayCount(year, month),
612
+ this.currentValue.getDate()
613
+ )
614
+ })
615
+ },
616
+ stepYear(step) {
617
+ this.setDate({
618
+ year: this.currentValue.getFullYear() + step
619
+ })
620
+ },
621
+ selectDate(date, state, copy = false) {
622
+ if (state !== 'disabled') {
623
+ if (copy) {
624
+ this.setDate({
625
+ year: date.getFullYear(),
626
+ month: date.getMonth(),
627
+ day: date.getDate()
628
+ })
629
+ } else {
630
+ this.currentValue = date
631
+ }
632
+ this.$emit('input', this.currentValue)
633
+ }
634
+ },
635
+ selectMonth(month) {
636
+ this.setMode('day')
637
+ this.setDate({ month })
638
+ },
639
+ selectYear(year) {
640
+ this.setMode('month')
641
+ this.setDate({ year })
642
+ },
643
+ getYearMonth(year, month) {
644
+ if (month > 11) {
645
+ year++
646
+ month = 0
647
+ } else if (month < 0) {
648
+ year--
649
+ month = 11
650
+ }
651
+ return { year, month }
652
+ },
653
+ dateToString(date, { year, month, day }) {
654
+ return date.toLocaleString(this.locale, {
655
+ year: year && 'numeric',
656
+ month: month && 'long',
657
+ day: day && 'numeric'
658
+ })
659
+ },
660
+ decadeToString(date) {
661
+ const year = this.getFirstYearOfDecade(date.getFullYear())
662
+ return `${year} \u2013 ${year + 9}`
663
+ },
664
+ getDayCount(year, month) {
665
+ const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
666
+ return month === 1 && (!(year % 400) || !(year % 4) && year % 100)
667
+ ? 29
668
+ : daysInMonth[month]
669
+ },
670
+ getFirstYearOfDecade(year) {
671
+ const yearStr = year.toString()
672
+ return +`${yearStr.slice(0, -1)}0`
673
+ },
674
+ navigate({ hor, ver, enter }) {
675
+ const { currentMode, currentValue } = this
676
+ if (hor || ver) {
677
+ switch (currentMode) {
678
+ case 'day':
679
+ this.setDate({
680
+ day: currentValue.getDate() + hor + ver * 7
681
+ })
682
+ break
683
+ case 'month':
684
+ this.setDate({
685
+ month: currentValue.getMonth() + hor + ver * 6
686
+ })
687
+ break
688
+ case 'year':
689
+ this.setDate({
690
+ year: currentValue.getFullYear() + hor + ver * 5
691
+ })
692
+ break
693
+ }
694
+ return true
695
+ } else if (enter) {
696
+ switch (currentMode) {
697
+ case 'day':
698
+ this.selectDate(currentValue)
699
+ break
700
+ case 'month':
701
+ this.setMode('day')
702
+ break
703
+ case 'year':
704
+ this.setMode('month')
705
+ break
706
+ }
707
+ return true
708
+ }
709
+ },
710
+ updateDateRange() {
711
+ this.dateRange = []
712
+ this.yearRange = []
713
+ const { currentValue } = this
714
+ const year = currentValue.getFullYear()
715
+ const month = currentValue.getMonth()
716
+ const startYear = this.getFirstYearOfDecade(year)
717
+ for (let i = 0; i < 10; i++) {
718
+ this.yearRange.push(startYear + i)
719
+ }
720
+ const currMonthFirstDay = new Date(year, month, 1)
721
+ let firstDayWeek = currMonthFirstDay.getDay() + 1
722
+ if (firstDayWeek === 0) {
723
+ firstDayWeek = 7
724
+ }
725
+ const dayCount = this.getDayCount(year, month)
726
+ if (firstDayWeek > 1) {
727
+ const prevMonth = this.getYearMonth(year, month - 1)
728
+ const prevMonthDayCount = this.getDayCount(
729
+ prevMonth.year,
730
+ prevMonth.month
731
+ )
732
+ for (let i = 1; i < firstDayWeek; i++) {
733
+ const day = prevMonthDayCount - firstDayWeek + i + 1
734
+ const date = new Date(prevMonth.year, prevMonth.month, day)
735
+ this.dateRange.push({
736
+ text: day,
737
+ date,
738
+ state: this.disabledDate(date) ? 'disabled' : 'gray'
739
+ })
740
+ }
741
+ }
742
+ const today = new Date()
743
+ for (let i = 1; i <= dayCount; i++) {
744
+ const date = new Date(year, month, i)
745
+ const isDay = date2 => (
746
+ date2 &&
747
+ date2.getDate() === i &&
748
+ date2.getFullYear() === year &&
749
+ date2.getMonth() === month
750
+ )
751
+ const state = isDay(this.value)
752
+ ? 'active'
753
+ : isDay(today)
754
+ ? 'today'
755
+ : this.disabledDate(date)
756
+ ? 'disabled'
757
+ : isDay(currentValue)
758
+ ? 'current'
759
+ : null
760
+ this.dateRange.push({
761
+ text: i,
762
+ date,
763
+ state
764
+ })
765
+ }
766
+ const nextMonthNeed = 42 - this.dateRange.length
767
+ if (nextMonthNeed > 0) {
768
+ const nextMonth = this.getYearMonth(year, month + 1)
769
+ for (let i = 1; i <= nextMonthNeed; i++) {
770
+ const date = new Date(nextMonth.year, nextMonth.month, i)
771
+ const state = this.disabledDate(date) ? 'disabled' : 'gray'
772
+ this.dateRange.push({
773
+ text: i,
774
+ date,
775
+ state
776
+ })
777
+ }
778
+ }
779
+ }
780
+ }
781
+ }
782
+ const localeNames = {}
783
+ function getLocaleNames(locale) {
784
+ let names = localeNames[locale]
785
+ if (!names) {
786
+ const weekdayNames = []
787
+ for (let i = 0; i < 7; i++) {
788
+ const date = new Date(0, 0, i)
789
+ weekdayNames.push({
790
+ long: date.toLocaleString(locale, { weekday: 'long' }),
791
+ short: date.toLocaleString(locale, { weekday: 'short' })
792
+ })
793
+ }
794
+ const monthNames = []
795
+ for (let i = 1; i <= 12; i++) {
796
+ const date = new Date(0, i, 0)
797
+ monthNames.push({
798
+ long: date.toLocaleString(locale, { month: 'long' }),
799
+ short: date.toLocaleString(locale, { month: 'short' })
800
+ })
801
+ }
802
+ names = localeNames[locale] = {
803
+ weekdayNames,
804
+ monthNames
805
+ }
806
+ }
807
+ return names
808
+ }
809
+ const __cssModules$9 = {}
810
+ const __component__$9 = /* @__PURE__ */ normalizeComponent(
811
+ __vue2_script$9,
812
+ render$8,
813
+ staticRenderFns$8,
814
+ false,
815
+ __vue2_injectStyles$9,
816
+ null,
817
+ null,
818
+ null
819
+ )
820
+ function __vue2_injectStyles$9(context) {
821
+ for (const o in __cssModules$9) {
822
+ this[o] = __cssModules$9[o]
823
+ }
824
+ }
825
+ __component__$9.options.__file = 'src/components/Calendar.vue'
826
+ const Calendar = /* @__PURE__ */ (function () {
827
+ return __component__$9.exports
828
+ })()
829
+ const render$7 = function () {
830
+ const _vm = this
831
+ const _h = _vm.$createElement
832
+ const _c = _vm._self._c || _h
833
+ return _c(
834
+ 'div',
835
+ {
836
+ staticClass: 'dito-trigger-container'
837
+ },
838
+ [
839
+ _vm.alwaysShow
840
+ ? _c(
841
+ 'div',
842
+ {
843
+ ref: 'trigger',
844
+ staticClass: 'dito-trigger',
845
+ class: _vm.triggerClass
846
+ },
847
+ [_vm._t('trigger')],
848
+ 2
849
+ )
850
+ : _vm.trigger === 'click'
851
+ ? _c(
852
+ 'div',
853
+ {
854
+ ref: 'trigger',
855
+ staticClass: 'dito-trigger',
856
+ class: _vm.triggerClass,
857
+ on: {
858
+ click: _vm.onClick
859
+ }
860
+ },
861
+ [_vm._t('trigger')],
862
+ 2
863
+ )
864
+ : _vm.trigger === 'hover'
865
+ ? _c(
866
+ 'div',
867
+ {
868
+ ref: 'trigger',
869
+ staticClass: 'dito-trigger',
870
+ class: _vm.triggerClass,
871
+ on: {
872
+ mouseenter: function ($event) {
873
+ return _vm.onHover(true)
874
+ },
875
+ mouseleave: function ($event) {
876
+ return _vm.onHover(false)
877
+ }
878
+ }
879
+ },
880
+ [_vm._t('trigger')],
881
+ 2
882
+ )
883
+ : _vm.trigger === 'focus' || _vm.trigger === 'always'
884
+ ? _c(
885
+ 'div',
886
+ {
887
+ ref: 'trigger',
888
+ staticClass: 'dito-trigger',
889
+ class: _vm.triggerClass
890
+ },
891
+ [_vm._t('trigger')],
892
+ 2
893
+ )
894
+ : _vm._e(),
895
+ _c(
896
+ 'transition',
897
+ {
898
+ attrs: {
899
+ name: _vm.transition
900
+ }
901
+ },
902
+ [
903
+ _vm.trigger === 'hover'
904
+ ? _c(
905
+ 'div',
906
+ {
907
+ directives: [
908
+ {
909
+ name: 'show',
910
+ rawName: 'v-show',
911
+ value: _vm.showPopup,
912
+ expression: 'showPopup'
913
+ }
914
+ ],
915
+ ref: 'popup',
916
+ staticClass: 'dito-popup',
917
+ class: _vm.popupClass,
918
+ style: _vm.popupStyle,
919
+ on: {
920
+ mouseenter: function ($event) {
921
+ return _vm.onHover(true)
922
+ },
923
+ mouseleave: function ($event) {
924
+ return _vm.onHover(false)
925
+ }
926
+ }
927
+ },
928
+ [_vm.showPopup ? _vm._t('popup') : _vm._e()],
929
+ 2
930
+ )
931
+ : _c(
932
+ 'div',
933
+ {
934
+ directives: [
935
+ {
936
+ name: 'show',
937
+ rawName: 'v-show',
938
+ value: _vm.showPopup,
939
+ expression: 'showPopup'
940
+ }
941
+ ],
942
+ ref: 'popup',
943
+ staticClass: 'dito-popup',
944
+ class: _vm.popupClass,
945
+ style: _vm.popupStyle
946
+ },
947
+ [_vm.showPopup ? _vm._t('popup') : _vm._e()],
948
+ 2
949
+ )
950
+ ]
951
+ )
952
+ ],
953
+ 1
954
+ )
955
+ }
956
+ const staticRenderFns$7 = []
957
+ render$7._withStripped = true
958
+ const Trigger_vue_vue_type_style_index_0_lang = ''
959
+ const __vue2_script$8 = {
960
+ props: {
961
+ trigger: { type: String, default: 'click' },
962
+ transition: { type: String, default: 'slide' },
963
+ placement: { type: String, default: 'bottom' },
964
+ show: { type: Boolean, default: false },
965
+ disabled: { type: Boolean, default: false },
966
+ target: { type: [String, HTMLElement], default: null },
967
+ customClass: { type: String, default: null },
968
+ zIndex: { type: Number, default: 0 },
969
+ keepInView: { type: Boolean, default: true },
970
+ hideWhenClickOutside: { type: Boolean, default: true },
971
+ alwaysShow: { type: Boolean, default: false },
972
+ cover: { type: Boolean, default: false },
973
+ hideDelay: { type: Number, default: 0 }
974
+ },
975
+ data() {
976
+ return {
977
+ showPopup: this.show,
978
+ popupPlacement: this.placement
979
+ }
980
+ },
981
+ computed: {
982
+ triggerClass() {
983
+ return {
984
+ 'dito-trigger-disabled': this.disabled
985
+ }
986
+ },
987
+ popupClass() {
988
+ const classes = {
989
+ [`dito-popup-${utils.hyphenate(this.placement)}`]: true
990
+ }
991
+ if (this.customClass) {
992
+ classes[this.customClass] = true
993
+ }
994
+ return classes
995
+ },
996
+ popupStyle() {
997
+ return this.zIndex ? `z-index: ${this.zIndex}` : ''
998
+ }
999
+ },
1000
+ watch: {
1001
+ show(show) {
1002
+ this.showPopup = show || this.alwaysShow
1003
+ },
1004
+ showPopup(newVal, oldVal) {
1005
+ if (!newVal !== !oldVal) {
1006
+ this.$emit('update:show', newVal)
1007
+ if (newVal) {
1008
+ this.$nextTick(() => this.updatePosition())
1009
+ }
1010
+ }
1011
+ }
1012
+ },
1013
+ mounted() {
1014
+ const { trigger, popup } = this.$refs
1015
+ if (this.trigger === 'focus') {
1016
+ const target = trigger.querySelector('input, textarea')
1017
+ if (target) {
1018
+ this.focusEvents = addEvents(target, {
1019
+ focus: () => {
1020
+ this.showPopup = true
1021
+ },
1022
+ blur: () => {
1023
+ this.showPopup = false
1024
+ }
1025
+ })
1026
+ }
1027
+ }
1028
+ if (this.hideWhenClickOutside && !this.alwaysShow) {
1029
+ this.closeEvents = addEvents(window, {
1030
+ mouseup: event => {
1031
+ if (
1032
+ this.showPopup &&
1033
+ !popup.contains(event.target) &&
1034
+ !trigger.contains(event.target)
1035
+ ) {
1036
+ this.showPopup = false
1037
+ }
1038
+ },
1039
+ blur: () => {
1040
+ this.showPopup = false
1041
+ }
1042
+ })
1043
+ }
1044
+ if (this.alwaysShow) {
1045
+ this.showPopup = true
1046
+ }
1047
+ },
1048
+ created() {
1049
+ this.showPopup = this.show
1050
+ },
1051
+ beforeDestroy() {
1052
+ let _a, _b
1053
+ ;(_a = this.focusEvents) == null ? void 0 : _a.remove()
1054
+ ;(_b = this.closeEvents) == null ? void 0 : _b.remove()
1055
+ this.mouseLeaveTimer = null
1056
+ },
1057
+ methods: {
1058
+ updatePosition() {
1059
+ const { trigger, popup } = this.$refs
1060
+ if (this.show && popup.offsetWidth === 0) {
1061
+ setTimeout(() => this.updatePosition(), 0)
1062
+ return
1063
+ }
1064
+ const target = utils.isString(this.target)
1065
+ ? this.$refs[this.target]
1066
+ : this.target
1067
+ if (target) {
1068
+ const el = target === popup ? trigger : popup.firstChild
1069
+ el.style.width = getComputedStyle(target).width
1070
+ }
1071
+ const bounds = (target || trigger).getBoundingClientRect()
1072
+ const triggerLeft = bounds.left + window.scrollX
1073
+ const triggerTop = bounds.top + window.scrollY
1074
+ const triggerWidth = bounds.width
1075
+ const triggerHeight = bounds.height
1076
+ const popupWidth = popup.offsetWidth
1077
+ const popupHeight = popup.offsetHeight
1078
+ let [part1, part2] = this.popupPlacement.split('-') || []
1079
+ if (this.keepInView) {
1080
+ const winWidth = window.innerWidth
1081
+ const winHeight = window.innerHeight
1082
+ if (part1 === 'top') {
1083
+ if (triggerTop < popupHeight) {
1084
+ part1 = 'bottom'
1085
+ }
1086
+ } else if (part1 === 'bottom') {
1087
+ if (winHeight - triggerTop - triggerHeight < popupHeight) {
1088
+ part1 = 'top'
1089
+ }
1090
+ } else if (part1 === 'left') {
1091
+ if (triggerLeft < popupWidth) {
1092
+ part1 = 'right'
1093
+ }
1094
+ } else if (part1 === 'right') {
1095
+ if (winWidth - triggerLeft - triggerWidth < popupWidth) {
1096
+ part1 = 'left'
1097
+ }
1098
+ }
1099
+ if (part2 === 'top') {
1100
+ if (winHeight - triggerTop < popupHeight) {
1101
+ part2 = 'bottom'
1102
+ }
1103
+ } else if (part2 === 'bottom') {
1104
+ if (triggerTop + triggerHeight < popupHeight) {
1105
+ part2 = 'top'
1106
+ }
1107
+ } else if (part2 === 'left') {
1108
+ if (winWidth - triggerLeft < popupWidth) {
1109
+ part2 = 'right'
1110
+ }
1111
+ } else if (part2 === 'right') {
1112
+ if (triggerLeft + triggerWidth < popupWidth) {
1113
+ part2 = 'left'
1114
+ }
1115
+ }
1116
+ }
1117
+ let left = 0
1118
+ let top = 0
1119
+ switch (part1) {
1120
+ case 'top':
1121
+ top -= popupHeight
1122
+ break
1123
+ case 'left':
1124
+ left -= popupWidth
1125
+ break
1126
+ case 'right':
1127
+ left += triggerWidth
1128
+ break
1129
+ case 'bottom':
1130
+ top += triggerHeight
1131
+ break
1132
+ }
1133
+ switch (part2) {
1134
+ case 'right':
1135
+ left -= popupWidth - triggerWidth
1136
+ break
1137
+ case 'bottom':
1138
+ top -= popupHeight - triggerHeight
1139
+ break
1140
+ }
1141
+ if (this.cover) {
1142
+ if (part1 === 'top') {
1143
+ top += triggerHeight
1144
+ } else if (part1 === 'bottom') {
1145
+ top -= triggerHeight
1146
+ }
1147
+ }
1148
+ if (target && target !== trigger) {
1149
+ const triggerBounds = trigger.getBoundingClientRect()
1150
+ left += triggerLeft - triggerBounds.left
1151
+ top += triggerTop - triggerBounds.top
1152
+ }
1153
+ popup.style.left = `${left}px`
1154
+ popup.style.top = `${top}px`
1155
+ this.$emit('update-position', {
1156
+ trigger,
1157
+ popup,
1158
+ placement: this.popupPlacement
1159
+ })
1160
+ },
1161
+ onClick() {
1162
+ if (!this.disabled) {
1163
+ this.showPopup = !this.showPopup
1164
+ }
1165
+ },
1166
+ onHover(enter) {
1167
+ if (!this.disabled) {
1168
+ clearTimeout(this.mouseLeaveTimer)
1169
+ if (enter) {
1170
+ this.showPopup = true
1171
+ } else {
1172
+ if (this.hideDelay) {
1173
+ this.mouseLeaveTimer = setTimeout(() => {
1174
+ this.showPopup = false
1175
+ }, this.hideDelay)
1176
+ } else {
1177
+ this.showPopup = false
1178
+ }
1179
+ }
1180
+ }
1181
+ }
1182
+ }
1183
+ }
1184
+ const __cssModules$8 = {}
1185
+ const __component__$8 = /* @__PURE__ */ normalizeComponent(
1186
+ __vue2_script$8,
1187
+ render$7,
1188
+ staticRenderFns$7,
1189
+ false,
1190
+ __vue2_injectStyles$8,
1191
+ null,
1192
+ null,
1193
+ null
1194
+ )
1195
+ function __vue2_injectStyles$8(context) {
1196
+ for (const o in __cssModules$8) {
1197
+ this[o] = __cssModules$8[o]
1198
+ }
1199
+ }
1200
+ __component__$8.options.__file = 'src/components/Trigger.vue'
1201
+ const Trigger = /* @__PURE__ */ (function () {
1202
+ return __component__$8.exports
1203
+ })()
1204
+ const render$6 = function () {
1205
+ const _vm = this
1206
+ const _h = _vm.$createElement
1207
+ const _c = _vm._self._c || _h
1208
+ return _c(
1209
+ 'div',
1210
+ {
1211
+ staticClass: 'dito-input'
1212
+ },
1213
+ [
1214
+ _vm.attributes.type === 'checkbox'
1215
+ ? _c(
1216
+ 'input',
1217
+ _vm._g(
1218
+ _vm._b(
1219
+ {
1220
+ directives: [
1221
+ {
1222
+ name: 'model',
1223
+ rawName: 'v-model',
1224
+ value: _vm.currentValue,
1225
+ expression: 'currentValue'
1226
+ }
1227
+ ],
1228
+ ref: 'input',
1229
+ attrs: {
1230
+ 'aria-label': _vm.title,
1231
+ 'type': 'checkbox'
1232
+ },
1233
+ domProps: {
1234
+ checked: Array.isArray(_vm.currentValue)
1235
+ ? _vm._i(_vm.currentValue, null) > -1
1236
+ : _vm.currentValue
1237
+ },
1238
+ on: {
1239
+ change: function ($event) {
1240
+ const $$a = _vm.currentValue
1241
+ const $$el = $event.target
1242
+ const $$c = !!$$el.checked
1243
+ if (Array.isArray($$a)) {
1244
+ const $$v = null
1245
+ const $$i = _vm._i($$a, $$v)
1246
+ if ($$el.checked) {
1247
+ $$i < 0 && (_vm.currentValue = $$a.concat([$$v]))
1248
+ } else {
1249
+ $$i > -1 &&
1250
+ (_vm.currentValue = $$a
1251
+ .slice(0, $$i)
1252
+ .concat($$a.slice($$i + 1)))
1253
+ }
1254
+ } else {
1255
+ _vm.currentValue = $$c
1256
+ }
1257
+ }
1258
+ }
1259
+ },
1260
+ 'input',
1261
+ _vm.attributes,
1262
+ false
1263
+ ),
1264
+ _vm.listeners
1265
+ )
1266
+ )
1267
+ : _vm.attributes.type === 'radio'
1268
+ ? _c(
1269
+ 'input',
1270
+ _vm._g(
1271
+ _vm._b(
1272
+ {
1273
+ directives: [
1274
+ {
1275
+ name: 'model',
1276
+ rawName: 'v-model',
1277
+ value: _vm.currentValue,
1278
+ expression: 'currentValue'
1279
+ }
1280
+ ],
1281
+ ref: 'input',
1282
+ attrs: {
1283
+ 'aria-label': _vm.title,
1284
+ 'type': 'radio'
1285
+ },
1286
+ domProps: {
1287
+ checked: _vm._q(_vm.currentValue, null)
1288
+ },
1289
+ on: {
1290
+ change: function ($event) {
1291
+ _vm.currentValue = null
1292
+ }
1293
+ }
1294
+ },
1295
+ 'input',
1296
+ _vm.attributes,
1297
+ false
1298
+ ),
1299
+ _vm.listeners
1300
+ )
1301
+ )
1302
+ : _c(
1303
+ 'input',
1304
+ _vm._g(
1305
+ _vm._b(
1306
+ {
1307
+ directives: [
1308
+ {
1309
+ name: 'model',
1310
+ rawName: 'v-model',
1311
+ value: _vm.currentValue,
1312
+ expression: 'currentValue'
1313
+ }
1314
+ ],
1315
+ ref: 'input',
1316
+ attrs: {
1317
+ 'aria-label': _vm.title,
1318
+ 'type': _vm.attributes.type
1319
+ },
1320
+ domProps: {
1321
+ value: _vm.currentValue
1322
+ },
1323
+ on: {
1324
+ input: function ($event) {
1325
+ if ($event.target.composing) {
1326
+ return
1327
+ }
1328
+ _vm.currentValue = $event.target.value
1329
+ }
1330
+ }
1331
+ },
1332
+ 'input',
1333
+ _vm.attributes,
1334
+ false
1335
+ ),
1336
+ _vm.listeners
1337
+ )
1338
+ )
1339
+ ]
1340
+ )
1341
+ }
1342
+ const staticRenderFns$6 = []
1343
+ render$6._withStripped = true
1344
+ const InputField_vue_vue_type_style_index_0_lang = ''
1345
+ const __vue2_script$7 = {
1346
+ props: {
1347
+ type: { type: String, default: 'text' },
1348
+ value: { type: [String, Number], default: null },
1349
+ id: { type: String, default: null },
1350
+ name: { type: String, default: null },
1351
+ title: { type: String, default: null },
1352
+ disabled: { type: Boolean, default: false },
1353
+ readonly: { type: Boolean, default: false },
1354
+ placeholder: { type: String, default: null },
1355
+ autocomplete: { type: String, default: 'off' }
1356
+ },
1357
+ data() {
1358
+ return {
1359
+ currentValue: this.value,
1360
+ hovering: false,
1361
+ focused: false
1362
+ }
1363
+ },
1364
+ computed: {
1365
+ attributes() {
1366
+ const {
1367
+ id,
1368
+ name,
1369
+ type,
1370
+ size,
1371
+ title,
1372
+ disabled,
1373
+ readonly,
1374
+ placeholder,
1375
+ autocomplete,
1376
+ $attrs
1377
+ } = this
1378
+ return {
1379
+ id,
1380
+ name,
1381
+ type,
1382
+ size,
1383
+ title,
1384
+ disabled,
1385
+ readonly,
1386
+ placeholder,
1387
+ autocomplete,
1388
+ ...$attrs
1389
+ }
1390
+ },
1391
+ listeners() {
1392
+ const { input, ...listeners } = this.$listeners
1393
+ return listeners
1394
+ },
1395
+ size() {
1396
+ const { size, min, max } = this.$attrs
1397
+ const getLength = value => (value != null ? `${value}`.length : 0)
1398
+ return size || getLength(min) || getLength(max) || void 0
1399
+ }
1400
+ },
1401
+ watch: {
1402
+ value(newVal, oldVal) {
1403
+ if (newVal !== oldVal) {
1404
+ this.currentValue = newVal
1405
+ }
1406
+ },
1407
+ currentValue(newVal) {
1408
+ if (newVal !== this.value) {
1409
+ this.$emit('input', newVal)
1410
+ }
1411
+ }
1412
+ },
1413
+ methods: {
1414
+ focus() {
1415
+ this.$refs.input.focus()
1416
+ },
1417
+ blur() {
1418
+ this.$refs.input.blur()
1419
+ }
1420
+ }
1421
+ }
1422
+ const __cssModules$7 = {}
1423
+ const __component__$7 = /* @__PURE__ */ normalizeComponent(
1424
+ __vue2_script$7,
1425
+ render$6,
1426
+ staticRenderFns$6,
1427
+ false,
1428
+ __vue2_injectStyles$7,
1429
+ null,
1430
+ null,
1431
+ null
1432
+ )
1433
+ function __vue2_injectStyles$7(context) {
1434
+ for (const o in __cssModules$7) {
1435
+ this[o] = __cssModules$7[o]
1436
+ }
1437
+ }
1438
+ __component__$7.options.__file = 'src/components/InputField.vue'
1439
+ const InputField = /* @__PURE__ */ (function () {
1440
+ return __component__$7.exports
1441
+ })()
1442
+ const render$5 = function () {
1443
+ const _vm = this
1444
+ const _h = _vm.$createElement
1445
+ const _c = _vm._self._c || _h
1446
+ return _c(
1447
+ 'trigger',
1448
+ _vm._b(
1449
+ {
1450
+ ref: 'trigger',
1451
+ staticClass: 'dito-date-picker',
1452
+ attrs: {
1453
+ trigger: 'click',
1454
+ show: _vm.showPopup
1455
+ },
1456
+ on: {
1457
+ 'update:show': function ($event) {
1458
+ _vm.showPopup = $event
1459
+ }
1460
+ }
1461
+ },
1462
+ 'trigger',
1463
+ {
1464
+ transition: _vm.transition,
1465
+ placement: _vm.placement,
1466
+ disabled: _vm.disabled,
1467
+ target: _vm.target
1468
+ },
1469
+ false
1470
+ ),
1471
+ [
1472
+ _c(
1473
+ 'input-field',
1474
+ _vm._b(
1475
+ {
1476
+ ref: 'input',
1477
+ staticClass: 'dito-date-picker-input',
1478
+ class: {
1479
+ 'dito-focus': _vm.showPopup
1480
+ },
1481
+ attrs: {
1482
+ slot: 'trigger',
1483
+ type: 'text',
1484
+ value: _vm.currentText,
1485
+ readonly: ''
1486
+ },
1487
+ on: {
1488
+ focus: function ($event) {
1489
+ _vm.inputFocused = true
1490
+ },
1491
+ blur: function ($event) {
1492
+ _vm.inputFocused = false
1493
+ },
1494
+ keydown: _vm.onKeyDown
1495
+ },
1496
+ slot: 'trigger'
1497
+ },
1498
+ 'input-field',
1499
+ {
1500
+ placeholder: _vm.placeholder,
1501
+ disabled: _vm.disabled
1502
+ },
1503
+ false
1504
+ )
1505
+ ),
1506
+ _c(
1507
+ 'calendar',
1508
+ _vm._b(
1509
+ {
1510
+ ref: 'calendar',
1511
+ staticClass: 'dito-date-picker-popup',
1512
+ attrs: {
1513
+ slot: 'popup',
1514
+ value: _vm.currentValue
1515
+ },
1516
+ on: {
1517
+ input: _vm.selectDate
1518
+ },
1519
+ slot: 'popup'
1520
+ },
1521
+ 'calendar',
1522
+ {
1523
+ locale: _vm.locale,
1524
+ disabledDate: _vm.disabledDate
1525
+ },
1526
+ false
1527
+ )
1528
+ )
1529
+ ],
1530
+ 1
1531
+ )
1532
+ }
1533
+ const staticRenderFns$5 = []
1534
+ render$5._withStripped = true
1535
+ const DatePicker_vue_vue_type_style_index_0_lang = ''
1536
+ const __vue2_script$6 = {
1537
+ components: { Trigger, Calendar, InputField },
1538
+ props: {
1539
+ value: { type: Date, default: null },
1540
+ transition: { type: String, default: 'slide' },
1541
+ placement: { type: String, default: 'bottom-left' },
1542
+ placeholder: { type: String, default: null },
1543
+ locale: { type: String, default: 'en-US' },
1544
+ dateFormat: { type: Object, default: () => utils.defaultFormats.date },
1545
+ show: { type: Boolean, default: false },
1546
+ disabled: { type: Boolean, default: false },
1547
+ target: { type: [String, HTMLElement], default: 'trigger' },
1548
+ disabledDate: { type: Function, default: () => false }
1549
+ },
1550
+ data() {
1551
+ return {
1552
+ currentValue: this.value,
1553
+ showPopup: this.show,
1554
+ inputFocused: false,
1555
+ changed: false
1556
+ }
1557
+ },
1558
+ computed: {
1559
+ focused() {
1560
+ return this.inputFocused || this.showPopup
1561
+ },
1562
+ currentText() {
1563
+ return (
1564
+ utils.format(this.currentValue, {
1565
+ locale: this.locale,
1566
+ date: this.dateFormat,
1567
+ time: false
1568
+ }) || ''
1569
+ )
1570
+ }
1571
+ },
1572
+ watch: {
1573
+ value(newVal, oldVal) {
1574
+ if (+newVal !== +oldVal) {
1575
+ this.currentValue = newVal
1576
+ }
1577
+ },
1578
+ currentValue(date) {
1579
+ if (+date !== +this.value) {
1580
+ this.changed = true
1581
+ this.$emit('input', date)
1582
+ }
1583
+ },
1584
+ show(show) {
1585
+ this.showPopup = show
1586
+ },
1587
+ showPopup(newVal, oldVal) {
1588
+ if (!newVal !== !oldVal) {
1589
+ this.$emit('update:show', newVal)
1590
+ }
1591
+ },
1592
+ focused(newVal, oldVal) {
1593
+ if (!newVal !== !oldVal) {
1594
+ this.$emit(newVal ? 'focus' : 'blur')
1595
+ }
1596
+ }
1597
+ },
1598
+ mounted() {
1599
+ this.$on('blur', () => {
1600
+ if (this.changed) {
1601
+ this.changed = false
1602
+ this.$emit('change', this.currentValue)
1603
+ }
1604
+ })
1605
+ },
1606
+ methods: {
1607
+ selectDate(date) {
1608
+ this.currentValue = date
1609
+ this.showPopup = false
1610
+ },
1611
+ onKeyDown(event) {
1612
+ let _a
1613
+ if (
1614
+ (_a = this.$refs.calendar) == null
1615
+ ? void 0
1616
+ : _a.navigate(getKeyNavigation(event))
1617
+ ) {
1618
+ event.preventDefault()
1619
+ }
1620
+ },
1621
+ focus() {
1622
+ this.$refs.input.focus()
1623
+ },
1624
+ blur() {
1625
+ this.$refs.input.blur()
1626
+ }
1627
+ }
1628
+ }
1629
+ const __cssModules$6 = {}
1630
+ const __component__$6 = /* @__PURE__ */ normalizeComponent(
1631
+ __vue2_script$6,
1632
+ render$5,
1633
+ staticRenderFns$5,
1634
+ false,
1635
+ __vue2_injectStyles$6,
1636
+ null,
1637
+ null,
1638
+ null
1639
+ )
1640
+ function __vue2_injectStyles$6(context) {
1641
+ for (const o in __cssModules$6) {
1642
+ this[o] = __cssModules$6[o]
1643
+ }
1644
+ }
1645
+ __component__$6.options.__file = 'src/components/DatePicker.vue'
1646
+ const DatePicker = /* @__PURE__ */ (function () {
1647
+ return __component__$6.exports
1648
+ })()
1649
+ const render$4 = function () {
1650
+ const _vm = this
1651
+ const _h = _vm.$createElement
1652
+ const _c = _vm._self._c || _h
1653
+ return _c(
1654
+ 'trigger',
1655
+ _vm._b(
1656
+ {
1657
+ ref: 'trigger',
1658
+ staticClass: 'dito-time-picker',
1659
+ attrs: {
1660
+ trigger: 'click',
1661
+ show: _vm.showPopup
1662
+ },
1663
+ on: {
1664
+ 'update:show': function ($event) {
1665
+ _vm.showPopup = $event
1666
+ }
1667
+ }
1668
+ },
1669
+ 'trigger',
1670
+ {
1671
+ transition: _vm.transition,
1672
+ placement: _vm.placement,
1673
+ disabled: _vm.disabled,
1674
+ target: _vm.target
1675
+ },
1676
+ false
1677
+ ),
1678
+ [
1679
+ _c(
1680
+ 'input-field',
1681
+ _vm._b(
1682
+ {
1683
+ ref: 'input',
1684
+ staticClass: 'dito-time-picker-input',
1685
+ class: {
1686
+ 'dito-focus': _vm.showPopup
1687
+ },
1688
+ attrs: {
1689
+ slot: 'trigger',
1690
+ type: 'text',
1691
+ value: _vm.currentText,
1692
+ readonly: ''
1693
+ },
1694
+ on: {
1695
+ focus: function ($event) {
1696
+ _vm.inputFocused = true
1697
+ },
1698
+ blur: function ($event) {
1699
+ _vm.inputFocused = false
1700
+ },
1701
+ keydown: _vm.onKeyDown
1702
+ },
1703
+ slot: 'trigger'
1704
+ },
1705
+ 'input-field',
1706
+ {
1707
+ placeholder: _vm.placeholder,
1708
+ disabled: _vm.disabled
1709
+ },
1710
+ false
1711
+ )
1712
+ ),
1713
+ _c(
1714
+ 'div',
1715
+ {
1716
+ staticClass: 'dito-time-picker-popup',
1717
+ attrs: {
1718
+ slot: 'popup'
1719
+ },
1720
+ slot: 'popup'
1721
+ },
1722
+ [
1723
+ _c(
1724
+ 'div',
1725
+ {
1726
+ staticClass: 'dito-time-picker-panel'
1727
+ },
1728
+ [
1729
+ _c(
1730
+ 'ul',
1731
+ {
1732
+ ref: 'hour',
1733
+ staticClass: 'dito-time-picker-hour',
1734
+ on: {
1735
+ mouseover: function ($event) {
1736
+ _vm.selection = 0
1737
+ }
1738
+ }
1739
+ },
1740
+ _vm._l(24, function (index2) {
1741
+ return !_vm.disabledHour(index2 - 1)
1742
+ ? _c(
1743
+ 'li',
1744
+ {
1745
+ class: {
1746
+ selected: _vm.hour === index2 - 1
1747
+ },
1748
+ on: {
1749
+ click: function ($event) {
1750
+ _vm.hour = index2 - 1
1751
+ }
1752
+ }
1753
+ },
1754
+ [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1755
+ )
1756
+ : _vm._e()
1757
+ }),
1758
+ 0
1759
+ )
1760
+ ]
1761
+ ),
1762
+ _c(
1763
+ 'div',
1764
+ {
1765
+ staticClass: 'dito-time-picker-panel'
1766
+ },
1767
+ [
1768
+ _c(
1769
+ 'ul',
1770
+ {
1771
+ ref: 'minute',
1772
+ staticClass: 'dito-time-picker-minute',
1773
+ on: {
1774
+ mouseover: function ($event) {
1775
+ _vm.selection = 1
1776
+ }
1777
+ }
1778
+ },
1779
+ _vm._l(60, function (index2) {
1780
+ return !_vm.disabledMinute(index2 - 1)
1781
+ ? _c(
1782
+ 'li',
1783
+ {
1784
+ class: {
1785
+ selected: _vm.minute === index2 - 1
1786
+ },
1787
+ on: {
1788
+ click: function ($event) {
1789
+ _vm.minute = index2 - 1
1790
+ }
1791
+ }
1792
+ },
1793
+ [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1794
+ )
1795
+ : _vm._e()
1796
+ }),
1797
+ 0
1798
+ )
1799
+ ]
1800
+ ),
1801
+ _c(
1802
+ 'div',
1803
+ {
1804
+ staticClass: 'dito-time-picker-panel'
1805
+ },
1806
+ [
1807
+ _c(
1808
+ 'ul',
1809
+ {
1810
+ ref: 'second',
1811
+ staticClass: 'dito-time-picker-second',
1812
+ on: {
1813
+ mouseover: function ($event) {
1814
+ _vm.selection = 2
1815
+ }
1816
+ }
1817
+ },
1818
+ _vm._l(60, function (index2) {
1819
+ return !_vm.disabledSecond(index2 - 1)
1820
+ ? _c(
1821
+ 'li',
1822
+ {
1823
+ class: {
1824
+ selected: _vm.second === index2 - 1
1825
+ },
1826
+ on: {
1827
+ click: function ($event) {
1828
+ _vm.second = index2 - 1
1829
+ }
1830
+ }
1831
+ },
1832
+ [_vm._v(_vm._s(_vm.leftPad(index2 - 1)))]
1833
+ )
1834
+ : _vm._e()
1835
+ }),
1836
+ 0
1837
+ )
1838
+ ]
1839
+ )
1840
+ ]
1841
+ )
1842
+ ],
1843
+ 1
1844
+ )
1845
+ }
1846
+ const staticRenderFns$4 = []
1847
+ render$4._withStripped = true
1848
+ const TimePicker_vue_vue_type_style_index_0_lang = ''
1849
+ const __vue2_script$5 = {
1850
+ components: { Trigger, InputField },
1851
+ props: {
1852
+ value: { type: Date, default: null },
1853
+ transition: { type: String, default: 'slide' },
1854
+ placement: { type: String, default: 'bottom-left' },
1855
+ placeholder: { type: String, default: null },
1856
+ show: { type: Boolean, default: false },
1857
+ disabled: { type: Boolean, default: false },
1858
+ target: { type: [String, HTMLElement], default: 'trigger' },
1859
+ disabledHour: { type: Function, default: () => false },
1860
+ disabledMinute: { type: Function, default: () => false },
1861
+ disabledSecond: { type: Function, default: () => false }
1862
+ },
1863
+ data() {
1864
+ return {
1865
+ currentValue: this.value,
1866
+ showPopup: this.show,
1867
+ inputFocused: false,
1868
+ selection: 0,
1869
+ changed: false
1870
+ }
1871
+ },
1872
+ computed: {
1873
+ focused() {
1874
+ return this.inputFocused || this.showPopup
1875
+ },
1876
+ currentText() {
1877
+ return this.currentValue
1878
+ ? `${this.leftPad(this.hour)}:${this.leftPad(this.minute)}:${
1879
+ this.leftPad(this.second)
1880
+ }`
1881
+ : ''
1882
+ },
1883
+ currentDate() {
1884
+ return (
1885
+ this.currentValue ||
1886
+ copyDate(new Date(), { hour: 0, minute: 0, second: 0 })
1887
+ )
1888
+ },
1889
+ hour: {
1890
+ get() {
1891
+ return this.currentDate.getHours()
1892
+ },
1893
+ set(hour) {
1894
+ this.setTime({ hour })
1895
+ }
1896
+ },
1897
+ minute: {
1898
+ get() {
1899
+ return this.currentDate.getMinutes()
1900
+ },
1901
+ set(minute) {
1902
+ this.setTime({ minute })
1903
+ }
1904
+ },
1905
+ second: {
1906
+ get() {
1907
+ return this.currentDate.getSeconds()
1908
+ },
1909
+ set(second) {
1910
+ this.setTime({ second })
1911
+ }
1912
+ }
1913
+ },
1914
+ watch: {
1915
+ value(newVal, oldVal) {
1916
+ if (+newVal !== +oldVal) {
1917
+ this.currentValue = newVal
1918
+ }
1919
+ },
1920
+ currentValue(date) {
1921
+ if (+date !== +this.value) {
1922
+ this.changed = true
1923
+ this.$emit('input', date)
1924
+ this.scrollAll()
1925
+ }
1926
+ },
1927
+ currentText: 'updateSelection',
1928
+ selection: 'updateSelection',
1929
+ show(show) {
1930
+ this.showPopup = show
1931
+ },
1932
+ showPopup(newVal, oldVal) {
1933
+ if (newVal) {
1934
+ this.updateSelection()
1935
+ this.scrollAll(0)
1936
+ }
1937
+ if (!newVal !== !oldVal) {
1938
+ this.$emit('update:show', newVal)
1939
+ }
1940
+ },
1941
+ focused(newVal, oldVal) {
1942
+ if (!newVal !== !oldVal) {
1943
+ this.$emit(newVal ? 'focus' : 'blur')
1944
+ }
1945
+ }
1946
+ },
1947
+ mounted() {
1948
+ this.$on('blur', () => {
1949
+ if (this.changed) {
1950
+ this.changed = false
1951
+ this.$emit('change', this.currentValue)
1952
+ }
1953
+ })
1954
+ },
1955
+ methods: {
1956
+ leftPad(value) {
1957
+ return ('0' + value).slice(-2)
1958
+ },
1959
+ setTime(param) {
1960
+ this.currentValue = copyDate(this.currentDate, param)
1961
+ },
1962
+ updateSelection(force = false) {
1963
+ if (this.showPopup || force) {
1964
+ const start = 3 * this.selection
1965
+ this.$nextTick(() => setSelection(this.$refs.input, start, start + 2))
1966
+ }
1967
+ },
1968
+ scrollAll(duration = 100) {
1969
+ const scroll = (ref, value) => {
1970
+ const target = this.$refs[ref]
1971
+ if (target) {
1972
+ const lineHeight = (
1973
+ target.scrollHeight /
1974
+ (target.children.length + 6)
1975
+ )
1976
+ scrollTo(target, Math.round(value * lineHeight), duration)
1977
+ }
1978
+ }
1979
+ this.$nextTick(() => {
1980
+ scroll('hour', this.hour)
1981
+ scroll('minute', this.minute)
1982
+ scroll('second', this.second)
1983
+ })
1984
+ },
1985
+ onKeyDown(event) {
1986
+ const selected = ['hour', 'minute', 'second'][this.selection]
1987
+ if (selected) {
1988
+ const { hor, ver, enter } = getKeyNavigation(event)
1989
+ if (hor) {
1990
+ const value = this.selection + hor
1991
+ this.selection = value < 0 ? 2 : value > 2 ? 0 : value
1992
+ } else if (ver) {
1993
+ const value = this[selected] + ver
1994
+ const { length } = this.$refs[selected].children
1995
+ this[selected] =
1996
+ value < 0
1997
+ ? value + length
1998
+ : value >= length
1999
+ ? value - length
2000
+ : value
2001
+ }
2002
+ if (enter) {
2003
+ this.showPopup = false
2004
+ }
2005
+ if (hor || ver || enter) {
2006
+ this.updateSelection(true)
2007
+ event.preventDefault()
2008
+ }
2009
+ }
2010
+ },
2011
+ focus() {
2012
+ this.$refs.input.focus()
2013
+ },
2014
+ blur() {
2015
+ this.$refs.input.blur()
2016
+ }
2017
+ }
2018
+ }
2019
+ const __cssModules$5 = {}
2020
+ const __component__$5 = /* @__PURE__ */ normalizeComponent(
2021
+ __vue2_script$5,
2022
+ render$4,
2023
+ staticRenderFns$4,
2024
+ false,
2025
+ __vue2_injectStyles$5,
2026
+ null,
2027
+ null,
2028
+ null
2029
+ )
2030
+ function __vue2_injectStyles$5(context) {
2031
+ for (const o in __cssModules$5) {
2032
+ this[o] = __cssModules$5[o]
2033
+ }
2034
+ }
2035
+ __component__$5.options.__file = 'src/components/TimePicker.vue'
2036
+ const TimePicker = /* @__PURE__ */ (function () {
2037
+ return __component__$5.exports
2038
+ })()
2039
+ const render$3 = function () {
2040
+ const _vm = this
2041
+ const _h = _vm.$createElement
2042
+ const _c = _vm._self._c || _h
2043
+ return _c(
2044
+ 'div',
2045
+ {
2046
+ ref: 'picker',
2047
+ staticClass: 'dito-date-time-picker'
2048
+ },
2049
+ [
2050
+ _c(
2051
+ 'div',
2052
+ {
2053
+ staticClass: 'dito-pickers',
2054
+ class: {
2055
+ 'dito-focus': _vm.focused
2056
+ }
2057
+ },
2058
+ [
2059
+ _c(
2060
+ 'date-picker',
2061
+ _vm._b(
2062
+ {
2063
+ ref: 'date',
2064
+ attrs: {
2065
+ placement: 'bottom-left',
2066
+ target: _vm.$refs.picker,
2067
+ show: _vm.showDate
2068
+ },
2069
+ on: {
2070
+ 'update:show': function ($event) {
2071
+ _vm.showDate = $event
2072
+ },
2073
+ 'focus': function ($event) {
2074
+ _vm.dateFocused = true
2075
+ },
2076
+ 'blur': function ($event) {
2077
+ _vm.dateFocused = false
2078
+ }
2079
+ },
2080
+ model: {
2081
+ value: _vm.currentValue,
2082
+ callback: function ($$v) {
2083
+ _vm.currentValue = $$v
2084
+ },
2085
+ expression: 'currentValue'
2086
+ }
2087
+ },
2088
+ 'date-picker',
2089
+ {
2090
+ transition: _vm.transition,
2091
+ placeholder: _vm.placeholder,
2092
+ locale: _vm.locale,
2093
+ dateFormat: _vm.dateFormat,
2094
+ disabled: _vm.disabled
2095
+ },
2096
+ false
2097
+ )
2098
+ ),
2099
+ _c(
2100
+ 'time-picker',
2101
+ _vm._b(
2102
+ {
2103
+ ref: 'time',
2104
+ attrs: {
2105
+ placeholder: '',
2106
+ placement: 'bottom-right',
2107
+ target: _vm.$refs.picker,
2108
+ show: _vm.showTime
2109
+ },
2110
+ on: {
2111
+ 'update:show': function ($event) {
2112
+ _vm.showTime = $event
2113
+ },
2114
+ 'focus': function ($event) {
2115
+ _vm.timeFocused = true
2116
+ },
2117
+ 'blur': function ($event) {
2118
+ _vm.timeFocused = false
2119
+ }
2120
+ },
2121
+ model: {
2122
+ value: _vm.currentValue,
2123
+ callback: function ($$v) {
2124
+ _vm.currentValue = $$v
2125
+ },
2126
+ expression: 'currentValue'
2127
+ }
2128
+ },
2129
+ 'time-picker',
2130
+ {
2131
+ transition: _vm.transition,
2132
+ disabled: _vm.disabled
2133
+ },
2134
+ false
2135
+ )
2136
+ )
2137
+ ],
2138
+ 1
2139
+ )
2140
+ ]
2141
+ )
2142
+ }
2143
+ const staticRenderFns$3 = []
2144
+ render$3._withStripped = true
2145
+ const DateTimePicker_vue_vue_type_style_index_0_lang = ''
2146
+ const __vue2_script$4 = {
2147
+ components: { DatePicker, TimePicker },
2148
+ props: {
2149
+ value: { type: Date, default: null },
2150
+ transition: { type: String, default: 'slide' },
2151
+ placeholder: { type: String, default: null },
2152
+ dateFormat: { type: Object, default: () => utils.defaultFormats.date },
2153
+ locale: { type: String, default: 'en-US' },
2154
+ disabled: { type: Boolean, default: false }
2155
+ },
2156
+ data() {
2157
+ return {
2158
+ currentValue: this.value,
2159
+ showDate: false,
2160
+ showTime: false,
2161
+ dateFocused: false,
2162
+ timeFocused: false,
2163
+ changed: false
2164
+ }
2165
+ },
2166
+ computed: {
2167
+ focused() {
2168
+ return this.dateFocused || this.timeFocused
2169
+ }
2170
+ },
2171
+ watch: {
2172
+ value(newVal, oldVal) {
2173
+ if (+newVal !== +oldVal) {
2174
+ this.currentValue = newVal
2175
+ }
2176
+ },
2177
+ currentValue(date) {
2178
+ if (+date !== +this.value) {
2179
+ this.changed = true
2180
+ this.$emit('input', date)
2181
+ }
2182
+ },
2183
+ focused(newVal, oldVal) {
2184
+ if (!newVal !== !oldVal) {
2185
+ this.$emit(newVal ? 'focus' : 'blur')
2186
+ }
2187
+ }
2188
+ },
2189
+ mounted() {
2190
+ this.$on('blur', () => {
2191
+ if (this.changed) {
2192
+ this.changed = false
2193
+ this.$emit('change', this.currentValue)
2194
+ }
2195
+ })
2196
+ },
2197
+ methods: {
2198
+ focus() {
2199
+ this.$refs.date.focus()
2200
+ },
2201
+ blur() {
2202
+ this.$refs.date.blur()
2203
+ this.$refs.time.blur()
2204
+ }
2205
+ }
2206
+ }
2207
+ const __cssModules$4 = {}
2208
+ const __component__$4 = /* @__PURE__ */ normalizeComponent(
2209
+ __vue2_script$4,
2210
+ render$3,
2211
+ staticRenderFns$3,
2212
+ false,
2213
+ __vue2_injectStyles$4,
2214
+ null,
2215
+ null,
2216
+ null
2217
+ )
2218
+ function __vue2_injectStyles$4(context) {
2219
+ for (const o in __cssModules$4) {
2220
+ this[o] = __cssModules$4[o]
2221
+ }
2222
+ }
2223
+ __component__$4.options.__file = 'src/components/DateTimePicker.vue'
2224
+ const DateTimePicker = /* @__PURE__ */ (function () {
2225
+ return __component__$4.exports
2226
+ })()
2227
+ const render$2 = function () {
2228
+ const _vm = this
2229
+ const _h = _vm.$createElement
2230
+ const _c = _vm._self._c || _h
2231
+ return _c('i', {
2232
+ staticClass: 'dito-icon',
2233
+ class: `dito-icon-${_vm.name}`
2234
+ })
2235
+ }
2236
+ const staticRenderFns$2 = []
2237
+ render$2._withStripped = true
2238
+ const Icon_vue_vue_type_style_index_0_lang = ''
2239
+ const __vue2_script$3 = {
2240
+ props: {
2241
+ name: {
2242
+ type: String,
2243
+ required: true
2244
+ }
2245
+ }
2246
+ }
2247
+ const __cssModules$3 = {}
2248
+ const __component__$3 = /* @__PURE__ */ normalizeComponent(
2249
+ __vue2_script$3,
2250
+ render$2,
2251
+ staticRenderFns$2,
2252
+ false,
2253
+ __vue2_injectStyles$3,
2254
+ null,
2255
+ null,
2256
+ null
2257
+ )
2258
+ function __vue2_injectStyles$3(context) {
2259
+ for (const o in __cssModules$3) {
2260
+ this[o] = __cssModules$3[o]
2261
+ }
2262
+ }
2263
+ __component__$3.options.__file = 'src/components/Icon.vue'
2264
+ const Icon = /* @__PURE__ */ (function () {
2265
+ return __component__$3.exports
2266
+ })()
2267
+ const render$1 = function () {
2268
+ const _vm = this
2269
+ const _h = _vm.$createElement
2270
+ const _c = _vm._self._c || _h
2271
+ return _vm.numPages > 1
2272
+ ? _c(
2273
+ 'div',
2274
+ {
2275
+ staticClass: 'dito-pagination'
2276
+ },
2277
+ [
2278
+ _vm.showTotal
2279
+ ? _c(
2280
+ 'div',
2281
+ {
2282
+ staticClass: 'dito-pagination-total'
2283
+ },
2284
+ [
2285
+ _vm.total > 0
2286
+ ? [
2287
+ _vm._v(
2288
+ _vm._s(_vm.first) + ' \u2013 ' + _vm._s(_vm.last)
2289
+ )
2290
+ ]
2291
+ : [_vm._v('0')],
2292
+ _vm._v(' / ' + _vm._s(_vm.total))
2293
+ ],
2294
+ 2
2295
+ )
2296
+ : _vm._e(),
2297
+ _c(
2298
+ 'div',
2299
+ {
2300
+ staticClass: 'dito-buttons dito-buttons-round'
2301
+ },
2302
+ _vm._l(_vm.pageRange, function (page) {
2303
+ return _c(
2304
+ 'button',
2305
+ {
2306
+ staticClass: 'dito-button',
2307
+ class: _vm.getPageClass(page),
2308
+ attrs: {
2309
+ disabled: page.disabled
2310
+ },
2311
+ on: {
2312
+ click: function ($event) {
2313
+ return _vm.onClickPage(page)
2314
+ }
2315
+ }
2316
+ },
2317
+ [
2318
+ page.text
2319
+ ? _c('span', [_vm._v(_vm._s(page.text))])
2320
+ : _vm._e()
2321
+ ]
2322
+ )
2323
+ }),
2324
+ 0
2325
+ )
2326
+ ]
2327
+ )
2328
+ : _vm._e()
2329
+ }
2330
+ const staticRenderFns$1 = []
2331
+ render$1._withStripped = true
2332
+ const Pagination_vue_vue_type_style_index_0_lang = ''
2333
+ const __vue2_script$2 = {
2334
+ props: {
2335
+ total: { type: Number, default: 0 },
2336
+ page: { type: Number, default: 1 },
2337
+ pageSize: { type: Number, default: 10 },
2338
+ showTotal: { type: Boolean, default: true }
2339
+ },
2340
+ data() {
2341
+ return {
2342
+ pageRange: [],
2343
+ showPrev: true,
2344
+ showNext: true,
2345
+ numPages: 0,
2346
+ currentPageSize: this.pageSize,
2347
+ currentPage: this.page
2348
+ }
2349
+ },
2350
+ computed: {
2351
+ first() {
2352
+ return (this.currentPage - 1) * this.currentPageSize + 1
2353
+ },
2354
+ last() {
2355
+ return Math.min(this.first + this.currentPageSize - 1, this.total)
2356
+ }
2357
+ },
2358
+ watch: {
2359
+ total: 'updatePageRange',
2360
+ showPrev: 'updatePageRange',
2361
+ showNext: 'updatePageRange',
2362
+ page(page) {
2363
+ this.currentPage = page
2364
+ },
2365
+ pageSize(pageSize) {
2366
+ this.currentPageSize = pageSize
2367
+ },
2368
+ currentPageSize(currentPageSize) {
2369
+ this.numPages = Math.ceil(this.total / currentPageSize)
2370
+ if (this.currentPage > this.numPages) {
2371
+ this.currentPage = this.numPages
2372
+ }
2373
+ this.updatePageRange()
2374
+ this.$emit('size-change', this.page, currentPageSize)
2375
+ },
2376
+ currentPage(newVal, oldVal) {
2377
+ if (newVal !== oldVal) {
2378
+ this.updatePageRange()
2379
+ this.$emit('update:page', newVal)
2380
+ }
2381
+ }
2382
+ },
2383
+ created() {
2384
+ this.currentPage = this.page
2385
+ this.currentPageSize = this.pageSize
2386
+ },
2387
+ mounted() {
2388
+ this.updatePageRange()
2389
+ },
2390
+ methods: {
2391
+ onClickPage(page) {
2392
+ if (page.index && !page.disabled && page.index !== this.currentPage) {
2393
+ this.currentPage = page.index
2394
+ }
2395
+ },
2396
+ getPageClass(page) {
2397
+ const classes = {
2398
+ 'dito-selected': page.active
2399
+ }
2400
+ if (page.type) {
2401
+ classes[`dito-button-${page.type}`] = true
2402
+ }
2403
+ return classes
2404
+ },
2405
+ updatePageRange() {
2406
+ const { showPrev, showNext, total, currentPageSize, currentPage } = this
2407
+ const showLength = showPrev + showNext + 1
2408
+ const numPages = (this.numPages = Math.ceil(total / currentPageSize))
2409
+ let start = 1
2410
+ let end = 1
2411
+ if (numPages <= showLength) {
2412
+ end = numPages
2413
+ } else if (currentPage <= showPrev + 1) {
2414
+ end = showLength
2415
+ } else if (currentPage >= numPages - showNext) {
2416
+ end = numPages
2417
+ start = numPages - showLength + 1
2418
+ } else {
2419
+ start = currentPage - showPrev
2420
+ end = currentPage + showNext
2421
+ }
2422
+ const pageRange = []
2423
+ pageRange.push({
2424
+ index: currentPage - 1,
2425
+ type: 'prev',
2426
+ disabled: currentPage <= 1
2427
+ })
2428
+ if (start >= 2) {
2429
+ pageRange.push({ index: 1, text: 1 })
2430
+ }
2431
+ if (start > 2) {
2432
+ pageRange.push({
2433
+ index: Math.max(1, currentPage - 10),
2434
+ type: 'ellipsis-prev'
2435
+ })
2436
+ }
2437
+ for (let i = start; i <= end; i++) {
2438
+ pageRange.push({
2439
+ index: i,
2440
+ text: i,
2441
+ active: i === currentPage
2442
+ })
2443
+ }
2444
+ if (end < numPages - 1) {
2445
+ pageRange.push({
2446
+ index: Math.min(numPages, currentPage + 10),
2447
+ type: 'ellipsis-next'
2448
+ })
2449
+ }
2450
+ if (end <= numPages - 1) {
2451
+ pageRange.push({ index: numPages, text: numPages })
2452
+ }
2453
+ pageRange.push({
2454
+ index: currentPage + 1,
2455
+ type: 'next',
2456
+ disabled: currentPage >= numPages
2457
+ })
2458
+ this.pageRange = pageRange
2459
+ }
2460
+ }
2461
+ }
2462
+ const __cssModules$2 = {}
2463
+ const __component__$2 = /* @__PURE__ */ normalizeComponent(
2464
+ __vue2_script$2,
2465
+ render$1,
2466
+ staticRenderFns$1,
2467
+ false,
2468
+ __vue2_injectStyles$2,
2469
+ null,
2470
+ null,
2471
+ null
2472
+ )
2473
+ function __vue2_injectStyles$2(context) {
2474
+ for (const o in __cssModules$2) {
2475
+ this[o] = __cssModules$2[o]
2476
+ }
2477
+ }
2478
+ __component__$2.options.__file = 'src/components/Pagination.vue'
2479
+ const Pagination = /* @__PURE__ */ (function () {
2480
+ return __component__$2.exports
2481
+ })()
2482
+ const render = function () {
2483
+ const _vm = this
2484
+ const _h = _vm.$createElement
2485
+ const _c = _vm._self._c || _h
2486
+ return _c(
2487
+ 'div',
2488
+ {
2489
+ staticClass: 'dito-switch',
2490
+ class: _vm.classes,
2491
+ style: _vm.styles
2492
+ },
2493
+ [
2494
+ _c(
2495
+ 'div',
2496
+ {
2497
+ staticClass: 'dito-switch-pane'
2498
+ },
2499
+ [
2500
+ _c(
2501
+ 'input',
2502
+ _vm._b(
2503
+ {
2504
+ directives: [
2505
+ {
2506
+ name: 'model',
2507
+ rawName: 'v-model',
2508
+ value: _vm.checked,
2509
+ expression: 'checked'
2510
+ }
2511
+ ],
2512
+ ref: 'input',
2513
+ attrs: {
2514
+ type: 'checkbox'
2515
+ },
2516
+ domProps: {
2517
+ checked: Array.isArray(_vm.checked)
2518
+ ? _vm._i(_vm.checked, null) > -1
2519
+ : _vm.checked
2520
+ },
2521
+ on: {
2522
+ change: function ($event) {
2523
+ const $$a = _vm.checked
2524
+ const $$el = $event.target
2525
+ const $$c = !!$$el.checked
2526
+ if (Array.isArray($$a)) {
2527
+ const $$v = null
2528
+ const $$i = _vm._i($$a, $$v)
2529
+ if ($$el.checked) {
2530
+ $$i < 0 && (_vm.checked = $$a.concat([$$v]))
2531
+ } else {
2532
+ $$i > -1 &&
2533
+ (_vm.checked = $$a
2534
+ .slice(0, $$i)
2535
+ .concat($$a.slice($$i + 1)))
2536
+ }
2537
+ } else {
2538
+ _vm.checked = $$c
2539
+ }
2540
+ }
2541
+ }
2542
+ },
2543
+ 'input',
2544
+ _vm.attributes,
2545
+ false
2546
+ )
2547
+ ),
2548
+ _c('div', {
2549
+ staticClass: 'dito-switch-button'
2550
+ }),
2551
+ _vm.labels
2552
+ ? _c(
2553
+ 'span',
2554
+ {
2555
+ staticClass: 'dito-switch-label'
2556
+ },
2557
+ [
2558
+ _vm.checked
2559
+ ? _vm._t('checked', function () {
2560
+ return [_vm._v(_vm._s(_vm.labels.checked || 'on'))]
2561
+ })
2562
+ : _vm._t('unchecked', function () {
2563
+ return [_vm._v(_vm._s(_vm.labels.unchecked || 'off'))]
2564
+ })
2565
+ ],
2566
+ 2
2567
+ )
2568
+ : _vm._e()
2569
+ ]
2570
+ )
2571
+ ]
2572
+ )
2573
+ }
2574
+ const staticRenderFns = []
2575
+ render._withStripped = true
2576
+ const SwitchButton_vue_vue_type_style_index_0_lang = ''
2577
+ const __vue2_script$1 = {
2578
+ props: {
2579
+ value: { type: Boolean, default: false },
2580
+ id: { type: String, default: null },
2581
+ name: { type: String, default: null },
2582
+ disabled: { type: Boolean, default: false },
2583
+ labels: { type: [Object, Boolean], default: false }
2584
+ },
2585
+ data() {
2586
+ return {
2587
+ checked: this.value
2588
+ }
2589
+ },
2590
+ computed: {
2591
+ classes() {
2592
+ const { checked, disabled } = this
2593
+ return {
2594
+ 'dito-checked': checked,
2595
+ 'dito-disabled': disabled
2596
+ }
2597
+ },
2598
+ styles() {
2599
+ const { labels: { checked, unchecked } = {} } = this
2600
+ const length = Math.max(
2601
+ 0,
2602
+ checked == null ? void 0 : checked.length,
2603
+ unchecked == null ? void 0 : unchecked.length
2604
+ )
2605
+ return {
2606
+ '--switch-width': length ? `${length * 1.5}rem` : null
2607
+ }
2608
+ },
2609
+ attributes() {
2610
+ const { id, name, disabled, $attrs } = this
2611
+ return { id, name, disabled, ...$attrs }
2612
+ }
2613
+ },
2614
+ watch: {
2615
+ value(value) {
2616
+ this.checked = value
2617
+ },
2618
+ checked(checked) {
2619
+ if (checked !== this.value) {
2620
+ this.$emit('input', checked)
2621
+ this.$emit('change', checked)
2622
+ }
2623
+ }
2624
+ },
2625
+ methods: {
2626
+ focus() {
2627
+ this.$refs.input.focus()
2628
+ }
2629
+ }
2630
+ }
2631
+ const __cssModules$1 = {}
2632
+ const __component__$1 = /* @__PURE__ */ normalizeComponent(
2633
+ __vue2_script$1,
2634
+ render,
2635
+ staticRenderFns,
2636
+ false,
2637
+ __vue2_injectStyles$1,
2638
+ null,
2639
+ null,
2640
+ null
2641
+ )
2642
+ function __vue2_injectStyles$1(context) {
2643
+ for (const o in __cssModules$1) {
2644
+ this[o] = __cssModules$1[o]
2645
+ }
2646
+ }
2647
+ __component__$1.options.__file = 'src/components/SwitchButton.vue'
2648
+ const SwitchButton = /* @__PURE__ */ (function () {
2649
+ return __component__$1.exports
2650
+ })()
2651
+ const TransitionHeight_vue_vue_type_style_index_0_lang = ''
2652
+ const __vue2_script = {
2653
+ functional: true,
2654
+ props: {
2655
+ enabled: { type: Boolean, default: true }
2656
+ },
2657
+ render: (createElement, context) =>
2658
+ createElement(
2659
+ 'transition',
2660
+ context.props.enabled
2661
+ ? {
2662
+ props: { name: 'height' },
2663
+ on: events
2664
+ }
2665
+ : {},
2666
+ context.children
2667
+ )
2668
+ }
2669
+ const setStyle = (element, style) => Object.assign(element.style, style)
2670
+ const forceRepaint = element => getComputedStyle(element).height
2671
+ const events = {
2672
+ afterEnter(element) {
2673
+ setTimeout(() => setStyle(element, { height: 'auto' }))
2674
+ },
2675
+ enter(element) {
2676
+ const { width } = getComputedStyle(element)
2677
+ setStyle(element, {
2678
+ width,
2679
+ position: 'absolute',
2680
+ visibility: 'hidden',
2681
+ height: 'auto'
2682
+ })
2683
+ const { height } = getComputedStyle(element)
2684
+ setStyle(element, {
2685
+ width: null,
2686
+ position: null,
2687
+ visibility: null,
2688
+ height: 0
2689
+ })
2690
+ forceRepaint(element)
2691
+ setTimeout(() => setStyle(element, { height }))
2692
+ },
2693
+ leave(element) {
2694
+ const { height } = getComputedStyle(element)
2695
+ setStyle(element, { height })
2696
+ forceRepaint(element)
2697
+ setTimeout(() => setStyle(element, { height: 0 }))
2698
+ }
2699
+ }
2700
+ let __vue2_render, __vue2_staticRenderFns
2701
+ const __cssModules = {}
2702
+ const __component__ = /* @__PURE__ */ normalizeComponent(
2703
+ __vue2_script,
2704
+ __vue2_render,
2705
+ __vue2_staticRenderFns,
2706
+ false,
2707
+ __vue2_injectStyles,
2708
+ null,
2709
+ null,
2710
+ null
2711
+ )
2712
+ function __vue2_injectStyles(context) {
2713
+ for (const o in __cssModules) {
2714
+ this[o] = __cssModules[o]
2715
+ }
2716
+ }
2717
+ __component__.options.__file = 'src/transitions/TransitionHeight.vue'
2718
+ const TransitionHeight = /* @__PURE__ */ (function () {
2719
+ return __component__.exports
2720
+ })()
2721
+ exports2.Calendar = Calendar
2722
+ exports2.DatePicker = DatePicker
2723
+ exports2.DateTimePicker = DateTimePicker
2724
+ exports2.Icon = Icon
2725
+ exports2.InputField = InputField
2726
+ exports2.Pagination = Pagination
2727
+ exports2.SwitchButton = SwitchButton
2728
+ exports2.TimePicker = TimePicker
2729
+ exports2.TransitionHeight = TransitionHeight
2730
+ exports2.Trigger = Trigger
2731
+ exports2.addEvents = addEvents
2732
+ exports2.convertDate = convertDate
2733
+ exports2.copyDate = copyDate
2734
+ exports2.getAbsoluteBoundingRect = getAbsoluteBoundingRect
2735
+ exports2.getKey = getKey
2736
+ exports2.getKeyNavigation = getKeyNavigation
2737
+ exports2.scrollTo = scrollTo
2738
+ exports2.setSelection = setSelection
2739
+ Object.defineProperties(exports2, {
2740
+ __esModule: { value: true },
2741
+ [Symbol.toStringTag]: { value: 'Module' }
2742
+ })
2743
+ })
2744
+ // # sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by11aS51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9ib3VuZHMuanMiLCIuLi9zcmMvdXRpbHMvZGF0ZS5qcyIsIi4uL3NyYy91dGlscy9ldmVudC5qcyIsIi4uL3NyYy91dGlscy9zY3JvbGwuanMiLCIuLi9zcmMvdXRpbHMvc2VsZWN0aW9uLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UcmlnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGF0ZVBpY2tlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvVGltZVBpY2tlci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EYXRlVGltZVBpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL1N3aXRjaEJ1dHRvbi52dWUiLCIuLi9zcmMvdHJhbnNpdGlvbnMvVHJhbnNpdGlvbkhlaWdodC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldEFic29sdXRlQm91bmRpbmdSZWN0KGVsKSB7XG4gIGNvbnN0IGRvYyA9IGRvY3VtZW50XG4gIGNvbnN0IHdpbiA9IHdpbmRvd1xuICBjb25zdCBib2R5ID0gZG9jLmJvZHlcbiAgLy8gcGFnZVhPZmZzZXQgYW5kIHBhZ2VZT2Zmc2V0IHdvcmsgZXZlcnl3aGVyZSBleGNlcHQgSUUgPDkuXG4gIGxldCBvZmZzZXRYID0gd2luLnBhZ2VYT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyB3aW4ucGFnZVhPZmZzZXRcbiAgICA6IChkb2MuZG9jdW1lbnRFbGVtZW50IHx8IGJvZHkucGFyZW50Tm9kZSB8fCBib2R5KS5zY3JvbGxMZWZ0XG4gIGxldCBvZmZzZXRZID0gd2luLnBhZ2VZT2Zmc2V0ICE9PSB1bmRlZmluZWQgPyB3aW4ucGFnZVlPZmZzZXRcbiAgICA6IChkb2MuZG9jdW1lbnRFbGVtZW50IHx8IGJvZHkucGFyZW50Tm9kZSB8fCBib2R5KS5zY3JvbGxUb3BcbiAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIGlmIChlbCAhPT0gYm9keSkge1xuICAgIGxldCBwYXJlbnQgPSBlbC5wYXJlbnROb2RlXG4gICAgLy8gVGhlIGVsZW1lbnQncyByZWN0IHdpbGwgYmUgYWZmZWN0ZWQgYnkgdGhlIHNjcm9sbCBwb3NpdGlvbnMgb2ZcbiAgICAvLyAqYWxsKiBvZiBpdHMgc2Nyb2xsYWJsZSBwYXJlbnRzLCBub3QganVzdCB0aGUgd2luZG93LCBzbyB3ZSBoYXZlXG4gICAgLy8gdG8gd2FsayB1cCB0aGUgdHJlZSBhbmQgY29sbGVjdCBldmVyeSBzY3JvbGwgb2Zmc2V0LiBHb29kIHRpbWVzLlxuICAgIHdoaWxlIChwYXJlbnQgIT09IGJvZHkpIHtcbiAgICAgIG9mZnNldFggKz0gcGFyZW50LnNjcm9sbExlZnRcbiAgICAgIG9mZnNldFkgKz0gcGFyZW50LnNjcm9sbFRvcFxuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBib3R0b206IHJlY3QuYm90dG9tICsgb2Zmc2V0WSxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IHJlY3QubGVmdCArIG9mZnNldFgsXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQgKyBvZmZzZXRYLFxuICAgIHRvcDogcmVjdC50b3AgKyBvZmZzZXRZLFxuICAgIHdpZHRoOiByZWN0LndpZHRoXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzRGF0ZSwgcGljayB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RGF0ZShkYXRlLFxuICB7IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCB9ID0ge31cbikge1xuICByZXR1cm4gbmV3IERhdGUoXG4gICAgcGljayh5ZWFyLCBkYXRlICYmIGRhdGUuZ2V0RnVsbFllYXIoKSwgMCksXG4gICAgcGljayhtb250aCwgZGF0ZSAmJiBkYXRlLmdldE1vbnRoKCksIDApLFxuICAgIHBpY2soZGF5LCBkYXRlICYmIGRhdGUuZ2V0RGF0ZSgpLCAwKSxcbiAgICBwaWNrKGhvdXIsIGRhdGUgJiYgZGF0ZS5nZXRIb3VycygpLCAwKSxcbiAgICBwaWNrKG1pbnV0ZSwgZGF0ZSAmJiBkYXRlLmdldE1pbnV0ZXMoKSwgMCksXG4gICAgcGljayhzZWNvbmQsIGRhdGUgJiYgZGF0ZS5nZXRTZWNvbmRzKCksIDApLFxuICAgIHBpY2sobWlsbGlzZWNvbmQsIGRhdGUgJiYgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSwgMClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gZGF0ZSA6IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGxcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0LCBldmVudHMpIHtcbiAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudC5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvKGVsZW1lbnQsIHRvLCBkdXJhdGlvbikge1xuICBjb25zdCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzZXRUaW1lb3V0KGFyZ3VtZW50c1swXSwgMTApXG4gIH1cbiAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICBlbGVtZW50LnNjcm9sbFRvcCA9IHRvXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRvIC0gZWxlbWVudC5zY3JvbGxUb3BcbiAgICBjb25zdCBwZXJUaWNrID0gZGlmZmVyZW5jZSAvIGR1cmF0aW9uICogMTBcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcCArIHBlclRpY2tcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCA9PT0gdG8pIHJldHVyblxuICAgICAgc2Nyb2xsVG8oZWxlbWVudCwgdG8sIGR1cmF0aW9uIC0gMTApXG4gICAgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHNldFNlbGVjdGlvbihmaWVsZCwgc3RhcnQsIGVuZCkge1xuICBpZiAoZmllbGQuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBmaWVsZC5jcmVhdGVUZXh0UmFuZ2UoKVxuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpXG4gICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydClcbiAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQpXG4gICAgcmFuZ2Uuc2VsZWN0KClcbiAgICBmaWVsZC5mb2N1cygpXG4gIH0gZWxzZSBpZiAoZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBmaWVsZC5mb2N1cygpXG4gICAgZmllbGQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfSBlbHNlIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGZpZWxkKSB7XG4gICAgZmllbGQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFxuICAgIGZpZWxkLnNlbGVjdGlvbkVuZCA9IGVuZFxuICAgIGZpZWxkLmZvY3VzKClcbiAgfVxufVxuIiwiXG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3REYXRlKGRhdGUuZGF0ZSwgZGF0ZS5zdGF0ZSwgdHJ1ZSlcIlxuICAgICAgICAgICAgKSB7eyBkYXRlLnRleHQgfX1cbiAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheShcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICdtb250aCdcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoLTEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgc3BhblxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC15ZWFyKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgKSB7eyBkYXRlVG9TdHJpbmcoY3VycmVudFZhbHVlLCB7IHllYXI6IDEgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCIobW9udGgsIGluZGV4KSBpbiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RNb250aChpbmRleClcIlxuICAgICAgICAgICAgKSB7eyBtb250aC5zaG9ydCB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cImN1cnJlbnRNb2RlID09PSAneWVhcidcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuIHt7IGRlY2FkZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0KFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwieWVhciBpbiB5ZWFyUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWxlY3RZZWFyKHllYXIpXCJcbiAgICAgICAgICAgICkge3sgeWVhciB9fVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY2FsZW5kYXJcbiAgICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ21vbnRoJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IDEgfSkgfX1cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwTW9udGgoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLXdlZWtkYXlzXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICAgICkge3sgd2Vla2RheS5zaG9ydCB9fVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cImRhdGUgaW4gZGF0ZVJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICAgICkge3sgZGF0ZS50ZXh0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZm9vdGVyXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2VsZWN0RGF0ZShuZXcgRGF0ZSgpKVwiXG4gICAgICAgICAgICAgIDp0aXRsZT1cImRhdGVUb1N0cmluZyhuZXcgRGF0ZSgpLCB7IHllYXI6IDEsIG1vbnRoOiAxLCBkYXk6IDEgfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuXG4gICAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCd5ZWFyJylcIlxuICAgICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcFllYXIoMSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAgIC5kaXRvLWNhbGVuZGFyLW1vbnRoc1xuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZm9yPVwiKG1vbnRoLCBpbmRleCkgaW4gbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0TW9udGhDbGFzcyhpbmRleClcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICkge3sgbW9udGguc2hvcnQgfX1cbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICAgIEBjbGljaz1cInN0ZXBEZWNhZGUoLTEpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic3RlcERlY2FkZSgxKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItYm9keVxuICAgICAgICAgICAgLmRpdG8tY2FsZW5kYXIteWVhcnNcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWZvcj1cInllYXIgaW4geWVhclJhbmdlXCJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRZZWFyQ2xhc3MoeWVhcilcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgICApIHt7IHllYXIgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jYWxlbmRhclxuICAgIG1pbi13aWR0aDogMjQwcHhcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG5cbiAgLmRpdG8tY2FsZW5kYXItcG9wdXBcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgei1pbmRleDogMTAwMFxuXG4gIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICBwYWRkaW5nOiAwIDAuNWVtXG4gICAgc3BhblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogY2FsYygxMDAlIC8gNylcbiAgICAgIGhlaWdodDogJGlucHV0LWhlaWdodFxuICAgICAgbGluZS1oZWlnaHQ6IGNhbGMoI3skaW5wdXQtaGVpZ2h0fSAtIDJweClcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnRcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXlcbiAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlXG4gICAgICAmLFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGNvbG9yOiB3aGl0ZVxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IHdoaXRlXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAuZGl0by1jYWxlbmRhci1pdGVtLWRpc2FibGVkLFxuICAgIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheVxuICAgICAgY29sb3I6ICM5OTlcblxuICAuZGl0by1jYWxlbmRhci1tb250aHMsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzXG4gICAgc3BhblxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvIDQpXG4gICAgICBtYXJnaW46IDAuNWVtIDBcblxuICAuZGl0by1jYWxlbmRhci15ZWFycyBzcGFuXG4gICAgd2lkdGg6IGNhbGMoMTAwJSAvIDUpXG5cbiAgLmRpdG8tY2FsZW5kYXIgYSxcbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3BhbixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW5cbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgLmRpdG8tY2FsZW5kYXItaGVhZGVyIHNwYW5cbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBhXG4gICAgICBwYWRkaW5nOiAwIDAuMmVtXG5cbiAgLmRpdG8tY2FsZW5kYXItZGF0ZXMgc3Bhbjpob3ZlcixcbiAgLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4gIC5kaXRvLWNhbGVuZGFyOm5vdCg6aG92ZXIpIC5kaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudFxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcblxuICAuZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuXG4gICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXIsXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIEBleHRlbmQgJWlucHV0LWhlaWdodFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHRleHQtYWxpZ246IGNlbnRlclxuXG4gIC5kaXRvLWNhbGVuZGFyLWZvb3RlclxuICAgIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGVcblxuICAuZGl0by1jYWxlbmRhci1oZWFkZXJcbiAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgPiBzcGFuXG4gICAgICBtYXJnaW46IGF1dG9cbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICBhXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgJjpob3ZlclxuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuXG4gIC5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbiAgLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgd2lkdGg6IDUlXG4gICAgbWluLXdpZHRoOiAyZW1cbiAgICBtYXgtd2lkdGg6IDNlbVxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBmb250LXNpemU6IDEuMjVlbVxuICAuZGl0by1jYWxlbmRhci1zdGVwLXByZXZcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuSdcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8KrJ1xuICAuZGl0by1jYWxlbmRhci1zdGVwLW5leHRcbiAgICAmOjphZnRlclxuICAgICAgY29udGVudDogJ+KAuidcbiAgICAmLmRpdG8tY2FsZW5kYXItc3RlcC15ZWFyOjphZnRlclxuICAgICAgY29udGVudDogJ8K7J1xuXG4gIC5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheVxuICAgICY6OmFmdGVyXG4gICAgICBjb250ZW50OiAnTm93J1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNvcHlEYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6XG4gICAgICAgIHRoaXMudmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwIH0pLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRWYWx1ZTogJ3VwZGF0ZURhdGVSYW5nZScsXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbCB8fCBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIG1vbnRoID09PSB0aGlzLnZhbHVlLmdldE1vbnRoKCkgJiZcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLnZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6XG4gICAgICAgICAgbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzpcbiAgICAgICAgICB0aGlzLnZhbHVlICYmIHllYXIgPT09IHRoaXMudmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzpcbiAgICAgICAgICB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudFZhbHVlLCBvdmVycmlkZXMpXG4gICAgfSxcblxuICAgIHN0ZXBEZWNhZGUoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiAxMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2V0TW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH0sXG5cbiAgICBzdGVwTW9udGgoc3RlcCkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgeWVhciwgbW9udGggfSA9IHRoaXMuZ2V0WWVhck1vbnRoKFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBzdGVwXG4gICAgICApXG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICBtb250aCxcbiAgICAgICAgZGF5OiBNYXRoLm1pbihcbiAgICAgICAgICB0aGlzLmdldERheUNvdW50KHllYXIsIG1vbnRoKSxcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZS5nZXREYXRlKClcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc3RlcFllYXIoc3RlcCkge1xuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgeWVhcjogdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSArIHN0ZXBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdERhdGUoZGF0ZSwgc3RhdGUsIGNvcHkgPSBmYWxzZSkge1xuICAgICAgaWYgKHN0YXRlICE9PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgIHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICBkYXk6IGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RNb250aChtb250aCkge1xuICAgICAgdGhpcy5zZXRNb2RlKCdkYXknKVxuICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGggfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0WWVhcih5ZWFyKSB7XG4gICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgIHRoaXMuc2V0RGF0ZSh7IHllYXIgfSlcbiAgICB9LFxuXG4gICAgZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICBpZiAobW9udGggPiAxMSkge1xuICAgICAgICB5ZWFyKytcbiAgICAgICAgbW9udGggPSAwXG4gICAgICB9IGVsc2UgaWYgKG1vbnRoIDwgMCkge1xuICAgICAgICB5ZWFyLS1cbiAgICAgICAgbW9udGggPSAxMVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgeWVhciwgbW9udGggfVxuICAgIH0sXG5cbiAgICBkYXRlVG9TdHJpbmcoZGF0ZSwgeyB5ZWFyLCBtb250aCwgZGF5IH0pIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheUNvdW50KHllYXIsIG1vbnRoKSB7XG4gICAgICBjb25zdCBkYXlzSW5Nb250aCA9IFszMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVxuICAgICAgLy8gSGFuZGxlIGxlYXAgeWVhcjpcbiAgICAgIHJldHVybiBtb250aCA9PT0gMSAmJiAoISh5ZWFyICUgNDAwKSB8fCAhKHllYXIgJSA0KSAmJiAoeWVhciAlIDEwMCkpXG4gICAgICAgID8gMjlcbiAgICAgICAgOiBkYXlzSW5Nb250aFttb250aF1cbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IGhvciwgdmVyLCBlbnRlciB9KSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRNb2RlLCBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChob3IgfHwgdmVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgZGF5OiBjdXJyZW50VmFsdWUuZ2V0RGF0ZSgpICsgaG9yICsgdmVyICogN1xuICAgICAgICAgIH0pXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICBtb250aDogY3VycmVudFZhbHVlLmdldE1vbnRoKCkgKyBob3IgKyB2ZXIgKiA2XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgfSlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9IGVsc2UgaWYgKGVudGVyKSB7XG4gICAgICAgIHN3aXRjaCAoY3VycmVudE1vZGUpIHtcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICB0aGlzLnNlbGVjdERhdGUoY3VycmVudFZhbHVlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICB0aGlzLnNldE1vZGUoJ2RheScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVEYXRlUmFuZ2UoKSB7XG4gICAgICB0aGlzLmRhdGVSYW5nZSA9IFtdXG4gICAgICB0aGlzLnllYXJSYW5nZSA9IFtdXG5cbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB5ZWFyID0gY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgIGNvbnN0IG1vbnRoID0gY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IHRoaXMuZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcilcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgICAgICB0aGlzLnllYXJSYW5nZS5wdXNoKHN0YXJ0WWVhciArIGkpXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyTW9udGhGaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKVxuICAgICAgbGV0IGZpcnN0RGF5V2VlayA9IGN1cnJNb250aEZpcnN0RGF5LmdldERheSgpICsgMVxuICAgICAgaWYgKGZpcnN0RGF5V2VlayA9PT0gMCkge1xuICAgICAgICBmaXJzdERheVdlZWsgPSA3XG4gICAgICB9XG4gICAgICBjb25zdCBkYXlDb3VudCA9IHRoaXMuZ2V0RGF5Q291bnQoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aERheUNvdW50ID0gdGhpcy5nZXREYXlDb3VudChcbiAgICAgICAgICBwcmV2TW9udGgueWVhcixcbiAgICAgICAgICBwcmV2TW9udGgubW9udGhcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpcnN0RGF5V2VlazsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF5ID0gcHJldk1vbnRoRGF5Q291bnQgLSBmaXJzdERheVdlZWsgKyBpICsgMVxuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShwcmV2TW9udGgueWVhciwgcHJldk1vbnRoLm1vbnRoLCBkYXkpXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGU6IHRoaXMuZGlzYWJsZWREYXRlKGRhdGUpID8gJ2Rpc2FibGVkJyA6ICdncmF5J1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBkYXlDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IGRhdGUgJiZcbiAgICAgICAgICBkYXRlLmdldERhdGUoKSA9PT0gaSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxuICAgICAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLnZhbHVlKSA/ICdhY3RpdmUnXG4gICAgICAgICAgOiBpc0RheSh0b2RheSkgPyAndG9kYXknXG4gICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCdcbiAgICAgICAgICA6IGlzRGF5KGN1cnJlbnRWYWx1ZSkgPyAnY3VycmVudCdcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICB0cmFuc2l0aW9uKDpuYW1lPVwidHJhbnNpdGlvblwiKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICApXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgKVxuIiwiLy8gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS9cblxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1pZj1cImFsd2F5c1Nob3dcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2NsaWNrJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICApXG4gICAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gICAgLmRpdG8tdHJpZ2dlcihcbiAgICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgcmVmPVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgICAuZGl0by10cmlnZ2VyKFxuICAgICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2ZvY3VzJyB8fCB0cmlnZ2VyID09PSAnYWx3YXlzJ1wiXG4gICAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgKVxuICAgICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAgIHRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgICAuZGl0by1wb3B1cChcbiAgICAgICAgdi1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgICAgQG1vdXNlbGVhdmU9XCJvbkhvdmVyKGZhbHNlKVwiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgKVxuICAgICAgLmRpdG8tcG9wdXAoXG4gICAgICAgIHYtZWxzZVxuICAgICAgICByZWY9XCJwb3B1cFwiXG4gICAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIClcbiAgICAgICAgc2xvdChcbiAgICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3RyYW5zaXRpb25zL2luZGV4LnNhc3MnXG5cbiAgLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAuZGl0by10cmlnZ2VyLWRpc2FibGVkXG4gICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICpcbiAgICAgIGN1cnNvcjogZGVmYXVsdCAhaW1wb3J0YW50XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZVxuXG4gIC5kaXRvLXBvcHVwXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgdG9wOiAwXG4gICAgbGVmdDogMFxuICAgIHotaW5kZXg6IDEwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIG5ld1ZhbClcbiAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmZvY3VzRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMuY2xvc2VFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBudWxsXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGlzU3RyaW5nKHRoaXMudGFyZ2V0KVxuICAgICAgICA/IHRoaXMuJHJlZnNbdGhpcy50YXJnZXRdXG4gICAgICAgIDogdGhpcy50YXJnZXRcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgLy8gQWN0dWFsbHkgcmVzaXplIHRoZSBwb3B1cCdzIGZpcnN0IGNoaWxkLCBzbyB0aGV5IGNhbiBzZXQgc2l6ZSBsaW1pdHMuXG4gICAgICAgIGNvbnN0IGVsID0gdGFyZ2V0ID09PSBwb3B1cCA/IHRyaWdnZXIgOiBwb3B1cC5maXJzdENoaWxkXG4gICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGJvdW5kcyA9ICh0YXJnZXQgfHwgdHJpZ2dlcikuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IHRyaWdnZXIpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlckJvdW5kcyA9IHRyaWdnZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgbGVmdCArPSB0cmlnZ2VyTGVmdCAtIHRyaWdnZXJCb3VuZHMubGVmdFxuICAgICAgICB0b3AgKz0gdHJpZ2dlclRvcCAtIHRyaWdnZXJCb3VuZHMudG9wXG4gICAgICB9XG4gICAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGBcbiAgICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGBcblxuICAgICAgdGhpcy4kZW1pdCgndXBkYXRlLXBvc2l0aW9uJywge1xuICAgICAgICB0cmlnZ2VyLFxuICAgICAgICBwb3B1cCxcbiAgICAgICAgcGxhY2VtZW50OiB0aGlzLnBvcHVwUGxhY2VtZW50XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1pbnB1dFxuICBpbnB1dChcbiAgICByZWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWlucHV0XG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6YXJpYS1sYWJlbD1cInRpdGxlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8taW5wdXRcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGlucHV0XG4gICAgICAvLyBJbmhlcml0IGFsbCBzdHlsaW5nIGZyb20gLmRpdG8taW5wdXRcbiAgICAgIGFsbDogaW5oZXJpdFxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgYm9yZGVyOiAwXG4gICAgICBtYXJnaW46IDBcbiAgICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgdHlwZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICd0ZXh0JyB9LFxuICAgIHZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICByZWFkb25seSxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIGF1dG9jb21wbGV0ZSxcbiAgICAgICAgJGF0dHJzXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHNpemUsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICBhdXRvY29tcGxldGUsXG4gICAgICAgIC4uLiRhdHRyc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBSZW1vdmUgJ2lucHV0JyBsaXN0ZW5lciBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGl0IHNlcGFyYXRlbHkgYmVsb3csXG4gICAgICAvLyBidXQgcGFzcyBvbiBhbGwgb3RoZXJzIHRvIHRoZSB3cmFwcGVkIG5hdGl2ZSBlbGVtZW50OlxuICAgICAgY29uc3QgeyBpbnB1dCwgLi4ubGlzdGVuZXJzIH0gPSB0aGlzLiRsaXN0ZW5lcnNcbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgc2l6ZSgpIHtcbiAgICAgIC8vIERldGVybWluZSBzaXplIGJhc2VkIG9uIG1pbiAmIG1heCBzZXR0aW5ncywgaWYgdGhleSdyZSBwcm92aWRlZC5cbiAgICAgIGNvbnN0IHsgc2l6ZSwgbWluLCBtYXggfSA9IHRoaXMuJGF0dHJzXG4gICAgICBjb25zdCBnZXRMZW5ndGggPSB2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIGlucHV0LWZpZWxkLmRpdG8tZGF0ZS1waWNrZXItaW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIHJlZj1cImlucHV0XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwiY3VycmVudFRleHRcIlxuICAgIHJlYWRvbmx5XG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgY2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICBAaW5wdXQ9XCJzZWxlY3REYXRlXCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gIClcbiIsIi8vIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvXG5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1kYXRlLXBpY2tlcihcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDp2YWx1ZT1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgQGZvY3VzPVwiaW5wdXRGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImlucHV0Rm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkIH1cIlxuICAgIClcbiAgICAvLyBpY29uKHR5cGU9XCJjYWxlbmRhclwiIDpjb2xvcj1cImljb25Db2xvclwiKVxuICAgIGNhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgcmVmPVwiY2FsZW5kYXJcIlxuICAgICAgQGlucHV0PVwic2VsZWN0RGF0ZVwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZGF0ZS1waWNrZXJcbiAgICBtaW4td2lkdGg6IDI0MHB4XG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgd2lkdGg6IDEwMCVcbiAgLmRpdG8tZGF0ZS1waWNrZXItcG9wdXBcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgQ2FsZW5kYXIgZnJvbSAnLi9DYWxlbmRhci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IHsgZ2V0S2V5TmF2aWdhdGlvbiB9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHRoaXMuY3VycmVudFZhbHVlLCB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIGRhdGU6IHRoaXMuZGF0ZUZvcm1hdCxcbiAgICAgICAgdGltZTogZmFsc2VcbiAgICAgIH0pIHx8ICcnXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdERhdGUoZGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgaW5wdXQtZmllbGQuZGl0by10aW1lLXBpY2tlci1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgcmVhZG9ubHlcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgIEBrZXlkb3duPVwib25LZXlEb3duXCJcbiAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgKVxuICAvLyBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gIC8vIClcbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMFwiXG4gICAgICApXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gMjRcIlxuICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IGhvdXIgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJob3VyID0gaW5kZXggLSAxXCJcbiAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1taW51dGUoXG4gICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAxXCJcbiAgICAgIClcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLXNlY29uZChcbiAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgKVxuICAgICAgICBsaShcbiAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG4iLCIvLyBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpL1xuXG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tdGltZS1waWNrZXIoXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbiAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6dmFsdWU9XCJjdXJyZW50VGV4dFwiXG4gICAgICByZWFkb25seVxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICApXG4gICAgLy8gaWNvbih0eXBlPVwidGltZVwiXG4gICAgLy8gICA6Y29sb3I9XCJkaXNhYmxlZCA/ICcjYmZiZmJmJyA6ICh0ZXh0ID8gJyM2NjYnIDogJyNiZmJmYmYnKVwiXG4gICAgLy8gKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICApXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIoXG4gICAgICAgICAgcmVmPVwiaG91clwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDBcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDI0XCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogaG91ciA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgQGNsaWNrPVwiaG91ciA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBtaW51dGUgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKFxuICAgICAgICAgIHJlZj1cInNlY29uZFwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDJcIlxuICAgICAgICApXG4gICAgICAgICAgbGkoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlY29uZCA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICB3aWR0aDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbWF4LXdpZHRoOiAxNjBweFxuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuXG4gICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweFxuICAuZGl0by10aW1lLXBpY2tlclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAuZGl0by1pY29uLXRpbWVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogN3B4XG4gICAgICAgIGhlaWdodDogMTAwJVxuXG4gIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgbGlzdC1zdHlsZTogbm9uZVxuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICBvdmVyZmxvdzogaGlkZGVuXG5cbiAgLmRpdG8tdGltZS1waWNrZXItcG9wdXAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICBmbG9hdDogbGVmdFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci13aWR0aDogMCAxcHggMFxuICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KVxuICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAmOmxhc3QtY2hpbGRcbiAgICAgIGJvcmRlci1yaWdodDogMFxuICAgIHVsXG4gICAgICBvdmVyZmxvdy14OiBoaWRkZW5cbiAgICAgIG92ZXJmbG93LXk6IGF1dG9cbiAgICAgIGxpc3Qtc3R5bGU6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXJnaW46IDBcbiAgICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgICAgYm94LXNpemluZzogY29udGVudC1ib3hcbiAgICAgIHBhZGRpbmc6IDAgMTdweCAwIDBcbiAgICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgJiA+IGxpXG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodFxuICAgICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW5cbiAgICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0XG4gICAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHRcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICAgJi5zZWxlY3RlZDpob3ZlclxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgJi5kaXNhYmxlZFxuICAgICAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcbiAgICAgICAgJi5kaXNhYmxlZDpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQge1xuICBjb3B5RGF0ZSwgc2Nyb2xsVG8sIHNldFNlbGVjdGlvbiwgZ2V0S2V5TmF2aWdhdGlvblxufSBmcm9tICcuLi91dGlscy9pbmRleC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2UsXG4gICAgICBzZWxlY3Rpb246IDAsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnB1dEZvY3VzZWQgfHwgdGhpcy5zaG93UG9wdXBcbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWVcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5ob3VyKX06JHtcbiAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5taW51dGUpfToke1xuICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLnNlY29uZCl9YFxuICAgICAgICA6ICcnXG4gICAgfSxcblxuICAgIGN1cnJlbnREYXRlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgfHxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IERhdGUoKSBvYmplY3Qgd2l0aCB0aGUgdGltZSBzZXQgdG8gMCwgdG8gYmUgdXNlZCB3aGVuXG4gICAgICAgIC8vIGZpcnN0IHNldHRpbmcgYW55IG9mIHRoZSB0aW1lcywgZm9yIG1lYW5pbmdmdWwgZGF0ZXMgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gb2JqZWN0IGlzIHNoYXJlZCB3aXRoIGEgRGF0ZVBpY2tlciwgZS5nLiB0aHJvdWdoIERhdGVUaW1lUGlja2VyLlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIGhvdXI6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0SG91cnMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KGhvdXIpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgaG91ciB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtaW51dGU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0TWludXRlcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQobWludXRlKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IG1pbnV0ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWNvbmQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudERhdGUuZ2V0U2Vjb25kcygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2Vjb25kKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IHNlY29uZCB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoK25ld1ZhbCAhPT0gK29sZFZhbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgZGF0ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dDogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzZWxlY3Rpb246ICd1cGRhdGVTZWxlY3Rpb24nLFxuXG4gICAgc2hvdyhzaG93KSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9IHNob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKClcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwoMClcbiAgICAgIH1cbiAgICAgIGlmICghbmV3VmFsICE9PSAhb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgbmV3VmFsKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxlZnRQYWQodmFsdWUpIHtcbiAgICAgIHJldHVybiAoJzAnICsgdmFsdWUpLnNsaWNlKC0yKVxuICAgIH0sXG5cbiAgICBzZXRUaW1lKHBhcmFtKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHBhcmFtKVxuICAgIH0sXG5cbiAgICB1cGRhdGVTZWxlY3Rpb24oZm9yY2UgPSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwIHx8IGZvcmNlKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gMyAqIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbih0aGlzLiRyZWZzLmlucHV0LCBzdGFydCwgc3RhcnQgKyAyKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Nyb2xsQWxsKGR1cmF0aW9uID0gMTAwKSB7XG4gICAgICBjb25zdCBzY3JvbGwgPSAocmVmLCB2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLiRyZWZzW3JlZl1cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIC8vIEZpcnN0IGFuZCBhbHN0IG9uZSBhZGQgMyB0aW1lcyB0aGUgbWFyZ2luXG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IHRhcmdldC5zY3JvbGxIZWlnaHQgLyAodGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCArIDYpXG4gICAgICAgICAgc2Nyb2xsVG8odGFyZ2V0LCBNYXRoLnJvdW5kKHZhbHVlICogbGluZUhlaWdodCksIGR1cmF0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBbJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCddW3RoaXMuc2VsZWN0aW9uXVxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IHsgaG9yLCB2ZXIsIGVudGVyIH0gPSBnZXRLZXlOYXZpZ2F0aW9uKGV2ZW50KVxuICAgICAgICBpZiAoaG9yKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlbGVjdGlvbiArIGhvclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID1cbiAgICAgICAgICAgIHZhbHVlIDwgMCA/IDJcbiAgICAgICAgICAgIDogdmFsdWUgPiAyID8gMFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9IGVsc2UgaWYgKHZlcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tzZWxlY3RlZF0gKyB2ZXJcbiAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy4kcmVmc1tzZWxlY3RlZF0uY2hpbGRyZW5cbiAgICAgICAgICB0aGlzW3NlbGVjdGVkXSA9XG4gICAgICAgICAgICB2YWx1ZSA8IDAgPyB2YWx1ZSArIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZSA+PSBsZW5ndGggPyB2YWx1ZSAtIGxlbmd0aFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yIHx8IHZlciB8fCBlbnRlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWRhdGUtdGltZS1waWNrZXIoXG4gIHJlZj1cInBpY2tlclwiXG4pXG4gIC5kaXRvLXBpY2tlcnMoXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiXG4gIClcbiAgICBkYXRlLXBpY2tlcihcbiAgICAgIHJlZj1cImRhdGVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICBAZm9jdXM9XCJkYXRlRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJkYXRlRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgKVxuICAgIHRpbWUtcGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIDpzaG93LnN5bmM9XCJzaG93VGltZVwiXG4gICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihcbiAgICByZWY9XCJwaWNrZXJcIlxuICApXG4gICAgLmRpdG8tcGlja2VycyhcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgIClcbiAgICAgIGRhdGUtcGlja2VyKFxuICAgICAgICByZWY9XCJkYXRlXCJcbiAgICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICAgIDpzaG93LnN5bmM9XCJzaG93RGF0ZVwiXG4gICAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICAgIEBibHVyPVwiZGF0ZUZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2Vob2xkZXIsIGxvY2FsZSwgZGF0ZUZvcm1hdCwgZGlzYWJsZWQgfVwiXG4gICAgICApXG4gICAgICB0aW1lLXBpY2tlcihcbiAgICAgICAgcmVmPVwidGltZVwiXG4gICAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgICA6c2hvdy5zeW5jPVwic2hvd1RpbWVcIlxuICAgICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgICBAYmx1cj1cInRpbWVGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIGRpc2FibGVkIH1cIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWRhdGUtdGltZS1waWNrZXJcbiAgICAuZGl0by1waWNrZXJzXG4gICAgICBAZXh0ZW5kICVpbnB1dFxuICAgICAgcGFkZGluZzogMFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAuZGl0by1kYXRlLXBpY2tlclxuICAgICAgd2lkdGg6IDYwJVxuICAgICAgbWluLXdpZHRoOiA2LjllbVxuICAgICAgLmRpdG8taW5wdXRcbiAgICAgICAgcGFkZGluZy1yaWdodDogMFxuICAgIC5kaXRvLXRpbWUtcGlja2VyXG4gICAgICB3aWR0aDogNDAlXG4gICAgICBtaW4td2lkdGg6IDUuNGVtXG4gICAgICAuZGl0by1pbnB1dFxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDBcbiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWZhdWx0Rm9ybWF0cyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGF0ZVBpY2tlciBmcm9tICcuL0RhdGVQaWNrZXIudnVlJ1xuaW1wb3J0IFRpbWVQaWNrZXIgZnJvbSAnLi9UaW1lUGlja2VyLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBkYXRlRm9jdXNlZDogZmFsc2UsXG4gICAgICB0aW1lRm9jdXNlZDogZmFsc2UsXG4gICAgICBjaGFuZ2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvY3VzZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlRm9jdXNlZCB8fCB0aGlzLnRpbWVGb2N1c2VkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICgrbmV3VmFsICE9PSArb2xkVmFsKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBkYXRlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoIW5ld1ZhbCAhPT0gIW9sZFZhbCkge1xuICAgICAgICB0aGlzLiRlbWl0KG5ld1ZhbCA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2JsdXInLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuJHJlZnMuZGF0ZS5ibHVyKClcbiAgICAgIHRoaXMuJHJlZnMudGltZS5ibHVyKClcbiAgICB9XG4gIH1cbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBgeWFybiBidWlsZDppY29uc2AgY29udmVydHMgdGhlIGljb24gU1ZHIGZpbGVzIHRvIHNpbGVudCBjbGFzc2VzIGluc2lkZVxuICAvLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNhc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3NcbiAgLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4gIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gYXMgbm9ybWFsIENTUyBjbGFzc2VzLCBjb252ZXJ0IHRoZW0gaGVyZTpcbiAgQGVhY2ggJG5hbWUgaW4gJGljb25zXG4gICAgLmRpdG8taWNvbi0jeyRuYW1lfVxuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhZ2luYXRpb24oXG4gIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuKVxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsKFxuICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICApXG4gICAgdGVtcGxhdGUodi1pZj1cInRvdGFsID4gMFwiKSB7eyBmaXJzdCB9fSDigJMge3sgbGFzdCB9fVxuICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgIHwgIC8ge3sgdG90YWwgfX1cbiAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWZvcj1cInBhZ2UgaW4gcGFnZVJhbmdlXCJcbiAgICAgIEBjbGljaz1cIm9uQ2xpY2tQYWdlKHBhZ2UpXCJcbiAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJwYWdlLmRpc2FibGVkXCJcbiAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWlmPVwicGFnZS50ZXh0XCJcbiAgICAgICkge3sgcGFnZS50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYWdpbmF0aW9uKFxuICAgIHYtaWY9XCJudW1QYWdlcyA+IDFcIlxuICApXG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbChcbiAgICAgIHYtaWY9XCJzaG93VG90YWxcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKHYtaWY9XCJ0b3RhbCA+IDBcIikge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICAgIHRlbXBsYXRlKHYtZWxzZSkgMFxuICAgICAgfCAgLyB7eyB0b3RhbCB9fVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrUGFnZShwYWdlKVwiXG4gICAgICAgIDpjbGFzcz1cImdldFBhZ2VDbGFzcyhwYWdlKVwiXG4gICAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgKVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgICApIHt7IHBhZ2UudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhZ2luYXRpb25cbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnaW5hdGlvbi10b3RhbFxuICAgICAgK2VsbGlwc2lzXG4gICAgICBtYXJnaW46IDAgMC41ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2UsIGNvbG9yIDBzLCBiYWNrZ3JvdW5kIDBzLCBib3JkZXIgMHNcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgIHBhZGRpbmc6IDAgMC41ZW1cbiAgICAgICYtcHJldixcbiAgICAgICYtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93XG4gICAgICAmLXByZXY6OmJlZm9yZVxuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSlcbiAgICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAgICYtZWxsaXBzaXMtbmV4dFxuICAgICAgICAmOjpiZWZvcmVcbiAgICAgICAgICBAZXh0ZW5kICVpY29uLWVsbGlwc2lzXG4gICAgICAgICY6aG92ZXI6OmJlZm9yZVxuICAgICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnNcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICAgICY6Zm9jdXNcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICAmOmFjdGl2ZVxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmVcbiAgICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlXG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgICB0aGlzLiRlbWl0KCdzaXplLWNoYW5nZScsIHRoaXMucGFnZSwgY3VycmVudFBhZ2VTaXplKVxuICAgIH0sXG5cbiAgICBjdXJyZW50UGFnZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnBhZ2UnLCBuZXdWYWwpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZVxuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrUGFnZShwYWdlKSB7XG4gICAgICBpZiAocGFnZS5pbmRleCAmJiAhcGFnZS5kaXNhYmxlZCAmJiBwYWdlLmluZGV4ICE9PSB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlLmluZGV4XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFBhZ2VDbGFzcyhwYWdlKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICAnZGl0by1zZWxlY3RlZCc6IHBhZ2UuYWN0aXZlXG4gICAgICB9XG4gICAgICBpZiAocGFnZS50eXBlKSB7XG4gICAgICAgIGNsYXNzZXNbYGRpdG8tYnV0dG9uLSR7cGFnZS50eXBlfWBdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgdXBkYXRlUGFnZVJhbmdlKCkge1xuICAgICAgY29uc3QgeyBzaG93UHJldiwgc2hvd05leHQsIHRvdGFsLCBjdXJyZW50UGFnZVNpemUsIGN1cnJlbnRQYWdlIH0gPSB0aGlzXG4gICAgICBjb25zdCBzaG93TGVuZ3RoID0gc2hvd1ByZXYgKyBzaG93TmV4dCArIDFcbiAgICAgIGNvbnN0IG51bVBhZ2VzID0gdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0b3RhbCAvIGN1cnJlbnRQYWdlU2l6ZSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zd2l0Y2goXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBpbnB1dChcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgICAgdi1pZj1cImxhYmVsc1wiXG4gICAgICApXG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1pZj1cImNoZWNrZWRcIlxuICAgICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICAgIHNsb3QoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICAgICkge3sgbGFiZWxzLnVuY2hlY2tlZCB8fCAnb2ZmJyB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC8vIFVzZSB3aG9sZSBtdWx0aXBsZXMgb2YgYHJlbWAgZm9yIHNpemVzIGFuZCBgcHhgIG1hcmdpbnMvcGFkZGluZyBhbG9uZ1xuICAgIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy4gYHJlbWAgaXMgbmVlZGVkIGJlY2F1c2Ugd2VcbiAgICAvLyBjaGFuZ2UgYGZvbnQtc2l6ZWAgaW5zaWRlIGAuZGl0by1zd2l0Y2gtYnV0dG9uYFxuICAgIC0tc3dpdGNoLXdpZHRoOiA0cmVtXG4gICAgLS1zd2l0Y2gtaGVpZ2h0OiAycmVtXG4gICAgLS1zd2l0Y2gtbWFyZ2luOiAycHhcbiAgICAtLXN3aXRjaC1wYWRkaW5nOiAzcHhcbiAgICAtLXN3aXRjaC1zcGVlZDogMzAwbXNcbiAgICAtLWxhYmVsLW1hcmdpbjogMC41ZW1cblxuICAgIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSlcbiAgICAtLW9mZnNldDogY2FsYyh2YXIoLS13aWR0aCkgLSB2YXIoLS1oZWlnaHQpKVxuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgaGVpZ2h0OiB2YXIoLS1zd2l0Y2gtaGVpZ2h0KVxuICAgIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTI1JVxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIHdpZHRoOiB2YXIoLS13aWR0aClcbiAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KVxuICAgIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgdG9wOiA1MCVcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKVxuICAgIGlucHV0XG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0XG4gICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjNzLCBiYWNrZ3JvdW5kLWNvbG9yIC4zc1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b25cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgLy8gU2V0IGZvbnQtc2l6ZSB0byBoZWlnaHQsIHNvIHdlIGNhbiB1c2Ugd2lkdGgvaGVpZ2h0ID0gMWVtIGZvciBjaXJjbGU6XG4gICAgICBmb250LXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpXG4gICAgICB0b3A6IHZhcigtLXN3aXRjaC1wYWRkaW5nKVxuICAgICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuICAgICAgYm9yZGVyLXJhZGl1czogMC41ZW1cbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZClcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKVxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24sXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICByaWdodDogdmFyKC0tbGFiZWwtbWFyZ2luKVxuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZVxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICYuZGl0by1jaGVja2VkXG4gICAgICBpbnB1dFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCh2YXIoLS1vZmZzZXQpKVxuICAgICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbilcbiAgICAgICAgcmlnaHQ6IHVuc2V0XG4gICAgJi5kaXRvLWRpc2FibGVkXG4gICAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWRcbiAgICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKVxuICAgICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm9wczoge1xuICAgIHZhbHVlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsczogeyB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoZWNrZWQ6IHRoaXMudmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjaGVja2VkLCBkaXNhYmxlZCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgY29uc3QgeyBsYWJlbHM6IHsgY2hlY2tlZCwgdW5jaGVja2VkIH0gPSB7fSB9ID0gdGhpc1xuICAgICAgLy8gQ2FsY3VsYXRlIGAtLXN3aXRjaC13aWR0aGAgaW4gYHJlbWAsIGJhc2VkIG9uIGxhYmVsIGxlbmd0aC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KDAsIGNoZWNrZWQ/Lmxlbmd0aCwgdW5jaGVja2VkPy5sZW5ndGgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zd2l0Y2gtd2lkdGgnOiBsZW5ndGggPyBgJHtsZW5ndGggKiAxLjV9cmVtYCA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXR0cmlidXRlcygpIHtcbiAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIGRpc2FibGVkLCAkYXR0cnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7IGlkLCBuYW1lLCBkaXNhYmxlZCwgLi4uJGF0dHJzIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJGR1cmF0aW9uOiAwLjE1c1xuICAuaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbiAgLmhlaWdodC1sZWF2ZS1hY3RpdmVcbiAgICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgICBvdmVyZmxvdzogaGlkZGVuXG4gIC5oZWlnaHQtZW50ZXItYWN0aXZlXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2VPdXRRdWFydFxuICAuaGVpZ2h0LWxlYXZlLWFjdGl2ZVxuICAgIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlT3V0UXVhcnRcbiAgLmhlaWdodC1lbnRlcixcbiAgLmhlaWdodC1sZWF2ZS10b1xuICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcblxuICBwcm9wczoge1xuICAgIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgcmVuZGVyOiAoY3JlYXRlRWxlbWVudCwgY29udGV4dCkgPT4gY3JlYXRlRWxlbWVudChcbiAgICAndHJhbnNpdGlvbicsXG4gICAgY29udGV4dC5wcm9wcy5lbmFibGVkXG4gICAgICA/IHtcbiAgICAgICAgcHJvcHM6IHsgbmFtZTogJ2hlaWdodCcgfSxcbiAgICAgICAgb246IGV2ZW50c1xuICAgICAgfVxuICAgICAgOiB7fSxcbiAgICBjb250ZXh0LmNoaWxkcmVuXG4gIClcbn1cblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgZXZlbnRzID0ge1xuICBhZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVwb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgZW50ZXIoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgd2lkdGggfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgIH0pXG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICB3aWR0aDogbnVsbCxcbiAgICAgIHBvc2l0aW9uOiBudWxsLFxuICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgIGhlaWdodDogMFxuICAgIH0pXG4gICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgc2V0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgfSxcblxuICBsZWF2ZShlbGVtZW50KSB7XG4gICAgY29uc3QgeyBoZWlnaHQgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcbiAgICBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KVxuICAgIGZvcmNlUmVwYWludChlbGVtZW50KVxuICAgIHNldFRpbWVvdXQoKCkgPT4gc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQ6IDAgfSkpXG4gIH1cbn1cbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbInBpY2siLCJpc0RhdGUiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiaHlwaGVuYXRlIiwiaXNTdHJpbmciLCJkZWZhdWx0Rm9ybWF0cyIsImZvcm1hdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxtQ0FBaUMsSUFBSTtBQUMxQyxVQUFNLE1BQU07QUFDWixVQUFNLE1BQU07QUFDWixVQUFNLE9BQU8sSUFBSTtBQUVqQixRQUFJLFVBQVUsSUFBSSxnQkFBZ0IsU0FBWSxJQUFJ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Z0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzRDdkIsUUFBQUMsa0JBQUE7QUFBQSxJQUNBLE9BQUE7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLE1BQUEsU0FBQSxLQUFBO0FBQUEsTUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsUUFBQTtBQUFBLE1BQ0EsY0FBQSxFQUFBLE1BQUEsVUFBQSxTQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsWUFBQSxFQUFBLGNBQUEsZUFBQSxlQUFBLEtBQUEsTUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsV0FBQSxDQUFBO0FBQUEsUUFDQSxXQUFBLENBQUE7QUFBQSxRQUNBLGNBQ0EsS0FBQSxTQUVBLFNBQUEsSUFBQSxLQUFBLEdBQUEsRUFBQSxNQUFBLEdBQUEsUUFBQSxHQUFBLFFBQUEsR0FBQTtBQUFBLFFBQ0EsYUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUVBLE1BQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBLFVBQUEsSUFBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLEtBQUEsTUFBQTtBQUNBLGFBQUEsY0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxnQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLGNBQUEsT0FBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLDZCQUNBLEtBQUEsU0FBQSxVQUFBLEtBQUEsTUFBQSxTQUFBLEtBQ0EsS0FBQSxhQUFBLFlBQUEsTUFBQSxLQUFBLE1BQUEsWUFBQTtBQUFBLFVBQ0EsOEJBQ0EsVUFBQSxLQUFBLGFBQUEsU0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBLE1BQUE7QUFDQSxlQUFBO0FBQUEsVUFDQSw2QkFDQSxLQUFBLFNBQUEsU0FBQSxLQUFBLE1BQUEsWUFBQTtBQUFBLFVBQ0EsOEJBQ0EsU0FBQSxLQUFBLGFBQUEsWUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLFdBQUE7QUFDQSxhQUFBLGVBQUEsU0FBQSxLQUFBLGNBQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQTtBQUFBLFVBQ0EsTUFBQSxLQUFBLGFBQUEsWUFBQSxJQUFBLE9BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLE1BQUE7QUFDQSxhQUFBLGNBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBLE1BQUE7QUFDQSxjQUFBLEVBQUEsaUJBQUE7QUFDQSxjQUFBLEVBQUEsTUFBQSxVQUFBLEtBQUEsYUFDQSxhQUFBLFlBQUEsR0FDQSxhQUFBLFNBQUEsSUFBQSxJQUNBO0FBQ0EsYUFBQSxRQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsS0FBQSxLQUFBLElBQ0EsS0FBQSxZQUFBLE1BQUEsS0FBQSxHQUNBLEtBQUEsYUFBQSxRQUFBLENBQ0E7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxTQUFBLE1BQUE7QUFDQSxhQUFBLFFBQUE7QUFBQSxVQUNBLE1BQUEsS0FBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQSxPQUFBLE9BQUEsT0FBQTtBQUNBLFlBQUEsVUFBQSxZQUFBO0FBQ0EsY0FBQSxNQUFBO0FBQ0EsaUJBQUEsUUFBQTtBQUFBLGNBQ0EsTUFBQSxLQUFBLFlBQUE7QUFBQSxjQUNBLE9BQUEsS0FBQSxTQUFBO0FBQUEsY0FDQSxLQUFBLEtBQUEsUUFBQTtBQUFBLFlBQ0EsQ0FBQTtBQUFBLFVBQ0EsT0FBQTtBQUNBLGlCQUFBLGVBQUE7QUFBQSxVQUNBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFlBQUEsT0FBQTtBQUNBLGFBQUEsUUFBQSxLQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFdBQUEsTUFBQTtBQUNBLGFBQUEsUUFBQSxPQUFBO0FBQ0EsYUFBQSxRQUFBLEVBQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQSxPQUFBO0FBQ0EsWUFBQSxRQUFBLElBQUE7QUFDQTtBQUNBLGtCQUFBO0FBQUEsUUFDQSxXQUFBLFFBQUEsR0FBQTtBQUNBO0FBQ0Esa0JBQUE7QUFBQSxRQUNBO0FBQ0EsZUFBQSxFQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQSxFQUFBLE1BQUEsT0FBQSxPQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQUEsS0FBQSxRQUFBO0FBQUEsVUFDQSxNQUFBLFFBQUE7QUFBQSxVQUNBLE9BQUEsU0FBQTtBQUFBLFVBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsZUFBQSxNQUFBO0FBQ0EsY0FBQSxPQUFBLEtBQUEscUJBQUEsS0FBQSxZQUFBLENBQUE7QUFDQSxlQUFBLEdBQUEsZUFBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsWUFBQSxNQUFBLE9BQUE7QUFDQSxjQUFBLGNBQUEsQ0FBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsSUFBQSxJQUFBLElBQUEsRUFBQTtBQUVBLGVBQUEsVUFBQSxLQUFBLEVBQUEsUUFBQSxRQUFBLENBQUEsUUFBQSxNQUFBLE9BQUEsT0FDQSxLQUNBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxxQkFBQSxNQUFBO0FBQ0EsY0FBQSxVQUFBLEtBQUEsU0FBQTtBQUNBLGVBQUEsQ0FBQSxHQUFBLFFBQUEsTUFBQSxHQUFBLEVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxTQUFBLEVBQUEsS0FBQSxLQUFBLFNBQUE7QUFDQSxjQUFBLEVBQUEsYUFBQSxpQkFBQTtBQUNBLFlBQUEsT0FBQSxLQUFBO0FBQ0Esa0JBQUE7QUFBQSxpQkFDQTtBQUNBLG1CQUFBLFFBQUE7QUFBQSxnQkFDQSxLQUFBLGFBQUEsUUFBQSxJQUFBLE1BQUEsTUFBQTtBQUFBLGNBQ0EsQ0FBQTtBQUNBO0FBQUEsaUJBQ0E7QUFDQSxtQkFBQSxRQUFBO0FBQUEsZ0JBQ0EsT0FBQSxhQUFBLFNBQUEsSUFBQSxNQUFBLE1BQUE7QUFBQSxjQUNBLENBQUE7QUFDQTtBQUFBLGlCQUNBO0FBQ0EsbUJBQUEsUUFBQTtBQUFBLGdCQUNBLE1BQUEsYUFBQSxZQUFBLElBQUEsTUFBQSxNQUFBO0FBQUEsY0FDQSxDQUFBO0FBQ0E7QUFBQTtBQUVBLGlCQUFBO0FBQUEsUUFDQSxXQUFBLE9BQUE7QUFDQSxrQkFBQTtBQUFBLGlCQUNBO0FBQ0EsbUJBQUEsV0FBQSxZQUFBO0FBQ0E7QUFBQSxpQkFDQTtBQUNBLG1CQUFBLFFBQUEsS0FBQTtBQUNBO0FBQUEsaUJBQ0E7QUFDQSxtQkFBQSxRQUFBLE9BQUE7QUFDQTtBQUFBO0FBRUEsaUJBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsa0JBQUE7QUFDQSxhQUFBLFlBQUEsQ0FBQTtBQUNBLGFBQUEsWUFBQSxDQUFBO0FBRUEsY0FBQSxFQUFBLGlCQUFBO0FBQ0EsY0FBQSxPQUFBLGFBQUEsWUFBQTtBQUNBLGNBQUEsUUFBQSxhQUFBLFNBQUE7QUFDQSxjQUFBLFlBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQ0EsaUJBQUEsSUFBQSxHQUFBLElBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxVQUFBLEtBQUEsWUFBQSxDQUFBO0FBQUEsUUFDQTtBQUNBLGNBQUEsb0JBQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUFBO0FBQ0EsWUFBQSxlQUFBLGtCQUFBLE9BQUEsSUFBQTtBQUNBLFlBQUEsaUJBQUEsR0FBQTtBQUNBLHlCQUFBO0FB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QSxNQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsTUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsTUFBQTtBQUFBLE1BQ0EsUUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLFdBQUEsR0FBQSxTQUFBLEtBQUE7QUFBQSxNQUNBLGFBQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsTUFDQSxRQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLE1BQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEtBQUE7QUFBQSxNQUNBLHNCQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsS0FBQTtBQUFBLE1BQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLE1BQUE7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxNQUFBO0FBQUEsTUFDQSxXQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLGdCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUFBLE1BQ0EsZUFBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLHlCQUFBLEtBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsYUFBQTtBQUNBLGNBQUEsVUFBQTtBQUFBLFVBQ0EsQ0FBQSxjQUFBQyxNQUFBLFVBQUEsS0FBQSxTQUFBLE1BQUE7QUFBQSxRQUNBO0FBQ0EsWUFBQSxLQUFBLGFBQUE7QUFDQSxrQkFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBO0FBQ0EsZUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUE7QUFDQSxlQUFBLEtBQUEsU0FBQSxZQUFBLEtBQUEsV0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxLQUFBLE1BQUE7QUFDQSxhQUFBLFlBQUEsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQ0EsY0FBQSxRQUFBO0FBQ0EsaUJBQUEsVUFBQSxNQUFBLEtBQUEsZUFBQSxDQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLFlBQUEsRUFBQSxTQUFBLFVBQUEsS0FBQTtBQUNBLFVBQUEsS0FBQSxZQUFBLFNBQUE7QUFDQSxjQUFBLFNBQUEsUUFBQSxjQUFBLGlCQUFBO0FBQ0EsWUFBQSxRQUFBO0FBQ0EsZUFBQSxjQUFBLFVBQUEsUUFBQTtBQUFBLFlBQ0EsT0FBQSxNQUFBO0FBQ0EsbUJBQUEsWUFBQTtBQUFBLFlBQ0E7QUFBQSxZQUNBLE1BQUEsTUFBQTtBQUNBLG1CQUFBLFlBQUE7QUFBQSxZQUNBO0FBQUEsVUFDQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFFQSxVQUFBLEtBQUEsd0JBQUEsQ0FBQSxLQUFBLFlBQUE7QUFJQSxhQUFBLGNBQUEsVUFBQSxRQUFBO0FBQUEsVUFDQSxTQUFBLFdBQUE7QUFDQSxnQkFDQSxLQUFBLGFBQ0EsQ0FBQSxNQUFBLFNBQUEsTUFBQSxNQUFBLEtBQ0EsQ0FBQSxRQUFBLFNBQUEsTUFBQSxNQUFBLEdBQ0E7QUFDQSxtQkFBQSxZQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUVBLE1BQUEsTUFBQTtBQUNBLGlCQUFBLFlBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQTtBQUVBLFVBQUEsS0FBQSxZQUFBO0FBQ0EsYUFBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLFlBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBOztBQUNBLGlCQUFBLGdCQUFBLG1CQUFBO0FBQ0EsaUJBQUEsZ0JBQUEsbUJBQUE7QUFDQSxXQUFBLGtCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUFBLE1BQ0EsaUJBQUE7QUFDQSxjQUFBLEVBQUEsU0FBQSxVQUFBLEtBQUE7QUFDQSxZQUFBLEtBQUEsUUFBQSxNQUFBLGdCQUFBLEdBQUE7QUFDQSxxQkFBQSxNQUFBLEtBQUEsZUFBQSxHQUFBLENBQUE7QUFDQTtBQUFBLFFBQ0E7QUFFQSxjQUFBLFNBQUFDLE1BQUFBLFNBQUEsS0FBQSxNQUFBLElBQ0EsS0FBQSxNQUFBLEtBQUEsVUFDQSxLQUFBO0FBQ0EsWUFBQSxRQUFBO0FBRUEsZ0JBQUEsS0FBQSxXQUFBLFFBQUEsVUFBQSxNQUFBO0FBQ0EsYUFBQSxNQUFBLFFBQUEsaUJBQUEsTUFBQSxFQUFBO0FBQUEsUUFDQTtBQUVBLGNBQUEsU0FBQSxXQUFBLFNBQUEsc0JBQUE7QUFDQSxjQUFBLGNBQUEsT0FBQSxPQUFBLE9BQUE7QUFDQSxjQUFBLGFBQUEsT0FBQSxNQUFBLE9BQUE7QUFDQSxjQUFBLGVBQUEsT0FBQTtBQUNBLGNBQUEsZ0JBQUEsT0FBQTtBQUNBLGNBQUEsYUFBQSxNQUFBO0FBQ0EsY0FBQSxjQUFBLE1BQUE7QUFFQSxZQUFBLENBQUEsT0FBQSxTQUFBLEtBQUEsZUFBQSxNQUFBLEdBQUEsS0FBQSxDQUFBO0FBQ0EsWUFBQSxLQUFBLFlBQUE7QUFDQSxnQkFBQSxXQUFBLE9BQUE7QUFDQSxnQkFBQSxZQUFBLE9BQUE7QUFDQSxjQUFBLFVBQUEsT0FBQTtBQUNBLGdCQUFBLGFBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFVBQUE7QUFDQSxnQkFBQSxZQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxnQkFBQSxjQUFBLFlBQUE7QUFDQSxzQkFBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLFdBQUEsVUFBQSxTQUFBO0FBQ0EsZ0JBQUEsV0FBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFFQSxjQUFBLFVBQUEsT0FBQTtBQUNBLGdCQUFBLFlBQUEsYUFBQSxhQUFBO0FBQ0Esc0JBQUE7QUFBQSxZQUNBO0FBQUEsVUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLGdCQUFBLGFBQUEsZ0JBQUEsYUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFFBQUE7QUFDQSxnQkFBQSxXQUFBLGNBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsV0FBQSxVQUFBLFNBQUE7QUFDQSxnQkFBQSxjQUFBLGVBQUEsWUFBQTtBQUNBLHNCQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBRUEsWUFBQSxPQUFBO0FBQ0EsWUFBQSxNQUFBO0FBQ0EsZ0JBQUE7QUFBQSxlQUNBO0FBQ0EsbUJBQUE7QUFDQTtBQUFBLGVBQ0E7QUFDQSxvQkFBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLG9CQUFBO0FBQ0E7QUFBQSxlQUNBO0FBQ0EsbUJBQUE7QUFDQTtBQUFBO0FBRUEsZ0JBQUE7QUFBQSxlQUNBO0FBQ0Esb0JBQUEsYUFBQTtBQUNBO0FBQUEsZUFDQTtBQUNBLG1CQUFBLGNBQUE7QUFDQTtBQUFBO0FBRUEsWUFBQSxLQUFBLE9BQUE7QUFDQSxjQUFBLFVBQUEsT0FBQTtBQUNBLG1CQUFBO0FBQUEsVUFDQSxXQUFBLFVBQUEsVUFBQTtBQUNBLG1CQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLFVBQUEsV0FBQSxTQUFBO0FBQ0EsZ0JBQUEsZ0JBQUEsUUFBQSxzQkFBQTtBQUNBLGtCQUFBLGNBQUEsY0FBQTtBQUNBLGlCQUFBLGFBQUEsY0FBQTtBQUFBLFFBQ0E7QUFDQSxjQUFBLE1BQUEsT0FBQSxHQUFBO0FBQ0EsY0FBQSxNQUFBLE1BQUEsR0FBQTtBQUVBLGFBQUEsTUFBQSxtQkFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBO0FBQ0EsWUFBQSxDQUFBLEtBQUEsVUFBQTtB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QUFBLFFBQ0EsVUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxhQUFBO0FBQ0EsY0FBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxZQUNBO0FBQ0EsZUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsR0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxZQUFBO0FBR0EsY0FBQSxFQUFBLFVBQUEsY0FBQSxLQUFBO0FBQ0EsZUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLE9BQUE7QUFFQSxjQUFBLEVBQUEsTUFBQSxLQUFBLFFBQUEsS0FBQTtBQUNBLGNBQUEsWUFBQSxXQUFBLFNBQUEsT0FBQSxHQUFBLFFBQUEsU0FBQTtBQUNBLGVBQUEsUUFBQSxVQUFBLEdBQUEsS0FBQSxVQUFBLEdBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxLQUFBLE9BQUE7QUFDQSxlQUFBLE1BQUEsU0FBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBO0FBQUEsTUFDQSxRQUFBO0FBQ0EsYUFBQSxNQUFBLE1BQUEsTUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLE9BQUE7QUFDQSxhQUFBLE1BQUEsTUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7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QUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLGdCQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxjQUFBO0FBQ0EsZUFBQUMsTUFBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLFVBQ0EsUUFBQSxLQUFBO0FBQUEsVUFDQSxNQUFBLEtBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsQ0FBQSxXQUFBLENBQUEsUUFBQTtBQUNBLGVBQUEsZUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBLE1BQUE7QUFDQSxZQUFBLENBQUEsU0FBQSxDQUFBLEtBQUEsT0FBQTtBQUNBLGVBQUEsVUFBQTtBQUNBLGVBQUEsTUFBQSxTQUFBLElBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsS0FBQSxNQUFBO0FBQ0EsYUFBQSxZQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsVUFBQSxRQUFBLFFBQUE7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFlBQUEsS0FBQSxTQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFdBQUEsTUFBQTtBQUNBLGFBQUEsZUFBQTtBQUNB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QSxjQUFBO0FBQ0EsZUFBQSxLQUFBLGVBQ0EsR0FDQSxLQUFBLFFBQUEsS0FBQSxJQUFBLEtBQ0EsS0FBQSxRQUFBLEtBQUEsTUFBQSxLQUNBLEtBQUEsUUFBQSxLQUFBLE1BQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGNBQUE7QUFDQSxlQUNBLEtBQUEsZ0JBSUEsU0FBQSxJQUFBLEtBQUEsR0FBQSxFQUFBLE1BQUEsR0FBQSxRQUFBLEdBQUEsUUFBQSxHQUFBO0FBQUEsTUFFQTtBQUFBLE1BRUEsTUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUNBLGlCQUFBLEtBQUEsWUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLFFBRUEsSUFBQSxNQUFBO0FBQ0EsZUFBQSxRQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBO0FBQUEsUUFDQSxNQUFBO0FBQ0EsaUJBQUEsS0FBQSxZQUFBLFdBQUE7QUFBQSxRQUNBO0FBQUEsUUFFQSxJQUFBLFFBQUE7QUFDQSxlQUFBLFFBQUEsRUFBQSxRQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUE7QUFBQSxRQUNBLE1BQUE7QUFDQSxpQkFBQSxLQUFBLFlBQUEsV0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLElBQUEsUUFBQTtBQUNBLGVBQUEsUUFBQSxFQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLE1BQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxlQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQTtBQUNBLFlBQUEsQ0FBQSxTQUFBLENBQUEsS0FBQSxPQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsSUFBQTtBQUNBLGVBQUEsVUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBO0FBQUEsTUFFQSxhQUFBO0FBQUEsTUFFQSxXQUFBO0FBQUEsTUFFQSxLQUFBLE1BQUE7QUFDQSxhQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxVQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsUUFBQTtBQUNBLGVBQUEsZ0JBQUE7QUFDQSxlQUFBLFVBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLENBQUEsV0FBQSxDQUFBLFFBQUE7QUFDQSxlQUFBLE1BQUEsZUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsUUFBQSxRQUFBO0FBQ0EsWUFBQSxDQUFBLFdBQUEsQ0FBQSxRQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsVUFBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsV0FBQSxJQUFBLFFBQUEsTUFBQTtBQUNBLFlBQUEsS0FBQSxTQUFBO0FBQ0EsZUFBQSxVQUFBO0FBQ0EsZUFBQSxNQUFBLFVBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFFBQUEsT0FBQTtBQUNBLGVBQUEsT0FBQSxPQUFBLE1BQUEsRUFBQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFFBQUEsT0FBQTtBQUNBLGFBQUEsZUFBQSxTQUFBLEtBQUEsYUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsZ0JBQUEsUUFBQSxPQUFBO0FBQ0EsWUFBQSxLQUFBLGFBQUEsT0FBQTtBQUNBLGdCQUFBLFFBQUEsSUFBQSxLQUFBO0FBQ0EsZUFBQSxVQUFBLE1BQUEsYUFBQSxLQUFBLE1BQUEsT0FBQSxPQUFBLFFBQUEsQ0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLFVBQUEsV0FBQSxLQUFBO0FBQ0EsY0FBQSxTQUFBLENBQUEsS0FBQSxVQUFBO0FBQ0EsZ0JBQUEsU0FBQSxLQUFBLE1BQUE7QUFDQSxjQUFBLFFBQUE7QUFFQSxrQkFBQSxhQUFBLE9BQUEsZUFBQSxRQUFBLFNBQUEsU0FBQTtBQUNBLHFCQUFBLFFBQUEsS0FB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QUFBLFVBQUE7QUFDQSxlQUFBLGNBQUEsS0FBQTtBQUFBLFFBQ0E7QUFDQSxhQUFBLGdCQUFBO0FBQ0EsYUFBQSxNQUFBLGVBQUEsS0FBQSxNQUFBLGVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxZQUFBLFFBQUEsUUFBQTtBQUNBLFlBQUEsV0FBQSxRQUFBO0FBQ0EsZUFBQSxnQkFBQTtBQUNBLGVBQUEsTUFBQSxlQUFBLE1BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLGNBQUEsS0FBQTtBQUNBLFdBQUEsa0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxXQUFBLGdCQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUFBLE1BQ0EsWUFBQSxNQUFBO0FBQ0EsWUFBQSxLQUFBLFNBQUEsQ0FBQSxLQUFBLFlBQUEsS0FBQSxVQUFBLEtBQUEsYUFBQTtBQUNBLGVBQUEsY0FBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUVBLGFBQUEsTUFBQTtBQUNBLGNBQUEsVUFBQTtBQUFBLFVBQ0EsaUJBQUEsS0FBQTtBQUFBLFFBQ0E7QUFDQSxZQUFBLEtBQUEsTUFBQTtBQUNBLGtCQUFBLGVBQUEsS0FBQSxVQUFBO0FBQUEsUUFDQTtBQUNBLGVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxrQkFBQTtBQUNBLGNBQUEsRUFBQSxVQUFBLFVBQUEsT0FBQSxpQkFBQSxnQkFBQTtBQUNBLGNBQUEsYUFBQSxXQUFBLFdBQUE7QUFDQSxjQUFBLFdBQUEsS0FBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQUE7QUFFQSxZQUFBLFFBQUE7QUFDQSxZQUFBLE1BQUE7QUFDQSxZQUFBLFlBQUEsWUFBQTtBQUNBLGdCQUFBO0FBQUEsUUFDQSxXQUFBLGVBQUEsV0FBQSxHQUFBO0FBQ0EsZ0JBQUE7QUFBQSxRQUNBLFdBQUEsZUFBQSxXQUFBLFVBQUE7QUFDQSxnQkFBQTtBQUNBLGtCQUFBLFdBQUEsYUFBQTtBQUFBLFFBQ0EsT0FB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QSxNQUFBO0FBRUEsY0FBQSxTQUFBLEtBQUEsSUFBQSxHQUFBLG1DQUFBLFFBQUEsdUNBQUEsTUFBQTtBQUNBLGVBQUE7QUFBQSxVQUNBLGtCQUFBLFNBQUEsR0FBQSxTQUFBLFdBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLE1BRUEsYUFBQTtBQUNBLGNBQUEsRUFBQSxJQUFBLE1BQUEsVUFBQSxXQUFBO0FBQ0EsZUFBQSxFQUFBLElBQUEsTUFBQSxVQUFBLEdBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQUEsTUFDQSxNQUFBLE9BQUE7QUFDQSxhQUFBLFVBQUE7QUFBQSxNQUNBO0FBQUEsTUFFQSxRQUFBLFNBQUE7QUFDQSxZQUFBLFlBQUEsS0FBQSxPQUFBO0FBQ0EsZUFBQSxNQUFBLFNBQUEsT0FBQTtBQUNBLGVBQUEsTUFBQSxVQUFBLE9BQUE7QUFBQSxRQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFBQSxNQUNBLFFBQUE7QUFDQSxhQUFBLE1BQUEsTUFBQSxNQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7O0FDOUlBLFFBQUEsZ0JBQUE7QUFBQSxJQUNBLFlBQUE7QUFBQSxJQUVBLE9BQUE7QUFBQSxNQUNBLFNBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxDQUFBLGVBQUEsWUFBQSxjQUNBLGNBQ0EsUUFBQSxNQUFBLFVBQ0E7QUFBQSxNQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxNQUNBLElBQUE7QUFBQSxJQUNBLElBQ0EsQ0FBQSxHQUNBLFFBQUEsUUFDQTtBQUFBLEVBQ0E7QUFFQSxRQUFBLFdBQUEsQ0FBQSxTQUFBLFVBQUEsT0FBQSxPQUFBLFFBQUEsT0FBQSxLQUFBO0FBR0EsUUFBQSxlQUFBLGFBQUEsaUJBQUEsT0FBQSxFQUFBO0FBRUEsUUFBQSxTQUFBO0FBQUEsSUFDQSxXQUFBLFNBQUE7QUFJQSxpQkFBQSxNQUFBLFNBQUEsU0FBQSxFQUFBLFFBQUEsT0FBQSxDQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFNBQUE7QUFDQSxZQUFBLEVBQUEsVUFBQSxpQkFBQSxPQUFBO0FBQ0EsZUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFFBQ0EsUUFBQTtBQUFBLE1BQ0EsQ0FBQTtBQUNBLFlBQUEsRUFBQSxXQUFBLGlCQUFBLE9BQUE7QUFDQSxlQUFBLFNBQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLFVBQUE7QUFBQSxRQUNBLFlBQUE7QUFBQSxRQUNBLFFBQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxtQkFBQSxPQUFBO0FBQ0EsaUJBQUEsTUFBQSxTQUFBLFNBQUEsRUFBQSxPQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLFlBQUEsRUFBQSxXQUFBLGlCQUFBLE9BQUE7QUFDQSxlQUFBLFNBQUEsRUFBQSxRQUFBO0FBQ0EsbUJBQUEsT0FBQTtBQUNBLGlCQUFBLE1BQUEsU0FBQSxTQUFBLEVBQUEsUUFBQSxFQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxFQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=